@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
@@ -43,6 +43,8 @@ collision_ok:
43
43
  "formrequest": "FormRequest named in a generic artifact is leakage — the lint surface"
44
44
  "phpstan": "phpstan named in a generic artifact is leakage — the lint surface"
45
45
  "rector": "rector named in a generic artifact is leakage — the lint surface"
46
+ # obligation: line 65
47
+ obligation_frequency: "per-edit"
46
48
  ---
47
49
 
48
50
  # framework-neutrality-in-generic-skills
@@ -23,6 +23,8 @@ workspaces: [engineering]
23
23
  packs: [engineering-base]
24
24
  enforced_by:
25
25
  - "hook:block-no-verify"
26
+ # obligation: line 35
27
+ obligation_frequency: "per-commit"
26
28
  ---
27
29
 
28
30
  # Git History Discipline
@@ -82,4 +84,4 @@ Trigger-set above activates this routing on demand, independent of the disciplin
82
84
  - [`commit-policy`](commit-policy.md) — commits are the user's call; rewriting them is a stronger version of the same restriction.
83
85
  - [`token-efficiency`](token-efficiency.md) — Iron Law on burning the user's tokens for cosmetic gain.
84
86
  - [`skill:git-workflow`](../skills/git-workflow/SKILL.md) — Safe Squash-After-Push protocol and Divergent-State Recovery decision tree.
85
- - `git … --no-verify` / `core.hooksPath` overrides — deterministically blocked by the `block-no-verify` PreToolUse guard (`src/scripts/hooks/block_no_verify.ts`, registered in `hook_manifest.yaml`).
87
+ - `git … --no-verify` / `core.hooksPath` overrides — deterministically blocked by the `block-no-verify` PreToolUse guard (`src/scripts/hooks/block_no_verify.ts`, registered in `hook_manifest.yaml`) **on the three hosts that have a `pre_tool_use` slot at all** — augment, claude, cowork. On cursor, cline, windsurf, gemini and copilot the guard has nowhere to bind, so on those hosts the Iron Laws above are model-carried and "deterministically blocked" is not a claim this rule can make. Surfaced by the frequency join in `check_enforcement_coverage.ts`, which reports the per-commit obligation as uncovered on exactly those platforms.
@@ -9,6 +9,8 @@ triggers:
9
9
  - keyword: "convention"
10
10
  workspaces: [agent-config-maintainer, engineering]
11
11
  packs: [meta]
12
+ # obligation: line 16
13
+ obligation_frequency: "per-edit"
12
14
  ---
13
15
 
14
16
  # Guidelines
@@ -19,6 +19,8 @@ workspaces: [engineering]
19
19
  packs: [history-discipline]
20
20
  trust:
21
21
  level: professional
22
+ # obligation: line 35
23
+ obligation_frequency: "per-edit"
22
24
  ---
23
25
 
24
26
  # History Discipline
@@ -16,6 +16,8 @@ applies_to_user_types:
16
16
  self_contained: true
17
17
  workspaces: [engineering]
18
18
  packs: [frontend-design]
19
+ # obligation: line 41
20
+ obligation_frequency: "per-edit"
19
21
  ---
20
22
 
21
23
  # Icon Consistency
@@ -22,6 +22,8 @@ collision_ok:
22
22
  "/image:": "rights/likeness gate on the image-generation surface"
23
23
  "likeness": "its own core subject — the rights gate"
24
24
  "scripts/ai-image/adapters/": "adapter edits touch the likeness-gated generation path"
25
+ # obligation: line 32
26
+ obligation_frequency: "per-event"
25
27
  ---
26
28
 
27
29
  # Image Likeness and Rights
@@ -20,6 +20,8 @@ collision_ok:
20
20
  "migration": "a migration is a significant behavioural change — the pre-implementation checks apply"
21
21
  "refactor": "refactor = significant change; the demand gate + three checks apply"
22
22
  "implement": "its own core trigger — pre-implementation validation"
23
+ # obligation: line 45
24
+ obligation_frequency: "per-task"
23
25
  ---
24
26
 
25
27
  # Improve Before Implement
@@ -12,6 +12,8 @@ triggers:
12
12
  self_contained: true
13
13
  workspaces: [agent-config-maintainer, engineering]
14
14
  packs: [meta]
15
+ # obligation: line 62
16
+ obligation_frequency: "per-task"
15
17
  ---
16
18
 
17
19
  # invite-challenge
@@ -20,6 +20,8 @@ collision_ok:
20
20
  "artisan": "artisan is a Laravel-flavoured PHP routing cue — load the laravel skill"
