@event4u/agent-config 1.16.0 → 1.17.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/.agent-src/commands/{agents-audit.md → agents/audit.md} +4 -3
- package/.agent-src/commands/{agents-cleanup.md → agents/cleanup.md} +12 -6
- package/.agent-src/commands/{agents-prepare.md → agents/prepare.md} +4 -3
- package/.agent-src/commands/agents.md +46 -0
- package/.agent-src/commands/{chat-history-checkpoint.md → chat-history/checkpoint.md} +4 -4
- package/.agent-src/commands/{chat-history-clear.md → chat-history/clear.md} +4 -4
- package/.agent-src/commands/{chat-history-resume.md → chat-history/resume.md} +4 -4
- package/.agent-src/commands/chat-history/show.md +107 -0
- package/.agent-src/commands/chat-history.md +33 -89
- package/.agent-src/commands/{commit-in-chunks.md → commit/in-chunks.md} +15 -13
- package/.agent-src/commands/commit.md +22 -2
- package/.agent-src/commands/{context-create.md → context/create.md} +4 -3
- package/.agent-src/commands/{context-refactor.md → context/refactor.md} +4 -3
- package/.agent-src/commands/context.md +44 -0
- package/.agent-src/commands/{copilot-agents-init.md → copilot-agents/init.md} +4 -3
- package/.agent-src/commands/{copilot-agents-optimize.md → copilot-agents/optimize.md} +4 -3
- package/.agent-src/commands/copilot-agents.md +44 -0
- package/.agent-src/commands/council/default.md +221 -0
- package/.agent-src/commands/{council-design.md → council/design.md} +6 -5
- package/.agent-src/commands/{council-optimize.md → council/optimize.md} +7 -6
- package/.agent-src/commands/{council-pr.md → council/pr.md} +6 -5
- package/.agent-src/commands/council.md +47 -212
- package/.agent-src/commands/{create-pr-description.md → create-pr/description-only.md} +4 -2
- package/.agent-src/commands/create-pr.md +26 -5
- package/.agent-src/commands/{feature-dev.md → feature/dev.md} +5 -10
- package/.agent-src/commands/{feature-explore.md → feature/explore.md} +4 -8
- package/.agent-src/commands/{feature-plan.md → feature/plan.md} +4 -8
- package/.agent-src/commands/{feature-refactor.md → feature/refactor.md} +4 -8
- package/.agent-src/commands/{feature-roadmap.md → feature/roadmap.md} +6 -10
- package/.agent-src/commands/feature.md +6 -12
- package/.agent-src/commands/{fix-ci.md → fix/ci.md} +4 -8
- package/.agent-src/commands/{fix-portability.md → fix/portability.md} +4 -8
- package/.agent-src/commands/{fix-pr-bot-comments.md → fix/pr-bots.md} +4 -8
- package/.agent-src/commands/{fix-pr-developer-comments.md → fix/pr-developers.md} +4 -8
- package/.agent-src/commands/{fix-pr-comments.md → fix/pr.md} +7 -11
- package/.agent-src/commands/{fix-references.md → fix/refs.md} +4 -8
- package/.agent-src/commands/{fix-seeder.md → fix/seeder.md} +4 -8
- package/.agent-src/commands/fix.md +7 -13
- package/.agent-src/commands/{do-and-judge.md → judge/on-diff.md} +4 -3
- package/.agent-src/commands/judge/solo.md +90 -0
- package/.agent-src/commands/{do-in-steps.md → judge/steps.md} +4 -3
- package/.agent-src/commands/judge.md +35 -70
- package/.agent-src/commands/{memory-add.md → memory/add.md} +4 -3
- package/.agent-src/commands/{memory-full.md → memory/load.md} +4 -3
- package/.agent-src/commands/{memory-promote.md → memory/promote.md} +4 -3
- package/.agent-src/commands/{propose-memory.md → memory/propose.md} +4 -3
- package/.agent-src/commands/memory.md +48 -0
- package/.agent-src/commands/{module-create.md → module/create.md} +4 -3
- package/.agent-src/commands/{module-explore.md → module/explore.md} +4 -3
- package/.agent-src/commands/module.md +44 -0
- package/.agent-src/commands/{optimize-agents.md → optimize/agents.md} +4 -8
- package/.agent-src/commands/{optimize-augmentignore.md → optimize/augmentignore.md} +4 -9
- package/.agent-src/commands/{optimize-rtk-filters.md → optimize/rtk.md} +4 -8
- package/.agent-src/commands/{optimize-skills.md → optimize/skills.md} +4 -8
- package/.agent-src/commands/optimize.md +4 -10
- package/.agent-src/commands/{override-create.md → override/create.md} +4 -3
- package/.agent-src/commands/{override-manage.md → override/manage.md} +4 -3
- package/.agent-src/commands/override.md +44 -0
- package/.agent-src/commands/{roadmap-create.md → roadmap/create.md} +4 -3
- package/.agent-src/commands/{roadmap-execute.md → roadmap/execute.md} +4 -3
- package/.agent-src/commands/roadmap.md +44 -0
- package/.agent-src/commands/{tests-create.md → tests/create.md} +4 -3
- package/.agent-src/commands/{tests-execute.md → tests/execute.md} +4 -3
- package/.agent-src/commands/tests.md +44 -0
- package/.agent-src/contexts/communication/rules-auto/artifact-engagement-recording-mechanics.md +72 -0
- package/.agent-src/contexts/communication/rules-auto/augment-portability-mechanics.md +79 -0
- package/.agent-src/contexts/communication/rules-auto/augment-source-of-truth-mechanics.md +98 -0
- package/.agent-src/contexts/communication/rules-auto/cli-output-handling-mechanics.md +87 -0
- package/.agent-src/contexts/communication/rules-auto/command-suggestion-policy-mechanics.md +62 -0
- package/.agent-src/contexts/communication/rules-auto/docs-sync-mechanics.md +78 -0
- package/.agent-src/contexts/communication/rules-auto/package-ci-checks-mechanics.md +85 -0
- package/.agent-src/contexts/communication/rules-auto/review-routing-awareness-mechanics.md +65 -0
- package/.agent-src/contexts/communication/rules-auto/roadmap-progress-sync-mechanics.md +78 -0
- package/.agent-src/contexts/communication/rules-auto/skill-quality-mechanics.md +62 -0
- package/.agent-src/contexts/communication/rules-auto/slash-command-routing-policy-mechanics.md +55 -0
- package/.agent-src/contexts/communication/rules-auto/ui-audit-gate-mechanics.md +53 -0
- package/.agent-src/contexts/communication/rules-auto/user-interaction-mechanics.md +77 -0
- package/.agent-src/contexts/judges/no-consolidate-rationale.md +102 -0
- package/.agent-src/contexts/judges/persona-voice-rubric.md +140 -0
- package/.agent-src/rules/artifact-engagement-recording.md +13 -69
- package/.agent-src/rules/ask-when-uncertain.md +27 -42
- package/.agent-src/rules/augment-portability.md +15 -61
- package/.agent-src/rules/augment-source-of-truth.md +27 -93
- package/.agent-src/rules/cli-output-handling.md +10 -76
- package/.agent-src/rules/command-suggestion-policy.md +18 -59
- package/.agent-src/rules/commit-conventions.md +17 -14
- package/.agent-src/rules/direct-answers.md +34 -49
- package/.agent-src/rules/docker-commands.md +5 -5
- package/.agent-src/rules/docs-sync.md +15 -69
- package/.agent-src/rules/language-and-tone.md +48 -72
- package/.agent-src/rules/missing-tool-handling.md +28 -22
- package/.agent-src/rules/no-cheap-questions.md +45 -52
- package/.agent-src/rules/no-roadmap-references.md +73 -0
- package/.agent-src/rules/package-ci-checks.md +21 -61
- package/.agent-src/rules/preservation-guard.md +64 -29
- package/.agent-src/rules/review-routing-awareness.md +24 -43
- package/.agent-src/rules/roadmap-progress-sync.md +10 -71
- package/.agent-src/rules/security-sensitive-stop.md +8 -8
- package/.agent-src/rules/skill-quality.md +16 -48
- package/.agent-src/rules/slash-command-routing-policy.md +7 -4
- package/.agent-src/rules/think-before-action.md +52 -42
- package/.agent-src/rules/tool-safety.md +19 -16
- package/.agent-src/rules/ui-audit-gate.md +24 -38
- package/.agent-src/rules/user-interaction.md +13 -68
- package/.agent-src/skills/ai-council/SKILL.md +2 -0
- package/.agent-src/skills/api-testing/SKILL.md +1 -1
- package/.agent-src/skills/check-refs/SKILL.md +59 -40
- package/.agent-src/skills/conventional-commits-writing/SKILL.md +86 -28
- package/.agent-src/skills/copilot-agents-optimization/SKILL.md +5 -5
- package/.agent-src/skills/developer-like-execution/SKILL.md +4 -4
- package/.agent-src/skills/finishing-a-development-branch/SKILL.md +101 -65
- package/.agent-src/skills/flux/SKILL.md +30 -10
- package/.agent-src/skills/github-ci/SKILL.md +2 -2
- package/.agent-src/skills/judge-code-quality/SKILL.md +7 -8
- package/.agent-src/skills/judge-security-auditor/SKILL.md +4 -5
- package/.agent-src/skills/judge-test-coverage/SKILL.md +3 -4
- package/.agent-src/skills/lint-skills/SKILL.md +57 -39
- package/.agent-src/skills/md-language-check/SKILL.md +61 -39
- package/.agent-src/skills/override-management/SKILL.md +5 -5
- package/.agent-src/skills/quality-tools/SKILL.md +2 -2
- package/.agent-src/skills/react-shadcn-ui/SKILL.md +116 -43
- package/.agent-src/skills/readme-reviewer/SKILL.md +30 -29
- package/.agent-src/skills/readme-writing/SKILL.md +78 -53
- package/.agent-src/skills/readme-writing-package/SKILL.md +50 -47
- package/.agent-src/skills/receiving-code-review/SKILL.md +52 -47
- package/.agent-src/skills/refine-prompt/SKILL.md +0 -1
- package/.agent-src/skills/requesting-code-review/SKILL.md +35 -30
- package/.agent-src/skills/security/SKILL.md +7 -2
- package/.agent-src/skills/security-audit/SKILL.md +7 -3
- package/.agent-src/skills/systematic-debugging/SKILL.md +68 -60
- package/.agent-src/skills/test-driven-development/SKILL.md +59 -57
- package/.agent-src/skills/test-performance/SKILL.md +0 -1
- package/.agent-src/skills/traefik/SKILL.md +4 -4
- package/.agent-src/skills/verify-completion-evidence/SKILL.md +28 -26
- package/.claude-plugin/marketplace.json +22 -11
- package/AGENTS.md +2 -2
- package/CHANGELOG.md +90 -1
- package/README.md +18 -17
- package/docs/architecture.md +4 -6
- package/docs/catalog.md +67 -39
- package/docs/contracts/STABILITY.md +13 -7
- package/docs/contracts/adr-chat-history-split.md +1 -3
- package/docs/contracts/adr-command-suggestion.md +0 -2
- package/docs/contracts/adr-implement-ticket-runtime.md +1 -2
- package/docs/contracts/adr-product-ui-track.md +3 -6
- package/docs/contracts/adr-prompt-driven-execution.md +3 -4
- package/docs/contracts/agent-memory-contract.md +6 -11
- package/docs/contracts/artifact-engagement-flow.md +6 -9
- package/docs/contracts/command-clusters.md +56 -46
- package/docs/contracts/command-suggestion-flow.md +1 -3
- package/docs/contracts/context-paths.md +99 -0
- package/docs/contracts/file-ownership-matrix.json +6722 -0
- package/docs/contracts/file-ownership-matrix.md +134 -0
- package/docs/contracts/implement-ticket-flow.md +6 -9
- package/docs/contracts/linear-ai-rules-inclusion.md +0 -1
- package/docs/contracts/linear-ai-three-layers.md +0 -2
- package/docs/contracts/load-context-budget-model.md +178 -0
- package/docs/contracts/load-context-schema.md +1 -3
- package/docs/contracts/rule-interactions.md +0 -1
- package/docs/contracts/rule-priority-hierarchy.md +1 -1
- package/docs/contracts/ui-track-flow.md +7 -17
- package/docs/customization.md +2 -0
- package/docs/getting-started.md +5 -4
- package/docs/guidelines/agent-infra/asking-and-brevity-examples.md +100 -0
- package/package.json +1 -1
- package/scripts/_one_off_phase4_dispatch_latency.py +108 -0
- package/scripts/_one_off_phase6_trigger_jaccard.py +92 -0
- package/scripts/_phase2_shim_helper.py +109 -0
- package/scripts/agent-config +10 -0
- package/scripts/ai_council/_one_off_2a4_acceptance.py +208 -0
- package/scripts/ai_council/_one_off_context_layer_v1_estimate.py +67 -0
- package/scripts/ai_council/_one_off_context_layer_v1_review.py +292 -0
- package/scripts/ai_council/_one_off_followups_review.py +259 -0
- package/scripts/ai_council/_one_off_nondestructive_inline_audit.py +209 -0
- package/scripts/ai_council/_one_off_phase_2a_budget_rebalance.py +257 -0
- package/scripts/ai_council/_one_off_phase_2a_post_revert.py +197 -0
- package/scripts/ai_council/_one_off_rule_hardening_v1.py +251 -0
- package/scripts/ai_council/_one_off_structural_open_questions.py +232 -0
- package/scripts/ai_council/_one_off_structural_optimization.py +144 -0
- package/scripts/ai_council/_one_off_structural_v3_gaps.py +252 -0
- package/scripts/ai_council/_one_off_structural_v3_review.py +240 -0
- package/scripts/check_always_budget.py +363 -45
- package/scripts/check_cluster_patterns.py +159 -0
- package/scripts/check_command_count_messaging.py +14 -7
- package/scripts/check_context_paths.py +201 -0
- package/scripts/check_no_roadmap_refs.py +155 -0
- package/scripts/check_phase_coupling.py +148 -0
- package/scripts/check_portability.py +2 -0
- package/scripts/check_references.py +29 -2
- package/scripts/check_safety_floor_untouched.py +125 -0
- package/scripts/command_suggester/loader.py +4 -1
- package/scripts/compress.py +59 -13
- package/scripts/generate_index.py +6 -2
- package/scripts/generate_ownership_matrix.py +323 -0
- package/scripts/hooks/augment-roadmap-progress.sh +57 -0
- package/scripts/install.py +49 -28
- package/scripts/lint_no_new_atomic_commands.py +12 -11
- package/scripts/requirements-evals.txt +1 -0
- package/scripts/roadmap_progress_hook.py +159 -0
- package/scripts/schemas/command.schema.json +4 -3
- package/scripts/skill_linter.py +1 -0
- package/scripts/sync_agent_settings.py +25 -2
- package/scripts/update_counts.py +7 -0
|
@@ -112,8 +112,8 @@ Required fields (ordered):
|
|
|
112
112
|
a codebase convention; omit only when verdict is `apply`
|
|
113
113
|
|
|
114
114
|
If a finding needs runtime confirmation (running a formatter, linter,
|
|
115
|
-
or static analyzer), note it as a follow-up
|
|
116
|
-
judge does not execute tools.
|
|
115
|
+
or static analyzer to see the actual report), note it as a follow-up
|
|
116
|
+
for the implementer — the judge does not execute tools.
|
|
117
117
|
|
|
118
118
|
## Gotcha
|
|
119
119
|
|
|
@@ -140,16 +140,15 @@ judge does not execute tools.
|
|
|
140
140
|
## References
|
|
141
141
|
|
|
142
142
|
- **LLM-as-a-Judge foundations** — Zheng et al., "Judging LLM-as-a-Judge
|
|
143
|
-
with MT-Bench and Chatbot Arena" (2023),
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
bias, self-consistency) this skill defends against.
|
|
143
|
+
with MT-Bench and Chatbot Arena" (2023), [arxiv.org/abs/2306.05685](https://arxiv.org/abs/2306.05685).
|
|
144
|
+
Establishes the specialized-judge pattern and its known failure modes
|
|
145
|
+
(position bias, self-consistency) this skill must defend against.
|
|
147
146
|
- **Code-review rubric** — Google Engineering Practices, "The Standard
|
|
148
147
|
of Code Review" and "What to look for in a code review",
|
|
149
148
|
[google.github.io/eng-practices/review/reviewer](https://google.github.io/eng-practices/review/reviewer/).
|
|
150
149
|
The lenses (design, functionality, complexity, tests, naming, comments,
|
|
151
|
-
style, consistency) the judge applies — codebase conventions
|
|
152
|
-
external style preferences.
|
|
150
|
+
style, consistency) the judge applies — prioritizing codebase conventions
|
|
151
|
+
over external style preferences.
|
|
153
152
|
- [`subagent-orchestration`](../subagent-orchestration/SKILL.md) —
|
|
154
153
|
model-pairing rules (`subagents.judge_model` one tier above implementer).
|
|
155
154
|
- Sibling judges: [`judge-bug-hunter`](../judge-bug-hunter/SKILL.md),
|
|
@@ -150,13 +150,12 @@ Runtime boundary: the judge does not execute tools.
|
|
|
150
150
|
## References
|
|
151
151
|
|
|
152
152
|
- **LLM-as-a-Judge foundations** — Zheng et al., "Judging LLM-as-a-Judge
|
|
153
|
-
with MT-Bench and Chatbot Arena" (2023),
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
bias, self-consistency) this skill defends against.
|
|
153
|
+
with MT-Bench and Chatbot Arena" (2023), [arxiv.org/abs/2306.05685](https://arxiv.org/abs/2306.05685).
|
|
154
|
+
Establishes the specialized-judge pattern and its known failure modes
|
|
155
|
+
(position bias, self-consistency) this skill must defend against.
|
|
157
156
|
- **Security rubric** — OWASP Application Security Verification Standard
|
|
158
157
|
(ASVS), [owasp.org/www-project-application-security-verification-standard](https://owasp.org/www-project-application-security-verification-standard/).
|
|
159
|
-
|
|
158
|
+
The finding categories (authentication, access control, validation,
|
|
160
159
|
cryptography, error handling) the judge walks on every diff.
|
|
161
160
|
- [`subagent-orchestration`](../subagent-orchestration/SKILL.md) —
|
|
162
161
|
model-pairing rules (`subagents.judge_model` one tier above implementer).
|
|
@@ -134,10 +134,9 @@ as a follow-up for the implementer — the judge does not execute tools.
|
|
|
134
134
|
## References
|
|
135
135
|
|
|
136
136
|
- **LLM-as-a-Judge foundations** — Zheng et al., "Judging LLM-as-a-Judge
|
|
137
|
-
with MT-Bench and Chatbot Arena" (2023),
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
bias, self-consistency) this skill defends against.
|
|
137
|
+
with MT-Bench and Chatbot Arena" (2023), [arxiv.org/abs/2306.05685](https://arxiv.org/abs/2306.05685).
|
|
138
|
+
Establishes the specialized-judge pattern and its known failure modes
|
|
139
|
+
(position bias, self-consistency) this skill must defend against.
|
|
141
140
|
- **Test-value rubric** — Martin Fowler, "Test Pyramid",
|
|
142
141
|
[martinfowler.com/bliki/TestPyramid.html](https://martinfowler.com/bliki/TestPyramid.html),
|
|
143
142
|
and Kent Beck, "Test Desiderata",
|
|
@@ -17,56 +17,74 @@ execution:
|
|
|
17
17
|
|
|
18
18
|
## When to use
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
- Verify `execution:` metadata is well-formed
|
|
22
|
-
- Pre-PR local check before CI skill-lint job
|
|
23
|
-
- Investigate reported linter failure
|
|
20
|
+
Use this skill when:
|
|
24
21
|
|
|
25
|
-
|
|
26
|
-
|
|
22
|
+
- Validating the shape of every skill and rule in `.agent-src.uncompressed/`
|
|
23
|
+
- Verifying execution metadata (`execution.type`, `handler`, `command`) is well-formed
|
|
24
|
+
- Checking locally before opening a PR that CI's skill-lint job will pass
|
|
25
|
+
- Investigating a reported linter failure on a specific skill or rule
|
|
26
|
+
|
|
27
|
+
Do NOT use when:
|
|
28
|
+
|
|
29
|
+
- Linting only one file — call `python3 scripts/skill_linter.py <path>` directly
|
|
30
|
+
- Checking cross-references between files — use `check-refs` instead
|
|
31
|
+
- Checking compression freshness — use `bash scripts/compress.sh --check` instead
|
|
27
32
|
|
|
28
33
|
## Procedure
|
|
29
34
|
|
|
30
|
-
1.
|
|
31
|
-
resolves `.agent-src.uncompressed/skills/` relative to cwd).
|
|
32
|
-
2. **Dispatch via runtime** —
|
|
35
|
+
### 1. Inspect the environment
|
|
33
36
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
+
Confirm `python3` is available and the working directory is the agent-config
|
|
38
|
+
repository root — the linter expects to find `.agent-src.uncompressed/skills/`
|
|
39
|
+
and related directories relative to `cwd`.
|
|
37
40
|
|
|
38
|
-
|
|
39
|
-
returns typed `ExecutionResult`.
|
|
40
|
-
3. **Verify result** —
|
|
41
|
-
- `status: success` + `exit_code: 0` → all clean
|
|
42
|
-
- `exit_code: 1` → warnings only — review stdout
|
|
43
|
-
- `exit_code: 2` → errors — fix flagged files
|
|
44
|
-
- `status: timeout` → investigate slowdown, do not just raise timeout
|
|
45
|
-
- `status: error` → interpreter missing or wrong cwd
|
|
41
|
+
### 2. Dispatch via the runtime layer
|
|
46
42
|
|
|
47
|
-
|
|
43
|
+
Invoke the skill through the runtime dispatcher so the `execution:` block in
|
|
44
|
+
this skill's frontmatter governs the call:
|
|
48
45
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
4. Next action: fix, re-run, or surface raw stdout
|
|
46
|
+
```bash
|
|
47
|
+
python3 scripts/runtime_dispatcher.py run --skill lint-skills
|
|
48
|
+
```
|
|
53
49
|
|
|
54
|
-
|
|
50
|
+
The dispatcher resolves the request, the shell handler runs
|
|
51
|
+
`python3 scripts/skill_linter.py --all`, captures stdout/stderr, and returns
|
|
52
|
+
a typed `ExecutionResult`.
|
|
55
53
|
|
|
56
|
-
|
|
57
|
-
- Running outside repo root → zero skills inspected, looks green but is a no-op
|
|
58
|
-
- `exit_code: 1` (warnings) does not fail CI — not the same as "clean"
|
|
54
|
+
### 3. Verify the result
|
|
59
55
|
|
|
60
|
-
|
|
56
|
+
Check the returned `ExecutionResult`:
|
|
57
|
+
|
|
58
|
+
- `status: success` and `exit_code: 0` → all skills and rules are clean
|
|
59
|
+
- `exit_code: 1` → warnings only — review `stdout` for the listed warnings
|
|
60
|
+
- `exit_code: 2` → errors present — fix the flagged files before continuing
|
|
61
|
+
- `status: timeout` → the linter exceeded `timeout_seconds` — investigate
|
|
62
|
+
- `status: error` → the interpreter could not launch — check that `python3`
|
|
63
|
+
is on `PATH` and the repository root is the current working directory
|
|
61
64
|
|
|
62
|
-
|
|
63
|
-
runtime path — go through the dispatcher
|
|
64
|
-
- Do NOT raise `timeout_seconds` to mask slowdowns
|
|
65
|
-
- Do NOT add pipes/redirection — handler uses `shell=False`, argv form only
|
|
65
|
+
## Output format
|
|
66
66
|
|
|
67
|
-
|
|
67
|
+
1. One-line summary: `success | failure | timeout | error`, exit code,
|
|
68
|
+
duration in milliseconds
|
|
69
|
+
2. Count of skills and rules the linter inspected, if known
|
|
70
|
+
3. List of files with errors (first 10), each with code and message
|
|
71
|
+
4. Next action: fix errors, re-run, or surface the raw `stdout` for review
|
|
72
|
+
|
|
73
|
+
## Gotchas
|
|
74
|
+
|
|
75
|
+
- The command uses `--all`, which walks the full tree — expect several seconds
|
|
76
|
+
of runtime on a warm repo; bump `timeout_seconds` if the repo has grown
|
|
77
|
+
- Running outside the agent-config repo root will make the linter report zero
|
|
78
|
+
skills, which looks like a pass but is actually a no-op
|
|
79
|
+
- Warnings (`exit_code: 1`) do not fail CI by default; do not dismiss them as
|
|
80
|
+
"green" when the task is to get to zero warnings
|
|
81
|
+
|
|
82
|
+
## Do NOT
|
|
68
83
|
|
|
69
|
-
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
84
|
+
- Do NOT invoke `scripts/skill_linter.py` directly when the intent is to test
|
|
85
|
+
the runtime path — use the dispatcher so the handler and result object are
|
|
86
|
+
exercised
|
|
87
|
+
- Do NOT raise `timeout_seconds` to hide a genuinely slow linter pass —
|
|
88
|
+
investigate the slowdown first
|
|
89
|
+
- Do NOT add shell redirection or pipes to `command` — the handler runs
|
|
90
|
+
`subprocess.run` with `shell=False`; only argv form is supported
|
|
@@ -16,29 +16,32 @@ execution:
|
|
|
16
16
|
|
|
17
17
|
## When to use
|
|
18
18
|
|
|
19
|
-
Fire **before** saving any `.md` file under:
|
|
19
|
+
Fire this skill **before** writing or saving any `.md` file under:
|
|
20
20
|
|
|
21
|
-
- `.agent-src.uncompressed/` (source of truth)
|
|
21
|
+
- `.agent-src.uncompressed/` (source of truth — skills, rules, commands, guidelines, templates, contexts)
|
|
22
22
|
- `.agent-src/` (compressed projection)
|
|
23
23
|
- `.augment/` (local agent projection)
|
|
24
|
-
- `agents/` (project roadmaps, contexts, sessions)
|
|
24
|
+
- `agents/` (project-specific roadmaps, contexts, sessions)
|
|
25
25
|
|
|
26
|
-
Per [`language-and-tone`](../../rules/language-and-tone.md) § "`.md`
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
Per [`language-and-tone`](../../rules/language-and-tone.md) § "`.md` files
|
|
27
|
+
are ALWAYS English" and § Detection heuristic, every `.md` file in those
|
|
28
|
+
trees must be English. Bilingual content lives only in labeled
|
|
29
29
|
`DE: … · EN: …` anchor blocks.
|
|
30
30
|
|
|
31
31
|
Do NOT use when:
|
|
32
32
|
|
|
33
|
-
- Editing project content outside the trees above
|
|
34
|
-
|
|
33
|
+
- Editing project content outside the trees listed above (READMEs of
|
|
34
|
+
consumer projects, application docs that follow a different policy)
|
|
35
|
+
- Reviewing chat history files (`.agent-chat-history` is JSONL, not `.md`)
|
|
36
|
+
- Inspecting non-`.md` files — the checker rejects them with a warning
|
|
35
37
|
|
|
36
38
|
## Procedure
|
|
37
39
|
|
|
38
40
|
### 1. Identify the file(s) about to be saved
|
|
39
41
|
|
|
40
|
-
Collect
|
|
41
|
-
turn. Multiple files
|
|
42
|
+
Collect the absolute or repo-relative path of every `.md` file the
|
|
43
|
+
agent is about to create or modify in this turn. Multiple files in
|
|
44
|
+
one turn → pass them all to a single invocation.
|
|
42
45
|
|
|
43
46
|
### 2. Run the checker
|
|
44
47
|
|
|
@@ -46,58 +49,77 @@ turn. Multiple files → one invocation.
|
|
|
46
49
|
python3 scripts/check_md_language.py <path> [<path> …] [--format json]
|
|
47
50
|
```
|
|
48
51
|
|
|
49
|
-
Exit codes:
|
|
50
|
-
|
|
52
|
+
Exit codes:
|
|
53
|
+
|
|
54
|
+
- `0` → no German content detected, save proceeds
|
|
55
|
+
- `1` → violations found, save is **blocked** until they are resolved
|
|
56
|
+
or explicitly suppressed
|
|
57
|
+
- `3` → internal error (unreadable file, decode failure)
|
|
51
58
|
|
|
52
59
|
### 3. Resolve findings
|
|
53
60
|
|
|
54
|
-
|
|
61
|
+
For every violation:
|
|
62
|
+
|
|
63
|
+
| Kind | Likely cause | Fix |
|
|
55
64
|
|---|---|---|
|
|
56
|
-
| `umlaut` | German prose
|
|
57
|
-
| `de_word` | German function word in unquoted prose | Translate; or move into `DE: … · EN: …` block |
|
|
65
|
+
| `umlaut` | German prose leaked into body text | Translate the sentence to English |
|
|
66
|
+
| `de_word` | German function word in unquoted prose | Translate; or move into a `DE: … · EN: …` block if intentional bilingual anchor |
|
|
58
67
|
|
|
59
|
-
|
|
60
|
-
`language-and-tone.md` itself)
|
|
61
|
-
`<!-- md-language-check: ignore -->`
|
|
62
|
-
wholesale silencer.
|
|
68
|
+
If the line is meta-documentation that **must** quote German tokens
|
|
69
|
+
(e.g. the detection heuristic in `language-and-tone.md` itself),
|
|
70
|
+
append `<!-- md-language-check: ignore -->` at the end of that single
|
|
71
|
+
line — never as a wholesale silencer.
|
|
63
72
|
|
|
64
73
|
### 4. Re-run and confirm
|
|
65
74
|
|
|
66
|
-
After every fix re-run on the same paths. Save
|
|
75
|
+
After every fix, re-run the checker on the same paths. Save only
|
|
76
|
+
proceeds on exit `0`.
|
|
67
77
|
|
|
68
78
|
## Allowed escape hatches
|
|
69
79
|
|
|
70
|
-
- **Labeled anchor** — lines starting with `DE:` / `- DE:` /
|
|
71
|
-
(and the same for `EN:`)
|
|
72
|
-
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
80
|
+
- **Labeled anchor block** — lines starting with `DE:` / `- DE:` /
|
|
81
|
+
`* DE:` (and the same for `EN:`) are skipped automatically. Use this
|
|
82
|
+
for intent-based opt-in / opt-out anchors.
|
|
83
|
+
- **Fenced code blocks** — `\`\`\` … \`\`\`` content is exempt, so
|
|
84
|
+
shell snippets, JSON fixtures, and quoted user input in code
|
|
85
|
+
blocks pass through untouched.
|
|
86
|
+
- **Inline code** — backtick spans are stripped before scanning;
|
|
87
|
+
identifiers like `für_test` inside backticks do not flag.
|
|
88
|
+
- **Per-line marker** — append `<!-- md-language-check: ignore -->`
|
|
89
|
+
to a line that genuinely needs to quote a German token in body
|
|
90
|
+
prose (rare; reserved for the rules that document the heuristic).
|
|
77
91
|
|
|
78
92
|
## Output format
|
|
79
93
|
|
|
80
94
|
1. One-line summary: `clean` or `N violation(s) found`
|
|
81
95
|
2. Per violation: `file:line — kind \`match\`` plus the offending line
|
|
82
96
|
3. Next action: translate, move into a `DE:`/`EN:` block, add the
|
|
83
|
-
per-line ignore marker, or revert
|
|
97
|
+
per-line ignore marker, or revert the change
|
|
84
98
|
|
|
85
99
|
## Gotchas
|
|
86
100
|
|
|
87
|
-
- `.md` files only; non-`.md`
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
101
|
+
- The checker scans `.md` files only; passing a non-`.md` path emits a
|
|
102
|
+
warning and skips it
|
|
103
|
+
- The detection word list is intentionally short and conservative —
|
|
104
|
+
a clean run is **necessary but not sufficient**; the agent still
|
|
105
|
+
owns the final language judgement
|
|
106
|
+
- Frontmatter (`--- … ---` at file head) is exempt; descriptions and
|
|
107
|
+
YAML keys can use international characters where the schema allows
|
|
91
108
|
|
|
92
109
|
## Do NOT
|
|
93
110
|
|
|
94
|
-
- Do NOT silence by deleting trigger words from
|
|
95
|
-
`scripts/check_md_language.py`; extend the allow-list
|
|
96
|
-
|
|
97
|
-
- Do NOT
|
|
111
|
+
- Do NOT silence the checker by deleting trigger words from
|
|
112
|
+
`scripts/check_md_language.py`; extend the allow-list (anchor
|
|
113
|
+
blocks, ignore marker) instead
|
|
114
|
+
- Do NOT add the ignore marker to body prose just to push a save
|
|
115
|
+
through; the marker is for meta-documentation that quotes tokens,
|
|
116
|
+
not a generic mute
|
|
117
|
+
- Do NOT skip the gate "because the file is small" — `language-and-tone`
|
|
118
|
+
§ Detection heuristic applies to every save under the four trees
|
|
98
119
|
|
|
99
120
|
## Cloud Behavior
|
|
100
121
|
|
|
101
|
-
|
|
102
|
-
so this skill is **inert**
|
|
103
|
-
[`language-and-tone`](../../rules/language-and-tone.md)
|
|
122
|
+
On cloud surfaces (Claude.ai Web, Skills API) the checker script is
|
|
123
|
+
not shipped, so this skill is **inert** — the agent applies the
|
|
124
|
+
heuristic from [`language-and-tone`](../../rules/language-and-tone.md)
|
|
125
|
+
manually before emitting the file.
|
|
@@ -31,11 +31,11 @@ Changes to `.augment/` affect ALL projects. Use overrides instead.
|
|
|
31
31
|
|
|
32
32
|
## Procedure: Create an override
|
|
33
33
|
|
|
34
|
-
Before creating, understand the original:
|
|
34
|
+
Before creating an override, understand the original:
|
|
35
35
|
|
|
36
|
-
1. **Read the original** from `.augment/{type}/{name}` — understand purpose and behavior
|
|
37
|
-
2. **Check existing overrides** in `agents/overrides/{type}/` — avoid duplicates
|
|
38
|
-
3. **Identify what needs changing** — only override specific behavior that differs
|
|
36
|
+
1. **Read the original** from `.augment/{type}/{name}` — understand its purpose, structure, and behavior.
|
|
37
|
+
2. **Check for existing overrides** in `agents/overrides/{type}/` — avoid duplicates.
|
|
38
|
+
3. **Identify what needs changing** — only override the specific behavior that differs for this project.
|
|
39
39
|
|
|
40
40
|
When loading any skill, rule, or command:
|
|
41
41
|
|
|
@@ -69,7 +69,7 @@ Override files **must match the original filename** exactly:
|
|
|
69
69
|
|---|---|
|
|
70
70
|
| `.augment/rules/php-coding.md` | `agents/overrides/rules/php-coding.md` |
|
|
71
71
|
| `.augment/skills/eloquent/SKILL.md` | `agents/overrides/skills/eloquent.md` |
|
|
72
|
-
| `.augment/commands/feature
|
|
72
|
+
| `.augment/commands/feature/plan.md` | `agents/overrides/commands/feature/plan.md` |
|
|
73
73
|
| `../../../docs/guidelines/php/controllers.md` | `agents/overrides/guidelines/php-controllers.md` |
|
|
74
74
|
| `.augment/templates/roadmaps.md` | `agents/overrides/templates/roadmaps.md` |
|
|
75
75
|
|
|
@@ -52,8 +52,8 @@ Use the **first matching** command style:
|
|
|
52
52
|
| `symplify/easy-coding-standard` | `vendor/bin/ecs` | `vendor/bin/ecs check --fix` |
|
|
53
53
|
|
|
54
54
|
**Priority:** If a project ships a `quality:*` wrapper (Artisan or Composer script), always prefer it —
|
|
55
|
-
wrappers typically add
|
|
56
|
-
|
|
55
|
+
wrappers typically add git-aware execution, caching, automatic baseline regeneration, and memory
|
|
56
|
+
management on top of the native tools.
|
|
57
57
|
|
|
58
58
|
If none of the above is installed → skip quality checks, inform the user.
|
|
59
59
|
|
|
@@ -9,35 +9,59 @@ source: package
|
|
|
9
9
|
## Compatibility
|
|
10
10
|
|
|
11
11
|
- **Tested against:** `shadcn@2.1`, Tailwind CSS `3.x`, React `18+`.
|
|
12
|
-
-
|
|
12
|
+
- The audit step (`directives/ui/audit.py`) reads the line above and
|
|
13
|
+
compares it with `state.ui_audit.shadcn_inventory.version`; a major
|
|
14
|
+
mismatch triggers a soft halt before this skill runs.
|
|
13
15
|
|
|
14
16
|
## When to use
|
|
15
17
|
|
|
16
|
-
Use when `state.stack.frontend == "react-shadcn"` and `directives/ui/apply.py`,
|
|
18
|
+
Use when `state.stack.frontend == "react-shadcn"` and `directives/ui/apply.py`,
|
|
19
|
+
`review.py`, or `polish.py` dispatches to this skill, or when a React project
|
|
20
|
+
clearly uses shadcn/ui (presence of `components.json`, `@radix-ui/*`
|
|
21
|
+
dependencies, a `components/ui/` folder of generated primitives).
|
|
17
22
|
|
|
18
23
|
Do NOT use when:
|
|
19
|
-
|
|
20
24
|
- Project is Blade + Livewire + Flux (use `flux` / `livewire` / `blade-ui`).
|
|
21
25
|
- Project is Vue (use the Vue stack skills).
|
|
22
|
-
- Plain React without shadcn/ui — fall back to manual composition; this skill
|
|
26
|
+
- Plain React without shadcn/ui — fall back to manual composition; this skill
|
|
27
|
+
assumes the primitive set exists.
|
|
23
28
|
|
|
24
29
|
## Gotcha
|
|
25
30
|
|
|
26
|
-
- shadcn/ui is **not** an npm package. Primitives are copied into
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
-
|
|
30
|
-
|
|
31
|
-
|
|
31
|
+
- shadcn/ui is **not** an npm package. Primitives are copied into
|
|
32
|
+
`components/ui/` and edited in-place. Do not `npm install shadcn-ui`.
|
|
33
|
+
Run `npx shadcn@latest add <primitive>` to scaffold; then edit.
|
|
34
|
+
- Major-version drift between this skill's `## Compatibility` line and
|
|
35
|
+
the project's installed primitives is a real risk. The audit step
|
|
36
|
+
writes `state.ui_audit.shadcn_inventory` with the detected version —
|
|
37
|
+
when it diverges by a major, audit emits a soft halt before this
|
|
38
|
+
skill runs.
|
|
39
|
+
- shadcn/ui composes Radix primitives. Accessibility is built in via Radix
|
|
40
|
+
but only when you use the wrapper components correctly (`asChild`,
|
|
41
|
+
`<DialogTrigger>` instead of a bare `<button>`).
|
|
42
|
+
- Tailwind tokens come from `tailwind.config.{js,ts}` (`theme.extend.colors`)
|
|
43
|
+
and CSS custom properties on `:root` and `.dark` (`--background`,
|
|
44
|
+
`--foreground`, `--primary`, `--ring`, …). Audit writes them into
|
|
45
|
+
`state.ui_audit.design_tokens`. Use those tokens; do not hardcode values.
|
|
46
|
+
- Dark mode is class-based (`<html class="dark">`). Every color must come
|
|
47
|
+
from `bg-background`, `text-foreground`, etc. — never raw `bg-white`.
|
|
48
|
+
- Every interactive primitive must declare a focus-visible state via
|
|
49
|
+
`focus-visible:ring-2 focus-visible:ring-ring`; that comes for free with
|
|
50
|
+
the generated primitives but is easy to remove during a refactor.
|
|
32
51
|
|
|
33
52
|
## Covered primitives
|
|
34
53
|
|
|
35
|
-
|
|
54
|
+
This skill is validated against the following shadcn primitives at the
|
|
55
|
+
declared version:
|
|
36
56
|
|
|
37
|
-
- **Form / inputs:** `Button`, `Input`, `Textarea`, `Checkbox`,
|
|
38
|
-
|
|
57
|
+
- **Form / inputs:** `Button`, `Input`, `Textarea`, `Checkbox`,
|
|
58
|
+
`RadioGroup`, `Select`, `Switch`, `Label`, `Form` (react-hook-form
|
|
59
|
+
wrapper + `zodResolver`).
|
|
60
|
+
- **Overlay:** `Dialog`, `Sheet`, `Popover`, `Tooltip`, `DropdownMenu`,
|
|
61
|
+
`AlertDialog`.
|
|
39
62
|
- **Layout:** `Card`, `Separator`, `Tabs`, `Accordion`, `ScrollArea`.
|
|
40
|
-
- **Data display:** `Table` (with `@tanstack/react-table`), `Badge`,
|
|
63
|
+
- **Data display:** `Table` (with `@tanstack/react-table`), `Badge`,
|
|
64
|
+
`Avatar`, `Skeleton`, `Progress`.
|
|
41
65
|
- **Feedback:** `Toast` (sonner), `Alert`.
|
|
42
66
|
|
|
43
67
|
## Not covered — fall back to manual composition
|
|
@@ -45,63 +69,110 @@ Validated against the following shadcn primitives at the declared version:
|
|
|
45
69
|
- Marketing-only components (Hero, Pricing, Features) — outside shadcn/ui.
|
|
46
70
|
- `Calendar` / `DatePicker` — composition skill required, not generated.
|
|
47
71
|
- `Combobox` — built from `Command` + `Popover`; case-by-case.
|
|
48
|
-
- Streaming / partial-prerender boundaries — use the project's framework
|
|
72
|
+
- Streaming / partial-prerender boundaries — use the project's framework
|
|
73
|
+
patterns (Next.js / Remix), not shadcn/ui.
|
|
49
74
|
|
|
50
75
|
## Procedure: render a shadcn/ui component for the design brief
|
|
51
76
|
|
|
52
77
|
### Step 0: Inspect
|
|
53
78
|
|
|
54
|
-
1. Read `state.ui_audit.shadcn_inventory.version` and confirm it matches
|
|
55
|
-
|
|
79
|
+
1. Read `state.ui_audit.shadcn_inventory.version` and confirm it matches
|
|
80
|
+
the version in `## Compatibility` within the same major. If audit
|
|
81
|
+
flagged a mismatch, the user already chose to proceed — note that
|
|
82
|
+
in `state.changes`.
|
|
83
|
+
2. Read `state.ui_audit.design_tokens` — every color, spacing, and radius
|
|
84
|
+
in the rendered output must reference a token from this map.
|
|
56
85
|
3. Read `state.ui_design`:
|
|
57
86
|
- `components` → the primitive list to compose.
|
|
58
|
-
- `microcopy` → button labels, empty-state text, validation messages.
|
|
87
|
+
- `microcopy` → button labels, empty-state text, validation messages.
|
|
88
|
+
**Lock — render verbatim.**
|
|
59
89
|
- `states` → empty / loading / error / success / disabled coverage.
|
|
60
90
|
- `a11y` → ARIA labels, keyboard nav, focus order.
|
|
61
91
|
|
|
62
92
|
### Step 1: Compose primitives
|
|
63
93
|
|
|
64
|
-
1. Import primitives from project's `components/ui/` path
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
94
|
+
1. Import primitives from the project's `components/ui/` path
|
|
95
|
+
(`@/components/ui/button`, …) — never from `shadcn` or `radix-ui`.
|
|
96
|
+
2. Compose Radix-style: `<Dialog>` → `<DialogTrigger asChild>` →
|
|
97
|
+
`<DialogContent>` → `<DialogHeader>` → `<DialogTitle>`. Never wrap
|
|
98
|
+
`DialogTrigger` around a pre-styled `<button>`; pass `asChild`.
|
|
99
|
+
3. Use the variant API of `Button` (`variant="default" | "destructive" |
|
|
100
|
+
"outline" | "secondary" | "ghost" | "link"`); do not override with
|
|
101
|
+
raw Tailwind for the variant set.
|
|
102
|
+
4. Forms: `useForm` (react-hook-form) + `zodResolver(schema)` →
|
|
103
|
+
`<Form>` → `<FormField>` → `<FormItem>` → `<FormLabel>` →
|
|
104
|
+
`<FormControl>` → `<FormMessage>`. Validation messages come from
|
|
105
|
+
the zod schema, mirrored to the design-brief microcopy.
|
|
68
106
|
|
|
69
107
|
### Step 2: Apply tokens, dark mode, a11y
|
|
70
108
|
|
|
71
|
-
1. Colors via semantic classes: `bg-background`, `text-foreground`,
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
109
|
+
1. Colors via semantic classes: `bg-background`, `text-foreground`,
|
|
110
|
+
`bg-primary text-primary-foreground`, `text-muted-foreground`. No
|
|
111
|
+
`bg-white` / `text-black` / hardcoded `#fff`.
|
|
112
|
+
2. Spacing / radius from theme tokens (`rounded-lg` mapped to `--radius`
|
|
113
|
+
in `tailwind.config.{js,ts}`). Polish refactors hardcoded values
|
|
114
|
+
when a token equivalent exists.
|
|
115
|
+
3. Dark mode: never branch on a `dark` prop; rely on the `.dark` class
|
|
116
|
+
on the root and semantic tokens.
|
|
117
|
+
4. Every interactive primitive: keyboard trigger present (Enter/Space
|
|
118
|
+
on buttons, Esc on dialogs — Radix free), visible focus ring,
|
|
119
|
+
`aria-label` from `state.ui_design.a11y` when icon-only.
|
|
75
120
|
|
|
76
121
|
### Step 3: State coverage
|
|
77
122
|
|
|
78
|
-
1. Empty: render design-brief empty-state copy in a `Card` or
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
123
|
+
1. Empty: render the design-brief empty-state copy in a `Card` or
|
|
124
|
+
inline placeholder; never `null`.
|
|
125
|
+
2. Loading: `Skeleton` rows for tables; `Button` `disabled` +
|
|
126
|
+
`Loader2` icon for submit-in-flight.
|
|
127
|
+
3. Error: `Alert variant="destructive"` with the design-brief message;
|
|
128
|
+
`FormMessage` for field-level errors.
|
|
129
|
+
4. Success: `toast.success(...)` from `sonner` with the design-brief
|
|
130
|
+
confirmation copy.
|
|
131
|
+
5. Disabled: `disabled` prop on the trigger plus the design-brief
|
|
132
|
+
reason as `aria-describedby` text.
|
|
83
133
|
|
|
84
134
|
### Step 4: Validate
|
|
85
135
|
|
|
86
136
|
1. No raw `<input>` / `<button>` / `<select>` outside the primitive set.
|
|
87
137
|
2. No hardcoded colors / spacing — every value is a token.
|
|
88
138
|
3. Microcopy matches `state.ui_design.microcopy` byte-for-byte.
|
|
89
|
-
4. Dark mode: toggle `.dark` on `<html>`, render the component, every
|
|
139
|
+
4. Dark mode: toggle `.dark` on `<html>`, render the component, every
|
|
140
|
+
surface still legible (no `text-white on bg-white`).
|
|
90
141
|
5. Keyboard: Tab through every focusable element; focus ring visible.
|
|
91
142
|
|
|
92
143
|
## Output format
|
|
93
144
|
|
|
94
|
-
1. React component file(s) under project's `components/` (or `app/`)
|
|
95
|
-
|
|
145
|
+
1. React component file(s) under the project's `components/` (or `app/`)
|
|
146
|
+
tree, importing primitives from `@/components/ui/*`.
|
|
147
|
+
2. Per file, one entry recorded in `state.changes` with `kind="ui"`,
|
|
148
|
+
`stack="react-shadcn"`, and the design-brief summary.
|
|
96
149
|
|
|
97
150
|
### Review pass — a11y findings + preview envelope
|
|
98
151
|
|
|
99
|
-
When dispatched by `directives/ui/review.py` (test slot)
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
152
|
+
When this skill is dispatched by `directives/ui/review.py` (test slot)
|
|
153
|
+
or `directives/ui/polish.py` (verify slot) — i.e. a review/polish run,
|
|
154
|
+
not the initial apply — it also emits:
|
|
155
|
+
|
|
156
|
+
- `state.ui_review.a11y` — `{violations: [{rule, selector, severity}, ...],
|
|
157
|
+
severity_floor?, accepted_violations?}`. Run an a11y tool against the
|
|
158
|
+
rendered output (e.g. `axe-core` via Playwright, `@axe-core/react`,
|
|
159
|
+
`jest-axe`) and translate hits into this shape. Use the same
|
|
160
|
+
`(rule, selector)` shape as `state.ui_audit.a11y_baseline` so the
|
|
161
|
+
engine's de-dup matches pre-existing entries on replay. Omit the
|
|
162
|
+
envelope on apply passes; the engine's `_apply_a11y_gate` only fires
|
|
163
|
+
when a baseline is present.
|
|
164
|
+
- `state.ui_review.preview` — `{render_ok: bool, screenshot_path?,
|
|
165
|
+
dom_dump_path?, error?, skipped?}`. `render_ok: false` with `error`
|
|
166
|
+
populated triggers the `preview_render_failed` halt; `render_ok: true`
|
|
167
|
+
with `screenshot_path` threads the screenshot into the delivery
|
|
168
|
+
report's `artifacts` list. Browser tooling (Playwright/Cypress/…) is
|
|
169
|
+
a consumer-project dependency — this package does not ship one.
|
|
170
|
+
|
|
171
|
+
Polish dispatch: when the dispatcher skips `review` because a previous
|
|
172
|
+
review pass already returned `SUCCESS`, this skill MUST itself
|
|
173
|
+
synthesise the updated `state.ui_review.findings` (including any
|
|
174
|
+
remaining `a11y_violation` entries) so the engine's gate sees the
|
|
175
|
+
current state on the next polish round.
|
|
105
176
|
|
|
106
177
|
## Do NOT
|
|
107
178
|
|
|
@@ -109,13 +180,15 @@ Polish dispatch: when dispatcher skips `review` because previous review pass ret
|
|
|
109
180
|
- Do NOT hardcode colors / spacing / radii — use the token map.
|
|
110
181
|
- Do NOT branch on a `dark` prop — use semantic tokens + the `.dark` class.
|
|
111
182
|
- Do NOT rewrite microcopy — it is locked by `state.ui_design`.
|
|
112
|
-
- Do NOT skip `asChild` on `DialogTrigger` / `SheetTrigger` / similar
|
|
113
|
-
|
|
183
|
+
- Do NOT skip `asChild` on `DialogTrigger` / `SheetTrigger` / similar
|
|
184
|
+
Radix wrappers — it breaks the accessibility contract.
|
|
185
|
+
- Do NOT introduce a non-shadcn UI library (MUI, Chakra) into the same
|
|
186
|
+
surface — pick one system per surface.
|
|
114
187
|
|
|
115
188
|
## Auto-trigger keywords
|
|
116
189
|
|
|
117
190
|
- shadcn / shadcn ui / shadcn/ui
|
|
118
|
-
- React component (when project uses shadcn)
|
|
191
|
+
- React component (when the project uses shadcn)
|
|
119
192
|
- Radix primitive
|
|
120
193
|
- Tailwind dark mode
|
|
121
194
|
- React Hook Form + zod
|