@event4u/agent-config 9.7.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 (185) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +144 -0
  3. package/README.md +5 -5
  4. package/dist/agent-src/commands/commit/in-chunks.md +8 -0
  5. package/dist/agent-src/commands/commit.md +17 -0
  6. package/dist/agent-src/commands/pr/create.md +4 -0
  7. package/dist/agent-src/contexts/override-system.md +75 -5
  8. package/dist/agent-src/rules/context-hygiene.md +2 -0
  9. package/dist/agent-src/rules/doc-screenshot-hygiene.md +97 -0
  10. package/dist/agent-src/rules/domain-safety-pii.md +1 -0
  11. package/dist/agent-src/rules/external-code-graph-interop.md +13 -3
  12. package/dist/agent-src/rules/framework-neutrality-in-generic-skills.md +2 -0
  13. package/dist/agent-src/rules/git-history-discipline.md +2 -0
  14. package/dist/agent-src/rules/language-and-tone.md +2 -0
  15. package/dist/agent-src/rules/lethal-trifecta-guard.md +3 -0
  16. package/dist/agent-src/rules/media-governance-routing.md +2 -0
  17. package/dist/agent-src/rules/minimal-safe-diff.md +2 -0
  18. package/dist/agent-src/rules/no-roadmap-references.md +3 -0
  19. package/dist/agent-src/rules/non-destructive-by-default.md +20 -0
  20. package/dist/agent-src/rules/onboarding-gate.md +2 -0
  21. package/dist/agent-src/rules/output-discipline.md +2 -0
  22. package/dist/agent-src/rules/persona-governance.md +2 -0
  23. package/dist/agent-src/rules/preservation-guard.md +3 -0
  24. package/dist/agent-src/rules/roadmap-progress-sync.md +2 -0
  25. package/dist/agent-src/rules/secret-vcs-guard.md +106 -0
  26. package/dist/agent-src/rules/security-sensitive-stop.md +1 -1
  27. package/dist/agent-src/rules/skill-quality.md +2 -0
  28. package/dist/agent-src/rules/source-confidentiality.md +2 -0
  29. package/dist/agent-src/rules/source-of-truth.md +2 -0
  30. package/dist/agent-src/rules/telegraph-speak.md +2 -0
  31. package/dist/agent-src/rules/token-optimizer-maintenance.md +2 -0
  32. package/dist/agent-src/rules/tool-safety.md +1 -0
  33. package/dist/agent-src/rules/verify-before-complete.md +2 -0
  34. package/dist/agent-src/skills/adr-create/SKILL.md +17 -1
  35. package/dist/agent-src/skills/code-intelligence/SKILL.md +94 -0
  36. package/dist/agent-src/skills/gated-reach/SKILL.md +185 -0
  37. package/dist/agent-src/skills/gated-reach/evals/triggers.json +72 -0
  38. package/dist/agent-src/skills/image-analyser/SKILL.md +14 -12
  39. package/dist/agent-src/skills/image-editing/SKILL.md +1 -0
  40. package/dist/agent-src/skills/readme-writing/SKILL.md +6 -1
  41. package/dist/agent-src/skills/screenshot-hygiene/SKILL.md +171 -0
  42. package/dist/agent-src/skills/secrets-management/SKILL.md +44 -1
  43. package/dist/agent-src/skills/subagent-orchestration/prompts/adversarial-verification-council.md +29 -0
  44. package/dist/agent-src/skills/subagent-orchestration/prompts/do-and-judge-two-stage.md +29 -0
  45. package/dist/agent-src/skills/subagent-orchestration/prompts/do-and-judge.md +29 -0
  46. package/dist/agent-src/skills/subagent-orchestration/prompts/do-competitively.md +29 -0
  47. package/dist/agent-src/skills/subagent-orchestration/prompts/do-in-parallel.md +29 -0
  48. package/dist/agent-src/skills/subagent-orchestration/prompts/do-in-steps.md +29 -0
  49. package/dist/agent-src/skills/subagent-orchestration/prompts/do-in-worktrees.md +29 -0
  50. package/dist/agent-src/skills/subagent-orchestration/prompts/judge-with-debate.md +29 -0
  51. package/dist/agent-src/skills/verify-repair-loop/SKILL.md +4 -0
  52. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  53. package/dist/agent-src/templates/github-workflows/secret-scan.yml +65 -0
  54. package/dist/cli/configRoot.js +112 -0
  55. package/dist/cli/configRoot.js.map +1 -0
  56. package/dist/cli/configRoot.test.js +97 -0
  57. package/dist/cli/configRoot.test.js.map +1 -0
  58. package/dist/cli/help.js +4 -1
  59. package/dist/cli/help.js.map +1 -1
  60. package/dist/cli/main.js +19 -2
  61. package/dist/cli/main.js.map +1 -1
  62. package/dist/cli/registry.js +1 -0
  63. package/dist/cli/registry.js.map +1 -1
  64. package/dist/discovery/deprecation-report.md +1 -1
  65. package/dist/discovery/discovery-manifest.json +161 -44
  66. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  67. package/dist/discovery/discovery-manifest.summary.md +4 -4
  68. package/dist/discovery/orphan-report.md +1 -1
  69. package/dist/discovery/packs.json +13 -8
  70. package/dist/discovery/trust-report.md +11 -11
  71. package/dist/discovery/workspaces.json +11 -6
  72. package/dist/install/install.mjs +16 -0
  73. package/dist/mcp/registry-manifest.json +3 -3
  74. package/dist/router.json +1 -1
  75. package/dist/server/app.js +10 -0
  76. package/dist/server/app.js.map +1 -1
  77. package/dist/server/routes/ping.js +18 -0
  78. package/dist/server/routes/ping.js.map +1 -1
  79. package/dist/server/schemas/settings.js +8 -0
  80. package/dist/server/schemas/settings.js.map +1 -1
  81. package/dist/server/serverInfo.js +6 -2
  82. package/dist/server/serverInfo.js.map +1 -1
  83. package/dist/server/token.js +11 -4
  84. package/dist/server/token.js.map +1 -1
  85. package/dist/server/writeRoot.js +15 -1
  86. package/dist/server/writeRoot.js.map +1 -1
  87. package/dist/shared/capabilities.js +33 -0
  88. package/dist/shared/capabilities.js.map +1 -0
  89. package/dist/shared/capabilities.test.js +39 -0
  90. package/dist/shared/capabilities.test.js.map +1 -0
  91. package/dist/ui/assets/{index-BiEZiZ31.js → index-CrmZ34Rg.js} +16 -16
  92. package/dist/ui/assets/index-CrmZ34Rg.js.map +1 -0
  93. package/dist/ui/index.html +14 -5
  94. package/docs/CLAIMS.md +62 -37
  95. package/docs/architecture.md +2 -2
  96. package/docs/benchmark.md +137 -0
  97. package/docs/catalog.md +8 -3
  98. package/docs/comparison.yaml +44 -2
  99. package/docs/contracts/local-server-ports.md +53 -0
  100. package/docs/contracts/no-runtime-boundary.md +1 -1
  101. package/docs/contracts/subagent-boundary.md +15 -0
  102. package/docs/customization.md +14 -3
  103. package/docs/decisions/ADR-016-installer-architecture.md +2 -0
  104. package/docs/decisions/ADR-088-no-external-runtime-federation.md +1 -1
  105. package/docs/decisions/ADR-094-agent-memory-layer-removal.md +1 -1
  106. package/docs/decisions/ADR-109-subagent-v1-contract.md +2 -0
  107. package/docs/decisions/ADR-110-discipline-profile-resolution-locus.md +2 -0
  108. package/docs/decisions/ADR-113-ci-native-release-label-trigger.md +11 -3
  109. package/docs/decisions/ADR-124-embedded-engine-doctrine.md +255 -0
  110. package/docs/decisions/ADR-125-doc-screenshot-anonymization.md +131 -0
  111. package/docs/decisions/ADR-126-internet-reach-operator-tooling.md +254 -0
  112. package/docs/decisions/ADR-127-enforcement-claims-must-resolve.md +150 -0
  113. package/docs/decisions/ADR-128-executable-evidence-and-measured-escalation.md +201 -0
  114. package/docs/decisions/INDEX.md +21 -0
  115. package/docs/decisions/engine-reclassification-2026-07.md +104 -0
  116. package/docs/distribution/awesome-list-submission.md +1 -1
  117. package/docs/distribution/registries.md +36 -27
  118. package/docs/enforcement-by-host.md +7 -0
  119. package/docs/featured-skills.md +2 -2
  120. package/docs/getting-started-by-role.md +1 -1
  121. package/docs/getting-started.md +1 -1
  122. package/docs/governance-advantage.md +1 -1
  123. package/docs/guides/gated-platform-reads.md +221 -0
  124. package/docs/positioning-evidence.md +1 -1
  125. package/docs/proof.md +92 -16
  126. package/docs/threat-model.md +1 -0
  127. package/package.json +5 -2
  128. package/src/config/agent-settings.template.yml +43 -0
  129. package/src/config/reach-channels.yml +217 -0
  130. package/src/config/reach-prescriptions-intake.yml +200 -0
  131. package/src/scripts/_dispatch.bash +15 -0
  132. package/src/scripts/_lib/exec_evidence.ts +251 -0
  133. package/src/scripts/_lib/fixtures/secret-detector/negatives.txt +10 -0
  134. package/src/scripts/_lib/fixtures/secret-detector/positives.txt +11 -0
  135. package/src/scripts/_lib/kernel_rules.ts +46 -0
  136. package/src/scripts/_lib/reddit_thread_parse.ts +598 -0
  137. package/src/scripts/_lib/risk_paths.ts +160 -0
  138. package/src/scripts/_lib/secret_detector.test.ts +103 -0
  139. package/src/scripts/_lib/secret_detector.ts +319 -0
  140. package/src/scripts/_lib/tool_probe.ts +359 -0
  141. package/src/scripts/adr/regenerate_index.ts +81 -6
  142. package/src/scripts/audit_adr_coverage.ts +33 -0
  143. package/src/scripts/build_proof.ts +162 -0
  144. package/src/scripts/check_adr_frontmatter.ts +195 -0
  145. package/src/scripts/check_artefact_count_messaging.ts +4 -0
  146. package/src/scripts/check_backstop_debt.ts +200 -0
  147. package/src/scripts/check_claims.ts +188 -8
  148. package/src/scripts/check_comparison.ts +12 -0
  149. package/src/scripts/check_enforcement_coverage.ts +592 -0
  150. package/src/scripts/check_kernel_rule_bundle.ts +16 -12
  151. package/src/scripts/check_reach_channels.ts +407 -0
  152. package/src/scripts/check_reach_staleness.ts +364 -0
  153. package/src/scripts/check_secret_leak.test.ts +47 -0
  154. package/src/scripts/check_secret_leak.ts +290 -0
  155. package/src/scripts/code_graph/build.ts +0 -0
  156. package/src/scripts/code_graph/cli.ts +207 -0
  157. package/src/scripts/code_graph/detect.ts +134 -0
  158. package/src/scripts/code_graph/extract.ts +386 -0
  159. package/src/scripts/code_graph/loader.ts +123 -0
  160. package/src/scripts/code_graph/query.ts +176 -0
  161. package/src/scripts/code_graph/sanitize.ts +30 -0
  162. package/src/scripts/code_graph/types.ts +83 -0
  163. package/src/scripts/code_graph/validate.ts +63 -0
  164. package/src/scripts/external_sources_denylist.json +3 -1
  165. package/src/scripts/generate_subagent_floor.ts +194 -0
  166. package/src/scripts/hook_manifest.yaml +13 -3
  167. package/src/scripts/hooks/code_graph_nudge_hook.ts +184 -0
  168. package/src/scripts/iron_law_sha.ts +3 -12
  169. package/src/scripts/lint_override_kernel_guard.ts +219 -0
  170. package/src/scripts/measure_rule_budget.ts +3 -12
  171. package/src/scripts/postinstall_gui.ts +129 -0
  172. package/src/scripts/reach_doctor.ts +1651 -0
  173. package/src/scripts/release.ts +24 -3
  174. package/src/scripts/risk_escalation_shadow.ts +160 -0
  175. package/src/scripts/schemas/agent-settings.schema.json +23 -0
  176. package/src/scripts/schemas/reach-channels.schema.json +134 -0
  177. package/src/scripts/schemas/reach-doctor-payload.schema.json +220 -0
  178. package/src/scripts/schemas/rule.schema.json +10 -0
  179. package/src/scripts/skill_linter.ts +55 -0
  180. package/src/scripts/validate_reach_prescriptions.ts +751 -0
  181. package/src/server/schemas/settings.ts +16 -0
  182. package/src/shared/capabilities.test.ts +43 -0
  183. package/src/shared/capabilities.ts +75 -0
  184. package/src/templates/minimal/agents-overrides-readme.md +20 -0
  185. package/dist/ui/assets/index-BiEZiZ31.js.map +0 -1
