@event4u/agent-config 9.25.0 → 9.27.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.
Files changed (222) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +58 -143
  3. package/README.md +1 -1
  4. package/dist/agent-src/commands/analyze/conformance.md +21 -2
  5. package/dist/agent-src/commands/review/changes.md +6 -5
  6. package/dist/agent-src/commands/roadmap/next.md +256 -0
  7. package/dist/agent-src/commands/roadmap.md +12 -4
  8. package/dist/agent-src/contexts/execution/subagent-routing.md +4 -1
  9. package/dist/agent-src/rules/active-remediation.md +2 -0
  10. package/dist/agent-src/rules/analysis-skill-routing.md +2 -0
  11. package/dist/agent-src/rules/architecture.md +2 -0
  12. package/dist/agent-src/rules/artifact-drafting-protocol.md +2 -0
  13. package/dist/agent-src/rules/artifact-engagement-recording.md +2 -0
  14. package/dist/agent-src/rules/augment-edit-discipline.md +2 -0
  15. package/dist/agent-src/rules/autonomous-execution.md +2 -0
  16. package/dist/agent-src/rules/brand-consistency.md +2 -0
  17. package/dist/agent-src/rules/brand-source-of-truth.md +2 -0
  18. package/dist/agent-src/rules/broken-access-control.md +2 -0
  19. package/dist/agent-src/rules/cli-output-handling.md +2 -0
  20. package/dist/agent-src/rules/code-comment-discipline.md +2 -0
  21. package/dist/agent-src/rules/code-provenance.md +2 -0
  22. package/dist/agent-src/rules/command-suggestion-policy.md +2 -0
  23. package/dist/agent-src/rules/commit-conventions.md +2 -0
  24. package/dist/agent-src/rules/communication-through-line.md +2 -0
  25. package/dist/agent-src/rules/content-quoting-floor.md +2 -0
  26. package/dist/agent-src/rules/context-hygiene.md +10 -0
  27. package/dist/agent-src/rules/copilot-routing.md +2 -0
  28. package/dist/agent-src/rules/cross-source-consistency.md +2 -0
  29. package/dist/agent-src/rules/decision-revisit-gate.md +2 -0
  30. package/dist/agent-src/rules/delegation-policy.md +5 -2
  31. package/dist/agent-src/rules/design-fidelity.md +19 -1
  32. package/dist/agent-src/rules/design-review-after-ui-write.md +120 -0
  33. package/dist/agent-src/rules/devcontainer-routing.md +2 -0
  34. package/dist/agent-src/rules/doc-screenshot-hygiene.md +2 -0
  35. package/dist/agent-src/rules/docker-commands.md +2 -0
  36. package/dist/agent-src/rules/domain-adoption-policy.md +2 -0
  37. package/dist/agent-src/rules/domain-safety-disclaimer.md +2 -0
  38. package/dist/agent-src/rules/domain-safety-pii.md +2 -0
  39. package/dist/agent-src/rules/domain-safety-retention.md +2 -0
  40. package/dist/agent-src/rules/downstream-changes.md +2 -0
  41. package/dist/agent-src/rules/engineering-safety-floor.md +2 -0
  42. package/dist/agent-src/rules/evaluator-independence.md +19 -3
  43. package/dist/agent-src/rules/external-code-graph-interop.md +2 -0
  44. package/dist/agent-src/rules/external-reference-deep-dive.md +2 -0
  45. package/dist/agent-src/rules/fast-path-marker-visibility.md +2 -0
  46. package/dist/agent-src/rules/finance-safety-floor.md +2 -0
  47. package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +2 -0
  48. package/dist/agent-src/rules/git-history-discipline.md +3 -1
  49. package/dist/agent-src/rules/guidelines.md +2 -0
  50. package/dist/agent-src/rules/history-discipline.md +2 -0
  51. package/dist/agent-src/rules/icon-consistency.md +2 -0
  52. package/dist/agent-src/rules/image-likeness-and-rights.md +2 -0
  53. package/dist/agent-src/rules/improve-before-implement.md +2 -0
  54. package/dist/agent-src/rules/invite-challenge.md +2 -0
  55. package/dist/agent-src/rules/laravel-routing.md +2 -0
  56. package/dist/agent-src/rules/laravel-translations.md +2 -0
  57. package/dist/agent-src/rules/legal-safety-floor.md +2 -0
  58. package/dist/agent-src/rules/lethal-trifecta-guard.md +2 -0
  59. package/dist/agent-src/rules/linked-projects-onboarding-gate.md +2 -0
  60. package/dist/agent-src/rules/low-impact-corpus-privacy-floor.md +2 -0
  61. package/dist/agent-src/rules/markdown-safe-codeblocks.md +2 -0
  62. package/dist/agent-src/rules/media-governance-routing.md +2 -0
  63. package/dist/agent-src/rules/media-sync-ground-truth.md +2 -0
  64. package/dist/agent-src/rules/minimal-safe-diff.md +2 -0
  65. package/dist/agent-src/rules/missing-tool-handling.md +2 -0
  66. package/dist/agent-src/rules/model-recommendation.md +2 -0
  67. package/dist/agent-src/rules/no-attribution-footers.md +2 -0
  68. package/dist/agent-src/rules/no-decorative-emojis-in-git-surfaces.md +2 -0
  69. package/dist/agent-src/rules/no-pr-progress-comments.md +2 -0
  70. package/dist/agent-src/rules/no-roadmap-references.md +2 -0
  71. package/dist/agent-src/rules/notes-first-reasoning.md +2 -0
  72. package/dist/agent-src/rules/onboarding-gate.md +2 -0
  73. package/dist/agent-src/rules/output-discipline.md +2 -0
  74. package/dist/agent-src/rules/package-ci-checks.md +2 -0
  75. package/dist/agent-src/rules/persona-governance.md +2 -0
  76. package/dist/agent-src/rules/php-coding.md +2 -0
  77. package/dist/agent-src/rules/prefer-enums-over-literals.md +2 -0
  78. package/dist/agent-src/rules/preservation-guard.md +2 -0
  79. package/dist/agent-src/rules/provider-lifecycle-discipline.md +2 -0
  80. package/dist/agent-src/rules/question-not-instruction.md +2 -0
  81. package/dist/agent-src/rules/reviewer-awareness.md +2 -0
  82. package/dist/agent-src/rules/roadmap-ci-steps-policy.md +2 -0
  83. package/dist/agent-src/rules/roadmap-progress-sync.md +2 -0
  84. package/dist/agent-src/rules/role-mode-adherence.md +2 -0
  85. package/dist/agent-src/rules/rule-type-governance.md +2 -0
  86. package/dist/agent-src/rules/runtime-safety.md +2 -0
  87. package/dist/agent-src/rules/scale-discipline.md +2 -0
  88. package/dist/agent-src/rules/secret-vcs-guard.md +2 -0
  89. package/dist/agent-src/rules/security-sensitive-stop.md +2 -0
  90. package/dist/agent-src/rules/senior-engineering-discipline.md +2 -0
  91. package/dist/agent-src/rules/session-canary.md +63 -19
  92. package/dist/agent-src/rules/settings-ask-protocol.md +180 -0
  93. package/dist/agent-src/rules/size-enforcement.md +2 -0
  94. package/dist/agent-src/rules/skill-improvement-trigger.md +2 -0
  95. package/dist/agent-src/rules/skill-quality.md +2 -0
  96. package/dist/agent-src/rules/slash-command-routing-policy.md +2 -0
  97. package/dist/agent-src/rules/source-confidentiality.md +2 -0
  98. package/dist/agent-src/rules/source-discovery-gate.md +2 -0
  99. package/dist/agent-src/rules/source-of-truth.md +2 -0
  100. package/dist/agent-src/rules/spreadsheet-source-quality.md +2 -0
  101. package/dist/agent-src/rules/strategy-safety-floor.md +2 -0
  102. package/dist/agent-src/rules/symfony-routing.md +2 -0
  103. package/dist/agent-src/rules/think-before-action.md +2 -0
  104. package/dist/agent-src/rules/token-budget-discipline.md +8 -3
  105. package/dist/agent-src/rules/token-efficiency.md +2 -0
  106. package/dist/agent-src/rules/token-optimizer-maintenance.md +2 -0
  107. package/dist/agent-src/rules/tool-safety.md +2 -0
  108. package/dist/agent-src/rules/ui-audit-gate.md +7 -0
  109. package/dist/agent-src/rules/untrusted-input-defense.md +2 -0
  110. package/dist/agent-src/rules/upstream-proposal.md +2 -0
  111. package/dist/agent-src/rules/user-interaction.md +5 -2
  112. package/dist/agent-src/rules/user-interrupt-priority.md +2 -0
  113. package/dist/agent-src/skills/recursive-verification/SKILL.md +13 -0
  114. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  115. package/dist/cli/registry.js +2 -0
  116. package/dist/cli/registry.js.map +1 -1
  117. package/dist/cli-delegate/{chunk-SJQMJI7M.js → chunk-3KJIMFTB.js} +1 -1
  118. package/dist/cli-delegate/{chunk-BSLUHV2F.js → chunk-BCPIOAGV.js} +148 -133
  119. package/dist/cli-delegate/cmd_conformance.js +1 -1
  120. package/dist/cli-delegate/cmd_doctor.js +1 -1
  121. package/dist/cli-delegate/cmd_export.js +1 -1
  122. package/dist/cli-delegate/cmd_prune.js +1 -1
  123. package/dist/cli-delegate/cmd_route_audit.js +4 -1
  124. package/dist/cli-delegate/cmd_route_explain.js +4 -1
  125. package/dist/cli-delegate/cmd_settings_migrate.js +1 -1
  126. package/dist/cli-delegate/cmd_sync.js +1 -1
  127. package/dist/cli-delegate/cmd_uninstall.js +1 -1
  128. package/dist/cli-delegate/cmd_validate.js +1 -1
  129. package/dist/discovery/deprecation-report.md +1 -1
  130. package/dist/discovery/discovery-manifest.json +191 -120
  131. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  132. package/dist/discovery/discovery-manifest.summary.md +4 -4
  133. package/dist/discovery/orphan-report.md +1 -1
  134. package/dist/discovery/packs.json +11 -8
  135. package/dist/discovery/trust-report.md +3 -3
  136. package/dist/discovery/workspaces.json +9 -6
  137. package/dist/hooks/dispatch.js +1148 -349
  138. package/dist/install/install.mjs +1 -1
  139. package/dist/mcp/registry-manifest.json +3 -3
  140. package/dist/mcp/server.json +2 -2
  141. package/dist/mcp/server.mjs +571 -417
  142. package/dist/router.json +1 -1
  143. package/dist/scripts/condense.js +33 -2
  144. package/dist/scripts/condense.js.map +1 -1
  145. package/dist/server/io/yamlIO.js +85 -0
  146. package/dist/server/io/yamlIO.js.map +1 -1
  147. package/dist/server/nicknameResolver.js +116 -0
  148. package/dist/server/nicknameResolver.js.map +1 -0
  149. package/dist/server/routes/ping.js +29 -11
  150. package/dist/server/routes/ping.js.map +1 -1
  151. package/dist/server/routes/settings.js +1 -12
  152. package/dist/server/routes/settings.js.map +1 -1
  153. package/dist/server/routes/wizard.js +52 -2
  154. package/dist/server/routes/wizard.js.map +1 -1
  155. package/dist/shared/interactiveContext.js +73 -0
  156. package/dist/shared/interactiveContext.js.map +1 -0
  157. package/dist/shared/nicknamePrefill.js +59 -0
  158. package/dist/shared/nicknamePrefill.js.map +1 -0
  159. package/dist/shared/settingsAsks.js +128 -0
  160. package/dist/shared/settingsAsks.js.map +1 -0
  161. package/dist/shared/settingsCarveOut.js +118 -0
  162. package/dist/shared/settingsCarveOut.js.map +1 -0
  163. package/dist/shared/settingsConsent.js +93 -0
  164. package/dist/shared/settingsConsent.js.map +1 -0
  165. package/dist/shared/settingsSurface.js +7 -1
  166. package/dist/shared/settingsSurface.js.map +1 -1
  167. package/dist/ui/assets/index-DmR0mbk4.js.map +1 -1
  168. package/package.json +1 -1
  169. package/src/config/agents-paths.yml +15 -0
  170. package/src/config/evaluator-budgets.json +4 -4
  171. package/src/config/gate-coverage.yml +29 -1
  172. package/src/config/gate-violation-baselines.json +13 -7
  173. package/src/scripts/_cli/cmd_doctor.ts +6 -21
  174. package/src/scripts/_cli/cmd_route_audit.ts +4 -1
  175. package/src/scripts/_cli/cmd_route_explain.ts +9 -1
  176. package/src/scripts/_dispatch.bash +18 -0
  177. package/src/scripts/_lib/git_common_dir.ts +128 -0
  178. package/src/scripts/_lib/obligation_frequency.ts +391 -0
  179. package/src/scripts/_lib/session_register.ts +361 -0
  180. package/src/scripts/ai-video/stitch.sh +27 -9
  181. package/src/scripts/before_complete_hook.ts +23 -4
  182. package/src/scripts/bench_ab_v2_run.ts +272 -16
  183. package/src/scripts/bench_ab_v2_stats.ts +156 -3
  184. package/src/scripts/check_completion_review.ts +80 -3
  185. package/src/scripts/check_corpus_staleness.ts +692 -0
  186. package/src/scripts/check_enforcement_coverage.ts +192 -7
  187. package/src/scripts/check_gate_coverage.ts +67 -0
  188. package/src/scripts/check_hook_bundle_freshness.ts +183 -0
  189. package/src/scripts/check_rule_projection_integrity.ts +364 -0
  190. package/src/scripts/condense.ts +36 -2
  191. package/src/scripts/conformance_scan.ts +82 -17
  192. package/src/scripts/dispatch_r2_reviewer.ts +31 -2
  193. package/src/scripts/generate_settings_reference.ts +232 -0
  194. package/src/scripts/git_authorization_hook.ts +75 -10
  195. package/src/scripts/hook_manifest.yaml +87 -27
  196. package/src/scripts/hooks/block_no_verify.ts +59 -2
  197. package/src/scripts/hooks/block_unauthorized_git.ts +199 -16
  198. package/src/scripts/hooks/concern_registry.ts +2 -0
  199. package/src/scripts/hooks/design_slop_hook.ts +13 -1
  200. package/src/scripts/hooks/dispatch_hook.ts +97 -2
  201. package/src/scripts/hooks/evidence_independence.ts +40 -6
  202. package/src/scripts/language_mirror_hook.ts +256 -17
  203. package/src/scripts/lint_abstraction_thresholds.ts +41 -8
  204. package/src/scripts/lint_agents_layout.ts +2 -0
  205. package/src/scripts/lint_hook_manifest.ts +29 -0
  206. package/src/scripts/memory_learn_hook.ts +109 -6
  207. package/src/scripts/orchestration_backfill.ts +354 -0
  208. package/src/scripts/pr_url_reminder_hook.ts +17 -2
  209. package/src/scripts/release.ts +180 -37
  210. package/src/scripts/schemas/review-findings.schema.json +99 -0
  211. package/src/scripts/schemas/rule.schema.json +5 -0
  212. package/src/scripts/session_canary_hook.ts +35 -3
  213. package/src/scripts/session_register_hook.ts +288 -0
  214. package/src/scripts/sessions_cli.ts +140 -0
  215. package/src/scripts/validate_frontmatter.ts +68 -0
  216. package/src/server/io/yamlIO.ts +87 -0
  217. package/src/shared/interactiveContext.ts +98 -0
  218. package/src/shared/nicknamePrefill.ts +96 -0
  219. package/src/shared/settingsAsks.ts +176 -0
  220. package/src/shared/settingsCarveOut.ts +143 -0
  221. package/src/shared/settingsConsent.ts +136 -0
  222. package/src/shared/settingsSurface.ts +7 -1