21
21
  "eloquent": "eloquent is a Laravel routing cue"
22
22
  "formrequest": "FormRequest is a Laravel routing cue"
23
+ # obligation: line 29
24
+ obligation_frequency: "none"
23
25
  ---
24
26
 
25
27
  # Laravel Routing
@@ -16,6 +16,8 @@ trust:
16
16
  install:
17
17
  default: false
18
18
  removable: true
19
+ # obligation: line 23
20
+ obligation_frequency: "per-edit"
19
21
  ---
20
22
 
21
23
  # Laravel Translations
@@ -31,6 +31,8 @@ trust:
31
31
  collision_ok:
32
32
  "controller": "'controller' is a GDPR role term (controller/processor) in the legal pack"
33
33
  "review this contract": "the legal-pack contract-review gate — both floors must fire"
34
+ # obligation: line 103
35
+ obligation_frequency: "per-task"
34
36
  ---
35
37
  <!-- agent-config:human-review-banner -->
36
38
  > HUMAN REVIEW REQUIRED · trust: advisory · owner: unknown
@@ -20,6 +20,8 @@ enforced_by:
20
20
  collision_ok:
21
21
  "src/skills/": "skill authoring reviews tool grants and the egress leg"
22
22
  "src/agent-src/commands/": "command authoring reviews the three trifecta legs"
23
+ # obligation: line 60
24
+ obligation_frequency: "per-edit"
23
25
  ---
24
26
 
25
27
  # Lethal-Trifecta Guard
@@ -23,6 +23,8 @@ trust:
23
23
  confidence: medium
24
24
  install:
25
25
  removable: true
26
+ # obligation: line 30
27
+ obligation_frequency: "per-session"
26
28
  ---
27
29
 
28
30
  # Linked-Projects Onboarding Gate
@@ -10,6 +10,8 @@ triggers:
10
10
  self_contained: true
11
11
  workspaces: [agent-config-maintainer]
12
12
  packs: [meta]
13
+ # obligation: line 28
14
+ obligation_frequency: "per-edit"
13
15
  ---
14
16
 
15
17
  # Low-Impact Corpus — Privacy Floor
@@ -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 23
13
+ obligation_frequency: "per-turn"
12
14
  ---
13
15
 
14
16
  # Markdown Safe Codeblocks
@@ -36,6 +36,8 @@ collision_ok:
36
36
  "/audio:": "routes the media policy layer for audio surfaces"
37
37
  "/video:": "routes the media policy layer for video surfaces"
38
38
  "likeness": "likeness prompts must load the policy layer before generation"
39
+ # obligation: line 46
40
+ obligation_frequency: "per-event"
39
41
  ---
40
42
 
41
43
  # Media Governance Routing
@@ -17,6 +17,8 @@ triggers:
17
17
  self_contained: true
18
18
  workspaces: [agent-config-maintainer, engineering, gtm]
19
19
  packs: [ai-video]
20
+ # obligation: line 31
21
+ obligation_frequency: "per-event"
20
22
  ---
21
23
 
22
24
  # Media Sync — Ground Truth Is the Audio
@@ -17,6 +17,8 @@ enforced_by:
17
17
  - "hook:minimal-safe-diff"
18
18
  collision_ok:
19
19
  "fix": "a fix is the smallest change that solves the stated problem"
20
+ # obligation: line 25
21
+ obligation_frequency: "per-edit"
20
22
  ---
21
23
 
22
24
  # Minimal Safe Diff
@@ -9,6 +9,8 @@ routes_to:
9
9
  - "guideline:agent-infra/missing-tool-handling"
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 16
13
+ obligation_frequency: "per-event"
12
14
  ---
13
15
 
14
16
  # Missing Tool Handling
@@ -13,6 +13,8 @@ routes_to:
13
13
  - "guideline:agent-infra/model-recommendation"
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-task"
16
18
  ---
17
19
 
18
20
  # Model Recommendation
@@ -8,6 +8,8 @@ triggers:
8
8
  self_contained: true
9
9
  workspaces: [agent-config-maintainer, construction, engineering, finance, founder, gtm, legal-review-prep, ops, product, small-business]
10
10
  packs: [meta]
11
+ # obligation: line 18
12
+ obligation_frequency: "per-commit"
11
13
  ---
12
14
 
13
15
  # No Attribution Footers
@@ -17,6 +17,8 @@ triggers:
17
17
  self_contained: true
18
18
  workspaces: [agent-config-maintainer, engineering]
19
19
  packs: [meta]
20
+ # obligation: line 27
21
+ obligation_frequency: "per-commit"
20
22
  ---
21
23
 
