Skip to content

feat: CSV reporters, EPUB agents, rule alignment, code review fixes, and hook schema updates#30

Merged
taylorarndt merged 8 commits into
Community-Access:mainfrom
accesswatch:fix/hook-schema-and-timeouts
Feb 24, 2026
Merged

feat: CSV reporters, EPUB agents, rule alignment, code review fixes, and hook schema updates#30
taylorarndt merged 8 commits into
Community-Access:mainfrom
accesswatch:fix/hook-schema-and-timeouts

Conversation

@accesswatch

@accesswatch accesswatch commented Feb 24, 2026

Copy link
Copy Markdown
Collaborator

Summary

Brings the fork up to date with all recent development work including new agents, CI tooling, rule alignment, code review fixes, and hook schema updates.

Commits

1. feat: add CSV reporters, CI linting, EPUB agents, and ecosystem enhancements

  • New CSV reporter agents (document, markdown, web) with Deque/Microsoft help URL mapping
  • EPUB accessibility agent and scan config
  • Cognitive accessibility, design system auditor, and mobile accessibility agents (Claude)
  • CI workflow for accessibility linting (a11y-check.yml)
  • Markdown accessibility lint script
  • Export prompts for CSV reports
  • Help URL reference skill

2. fix: align rule IDs to canonical format agents and add gap analysis rules

  • Canonical rule ID format across all agents
  • Gap analysis rules added to accessibility-rules skill
  • Design system auditor alignment
  • Platform references documentation update
  • Web accessibility baseline instruction updates

3. fix: complete code review fixes (34/34 findings resolved)

  • Desktop extension security hardening (input validation, path traversal prevention)
  • Script reliability improvements (install/uninstall/update)
  • Example HTML and CSS fixes
  • Hook script fixes
  • Agent docs README

4. fix: update hook schema to hookSpecificOutput and increase timeouts

  • Flatten Claude settings.json hook structure with Windows command paths
  • Migrate scripts from stopReason/systemMessage to hookSpecificOutput pattern
  • Increase hook timeouts from 5-10s to 10-15s
  • Cross-platform handoff documentation updates
  • Audit sessions log

Testing

All hooks tested on Windows with PowerShell. JSON output verified for correct schema.

…cements

- Enhancement 1: Register EPUB agents in both AGENTS.md files with new EPUB team
- Enhancement 2: Create 5 missing Claude agents (epub-scan-config, cognitive-accessibility, design-system-auditor, epub-accessibility, mobile-accessibility)
- Enhancement 3: Wire CSV reporters into all 4 wizard agents (web + document, both platforms)
- Enhancement 4: Add markdown-csv-reporter agents, export-markdown-csv prompt, and documentation
- Enhancement 5: Add markdown-a11y-lint.mjs CI script and markdown-lint workflow job

New files: 23 (agents, prompts, docs, CI script, skill)
Modified files: 14 (AGENTS.md, wizards, instructions, workflow, docs)
…ules

- Aligned DOCX/XLSX/PPTX rule tables in both CSV reporters (Copilot + Claude) to canonical format agent IDs
- Fixed Warning weight from 3 to 5 in Copilot CSV reporter ROI calculation
- Added 5 new rules from Microsoft Accessibility Checker gap analysis:
  - DOCX-E008 (document-access-restricted/IRM)
  - DOCX-E009 (content-controls-without-titles)
  - XLSX-E007 (red-negative-numbers)
  - XLSX-E008 (workbook-access-restricted/IRM)
  - PPTX-E007 (presentation-access-restricted/IRM)
- Updated format agents (word/excel/powerpoint-accessibility) with new rules
- Updated office-scan-config agents with new rules
- All rule IDs now consistent across format agents, CSV reporters, help-url-reference, and accessibility-rules SKILL
High severity (previously fixed):
- H-01: Manifest-based uninstall (prevents deleting user files)
- H-02: ReDoS-resistant bounded regex patterns
- H-03: ZIP bomb protection (200MB limit)
- H-04: ZIP64 archive detection

Medium severity:
- M-01: validateFilePath write-mode enforcement at all 9 call sites
- M-02: cd exit guard in install.sh embedded updater
- M-03: ExecutionPolicy Bypass changed to RemoteSigned
- M-04: Multi-line HTML tag limitation documented in a11y-lint
- M-05: BOM-aware YAML front matter detection in markdown lint
- M-06: Expanded emoji regex to cover supplemental/flag sequences
- M-07: Removed stale path reference (previously fixed)
- M-08: git clone error handling in install.ps1 and install.sh
- M-09: PDFQ.REPO.NO_SCANNED_ONLY guarded against duplicate with PDFBP.TEXT.EXTRACTABLE
- M-10: Title regex escaped parens (previously fixed)