@@ -2,14 +2,14 @@
2
2
  model_tier: medium
3
3
  name: roadmap
4
4
  disable-model-invocation: true
5
- argument-hint: "[create|ai-council|process-step|process-phase|process-full] [args]"
5
+ argument-hint: "[create|ai-council|process-step|process-phase|process-full|next] [args]"
6
6
  pack: product-basic
7
- intent: "Roadmap dispatcher — create, process-step, process-phase, process-full, ai-council"
8
- routes_to: [roadmap-create, roadmap-ai-council, roadmap-materialize, roadmap-process-step, roadmap-process-phase, roadmap-process-full]
7
+ intent: "Roadmap dispatcher — create, process-step, process-phase, process-full, next, ai-council"
8
+ routes_to: [roadmap-create, roadmap-ai-council, roadmap-materialize, roadmap-process-step, roadmap-process-phase, roadmap-process-full, roadmap-next]
9
9
  replaces: []
10
10
  tier: 1
11
11
  visibility: advanced
12
- description: Roadmap orchestrator — routes to create (authoring) and process-step / process-phase / process-full (autonomous execution).
12
+ description: Roadmap orchestrator — routes to create (authoring), process-step / process-phase / process-full (autonomous execution), and next (pick a roadmap and ship it).
13
13
  cluster: roadmap
