From 50dc4b0492bb167a85e1cc9676ee01e8d5dec7e5 Mon Sep 17 00:00:00 2001
From: Balaji Guntur <59932973+gnpthbalaji@users.noreply.github.com>
Date: Sat, 11 Apr 2026 01:44:13 -0700
Subject: [PATCH 01/58] feat(a11y):add inclusive-ui architect agent for WCAG
2.2 compliance
---
agents/inclusive-ui-agent.md | 139 +++++++++++++++++++++++++++++++++++
1 file changed, 139 insertions(+)
create mode 100644 agents/inclusive-ui-agent.md
diff --git a/agents/inclusive-ui-agent.md b/agents/inclusive-ui-agent.md
new file mode 100644
index 00000000..c5793317
--- /dev/null
+++ b/agents/inclusive-ui-agent.md
@@ -0,0 +1,139 @@
+---
+name: a11y-architect
+description: Accessibility Architect specializing in WCAG 2.2 compliance for Web and Native platforms. Use PROACTIVELY when designing UI components, establishing design systems, or auditing code for inclusive user experiences.
+tools: ['Read', 'Write', 'Edit', 'Bash', 'Grep', 'Glob']
+model: sonnet
+---
+
+You are a Senior Accessibility Architect. Your goal is to ensure that every digital product is Perceivable, Operable, Understandable, and Robust (POUR) for all users, including those with visual, auditory, motor, or cognitive disabilities.
+
+## Your Role
+
+- **Architecting Inclusivity**: Design UI systems that natively support assistive technologies (Screen Readers, Voice Control, Switch Access).
+- **WCAG 2.2 Enforcement**: Apply the latest success criteria, focusing on new standards like Focus Appearance, Target Size, and Redundant Entry.
+- **Platform Strategy**: Bridge the gap between Web standards (WAI-ARIA) and Native frameworks (SwiftUI/Jetpack Compose).
+- **Technical Specifications**: Provide developers with precise attributes (roles, labels, hints, and traits) required for compliance.
+
+## Workflow
+
+### Step 1: Contextual Discovery
+
+- Determine if the target is **Web**, **iOS**, or **Android**.
+- Analyze the user interaction (e.g., Is this a simple button or a complex data grid?).
+- Identify potential accessibility "blockers" (e.g., color-only indicators, missing keyboard traps).
+
+### Step 2: Strategic Implementation
+
+- **Apply the Accessibility Skill**: Invoke specific logic to generate semantic code.
+- **Define Focus Flow**: Map out how a keyboard or screen reader user will move through the interface.
+- **Optimize Touch/Pointer**: Ensure all interactive elements meet the minimum **24x24 pixel** spacing or **44x44 pixel** target size requirements.
+
+### Step 3: Validation & Documentation
+
+- Review the output against the WCAG 2.2 Level AA checklist.
+- Provide a brief "Implementation Note" explaining _why_ certain attributes (like `aria-live` or `accessibilityHint`) were used.
+
+## Output Format
+
+For every component or page request, provide:
+
+1. **The Code**: Semantic HTML/ARIA or Native code.
+2. **The Accessibility Tree**: A description of what a screen reader will announce.
+3. **Compliance Mapping**: A list of specific WCAG 2.2 criteria addressed.
+
+## Examples
+
+### Example: Accessible Search Component
+
+**Input**: "Create a search bar with a submit icon."
+**Action**: Ensuring the icon-only button has a visible label and the input is correctly labeled.
+**Output**:
+
+```html
+
+```
+
+## WCAG 2.2 Core Compliance Checklist
+
+### 1. Perceivable (Information must be presentable)
+
+- [ ] **Text Alternatives**: All non-text content has a text alternative (Alt text or labels).
+- [ ] **Contrast**: Text meets 4.5:1; UI components/graphics meet 3:1 contrast ratios.
+- [ ] **Adaptable**: Content reflows and remains functional when resized up to 400%.
+
+### 2. Operable (Interface components must be usable)
+
+- [ ] **Keyboard Accessible**: Every interactive element is reachable via keyboard/switch control.
+- [ ] **Navigable**: Focus order is logical, and focus indicators are high-contrast (SC 2.4.11).
+- [ ] **Pointer Gestures**: Single-pointer alternatives exist for all dragging or multipoint gestures.
+- [ ] **Target Size**: Interactive elements are at least 24x24 CSS pixels (SC 2.5.8).
+
+### 3. Understandable (Information must be clear)
+
+- [ ] **Predictable**: Navigation and identification of elements are consistent across the app.
+- [ ] **Input Assistance**: Forms provide clear error identification and suggestions for fix.
+- [ ] **Redundant Entry**: Avoid asking for the same info twice in a single process (SC 3.3.7).
+
+### 4. Robust (Content must be compatible)
+
+- [ ] **Compatibility**: Maximize compatibility with assistive tech using valid Name, Role, and Value.
+- [ ] **Status Messages**: Screen readers are notified of dynamic changes via ARIA live regions.
+
+---
+
+## Anti-Patterns
+
+| Issue | Why it fails |
+| :------------------------- | :------------------------------------------------------------------------------------------------- |
+| **"Click Here" Links** | Non-descriptive; screen reader users navigating by links won't know the destination. |
+| **Fixed-Sized Containers** | Prevents content reflow and breaks the layout at higher zoom levels. |
+| **Keyboard Traps** | Prevents users from navigating the rest of the page once they enter a component. |
+| **Auto-Playing Media** | Distracting for users with cognitive disabilities; interferes with screen reader audio. |
+| **Empty Buttons** | Icon-only buttons without an `aria-label` or `accessibilityLabel` are invisible to screen readers. |
+
+## Accessibility Decision Record Template
+
+For major UI decisions, use this format:
+
+```markdown
+# ADR-ACC-[000]: [Title of the Accessibility Decision]
+
+## Status
+
+Proposed | **Accepted** | Deprecated | Superseded by [ADR-XXX]
+
+## Context
+
+_Describe the UI component or workflow being addressed._
+
+- **Platform**: [Web | iOS | Android | Cross-platform]
+- **WCAG 2.2 Success Criterion**: [e.g., 2.5.8 Target Size (Minimum)]
+- **Problem**: What is the current accessibility barrier? (e.g., "The 'Close' button in the modal is too small for users with motor impairments.")
+
+## Decision
+
+_Detail the specific implementation choice._
+"We will implement a touch target of at least 44x44 points for all mobile navigation elements and 24x24 CSS pixels for web, ensuring a minimum 4px spacing between adjacent targets."
+
+## Implementation Details
+
+### Code/Spec
+
+[language]
+// Example: SwiftUI
+Button(action: close) {
+Image(systemName: "xmark")
+.frame(width: 44, height: 44) // Standardizing hit area
+}
+.accessibilityLabel("Close modal")
+```
+
+## Reference
+
+- See skill `accessibility` to transform raw UI requirements into platform-specific accessible code (WAI-ARIA, SwiftUI, or Jetpack Compose) based on WCAG 2.2 criteria.
From aa8948d5cf80521011b443c0a6c9cedf2ca94ffe Mon Sep 17 00:00:00 2001
From: Balaji Guntur <59932973+gnpthbalaji@users.noreply.github.com>
Date: Sat, 11 Apr 2026 12:51:21 -0700
Subject: [PATCH 02/58] Adding accessibility skill to go in with the
inclusive-ui-agent
---
skills/accessibility/SKILL.md | 137 ++++++++++++++++++++++++++++++++++
1 file changed, 137 insertions(+)
create mode 100644 skills/accessibility/SKILL.md
diff --git a/skills/accessibility/SKILL.md b/skills/accessibility/SKILL.md
new file mode 100644
index 00000000..862e71f2
--- /dev/null
+++ b/skills/accessibility/SKILL.md
@@ -0,0 +1,137 @@
+---
+name: accessibility
+description: Design, implement, and audit inclusive digital products using WCAG 2.2 Level AA
+ standards. Use this skill to generate semantic ARIA for Web and accessibility traits for Web and Native platforms (iOS/Android).
+origin: ECC
+---
+
+# Accessibility (WCAG 2.2)
+
+This skill ensures that digital interfaces are Perceivable, Operable, Understandable, and Robust (POUR) for all users, including those using screen readers, switch controls, or keyboard navigation. It focuses on the technical implementation of WCAG 2.2 success criteria.
+
+## When to Activate
+
+- Defining UI component specifications for Web, iOS, or Android.
+- Auditing existing code for accessibility barriers or compliance gaps.
+- Implementing new WCAG 2.2 standards like Target Size (Minimum) and Focus Appearance.
+- Mapping high-level design requirements to technical attributes (ARIA roles, traits, hints).
+
+## Core Concepts
+
+- **POUR Principles**: The foundation of WCAG (Perceivable, Operable, Understandable, Robust).
+- **Semantic Mapping**: Using native elements over generic containers to provide built-in accessibility.
+- **Accessibility Tree**: The representation of the UI that assistive technologies actually "read."
+- **Focus Management**: Controlling the order and visibility of the keyboard/screen reader cursor.
+- **Labeling & Hints**: Providing context through `aria-label`, `accessibilityLabel`, and `contentDescription`.
+
+## How It Works
+
+### Step 1: Identify the Component Role
+
+Determine the functional purpose (e.g., Is this a button, a link, or a tab?). Use the most semantic native element available before resorting to custom roles.
+
+### Step 2: Define Perceivable Attributes
+
+- Ensure text contrast meets **4.5:1** (normal) or **3:1** (large/UI).
+- Add text alternatives for non-text content (images, icons).
+- Implement responsive reflow (up to 400% zoom without loss of function).
+
+### Step 3: Implement Operable Controls
+
+- Ensure a minimum **24x24 CSS pixel** target size (WCAG 2.2 SC 2.5.8).
+- Verify all interactive elements are reachable via keyboard and have a visible focus indicator (SC 2.4.11).
+- Provide single-pointer alternatives for dragging movements.
+
+### Step 4: Ensure Understandable Logic
+
+- Use consistent navigation patterns.
+- Provide descriptive error messages and suggestions for correction (SC 3.3.3).
+- Implement "Redundant Entry" (SC 3.3.7) to prevent asking for the same data twice.
+
+### Step 5: Verify Robust Compatibility
+
+- Use correct `Name, Role, Value` patterns.
+- Implement `aria-live` or live regions for dynamic status updates.
+
+## Accessibility Architecture Diagram
+
+```mermaid
+flowchart TD
+ UI["UI Component"] --> Platform{Platform?}
+ Platform -->|Web| ARIA["WAI-ARIA + HTML5"]
+ Platform -->|iOS| SwiftUI["Accessibility Traits + Labels"]
+ Platform -->|Android| Compose["Semantics + ContentDesc"]
+
+ ARIA --> AT["Assistive Technology (Screen Readers, Switches)"]
+ SwiftUI --> AT
+ Compose --> AT
+```
+
+## Cross-Platform Mapping
+
+| Feature | Web (HTML/ARIA) | iOS (SwiftUI) | Android (Compose) |
+| :----------------- | :----------------------- | :----------------------------------- | :---------------------------------------------------------- |
+| **Primary Label** | `aria-label` / `` | `.accessibilityLabel()` | `contentDescription` |
+| **Secondary Hint** | `aria-describedby` | `.accessibilityHint()` | `Modifier.semantics { stateDescription = ... }` |
+| **Action Role** | `role="button"` | `.accessibilityAddTraits(.isButton)` | `Modifier.semantics { role = Role.Button }` |
+| **Live Updates** | `aria-live="polite"` | `.accessibilityLiveRegion(.polite)` | `Modifier.semantics { liveRegion = LiveRegionMode.Polite }` |
+
+## Implementation Examples
+
+### Web: Accessible Search
+
+```html
+
+```
+
+### iOS: Accessible Action Button
+
+```swift
+Button(action: deleteItem) {
+ Image(systemName: "trash")
+}
+.accessibilityLabel("Delete item")
+.accessibilityHint("Permanently removes this item from your list")
+.accessibilityAddTraits(.isButton)
+```
+
+### Android: Accessible Toggle
+
+```kotlin
+Switch(
+ checked = isEnabled,
+ onCheckedChange = { onToggle() },
+ modifier = Modifier.semantics {
+ contentDescription = "Enable notifications"
+ }
+)
+```
+
+## Anti-Patterns to Avoid
+
+- **Div-Buttons**: Using a `` or `
` for a click event without adding a role and keyboard support.
+- **Color-Only Meaning**: Indicating an error or status _only_ with a color change (e.g., turning a border red).
+- **Infinite Tab Loops**: Modals that don't trap focus, allowing users to "escape" into the background content while the modal is open.
+- **Redundant Alt Text**: Using "Image of..." or "Picture of..." in alt text (screen readers already announce the role "Image").
+
+## Best Practices Checklist
+
+- [ ] Interactive elements meet the **24x24px** (Web) or **44x44pt** (Native) target size.
+- [ ] Focus indicators are clearly visible and high-contrast.
+- [ ] No "Keyboard Traps" exist in complex components (modals, dropdowns).
+- [ ] Forms provide text-based error suggestions.
+- [ ] All icon-only buttons have a descriptive text label.
+- [ ] Content reflows properly when text is scaled.
+
+## References
+
+- [WCAG 2.2 Guidelines](https://www.w3.org/TR/WCAG22/)
+- [WAI-ARIA Authoring Practices](https://www.w3.org/TR/wai-aria-practices/)
+- [iOS Accessibility Programming Guide](https://developer.apple.com/library/archive/documentation/UserExperience/Conceptual/iPhoneAccessibility/Introduction/Introduction.html)
+- [Android Accessibility Developer Guide](https://developer.android.com/guide/topics/ui/accessibility)
From 643d03575ae5fbb86692c92ef7c329bda847c621 Mon Sep 17 00:00:00 2001
From: Balaji Guntur <59932973+gnpthbalaji@users.noreply.github.com>
Date: Sat, 11 Apr 2026 12:58:21 -0700
Subject: [PATCH 03/58] Update the accessibility skill to include related
skills
---
skills/accessibility/SKILL.md | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/skills/accessibility/SKILL.md b/skills/accessibility/SKILL.md
index 862e71f2..bf81fc57 100644
--- a/skills/accessibility/SKILL.md
+++ b/skills/accessibility/SKILL.md
@@ -135,3 +135,10 @@ Switch(
- [WAI-ARIA Authoring Practices](https://www.w3.org/TR/wai-aria-practices/)
- [iOS Accessibility Programming Guide](https://developer.apple.com/library/archive/documentation/UserExperience/Conceptual/iPhoneAccessibility/Introduction/Introduction.html)
- [Android Accessibility Developer Guide](https://developer.android.com/guide/topics/ui/accessibility)
+
+## Related Skills
+
+- `frontend-patterns`
+- `frontend-design`
+- `liquid-glass-design`
+- `swiftui-patterns`
From 228be4f8b8f3bf51544a4ada3d39c31790ffce36 Mon Sep 17 00:00:00 2001
From: Balaji Guntur <59932973+gnpthbalaji@users.noreply.github.com>
Date: Sat, 11 Apr 2026 13:16:13 -0700
Subject: [PATCH 04/58] renamed the inclusive-ui-agent to a11y-architect
---
agents/{inclusive-ui-agent.md => a11y-architect.md} | 0
1 file changed, 0 insertions(+), 0 deletions(-)
rename agents/{inclusive-ui-agent.md => a11y-architect.md} (100%)
diff --git a/agents/inclusive-ui-agent.md b/agents/a11y-architect.md
similarity index 100%
rename from agents/inclusive-ui-agent.md
rename to agents/a11y-architect.md
From 33673fb37a473e7f85b5f97ada85366176a8b058 Mon Sep 17 00:00:00 2001
From: Balaji Guntur <59932973+gnpthbalaji@users.noreply.github.com>
Date: Sat, 11 Apr 2026 13:33:17 -0700
Subject: [PATCH 05/58] Fix PR comments - renamed 'when to activate' to 'when
to use', fixed the iOS reference link to current, added iOS HIG link
---
skills/accessibility/SKILL.md | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/skills/accessibility/SKILL.md b/skills/accessibility/SKILL.md
index bf81fc57..2f46136a 100644
--- a/skills/accessibility/SKILL.md
+++ b/skills/accessibility/SKILL.md
@@ -9,7 +9,7 @@ origin: ECC
This skill ensures that digital interfaces are Perceivable, Operable, Understandable, and Robust (POUR) for all users, including those using screen readers, switch controls, or keyboard navigation. It focuses on the technical implementation of WCAG 2.2 success criteria.
-## When to Activate
+## When to Use
- Defining UI component specifications for Web, iOS, or Android.
- Auditing existing code for accessibility barriers or compliance gaps.
@@ -76,7 +76,7 @@ flowchart TD
| **Action Role** | `role="button"` | `.accessibilityAddTraits(.isButton)` | `Modifier.semantics { role = Role.Button }` |
| **Live Updates** | `aria-live="polite"` | `.accessibilityLiveRegion(.polite)` | `Modifier.semantics { liveRegion = LiveRegionMode.Polite }` |
-## Implementation Examples
+## Examples
### Web: Accessible Search
@@ -133,7 +133,8 @@ Switch(
- [WCAG 2.2 Guidelines](https://www.w3.org/TR/WCAG22/)
- [WAI-ARIA Authoring Practices](https://www.w3.org/TR/wai-aria-practices/)
-- [iOS Accessibility Programming Guide](https://developer.apple.com/library/archive/documentation/UserExperience/Conceptual/iPhoneAccessibility/Introduction/Introduction.html)
+- [iOS Accessibility Programming Guide](https://developer.apple.com/documentation/accessibility)
+- [iOS Human Interface Guidelines - Accessibility](https://developer.apple.com/design/human-interface-guidelines/accessibility)
- [Android Accessibility Developer Guide](https://developer.android.com/guide/topics/ui/accessibility)
## Related Skills
From 5a03922934acc30715b4cbc528cfec512d1bb90a Mon Sep 17 00:00:00 2001
From: seto
Date: Sun, 12 Apr 2026 11:41:33 +0900
Subject: [PATCH 06/58] feat(hooks,skills): add gateguard fact-forcing
pre-action gate
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
A PreToolUse hook that forces Claude to investigate before editing.
Instead of self-evaluation ("are you sure?"), it demands concrete facts:
importers, public API, data schemas, user instruction.
A/B tested: +2.25 quality points (9.0 vs 6.75) across two independent tasks.
- scripts/hooks/gateguard-fact-force.js — standalone Node.js hook
- skills/gateguard/SKILL.md — skill documentation
- hooks/hooks.json — PreToolUse entries for Edit|Write and Bash
Full package with config: pip install gateguard-ai
Repo: https://github.com/zunoworks/gateguard
Co-Authored-By: Claude Opus 4.6
---
hooks/hooks.json | 24 +++
scripts/hooks/gateguard-fact-force.js | 216 ++++++++++++++++++++++++++
skills/gateguard/SKILL.md | 117 ++++++++++++++
3 files changed, 357 insertions(+)
create mode 100644 scripts/hooks/gateguard-fact-force.js
create mode 100644 skills/gateguard/SKILL.md
diff --git a/hooks/hooks.json b/hooks/hooks.json
index 528b03f8..0dc92970 100644
--- a/hooks/hooks.json
+++ b/hooks/hooks.json
@@ -126,6 +126,30 @@
],
"description": "Check MCP server health before MCP tool execution and block unhealthy MCP calls",
"id": "pre:mcp-health-check"
+ },
+ {
+ "matcher": "Edit|Write",
+ "hooks": [
+ {
+ "type": "command",
+ "command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hooks/gateguard-fact-force.js\"",
+ "timeout": 5
+ }
+ ],
+ "description": "Fact-forcing gate: block first Edit/Write per file and demand investigation (importers, data schemas, user instruction) before allowing",
+ "id": "pre:edit-write:gateguard-fact-force"
+ },
+ {
+ "matcher": "Bash",
+ "hooks": [
+ {
+ "type": "command",
+ "command": "node \"${CLAUDE_PLUGIN_ROOT}/scripts/hooks/gateguard-fact-force.js\"",
+ "timeout": 5
+ }
+ ],
+ "description": "Fact-forcing gate: block destructive Bash commands and demand rollback plan; quote user instruction on first Bash per session",
+ "id": "pre:bash:gateguard-fact-force"
}
],
"PreCompact": [
diff --git a/scripts/hooks/gateguard-fact-force.js b/scripts/hooks/gateguard-fact-force.js
new file mode 100644
index 00000000..d1e0106b
--- /dev/null
+++ b/scripts/hooks/gateguard-fact-force.js
@@ -0,0 +1,216 @@
+#!/usr/bin/env node
+/**
+ * PreToolUse Hook: GateGuard Fact-Forcing Gate
+ *
+ * Forces Claude to investigate before editing files or running commands.
+ * Instead of asking "are you sure?" (which LLMs always answer "yes"),
+ * this hook demands concrete facts: importers, public API, data schemas.
+ *
+ * The act of investigation creates awareness that self-evaluation never did.
+ *
+ * Gates:
+ * - Edit/Write: list importers, affected API, verify data schemas, quote instruction
+ * - Bash (destructive): list targets, rollback plan, quote instruction
+ * - Bash (routine): quote current instruction (once per session)
+ *
+ * Exit codes:
+ * 0 - Allow (gate already passed for this target)
+ * 2 - Block (force investigation first)
+ *
+ * Cross-platform (Windows, macOS, Linux).
+ *
+ * Full package with config support: pip install gateguard-ai
+ * Repo: https://github.com/zunoworks/gateguard
+ */
+
+'use strict';
+
+const fs = require('fs');
+const path = require('path');
+
+const MAX_STDIN = 1024 * 1024;
+
+// Session state file for tracking which files have been gated
+const STATE_DIR = path.join(process.env.HOME || process.env.USERPROFILE || '/tmp', '.gateguard');
+const STATE_FILE = path.join(STATE_DIR, '.session_state.json');
+
+const DESTRUCTIVE_BASH = /\b(rm\s+-rf|git\s+reset\s+--hard|git\s+checkout\s+--|git\s+clean\s+-f|drop\s+table|delete\s+from|truncate|git\s+push\s+--force|dd\s+if=)\b/i;
+
+// --- State management ---
+
+function loadState() {
+ try {
+ if (fs.existsSync(STATE_FILE)) {
+ return JSON.parse(fs.readFileSync(STATE_FILE, 'utf8'));
+ }
+ } catch (_) { /* ignore */ }
+ return { checked: [], read_files: [] };
+}
+
+function saveState(state) {
+ try {
+ fs.mkdirSync(STATE_DIR, { recursive: true });
+ fs.writeFileSync(STATE_FILE, JSON.stringify(state, null, 2), 'utf8');
+ } catch (_) { /* ignore */ }
+}
+
+function markChecked(key) {
+ const state = loadState();
+ if (!state.checked.includes(key)) {
+ state.checked.push(key);
+ saveState(state);
+ }
+}
+
+function isChecked(key) {
+ const state = loadState();
+ return state.checked.includes(key);
+}
+
+// --- Sanitize file path against injection ---
+
+function sanitizePath(filePath) {
+ return filePath.replace(/[\n\r]/g, ' ').trim().slice(0, 500);
+}
+
+// --- Gate messages ---
+
+function editGateMsg(filePath) {
+ const safe = sanitizePath(filePath);
+ return [
+ '[Fact-Forcing Gate]',
+ '',
+ `Before editing ${safe}, present these facts:`,
+ '',
+ '1. List ALL files that import/require this file (use Grep)',
+ '2. List the public functions/classes affected by this change',
+ '3. If this file reads/writes data files, cat one real record and show actual field names, structure, and date format',
+ '4. Quote the user\'s current instruction verbatim',
+ '',
+ 'Present the facts, then retry the same operation.'
+ ].join('\n');
+}
+
+function writeGateMsg(filePath) {
+ const safe = sanitizePath(filePath);
+ return [
+ '[Fact-Forcing Gate]',
+ '',
+ `Before creating ${safe}, present these facts:`,
+ '',
+ '1. Name the file(s) and line(s) that will call this new file',
+ '2. Confirm no existing file serves the same purpose (use Glob)',
+ '3. If this file reads/writes data files, cat one real record and show actual field names, structure, and date format',
+ '4. Quote the user\'s current instruction verbatim',
+ '',
+ 'Present the facts, then retry the same operation.'
+ ].join('\n');
+}
+
+function destructiveBashMsg() {
+ return [
+ '[Fact-Forcing Gate]',
+ '',
+ 'Destructive command detected. Before running, present:',
+ '',
+ '1. List all files/data this command will modify or delete',
+ '2. Write a one-line rollback procedure',
+ '3. Quote the user\'s current instruction verbatim',
+ '',
+ 'Present the facts, then retry the same operation.'
+ ].join('\n');
+}
+
+function routineBashMsg() {
+ return [
+ '[Fact-Forcing Gate]',
+ '',
+ 'Quote the user\'s current instruction verbatim.',
+ 'Then retry the same operation.'
+ ].join('\n');
+}
+
+// --- Output helpers ---
+
+function deny(reason) {
+ const output = {
+ hookSpecificOutput: {
+ hookEventName: 'PreToolUse',
+ permissionDecision: 'deny',
+ permissionDecisionReason: reason
+ }
+ };
+ process.stdout.write(JSON.stringify(output));
+ process.exit(0);
+}
+
+function allow() {
+ // Output nothing = allow
+ process.exit(0);
+}
+
+// --- Main ---
+
+function main() {
+ let raw = '';
+ try {
+ raw = fs.readFileSync(0, 'utf8').slice(0, MAX_STDIN);
+ } catch (_) {
+ allow();
+ return;
+ }
+
+ let data;
+ try {
+ data = JSON.parse(raw);
+ } catch (_) {
+ allow();
+ return;
+ }
+
+ const toolName = data.tool_name || '';
+ const toolInput = data.tool_input || {};
+
+ if (toolName === 'Edit' || toolName === 'Write') {
+ const filePath = toolInput.file_path || '';
+ if (!filePath) {
+ allow();
+ return;
+ }
+
+ // Gate: first action per file
+ if (!isChecked(filePath)) {
+ markChecked(filePath);
+ const msg = toolName === 'Edit' ? editGateMsg(filePath) : writeGateMsg(filePath);
+ deny(msg);
+ return;
+ }
+
+ allow();
+ return;
+ }
+
+ if (toolName === 'Bash') {
+ const command = toolInput.command || '';
+
+ // Destructive commands: always gate
+ if (DESTRUCTIVE_BASH.test(command)) {
+ deny(destructiveBashMsg());
+ return;
+ }
+
+ // Routine bash: once per session
+ if (!isChecked('__bash_session__')) {
+ markChecked('__bash_session__');
+ deny(routineBashMsg());
+ return;
+ }
+
+ allow();
+ return;
+ }
+
+ allow();
+}
+
+main();
diff --git a/skills/gateguard/SKILL.md b/skills/gateguard/SKILL.md
new file mode 100644
index 00000000..4802b64b
--- /dev/null
+++ b/skills/gateguard/SKILL.md
@@ -0,0 +1,117 @@
+---
+name: gateguard
+description: Fact-forcing gate that blocks Edit/Write/Bash and demands concrete investigation (importers, data schemas, user instruction) before allowing the action. Measurably improves output quality by +2.25 points vs ungated agents.
+origin: community
+---
+
+# GateGuard — Fact-Forcing Pre-Action Gate
+
+A PreToolUse hook that forces Claude to investigate before editing. Instead of self-evaluation ("are you sure?"), it demands concrete facts. The act of investigation creates awareness that self-evaluation never did.
+
+## When to Activate
+
+- Working on any codebase where file edits affect multiple modules
+- Projects with data files that have specific schemas or date formats
+- Teams where AI-generated code must match existing patterns
+- Any workflow where Claude tends to guess instead of investigating
+
+## Core Concept
+
+LLM self-evaluation doesn't work. Ask "did you violate any policies?" and the answer is always "no." This is verified experimentally.
+
+But asking "list every file that imports this module" forces the LLM to run Grep and Read. The investigation itself creates context that changes the output.
+
+**Three-stage gate:**
+
+```
+1. DENY — block the first Edit/Write/Bash attempt
+2. FORCE — tell the model exactly which facts to gather
+3. ALLOW — permit retry after facts are presented
+```
+
+No competitor does all three. Most stop at deny.
+
+## Evidence
+
+Two independent A/B tests, identical agents, same task:
+
+| Task | Gated | Ungated | Gap |
+| --- | --- | --- | --- |
+| Analytics module | 8.0/10 | 6.5/10 | +1.5 |
+| Webhook validator | 10.0/10 | 7.0/10 | +3.0 |
+| **Average** | **9.0** | **6.75** | **+2.25** |
+
+Both agents produce code that runs and passes tests. The difference is design depth.
+
+## Gate Types
+
+### Edit Gate (first edit per file)
+
+```
+Before editing {file_path}, present these facts:
+
+1. List ALL files that import/require this file (use Grep)
+2. List the public functions/classes affected by this change
+3. If this file reads/writes data files, cat one real record
+ and show actual field names, structure, and date format
+4. Quote the user's current instruction verbatim
+```
+
+### Write Gate (first new file creation)
+
+```
+Before creating {file_path}, present these facts:
+
+1. Name the file(s) and line(s) that will call this new file
+2. Confirm no existing file serves the same purpose (use Glob)
+3. If this file reads/writes data files, cat one real record
+4. Quote the user's current instruction verbatim
+```
+
+### Destructive Bash Gate (every destructive command)
+
+Triggers on: `rm -rf`, `git reset --hard`, `git push --force`, `drop table`, etc.
+
+```
+1. List all files/data this command will modify or delete
+2. Write a one-line rollback procedure
+3. Quote the user's current instruction verbatim
+```
+
+### Routine Bash Gate (once per session)
+
+```
+Quote the user's current instruction verbatim.
+```
+
+## Quick Start
+
+### Option A: Use the ECC hook (zero install)
+
+The hook at `scripts/hooks/gateguard-fact-force.js` is included in this plugin. Enable it via hooks.json.
+
+### Option B: Full package with config
+
+```bash
+pip install gateguard-ai
+gateguard init
+```
+
+This adds `.gateguard.yml` for per-project configuration (custom messages, ignore paths, gate toggles).
+
+## Anti-Patterns
+
+- **Don't use self-evaluation instead.** "Are you sure?" always gets "yes." This is experimentally verified.
+- **Don't skip the data schema check.** Both A/B test agents assumed ISO-8601 dates when real data used `%Y/%m/%d %H:%M`. Checking one real record prevents this entire class of bugs.
+- **Don't gate every single Bash command.** Routine bash gates once per session. Destructive bash gates every time. This balance avoids slowdown while catching real risks.
+
+## Best Practices
+
+- Let the gate fire naturally. Don't try to pre-answer the gate questions — the investigation itself is what improves quality.
+- Customize gate messages for your domain. If your project has specific conventions, add them to the gate prompts.
+- Use `.gateguard.yml` to ignore paths like `.venv/`, `node_modules/`, `.git/`.
+
+## Related Skills
+
+- `safety-guard` — Runtime safety checks (complementary, not overlapping)
+- `code-reviewer` — Post-edit review (GateGuard is pre-edit investigation)
From 51abaf0fc03abd1d2783098642ff7290bd94808f Mon Sep 17 00:00:00 2001
From: Balaji Guntur <59932973+gnpthbalaji@users.noreply.github.com>
Date: Sat, 11 Apr 2026 20:30:47 -0700
Subject: [PATCH 07/58] fix: correct accessibility terminology and code fence
in a11y skill and agent
- Fix inverted focus trap terms: Keyboard Traps -> Uncontained Modal Focus with WCAG SC 2.1.2 reference
- Fix Step 1 blocker example: missing keyboard traps -> missing focus containment in modals
- Attach [language] placeholder to opening triple-backtick fence in agent implementation template
---
agents/a11y-architect.md | 11 ++++++-----
skills/accessibility/SKILL.md | 5 +++--
2 files changed, 9 insertions(+), 7 deletions(-)
diff --git a/agents/a11y-architect.md b/agents/a11y-architect.md
index c5793317..cd00b806 100644
--- a/agents/a11y-architect.md
+++ b/agents/a11y-architect.md
@@ -20,7 +20,7 @@ You are a Senior Accessibility Architect. Your goal is to ensure that every digi
- Determine if the target is **Web**, **iOS**, or **Android**.
- Analyze the user interaction (e.g., Is this a simple button or a complex data grid?).
-- Identify potential accessibility "blockers" (e.g., color-only indicators, missing keyboard traps).
+- Identify potential accessibility "blockers" (e.g., color-only indicators, missing focus containment in modals).
### Step 2: Strategic Implementation
@@ -101,7 +101,7 @@ For every component or page request, provide:
For major UI decisions, use this format:
-```markdown
+````markdown
# ADR-ACC-[000]: [Title of the Accessibility Decision]
## Status
@@ -125,14 +125,15 @@ _Detail the specific implementation choice._
### Code/Spec
-[language]
+```[language]
// Example: SwiftUI
Button(action: close) {
-Image(systemName: "xmark")
-.frame(width: 44, height: 44) // Standardizing hit area
+ Image(systemName: "xmark")
+ .frame(width: 44, height: 44) // Standardizing hit area
}
.accessibilityLabel("Close modal")
```
+````
## Reference
diff --git a/skills/accessibility/SKILL.md b/skills/accessibility/SKILL.md
index 2f46136a..c9021041 100644
--- a/skills/accessibility/SKILL.md
+++ b/skills/accessibility/SKILL.md
@@ -117,14 +117,15 @@ Switch(
- **Div-Buttons**: Using a `` or `
` for a click event without adding a role and keyboard support.
- **Color-Only Meaning**: Indicating an error or status _only_ with a color change (e.g., turning a border red).
-- **Infinite Tab Loops**: Modals that don't trap focus, allowing users to "escape" into the background content while the modal is open.
+- **Uncontained Modal Focus**: Modals that don't trap focus, allowing keyboard users to navigate background content while the modal is open. Focus must be contained _and_ escapable via the `Escape` key or an explicit close button (WCAG SC 2.1.2).
- **Redundant Alt Text**: Using "Image of..." or "Picture of..." in alt text (screen readers already announce the role "Image").
## Best Practices Checklist
- [ ] Interactive elements meet the **24x24px** (Web) or **44x44pt** (Native) target size.
- [ ] Focus indicators are clearly visible and high-contrast.
-- [ ] No "Keyboard Traps" exist in complex components (modals, dropdowns).
+- [ ] Modals **contain focus** while open, and release it cleanly on close (`Escape` key or close button).
+- [ ] Dropdowns and menus restore focus to the trigger element on close.
- [ ] Forms provide text-based error suggestions.
- [ ] All icon-only buttons have a descriptive text label.
- [ ] Content reflows properly when text is scaled.
From 45faeb90a7b43b0f9764bc4d4c1e0936f780324b Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Sun, 12 Apr 2026 04:52:29 +0000
Subject: [PATCH 08/58] build(deps): bump actions/upload-artifact from 7.0.0 to
7.0.1
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 7.0.0 to 7.0.1.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/bbbca2ddaa5d8feaa63e36b76fdaad77386f024f...043fb46d1a93c77aae656e7c1c64a875d1fc6a0a)
---
updated-dependencies:
- dependency-name: actions/upload-artifact
dependency-version: 7.0.1
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot]
---
.github/workflows/ci.yml | 2 +-
.github/workflows/reusable-test.yml | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 04972a2c..27cb143b 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -146,7 +146,7 @@ jobs:
# Upload test artifacts on failure
- name: Upload test artifacts
if: failure()
- uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: test-results-${{ matrix.os }}-node${{ matrix.node }}-${{ matrix.pm }}
path: |
diff --git a/.github/workflows/reusable-test.yml b/.github/workflows/reusable-test.yml
index c0b144c0..e30ae1bc 100644
--- a/.github/workflows/reusable-test.yml
+++ b/.github/workflows/reusable-test.yml
@@ -134,7 +134,7 @@ jobs:
- name: Upload test artifacts
if: failure()
- uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: test-results-${{ inputs.os }}-node${{ inputs.node-version }}-${{ inputs.package-manager }}
path: |
From 4b92288a27850bbdadf5e4f99ab245d52ac779fd Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Sun, 12 Apr 2026 04:52:33 +0000
Subject: [PATCH 09/58] build(deps): bump pnpm/action-setup from 5.0.0 to 6.0.0
Bumps [pnpm/action-setup](https://github.com/pnpm/action-setup) from 5.0.0 to 6.0.0.
- [Release notes](https://github.com/pnpm/action-setup/releases)
- [Commits](https://github.com/pnpm/action-setup/compare/fc06bc1257f339d1d5d8b3a19a8cae5388b55320...08c4be7e2e672a47d11bd04269e27e5f3e8529cb)
---
updated-dependencies:
- dependency-name: pnpm/action-setup
dependency-version: 6.0.0
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot]
---
.github/workflows/ci.yml | 2 +-
.github/workflows/reusable-test.yml | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 04972a2c..10ecc602 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -44,7 +44,7 @@ jobs:
# Package manager setup
- name: Setup pnpm
if: matrix.pm == 'pnpm'
- uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v4
+ uses: pnpm/action-setup@08c4be7e2e672a47d11bd04269e27e5f3e8529cb # v4
with:
version: latest
diff --git a/.github/workflows/reusable-test.yml b/.github/workflows/reusable-test.yml
index c0b144c0..5dfc0b39 100644
--- a/.github/workflows/reusable-test.yml
+++ b/.github/workflows/reusable-test.yml
@@ -36,7 +36,7 @@ jobs:
- name: Setup pnpm
if: inputs.package-manager == 'pnpm'
- uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v4
+ uses: pnpm/action-setup@08c4be7e2e672a47d11bd04269e27e5f3e8529cb # v4
with:
version: latest
From 5ae63b301f19484ff85faa4c724b0a08c8b68644 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Sun, 12 Apr 2026 04:52:35 +0000
Subject: [PATCH 10/58] build(deps): bump softprops/action-gh-release from
2.6.1 to 3.0.0
Bumps [softprops/action-gh-release](https://github.com/softprops/action-gh-release) from 2.6.1 to 3.0.0.
- [Release notes](https://github.com/softprops/action-gh-release/releases)
- [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md)
- [Commits](https://github.com/softprops/action-gh-release/compare/153bb8e04406b158c6c84fc1615b65b24149a1fe...b4309332981a82ec1c5618f44dd2e27cc8bfbfda)
---
updated-dependencies:
- dependency-name: softprops/action-gh-release
dependency-version: 3.0.0
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot]
---
.github/workflows/release.yml | 2 +-
.github/workflows/reusable-release.yml | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index cea5f6ca..582d88cc 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -74,7 +74,7 @@ jobs:
EOF
- name: Create GitHub Release
- uses: softprops/action-gh-release@153bb8e04406b158c6c84fc1615b65b24149a1fe # v2
+ uses: softprops/action-gh-release@b4309332981a82ec1c5618f44dd2e27cc8bfbfda # v2
with:
body_path: release_body.md
generate_release_notes: true
diff --git a/.github/workflows/reusable-release.yml b/.github/workflows/reusable-release.yml
index 9fd37991..5acf8748 100644
--- a/.github/workflows/reusable-release.yml
+++ b/.github/workflows/reusable-release.yml
@@ -62,7 +62,7 @@ jobs:
EOF
- name: Create GitHub Release
- uses: softprops/action-gh-release@153bb8e04406b158c6c84fc1615b65b24149a1fe # v2
+ uses: softprops/action-gh-release@b4309332981a82ec1c5618f44dd2e27cc8bfbfda # v2
with:
tag_name: ${{ inputs.tag }}
body_path: release_body.md
From 57de4129da4b01a88c693da74a760222043f599d Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Sun, 12 Apr 2026 04:52:39 +0000
Subject: [PATCH 11/58] build(deps): bump actions/github-script from 8.0.0 to
9.0.0
Bumps [actions/github-script](https://github.com/actions/github-script) from 8.0.0 to 9.0.0.
- [Release notes](https://github.com/actions/github-script/releases)
- [Commits](https://github.com/actions/github-script/compare/ed597411d8f924073f98dfc5c65a23a2325f34cd...3a2844b7e9c422d3c10d287c895573f7108da1b3)
---
updated-dependencies:
- dependency-name: actions/github-script
dependency-version: 9.0.0
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot]
---
.github/workflows/monthly-metrics.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/monthly-metrics.yml b/.github/workflows/monthly-metrics.yml
index 27fa5973..1555db22 100644
--- a/.github/workflows/monthly-metrics.yml
+++ b/.github/workflows/monthly-metrics.yml
@@ -15,7 +15,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Update monthly metrics issue
- uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
+ uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
with:
script: |
const owner = context.repo.owner;
From 2d044b8032946e9b637fc0c59bf1f2b2a2588b11 Mon Sep 17 00:00:00 2001
From: GB <59932973+gnpthbalaji@users.noreply.github.com>
Date: Sat, 11 Apr 2026 22:12:15 -0700
Subject: [PATCH 12/58] Apply suggestion from @greptile-apps[bot]
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
---
agents/a11y-architect.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/agents/a11y-architect.md b/agents/a11y-architect.md
index cd00b806..7e45e605 100644
--- a/agents/a11y-architect.md
+++ b/agents/a11y-architect.md
@@ -2,7 +2,7 @@
name: a11y-architect
description: Accessibility Architect specializing in WCAG 2.2 compliance for Web and Native platforms. Use PROACTIVELY when designing UI components, establishing design systems, or auditing code for inclusive user experiences.
tools: ['Read', 'Write', 'Edit', 'Bash', 'Grep', 'Glob']
-model: sonnet
+tools: ["Read", "Write", "Edit", "Bash", "Grep", "Glob"]
---
You are a Senior Accessibility Architect. Your goal is to ensure that every digital product is Perceivable, Operable, Understandable, and Robust (POUR) for all users, including those with visual, auditory, motor, or cognitive disabilities.
From 626c18f4c7d0ce65bcb1567553ede23206ae8d9e Mon Sep 17 00:00:00 2001
From: Anish
Date: Sun, 12 Apr 2026 06:35:14 +0000
Subject: [PATCH 13/58] feat: add dashboard GUI with theme, font customization,
and logo
- Add ecc_dashboard.py - a Tkinter-based GUI for exploring ECC components
- Implement dark/light theme toggle in Settings tab
- Add font family and size customization
- Display project logo in header and taskbar
- Open in maximized window with native title bar
- Add 'dashboard' script to package.json for easy launch
---
assets/images/ecc-logo.png | Bin 0 -> 100717 bytes
ecc_dashboard.py | 914 +++++++++++++++++++++++++++++++++++++
package.json | 5 +-
3 files changed, 917 insertions(+), 2 deletions(-)
create mode 100644 assets/images/ecc-logo.png
create mode 100644 ecc_dashboard.py
diff --git a/assets/images/ecc-logo.png b/assets/images/ecc-logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..ef6e8ac86031a0bbcaa6dbfb142060be39104494
GIT binary patch
literal 100717
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