Low severity:
- L-01: PS 5.1-compatible null-coalescing in 4 hook scripts
- L-02: Dead imports removed (previously fixed)
- L-03: lstatSync + symlink skip in all 4 lint/scan scripts
- L-04: Link regex handles nested elements in a11y-lint
- L-05: XML regex parsing limitations documented
- L-06: Array.isArray checks (previously fixed)
- L-08: JSON-safe string escaping in a11y-team-eval.sh
- L-09: Hex format hints on contrast task inputs
- L-10: Removed unused documentPath input from tasks.json
- L-11: cd exit guards in update.sh
- L-12: Skipped (JSON does not support comments)

Informational:
- I-01: Zod semver range fixed to ^3.25.0
- I-02: WCAG 2.1 to 2.2 in manifest.json (3 locations)
- I-03: WCAG 2.1 to 2.2 in index.js (5 locations)
- I-04: Empty catch blocks annotated in lint scripts
- I-05: Concurrent processing opportunity noted
- I-06: message.split fallback for messages without periods (5 locations)
- I-07: Intentional anti-pattern banners in example files
- I-08: Shared code duplication documented between lint scripts
- Flatten Claude settings.json hook structure (remove nested hooks array)
- Add Windows-specific command paths to Claude hooks
- Migrate hook scripts from stopReason/systemMessage to hookSpecificOutput pattern
- Increase hook timeouts from 5-10s to 10-15s for reliability
- Add hookEventName metadata to all hook JSON responses
- Update cross-platform handoff documentation
- Add audit sessions log
Copilot AI review requested due to automatic review settings February 24, 2026 18:41
@accesswatch accesswatch changed the title fix: update hook schema to hookSpecificOutput and increase timeouts feat: CSV reporters, EPUB agents, rule alignment, code review fixes, and hook schema updates Feb 24, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This pull request updates hook configurations and scripts to align with the current hookSpecificOutput schema pattern, increases timeouts for reliability, and adds significant new documentation and agent capabilities.

Changes:

  • Migrates hook scripts from deprecated stopReason/systemMessage fields to hookSpecificOutput with hookEventName metadata
  • Increases hook timeouts from 5-10s to 10-15s for improved reliability
  • Flattens nested hook structure in Claude settings.json and adds Windows command paths
  • Adds comprehensive CSV export capabilities with help documentation links for web, document, and markdown audits
  • Expands WCAG 2.2 documentation coverage across multiple agent files
  • Adds new agents (mobile-accessibility, design-system-auditor, cognitive-accessibility, epub-accessibility, CSV reporters)
  • Improves install/uninstall scripts with manifest-based file tracking and safety checks

Reviewed changes