14
14
  type: orchestrator
15
15
  suggestion:
@@ -40,6 +40,7 @@ paused for confirmation before every step) was removed —
40
40
  | `/roadmap:process-step` | `commands/roadmap/process-step.md` | Autonomously process the next open step, then stop |
41
41
  | `/roadmap:process-phase` (**default execution scope**) | `commands/roadmap/process-phase.md` | Autonomously process every open step in the current phase |
42
42
  | `/roadmap:process-full` | `commands/roadmap/process-full.md` | Autonomously process every open step across every phase |
43
+ | `/roadmap:next` | `commands/roadmap/next.md` | Screen for the next executable roadmap, then carry it to a reviewable PR (selection + `process-full` + delivery) |
43
44
 
44
45
  Sub-command names match the locked contract in
45
46
  [`docs/contracts/command-clusters.md`](../docs/contracts/command-clusters.md).
@@ -70,6 +71,7 @@ each only binds a scope delta.
70
71
  > 3. process-step — process the next open step, then stop
71
72
  > 4. process-phase — process the current phase (default)
72
73
  > 5. process-full — process every open step across every phase
74
+ > 6. next — pick the next executable roadmap and ship it to a PR
73
75
 
74
76
  ## Rules
75
77
 
@@ -84,3 +86,9 @@ each only binds a scope delta.
84
86
  *"finish this phase"*) default to
