@cassiomc1/forgeloop 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.cursor/rules/project-loop.mdc +18 -0
- package/.forgeloop/.gitignore +2 -0
- package/.github/copilot-instructions.md +16 -0
- package/AGENTS.md +16 -0
- package/AGENT_COMPATIBILITY.md +147 -0
- package/CLAUDE.md +14 -0
- package/CONTRACT_COVERAGE.md +27 -0
- package/DELEGATION_PROTOCOL.md +91 -0
- package/ENG/accessibility-eng.md +155 -0
- package/ENG/clean-code-eng.md +223 -0
- package/ENG/design-code-eng.md +511 -0
- package/ENG/games-code-design-web-eng.md +751 -0
- package/ENG/perf-code-eng.md +441 -0
- package/ENG/premium-sites-studio-eng.md +320 -0
- package/ENG/sec-code-eng.md +706 -0
- package/ENG/test-code-eng.md +257 -0
- package/EXECUTION_STATE.md +107 -0
- package/GUIDE_ROUTER.md +274 -0
- package/LICENSE +21 -0
- package/LICENSE-DOCS.md +13 -0
- package/LOOP_ENGINEERING.md +551 -0
- package/LOOP_SYSTEM_DESIGN.md +394 -0
- package/ORCHESTRATOR_INTEGRATION.md +106 -0
- package/PROJECT_PROFILE.md +124 -0
- package/QUALITY_SCORECARD.md +54 -0
- package/README.md +492 -0
- package/TERMINOLOGY.md +21 -0
- package/THIRD_PARTY_NOTICES.md +129 -0
- package/THREAT_MODEL.md +35 -0
- package/package.json +51 -0
- package/schemas/delegated-result.schema.json +33 -0
- package/schemas/evidence.schema.json +15 -0
- package/schemas/execution-receipt.schema.json +46 -0
- package/schemas/routing-input.schema.json +17 -0
- package/schemas/routing-result.schema.json +17 -0
- package/schemas/task-brief.schema.json +24 -0
- package/schemas/work-state.schema.json +46 -0
- package/src/cli.js +341 -0
- package/src/commands/clear-state.js +11 -0
- package/src/commands/doctor.js +165 -0
- package/src/commands/init.js +42 -0
- package/src/commands/inspect.js +17 -0
- package/src/commands/route.js +32 -0
- package/src/commands/status.js +29 -0
- package/src/commands/update.js +109 -0
- package/src/commands/validate-protocol.js +133 -0
- package/src/commands/validate-receipt.js +19 -0
- package/src/commands/validate-state.js +30 -0
- package/src/core/agent-support.js +89 -0
- package/src/core/conformance.js +133 -0
- package/src/core/delegation.js +283 -0
- package/src/core/evidence.js +56 -0
- package/src/core/filesystem.js +122 -0
- package/src/core/inspect.js +115 -0
- package/src/core/json-safety.js +54 -0
- package/src/core/manifest.js +75 -0
- package/src/core/protocol.js +81 -0
- package/src/core/receipt.js +129 -0
- package/src/core/repository.js +19 -0
- package/src/core/router.js +296 -0
- package/src/core/schema-validation.js +179 -0
- package/src/core/templates.js +56 -0
- package/src/core/work-state.js +471 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Universal verified project loop
|
|
3
|
+
alwaysApply: true
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Cursor β Universal Project Loop
|
|
7
|
+
|
|
8
|
+
1. Read [`LOOP_ENGINEERING.md`](../../LOOP_ENGINEERING.md) before planning or editing.
|
|
9
|
+
2. Confirm [`PROJECT_PROFILE.md`](../../PROJECT_PROFILE.md) from real sources; initialize it in target projects when it remains in `template` mode.
|
|
10
|
+
3. Use [`GUIDE_ROUTER.md`](../../GUIDE_ROUTER.md) to activate all relevant guides and only those guides.
|
|
11
|
+
4. Report the selected guide IDs.
|
|
12
|
+
5. Respect higher-level and local instructions and the latest request.
|
|
13
|
+
6. Make the minimum change, run a specific check, and then run proportional regression checks.
|
|
14
|
+
7. Diagnose failures before fixing them and do not repeat an attempt without new evidence.
|
|
15
|
+
8. Request authority for unrelated external or destructive actions, installations, and publications. For a task-scoped missing Qwen-MM-Plugins capability, follow `LOOP_ENGINEERING.md`; API credentials and system dependencies remain separately gated.
|
|
16
|
+
9. Report only demonstrated results and checks.
|
|
17
|
+
|
|
18
|
+
The loop and router are canonical sources; do not duplicate domain rules.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# GitHub Copilot β Universal Project Loop
|
|
2
|
+
|
|
3
|
+
Use these instructions across the repository while preserving more specific
|
|
4
|
+
directory or file rules.
|
|
5
|
+
|
|
6
|
+
- Read [`LOOP_ENGINEERING.md`](../LOOP_ENGINEERING.md) before implementing.
|
|
7
|
+
- Confirm [`PROJECT_PROFILE.md`](../PROJECT_PROFILE.md) from evidence. Initialize it in a target project when it remains in `template` mode.
|
|
8
|
+
- Select context with [`GUIDE_ROUTER.md`](../GUIDE_ROUTER.md); use all applicable guides and only those guides.
|
|
9
|
+
- Report the activated guide IDs.
|
|
10
|
+
- Respect the latest request, scope, and higher-level instructions.
|
|
11
|
+
- Make the smallest coherent change and validate it with a specific check followed by proportional regression checks.
|
|
12
|
+
- Diagnose the cause before fixing a failure; do not make random attempts.
|
|
13
|
+
- Do not install unrelated software, publish, delete, migrate, or alter external state without authority. For a task-scoped missing Qwen-MM-Plugins capability, follow `LOOP_ENGINEERING.md`; API credentials and system dependencies remain separately gated.
|
|
14
|
+
- Report the result, checks actually run, limitations, and publication state.
|
|
15
|
+
|
|
16
|
+
The loop and router are canonical; do not replicate domain rules here.
|
package/AGENTS.md
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Universal Project Loop Instructions
|
|
2
|
+
|
|
3
|
+
These instructions apply to the entire repository unless a closer, more
|
|
4
|
+
specific rule overrides them.
|
|
5
|
+
|
|
6
|
+
1. Follow platform rules, the user's latest request, and applicable local instructions first.
|
|
7
|
+
2. Read [`LOOP_ENGINEERING.md`](./LOOP_ENGINEERING.md) before planning or changing files.
|
|
8
|
+
3. Inspect [`PROJECT_PROFILE.md`](./PROJECT_PROFILE.md). Confirm facts from their sources; initialize the profile in a target project when it is still in `template` mode.
|
|
9
|
+
4. Use [`GUIDE_ROUTER.md`](./GUIDE_ROUTER.md) to select all relevant guides and only those guides.
|
|
10
|
+
5. Briefly report the activated guide IDs.
|
|
11
|
+
6. Make the smallest coherent change, run specific checks, and then run proportional regression checks.
|
|
12
|
+
7. Diagnose a failure before fixing it; do not repeat the same attempt without new evidence.
|
|
13
|
+
8. Do not install unrelated software, publish, delete, migrate data, or change external systems without applicable authority. For a task-scoped missing Qwen-MM-Plugins capability, follow the discovery protocol in `LOOP_ENGINEERING.md`; API credentials and system dependencies remain separately gated.
|
|
14
|
+
9. Finish with the result, checks actually run, limitations, and publication state.
|
|
15
|
+
|
|
16
|
+
The guides provide technical defaults; explicit requirements and project evidence prevail.
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# Agent Compatibility
|
|
2
|
+
|
|
3
|
+
`@cassiomc1/forgeloop` installs one canonical engineering loop and the smallest
|
|
4
|
+
native entry point required by each supported agent. The package does not
|
|
5
|
+
install an agent, configure a provider, or run a live model session.
|
|
6
|
+
|
|
7
|
+
## Optional capability extensions
|
|
8
|
+
|
|
9
|
+
The installed loop can direct the active agent to inspect its native model and
|
|
10
|
+
harness capabilities. When a task requires a missing multimodal capability,
|
|
11
|
+
the agent may install the smallest task-scoped `Qwen-MM-Plugins` capability
|
|
12
|
+
through the harness's native mechanism or the official upstream installer,
|
|
13
|
+
then verify that the skill/MCP tool is callable before using it. This does not
|
|
14
|
+
turn the package into a model runtime or provider configuration tool: API keys,
|
|
15
|
+
system dependencies, and unrelated environment changes remain separately
|
|
16
|
+
gated. Live model sessions and external plugin installation are outside the
|
|
17
|
+
reproducible `npm test` boundary.
|
|
18
|
+
|
|
19
|
+
## Support matrix
|
|
20
|
+
|
|
21
|
+
| Agent | Support | Reads in the installed project | Official documentation |
|
|
22
|
+
| --- | --- | --- | --- |
|
|
23
|
+
| Codex | Direct adapter | `AGENTS.md` | [OpenAI β Custom instructions with AGENTS.md](https://developers.openai.com/codex/guides/agents-md) |
|
|
24
|
+
| Claude Code | Direct adapter | `CLAUDE.md` | [Anthropic β How Claude remembers your project](https://code.claude.com/docs/en/memory) |
|
|
25
|
+
| Cursor | Direct adapter | `AGENTS.md`, `.cursor/rules/project-loop.mdc` | [Cursor β Rules](https://cursor.com/docs/rules) |
|
|
26
|
+
| GitHub Copilot | Direct adapter | `.github/copilot-instructions.md` | [GitHub β Repository custom instructions](https://docs.github.com/en/copilot/how-tos/configure-custom-instructions-in-your-ide/add-repository-instructions-in-your-ide) |
|
|
27
|
+
| Antigravity | `AGENTS.md` compatibility | `AGENTS.md` | [Antigravity β CLI best practices](https://antigravity.google/docs/cli/best-practices) |
|
|
28
|
+
| OpenCode | `AGENTS.md` compatibility | `AGENTS.md` | [OpenCode β Rules](https://opencode.ai/docs/rules/) |
|
|
29
|
+
| Hermes | `AGENTS.md` compatibility | `AGENTS.md` | [Hermes β Context files](https://github.com/NousResearch/hermes-agent/blob/main/website/docs/user-guide/features/context-files.md) |
|
|
30
|
+
| Pi | `AGENTS.md` compatibility | `AGENTS.md` | [Pi β Coding-agent SDK and context files](https://github.com/earendil-works/pi/blob/main/packages/coding-agent/docs/sdk.md) |
|
|
31
|
+
| Command Code | `AGENTS.md` compatibility | `AGENTS.md` | [Command Code β Memory](https://commandcode.ai/docs/core-concepts/memory) |
|
|
32
|
+
| Freebuff | `AGENTS.md` compatibility | `AGENTS.md` | [Freebuff β Knowledge file names](https://github.com/CodebuffAI/freebuff/blob/main/common/src/constants/knowledge.ts) |
|
|
33
|
+
|
|
34
|
+
## What direct and compatibility mean
|
|
35
|
+
|
|
36
|
+
Direct adapters are files with a format or location specifically documented
|
|
37
|
+
by the agent. Compatibility entries use the same root `AGENTS.md`; no second
|
|
38
|
+
copy of the loop is needed because the agent officially recognizes that file.
|
|
39
|
+
|
|
40
|
+
Claude Code is the important exception: it reads `CLAUDE.md`, not `AGENTS.md`.
|
|
41
|
+
The package therefore installs both files, with the Claude-specific adapter
|
|
42
|
+
pointing to the same canonical loop documents.
|
|
43
|
+
|
|
44
|
+
Codex, Cursor, and GitHub Copilot may also discover `AGENTS.md` on some
|
|
45
|
+
surfaces. The dedicated files remain useful because they make the behavior
|
|
46
|
+
explicit and cover each product's native entry point.
|
|
47
|
+
|
|
48
|
+
## Harness capability and bootstrap boundary
|
|
49
|
+
|
|
50
|
+
An adapter proves that the package installed a supported instruction or context
|
|
51
|
+
entry point. It is not proof of a callable optional tool, isolation feature,
|
|
52
|
+
review primitive, or bootstrap hook in the active harness, even when the
|
|
53
|
+
canonical loop can use one when available.
|
|
54
|
+
|
|
55
|
+
When a harness supports native context bootstrap or startup verification, prefer
|
|
56
|
+
an explicit unique marker to confirm that the expected instruction path is
|
|
57
|
+
active. When that proof is unavailable, treat the adapter file and repository
|
|
58
|
+
checks as installation evidence only.
|
|
59
|
+
|
|
60
|
+
Optional capability gaps use the loop fallback rules instead of invented
|
|
61
|
+
commands or assumed integrations. Agents should never invent a tool call to
|
|
62
|
+
simulate missing harness support. Global configuration, provider credentials,
|
|
63
|
+
system packages, and other machine-level setup remain outside the installed
|
|
64
|
+
package boundary.
|
|
65
|
+
|
|
66
|
+
## Precedence and existing instructions
|
|
67
|
+
|
|
68
|
+
`forgeloop init` never overwrites an existing instruction file. If the target
|
|
69
|
+
already contains a more specific or higher-priority file, that agent may use
|
|
70
|
+
it instead of the installed entry point:
|
|
71
|
+
|
|
72
|
+
- Codex can use `AGENTS.override.md` before `AGENTS.md`.
|
|
73
|
+
- Claude Code combines `CLAUDE.md` and closer `CLAUDE.local.md` files.
|
|
74
|
+
- Cursor may combine project rules with user rules and nested rules.
|
|
75
|
+
- Antigravity can add workspace rules under `.agents/rules/`.
|
|
76
|
+
- Hermes gives `.hermes.md`/`HERMES.md` priority over `AGENTS.md`.
|
|
77
|
+
- OpenCode can add instructions through `opencode.json` and uses
|
|
78
|
+
`CLAUDE.md` as a fallback when `AGENTS.md` is absent.
|
|
79
|
+
- Freebuff recognizes `knowledge.md`, `AGENTS.md`, and `CLAUDE.md`; an existing
|
|
80
|
+
higher-priority knowledge file can affect which project context is loaded.
|
|
81
|
+
|
|
82
|
+
When a target already has local rules, keep them and merge only the relevant
|
|
83
|
+
loop reference manually. Run `doctor --path /path/to/project` after resolving
|
|
84
|
+
the merge so missing files and managed drift are visible.
|
|
85
|
+
|
|
86
|
+
## Deterministic verification boundary
|
|
87
|
+
|
|
88
|
+
The repository verifies package contents, adapter paths, installation into a
|
|
89
|
+
selected target directory, and the official instruction-file contracts. It
|
|
90
|
+
does not launch Codex, Claude Code, or another provider during `npm test`; live
|
|
91
|
+
sessions require external authentication and are intentionally outside the
|
|
92
|
+
reproducible package test suite.
|
|
93
|
+
|
|
94
|
+
## Protocol-support commands and degraded mode
|
|
95
|
+
|
|
96
|
+
The CLI can deterministically evaluate declared routing signals, inspect target
|
|
97
|
+
health, validate local receipts and work state, and report resumable status. It
|
|
98
|
+
does not call an LLM, schedule agents, execute commands from
|
|
99
|
+
`PROJECT_PROFILE.md`, or provide `forgeloop run`/orchestration commands.
|
|
100
|
+
|
|
101
|
+
If a harness has no subagents, worktrees, web access, MCP, persistent state, or
|
|
102
|
+
Git checkout, the compatible agent continues inline and reports the missing
|
|
103
|
+
capability as a limitation. Inline execution is not independent review, a
|
|
104
|
+
non-Git target cannot provide branch/HEAD drift evidence, and a missing remote
|
|
105
|
+
service is a blocker rather than a simulated success.
|
|
106
|
+
|
|
107
|
+
The degraded-mode contract is explicit:
|
|
108
|
+
|
|
109
|
+
| Missing capability | Required behavior |
|
|
110
|
+
| --- | --- |
|
|
111
|
+
| Subagents | Execute the same brief inline; do not claim delegation or independent review. |
|
|
112
|
+
| Worktrees or isolation | Keep ownership boundaries in the brief and serialize conflicting work. |
|
|
113
|
+
| Web or MCP | Use a local equivalent only when it provides compatible evidence; otherwise mark the check not verified or blocked. |
|
|
114
|
+
| Persistent state | Keep the handoff in the current session and report that resume across sessions is unavailable. |
|
|
115
|
+
| Git checkout | Continue with local file evidence, but report that branch/HEAD drift cannot be verified. |
|
|
116
|
+
|
|
117
|
+
These are limitations of the active harness, not reasons to invent a command,
|
|
118
|
+
provider, remote service, or successful check.
|
|
119
|
+
|
|
120
|
+
## Installed files
|
|
121
|
+
|
|
122
|
+
Every initialized project receives this guide plus the canonical documents:
|
|
123
|
+
|
|
124
|
+
```text
|
|
125
|
+
AGENTS.md
|
|
126
|
+
CLAUDE.md
|
|
127
|
+
AGENT_COMPATIBILITY.md
|
|
128
|
+
LOOP_ENGINEERING.md
|
|
129
|
+
GUIDE_ROUTER.md
|
|
130
|
+
PROJECT_PROFILE.md
|
|
131
|
+
LOOP_SYSTEM_DESIGN.md
|
|
132
|
+
QUALITY_SCORECARD.md
|
|
133
|
+
TERMINOLOGY.md
|
|
134
|
+
EXECUTION_STATE.md
|
|
135
|
+
DELEGATION_PROTOCOL.md
|
|
136
|
+
ORCHESTRATOR_INTEGRATION.md
|
|
137
|
+
THIRD_PARTY_NOTICES.md
|
|
138
|
+
LICENSE
|
|
139
|
+
LICENSE-DOCS.md
|
|
140
|
+
.cursor/rules/project-loop.mdc
|
|
141
|
+
.github/copilot-instructions.md
|
|
142
|
+
ENG/
|
|
143
|
+
schemas/
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
See the main [README](https://github.com/cassiomc1/mdfiles#readme) for the complete `npx` installation,
|
|
147
|
+
diagnostic, first-run, and update workflow.
|
package/CLAUDE.md
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Claude Code β Universal Project Loop
|
|
2
|
+
|
|
3
|
+
When working in this repository:
|
|
4
|
+
|
|
5
|
+
1. Follow higher-level instructions, the user's latest request, and the closest rules for the file in scope.
|
|
6
|
+
2. Read [`LOOP_ENGINEERING.md`](./LOOP_ENGINEERING.md) before planning or editing.
|
|
7
|
+
3. Verify [`PROJECT_PROFILE.md`](./PROJECT_PROFILE.md) against real sources. Initialize it in a target project when it remains in `template` mode.
|
|
8
|
+
4. Consult [`GUIDE_ROUTER.md`](./GUIDE_ROUTER.md), select all relevant guides and only those guides, and announce their IDs.
|
|
9
|
+
5. Make small changes, run a specific check, and then run proportional regression checks.
|
|
10
|
+
6. Investigate the root cause of a failure before fixing it.
|
|
11
|
+
7. Request authority for unrelated installation, publication, deletion, migration, or another external or destructive action. For a task-scoped missing Qwen-MM-Plugins capability, follow `LOOP_ENGINEERING.md`; API credentials and system dependencies remain separately gated.
|
|
12
|
+
8. Report current evidence, limitations, and publication state without claiming checks that were not run.
|
|
13
|
+
|
|
14
|
+
Do not duplicate guide rules here; treat the loop and router as canonical sources.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Protocol contract coverage map
|
|
2
|
+
|
|
3
|
+
Every critical contract maps to an implementation and executable positive and
|
|
4
|
+
negative evidence. A row is not complete when it has only structural schema
|
|
5
|
+
coverage.
|
|
6
|
+
|
|
7
|
+
| Contract | Implementation | Positive test | Negative test |
|
|
8
|
+
| --- | --- | --- | --- |
|
|
9
|
+
| Routing work types and primary guides | `src/core/router.js` | `tests/routing-invariants.test.js` and `tests/fixtures/routes/` | unknown work type in `tests/router.test.js` |
|
|
10
|
+
| Routing platform semantics | `src/core/router.js`, `GUIDE_ROUTER.md` | mobile/desktop/server/CI cases in `tests/routing-invariants.test.js` | platform-only no-guide case |
|
|
11
|
+
| Routing exclusions and invariants | `assertRouteInvariants` | route fixture loop | overlap, missing reason, and primary checks |
|
|
12
|
+
| State transitions | `src/core/protocol.js` | `tests/protocol-transitions.test.js` | terminal regression and same-phase cases |
|
|
13
|
+
| Contract and repository freshness | `src/core/work-state.js`, `classifyLoadedWorkState` | `tests/checkpoint-freshness.test.js`, `tests/validate-protocol-cli.test.js` | changed contract/HEAD, omitted contract, and missing comparison |
|
|
14
|
+
| Required artifact freshness | `readRequiredArtifactFingerprints`, `classifyLoadedWorkState` | `tests/checkpoint-freshness.test.js`, `tests/validate-protocol-cli.test.js` | matching hash, missing, and changed artifact cases |
|
|
15
|
+
| Schema health | `inspectSchemaHealth` | `tests/schema-health.test.js` | missing, invalid, and unsupported-version schemas |
|
|
16
|
+
| Evidence vocabulary | `src/core/evidence.js` | `tests/evidence.test.js` | unknown kind and incomplete record |
|
|
17
|
+
| Receipt semantics | `src/core/receipt.js` | `tests/receipt-semantics.test.js` | unsupported publication, review, check, and completion claims |
|
|
18
|
+
| Cross-artifact conformance | `src/core/conformance.js`, `src/commands/validate-protocol.js` | `tests/conformance.test.js`, `tests/validate-protocol-cli.test.js` | `stateClassification`, derived stale details, precedence, mismatch, incomplete, and incompatible fixtures |
|
|
19
|
+
| Delegation conflicts | `src/core/delegation.js` | `tests/delegation-set.test.js` | WRITE/WRITE, WRITE/READ, unknown dependency, and cycle cases |
|
|
20
|
+
| Safe path boundary | `src/core/filesystem.js` | `tests/core.test.js`, `tests/portability.test.js` | traversal, drive escape, and symlink fixtures |
|
|
21
|
+
| Untrusted JSON limits | `src/core/json-safety.js` | `tests/security-limits.test.js` | depth, array, string, and byte limits |
|
|
22
|
+
| Artifact content boundary | `src/core/receipt.js`, `scripts/scan_secrets.py` | `tests/security-limits.test.js`, `tests/test_scan_secrets.py` | nested marker values and scanner fixtures |
|
|
23
|
+
| Deterministic CLI JSON | CLI command modules | route, inspect, status, doctor, state, receipt, and protocol tests | malformed artifact and path-boundary cases |
|
|
24
|
+
|
|
25
|
+
The map is maintained with the protocol and is intentionally explicit about
|
|
26
|
+
negative evidence. Remote checks, provider calls, publication, and deployment
|
|
27
|
+
remain outside the local contract.
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# Delegation protocol
|
|
2
|
+
|
|
3
|
+
`ForgeLoop` defines coordination contracts but does not schedule agents or
|
|
4
|
+
provide a multi-agent runtime. A compatible harness may execute a validated
|
|
5
|
+
brief through native subagents; a harness without that capability executes the
|
|
6
|
+
same brief inline and reports the degraded mode.
|
|
7
|
+
|
|
8
|
+
## Task brief
|
|
9
|
+
|
|
10
|
+
A delegated task is self-contained and versioned:
|
|
11
|
+
|
|
12
|
+
```json
|
|
13
|
+
{
|
|
14
|
+
"schemaVersion": 1,
|
|
15
|
+
"protocolVersion": 1,
|
|
16
|
+
"taskId": "child-1",
|
|
17
|
+
"parentTaskId": "parent-1",
|
|
18
|
+
"objective": "One independently verifiable objective.",
|
|
19
|
+
"allowedPaths": ["src/feature.js"],
|
|
20
|
+
"readOnlyPaths": ["README.md"],
|
|
21
|
+
"dependencies": [],
|
|
22
|
+
"constraints": [],
|
|
23
|
+
"requiredGuides": ["clean", "test"],
|
|
24
|
+
"verification": ["npm test"],
|
|
25
|
+
"authority": ["write only allowed paths"],
|
|
26
|
+
"deliverables": ["code and test result"],
|
|
27
|
+
"executionMode": "delegated"
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
`allowedPaths` are write ownership. `readOnlyPaths` may be inspected but not
|
|
32
|
+
changed. Absolute paths, traversal, duplicate paths, and allowed/read-only
|
|
33
|
+
overlap are invalid. Two briefs with exact or parent/child write overlap must
|
|
34
|
+
be serialized or assigned to one integration owner. Dependencies are explicit
|
|
35
|
+
and cycles are rejected.
|
|
36
|
+
|
|
37
|
+
Resource access is classified explicitly:
|
|
38
|
+
|
|
39
|
+
```text
|
|
40
|
+
WRITE / WRITE β conflict
|
|
41
|
+
WRITE / READ β SERIAL_REQUIRED
|
|
42
|
+
READ / READ β safe
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
The parent task owns integration. `validateDelegationSet` rejects duplicate
|
|
46
|
+
task IDs, self-dependencies, unknown dependency references, cycles, invalid
|
|
47
|
+
guide/path boundaries, missing verification, missing authority, and secret
|
|
48
|
+
material. It returns `PARALLEL_SAFE`, `SERIAL_REQUIRED`, or `INVALID` with
|
|
49
|
+
stable conflict/error records.
|
|
50
|
+
|
|
51
|
+
Parallel work is eligible only when shared files, shared state, ordering
|
|
52
|
+
dependencies, and external resources have been checked. A database migration
|
|
53
|
+
and code that depends on its new shape are not independent tasks.
|
|
54
|
+
|
|
55
|
+
## Result normalization
|
|
56
|
+
|
|
57
|
+
Every delegated result uses:
|
|
58
|
+
|
|
59
|
+
```text
|
|
60
|
+
STATUS
|
|
61
|
+
CHANGES
|
|
62
|
+
VERIFICATION
|
|
63
|
+
OPEN FINDINGS
|
|
64
|
+
LIMITATIONS
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Valid statuses are `complete`, `complete-with-concerns`, `needs-context`, and
|
|
68
|
+
`blocked`. Results are serializable, secret-free, and validated against
|
|
69
|
+
`schemas/delegated-result.schema.json`.
|
|
70
|
+
Complete results also require structured observed or inferred verification
|
|
71
|
+
evidence.
|
|
72
|
+
|
|
73
|
+
## Review and integration
|
|
74
|
+
|
|
75
|
+
An independent reviewer receives the approved brief, resulting diff,
|
|
76
|
+
verification evidence, and known risks. A review is independent only when the
|
|
77
|
+
reviewer identity differs from the implementer and the result explicitly uses
|
|
78
|
+
`reviewType: "independent"`; a second pass by the same identity is self-review.
|
|
79
|
+
|
|
80
|
+
The parent agent integrates in dependency order:
|
|
81
|
+
|
|
82
|
+
1. validate each result against its brief;
|
|
83
|
+
2. detect overlapping changes and unresolved findings;
|
|
84
|
+
3. integrate non-overlapping results in dependency order;
|
|
85
|
+
4. run targeted checks and combined regression;
|
|
86
|
+
5. perform final specification and quality review.
|
|
87
|
+
|
|
88
|
+
If subagents, worktrees, or parallel tools are unavailable, use
|
|
89
|
+
`executionMode: "inline"`. This preserves the task contract but cannot claim
|
|
90
|
+
parallelism or independent review. Missing capabilities are limitations, not
|
|
91
|
+
silent successes.
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: accessibility-eng
|
|
3
|
+
language: en
|
|
4
|
+
description: "Practical WCAG 2.2-oriented accessibility protocol for web, mobile, and desktop."
|
|
5
|
+
version: "2026.09"
|
|
6
|
+
last-reviewed: "2026-08-10"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Accessibility as a Baseline (A11Y)
|
|
10
|
+
|
|
11
|
+
> Accessibility instructions adapted from the [A11Y.md](https://github.com/fecarrico/A11Y.md) project (Felipe A. CarriΓ§o, MIT license) β a validation protocol and persistent context system for building accessible software from the very first line of code, informed by **WCAG 2.2** and **ISO 9241-171**. It can support evidence for applicable **ADA** or **EAA** obligations, but does not itself determine legal compliance.
|
|
12
|
+
> **Related documents**: for visual/UX direction (palettes, typography, motion), see [`design-code-eng.md`](./design-code-eng.md). For automated testing tools (axe-core, Lighthouse, visual regression), see [`test-code-eng.md`](./test-code-eng.md). For code quality/structure, see [`clean-code-eng.md`](./clean-code-eng.md). For HTML-based video and motion, also see [HyperFrames](https://hyperframes.heygen.com). This file is the canonical reference for **accessibility rules** (WCAG, ARIA, keyboard, focus, screen readers) β it does not repeat the content of the others.
|
|
13
|
+
> **Tooling policy**: identify the stack, the stage, and the applicable checks; prefer an already available equivalent that produces compatible evidence. Ask for authorization before installing a tool or changing the environment. If no safe equivalent exists, record the required check as blocked and never claim that it passed. Do not install merely optional resources.
|
|
14
|
+
|
|
15
|
+
## 0. Principle Zero: accessibility as a pre-condition
|
|
16
|
+
|
|
17
|
+
- Accessibility is not a feature or an incremental improvement; it is a **pre-condition for use**.
|
|
18
|
+
- If a user cannot complete a task due to an accessibility barrier, the feature is considered **technically broken**.
|
|
19
|
+
- **Task completion** success is our primary quality metric.
|
|
20
|
+
|
|
21
|
+
## 0.1. Compliance profiles
|
|
22
|
+
|
|
23
|
+
This document's default implementation target is **Standard (AA)**. It supports WCAG-oriented implementation; it does not certify a product or establish automatic legal compliance. Certification and legal obligations depend on an assessment with defined scope, evidence, and the applicable jurisdiction. When generating or reviewing interface code, the agent **MUST ask** the user which profile to apply if not already specified:
|
|
24
|
+
|
|
25
|
+
| Profile | Target | Contrast (text / UI) | Min fontβ | Min target | Use case |
|
|
26
|
+
| :--- | :--- | :--- | :--- | :--- | :--- |
|
|
27
|
+
| **π‘οΈ Shield (AAA)** | WCAG AAA | 7:1 / 3:1 (SC 1.4.6, 1.4.11) | 14pxβ | 44Γ44px (SC 2.5.5) Β· 48Γ48pxβ advised | Regulated industries, healthcare, gov |
|
|
28
|
+
| **βοΈ Standard (AA)** | WCAG AA | 4.5:1 / 3:1 (SC 1.4.3, 1.4.11) | 12pxβ | 24Γ24px (SC 2.5.8) Β· 44Γ44pxβ advised | Default. Production apps, public web |
|
|
29
|
+
| **π Launchpad (A)** | WCAG A | 3:1β (house floor) | 10pxβ | 24Γ24pxβ | MVPs, internal tools, prototypes |
|
|
30
|
+
|
|
31
|
+
*β = **House Rule**, non-normative: this standard's ergonomic policy where WCAG requires less β or nothing β at that level. WCAG defines no minimum font size at any level; Level A defines no contrast or target-size criteria; 44β48px targets come from Apple HIG / Material Design. Skipping a **WCAG SC** at your target level MUST be logged in `EXCEPTIONS.md`; relaxing a **House Rule** is a product decision β record it in `A11Y-DECISIONS.md`.*
|
|
32
|
+
|
|
33
|
+
*The Launchpad profile additionally requires explicit `EXCEPTIONS.md` documentation for each criterion relaxed below AA.*
|
|
34
|
+
|
|
35
|
+
> β οΈ The **Launchpad (A)** profile does NOT relax CRITICAL rules (Section 1). Keyboard operability remains a Level A WCAG requirement; semantic HTML and focus management remain mandatory baseline requirements of this guide at every profile.
|
|
36
|
+
|
|
37
|
+
## 1. Severity and impact model
|
|
38
|
+
|
|
39
|
+
Evaluate the impact of any design or implementation decision following these levels:
|
|
40
|
+
|
|
41
|
+
- π΄ **CRITICAL:** **operation** failures. Blocks task completion or renders the function unusable (e.g., broken keyboard navigation, click on `div`/`span`, modal without focus management). **MUST FIX.**
|
|
42
|
+
- π **HIGH:** **perception and readability** failures. Significantly increases the error or abandonment rate (e.g., insufficient contrast, fonts < 12px in critical text, lack of dynamic feedback). **MUST FIX.**
|
|
43
|
+
- π‘ **MEDIUM:** reduces **efficiency and satisfaction** (e.g., lack of optional keyboard shortcuts, lack of redundant labels). **SHOULD FIX.**
|
|
44
|
+
- π΅ **LOW:** **cosmetic or polish** impact (e.g., micro-interactions without `aria-label`, improvements to focus indicators that are already visible). **MAY FIX.**
|
|
45
|
+
|
|
46
|
+
## 2. AI agent behavior contract
|
|
47
|
+
|
|
48
|
+
To ensure technical integrity, any AI interacting with the project **MUST**:
|
|
49
|
+
|
|
50
|
+
- **No inference:** never infer accessibility without direct evidence in the code or specification.
|
|
51
|
+
- **Reference APG:** prioritize patterns from the [WAI-ARIA Authoring Practices Guide (APG)](https://www.w3.org/WAI/ARIA/apg/).
|
|
52
|
+
- **Protocol for ambiguity:** follow the *Complex Component Protocol* (Section 5) in case of uncertainty.
|
|
53
|
+
- **Explain trade-offs:** explain impacts on Accessibility vs UX vs Business when suggesting changes.
|
|
54
|
+
- **UI component interrogation:** before adding `onClick` to non-semantic elements, **propose replacing them** with native elements or full ARIA patterns.
|
|
55
|
+
- **Framework adaptation:** examples use React/TSX syntax. On **web** frameworks, transpose patterns to the active project's framework while preserving semantic equivalence.
|
|
56
|
+
- **Platform awareness:** identify the target platform **before** applying any technical reference. The normative layer (Principle Zero, POUR, profiles, severity, governance) is platform-agnostic; the technical references are web-first. On native platforms (iOS, Android, React Native, Flutter), read web references as **semantic intent to translate β never implementation to copy**: no ARIA attributes or CSS pixels outside the web.
|
|
57
|
+
- **Component reuse:** before generating any interactive component, check for an existing implementation in the project or its design system and extend it. Generating a parallel implementation of an existing pattern is a violation.
|
|
58
|
+
- **Decision memory:** choices between equally conformant alternatives (e.g., `alertdialog` vs `dialog` for a destructive confirmation) MUST be recorded in `A11Y-DECISIONS.md` β indexed by pattern, never by screen β and reused in later turns.
|
|
59
|
+
- **Mode awareness:** when generating new code, apply all rules proactively. When reviewing existing code, identify violations, classify by severity (Section 1), and suggest targeted fixes β do not propose full rewrites unless the structural damage is CRITICAL. If an `EXCEPTIONS.md` exists, consult it: an entry there is a legitimate dispensation, but an entry past its expiry date MUST be flagged as π HIGH technical debt.
|
|
60
|
+
|
|
61
|
+
## 3. Technical standards (POUR framework)
|
|
62
|
+
|
|
63
|
+
### Perceivable
|
|
64
|
+
|
|
65
|
+
- **Contrast (SC 1.4.3, 1.4.11):** text **MUST** have 4.5:1; UI components and meaningful graphics **MUST** have 3:1. Prioritize real **luminance difference** (light vs dark) beyond hue.
|
|
66
|
+
- **Alt text (SC 1.1.1):** informative images **MUST** have a functional description in `alt`; decorative images use `alt=""` or `aria-hidden="true"`.
|
|
67
|
+
- **Channels beyond color (SC 1.4.1):** **MUST NOT** convey state, action, response, or information with color alone. Choose the additional channel appropriate to the meaning β visible text, icon, pattern, or programmatic semantics β without imposing the same visual redundancy in every case.
|
|
68
|
+
- **Visual patterns:** when differentiation in charts or dashboards depends on color, patterns, labels, textures, or distinct line styles **MUST** enable users to distinguish series without color.
|
|
69
|
+
|
|
70
|
+
### Operable
|
|
71
|
+
|
|
72
|
+
- **Keyboard (SC 2.1.1):** all functionality **MUST** be operable without a mouse. Where the function depends on the path of movement rather than only its endpoints, document why the WCAG exception applies and provide a practical alternative when possible. Avoid purely pointer-based listeners without keyboard event equivalents (`onKeyDown`).
|
|
73
|
+
- **Focus (SC 2.4.7, 2.4.11):** focus **MUST** be visible, never entirely obscured by author content (e.g., sticky headers/footers), persistent, and never suppressed via CSS (`outline: none` without fallback is forbidden).
|
|
74
|
+
- **SPA routing:** after client-side routing changes, focus **MUST** be managed and properly reset (e.g., sending focus to the top or an `h1`). Avoid lost focus on the screen.
|
|
75
|
+
- **Targets (SC 2.5.8):** interactive elements MUST have a minimum size of **24Γ24 CSS pixels** β the WCAG 2.2 AA floor β except when an equivalent larger target exists, sufficient spacing prevents accidental activation, or the target sits inline in text.
|
|
76
|
+
**House Ruleβ :** design to **44Γ44px** (48Γ48 under Shield), the ergonomic floor shared by Apple HIG and Material Design. Under Shield, 44Γ44 is normative (SC 2.5.5 AAA).
|
|
77
|
+
- **Dragging (SC 2.5.7, AA):** all functionality operated by dragging MUST have a simple pointer alternative that does not require dragging, unless dragging is essential or the behavior is provided by the user agent and has not been modified by the author. The alternative cannot rely only on a path-based gesture.
|
|
78
|
+
- **Motion (SC 2.3.3 AAA β enforced as a House Ruleβ at every profile):** on the web, **MUST** respect `@media (prefers-reduced-motion)`; on native platforms, honor the equivalent system setting or provide a control to reduce non-essential interaction-triggered motion. Avoid heavy state animations during crucial transitions when that preference is active.
|
|
79
|
+
|
|
80
|
+
### Understandable
|
|
81
|
+
|
|
82
|
+
- **Labels (SC 1.3.1, 3.3.2):** forms **MUST** have explicit labels connected via `id`/`for`, or via tag wrapping. Avoid reinventions that break native browser events.
|
|
83
|
+
- **Predictability:** navigation behavior **MUST** be consistent and interactions must not cause unannounced sudden structural changes.
|
|
84
|
+
- **Consistent help (SC 3.2.6, A):** if a help mechanism β human contact, self-help, or automated contact β is repeated on multiple pages within a set, it MUST occur in the same order relative to the other content, unless the user initiated a change. The criterion does not require providing help.
|
|
85
|
+
- **Redundant entry (SC 3.3.7, A):** information previously entered by or provided to the user in the same process and required again MUST be auto-populated or available for selection, unless re-entry is essential, necessary for content security, or the information is no longer valid.
|
|
86
|
+
- **Accessible authentication β minimum (SC 3.3.8, AA):** do not require a cognitive function test to complete any authentication step without an alternative that does not use one or a mechanism that helps complete it. Supporting password managers and paste reduces memory and transcription burdens; treat only object recognition or user-provided non-text personal content as the listed exceptions.
|
|
87
|
+
- **Dynamic feedback (SC 4.1.3):** place the announcement region in the DOM before updating its message. Use `role="status"` or `aria-live="polite"` for non-urgent information and reserve `role="alert"` for urgent errors; test announcements in supported browser and assistive-technology combinations.
|
|
88
|
+
|
|
89
|
+
### Robust
|
|
90
|
+
|
|
91
|
+
- **Semantic HTML:** **MUST** prefer native (HTML5) elements over custom ones.
|
|
92
|
+
- **Interoperability:** the code **MUST** be compatible with current assistive technologies (ISO 9241-171).
|
|
93
|
+
|
|
94
|
+
## 4. Visual directives (strict UI criteria)
|
|
95
|
+
|
|
96
|
+
These directives combine WCAG requirements where identified and this guide's ergonomic recommendations. They support implementation but do not assure certification or legal compliance.
|
|
97
|
+
|
|
98
|
+
- **Focus indicator (SC 2.4.13, AAA):** when this criterion is applied, the visible indicator area MUST be at least equivalent to a 2 CSS pixel thick perimeter of the unfocused component or sub-component and have at least 3:1 contrast between the same pixels in focused and unfocused states. Applicable non-text contrast (SC 1.4.11) remains required. A solid 2px outline is a simple way to meet the area requirement, not the only one. (The AA floor is focus visible β SC 2.4.7 β and not entirely obscured by author content β SC 2.4.11.)
|
|
99
|
+
- **Typography (House Ruleβ β WCAG defines no minimum font size at any level):** text **MUST NOT** be smaller than the minimum font size of the active compliance profile (Section 0.1); 12px under the default Standard (AA).
|
|
100
|
+
- *Density exception:* in complex dashboards or secondary metadata (badges), **min 10px** is allowed, provided the contrast is raised to **7:1** as mitigation β a trade-off defined by this standard's policy, not by WCAG β and the relaxation is documented in `EXCEPTIONS.md`.
|
|
101
|
+
- **Target spacing and hit area:** see *Section 3 β Targets* for the minimum size rule and exceptions. In dense UIs (e.g., tables), if the visual size is smaller than 44px, the **hit area** (invisible clickable area) **MUST** be expanded via CSS/padding. Adjacent targets **SHOULD** have 8px of spacing.
|
|
102
|
+
|
|
103
|
+
## 5. Complex component protocol
|
|
104
|
+
|
|
105
|
+
When identifying an unmapped or highly complex component (e.g., charts, dynamic grids):
|
|
106
|
+
|
|
107
|
+
1. **Identify:** look for a similar pattern in the [WAI-ARIA APG](https://www.w3.org/WAI/ARIA/apg/).
|
|
108
|
+
2. **Validate:** request human validation with a screen reader β the AI **MUST NOT** claim this test was performed, nor fabricate its results.
|
|
109
|
+
3. **Document:** document the expected behavior (keyboard and announcements).
|
|
110
|
+
4. **Scale:** record the resolved pattern in `A11Y-DECISIONS.md` so future components reuse it instead of re-deriving it.
|
|
111
|
+
|
|
112
|
+
## 6. Anti-patterns (Do NOT do this)
|
|
113
|
+
|
|
114
|
+
- **Actions that are buttons:** use `<button>` for actions unless a documented technical impossibility prevents it. In that case, implement the complete APG button pattern: accessible role and name, appropriate `disabled` state, `aria-pressed` for a toggle when applicable, Enter and Space activation, focus management after activation, and manual assistive-technology testing in supported combinations.
|
|
115
|
+
- **Leaked focus traps:** **MUST NOT** create modals without managing focus. When a modal is open:
|
|
116
|
+
- focus MUST move into the modal;
|
|
117
|
+
- focus MUST be trapped within the modal;
|
|
118
|
+
- focus MUST return to the triggering element when closed;
|
|
119
|
+
- background content MUST NOT be interactive or reachable via keyboard.
|
|
120
|
+
- **Placeholder labels:** **MUST NOT** use `placeholder` as the sole form of label. Crucial instructions (like date formats) **MUST** be visible outside the field to prevent disappearance during filling.
|
|
121
|
+
- **ARIA soup:** **MUST NOT** add ARIA where native HTML already provides the semantics β no ARIA is better than bad ARIA. Forbidden by default: redundant roles (`role="button"` on a `<button>`), `aria-label` duplicating visible text (harmless today, but it drifts into an SC 2.5.3 failure when the text changes), and static ARIA states that are never updated (hardcoded `aria-expanded` β an SC 4.1.2 failure). ARIA is the fallback for gaps in native semantics ([First Rule of ARIA Use](https://www.w3.org/TR/using-aria/#rule1)), not a seasoning. The number of ARIA attributes is not evidence of accessibility; validate behavior, semantics, and assistive-technology support.
|
|
122
|
+
- **Decoration without an accessible role:** **MUST NOT** add `aria-label` to purely decorative content without an accessible role. Expose an accessible name only for a control, informative image, or other semantics that genuinely need to be announced.
|
|
123
|
+
- **Reinventing the complex wheel:** if you need complex components (autocomplete selects, treeviews, datepickers), it is strongly recommended to use robust and accessible libraries (e.g., Headless UI) rather than building proprietary logic from scratch.
|
|
124
|
+
|
|
125
|
+
## 7. Verification workflow (Definition of Done)
|
|
126
|
+
|
|
127
|
+
- [ ] **Technical check:** run the project's already configured static accessibility checks and engines such as `Axe` where applicable (see [`test-code-eng.md`](./test-code-eng.md) for tool selection). Do not install a tool solely to satisfy this item; record a required unavailable check as blocked.
|
|
128
|
+
- [ ] **Tab order:** `Tab` key path manually validated (ensures absence of frontend dead-ends).
|
|
129
|
+
- [ ] **Focus (SC 2.4.13, AAA when applicable):** measure the area equivalent to a 2 CSS pixel perimeter and 3:1 contrast between the same pixels in focused and unfocused states; also verify applicable non-text contrast.
|
|
130
|
+
- [ ] **Dragging (SC 2.5.7, AA):** test every drag operation with a simple pointer alternative that does not require dragging; document the essentiality or user-agent exception, if any.
|
|
131
|
+
- [ ] **Consistent help (SC 3.2.6, A):** compare pages in the same set and confirm repeated help mechanisms retain the same relative order, unless the user initiated a change.
|
|
132
|
+
- [ ] **Redundant entry (SC 3.3.7, A):** run multi-step processes and confirm auto-population or selection of previously provided information, or record the applicable exception.
|
|
133
|
+
- [ ] **Authentication (SC 3.3.8, AA):** test the whole flow, including MFA, without requiring unassisted memorization, solving, or transcription; confirm password-manager and paste support when they are the chosen mechanism.
|
|
134
|
+
- [ ] **User flow and announcements:** manually test dynamic interactions without a mouse. Confirm DOM-present regions announce non-urgent messages through `role="status"` or `aria-live="polite"`, reserve `role="alert"` for urgent errors, and work in supported browser and assistive-technology combinations.
|
|
135
|
+
- [ ] **Zoom and reflow:** text resizes up to 200% without loss of content or function (SC 1.4.4); content reflows at 320 CSS px width β equivalent to 400% zoom on a 1280px viewport β without two-dimensional scrolling (SC 1.4.10). Preserve flexibility using relative units (rem/em).
|
|
136
|
+
- [ ] **Color and perception:** no functional loss when color is unavailable; confirm the additional channel appropriate to the meaning without requiring universal visual redundancy.
|
|
137
|
+
- [ ] **Exceptions audit:** `EXCEPTIONS.md` reviewed β every active entry has a risk owner, approver, tracking issue, and expiry; no expired entries left unaddressed.
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## References
|
|
142
|
+
|
|
143
|
+
- Original project: https://github.com/fecarrico/A11Y.md (MIT license β Felipe A. CarriΓ§o)
|
|
144
|
+
- WAI-ARIA Authoring Practices Guide (APG): https://www.w3.org/WAI/ARIA/apg/
|
|
145
|
+
- WAI: Understanding SC 2.4.13 Focus Appearance: https://www.w3.org/WAI/WCAG22/Understanding/focus-appearance.html
|
|
146
|
+
- WAI: Understanding SC 2.5.7 Dragging Movements: https://www.w3.org/WAI/WCAG22/Understanding/dragging-movements.html
|
|
147
|
+
- WAI: Understanding SC 3.2.6 Consistent Help: https://www.w3.org/WAI/WCAG22/Understanding/consistent-help.html
|
|
148
|
+
- WAI: Understanding SC 3.3.7 Redundant Entry: https://www.w3.org/WAI/WCAG22/Understanding/redundant-entry.html
|
|
149
|
+
- WAI: Understanding SC 3.3.8 Accessible Authentication (Minimum): https://www.w3.org/WAI/WCAG22/Understanding/accessible-authentication-minimum.html
|
|
150
|
+
- WAI: ARIA22 technique for `role="status"`: https://www.w3.org/WAI/WCAG21/Techniques/aria/ARIA22.html
|
|
151
|
+
- WAI: ARIA19 technique for `role="alert"`: https://www.w3.org/WAI/WCAG21/Techniques/aria/ARIA19.html
|
|
152
|
+
- eBay MIND Patterns: https://ebay.github.io/mindpatterns/
|
|
153
|
+
- Deque Axe Core: https://github.com/dequelabs/axe-core
|
|
154
|
+
- WCAG 2.2: https://www.w3.org/TR/WCAG22/
|
|
155
|
+
- Optional templates from the original project: accessibility report (`REPORT.md`), exceptions log (`EXCEPTIONS.md`), and decisions log (`A11Y-DECISIONS.md`) β available under `docs/*/templates/` in the original repository.
|