@@ -6,7 +6,7 @@
6
6
  },
7
7
  "metadata": {
8
8
  "description": "Bootstrap shim for the event4u agent-config suite. This plugin ships ONLY the dispatcher hooks plus one install-pointer skill — ALL content (skills, rules, commands) is installed via `npx -y @event4u/agent-config init`, which writes the file projection AND registers the same hooks in ~/.claude/settings.json. DEPRECATED as a content channel; kept so the marketplace listing stays discoverable and existing installs keep working hooks.",
9
- "version": "9.7.0",
9
+ "version": "9.8.0",
10
10
  "keywords": [
11
11
  "agent-config",
12
12
  "skills",
package/CHANGELOG.md CHANGED
@@ -18,6 +18,42 @@ Entry-shape contract: [`docs/contracts/CHANGELOG-conventions.md`](docs/contracts
18
18
 
19
19
  ### Added
20
20
 
21
+ - **Internet-reach operator tooling** — upstream-tool health and install-pinning
22
+ discipline for the tools a reach recipe needs. The router skill this was
23
+ scoped around was **cancelled pre-authoring by its own benchmark gate**: the
24
+ pre-registered run returned 0/12 outright wins against the host's native web
25
+ tools (`band: stop`), so no skill, no triggers, no capability-area claim. The
26
+ null is published in [`docs/benchmark.md`](docs/benchmark.md) § internet-reach;
27
+ the decision is [ADR-126](docs/decisions/ADR-126-internet-reach-operator-tooling.md).
28
+ - `reach:doctor` — new read-only command: per-channel probe status,
29
+ `active_backend`, tier, lifecycle, and the exact **pinned** fix command for
30
+ the current platform when a backend is missing or broken. No writes, no
31
+ installs, no network (`--deep` is the explicit opt-in that makes one real
32
+ request per backend and still writes nothing).
33
+ - `src/config/reach-channels.yml` + `reach-channels.schema.json` — ordered
34
+ backend candidates per channel (swapping a backend is a config reorder, not
35
+ a code edit), the four-value lifecycle vocabulary reused from
36
+ `provider-lifecycle`, `last_verified` staleness metadata, and an install
37
+ pattern that **rejects** unpinned versions, `latest`/`main`/`HEAD` refs and
38
+ archive-URL install sources.
39
+ - `tool_probe` — five-state probe taxonomy (`ok`/`missing`/`broken`/`timeout`/
40
+ `error`) with stale-shim detection (resolvable shim, dead interpreter),
41
+ exit-126/127 mapping, timeout-only single retry, and per-channel error
42
+ isolation. Every spawn routes through `hardenedSpawnEnv()`.
43
+ - `check-reach-channels` + `check-reach-prescriptions` CI gates — pinning and
44
+ intake-record discipline is machine-checked, not an honour system; a
45
+ prescription that cannot be pinned does not ship.
46
+ - `check-reach-staleness` CI gate — offline: a channel unverified for >90 days,
47
+ a `deprecated` channel with no `replacement`, or a channel past its
48
+ `removal_after` date and still present fails the build.
49
+ - Registry trust is enforced at runtime, not just in CI: `reach:doctor` (incl.
50
+ `--registry <path>`) validates the registry against its schema and refuses to
51
+ probe on any violation (exit 2). `probe_args` is a flag-shaped **allowlist**
52
+ and `probe_cmd` must equal its backend `id`, so a registry entry can neither
53
+ smuggle a shell payload nor label a row with a binary other than the one that
54
+ ran — both closed by an adversarial pre-merge review, with permanent
55
+ regression fixtures.
56
+
21
57
  - **Doc-follows-code discipline** — deterministic, framework-agnostic mechanism
22
58
  so documentation is updated when code changes.
23
59
  - `downstream-changes` rule gains a first-class **Doc-Impact** obligation:
@@ -139,6 +175,114 @@ Entry-shape contract: [`docs/contracts/CHANGELOG-conventions.md`](docs/contracts
139
175
  > that forces a new era split (`# Era: 9.3.x`, etc.) — see
140
176
  > [`docs/contracts/CHANGELOG-conventions.md § Era splits`](docs/contracts/CHANGELOG-conventions.md).
141
177
 
178
+ ## [9.8.0](https://github.com/event4u-app/agent-config/compare/9.7.0...9.8.0) (2026-07-26)
179
+
180
+ ### Features
181
+
182
+ * **proof:** publish what re-derives itself, and what it prevents ([8ba878f](https://github.com/event4u-app/agent-config/commit/8ba878f0bb2244b33ce57f3484d5c0d0f887a5e9))
183
+ * **governance:** classify trust-boundary risk, measure before gating ([1421f82](https://github.com/event4u-app/agent-config/commit/1421f829ee58fe56a4c41a15c5f2e3925f17b5e9))
184
+ * **claims:** add exec: evidence that re-runs the command ([081b9ed](https://github.com/event4u-app/agent-config/commit/081b9ed36e29e3bb9e665004c16f3db9f831a107))
185
+ * **ci:** run the backstops rules declare, and baseline the five that were already red ([545d9cc](https://github.com/event4u-app/agent-config/commit/545d9ccd02cba430c8b5cb7c9b15fb0c9fe40463))
186
+ * **proof:** read the same checked rows as failure modes, not just as comparisons ([d2196de](https://github.com/event4u-app/agent-config/commit/d2196de10a220300b2897a379bf419c89416c117))
187
+ * **adr:** index the decisions filed outside the ADR directory, and stop auditing a hardcoded list ([2a2999a](https://github.com/event4u-app/agent-config/commit/2a2999a437f98fa94eae76638598923f0ba85bcd))
188
+ * **claims:** see the figure shapes that actually ship, and refuse a qual claim as a licence for a number ([5d7b166](https://github.com/event4u-app/agent-config/commit/5d7b1666364bb227fc687704560c93ddfb5fad2f))
189
+ * **host-integration:** config-root spawn flag + embed contract v1 ([a9f0038](https://github.com/event4u-app/agent-config/commit/a9f0038631ed97b815ab255d3a307a617423f091))
190
+ * **skill:** gated-reach — ship-tier channels only ([88f03c3](https://github.com/event4u-app/agent-config/commit/88f03c349fd89ffa36ca642eeef4bb8cd31263a8))
191
+ * **lint:** refuse nag phrasing in skill bodies ([004d696](https://github.com/event4u-app/agent-config/commit/004d696d3afae203e1581c63de979d0571031331))
192
+ * **reach:** distinguish "installed" from "able to extract" in reach:doctor ([e012bf7](https://github.com/event4u-app/agent-config/commit/e012bf784d0544002ec86128cc2fb2d6805e44d0))
193
+ * **reach:** read Reddit and single tweets credential-free ([9b89a34](https://github.com/event4u-app/agent-config/commit/9b89a34cf863167fda437f51ab54396f11229b60))
194
+ * **adr:** name the condition that reopens a decision, and validate ADR frontmatter at all ([5315ca1](https://github.com/event4u-app/agent-config/commit/5315ca1a05cb110dec839083dc8ef61b5f4fad9e))
195
+ * **subagents:** deliver the safety floor the contract already promised ([48ccf6a](https://github.com/event4u-app/agent-config/commit/48ccf6a10a45ba2ee2583a5dd3765ab0b8db9605))
196
+ * **overrides:** a kernel rule may be tightened, never replaced ([7821e22](https://github.com/event4u-app/agent-config/commit/7821e2202e9a03d9b0f80f299374a9cad3969139))
197
+ * **enforcement:** resolve what enforces each rule, instead of trusting the claim ([efc0fab](https://github.com/event4u-app/agent-config/commit/efc0fab2b8fc1bf181ba89ecc9f427312996dc56))
198
+ * **reach:** mechanize the supply-chain and staleness discipline as CI gates ([3d1b0f6](https://github.com/event4u-app/agent-config/commit/3d1b0f6375ba0f193fa198817bfa145091deebb1))
199
+ * **reach:** channel registry, five-state probe engine and read-only reach:doctor ([2cf6f04](https://github.com/event4u-app/agent-config/commit/2cf6f0406e3e82f955832698db556c7cba8887e2))
200
+ * **reach:** pre-registered reach-vs-native benchmark, published as an honest null ([8238f8b](https://github.com/event4u-app/agent-config/commit/8238f8bf78ac3f5cd47ad6ffdc703bbd562a206f))
201
+ * **code-graph:** code-intelligence skill + interop routing + host degradation (Phase 4) ([eabe48c](https://github.com/event4u-app/agent-config/commit/eabe48c49311278cfcb96ba3401b5240b4707261))
202
+ * **code-graph:** PreToolUse code-graph nudge hook (Phase 4) ([6d674ee](https://github.com/event4u-app/agent-config/commit/6d674ee421581a72094d581d35fc429006f7f4b4))
203
+ * **code-graph:** incremental --update + symlink-confinement fix (Phase 4) ([c0c846c](https://github.com/event4u-app/agent-config/commit/c0c846c222fc76bfcc685de96ae0dd0055a2fd38))
204
+ * add doc-screenshot anonymization discipline (rule + skill + ADR-125) ([c3e4671](https://github.com/event4u-app/agent-config/commit/c3e4671fd7822976d1293632b3b1ee7d707034a5))
205
+ * **code-graph:** source-agnostic query tier + detection (Phase 3) ([f5a0117](https://github.com/event4u-app/agent-config/commit/f5a0117a3445c4c3070f4432788a645cc2522f5a))
206
+ * **code-graph:** native WASM tree-sitter extract+build engine (Phase 2) ([8d78fef](https://github.com/event4u-app/agent-config/commit/8d78fefd788c6da88516ccdcdfde6ca84e572938))
207
+ * **adr-124:** land embedded-engine doctrine + reclassification sweep (Phase 0-1) ([e1db617](https://github.com/event4u-app/agent-config/commit/e1db617307d13de6d520b9aacc6aa0bb5472fb92))
208
+ * **install:** restart/launch the GUI on a global (re)install ([fae7a6c](https://github.com/event4u-app/agent-config/commit/fae7a6c6ad60441e2df9d056b92cc083ca63940d))
209
+ * secret-scan pre-flight in /commit, /commit:in-chunks, /pr:create ([ab69931](https://github.com/event4u-app/agent-config/commit/ab6993114bb57f6d8f2fea98ec4c2ec0e82366e7))
210
+ * secret-vcs-guard rule + secrets-management runtime guard ([9426f7e](https://github.com/event4u-app/agent-config/commit/9426f7e175b6b1325a4989eb07f709c8d9090bbe))
211
+ * secret detector library + CI leak-scan gate ([3168244](https://github.com/event4u-app/agent-config/commit/316824447b277f966dfe194e0c7c6741121b7e9f))
212
+
213
+ ### Bug Fixes
214
+
215
+ * **roadmaps:** inline the council convergence instead of linking the transcript ([c47d9fc](https://github.com/event4u-app/agent-config/commit/c47d9fc0f8e390a8edce2a30d3dd8c5350ae0fd1))
216
+ * **docs:** replace stale 3.2.0 registry submission body and guard the file ([b393514](https://github.com/event4u-app/agent-config/commit/b393514dfa2a891ae24294d43155fa080ca115cd))
217
+ * **ci:** give the backstop gates their baseline, and stop an empty scan reading as clean ([69083f5](https://github.com/event4u-app/agent-config/commit/69083f577975c0de1d9535b4b45c27f475a676d7))
218
+ * **claims:** derive the denominator, and stop citing a gate that does not run ([89049f1](https://github.com/event4u-app/agent-config/commit/89049f1db36d63e33c7bb4f4a80712f3f2f72556))
219
+ * **enforcement:** say which build — a taskfile-named validator is not a CI gate ([7a87271](https://github.com/event4u-app/agent-config/commit/7a87271cce6b0cabeb664ccf890acd1f0335a0e7))
220
+ * **ci:** regenerate docs/proof.md and stop tracking a per-run eval artifact ([e8973c7](https://github.com/event4u-app/agent-config/commit/e8973c784513e33d7a0eb8e43d55c4a46b446a17))
221
+ * **claims:** the witness-sweep fixture encoded the bug it was testing ([b7b8621](https://github.com/event4u-app/agent-config/commit/b7b8621966d82f7f0cda87838974f1066258a6ec))
222
+ * **claims:** correct three shipped numbers, one of them understated by 3x ([2c52959](https://github.com/event4u-app/agent-config/commit/2c529590bce9ccb8cdabb1835f01670d7f60140a))
223
+ * **ci:** three self-inflicted reds — my own schema, my own legacy path, my own hand-edit ([7945f6c](https://github.com/event4u-app/agent-config/commit/7945f6cd74640a8f401451896c7a8c9cadce9dfd))
224
+ * **enforcement:** satisfy noUncheckedIndexedAccess in the two new scripts ([6501cce](https://github.com/event4u-app/agent-config/commit/6501ccebb757dd482dbd69bd5b784db447080e4a))
225
+ * **output-discipline:** wire the linter the rule already claimed was wired ([d996c6d](https://github.com/event4u-app/agent-config/commit/d996c6d7372add7e9b738bca2064078bbbc4a958))
226
+ * **kernel:** single-source the kernel list, and point the slow-rollout gate at a directory that exists ([676d74f](https://github.com/event4u-app/agent-config/commit/676d74f67d8db05d9f404e7a17d43172a2786bb1))
227
+ * **reach:** close the content-echo class at all four sites, not three ([17e806d](https://github.com/event4u-app/agent-config/commit/17e806d37af0894908f9b12a5044dc7c1fb1d51c))
228
+ * **reach:** confine credential_path, refuse non-files, and name what --deep consents to ([ffd02d0](https://github.com/event4u-app/agent-config/commit/ffd02d0d33b85f5e70de442d1c8dc4d5208b4c50))
229
+ * **reach:** redact echoed file content, unify error sanitization, document the gate boundaries ([52a1ded](https://github.com/event4u-app/agent-config/commit/52a1ded5314c99a51414ad3b6f44a60177ce40e5))
230
+ * **settings:** declare hooks.code_graph.enabled in the Zod settings schema ([ef475ce](https://github.com/event4u-app/agent-config/commit/ef475ce39a0e937f1f6cbfe9ed544633a789c969))
231
+ * **proof:** regenerate proof.md after code-intelligence skill-count bump ([8ad88c8](https://github.com/event4u-app/agent-config/commit/8ad88c82eee0252d903c9efb93b62e380a6acba5))
232
+ * sync settings Zod schema + regenerate proof/capabilities for screenshots config ([4812a6e](https://github.com/event4u-app/agent-config/commit/4812a6e232c7323695faf6a90328b13b2e48bbe0))
233
+ * **proof:** regenerate proof.md after comparison.yaml row-1 rewording ([f36f583](https://github.com/event4u-app/agent-config/commit/f36f583c1aab82da7171e4c9f3f28306b5e1345a))
234
+ * **roadmap:** unlink future reclassification-doc path in sequencing plan ([d74b4b0](https://github.com/event4u-app/agent-config/commit/d74b4b060cb01569c47615822b09ed2f055a2474))
235
+ * **review:** reclassify MCP server B, machine-visible partial supersession ([1b2ed21](https://github.com/event4u-app/agent-config/commit/1b2ed21046a6c904d435dd48472f512477436cad))
236
+ * **install:** make postinstall_gui self-contained (prepack-check) ([54a77b1](https://github.com/event4u-app/agent-config/commit/54a77b1bf981053f7e778ec2e6643637f608c313))
237
+ * widen check_secret_leak opts types for exactOptionalPropertyTypes ([593dfab](https://github.com/event4u-app/agent-config/commit/593dfab595be8c8f5cc722f038e8e60fcdb2609b))
238
+ * **release:** make the tag-workflow dispatch non-fatal + document actions:write ([d47949e](https://github.com/event4u-app/agent-config/commit/d47949e1357e5b4794b442c3b69fd84c999d23fa))
239
+
240
+ ### Documentation
241
+
242
+ * **roadmaps:** record adoption progress and add two new roadmaps ([7af5375](https://github.com/event4u-app/agent-config/commit/7af537591d3628d4a2285553c41adcdf5e23e734))
243
+ * **readme:** reorder the opening to lead with the wedge, not the catalog ([ab66da8](https://github.com/event4u-app/agent-config/commit/ab66da8e968a540528fffca05ce65184c0817740))
244
+ * **adr:** record the cut as ADR-128, and archive the roadmap ([b365e90](https://github.com/event4u-app/agent-config/commit/b365e907461312f5e71e502de21333b10a211655))
245
+ * **roadmap:** archive road-to-wiring-truth, complete ([aaafb9e](https://github.com/event4u-app/agent-config/commit/aaafb9e7543b9b4a75f40b09805725dc437ca564))
246
+ * **roadmap:** archive road-to-number-truth, complete ([a12bbae](https://github.com/event4u-app/agent-config/commit/a12bbae9d83e60531a87b69fd135c37cbb02de8a))
247
+ * **contracts:** write the local-server-ports + host-integration contract ([610e539](https://github.com/event4u-app/agent-config/commit/610e539538bac8a914ce28a2b4f9c9ef91165b61))
248
+ * **roadmaps:** track the AC host-integration roadmaps + landed status ([34fcc27](https://github.com/event4u-app/agent-config/commit/34fcc271fe9eda5d24d8ee2a3260cdfbddad5722))
249
+ * **roadmap:** close gated-reach, spawn the YouTube follow-up, park five successors ([530917a](https://github.com/event4u-app/agent-config/commit/530917a3a1c4be5c514fe4eb507dea83a65b4b53))
250
+ * register the gated-reach claim, comparison row, and amend ADR-126 ([bb0b263](https://github.com/event4u-app/agent-config/commit/bb0b263292236a623e7cb71d2a9832f1e090cc3a))
251
+ * **bench:** publish the gated-reach outcomes, ships and parks alike ([5ca8930](https://github.com/event4u-app/agent-config/commit/5ca89304c517b91d2d3950213c835e6336ef5d57))
252
+ * **reach:** operator prescriptions for platforms the host cannot fetch ([844bb1b](https://github.com/event4u-app/agent-config/commit/844bb1b3cfa3633c2e4f383496ae04393ea15a48))
253
+ * **roadmap:** archive road-to-enforcement-proof, complete ([a590aca](https://github.com/event4u-app/agent-config/commit/a590aca449b9aa0a186d4739c9931f2b46458fcf))
254
+ * **proof:** publish both numbers, including the unflattering one ([eabe545](https://github.com/event4u-app/agent-config/commit/eabe545965648adbe4637f4b6f80ea3dcbc5de46))
255
+ * **reach:** make Reddit ranking + thread structure the goal — and it stays credential-free ([4c3b3cb](https://github.com/event4u-app/agent-config/commit/4c3b3cbafba3087078ff3a2ff0f0509e36dc29e1))
256
+ * **reach:** roadmap for credential-free gated reach — Reddit, single tweets, transcripts ([ff4b40c](https://github.com/event4u-app/agent-config/commit/ff4b40c83a8925fabfbf9c87ae29af092bcc1f0a))
257
+ * **reach:** correct my own overstatement about what the witness contains ([0e46437](https://github.com/event4u-app/agent-config/commit/0e46437e6377b863245e769cce9c0721e39a4698))
258
+ * **reach:** record all four council divergences, and give both accepted costs a re-entry point ([7f85378](https://github.com/event4u-app/agent-config/commit/7f853788973a3fcfac61e34866047d8704d61bd6))
259
+ * **reach:** ADR-126, archived roadmap, comparison row and maintenance log ([4bfc9da](https://github.com/event4u-app/agent-config/commit/4bfc9da38cd809465713e8544b953e38781594b4))
260
+ * **roadmap:** add native-code-intelligence roadmap + engine queue ([7c7ac11](https://github.com/event4u-app/agent-config/commit/7c7ac1149b8715794be0baac5b3285e514fb9b65))
261
+ * **adr:** propose ADR-124 embedded-engine doctrine ([d8c90a5](https://github.com/event4u-app/agent-config/commit/d8c90a52397a048b52abf17575f6d67d298b364b))
262
+ * **roadmap:** sync dashboard for archived Starlight roadmap ([d30846c](https://github.com/event4u-app/agent-config/commit/d30846c1299ef9784ea33a8572f830a0ae1b571f))
263
+ * **roadmap:** complete + archive Starlight project-docs roadmap ([4c7b91f](https://github.com/event4u-app/agent-config/commit/4c7b91f407f1238ffc83c1700f444e136c476400))
264
+ * **roadmap:** add Starlight project-docs roadmap ([f63e87f](https://github.com/event4u-app/agent-config/commit/f63e87f3ebc2cc53e2ceccb6a43591fd394aa90e))
265
+ * **site:** add setup, configuration, CLI and agent-command docs ([7c05e68](https://github.com/event4u-app/agent-config/commit/7c05e68fdc27c391c0882d2f2d0284bb3f3f9d8f))
266
+ * **site:** restyle docs site to the data-helpers look ([ef0e7a0](https://github.com/event4u-app/agent-config/commit/ef0e7a05de293d49c7f6fb474c40f157f621de13))
267
+ * document the secret-in-VCS guardrail (threat model + SECURITY) ([e10e316](https://github.com/event4u-app/agent-config/commit/e10e3160bb07b6457602b2c2ee70f2215a66dfb5))
268
+
269
+ ### Tests
270
+
271
+ * **bench:** gated-reach — pre-registration, rows, per-channel verdict ([8233aed](https://github.com/event4u-app/agent-config/commit/8233aedd50c80156a9d8996967e1fd2a7db70109))
272
+ * **reach:** drop the witness instrument that watched shared state, and say what that costs ([1be7ab9](https://github.com/event4u-app/agent-config/commit/1be7ab98373f20cbfd0048184cc62a0c93de1151))
273
+ * **reach:** cover the sanitized error path, the export gate and the win32 skip ([3b5a47a](https://github.com/event4u-app/agent-config/commit/3b5a47a5c30d0968f2631924c813d3c6b13884d2))
274
+ * **reach:** the read-only witness parses the AST instead of grepping the source ([e54f22d](https://github.com/event4u-app/agent-config/commit/e54f22d994736c3e6cbb37390bc4b843975fa05e))
275
+
276
+ ### Chores
277
+
278
+ * **reports:** regenerate the originality audit, stale on main ([aef5b53](https://github.com/event4u-app/agent-config/commit/aef5b53bbaf918a6b849060063e6c40196ab5dd4))
279
+ * regenerate drifted originality report (pre-push consistency sync) ([66c7f04](https://github.com/event4u-app/agent-config/commit/66c7f04afe9005b91c07457902edcf2ee0cf3a78))
280
+ * **test:** remove two orphans the depythonization left in the linter test ([e800c8e](https://github.com/event4u-app/agent-config/commit/e800c8e8627e26388de29c2b3e38b95620932b64))
281
+ * **regen:** sync skill counts + meta-pack membership after code-intelligence ([0775e14](https://github.com/event4u-app/agent-config/commit/0775e148c1fbd61da13f9ad5646e4f8ef7bfe324))
282
+ * **roadmap:** park native-code-intelligence in later/ (Phases 0-4 done, 5-6 gated) ([f7b3c2f](https://github.com/event4u-app/agent-config/commit/f7b3c2f63339efb81b497e6eeda05a3e843171d7))
283
+ * regenerate docs/proof.md for the +1 rule count ([620614c](https://github.com/event4u-app/agent-config/commit/620614c901b1c7971c8c55d97477c74e5b2f2ba2))
284
+ * regenerate dist projections + counts, archive completed roadmap ([55052c9](https://github.com/event4u-app/agent-config/commit/55052c941be45cea1d4dfc65fc048a0c8f450958))
285
+
142
286
  ## [9.7.0](https://github.com/event4u-app/agent-config/compare/9.6.0...9.7.0) (2026-07-21)
143
287
 
144
288
  ### Features
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
 
@@ -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).
@@ -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