85
87
  [`/roadmap:process-phase`](roadmap/process-phase.md) unless the user
86
88
  named a different scope.
89
+ - **Selection intents** (*"take the next sensible roadmap"*, *"nimm dir
90
+ die nächste Roadmap vor"*, *"pick a roadmap and ship it"*) — i.e. the
91
+ user has NOT named a roadmap and wants one chosen — route to
92
+ [`/roadmap:next`](roadmap/next.md), which is the only sub that
93
+ screens and selects. The three `process-*` subs never choose across
94
+ roadmaps.
@@ -48,7 +48,10 @@ THE SAME MINUS THE QUOTA WIN.
48
48
  tier <t>`); a 429/quota error trips `tripCooldown` for that tier and
49
49
  falls back per the relation — never a retry loop. Under
50
50
  `budget_routing: ask`, the FIRST budget-motivated downshift of a session
51
- is confirmed once; `auto` proceeds silently. Every budget-routed
51
+ is confirmed once, in the shape
52
+ [`settings-ask-protocol`](../../rules/settings-ask-protocol.md) fixes and
53
+ without persisting the answer (`subagents.budget_routing` is class C);
54
+ `auto` proceeds silently. Every budget-routed
52
55
  dispatch emits one `orchestration_record` line (tier + provenance-tagged
53
56
  token delta) so realized savings are measured, not asserted.
54
57
 
@@ -18,6 +18,8 @@ workspaces: [engineering]
18
18
  packs: [engineering-base]
19
19
  collision_ok:
20
20
  "refactor": "an explicit clean-up/refactor ask is the remediation ladder's own trigger"
21
+ # obligation: line 51
22
+ obligation_frequency: "per-edit"
21
23
  ---
22
24
 
23
25
  # Active Remediation
@@ -10,6 +10,8 @@ routes_to:
10
10
  - "skill:analysis-skill-router"
11
11
  workspaces: [agent-config-maintainer, engineering]
12
12
  packs: [meta]
13
+ # obligation: line 19
14
+ obligation_frequency: "none"
13
15
  ---
14
16
 
15
17
  # Analysis Skill Routing
@@ -13,6 +13,8 @@ workspaces: [agent-config-maintainer, engineering]
13
13
  packs: [meta]
14
14
  collision_ok:
15
15
  "controller": "thin-handler floor on controller work"
16
+ # obligation: line 26
17
+ obligation_frequency: "per-edit"
16
18
  ---
17
19
 
18
20
  # Architecture Rules
@@ -14,6 +14,8 @@ routes_to:
14
14
  - "guideline:agent-infra/artifact-drafting-protocol-mechanics"
15
15
  workspaces: [agent-config-maintainer, engineering]
16
16
  packs: [meta]
17
+ # obligation: line 41
18
+ obligation_frequency: "per-task"
17
19
  ---
18
20
 
19
21
  # Artifact Drafting Protocol
@@ -13,6 +13,8 @@ load_context:
13
13
  - "../contexts/contracts/artifact-engagement-flow.md"
14
14
  workspaces: [agent-config-maintainer, engineering]
15
15
  packs: [meta]
16
+ # obligation: line 22
17
+ obligation_frequency: "per-task"
16
18
  ---
17
19
 
18
20
  <!-- cloud_safe: noop -->
@@ -19,6 +19,8 @@ workspaces: [agent-config-maintainer]
19
19
  packs: [meta]
20
20
  collision_ok:
21
21
  ".augment/": "portability + sync floors for the .augment tree"
22
+ # obligation: line 28
23
+ obligation_frequency: "per-edit"
22
24
  ---
23
25
 
24
26
  # Augment Edit Discipline
@@ -13,6 +13,8 @@ triggers:
13
13
  self_contained: true
14
14
  workspaces: [agent-config-maintainer, construction, engineering, finance, founder, gtm, legal-review-prep, ops, product, small-business]
15
15
  packs: [meta]
16
+ # obligation: line 4
17
+ obligation_frequency: "per-turn"
16
18
  ---
17
19
 
18
20
  # Autonomous Execution
@@ -10,6 +10,8 @@ applies_to_user_types:
10
10
  self_contained: true
11
11
  workspaces: [engineering]
12
12
  packs: [brand]
13
+ # obligation: line 20
14
+ obligation_frequency: "none"
13
15
  ---
14
16
 
15
17
  # Brand Consistency
@@ -20,6 +20,8 @@ applies_to_user_types:
20
20
  self_contained: true
21
21
  workspaces: [engineering]
22
22
  packs: [brand]
23
+ # obligation: line 51
24
+ obligation_frequency: "per-edit"
23
25
  ---
24
26
 
25
27
  # Brand Source of Truth
@@ -23,6 +23,8 @@ collision_ok:
23
23
  "controller": "controllers return user data — the ownership/tenant check floor"
24
24
  "endpoint": "every data-returning endpoint needs the three negative tests"
25
25
  "tenant": "cross-tenant isolation is this rule's core subject"
26
+ # obligation: line 55
27
+ obligation_frequency: "per-edit"
26
28
  ---
27
29
 
28
30
  # Broken Access Control
@@ -35,6 +35,8 @@ collision_ok:
35
35
  "composer": "composer output is verbose — rtk wrap applies"
36
36
  "docker": "docker output is verbose — rtk wrap applies"
37
37
  "rector": "rector output is verbose — rtk wrap applies"
38
+ # obligation: line 42
39
+ obligation_frequency: "per-edit"
38
40
  ---
39
41
 
40
42
  # Cli Output Handling
@@ -20,6 +20,8 @@ packs: [engineering-base]
20
20
  collision_ok:
21
21
  "refactor": "refactors churn comments — the keep/drop discipline applies"
22
22
  "implement": "fresh implementation is where over-commenting lands"
23
+ # obligation: line 5
24
+ obligation_frequency: "per-edit"
23
25
  ---
24
26
 
25
27
  # Code Comment Discipline
@@ -21,6 +21,8 @@ packs: [engineering-base]
21
21
  roles: [developer, reviewer, tester, po, incident, planner]
22
22
  enforced_by:
23
23
  - "none"
24
+ # obligation: line 38
25
+ obligation_frequency: "per-edit"
24
26
  ---
25
27
 
26
28
  # Code Provenance
@@ -11,6 +11,8 @@ load_context:
11
11
  - "../contexts/contracts/command-suggestion-flow.md"
12
12
  workspaces: [agent-config-maintainer, construction, engineering, finance, founder, gtm, legal-review-prep, ops, product, small-business]
13
13
  packs: [meta]
14
+ # obligation: line 18
15
+ obligation_frequency: "per-turn"
14
16
  ---
15
17
 
16
18
  # Command Suggestion Policy
@@ -12,6 +12,8 @@ workspaces: [engineering]
12
12
  packs: [engineering-base]
13
13
  collision_ok:
14
14
  "commit": "format floor for every commit message"
15
+ # obligation: line 19
16
+ obligation_frequency: "per-commit"
15
17
  ---
16
18
 
17
19
  # Commit Conventions
@@ -8,6 +8,8 @@ workspaces: [agent-config-maintainer, construction, engineering, finance, founde
8
8
  packs: [meta]
9
9
  triggers:
10
10
  - phrase: "reporting progress"
11
+ # obligation: line 20
12
+ obligation_frequency: "per-turn"
11
13
  ---
12
14
 
13
15
  # Communication Through-Line
@@ -9,6 +9,8 @@ triggers:
9
9
  self_contained: true
10
10
  workspaces: [agent-config-maintainer, construction, engineering, finance, founder, gtm, legal-review-prep, ops, product, small-business]
11
11
  packs: [meta]
12
+ # obligation: line 19
13
+ obligation_frequency: "per-event"
12
14
  ---
13
15
 
14
16
  # Content Quoting Floor
@@ -12,6 +12,8 @@ workspaces: [agent-config-maintainer, construction, engineering, finance, founde
12
12
  packs: [meta]
13
13
  enforced_by:
14
14
  - "hook:context-hygiene"
15
+ # obligation: line 67
16
+ obligation_frequency: "per-turn"
15
17
  ---
16
18
 
17
19
  # Context Hygiene
@@ -21,6 +23,14 @@ enforced_by:
21
23
  > `agents/state/context-hygiene.json` (tool-call count, loop signal,
22
24
  > freshness milestones at 20/40/60); the prose below is the spec the
23
25
  > hook implements and the agent-side fallback.
26
+ >
27
+ > **What the slot cannot reach.** The carrier fires per *tool call*; the
28
+ > read-loop law below is per *turn*. A turn that makes no tool call fires it
29
+ > zero times — and a reply with no tool call is exactly the shape the read-loop
30
+ > counter is trying to notice. So the counters are hook-carried and the
31
+ > every-turn obligation is model-carried, on every host. Named here because the
32
+ > frequency join in `check_enforcement_coverage.ts` reports it, and a rule whose
33
+ > header says "enforced by" without that sentence reads as a guarantee it is not.
24
34
 
25
35
  ## Conversation Freshness
26
36
 
@@ -10,6 +10,8 @@ routes_to:
10
10
  - "skill:copilot-config"
11
11
  workspaces: [agent-config-maintainer, engineering]
12
12
  packs: [meta]
13
+ # obligation: line 19
14
+ obligation_frequency: "none"
13
15
  ---
14
16
 
15
17
  # Copilot Routing
@@ -26,6 +26,8 @@ packs: [engineering-base, product-basic]
26
26
  collision_ok:
27
27
  "mockup": "a mockup is a second source — discrepancy check against the ticket text"
28
28
  "screenshot": "a screenshot is a second source — discrepancy check"
29
+ # obligation: line 71
30
+ obligation_frequency: "per-task"
29
31
  ---
30
32
 
31
33
  # Cross-Source Consistency
@@ -16,6 +16,8 @@ workspaces: [agent-config-maintainer, engineering]
16
16
  packs: [meta]
17
17
  collision_ok:
18
18
  "honest null": "this rule asks whether a recorded null may be REVISITED; evaluator-independence asks how one was PRODUCED — different decision points on the same artefact"
19
+ # obligation: line 31
20
+ obligation_frequency: "per-task"
19
21
  ---
20
22
 
21
23
  # Decision Revisit Gate
@@ -20,6 +20,8 @@ routes_to:
20
20
  - "skill:subagent-orchestration"
21
21
  workspaces: [engineering]
22
22
  packs: [engineering-base]
23
+ # obligation: line 35
24
+ obligation_frequency: "per-task"
23
25
  ---
24
26
 
25
27
  # Delegation Policy
@@ -50,8 +52,9 @@ clears — all of:
50
52
  [`auto-dispatch-classification`](../contexts/execution/auto-dispatch-classification.md)
51
53
  (≥1 independent, well-specified slice above the size floor).
52
54
 
53
- `subagents.auto: ask` → ask once before dispatching (per
54
- [`user-interaction`](user-interaction.md)); `auto: on` → surface the chosen mode
55
+ `subagents.auto: ask` → ask once before dispatching, in the shape
56
+ [`settings-ask-protocol`](settings-ask-protocol.md) fixes (the answer is not
57
+ persisted — `subagents.auto` is class C); `auto: on` → surface the chosen mode
55
58
  + per-subtask tiers in one line. Any gate failing, or `auto: off`, or no host
56
59
  primitive → run in-session (clean no-op).
57
60
 
@@ -23,7 +23,9 @@ triggers:
23
23
  - phrase: "bau das nach"
24
24
  - phrase: "1:1 um"
25
25
  - phrase: "1:1 nach"
26
+ - phrase: "claude.site/artifacts"
26
27
  - file_pattern: "*design.html"
28
+ - path_prefix: ".claude/design-system/"
27
29
  applies_to_user_types:
28
30
  - "creator"
29
31
  - "developer"
@@ -34,6 +36,8 @@ workspaces: [engineering]
34
36
  packs: [engineering-base, frontend-design]
35
37
  collision_ok:
36
38
  "mockup": "a provided mockup is the spec — 1:1 fidelity floor"
39
+ # obligation: line 58
40
+ obligation_frequency: "per-edit"
37
41
  ---
38
42
 
39
43
  # Design Fidelity
@@ -96,13 +100,27 @@ artifact is simply attached. The last is covered by `file_pattern: *design.html`
96
100
  HTML edit in every project and be strictly worse than the gap it closes. A
97
101
  handover under some other filename needs one word in the prompt.
98
102
 
103
+ Two further handover shapes carry the artifact without any of the above:
104
+
105
+ - **A capability URL.** A published artifact is handed over as a link, not a
106
+ file — so `phrase: "claude.site/artifacts"` fires on the *published-artifact
107
+ path*, not on the host. `claude.ai` alone is a chat link and must stay quiet:
108
+ a keyword on the bare domain would fire on "I pasted this from claude.ai",
109
+ which is a conversation reference, not a spec.
110
+ - **A design-system directory.** `path_prefix: ".claude/design-system/"` — the
111
+ conventional location for a handed-over token/component set. The prefix is the
112
+ vendor-scoped directory, never a bare `design-system/`, which is a normal
113
+ source folder in a large fraction of frontend repos.
114
+
99
115
  The trigger set is deliberately phrase-heavy on the German side and on
100
116
  `artifact`: a bare `artifact` keyword fires on "the CI build artifact is 40 MB".
101
117
  `ROUTING_MATRIX` in
102
118
  [`design_fidelity_routing.test.ts`](../../tests/scripts/design_fidelity_routing.test.ts)
103
119
  pins both halves — every class that must route, and the near-misses that must
104
120
  stay silent (fixture `daf-port-trigger-de`). Extending the set without adding a
105
- near-miss row there is how an over-broad trigger lands.
121
+ near-miss row there is how an over-broad trigger lands: each of the two triggers
122
+ above ships with its own near-miss row (`near-claude-ai-chat-link`,
123
+ `near-generic-design-system-dir`).
106
124
 
107
125
  Body migrated to [`guideline:design-fidelity-mechanics`](../docs/guidelines/design-fidelity-mechanics.md) (per P4 of `road-to-kernel-and-router.md`) — surgical visual edits (targeted-edit vs redesign-trigger discipline, stable anchors), asset & imagery discipline (owned-asset path, third-party delivery is self-hosted by default, real-imagery-as-proof, iconography floor, no unrequested filler), deviation-surfacing shape, failure-mode catalog, `daf-*` fixtures.
108
126
  Trigger-set above activates this routing on demand, independent of the discipline profile (ADR-110).
@@ -0,0 +1,120 @@
1
+ ---
2
+ type: "auto"
3
+ tier: "2b"
4
+ alwaysApply: false
5
+ description: "UI written or changed — review it against the design contract before calling it done; the write-side twin of ui-audit-gate"
6
+ triggers:
7
+ - path_prefix: "resources/views/"
8
+ - path_prefix: "resources/js/"
9
+ - keyword: "component"
10
+ - keyword: "design token"
11
+ routes_to:
12
+ - "skill:design-review"
13
+ - "skill:accessibility-auditor"
14
+ workspaces: [agent-config-maintainer, engineering]
15
+ packs: [frontend-design]
16
+ enforced_by:
17
+ - "none"
18
+ collision_ok:
19
+ "component": "a written component is reviewed before it is called done — the write-side half"
20
+ "design token": "same surface, opposite side: ui-audit-gate inventories tokens before the write, this reviews what the write emitted"
21
+ "resources/views/": "both halves of one UI loop fire on the same path — audit before, review after; neither substitutes for the other"
22
+ "resources/js/": "both halves of one UI loop fire on the same path — audit before, review after; neither substitutes for the other"
23
+ # obligation: line 39
24
+ obligation_frequency: "per-edit"
25
+ ---
26
+
27
+ # Design Review After UI Write
28
+
29
+ The UI loop was closed on one side only. [`ui-audit-gate`](ui-audit-gate.md)
30
+ covers the **read** side — inventory what exists before adding a component — and
31
+ routes to `existing-ui-audit`. Nothing covered the **write** side: **zero rules
32
+ routed to `skill:design-review`**, so a component could be written, declared
33
+ done, and never looked at against the contract it was supposed to satisfy.
34
+
35
+ This is that rule's twin, deliberately built to the same shape: same tier, same
36
+ pack, same diff-decidable allow-list, and the same honest scope.
37
+
38
+ ## The Iron Law
39
+
40
+ ```
41
+ UI WRITTEN OR CHANGED IS NOT DONE UNTIL IT IS REVIEWED.
42
+ NEVER CLAIM A UI CHANGE IS COMPLETE ON "IT LOOKS RIGHT" — THAT IS A VERDICT
43
+ WITHOUT EVIDENCE. NO RENDER CAPABILITY → SCOPE THE VERDICT TO WHAT WAS
44
+ STATICALLY CHECKED AND SAY SO. NEVER "LOOKS GOOD" WITH NOTHING BEHIND IT.
45
+ ```
46
+
47
+ ## What "reviewed" means
48
+
49
+ The verdict is gated on evidence, not on having run a skill:
50
+
51
+ - **Render capability present** (Playwright MCP, Chrome DevTools, or a live
52
+ preview URL) → the [design-artifact verification checklist](../docs/contracts/design-artifact-verification.md#verification-checklist)
53
+ steps 1–5. A UI task does not pass without render evidence.
54
+ - **Render capability absent** → the verdict is **scoped to the static checks
55
+ that actually ran** and says which those were. This is not a downgrade to be
56
+ hidden; `design-review` itself states it ("scope the verdict to what was
57
+ statically checked and say so"). An unscoped "looks good" is the failure.
58
+ - **A provided artifact is the spec** → findings the artifact *covers* are
59
+ informational, not defects, per [`design-fidelity`](design-fidelity.md). The
60
+ review does not "improve" the user's own design.
61
+
62
+ ## Allow-list — `ui-trivial`, decidable from the diff alone
63
+
64
+ Skip only when **all** hold:
65
+
66
+ - ≤ 1 file, ≤ 5 changed lines, no new component, no new state, no new dependency.
67
+ - Inside the work engine, `directive_set == "ui-trivial"` — the dispatcher states
68
+ it directly. Outside it, the same conditions are read **off the diff**, which
69
+ is observable without any dispatcher state.
70
+
71
+ The list is deliberately the engine's five conditions, not the four its
72
+ sibling rule's prose carries: `ui_trivial/apply.ts` enforces `new_dependency`
73
+ too, and a twin that copied the shorter prose would inherit a gap the engine
74
+ does not have.
75
+
76
+ ## Honest scope — what this rule does NOT enforce
77
+
78
+ ```
79
+ THE REVIEW OBLIGATION IS MODEL-CARRIED. NEVER CLAIM THE REVIEW RAN
80
+ AS IF IT WERE VERIFIED.
81
+ ```
82
+
83
+ There is no artefact a chat session can point at to prove a design review
84
+ happened — "I ran `design-review`" is self-report, and self-report is not
85
+ enforcement. So this rule ships `enforced_by: none`, the same honesty boundary
86
+ `ui-audit-gate`, `security-sensitive-stop`, and `untrusted-input-defense` state
87
+ for their own obligations, rather than pretending a satisfiable-by-assertion
88
+ condition is a gate.
89
+
90
+ What that leaves, and it is the useful part: the write side now has a named
91
+ obligation and a route to the skill that discharges it, where before it had
92
+ neither. Full enforcement needs the work-engine `review`/`polish` gates (which
93
+ already act on `a11y_violation` and `token_violation` findings) or pack-scoped
94
+ rule projection — a maintainer decision, never an automated one.
95
+
96
+ One asymmetry worth stating: `design-review` lives in `engineering-base` while
97
+ this rule is scoped to `frontend-design`. The route still resolves — a rule may
98
+ name a skill from another pack — but a consumer with `frontend-design` and
99
+ without `engineering-base` gets the obligation without the skill. That is why
100
+ `accessibility-auditor` is a second route: it is the part of the review that
101
+ must not depend on the pairing.
102
+
103
+ ## Failure modes
104
+
105
+ - Writing the component and calling it done because the tests pass — tests do not
106
+ look at it.
107
+ - "Looks good" as a verdict with no render, no static check named, and no scope.
108
+ - Running the review and acting on findings the provided artifact covers, i.e.
109
+ redesigning the user's spec under the banner of quality.
110
+ - Treating the a11y half as optional because the visual half looked fine.
111
+ - Skipping the review for "just one tile" — the same bypass `ui-audit-gate`
112
+ names on its own side.
113
+
114
+ ## See also
115
+
116
+ - [`ui-audit-gate`](ui-audit-gate.md) — the read-side twin; audit before writing.
117
+ - [`design-review`](../skills/design-review/SKILL.md) — the 7-phase review this routes to.
118
+ - [`accessibility-auditor`](../skills/accessibility-auditor/SKILL.md) — the WCAG half.
119
+ - [`design-fidelity`](design-fidelity.md) — a provided artifact is the spec; covered findings are informational.
120
+ - [`verify-before-complete`](verify-before-complete.md) — the general no-claim-without-evidence gate this applies to UI.
@@ -11,6 +11,8 @@ routes_to:
11
11
  - "skill:devcontainer"
12
12
  workspaces: [agent-config-maintainer, engineering]
13
13
  packs: [meta]
14
+ # obligation: line 20
15
+ obligation_frequency: "none"
14
16
  ---
15
17
 
16
18
  # Devcontainer Routing
@@ -27,6 +27,8 @@ workspaces: [agent-config-maintainer, construction, engineering, finance, founde
27
27
  packs: [meta]
28
28
  collision_ok:
29
29
  "screenshot": "a screenshot shipping into docs is the PII/anonymization gate"
30
+ # obligation: line 49
31
+ obligation_frequency: "per-event"
30
32
  ---
31
33
 
32
34
  # Doc-Screenshot Hygiene
@@ -15,6 +15,8 @@ collision_ok:
15
15
  "artisan": "artisan runs inside the project container, never on the host"
16
16
  "composer": "composer runs inside the project container"
17
17
  "docker": "its own core subject"
18
+ # obligation: line 22
19
+ obligation_frequency: "per-edit"
18
20
  ---
19
21
 
20
22
  # Docker Commands
@@ -18,6 +18,8 @@ workspaces: [agent-config-maintainer]
18
18
  packs: [meta]
19
19
  collision_ok:
20
20
  "src/skills/": "a skill in a fresh vertical is exactly the domain-gate surface"
21
+ # obligation: line 38
22
+ obligation_frequency: "per-task"
21
23
  ---
22
24
 
23
25
  # Domain Adoption Policy
@@ -42,6 +42,8 @@ workspaces: [agent-config-maintainer, construction, engineering, finance, founde
42
42
  packs: [meta]
43
43
  collision_ok:
44
44
  "review this contract": "contract review is advisory-shaped — the not-legal-advice footer floor"
45
+ # obligation: line 52
46
+ obligation_frequency: "per-task"
45
47
  ---
46
48
 
47
49
  # Domain Safety — Advisory Disclaimer
@@ -42,6 +42,8 @@ applies_to_user_types:
42
42
  - "all"
43
43
  workspaces: [agent-config-maintainer, construction, engineering, finance, founder, gtm, legal-review-prep, ops, product, small-business]
44
44
  packs: [meta]
45
+ # obligation: line 52
46
+ obligation_frequency: "per-task"
45
47
  ---
46
48
 
47
49
  # Domain Safety — PII Redaction
@@ -27,6 +27,8 @@ applies_to_user_types:
27
27
  - "gtm"
28
28
  workspaces: [agent-config-maintainer, construction, engineering, finance, founder, gtm, legal-review-prep, ops, product, small-business]
29
29
  packs: [meta]
30
+ # obligation: line 47
31
+ obligation_frequency: "per-turn"
30
32
  ---
31
33
 
32
34
  # Domain Safety — Data Retention
@@ -11,6 +11,8 @@ triggers:
11
11
  self_contained: true
12
12
  workspaces: [engineering]
13
13
  packs: [engineering-base]
14
+ # obligation: line 30
15
+ obligation_frequency: "per-edit"
14
16
  ---
15
17
 
16
18
  # Downstream Changes
@@ -28,6 +28,8 @@ workspaces: [engineering]
28
28
  packs: [engineering-base]
29
29
  collision_ok:
30
30
  "migration": "a prod migration is a hard-floor evidence surface (rollback path, blast radius)"
31
+ # obligation: line 49
32
+ obligation_frequency: "per-commit"
31
33
  ---
32
34
 
33
35
  # Engineering Safety Floor
@@ -20,6 +20,12 @@ enforced_by:
20
20
  - "hook:evidence-independence"
21
21
  collision_ok:
22
22
  "honest null": "this rule asks how a recorded null was PRODUCED; decision-revisit-gate asks whether it may be REVISITED — different decision points on the same artefact"
23
+ # obligation: dispatching an evaluator is a tool call, and the guard is a pre_tool_use
24
+ # concern that reads that prompt — src/rules/evaluator-independence.md:81
25
+ obligation_frequency: "per-edit"
26
+ # frequency-override: line 70 states a per-turn clause ("one evaluation per turn"),
27
+ # but the guard counts it AT the dispatch, which is a tool call — a per-edit point
28
+ # carrier sees every dispatch, so it carries the per-turn cap too.
23
29
  ---
24
30
 
25
31
  # Evaluator Independence
@@ -81,9 +87,19 @@ was manufactured anyway.
81
87
 
82
88
  [`evidence_independence.ts`](../scripts/hooks/evidence_independence.ts) is a
83
89
  `pre_tool_use` concern. It **blocks** a dispatch whose prompt carries a
84
- pre-loaded verdict, and **blocks** a second evaluation-shaped dispatch in the
85
- same turn; it **warns** on the first. It reads the prompt the agent is about to
86
- send, so items 1 and 4 above are mechanically enforced.
90
+ pre-loaded verdict, and **blocks** a second *self-scoped* evaluation dispatch in
91
+ the same turn; it **warns** on the first. It reads the prompt the agent is about
92
+ to send, so items 1 and 4 above are mechanically enforced.
93
+
94
+ Three limits, stated because they were measured. The pre-loaded-verdict list is
95
+ a **phrase list**, so a paraphrase evades it — it catches recurrences of known
96
+ steering wording, not steering as such. The turn boundary is the
97
+ authorization ledger's `detected_at` stamp, because the envelope carries no turn
98
+ id; with no ledger yet, the counter falls back to session scope. And the slot
99
+ itself is not universal: `pre_tool_use` exists on **three** hosts — augment,
100
+ claude, cowork. On cursor, cline, windsurf, gemini and copilot this guard has
101
+ nowhere to bind, so items 1 and 4 join 2 and 3 as model-carried there. The
102
+ frequency join in `check_enforcement_coverage.ts` reports exactly that set.
87
103
 
88
104
  Items 2 and 3 — an honestly chosen scope, and recording the prompt with the
89
105
  verdict — are **not** enforced by anything. A narrowed scope is not decidable
@@ -17,6 +17,8 @@ applies_to_user_types:
17
17
  self_contained: true
18
18
  workspaces: [engineering]
19
19
  packs: [meta]
20
+ # obligation: line 37
21
+ obligation_frequency: "per-turn"
20
22
  ---
21
23
 
22
24
  # External Code-Graph Interop
@@ -10,6 +10,8 @@ triggers:
10
10
  self_contained: true
11
11
  workspaces: [agent-config-maintainer, engineering]
12
12
  packs: [meta]
13
+ # obligation: line 20
14
+ obligation_frequency: "per-task"
13
15
  ---
14
16
 
15
17
  # external-reference-deep-dive
@@ -14,6 +14,8 @@ validator_ignore:
14
14
  self_contained: true
15
15
  workspaces: [agent-config-maintainer, engineering]
16
16
  packs: [meta]
17
+ # obligation: line 30
18
+ obligation_frequency: "per-turn"
17
19
  ---
18
20
 
19
21
  # Fast-Path Marker Visibility
@@ -33,6 +33,8 @@ packs: [finance-basic, finance-advanced]
33
33
  trust:
34
34
  level: advisory
35
35
  human_review_required: true
36
+ # obligation: line 53
37
+ obligation_frequency: "per-task"
36
38
  ---
37
39
  <!-- agent-config:human-review-banner -->
38
40
  > HUMAN REVIEW REQUIRED · trust: advisory · owner: unknown