Copilot reviewed 88 out of 89 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
.claude/settings.json Flattens hook structure, adds Windows paths, increases timeouts
.github/hooks/scripts/.js/.ps1/*.sh Migrates to hookSpecificOutput schema, adds proper metadata
.github/hooks/*.json Increases timeouts from 5-10s to 10-15s
install/uninstall scripts Adds manifest-based tracking, improves error handling, adds null-coalescing fixes
docs/skills/*.md Updates WCAG 2.4.11→2.4.13 references, expands WCAG 2.2 coverage
.github/agents/*-csv-reporter.agent.md New CSV export agents with help URL mappings
.github/agents/mobile-accessibility.agent.md New comprehensive mobile accessibility agent
.github/agents/design-system-auditor.agent.md New design token auditing agent
cross-platform-handoff.md Documents unified hook format across platforms
Various scanning scripts Adds lstatSync for symlink handling, ZIP64 detection, safety improvements

| 2.5.7 Dragging Movements | AA | Dragging functions must have non-drag alternatives |
| 2.5.8 Target Size (Minimum) | AA | Touch targets >= 24x24px (or sufficient spacing) |
| 3.2.6 Consistent Help | AA | Help mechanisms in same location across pages |
| 3.2.6 Consistent Help | A | Help mechanisms in same location across pages |

Copilot AI Feb 24, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Inconsistency in WCAG 2.4.13 description. The wcag-guide.agent.md correctly describes 2.4.13 as AAA level requiring 2px outline and 3:1 contrast, but then incorrectly lists 3.2.6 Consistent Help as AA when it's actually Level A in WCAG 2.2. This creates confusion about conformance levels.

Copilot uses AI. Check for mistakes.
Comment thread .github/hooks/scripts/session-stop.js Outdated
},
}));
process.exit(0);
process.exit(2);

Copilot AI Feb 24, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Using process.exit(2) for a blocking hook may not be the correct pattern. According to hook documentation patterns, hooks that block should return JSON with continue: false and exit with code 0. Exit code 2 typically indicates an error condition, not a deliberate block. This could cause the hook system to treat the quality gate block as an unexpected failure rather than a controlled workflow block.

Copilot uses AI. Check for mistakes.
Comment on lines +13 to +15
$agent_type = if ($null -eq $payload.agent_type) { "unknown" } else { $payload.agent_type }
$branch = if ($null -eq (git rev-parse --abbrev-ref HEAD 2>$null)) { "unknown" } else { git rev-parse --abbrev-ref HEAD 2>$null }
$remote_url = if ($null -eq (git remote get-url origin 2>$null)) { "" } else { git remote get-url origin 2>$null }

Copilot AI Feb 24, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The PowerShell null-coalescing operator ?? replacement with verbose if-else blocks reduces code readability without providing additional functionality. PowerShell 7+ supports ?? natively, and the repository appears to already use this version given the use of other modern PowerShell features. Consider keeping the more concise ?? syntax unless there's a specific PowerShell 5.1 compatibility requirement.

Copilot uses AI. Check for mistakes.
- Large text contrast (18pt / 14pt bold or larger): minimum **3:1**.
- UI component contrast (input borders, focus rings, icon buttons, chart lines): minimum **3:1** against adjacent background.
- Focus indicators: minimum **3:1** between focused and unfocused appearance (WCAG 2.4.11, AA).
- Focus indicators: minimum **3:1** between focused and unfocused appearance (WCAG 2.4.7, AA).

Copilot AI Feb 24, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The WCAG 2.4.13 reference in web-accessibility-baseline.instructions.md is incorrect. Line 64 correctly references WCAG 2.4.7 Focus Visible (AA) for the 3:1 focus indicator requirement, which is accurate. However, WCAG 2.4.13 is AAA level and has stricter requirements (2px outline + 3:1 contrast). The comment on line 64 should remain as 2.4.7, not 2.4.13, since this is the AA baseline instruction file.

Copilot uses AI. Check for mistakes.
@taylorarndt

Copy link
Copy Markdown
Member

Review Notes

Thanks for this Jeff — big PR but well organized across the 4 commits.

What works well

  • Security hardening on the desktop extension is solid (write-mode path validation, ZIP bomb protection, ZIP64 detection)
  • WCAG 2.2 alignment is correct — verified the VPAT criteria arrays (3.2.6/3.3.7 correctly moved out of AA, 3.2.3/3.2.4/4.1.3 correctly added)
  • Hook schema migration to hookSpecificOutput pattern looks good and the hooks work on my end
  • New agents (EPUB, cognitive, design system, mobile, CSV reporters) are well-structured
  • markdown-a11y-lint.mjs CI script is clean
  • Install/uninstall repo URL migration and git clone error handling are good improvements

Items to address before merge

1. .github/audit/sessions.log — should not be committed
This has your local session data (session IDs, timestamps). Should be gitignored, not tracked.

2. PreToolUse matcher was removed
Old config had "matcher": "Bash|mcp_github" scoping the safety gate to just Bash and MCP GitHub calls. Now it runs on every tool use (Read, Grep, Glob, etc.). Was this intentional? Adds overhead on every tool call.

3. Install/uninstall scripts still use the old nested hook schema
The repo's settings.json now uses the flat format ({ "type": "command", "command": "..." }), but:

  • install.sh lines 604-619 still generate the old nested { "hooks": [{ "type": "command" }] } format
  • uninstall.sh lines 143-157 still look for the old nested structure when cleaning up

New installs would get a mismatched schema vs what the repo itself uses, and uninstalls would fail to remove hook entries.

4. CLAUDE.md — Design System WCAG reference
Changed WCAG 2.4.11 to WCAG 2.4.13 Focus Appearance in the Design System knowledge domain row. SC 2.4.13 is Level AAA in WCAG 2.2, not AA. If this is aspirational that is fine, just want to flag it.

Status

Not merging yet — the install/uninstall schema mismatch (#3) needs to be fixed first. Everything else is solid work.

- #1: gitignore .github/audit/ and remove sessions.log from tracking
- #2: restore PreToolUse matcher (Bash|mcp_github) to scope safety gate
- #3: migrate install.sh, install.ps1, uninstall.sh to flat hook schema
- #4: annotate WCAG 2.4.13 Focus Appearance as (AAA) in CLAUDE.md and copilot-instructions.md
@taylorarndt

taylorarndt commented Feb 24, 2026

Copy link
Copy Markdown
Member

Hook Schema Errors on Launch

After relaunching Claude Code on this branch, every hook in .claude/settings.json is broken. The new Claude Code format requires a matcher + hooks array wrapper — our file still uses the old flat format.

Full error output:

Settings Error

/Users/taylorarndt/hq/developer/accessibility-agents/.claude/settings.json
 └ hooks
   ├ PostToolUse
   │ └ 0
   │   └ hooks: Expected array, but received undefined
   ├ PreToolUse
   │ └ 0
   │   └ hooks: Expected array, but received undefined
   ├ SessionStart
   │ └ 0
   │   └ hooks: Expected array, but received undefined
   ├ Stop
   │ └ 0
   │   └ hooks: Expected array, but received undefined
   └ UserPromptSubmit
     ├ 0
     │ └ hooks: Expected array, but received undefined
     └ 1
       └ hooks: Expected array, but received undefined

Hooks use a new format with matchers. Example:
{"PostToolUse": [{"matcher": {"tools": ["BashTool"]}, "hooks": [{"type": "command", "command": "echo Done"}]}]}

Files with errors are skipped entirely, not just the invalid settings.

What this means: Claude Code skips the entire settings file when hooks are invalid. That means all hooks (a11y-team-eval, safety-gate, audit-log, session-start, session-stop, sensitive-input-guard) are silently disabled right now. This error hits on every launch — making a Claude plugin would not help since the issue is the hook schema format in the repo's settings file.

Plan: We need to strip the hooks out of .claude/settings.json before release so users do not hit this error wall on every launch. We can re-add them in a follow-up PR once we have the new matcher format tested and validated.

I may also explore packaging this as a Claude Code plugin — not sure yet if that is the right move but I want to look into it.

accesswatch and others added 2 commits February 24, 2026 13:30
Apply principles from GitHub blog article on multi-agent workflow
reliability across the entire agent ecosystem.

## Hook Removal
- Delete all hook files (.claude/hooks/, .github/hooks/)
- Remove hook references from 60+ documentation files
- Clean .claude/settings.json
- Remove hook setup from install/uninstall/update scripts

## Multi-Agent Reliability
- Create multi-agent-reliability.instructions.md
- Add reliability standards to both AGENTS.md manifests
- Add structured output contracts to 12 orchestrator files
- Add output contracts + handoff transparency to 26 sub-agent files
- Add handoff transparency sections to 21 custom prompt files

## Instruction Strengthening
- Add Context Discovery, Audit Report Quality Requirements,
  and Automatic Trigger Detection to CLAUDE.md and
  copilot-instructions.md
- Replace SESSION CONTEXT references with workspace context

## CI Fixes
- Fix a11y-lint.mjs and markdown-a11y-lint.mjs for CI workflow

All linters pass with 0 errors.
Ran skills and got errors - four SKILL.md files were missing YAML
front matter (name + description). Added front matter to:
- cognitive-accessibility/SKILL.md
- design-system/SKILL.md
- markdown-accessibility/SKILL.md
- mobile-accessibility/SKILL.md

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@taylorarndt

taylorarndt commented Feb 24, 2026

Copy link
Copy Markdown
Member

Ran skills and hit errors - four SKILL.md files were missing YAML front matter (name + description). Fixed in the latest commit (e0731df):

  • cognitive-accessibility/SKILL.md
  • design-system/SKILL.md
  • markdown-accessibility/SKILL.md
  • mobile-accessibility/SKILL.md

I fixed the issue.

Mirrors the one-liner install section with curl/irm equivalents
for uninstall on macOS/Linux and Windows.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@taylorarndt taylorarndt merged commit 8792b6a into Community-Access:main Feb 24, 2026
3 checks passed
@accesswatch accesswatch deleted the fix/hook-schema-and-timeouts branch February 24, 2026 22:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants