@event4u/agent-config 9.6.0 → 9.8.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 (204) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +207 -942
  3. package/README.md +21 -21
  4. package/dist/agent-src/README.md +2 -2
  5. package/dist/agent-src/commands/commit/in-chunks.md +8 -0
  6. package/dist/agent-src/commands/commit.md +17 -0
  7. package/dist/agent-src/commands/pr/create.md +4 -0
  8. package/dist/agent-src/contexts/override-system.md +75 -5
  9. package/dist/agent-src/rules/context-hygiene.md +2 -0
  10. package/dist/agent-src/rules/doc-screenshot-hygiene.md +97 -0
  11. package/dist/agent-src/rules/domain-safety-pii.md +1 -0
  12. package/dist/agent-src/rules/downstream-changes.md +31 -1
  13. package/dist/agent-src/rules/external-code-graph-interop.md +13 -3
  14. package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +2 -0
  15. package/dist/agent-src/rules/git-history-discipline.md +2 -0
  16. package/dist/agent-src/rules/language-and-tone.md +2 -0
  17. package/dist/agent-src/rules/lethal-trifecta-guard.md +3 -0
  18. package/dist/agent-src/rules/media-governance-routing.md +2 -0
  19. package/dist/agent-src/rules/minimal-safe-diff.md +2 -0
  20. package/dist/agent-src/rules/no-roadmap-references.md +3 -0
  21. package/dist/agent-src/rules/non-destructive-by-default.md +20 -0
  22. package/dist/agent-src/rules/onboarding-gate.md +2 -0
  23. package/dist/agent-src/rules/output-discipline.md +2 -0
  24. package/dist/agent-src/rules/persona-governance.md +2 -0
  25. package/dist/agent-src/rules/preservation-guard.md +3 -0
  26. package/dist/agent-src/rules/roadmap-progress-sync.md +2 -0
  27. package/dist/agent-src/rules/secret-vcs-guard.md +106 -0
  28. package/dist/agent-src/rules/security-sensitive-stop.md +1 -1
  29. package/dist/agent-src/rules/skill-quality.md +2 -0
  30. package/dist/agent-src/rules/source-confidentiality.md +2 -0
  31. package/dist/agent-src/rules/source-of-truth.md +2 -0
  32. package/dist/agent-src/rules/telegraph-speak.md +2 -0
  33. package/dist/agent-src/rules/token-optimizer-maintenance.md +2 -0
  34. package/dist/agent-src/rules/tool-safety.md +1 -0
  35. package/dist/agent-src/rules/verify-before-complete.md +2 -0
  36. package/dist/agent-src/skills/adr-create/SKILL.md +17 -1
  37. package/dist/agent-src/skills/agent-docs-writing/SKILL.md +34 -16
  38. package/dist/agent-src/skills/agents-md-thin-root/SKILL.md +9 -9
  39. package/dist/agent-src/skills/code-intelligence/SKILL.md +94 -0
  40. package/dist/agent-src/skills/gated-reach/SKILL.md +185 -0
  41. package/dist/agent-src/skills/gated-reach/evals/triggers.json +72 -0
  42. package/dist/agent-src/skills/image-analyser/SKILL.md +14 -12
  43. package/dist/agent-src/skills/image-editing/SKILL.md +1 -0
  44. package/dist/agent-src/skills/readme-writing/SKILL.md +6 -1
  45. package/dist/agent-src/skills/screenshot-hygiene/SKILL.md +171 -0
  46. package/dist/agent-src/skills/secrets-management/SKILL.md +44 -1
  47. package/dist/agent-src/skills/subagent-orchestration/prompts/adversarial-verification-council.md +29 -0
  48. package/dist/agent-src/skills/subagent-orchestration/prompts/do-and-judge-two-stage.md +29 -0
  49. package/dist/agent-src/skills/subagent-orchestration/prompts/do-and-judge.md +29 -0
  50. package/dist/agent-src/skills/subagent-orchestration/prompts/do-competitively.md +29 -0
  51. package/dist/agent-src/skills/subagent-orchestration/prompts/do-in-parallel.md +29 -0
  52. package/dist/agent-src/skills/subagent-orchestration/prompts/do-in-steps.md +29 -0
  53. package/dist/agent-src/skills/subagent-orchestration/prompts/do-in-worktrees.md +29 -0
  54. package/dist/agent-src/skills/subagent-orchestration/prompts/judge-with-debate.md +29 -0
  55. package/dist/agent-src/skills/verify-repair-loop/SKILL.md +4 -0
  56. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  57. package/dist/agent-src/templates/github-workflows/doc-impact.yml +101 -0
  58. package/dist/agent-src/templates/github-workflows/secret-scan.yml +65 -0
  59. package/dist/cli/configRoot.js +112 -0
  60. package/dist/cli/configRoot.js.map +1 -0
  61. package/dist/cli/configRoot.test.js +97 -0
  62. package/dist/cli/configRoot.test.js.map +1 -0
  63. package/dist/cli/help.js +4 -1
  64. package/dist/cli/help.js.map +1 -1
  65. package/dist/cli/main.js +19 -2
  66. package/dist/cli/main.js.map +1 -1
  67. package/dist/cli/registry.js +1 -0
  68. package/dist/cli/registry.js.map +1 -1
  69. package/dist/discovery/deprecation-report.md +1 -1
  70. package/dist/discovery/discovery-manifest.json +164 -47
  71. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  72. package/dist/discovery/discovery-manifest.summary.md +4 -4
  73. package/dist/discovery/orphan-report.md +1 -1
  74. package/dist/discovery/packs.json +13 -8
  75. package/dist/discovery/trust-report.md +11 -11
  76. package/dist/discovery/workspaces.json +11 -6
  77. package/dist/install/install.mjs +16 -0
  78. package/dist/mcp/awesome-mcp-servers.row.md +1 -1
  79. package/dist/mcp/mcp-cloudflare-catalogue.json +1 -1
  80. package/dist/mcp/registry-manifest.json +4 -4
  81. package/dist/router.json +1 -1
  82. package/dist/server/app.js +10 -0
  83. package/dist/server/app.js.map +1 -1
  84. package/dist/server/routes/ping.js +18 -0
  85. package/dist/server/routes/ping.js.map +1 -1
  86. package/dist/server/schemas/settings.js +8 -0
  87. package/dist/server/schemas/settings.js.map +1 -1
  88. package/dist/server/serverInfo.js +6 -2
  89. package/dist/server/serverInfo.js.map +1 -1
  90. package/dist/server/token.js +11 -4
  91. package/dist/server/token.js.map +1 -1
  92. package/dist/server/writeRoot.js +15 -1
  93. package/dist/server/writeRoot.js.map +1 -1
  94. package/dist/shared/capabilities.js +33 -0
  95. package/dist/shared/capabilities.js.map +1 -0
  96. package/dist/shared/capabilities.test.js +39 -0
  97. package/dist/shared/capabilities.test.js.map +1 -0
  98. package/dist/ui/assets/{index-BiEZiZ31.js → index-CrmZ34Rg.js} +16 -16
  99. package/dist/ui/assets/index-CrmZ34Rg.js.map +1 -0
  100. package/dist/ui/index.html +14 -5
  101. package/docs/CLAIMS.md +64 -38
  102. package/docs/architecture.md +2 -2
  103. package/docs/archive/CHANGELOG-6.0.0-overview.md +953 -0
  104. package/docs/benchmark.md +170 -9
  105. package/docs/catalog.md +8 -3
  106. package/docs/comparison.yaml +44 -2
  107. package/docs/contracts/local-server-ports.md +53 -0
  108. package/docs/contracts/no-runtime-boundary.md +1 -1
  109. package/docs/contracts/subagent-boundary.md +15 -0
  110. package/docs/customization.md +14 -3
  111. package/docs/decisions/ADR-016-installer-architecture.md +2 -0
  112. package/docs/decisions/ADR-088-no-external-runtime-federation.md +1 -1
  113. package/docs/decisions/ADR-094-agent-memory-layer-removal.md +1 -1
  114. package/docs/decisions/ADR-109-subagent-v1-contract.md +2 -0
  115. package/docs/decisions/ADR-110-discipline-profile-resolution-locus.md +2 -0
  116. package/docs/decisions/ADR-113-ci-native-release-label-trigger.md +11 -3
  117. package/docs/decisions/ADR-122-adversarial-verification-council.md +30 -0
  118. package/docs/decisions/ADR-123-runtime-security-scope-and-spawn-hardening.md +31 -0
  119. package/docs/decisions/ADR-124-embedded-engine-doctrine.md +255 -0
  120. package/docs/decisions/ADR-125-doc-screenshot-anonymization.md +131 -0
  121. package/docs/decisions/ADR-126-internet-reach-operator-tooling.md +254 -0
  122. package/docs/decisions/ADR-127-enforcement-claims-must-resolve.md +150 -0
  123. package/docs/decisions/ADR-128-executable-evidence-and-measured-escalation.md +201 -0
  124. package/docs/decisions/INDEX.md +21 -0
  125. package/docs/decisions/engine-reclassification-2026-07.md +104 -0
  126. package/docs/distribution/awesome-list-submission.md +1 -1
  127. package/docs/distribution/registries.md +36 -27
  128. package/docs/enforcement-by-host.md +7 -0
  129. package/docs/featured-skills.md +2 -2
  130. package/docs/getting-started-by-role.md +1 -1
  131. package/docs/getting-started.md +1 -1
  132. package/docs/governance-advantage.md +1 -1
  133. package/docs/guides/gated-platform-reads.md +221 -0
  134. package/docs/positioning-evidence.md +1 -1
  135. package/docs/proof.md +92 -16
  136. package/docs/spawn-site-policy.md +72 -0
  137. package/docs/threat-model.md +2 -1
  138. package/package.json +6 -3
  139. package/src/agent-src/README.md +2 -2
  140. package/src/config/agent-settings.template.yml +43 -0
  141. package/src/config/reach-channels.yml +217 -0
  142. package/src/config/reach-prescriptions-intake.yml +200 -0
  143. package/src/scripts/_dispatch.bash +15 -0
  144. package/src/scripts/_lib/adversarial_bench_score.ts +106 -0
  145. package/src/scripts/_lib/exec_evidence.ts +251 -0
  146. package/src/scripts/_lib/fixtures/secret-detector/negatives.txt +10 -0
  147. package/src/scripts/_lib/fixtures/secret-detector/positives.txt +11 -0
  148. package/src/scripts/_lib/kernel_rules.ts +46 -0
  149. package/src/scripts/_lib/reddit_thread_parse.ts +598 -0
  150. package/src/scripts/_lib/risk_paths.ts +160 -0
  151. package/src/scripts/_lib/secret_detector.test.ts +103 -0
  152. package/src/scripts/_lib/secret_detector.ts +319 -0
  153. package/src/scripts/_lib/spawn_env.ts +24 -4
  154. package/src/scripts/_lib/tool_probe.ts +359 -0
  155. package/src/scripts/adr/regenerate_index.ts +81 -6
  156. package/src/scripts/audit_adr_coverage.ts +33 -0
  157. package/src/scripts/bench_adversarial_council.ts +292 -0
  158. package/src/scripts/build_proof.ts +162 -0
  159. package/src/scripts/check_adr_frontmatter.ts +195 -0
  160. package/src/scripts/check_artefact_count_messaging.ts +4 -0
  161. package/src/scripts/check_backstop_debt.ts +200 -0
  162. package/src/scripts/check_claims.ts +188 -8
  163. package/src/scripts/check_comparison.ts +12 -0
  164. package/src/scripts/check_enforcement_coverage.ts +592 -0
  165. package/src/scripts/check_kernel_rule_bundle.ts +16 -12
  166. package/src/scripts/check_no_new_legacy_path.ts +2 -0
  167. package/src/scripts/check_reach_channels.ts +407 -0
  168. package/src/scripts/check_reach_staleness.ts +364 -0
  169. package/src/scripts/check_secret_leak.test.ts +47 -0
  170. package/src/scripts/check_secret_leak.ts +290 -0
  171. package/src/scripts/check_source_pointer_freshness.ts +165 -0
  172. package/src/scripts/code_graph/build.ts +0 -0
  173. package/src/scripts/code_graph/cli.ts +207 -0
  174. package/src/scripts/code_graph/detect.ts +134 -0
  175. package/src/scripts/code_graph/extract.ts +386 -0
  176. package/src/scripts/code_graph/loader.ts +123 -0
  177. package/src/scripts/code_graph/query.ts +176 -0
  178. package/src/scripts/code_graph/sanitize.ts +30 -0
  179. package/src/scripts/code_graph/types.ts +83 -0
  180. package/src/scripts/code_graph/validate.ts +63 -0
  181. package/src/scripts/external_sources_denylist.json +3 -1
  182. package/src/scripts/generate_subagent_floor.ts +194 -0
  183. package/src/scripts/hook_manifest.yaml +13 -3
  184. package/src/scripts/hooks/code_graph_nudge_hook.ts +184 -0
  185. package/src/scripts/hooks/dispatch_hook.ts +5 -1
  186. package/src/scripts/iron_law_sha.ts +3 -12
  187. package/src/scripts/lint_override_kernel_guard.ts +219 -0
  188. package/src/scripts/lint_readme_serial_comma.ts +169 -0
  189. package/src/scripts/measure_rule_budget.ts +3 -12
  190. package/src/scripts/postinstall_gui.ts +129 -0
  191. package/src/scripts/reach_doctor.ts +1651 -0
  192. package/src/scripts/release.ts +24 -3
  193. package/src/scripts/risk_escalation_shadow.ts +160 -0
  194. package/src/scripts/schemas/agent-settings.schema.json +23 -0
  195. package/src/scripts/schemas/reach-channels.schema.json +134 -0
  196. package/src/scripts/schemas/reach-doctor-payload.schema.json +220 -0
  197. package/src/scripts/schemas/rule.schema.json +10 -0
  198. package/src/scripts/skill_linter.ts +55 -0
  199. package/src/scripts/validate_reach_prescriptions.ts +751 -0
  200. package/src/server/schemas/settings.ts +16 -0
  201. package/src/shared/capabilities.test.ts +43 -0
  202. package/src/shared/capabilities.ts +75 -0
  203. package/src/templates/minimal/agents-overrides-readme.md +20 -0
  204. package/dist/ui/assets/index-BiEZiZ31.js.map +0 -1