22
24
  # No Decorative Emojis in Git Surfaces
@@ -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-commit"
13
15
  ---
14
16
 
15
17
  # No Unsolicited PR Progress Comments
@@ -22,6 +22,8 @@ enforced_by:
22
22
  - "validator:src/scripts/check_council_references.ts"
23
23
  collision_ok:
24
24
  "agents/roadmaps/": "roadmap edits are where transient-ref links get written"
25
+ # obligation: line 47
26
+ obligation_frequency: "per-edit"
25
27
  ---
26
28
 
27
29
  # No Transient References from Stable Artifacts
@@ -17,6 +17,8 @@ workspaces: [agent-config-maintainer, engineering]
17
17
  packs: [meta]
18
18
  collision_ok:
19
19
  "debug": "debug hypotheses belong in the session notes file"
20
+ # obligation: line 35
21
+ obligation_frequency: "per-turn"
20
22
  ---
21
23
 
22
24
  # Notes-First Reasoning
@@ -11,6 +11,8 @@ workspaces: [agent-config-maintainer, construction, engineering, finance, founde
11
11
  packs: [meta]
12
12
  enforced_by:
13
13
  - "hook:onboarding-gate"
14
+ # obligation: line 18
15
+ obligation_frequency: "per-session"
14
16
  ---
15
17
 
16
18
  # Onboarding Gate
@@ -12,6 +12,8 @@ workspaces: [engineering]
12
12
  packs: [engineering-base]
13
13
  enforced_by:
14
14
  - "validator:src/scripts/lint_output_slop.ts"
15
+ # obligation: line 22
16
+ obligation_frequency: "per-edit"
15
17
  ---
16
18
 
17
19
  # Output Discipline
@@ -10,6 +10,8 @@ routes_to:
10
10
  - "skill:lint-skills"
11
11
  workspaces: [agent-config-maintainer]
12
12
  packs: [meta]
13
+ # obligation: line 17
14
+ obligation_frequency: "per-commit"
13
15
  ---
14
16
 
15
17
  # Package Ci Checks
@@ -27,6 +27,8 @@ workspaces: [agent-config-maintainer]
27
27
  packs: [meta]
28
28
  enforced_by:
29
29
  - "validator:src/scripts/lint_persona_governance.ts"
30
+ # obligation: line 41
31
+ obligation_frequency: "per-edit"
30
32
  ---
31
33
 
32
34
  # Persona Governance
@@ -18,6 +18,8 @@ install:
18
18
  removable: true
19
19
  collision_ok:
20
20
  "phpstan": "phpstan findings are the PHP pattern floor's own quality surface"
21
+ # obligation: line 25
22
+ obligation_frequency: "per-edit"
21
23
  ---
22
24
 
23
25
  # Php Coding
@@ -15,6 +15,8 @@ packs: [engineering-base]
15
15
  collision_ok:
16
16
  "migration": "migrations add columns — multi-state fields should land as enums from the start"
17
17
  "category": "a category field is the canonical enum candidate"
18
+ # obligation: line 27
19
+ obligation_frequency: "per-edit"
18
20
  ---
19
21
 
20
22
  # Prefer Enums Over Literal Values
@@ -15,6 +15,8 @@ packs: [meta]
15
15
  enforced_by:
16
16
  - "validator:src/scripts/check_condensation.ts"
17
17
  - "validator:src/scripts/skill_linter.ts"
18
+ # obligation: line 22
19
+ obligation_frequency: "per-edit"
18
20
  ---
19
21
 
20
22
  # Preservation Guard
@@ -30,6 +30,8 @@ collision_ok:
30
30
  "/audio:": "provider-tier gate for audio providers"
31
31
  "/video:": "provider-tier gate for video providers"
32
32
  "scripts/ai-image/adapters/": "adapter edits are the lifecycle contract's surface"
33
+ # obligation: line 41
34
+ obligation_frequency: "per-event"
33
35
  ---
34
36
 
35
37
  # Provider Lifecycle Discipline
@@ -24,6 +24,8 @@ applies_to_user_types:
24
24
  self_contained: true
25
25
  workspaces: [engineering]
26
26
  packs: [meta]
27
+ # obligation: line 32
28
+ obligation_frequency: "per-turn"
27
29
  ---
28
30
 
29
31
  # Question Is Not an Instruction
@@ -13,6 +13,8 @@ routes_to:
13
13
  workspaces: [agent-config-maintainer, engineering]
14
14
  packs: [meta]
15
15
  roles: [reviewer]
16
+ # obligation: line 20
17
+ obligation_frequency: "per-commit"
16
18
  ---
17
19
 
18
20
  # Reviewer Awareness
@@ -30,6 +30,8 @@ packs: [meta]
30
30
  roles: [planner]
31
31
  collision_ok:
32
32
  "agents/roadmaps/": "roadmap steps must not schedule CI-shaped gates"
33
+ # obligation: line 41
34
+ obligation_frequency: "per-edit"
33
35
  ---
34
36
 
35
37
  # Roadmap CI-Steps Policy
@@ -16,6 +16,8 @@ enforced_by:
16
16
  - "hook:roadmap-progress"
17
17
  collision_ok:
18
18
  "agents/roadmaps/": "any roadmap touch regenerates the dashboard, same response"
19
+ # obligation: line 26
20
+ obligation_frequency: "per-edit"
19
21
  ---
20
22
 
21
23
  # Roadmap Progress Sync
@@ -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 23
13
+ obligation_frequency: "per-turn"
12
14
  ---
13
15
 
14
16
  # Role Mode Adherence
@@ -10,6 +10,8 @@ workspaces: [agent-config-maintainer]
10
10
  packs: [meta]
11
11
  collision_ok:
12
12
  "src/rules/": "the always-vs-auto choice fires on every rule edit"
13
+ # obligation: line 17
14
+ obligation_frequency: "per-edit"
13
15
  ---
14
16
 
15
17
  # Rule Type Governance
@@ -10,6 +10,8 @@ triggers:
10
10
  self_contained: true
11
11
  workspaces: [agent-config-maintainer, engineering]
12
12
  packs: [meta]
13
+ # obligation: line 32
14
+ obligation_frequency: "per-edit"
13
15
  ---
14
16
 
15
17
  # Runtime Safety
@@ -26,6 +26,8 @@ trust:
26
26
  collision_ok:
27
27
  "migration": "R-A6 migration-safety owns reversibility/index/retention rules"
28
28
  "schema": "schema change routes the persistence pack floor (R-A6/R-A2)"
29
+ # obligation: line 41
30
+ obligation_frequency: "per-edit"
29
31
  ---
30
32
 
31
33
  # Scale Discipline
@@ -27,6 +27,8 @@ enforced_by:
27
27
  - "validator:src/scripts/check_secret_leak.ts"
28
28
  collision_ok:
29
29
  "commit": "committing is the credential-leak moment this guard exists for"
30
+ # obligation: line 43
31
+ obligation_frequency: "per-edit"
30
32
  ---
31
33
 
32
34
  # Secret-in-VCS Guard
@@ -26,6 +26,8 @@ enforced_by:
26
26
  - "none"
27
27
  collision_ok:
28
28
  "tenant": "tenancy is a threat-model-before-edit surface"
29
+ # obligation: line 36
30
+ obligation_frequency: "per-edit"
29
31
  ---
30
32
 
31
33
  # Security-Sensitive Stop Rule
@@ -25,6 +25,8 @@ collision_ok:
25
25
  "implement": "implementation = the invisible-controls checklist"
26
26
  "endpoint": "endpoint row of the surface-to-controls table"
27
27
  "component": "component work = generalize + reuse duty"
28
+ # obligation: line 69
29
+ obligation_frequency: "per-edit"
28
30
  ---
29
31
 
30
32
  # Senior Engineering Discipline
@@ -12,6 +12,13 @@ workspaces: [agent-config-maintainer, construction, engineering, finance, founde
12
12
  packs: [meta]
13
13
  enforced_by:
14
14
  - "hook:session-canary"
15
+ # obligation: line 31
16
+ obligation_frequency: "per-task"
17
+ # frequency-override: the per-turn phrases in the body describe the CARRIER
18
+ # (a per-turn beat is the closest reachable cover for a per-task obligation),
19
+ # not the obligation itself, which is still the first reply of each new task.
20
+ collision_ok:
21
+ "canary_name": "this rule owns what the NAME does once set and which of the three layers already supplies it; settings-ask-protocol owns how it is asked for and where the answer goes"
15
22
  ---
16
23
 
17
24
  # Session Canary
@@ -67,25 +74,62 @@ name it and suggest a fresh session or `/agent-handoff`, per
67
74
  - The greeting never substitutes for substance — it prefixes the answer, it is
68
75
  not the answer.
69
76
 
70
- ## Enforcement — per session, NOT per task
71
-
72
- > **Enforced by:** [`scripts/session_canary_hook.ts`](../../scripts/session_canary_hook.ts)
73
- > (`session_start`, all hook-capable hosts) — injects the `<session-canary>`
74
- > contract block into every new session, so a fresh conversation cannot start
75
- > without it. **Copilot fallback:** no hook surface — this rule is the only
76
- > carrier; re-read it when the trigger fires.
77
-
78
- **The gap, stated because it was measured.** The injection fires on
79
- `session_start`; the obligation is per *task*. Nothing re-injects at a task
80
- boundary, so from the second task on the contract is model-carried.
81
-
82
- Conformance audit, 30 sessions, 2026-08-06: opening canary dropped on ~13 of 15
83
- task starts, often present only in the closing summary, twice carrying a name
84
- the settings chain did not resolve; the honesty clause fired zero times. No
85
- per-task gate ships — the audit found no harm beyond the lost signal, and a
86
- mechanism for a signal whose absence nobody acted on has no failure mode to
87
- match. The consequence stands: this canary cannot currently be relied on as the
88
- degradation detector its own rationale describes.
77
+ ## Enforcement — per turn, which is the closest reachable cover for per task
78
+
79
+ > **Enforced by:** [`scripts/session_canary_hook.ts`](../../scripts/session_canary_hook.ts),
80
+ > bound in **two** slots. `session_start` injects the full `<session-canary>`
81
+ > contract once, so a fresh conversation cannot start without it.
82
+ > `user_prompt_submit` injects a one-line beat every turn, which is what
83
+ > actually reaches a task boundary.
84
+
85
+ **Why two slots, and why not one.** The obligation is per *task*. No host has a
86
+ per-task slot — Cline maps `TaskStart`/`TaskResume` onto `session_start`, and
87
+ Claude Code has no task event at all — so "move the carrier to the right slot"
88
+ was never available. Per-turn is a strict superset of per-task and is reachable,
89
+ which is the whole argument: over-firing a greeting is a visible, cheap failure;
90
+ under-firing is the silent one. The full contract stays at session scope because
91
+ re-injecting ~800 characters every turn would buy the same coverage at roughly
92
+ 40× the tokens over a long session.
93
+
94
+ **What that fixed, stated because it was measured.** Conformance audit, 30
95
+ sessions, 2026-08-06, under session-scope-only injection: opening canary dropped
96
+ on ~13 of 15 task starts, often present only in the closing summary, twice
97
+ carrying a name the settings chain did not resolve; the honesty clause fired
98
+ zero times. The frequency join in `check_enforcement_coverage.ts` now reports the
99
+ carrier as covering the obligation — which is a claim about firing, not about
100
+ compliance.
101
+
102
+ **What the second audit found: the carrier fires and compliance did not
103
+ follow.** Conformance round 5, 2026-08-07, reading the five highest-turn
104
+ sessions with the carrier bound per turn: opening canary dropped on **24 of 29**
105
+ task starts, the honesty clause fired **0** times, and the wrong name was
106
+ emitted **twice** — "Mathias", which resolves from no layer of the chain
107
+ (`identity.name` is `Matze`, `git config user.name` is `matze4u`), i.e. inferred
108
+ from the ambient environment rather than read from settings. 24/29 against the
109
+ earlier 13/15 is not a fall, and the two windows are not identical, so they are
110
+ stated side by side rather than as a trend — but nothing here supports the claim
111
+ that the miss rate moved. A reminder in context is therefore not a mechanism for
112
+ this obligation: at higher frequency it is the same request, more often.
113
+
114
+ **What the next mechanism has to be.** Not another injection. It has to be able
115
+ to **refuse** — a check at delivery (`stop` is block-capable on this host, so a
116
+ refused turn-end continues in the same turn) that rejects a task-start reply
117
+ carrying no greeting. Proposed, not shipped; until it is, this obligation is
118
+ model-carried in practice, whatever the frequency join reports.
119
+
120
+ **The wrong-name half needs nothing, and that is worth stating.** The beat
121
+ already carries the resolved value — `build_canary_reminder` emits
122
+ `Canary active for "<name>"`, and the hook no-ops when no layer resolves a name —
123
+ and both wrong-name occurrences predate it: 2026-08-04, where the per-turn beat
124
+ landed 2026-08-06. The inference path they measure is already closed, so a third
125
+ audit should not re-open it.
126
+
127
+ **Two declared gaps, neither papered over.** On **Augment** there is no
128
+ `user_prompt_submit` slot; its `stop` fires *after* the reply, so injecting
129
+ there could not shape the reply the reminder is for, and counting it would be
130
+ exactly the over-credit the frequency audit exists to remove. Augment therefore
131
+ reports as an open gap rather than as covered. **Copilot** has no hook surface at
132
+ all — this rule is the only carrier there; re-read it when the trigger fires.
89
133
 
90
134
  ## See also
91
135