package/README.md CHANGED
@@ -4,17 +4,17 @@
4
4
 
5
5
  [![Smoke](https://github.com/event4u-app/agent-config/actions/workflows/smoke.yml/badge.svg)](https://github.com/event4u-app/agent-config/actions/workflows/smoke.yml) [![Public install smoke (3 OS × 2 Node)](https://github.com/event4u-app/agent-config/actions/workflows/smoke-public-install.yml/badge.svg)](https://github.com/event4u-app/agent-config/actions/workflows/smoke-public-install.yml) [![npm](https://img.shields.io/npm/v/@event4u/agent-config?style=flat-square&label=npm&color=orange)](https://www.npmjs.com/package/@event4u/agent-config) [![agent-config MCP server](https://glama.ai/mcp/servers/event4u-app/agent-config/badges/score.svg)](https://glama.ai/mcp/servers/event4u-app/agent-config)
6
6
 
7
- [![Skills](https://img.shields.io/badge/Skills-278-orange?style=flat-square)](dist/agent-src/skills/) [![Rules](https://img.shields.io/badge/Rules-105-orange?style=flat-square)](dist/agent-src/rules/) [![Commands](https://img.shields.io/badge/Commands-190-orange?style=flat-square)](dist/agent-src/commands/) [![Guidelines](https://img.shields.io/badge/Guidelines-101-orange?style=flat-square)](docs/guidelines/) [![Personas](https://img.shields.io/badge/Personas-29-orange?style=flat-square)](dist/agent-src/personas/) [![Advisors](https://img.shields.io/badge/Advisors-5-orange?style=flat-square)](dist/agent-src/personas/advisors/)
8
-
9
- > **Choose your experience — developer · founder · content · agency · finance · ops. Add packs. Get a focused command set, not a 500-artefact dump.** Bring your own AI provider.
10
-
11
7
  **Try it in 30 seconds** — drop one read-only subagent into any repo and watch it gate "done": `@production-validator check this branch is actually done`. No wizard, no lock-in, nothing else installed — the [30-second wedge ↓](#quickstart) is the whole first step. Start at the proof, not the catalog: **[event4u-app.github.io/agent-config/proof/](https://event4u-app.github.io/agent-config/proof/)**.
12
8
 
13
9
  ![The trust surface running green — every "verify it yourself" command from a real, CI-re-executed run](docs/media/proof-demo.gif)
14
10
 
15
11
  **Every public claim in this README is machine-checked — [verify it yourself](docs/proof.md).** In a market that runs on unbacked headline numbers, this one binds each claim to resolvable evidence or fails its own build.
16
12
 
17
- **A deep library of skills, commands, and governed rules** — plus a capability router that loads the right skill on intent, and multi-agent orchestration with consensus review. The whole layer is compiled into 7+ host agents (Claude Code, Cursor, Augment, Cline, Windsurf, Copilot, Gemini) with **zero runtime daemon**.<!-- claim:no-runtime-daemon --> Six role-shaped entry paths sit on top, so any host becomes a reliable team member — without locking you to a single model or vendor.
13
+ > **Choose your experience — developer · founder · content · agency · finance · ops. Add packs. Get a focused command set, not a 500-artefact dump.** Bring your own AI provider.
14
+
15
+ [![Skills](https://img.shields.io/badge/Skills-281-orange?style=flat-square)](dist/agent-src/skills/) [![Rules](https://img.shields.io/badge/Rules-107-orange?style=flat-square)](dist/agent-src/rules/) [![Commands](https://img.shields.io/badge/Commands-190-orange?style=flat-square)](dist/agent-src/commands/) [![Guidelines](https://img.shields.io/badge/Guidelines-101-orange?style=flat-square)](docs/guidelines/) [![Personas](https://img.shields.io/badge/Personas-29-orange?style=flat-square)](dist/agent-src/personas/) [![Advisors](https://img.shields.io/badge/Advisors-5-orange?style=flat-square)](dist/agent-src/personas/advisors/)
16
+
17
+ **A deep library of skills, commands and governed rules** — plus a capability router that loads the right skill on intent and multi-agent orchestration with consensus review. The whole layer is compiled into **20 host agents** — of 23 detected, 3 being export-only<!-- claim:host-agent-count --> (Claude Code, Cursor, Augment, Cline, Windsurf, Copilot, Gemini CLI, Codex, Continue, Zed, JetBrains, Aider and more) — with **zero runtime daemon**.<!-- claim:no-runtime-daemon --> Six role-shaped entry paths sit on top, so any host becomes a reliable team member — without locking you to a single model or vendor.
18
18
 
19
19
  ### What's different
20
20
 
@@ -27,13 +27,13 @@ It is both deep **and** disciplined — and honest about what it deliberately is
27
27
 
28
28
  **What it deliberately is *not*** — a content + governance layer, not a runtime: **no background daemon, no separate state database, no self-rewriting memory, no auto-build pipeline.** The host agent runs the loop; every learned change is human-reviewed; the same layer stays portable across tools. Capability without a process to babysit.
29
29
 
30
- > **Where this comes from (honest provenance).** The skills, rules, and personas
30
+ > **Where this comes from (honest provenance).** The skills, rules and personas
31
31
  > are distilled from real production work on TypeScript and PHP codebases. The
32
32
  > governance mechanics are stack-agnostic, but the domain heuristics are richest
33
33
  > where they were forged — treat coverage on other stacks as promising, not
34
- > proven, and tell us where it falls short.
34
+ > proven and tell us where it falls short.
35
35
 
36
- See exactly [what works on which host](docs/capability-matrix.md), or jump to [things you can do in a minute](docs/cookbook.md).
36
+ See exactly [what works on which host](docs/capability-matrix.md) or jump to [things you can do in a minute](docs/cookbook.md).
37
37
 
38
38
  ### Pick your profile — six entry paths
39
39
 
@@ -100,14 +100,14 @@ is platform operation, not a user-work flow.)
100
100
 
101
101
  > **Creative Pack — cinematic AI video.** script → character-locked image → motion+audio prompt → provider render → stitched clip, with `AIV_DRYRUN=true` as the cost-safety default. A first-class capability inside the **content / creator** experience — no longer the package's headline. See [`/video:from-script`](.augment/commands/video/from-script.md).
102
102
 
103
- > **Legal Pack — not legal advice.** The EU/DE legal pack (contract/NDA/DPA review, triage) is a **research-and-drafting aid only** — it does not provide legal advice, does not replace a qualified lawyer, and must not be relied on for any concrete matter. It produces general information and general templates, never individual-case examination. Read [`LEGAL_NOTICE.md`](LEGAL_NOTICE.md) before use.
103
+ > **Legal Pack — not legal advice.** The EU/DE legal pack (contract/NDA/DPA review, triage) is a **research-and-drafting aid only** — it does not provide legal advice, does not replace a qualified lawyer and must not be relied on for any concrete matter. It produces general information and general templates, never individual-case examination. Read [`LEGAL_NOTICE.md`](LEGAL_NOTICE.md) before use.
104
104
 
105
105
  > Full catalog — every skill, rule, command, guideline: [`docs/catalog.md`](docs/catalog.md). The headline is the **experience** (profile + packs) **and** the depth behind it.
106
106
 
107
107
  ## Use it in your project
108
108
 
109
109
  Run from a consumer repo — bootstrap via `npx`, the agent picks up
110
- your stack, and you ship work end-to-end. New install? Start with the
110
+ your stack and you ship work end-to-end. New install? Start with the
111
111
  [Quickstart](#quickstart). Already installed? [Supported tools](#supported-tools)
112
112
  shows the wired AIs; [`docs/featured-commands.md`](docs/featured-commands.md)
113
113
  lists the end-to-end workflows (`/implement-ticket`, `/work`,
@@ -119,8 +119,8 @@ lists the end-to-end workflows (`/implement-ticket`, `/work`,
119
119
 
120
120
  Don't take the claims on trust — **verify them.** [`docs/proof.md`](docs/proof.md)
121
121
  is generated from source: a claim→evidence table (every public claim binds to a
122
- resolvable pointer, or CI fails), honest-null benchmarks *including the runs where
123
- the package changed nothing*, and a "verify it yourself" block you run on a fresh
122
+ resolvable pointer or CI fails), honest-null benchmarks *including the runs where
123
+ the package changed nothing* and a "verify it yourself" block you run on a fresh
124
124
  checkout. The proof page fails CI if it drifts from its sources — reproducibility
125
125
  is the proof. Browse it on the deployed docs site — the proof page is the primary entry:
126
126
  [event4u-app.github.io/agent-config/proof/](https://event4u-app.github.io/agent-config/proof/).
@@ -132,7 +132,7 @@ find-replace re-skin PRs here runs on your catalog too —
132
132
  [`docs/anti-reskin-gate.md`](docs/anti-reskin-gate.md).
133
133
 
134
134
  Audit-disciplined by construction — every memory consult, decision
135
- key, and hook concern lands in `agents/runtime/state/` so you can replay it.
135
+ key and hook concern lands in `agents/runtime/state/` so you can replay it.
136
136
  [Core principles](#core-principles) names the four invariants;
137
137
  [What `agent-config` is — and what it isn't](#what-agent-config-is--and-what-it-isnt)
138
138
  draws the scope boundary.
@@ -207,7 +207,7 @@ Migrating from a v1.x install? `npx @event4u/agent-config migrate` — full note
207
207
 
208
208
  A **content layer** — skills, rules, commands, guidelines, personas — distributed via npm and projected into every supported AI tool's native config format. It follows the [Agent Skills open standard](https://agentskills.io).
209
209
 
210
- It is **not** an agent runtime. The agent loop, the LLM dispatcher, and tool orchestration stay with the host tool (Claude Code, Augment, Cursor, Cline, Windsurf, Gemini CLI, Copilot). Think of it as a playbook and style guide for those tools — not a replacement.
210
+ It is **not** an agent runtime. The agent loop, the LLM dispatcher and tool orchestration stay with the host tool (Claude Code, Augment, Cursor, Cline, Windsurf, Gemini CLI, Copilot). Think of it as a playbook and style guide for those tools — not a replacement.
211
211
 
212
212
  | In scope | Out of scope |
213
213
  |---|---|
@@ -254,7 +254,7 @@ refine → memory → analyze → plan → implement → test → verify → rep
254
254
  - **Reviews** the diff through four judges (bugs, security, tests, code quality).
255
255
  - **Reports** changes, verdicts, follow-ups — then stops. `/commit` and `/pr:create` are suggestions, never auto-run.
256
256
 
257
- Any ambiguity halts the flow with numbered options — never a silent guess. Persona comes from `.agent-settings.yml` (`roles.active_role`): `senior-engineer` (default), `qa`, or `advisory` (plan-only).
257
+ Any ambiguity halts the flow with numbered options — never a silent guess. Persona comes from `.agent-settings.yml` (`roles.active_role`): `senior-engineer` (default), `qa` or `advisory` (plan-only).
258
258
 
259
259
  → [Command reference](dist/agent-src/commands/implement-ticket.md) · [Flow contract](docs/contracts/implement-ticket-flow.md)
260
260
 
@@ -316,7 +316,7 @@ Create the user file interactively: `/agents user init` ([schema](docs/contracts
316
316
 
317
317
  ### Self-hosted MCP on Cloudflare — zero local install
318
318
 
319
- Skills, commands, rules, and guidelines can be served as an MCP endpoint from your own Cloudflare Worker — any MCP client (Claude Desktop, Claude Code, Cursor, Zed, Continue, hosted agents) talks to it over HTTP. Two auth modes: `public` (default, OSS read-only deploys) and `bearer-auth` (operator opt-in, `MCP-Token` Wrangler secret).
319
+ Skills, commands, rules and guidelines can be served as an MCP endpoint from your own Cloudflare Worker — any MCP client (Claude Desktop, Claude Code, Cursor, Zed, Continue, hosted agents) talks to it over HTTP. Two auth modes: `public` (default, OSS read-only deploys) and `bearer-auth` (operator opt-in, `MCP-Token` Wrangler secret).
320
320
 
321
321
  ```bash
322
322
  task mcp:cloud:login # one-time, opens browser
@@ -340,13 +340,13 @@ task mcp:cloud:secret-put # opt in to bearer-auth (recommended for private de
340
340
 
341
341
  The Hard Floor on organization-mode features (SSO, central policy, OAuth connectors, team-context) is preserved by design — they stay cancelled until a real first customer + funded security audit lifts them. The small-team recipe is the supported path in the meantime.
342
342
 
343
- > *The 9.3/10 feedback round (2026-05-25) re-asked for OAuth knowledge connectors, IAM / org governance, and organization-shared memory. Each is a stable cancellation row in [`team-deployment-posture`](docs/deploy/team-deployment-posture.md) under the same three release gates — recruited team customer · funded audit · maintainer ADR.*
343
+ > *The 9.3/10 feedback round (2026-05-25) re-asked for OAuth knowledge connectors, IAM / org governance and organization-shared memory. Each is a stable cancellation row in [`team-deployment-posture`](docs/deploy/team-deployment-posture.md) under the same three release gates — recruited team customer · funded audit · maintainer ADR.*
344
344
 
345
345
  ---
346
346
 
347
347
  ## Harness expectations
348
348
 
349
- Three classes of install/runtime behaviour look like package bugs but are host-harness behaviour the package cannot control — sibling-plugin namespaces (`codex:*`, `cc-gemini-plugin:*`), deferred tools surfaced via `ToolSearch`, and cross-scope skill drift (real bug, fixed in the distribution-channels track). Diagnostics + the package's response: [`docs/contracts/harness-expectations.md`](docs/contracts/harness-expectations.md). First step when a skill appears twice: `task probe:skills`.
349
+ Three classes of install/runtime behaviour look like package bugs but are host-harness behaviour the package cannot control — sibling-plugin namespaces (`codex:*`, `cc-gemini-plugin:*`), deferred tools surfaced via `ToolSearch` and cross-scope skill drift (real bug, fixed in the distribution-channels track). Diagnostics + the package's response: [`docs/contracts/harness-expectations.md`](docs/contracts/harness-expectations.md). First step when a skill appears twice: `task probe:skills`.
350
350
 
351
351
  ## Supported tools
352
352
 
@@ -477,7 +477,7 @@ Browse content: [all commands](dist/agent-src/commands/) · [skills catalog](doc
477
477
  ## Troubleshooting
478
478
 
479
479
  First stop for any install problem: `agent-config doctor` — it flags a
480
- missing-from-`PATH` binary, binary↔plugin version drift, stale orphans, and
480
+ missing-from-`PATH` binary, binary↔plugin version drift, stale orphans and
481
481
  manifest issues, each with a one-line fix hint.
482
482
 
483
483
  ### A new command / skill is missing in Claude Code after an upgrade
@@ -486,7 +486,7 @@ Under the single-surface model, `agent-config upgrade` refreshes the
486
486
  `~/.claude/` file projection — that IS the content surface, so a fresh
487
487
  session picks the new commands up directly. If commands are still missing,
488
488
  the usual cause is a leftover **marketplace plugin**: it is a git-SHA
489
- snapshot that never moves with the npm upgrade, and it shadows nothing —
489
+ snapshot that never moves with the npm upgrade and it shadows nothing —
490
490
  it just lists everything twice while lagging behind. Remove it:
491
491
 
492
492
  ```bash
@@ -521,7 +521,7 @@ Only the initial `npm install -g` hard-aborts an upgrade. Every later step
521
521
  (global re-deploy with hook registration, settings sync, wrapper + git-hook
522
522
  refresh) runs independently — a single failed step is reported in the
523
523
  end-of-run summary instead of silently skipping the rest. Re-run
524
- `agent-config upgrade` to converge, and use `agent-config doctor` to name
524
+ `agent-config upgrade` to converge and use `agent-config doctor` to name
525
525
  anything left in a mixed state.
526
526
 
527
527
  ### `agent-config: command not found` / hooks stopped firing
@@ -1,8 +1,8 @@
1
1
  # Agent Infrastructure
2
2
 
3
3
  > **⚠️ DO NOT edit files in `dist/agent-src/` or `.augment/` directly.**
4
- > The source of truth is `.agent-src.uncondensed/`. Edit there, then run `task sync`.
5
- > See `.agent-src.uncondensed/commands/condense.md` for the full workflow.
4
+ > The source of truth is `src/` (`src/skills/`, `src/rules/`, `src/agent-src/`). Edit there, then run `task sync`.
5
+ > See the `source-of-truth` rule and the `/condense` command for the full workflow.
6
6
 
7
7
  This directory contains the shared agent infrastructure: skills, commands, rules, guidelines,
8
8
  templates, and contexts that power the AI coding assistant across all projects.
@@ -70,6 +70,14 @@ Splitting rules:
70
70
 
71
71
  Generate commit messages per [`commit-conventions`](../../rules/commit-conventions.md).
72
72
 
73
+ ### 3b. Secret-leak pre-flight — MANDATORY, not autonomy-lifted
74
+
75
+ Run `./scripts-run src/scripts/check_secret_leak`. A high-confidence hit is a
76
+ safety surface: **STOP even under this autonomous flow** (autonomy never lifts
77
+ it), hand to [`secret-vcs-guard`](../../rules/secret-vcs-guard.md) — show the
78
+ match, ask, offer the alternative. Never auto-commit a secret; never silently
79
+ strip one.
80
+
73
81
  ### 4. Validate, then commit immediately
74
82
 
75
83
  Before staging anything, run the same `preview-on-error` validator as
@@ -79,6 +79,23 @@ If there are no uncommitted changes (staged or unstaged), report "Nothing to com
79
79
  - Are purely stylistic/formatting changes (separate from logic changes)
80
80
  - Are unrelated to the main change (e.g. config fix, unrelated typo)
81
81
 
82
+ ### 3b. Secret-leak pre-flight
83
+
84
+ Before planning any commit, scan the changed set for credentials:
85
+
86
+ ```
87
+ ./scripts-run src/scripts/check_secret_leak
88
+ ```
89
+
90
+ If it exits non-zero (a high-confidence secret in the diff or an untracked file),
91
+ **STOP** — do not stage or commit. Hand control to the
92
+ `.augment/rules/secret-vcs-guard.md` rule: show the match, ask via numbered
93
+ options, and offer the tiered alternative (see
94
+ `.augment/skills/secrets-management/SKILL.md`). Only proceed
95
+ once the user resolves it (move to a store, or add an audited
96
+ `# secret-allow` / `.secret-allow` entry for a confirmed false positive). Never
97
+ silently commit a secret; never silently strip one.
98
+
82
99
  ### 4. Plan the commits
83
100
 
84
101
  For each logical group, determine the commit message following the commit conventions rule
@@ -53,6 +53,10 @@ Uses `/create-pr:description-only` to generate the PR content, then creates the
53
53
  - Verify the current branch is NOT the default branch (`main` / `master`).
54
54
  - Run `git status` — warn if there are uncommitted changes.
55
55
  - Run `git log origin/{default}..HEAD --oneline` to verify there are commits to push.
56
+ - **Secret-leak pre-flight (MANDATORY before push):** run
57
+ `./scripts-run src/scripts/check_secret_leak`. On a high-confidence hit, STOP —
58
+ do not push; hand to `.augment/rules/secret-vcs-guard.md` (show, ask, offer the
59
+ alternative, rotate-first if already in history). Pushing publishes the secret.
56
60
  - If the branch has not been pushed yet, ask the user (in their language) whether to push.
57
61
 
58
62
  ### 1b. Freshness gate — MANDATORY before opening any PR
@@ -19,12 +19,58 @@ When an agent loads any skill, rule, command, guideline, or template:
19
19
  ```
20
20
  1. Load original from .augment/{type}/{name}
21
21
  2. Check agents/overrides/{type}/{name} exists?
22
- ├── YES → Read Mode header
23
- │ ├── extend → Apply original FIRST, then layer override on top
24
- │ └── replace → Skip original entirely, use override only
22
+ ├── YES → Is the target a KERNEL or safety-floor rule?
23
+ │ ├── YES → replace → REFUSE. Report it. Keep the original.
24
+ │ │ extend → allowed ONLY with a registered exception (below)
25
+ │ └── NO → Read Mode header
26
+ │ ├── extend → Apply original FIRST, then layer override on top
27
+ │ └── replace → Skip original entirely, use override only
25
28
  └── NO → Use original unchanged
26
29
  ```
27
30
 
31
+ ## The non-overridable class
32
+
33
+ ```
34
+ A KERNEL OR SAFETY-FLOOR RULE MAY BE TIGHTENED, NEVER REPLACED OR RELAXED.
35
+ A `replace`-MODE OVERRIDE ON ONE IS REFUSED AND REPORTED — NEVER SILENTLY APPLIED.
36
+ AN `extend` ON ONE REQUIRES A REGISTERED, JUSTIFIED EXCEPTION.
37
+ ```
38
+
39
+ The nine kernel rules — `agent-authority`, `ask-when-uncertain`, `commit-policy`,
40
+ `direct-answers`, `language-and-tone`, `no-cheap-questions`,
41
+ `non-destructive-by-default`, `scope-control`, `verify-before-complete` — plus
42
+ anything carrying `tier: safety-floor`, are not replaceable. Dropping an empty
43
+ file at `agents/overrides/rules/non-destructive-by-default.md` must not remove
44
+ the Hard Floor.
45
+
46
+ **Why not a blanket ban.** Legitimate tightening exists, and this package does
47
+ it: its own `verify-before-complete` override adds a mandatory-Playwright clause
48
+ for UI changes. Banning the name would forbid a change that makes the floor
49
+ *stronger*. So direction matters, not identity — and since no linter can prove
50
+ "relaxes" versus "legitimately narrows" from prose, `extend` is the machine-
51
+ checkable proxy for tightening and the registry carries the human judgement.
52
+
53
+ **The exception registry.** An `extend` override on a kernel or safety-floor rule
54
+ requires an entry in `agents/overrides/kernel-exceptions.yml`:
55
+
56
+ ```yaml
57
+ exceptions:
58
+ - rule: verify-before-complete
59
+ mode: extend
60
+ justification: "Ships a browser UI; code-only tests cannot prove what renders."
61
+ approved_by: maintainer
62
+ ```
63
+
64
+ **Honest limit — read this before trusting the class.** This is a norm with a
65
+ partial gate, and saying so is the point. The override layer is resolved by the
66
+ *agent reading these instructions*, not by a loader, so an `extend` block that
67
+ says "ignore everything above" is not mechanically detectable — and nothing here
68
+ stops a consumer relaxing a rule through another channel (a persona file,
69
+ host-level config, a direct instruction). What the gate does cover is this
70
+ package's own authoring surface: a `replace`-mode kernel override, or an
71
+ unregistered kernel exception, fails deterministically. Everything else is
72
+ reported, not claimed as enforced.
73
+
28
74
  ## Directory Mapping
29
75
 
30
76
  ```
@@ -93,7 +139,9 @@ The original is loaded first. The override adds, modifies, or removes specific p
93
139
 
94
140
  ## Mode: replace
95
141
 
96
- The original is completely ignored. The override is the sole source of truth.
142
+ The original is completely ignored. The override is the sole source of truth —
143
+ **except for kernel and safety-floor rules, where `replace` is refused outright**
144
+ (see "The non-overridable class" above).
97
145
 
98
146
  **Use when:**
99
147
  - The shared skill/rule fundamentally doesn't fit the project
@@ -101,6 +149,24 @@ The original is completely ignored. The override is the sole source of truth.
101
149
 
102
150
  **Best practice:** Must be self-contained and complete. No references to the original.
103
151
 
152
+ **Note the update cost.** A whole-file replacement freezes that file at the
153
+ version you forked it from: later fixes to the original — including security
154
+ fixes — stop reaching you, silently, because your copy wins on name match
155
+ forever. Prefer `extend`, which keeps the rest of the original in the update
156
+ flow. This is the same silent-drift failure the deploy-tiering discussion names.
157
+
158
+ ## Citation obligation
159
+
160
+ Every override carries, directly under its Mode header, one line naming what it
161
+ overrides and why:
162
+
163
+ ```markdown
164
+ > Overrides: verify-before-complete §Turn-completion — ships a browser UI; code-only tests cannot prove what renders.
165
+ ```
166
+
167
+ Without it the layer is usable but not auditable: a reviewer six months later
168
+ cannot tell an intentional narrowing from an accident. No reason, no override.
169
+
104
170
  ## Agent Behavior
105
171
 
106
172
  Agents **must** check for overrides before applying any shared resource:
@@ -111,6 +177,10 @@ Agents **must** check for overrides before applying any shared resource:
111
177
  4. Before reading a guideline → check `agents/overrides/guidelines/{lang}-{name}.md`
112
178
  5. Before using a template → check `agents/overrides/templates/{name}.md`
113
179
 
180
+ **Before honouring an override on a rule, check the non-overridable class
181
+ first.** A `replace` on a kernel or safety-floor rule is refused and reported to
182
+ the user — it is never silently dropped and never silently applied.
183
+
114
184
  ## When to Create vs. When to Fix
115
185
 
116
186
  | Situation | Action |
@@ -155,7 +225,7 @@ When a project using this package wants to **optimize** a shared rule or skill:
155
225
 
156
226
  ### Anti-patterns
157
227
 
158
- - Keeping the override after upstream merge → → drift
228
+ - Keeping the override after upstream merge → causes drift
159
229
  - Submitting only the condensed version → breaks source-of-truth workflow
160
230
  - Submitting project-specific behavior as universal improvement
161
231
  - Forgetting to create the PR → improvement stays siloed
@@ -12,6 +12,8 @@ routes_to:
12
12
  - "guideline:agent-infra/context-hygiene-mechanics"
13
13
  workspaces: [agent-config-maintainer, construction, engineering, finance, founder, gtm, legal-review-prep, ops, product, small-business]
14
14
  packs: [meta]
15
+ enforced_by:
16
+ - "hook:context-hygiene"
15
17
  ---
16
18
 
17
19
  # Context Hygiene
@@ -0,0 +1,97 @@
1
+ ---
2
+ type: "auto"
3
+ tier: "2a"
4
+ description: "Screenshots for docs — anonymize sensitive data before shipping; data-bearing shots are human-gated (published egress); terminal/CLI/IDE screenshots forbidden"
5
+ triggers:
6
+ - keyword: "screenshot"
7
+ - keyword: "screenshots"
8
+ - keyword: "screen capture"
9
+ - keyword: "screen grab"
10
+ - keyword: "admin panel screenshot"
11
+ - keyword: "dashboard screenshot"
12
+ - keyword: "docs site"
13
+ - keyword: "Starlight"
14
+ - phrase: "add a screenshot"
15
+ - phrase: "screenshot for the docs"
16
+ - phrase: "screenshot in the readme"
17
+ - phrase: "embed an image in the docs"
18
+ - phrase: "put a screenshot"
19
+ - phrase: "generate a docs site"
20
+ - phrase: "capture the ui"
21
+ - path_prefix: "docs/media/"
22
+ routes_to:
23
+ - "skill:screenshot-hygiene"
24
+ applies_to_user_types:
25
+ - "all"
26
+ workspaces: [agent-config-maintainer, construction, engineering, finance, founder, gtm, legal-review-prep, ops, product, small-business]
27
+ packs: [meta]
28
+ ---
29
+
30
+ # Doc-Screenshot Hygiene
31
+
32
+ Agents may create screenshots for documentation when genuinely useful (a docs
33
+ site, feature docs, a README visual) and embed them. But a screenshot is an
34
+ opaque artifact that can carry **real PII, secrets, or revealing local paths**
35
+ straight into shipped, hosted, committed docs — an irreversible published egress.
36
+ This rule governs the anonymization discipline before any screenshot ships. Full
37
+ workflow: [`screenshot-hygiene`](../skills/screenshot-hygiene/SKILL.md).
38
+
39
+ ## The Iron Law
40
+
41
+ ```
42
+ A SHIPPED SCREENSHOT WITH UNREDACTED SENSITIVE DATA IS AN
43
+ IRREVERSIBLE PUBLISHED EGRESS. NEVER SHIP ONE.
44
+ ANONYMIZE BEFORE IT SHIPS — REAL NAMES, ADDRESSES, BIRTHDATES, TOKENS,
45
+ SECRETS, REAL EMAILS, IDENTITY-REVEALING LOCAL PATHS.
46
+ DETECTION IS A HELPER, NEVER A CLEARANCE. THE GATE IS HUMAN CONFIRMATION.
47
+ A DATA-BEARING SCREENSHOT EMBED IS GATED PER non-destructive-by-default
48
+ (THIS-TURN CONFIRMATION). TERMINAL / CLI / IDE SCREENSHOTS ARE FORBIDDEN.
49
+ WHEN UNCERTAIN → REDACT OR REFUSE. NEVER SHIP-AND-HOPE.
50
+ ```
51
+
52
+ ## The anonymization taxonomy
53
+
54
+ **Always redact / refuse (sensitive):** real person's name, postal address,
55
+ birthdate, phone; passwords, API tokens, secrets, cookies, bearer tokens,
56
+ private keys; real email addresses (anything not `@example.{com,org,net}` / a
57
+ fake-data domain); absolute local paths revealing a real identity
58
+ (`/Users/<realname>/…`); client / customer / project identifiers; internal
59
+ hostnames (`*.internal`); anything GDPR-sensitive; aggregate counts or data
60
+ tells that reveal real users.
61
+
62
+ **Allowed (no redaction):** well-known fake data (Max Mustermann, Musterstraße,
63
+ `@example.com`); the maintainer's OWN public handle shown as a username (e.g.
64
+ a handle in an admin panel — it is already public), and a path rooted at that
65
+ public handle. The maintainer's **real name is never allowed**, even co-located
66
+ with the handle. The safe set is `screenshots.identity_allowlist` (default
67
+ empty → every identity is human-decided).
68
+
69
+ ## Risk tiers — symmetric friction
70
+
71
+ - **Illustrative / no data** (architecture diagrams, logos, icons, wireframes,
72
+ placeholder-only UI): embed with a one-line justification. Low friction.
73
+ - **Data-bearing** (dashboards, admin panels, forms/lists with content, anything
74
+ showing real-looking data): run the hygiene workflow, then **this-turn human
75
+ confirmation before embed** (per [`non-destructive-by-default`](non-destructive-by-default.md)).
76
+ - **Terminal / CLI / IDE output**: **forbidden** as screenshots (highest leak
77
+ vector — absolute paths, env tokens). Use a text code block with text
78
+ redaction. Set `screenshots.forbid_terminal_capture` (default `true`).
79
+
80
+ ## When it fires — and when NOT
81
+
82
+ **Fires** when creating/embedding a screenshot into documentation (docs site,
83
+ README, feature docs) or when a screenshot lands under `docs/media/`.
84
+
85
+ **Does NOT fire** on: image *generation* (see `media-governance-routing`,
86
+ `image-likeness-and-rights`); a user-supplied screenshot used only as a design
87
+ spec to compare against (see `design-fidelity`, `cross-source-consistency`);
88
+ non-doc surfaces.
89
+
90
+ ## See also
91
+
92
+ - [`screenshot-hygiene`](../skills/screenshot-hygiene/SKILL.md) — the decide → capture → detect → redact → audit → embed workflow + the human-gate checklist.
93
+ - [`non-destructive-by-default`](non-destructive-by-default.md) — the published-egress Hard Floor a data-bearing embed routes into.
94
+ - [`domain-safety-pii`](domain-safety-pii.md) — the sibling PII rule for text surfaces (drafts / logs / exports); screenshots are the visual surface.
95
+ - [`lethal-trifecta-guard`](lethal-trifecta-guard.md) — a screenshot is the private-data + egress legs; the human gate is the egress control.
96
+ - [`readme-writing`](../skills/readme-writing/SKILL.md) — flags unrequested data-bearing screenshots.
97
+ - [`image-analyser`](../skills/image-analyser/SKILL.md), [`image-editing`](../skills/image-editing/SKILL.md) — the OCR-detect / region-redact helpers.
@@ -164,3 +164,4 @@ PreToolUse hook — see `agents/settings/contexts/legal-privilege-probe.md`.
164
164
  - `skill:logging-monitoring`, `skill:secrets-management` — technical surfaces.
165
165
  - `domain-safety-disclaimer` — companion advisory rule.
166
166
  - `domain-safety-retention` — companion retention rule.
167
+ - `doc-screenshot-hygiene` — the visual sibling: PII inside a **screenshot** shipped into docs (this rule covers text drafts / logs / exports, not images).
@@ -45,7 +45,36 @@ After editing any file, search for **all** of these:
45
45
  | **Config / bindings** | Search service providers, config files | Update class references in DI bindings |
46
46
  | **API schemas / OpenAPI** | Check controller attributes | Update if response structure changed |
47
47
  | **Routes** | Search `routes/` for controller references | Update after controller rename/move |
48
- | **Documentation** | Search `agents/`, `docs/` for references | Update if behavior or API changed |
48
+ | **Documentation** | Search `agents/`, `docs/`, `README`, examples for references | Update the doc that **describes** the changed surface — see Doc-Impact below |
49
+
50
+ ## Doc-Impact — docs follow code (same change)
51
+
52
+ ```
53
+ A CHANGE TO A PUBLIC SURFACE IS INCOMPLETE UNTIL THE DOC THAT
54
+ DESCRIBES IT IS UPDATED IN THE SAME CHANGE. A DOC MAKING A CLAIM
55
+ THE CODE NOW CONTRADICTS IS A BROKEN CHANGE, NOT A STYLE NIT.
56
+ ```
57
+
58
+ **Public surfaces** whose change triggers a doc update: HTTP route /
59
+ endpoint · exported function / class signature · CLI command or flag ·
60
+ config / settings key · env var · DB schema or migration · event
61
+ payload. Update the doc that describes it — README, API / OpenAPI docs,
62
+ AGENTS.md, code examples, CHANGELOG — in the same commit.
63
+
64
+ **Drift = a falsifiable-claim contradiction**, not incompleteness. Fire
65
+ when a reader following the doc would be misled: an endpoint that no
66
+ longer exists, a wrong return type, a renamed key, a broken example. Do
67
+ **not** fire on "the doc could be more detailed" — completeness is a
68
+ quality nit, not drift.
69
+
70
+ **Escape hatch** (no false-positive fatigue): refactor-only / no
71
+ public-surface change → no doc obligation. If a surface changed but
72
+ genuinely needs no doc edit, state the one-line reason instead of
73
+ editing a doc to satisfy the rule.
74
+
75
+ Detection + the framework-agnostic surface→doc map (Laravel / Symfony /
76
+ Next.js / Python / Go) live in [`agent-docs-writing`](../skills/agent-docs-writing/SKILL.md)
77
+ § Doc-Impact — run it after every code change.
49
78
 
50
79
  ## Breaking changes
51
80
 
@@ -78,3 +107,4 @@ After completing all downstream changes:
78
107
  3. **No broken types / signatures** — project's type-checker (PHPStan / Psalm, TypeScript, mypy / pyright, `go vet`, `cargo check`).
79
108
  4. **No stale references** — grep for the old name / namespace / import path to confirm zero results.
80
109
  5. **No own-orphans** — the same sweep applied to the new diff: identifiers whose last reference disappeared in a file this diff touched are removed in the same diff (see [`minimal-safe-diff § Own-orphan cleanup`](minimal-safe-diff.md#own-orphan-cleanup)); pre-existing dead code stays.
110
+ 6. **No doc drift** — a public surface changed this diff has its describing doc updated (or the one-line no-doc-needed reason stated), per Doc-Impact above.
@@ -23,15 +23,20 @@ packs: [meta]
23
23
  Some repos commit a pre-built code-intelligence index — a `graph.json`-shaped
24
24
  artifact or a SCIP index (`index.scip`, `*.scip`). When one exists, it already
25
25
  answers "who calls X", "where is Y used", "what does this import" far more
26
- precisely than a fresh `grep`. This suite is an **orchestrator, not a
27
- competitor**: query the existing index first.
26
+ precisely than a fresh `grep`. This suite is an **orchestrator first, owner
27
+ where it wins** (ADR-124): query a consumer-shipped index when it is present
28
+ and fresh; where none is shipped or ours is measurably better, the suite's own
29
+ native code-graph engine (default-off, benchmark-gated) covers the gap. Either
30
+ way — query first, grep as fallback, and name which source answered.
28
31
 
29
32
  ## The rule
30
33
 
31
34
  ```
32
35
  REPO SHIPS A CODE-GRAPH INDEX (graph.json-shaped OR a SCIP index)
33
36
  → QUERY IT FIRST FOR CODEBASE-STRUCTURE QUESTIONS. GREP IS THE FALLBACK,
34
- NOT THE FIRST MOVE. NEVER REBUILD WHAT THE INDEX ALREADY ANSWERS.
37
+ NOT THE FIRST MOVE. NEVER REBUILD A FRESH CONSUMER-SHIPPED INDEX.
38
+ NO FRESH INDEX SHIPPED → THE NATIVE ENGINE MAY BUILD ONE (ADR-124); STILL
39
+ GREP-FALLBACK FOR WHAT THE GRAPH DOES NOT ANSWER, AND SAY WHICH SOURCE ANSWERED.
35
40
  ```
36
41
 
37
42
  ## When it fires
@@ -58,6 +63,11 @@ AND the repo contains a detectable index:
58
63
 
59
64
  ## See also
60
65
 
66
+ - [`code-intelligence`](../skills/code-intelligence/SKILL.md) — the executable
67
+ routing skill: `code_graph detect|query|affected|path` over the native engine
68
+ or a consumer-shipped index, grep as the stated fallback. On hook-capable
69
+ hosts the PreToolUse `code-graph` nudge surfaces this once per session; on
70
+ instruction-file hosts this rule is the surface.
61
71
  - [`discovery_graph`](../scripts/discovery_graph.ts) — this suite's OWN artefact
62
72
  relation-graph (`affected`/`explain`); the external code-graph is the
63
73
  *source-code* analogue this rule defers to for code questions.
@@ -32,6 +32,8 @@ routes_to:
32
32
  - "guideline:agent-infra/framework-neutrality-patterns"
33
33
  workspaces: [agent-config-maintainer]
34
34
  packs: [meta]
35
+ enforced_by:
36
+ - "validator:src/scripts/lint_framework_leakage.ts"
35
37
  ---
36
38
 
37
39
  # framework-neutrality-in-generic-skills
@@ -28,6 +28,8 @@ routes_to:
28
28
  - "skill:git-workflow"
29
29
  workspaces: [engineering]
30
30
  packs: [engineering-base]
31
+ enforced_by:
32
+ - "hook:block-no-verify"
31
33
  ---
32
34
 
33
35
  # Git History Discipline
@@ -9,6 +9,8 @@ validator_ignore:
9
9
  reason: "Rule scopes the .md-English mandate to the authoring tree."
10
10
  workspaces: [agent-config-maintainer, construction, engineering, finance, founder, gtm, legal-review-prep, ops, product, small-business]
11
11
  packs: [meta]
12
+ enforced_by:
13
+ - "validator:src/scripts/check_md_language.ts"
12
14
  ---
13
15
 
14
16
  # Language and Tone
@@ -14,6 +14,8 @@ triggers:
14
14
  - phrase: "read the file and post"
15
15
  workspaces: [engineering]
16
16
  packs: [engineering-base]
17
+ enforced_by:
18
+ - "validator:src/scripts/lint_skill_frontmatter_safety.ts"
17
19
  ---
18
20
 
19
21
  # Lethal-Trifecta Guard
@@ -84,3 +86,4 @@ backstop.
84
86
  - [`non-destructive-by-default`](non-destructive-by-default.md) — the human-in-the-loop egress floor.
85
87
  - [`threat-modeling`](../skills/threat-modeling/SKILL.md) — abuse-case enumeration.
86
88
  - [`domain-safety-pii`](domain-safety-pii.md) § Surface 4 — legal privilege markers extend this egress gate (legal pack); a privileged document on an outbound path is blocked pending explicit confirmation.
89
+ - [`doc-screenshot-hygiene`](doc-screenshot-hygiene.md) — a screenshot embedded into shipped docs is private-data + egress on one path; the human gate on a data-bearing embed is the egress control.
@@ -28,6 +28,8 @@ validator_ignore:
28
28
  reason: "Rule contrasts project-local placement with the .agent-src.uncondensed/rules/ alternative — mentioning the path is the argument."
29
29
  workspaces: [agent-config-maintainer, engineering, gtm]
30
30
  packs: [ai-image, ai-video]
31
+ enforced_by:
32
+ - "validator:src/scripts/lint_media_policy_linkage.ts"
31
33
  ---
32
34
 
33
35
  # Media Governance Routing
@@ -13,6 +13,8 @@ routes_to:
13
13
  - "guideline:agent-infra/minimal-safe-diff-mechanics"
14
14
  workspaces: [engineering]
15
15
  packs: [engineering-base]
16
+ enforced_by:
17
+ - "hook:minimal-safe-diff"
16
18
  ---
17
19
 
18
20
  # Minimal Safe Diff
@@ -19,6 +19,9 @@ validator_ignore:
19
19
  reason: "Rule contrasts the authoring tree with transient layers."
20
20
  workspaces: [agent-config-maintainer]
21
21
  packs: [meta]
22
+ enforced_by:
23
+ - "validator:src/scripts/check_no_roadmap_refs.ts"
24
+ - "validator:src/scripts/check_council_references.ts"
22
25
  ---
23
26
 
24
27
  # No Transient References from Stable Artifacts
@@ -7,6 +7,8 @@ load_context:
7
7
  - ../contexts/authority/destructive-mechanics.md
8
8
  workspaces: [engineering]
9
9
  packs: [engineering-base]
10
+ enforced_by:
11
+ - "none"
10
12
  ---
11
13
 
12
14
  # Non-Destructive by Default
@@ -57,3 +59,21 @@ Applies on every surface — web, Skills API, any cloud agent. No "cloud overrid
57
59
  ## See also
58
60
 
59
61
  [`autonomous-execution`](autonomous-execution.md) · [`commit-policy`](commit-policy.md) · [`scope-control`](scope-control.md) · [`user-interaction`](user-interaction.md).
62
+
63
+ ## Enforcement — stated honestly (`enforced_by: none`)
64
+
65
+ This floor has **no mechanical backstop**, and pretending otherwise would be the
66
+ failure it exists to prevent. No script can enforce "ask before you deploy" — the
67
+ obligation is to pause and surface, and the only thing that observes it is the
68
+ human in the loop. Adjacent hooks (`block-no-verify`) guard hook-bypass, not
69
+ destructive intent; claiming them here would inflate coverage, so they are not
70
+ claimed.
71
+
72
+ So this rule is load-bearing **and** unenforced. It is carried by the model
73
+ honouring it — which is why it is a kernel rule, why it is short, and why it is
74
+ counted as uncovered in the enforcement-coverage report rather than excluded
75
+ from it.
76
+
77
+ ## See also
78
+
79
+ [`autonomous-execution`](autonomous-execution.md) · [`commit-policy`](commit-policy.md) · [`scope-control`](scope-control.md) · [`user-interaction`](user-interaction.md).