@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
@@ -0,0 +1,150 @@
1
+ ---
2
+ adr: 127
3
+ status: accepted
4
+ date: 2026-07-25
5
+ decision: enforcement-claims-must-resolve
6
+ supersedes: —
7
+ superseded_by: —
8
+ phase: road-to-enforcement-proof · P1–P5
9
+ type: structural
10
+ review_trigger: >-
11
+ When resolved enforcement coverage stops rising across two consecutive
12
+ releases while rules keep being added — that would mean the field is being
13
+ filled in to satisfy the gate rather than to record a real backstop, and the
14
+ ratchet has become ceremony. Also reopen if a `validator:` declaration is
15
+ found resolving green through an indirection that does not actually execute
16
+ it, which would mean the reachability test has itself become fail-open.
17
+ ---
18
+
19
+ # ADR-127 — An enforcement claim must resolve, not merely exist
20
+
21
+ ## Status
22
+
23
+ **Accepted** · 2026-07-25.
24
+
25
+ ## Context
26
+
27
+ A source-level comparison against an external governance reference surfaced one
28
+ defect class this package could not see from the inside: **prose that asserts
29
+ enforcement the code does not deliver.** Four verification agents re-read every
30
+ load-bearing claim against this repo's own source. Five instances survived
31
+ verification:
32
+
33
+ - `src/rules/output-discipline.md` asserted "violations cause a CI exit-code-2"
34
+ while `lint_output_slop.ts` shipped and was wired into nothing.
35
+ - `check_kernel_rule_bundle.ts` — the one-kernel-rule-per-PR slow-rollout gate —
36
+ watched `.agent-src.uncondensed/rules`, a tree retired in the ADR-051 move to
37
+ `src/`. A path that cannot exist never matches, so the gate reported "no kernel
38
+ rule touched" for every kernel-rule edit, indefinitely.
39
+ - `docs/contracts/subagent-boundary.md` stated as fact that "every floor applies
40
+ inside the subagent"; the brief schema, the spawn composer, and all eight
41
+ worker-prompt templates contained no floor text at all.
42
+ - The override layer documented no non-overridable class, so the shipped consumer
43
+ README described unconditional whole-file shadowing — an empty file at
44
+ `agents/overrides/rules/non-destructive-by-default.md` reading as a way to
45
+ remove the Hard Floor.
46
+ - 128 ADRs, zero naming a revisit condition, because ADR frontmatter was
47
+ **entirely unvalidated** — `validate_frontmatter.ts` covered skills, rules,
48
+ commands, and personas and nothing covered `docs/decisions/`.
49
+
50
+ Nothing in the existing gate set could detect any of them, for one shared reason:
51
+ **every gate checked that a pointer resolves, never that a claim is true.** The
52
+ claims ledger is the clearest case — three evidence forms, all existence checks
53
+ (file present, substring present, URL carries a date), and a `last_verified`
54
+ field that is parsed and compared to nothing.
55
+
56
+ The reference object's most transferable norm, and the one adopted here: a rule
57
+ with no feasible enforcement tier is deleted rather than kept as honor-system
58
+ theatre, and a check with no real input is left unwired rather than run as
59
+ decoration. Notably, the reference violates its own version of this in two places
60
+ (a nucleus its ADR sizes at "~15 lines" that is 9; a freshness check its ADR
61
+ promises as FAIL that registers WARN) — which is itself evidence that the defect
62
+ class is structural, not a lapse of care.
63
+
64
+ ## Decision
65
+
66
+ **An enforcement claim is credited only when it resolves against the filesystem
67
+ AND the wiring. Declaration is not evidence.**
68
+
69
+ 1. Rules carry `enforced_by:` — `hook:` / `validator:` / `test:` / `observer:` /
70
+ `none` — and `check_enforcement_coverage.ts` **resolves** each value. A
71
+ `validator:` whose script exists but is reachable from no taskfile, workflow,
72
+ or hook manifest resolves to `unwired`, not covered. Reachability is
73
+ transitive, so a sub-check running under a wired umbrella counts; a mention in
74
+ a comment does not.
75
+ 2. **Blocking and instrumenting are different tiers.** A hook registered
76
+ `fail_closed: false` resolves to `observer`, never `validator`. Of 18
77
+ registered hooks, exactly one can block.
78
+ 3. `none` is legal and **counted**. Undeclared rules count as uncovered, not as
79
+ excluded — a coverage number over only the rules that opted in would be
80
+ flattering and useless. The published figure is 14 of 107 (13.1%).
81
+ 4. **Kernel and safety-floor rules are non-overridable, with a registry.** A
82
+ `replace`-mode override on one is refused; an `extend` (a tightening) requires
83
+ an entry in `agents/overrides/kernel-exceptions.yml`. Direction matters, not
84
+ identity — this package's own legitimate override *tightens*
85
+ `verify-before-complete`, and a blanket name ban would forbid it.
86
+ 5. **The override audit reports; it does not pretend to police.** A build-failing
87
+ lint on kernel-named override files would guard one of several routes by which
88
+ a consumer can tell a model to ignore a rule, and would relocate the rest out
89
+ of sight while reading as coverage. It hard-fails only on this package's own
90
+ authoring surface, where the coverage claim is true.
91
+ 6. **The subagent floor is generated and delivered.** Derived from the kernel rule
92
+ list, written into every dispatch prompt in `src/` **and** the shipped
93
+ `dist/agent-src/` projection, drift-gated with a FAIL.
94
+ 7. **ADRs name a revisit condition, not a cadence.** Required from 2026-07-25
95
+ forward, grandfathered by date rather than by an allowlist. A bare "annually"
96
+ is rejected — a calendar review is ignored; an event fires.
97
+ 8. **`exec:` evidence is scheduled by measurement, not by appeal.** The threshold
98
+ (≥ 10 pp of the backed ledger) was pre-registered before the count was taken;
99
+ the measured figure is 10 of 25 feasible (40 pp) against 0 today, so it
100
+ proceeds — in its own PR, not this one.
101
+
102
+ ## Consequences
103
+
104
+ **Good.** The defect class is now continuously measurable and ratcheted: blocking
105
+ coverage may not fall and unwired declarations may not rise. Two live defects
106
+ were closed on the first run (D1, and the kernel gate watching a dead path), and
107
+ a third — the floor missing from the shipped projection — was caught by grepping
108
+ `dist/` after the generator's first pass. The kernel rule list is single-sourced,
109
+ ending three copies and two "kept in sync with…" comments.
110
+
111
+ **Cost.** 86 rules are undeclared and drag the published number down; that is
112
+ intended, and it means the headline figure will look bad until the field is
113
+ filled in honestly. `enforced_by` is a schema change on an
114
+ `additionalProperties: false` schema, so it cannot be added ad hoc.
115
+
116
+ **Accepted limits, stated rather than papered over.** The override carve-out is a
117
+ norm with a partial gate: the layer is model-resolved, so an `extend` block whose
118
+ prose says "ignore the above" passes, and other relax routes (a persona file,
119
+ host config, a direct instruction) are outside its view. The subagent floor
120
+ covers dispatches through this package's templates; whether a host-native spawn
121
+ inherits anything is a host property this package does not control and does not
122
+ claim. `non-destructive-by-default` remains `enforced_by: none` — no script can
123
+ enforce "ask before you deploy", and adjacent hooks guard hook-bypass rather than
124
+ destructive intent, so claiming them would inflate the number.
125
+
126
+ ## Alternatives
127
+
128
+ - **Declaration-only `enforced_by`.** Rejected: it would have rated
129
+ `output-discipline` as enforced, which is the exact defect that motivated this.
130
+ - **Blanket ban on kernel overrides.** Rejected on both council members'
131
+ reasoning: it forbids legitimate tightening, including this repo's own.
132
+ - **A build-failing kernel-override lint.** Rejected as security theatre — see
133
+ Decision 5.
134
+ - **Build `exec:` evidence first.** Rejected on sequencing: without the coverage
135
+ baseline there was no way to know whether a new evidence form, validator, and
136
+ renderer would move falsifiability by 7% or 60%.
137
+ - **Retrofit `review_trigger` across all 83 structural/security ADRs.** Rejected:
138
+ it would mean inventing ~80 conditions to satisfy a field. Three ADRs with
139
+ demonstrably time-bound premises were retrofitted (ADR-016, ADR-109, ADR-110).
140
+
141
+ ## References
142
+
143
+ - `internal/reports/enforcement-coverage.json` — the ratcheted baseline.
144
+ - `internal/reports/exec-evidence-feasibility.json` — the pre-registered
145
+ measurement and its decision.
146
+ - `docs/proof.md` § 2b — the published coverage figure and the ledger's own limit.
147
+ - `docs/contracts/subagent-boundary.md` § Honest scope of the floor guarantee.
148
+ - `src/agent-src/contexts/override-system.md` § The non-overridable class.
149
+ - ADR-051 (`src/` as source of truth) — the move that silently disarmed the
150
+ kernel-bundle gate.
@@ -0,0 +1,201 @@
1
+ ---
2
+ adr: 128
3
+ status: accepted
4
+ date: 2026-07-25
5
+ decision: executable-evidence-and-measured-escalation
6
+ supersedes: —
7
+ superseded_by: —
8
+ phase: road-to-executable-evidence · P1–P4
9
+ type: structural
10
+ review_trigger: >-
11
+ When an `exec:` claim is found green while the thing it asserts is false —
12
+ which would mean the exit code stopped carrying the verdict and the form has
13
+ become a more expensive pointer. Also reopen when a ledger surface is edited
14
+ by anyone other than the maintainer, because contributor access is the
15
+ premise the deferred tamper-chain disagreement turned on and this package
16
+ does not have it yet.
17
+ ---
18
+
19
+ # ADR-128 — Evidence that re-derives itself, and escalation that is measured before it bites
20
+
21
+ ## Status
22
+
23
+ **Accepted** · 2026-07-25. Continues ADR-127.
24
+
25
+ ## Context
26
+
27
+ ADR-127 made an enforcement claim resolve against the wiring rather than merely
28
+ exist, and closed five live defects doing it. It deliberately left one thing
29
+ measured and unbuilt, in its own Decision 8: the claims ledger still checked
30
+ that an evidence pointer **resolves**, never that the claim is **true**. A ledger
31
+ entry reading "the suite is green" whose pointer resolves to a report nobody
32
+ regenerated stays `backed` indefinitely — the pointer resolves, the claim is
33
+ false. The pre-registered threshold for building the fix was ≥ 10 pp of the
34
+ backed ledger, set before counting; the measurement came back 11 of 26 feasible.
35
+
36
+ A second round of the same external comparison raised four further candidates
37
+ and a council was run over the cut (two members, two rounds). Both members
38
+ independently scoped in the `exec:` form and a content-driven risk axis, and
39
+ scoped out filling the 86 undeclared `enforced_by` fields and a
40
+ lifecycle-scenario cost model. The reasoning is recorded below because kills
41
+ that are not written down get re-proposed by the next analysis round.
42
+
43
+ The missing risk axis is concrete rather than theoretical.
44
+ `discipline_profile: auto` resolves rigor by host capability — *how much
45
+ governance can this environment afford*. Nothing asks *how dangerous is this
46
+ diff*. The live combination that leaves open: a weak host plus a diff in the
47
+ installer's provenance path resolves to minimum discipline, which is precisely
48
+ the change class hardened in 9.6.0. The fix landed; the process escalation for
49
+ the next change of that class did not.
50
+
51
+ ## Decision
52
+
53
+ **1. `exec:` is the fourth evidence form, and it re-runs the command.**
54
+ `exec:<command> -> <exit-code>`. The exit code carries the verdict. The
55
+ allowlist is a set of argv prefix tuples in
56
+ `src/scripts/_lib/exec_evidence.ts`, never a regex over a command string — a
57
+ regex over shell text is the classic bypass. Every argument after the matched
58
+ prefix is re-checked for shell metacharacters and repo escape, **including the
59
+ right-hand side of `--flag=value`**, without which `--rootdir=/etc` clears an
60
+ allowlist that only inspected the flag name.
61
+
62
+ **2. Re-execution is CI-only; the static half runs everywhere.** Whether a
63
+ pointer is well-formed and allowlisted is a property of the *ledger*, so it
64
+ fails on a laptop too. Whether the command actually passes is a property of the
65
+ *environment*, so it runs only on an ephemeral CI runner and never in a
66
+ consumer's checkout. Locally the gate reports `UNVERIFIED — re-execution is
67
+ CI-only, skipped locally`, never a silent pass.
68
+
69
+ **3. A skip is not a failure, and a failure is not a skip.** "Ran and
70
+ disagreed" is a finding. "Could not run" is not. Collapsing the two turns the
71
+ verifier into a rubber stamp in one direction or a nuisance in the other.
72
+
73
+ **4. The feasibility count was corrected down by one, by building it.** Of the
74
+ 11 measured feasible, 10 survived contact. `context-token-reduction` was counted
75
+ feasible because `check_token_regression` re-derives token figures with a real
76
+ tokenizer — but the script reads `internal/bench/reports/projection-cost.json`,
77
+ which is gitignored as a per-run artefact, so the command is not self-sufficient
78
+ in a fresh checkout and exits 1. The `exec:` gate found this on its first CI
79
+ run. The corrected figure is 10 of 26 (38.5 pp), still far above the
80
+ pre-registered 10 pp bar, so the decision to build stands on the corrected
81
+ number too — the over-count changed the margin, not the verdict.
82
+
83
+ **5. The residue is published, not rounded away.** `docs/proof.md` states how
84
+ many backed claims re-derive themselves versus rest on a pointer, and lists each
85
+ non-re-executable claim with the reason: external cite, paid or stochastic
86
+ benchmark output, or a prose contract with no exit code to carry a verdict.
87
+
88
+ **6. Trust-boundary risk is classified now and gated later.** The classifier is
89
+ path-based and reproducible from the diff alone — no model judgement about
90
+ whether a change "feels risky". Three classes: authentication and token
91
+ handling; installer, provenance, publish, and subagent-spawn paths; governance
92
+ surfaces. The docs exemption is scoped to prose *about* a system, not to any
93
+ markdown file: in this repo the rules, `AGENTS.md`, and the kernel set are all
94
+ `.md` and are executable policy. An extension-only test classified
95
+ `src/rules/icon-consistency.md` as unclassified, which a test caught before the
96
+ report shipped.
97
+
98
+ **7. Escalation is additive and the direction is encoded, not left to callers.**
99
+ The host profile sets a floor; a risk trigger may only raise it. A weak host
100
+ must never be able to lower an escalation — that inversion is the entire failure
101
+ mode the second axis exists to prevent, so `escalated_floor` takes a maximum
102
+ rather than trusting each call site to get the order right.
103
+
104
+ **8. The non-declinable escalation is justified by measurement, and still not
105
+ built here.** The threshold — ≥ 5 of ~100 first-parent merges landing in a
106
+ trust-boundary class — was written into the roadmap before the report was first
107
+ read. Measured: **11 of 99**. That clears the bar, so a non-declinable class for
108
+ trust-boundary diffs is warranted and gets its own ADR and its own PR. It is
109
+ deliberately not enabled by this one, because it trades away something the
110
+ authority model holds (`agent-authority`, `ask-when-uncertain`) and that trade
111
+ deserves its own decision record rather than riding along inside a measurement.
112
+
113
+ **9. The prevented-failure table is generated and gated.** Each row names a
114
+ failure mode rather than a feature, and cites a ledger claim. A cited id that is
115
+ missing or not `backed` **throws** during generation. The format was borrowed
116
+ from the reference; the discipline was not available to borrow — the reference's
117
+ own equivalent table carries a headline efficiency figure that appears nowhere
118
+ else, an order of magnitude below the cheapest scenario in its own generated
119
+ benchmark. A number with nowhere to resolve is exactly what this ledger exists
120
+ to catch, so the table is held to the ledger's bar.
121
+
122
+ **10. Three candidates are closed rather than left open.**
123
+
124
+ - **Filling the 86 undeclared `enforced_by` fields — deferred.** You cannot fill
125
+ them honestly without first building 86 enforcement points; what you get
126
+ otherwise is 86 `TODO` values, which is *strictly worse than a blank*. The
127
+ blank is honest about non-coverage; the TODO is a promise. This is the exact
128
+ failure ADR-127's own `review_trigger` names.
129
+ - **Adversarial governance evals — killed.** A corpus of "user pressures the
130
+ agent to skip a gate" scores refusal as the pass condition, while this
131
+ package's documented authority model says the user decides. An eval asserting
132
+ "the agent must refuse when the user says no" would declare `agent-authority`
133
+ a security failure. The narrower question — does the enforcement mechanism
134
+ return non-zero — is already answerable per rule.
135
+ - **A governed-writes lint — killed as the wrong layer.** A static scan for
136
+ `fs.writeFile` against protected paths is simultaneously too weak
137
+ (`child_process.exec('… > file')` walks past it) and too strong (fixture setup
138
+ trips it). Same reasoning as ADR-127 Decision 5: a gate covering one route of
139
+ several, while reading as coverage, is theatre. The type system is the right
140
+ layer if this is ever worth closing.
141
+
142
+ **11. Tamper-evident chains — deferred with the disagreement recorded, not
143
+ resolved by fiat.** Round 1 argued a hash chain adds nothing Git does not
144
+ already provide, and that the external `git merge-base` line-prefix witness does
145
+ all the work. Round 2 found the hole in that: a line-prefix witness catches
146
+ **tail truncation** and does **not** catch **mid-sequence deletion** — dropping
147
+ entries 50–90 out of the middle leaves a diff that is not a prefix violation and
148
+ reads as an ordinary divergent branch. Neither round produced the number that
149
+ settles it, which is how often a ledger surface is edited by someone other than
150
+ the maintainer. That number is the revisit condition in this ADR's frontmatter.
151
+
152
+ ## Consequences
153
+
154
+ **Good.** Machine-re-verifiable claims went from **0 to 10** of 27 backed. The
155
+ form found a real defect on its first CI run — the over-counted feasibility
156
+ entry — which is the gate doing the job it was built for, on itself. The risk
157
+ classifier caught its own docs-exemption bug through a test before its report
158
+ was published. Both are the intended shape: the instrument fails visibly rather
159
+ than reporting a comfortable number.
160
+
161
+ **Cost.** 17 of 27 backed claims still rest on pointers and cannot re-derive
162
+ themselves; that is now stated on the proof page rather than implied away. The
163
+ `exec:` allowlist is a maintenance surface — a renamed script silently drops a
164
+ claim from re-verification to static-only, and nothing yet detects that
165
+ downgrade.
166
+
167
+ **Accepted limits, stated rather than discovered later.** The allowlist only
168
+ covers commands whose exit code *is* the verdict; nothing about this form helps
169
+ a claim resting on a paid benchmark. The path classifier sees paths, not intent:
170
+ a dangerous change in a file it does not know about classifies as `none`, and
171
+ the class list is a judgement that will need revisiting as the tree moves. The
172
+ shadow report measures what *would* have escalated, which is not the same as
173
+ what *should* have — it cannot tell whether those 11 merges were actually
174
+ handled carelessly, only that they were in the class.
175
+
176
+ ## Alternatives
177
+
178
+ - **Build `exec:` for all 26 claims.** Not possible, and the attempt would have
179
+ produced fake pointers for benchmark claims. 10 honest re-verifications beat
180
+ 26 that only look uniform.
181
+ - **Ship the non-declinable escalation in this PR.** Rejected on sequencing: the
182
+ measurement justifies it, but an authority-model trade deserves a decision
183
+ record a reader can find, not a paragraph inside a measurement PR.
184
+ - **Let `exec:` run locally too.** Rejected: "commands execute in the repository
185
+ root with full filesystem access" is a property to confine, not to trust, and
186
+ a consumer's checkout has no business re-running this package's evidence.
187
+ - **A regex allowlist.** Rejected — the reason the tuple form exists.
188
+ - **Skip the prevented-failure table as marketing.** Rejected: the format names
189
+ failure modes rather than features, which is a better description of what this
190
+ package does than any feature list, and the ledger gate makes it falsifiable.
191
+
192
+ ## References
193
+
194
+ - `internal/reports/exec-evidence-feasibility.json` — the pre-registered
195
+ measurement, its correction, and the built outcome.
196
+ - `internal/reports/risk-escalation-shadow.json` — 11 of 99 first-parent merges,
197
+ against a threshold fixed before the first read.
198
+ - `src/scripts/_lib/exec_evidence.ts`, `src/scripts/_lib/risk_paths.ts`.
199
+ - `tests/scripts/exec_evidence.test.ts` — the abuse cases for the allowlist and
200
+ the argument hardening.
201
+ - ADR-127 — the enforcement-resolution decision this continues.
@@ -127,6 +127,11 @@ _Auto-generated by `scripts/adr/regenerate_index.py`. Do not edit._
127
127
  | [ADR-121](ADR-121-knowledge-sensitivity-classes.md) | Knowledge Sensitivity Classes | accepted | 2026-07-12 | — |
128
128
  | [ADR-122](ADR-122-adversarial-verification-council.md) | Adversarial Verification Council | accepted | 2026-07-14 | — |
129
129
  | [ADR-123](ADR-123-runtime-security-scope-and-spawn-hardening.md) | Runtime Security Scope And Spawn Hardening | accepted | 2026-07-20 | — |
130
+ | [ADR-124](ADR-124-embedded-engine-doctrine.md) | Embedded Engine Doctrine | accepted | 2026-07-23 | ADR-088 (engine-adoption interpretation only), ADR-094 (engine-adoption interpretation only) |
131
+ | [ADR-125](ADR-125-doc-screenshot-anonymization.md) | Doc Screenshot Anonymization | accepted | 2026-07-23 | — |
132
+ | [ADR-126](ADR-126-internet-reach-operator-tooling.md) | Internet Reach Operator Tooling | accepted | 2026-07-24 | — |
133
+ | [ADR-127](ADR-127-enforcement-claims-must-resolve.md) | Enforcement Claims Must Resolve | accepted | 2026-07-25 | — |
134
+ | [ADR-128](ADR-128-executable-evidence-and-measured-escalation.md) | Executable Evidence And Measured Escalation | accepted | 2026-07-25 | — |
130
135
  | [ADR-200](ADR-200-python-to-typescript-migration.md) | Python To Typescript Migration | accepted | 2026-06-11 | — |
131
136
 
132
137
  ## Unnumbered (legacy)
@@ -134,3 +139,19 @@ _Auto-generated by `scripts/adr/regenerate_index.py`. Do not edit._
134
139
  | # | Title | Status | Date | Supersedes |
135
140
  |---|---|---|---|---|
136
141
  | [ADR-rule-kernel-and-router](ADR-rule-kernel-and-router.md) | Rule Kernel And Router Roadmap Closure | accepted | 2026-05-06 | — |
142
+
143
+ ## Decision records outside this directory
144
+
145
+ Scanned, not hand-listed. These files are titled `# ADR — …` and record a
146
+ decision, but live elsewhere in the tree. They are indexed here so a decision
147
+ cannot be unfindable merely because of where it was filed; their paths are
148
+ unchanged and their inbound references still resolve.
149
+
150
+ | File | Title | Status |
151
+ |---|---|---|
152
+ | `agents/settings/contexts/adr-always-budget-relief-strategy.md` | Always-Budget Relief Strategy (parked, reactivation-gated) | Decided |
153
+ | `agents/settings/contexts/adr-always-rule-context-split-not-viable.md` | Splitting an Always-rule into rule + `load_context:` is not viable under Model (b) | Decided |
154
+ | `agents/settings/contexts/adr-artifact-engagement.md` | Artefact-Engagement Telemetry | Decided |
155
+ | `agents/settings/contexts/adr-auto-rule-consolidation.md` | Auto-Rule Consolidation (review-routing + transient-references pairs) | locked |
156
+ | `agents/settings/contexts/adr-frugality-savings-baseline.md` | Frugality Canon Savings Baseline | Decided |
157
+ | `agents/settings/contexts/adr-work-engine-rename.md` | Universal Execution Engine: rename `implement_ticket` → `work_engine` | Decided |
@@ -0,0 +1,104 @@
1
+ # Engine re-classification sweep (ADR-124 § 4)
2
+
3
+ > Committed 2026-07-23 as the mandatory re-evaluation sweep required by
4
+ > ADR-124 § 4. Population inventoried across every roadmap disposition
5
+ > (active, archive, later, skipped, stubs): **44 engine-shaped REJECT
6
+ > records** recorded 2026-06-01 → 2026-07-22. Each is re-classified under the
7
+ > ADR-124 class boundary — **A** (embedded, deterministic, in-process,
8
+ > command-invoked → adoptable), **B** (resident service/daemon → prohibited
9
+ > in core), **C** (network/LLM in the *build path* → prohibited by default).
10
+ >
11
+ > **Discipline this table enforces:** no silent re-openings, no silent
12
+ > re-affirmations. A Class-A re-opening becomes a *candidate* only — adoption
13
+ > stays demand- and benchmark-gated, and it enters build work solely through
14
+ > the ADR-124 sequencing rule (one native engine at a time). Class-B/C
15
+ > verdicts are re-affirmed with the class cited, so a later cycle cannot
16
+ > misattribute the reason to the runtime identity when it was really scope,
17
+ > demand, or redundancy.
18
+ >
19
+ > External references are cited by anonymized descriptor per
20
+ > `source-confidentiality`; no roadmap-file paths are linked per
21
+ > `no-roadmap-references` (this is a stable artifact).
22
+
23
+ ## How to read a row
24
+
25
+ `class` is the ADR-124 verdict. `disposition`:
26
+
27
+ - **RE-OPENED (candidate)** — Class A; the old reason does not survive ADR-124;
28
+ now gated by the named gate, not by existence.
29
+ - **RE-AFFIRMED** — the reject stands; the class is why (B = residency, C =
30
+ network/LLM build path).
31
+ - **STAY-KILLED / CLOSED** — Class A by mechanism but re-affirmed on
32
+ redundancy or demand grounds, not identity.
33
+
34
+ ## Headline engine rejects
35
+
36
+ | # | source cycle (anon.) | engine / capability | old verdict (quote) | class | disposition | gate |
37
+ |---|---|---|---|---|---|---|
38
+ | 1 | code-graph reference (Source G) | tree-sitter / AST extraction engine | "NO tree-sitter / AST engine in this repo" | **A** | **RE-OPENED** | this roadmap; falsification + Phase-5 bench for default-on |
39
+ | 2 | code-graph orchestration (skipped v1) | vector store / embedding service / always-on daemon in index path | "NO vector store, NO embedding service, NO always-on daemon" | split | vector-store **A** if embedded-deterministic; embedding-svc **C**; daemon **B** | per-item; vector-store not scheduled (no demand) |
40
+ | 3 | flow-learnings | MCP deferred-rule retrieval **server** | "council REJECT (2026-07-07)" | **B** | **RE-AFFIRMED** (resident server; residency is the trait — an MCP server can run stdio without network) | a *command-invoked* retriever is Class A → `later/road-to-deferred-rule-retriever`, unblock = 3 re-open conditions + Phase-5 verdict |
41
+ | 4 | flow-learnings | SQLite memory **service** / vector clocks / distributed memory | "SQLite memory *service* … sunset stands" | **B** | **RE-AFFIRMED** | embedded FTS5 (`node:sqlite`) is the Class-A slice, already pre-decided (ADR-116) |
42
+ | 5 | flow-learnings | web console / live monitoring UI | "no runtime to monitor" | **B** | **RE-AFFIRMED** | — |
43
+ | 6 | flow-learnings | runtime orchestration (work-stealing, load balancing) | cites ADR-088 | **B** | **RE-AFFIRMED** | ADR-088 literal text binds (federation); the work-stealing gloss is this council line, not ADR-088 |
44
+ | 7 | operator-runtime harvest (Source A/E) | browser **daemon** + L1–L6 security | "REJECT (core) → route to plugin … compiled runtime betrays no-runtime identity" | **B** | **RE-AFFIRMED**, plugin routing stands | reopen = the three domain-adoption hypotheses |
45
+ | 8 | operator-runtime harvest | `careful`/`freeze`/`guard` runtime enforcement | "REJECT (core) → route to plugin \| no-runtime scope trap" | **B** | **RE-AFFIRMED** (adopted as discipline only) | plugin repo |
46
+ | 9 | operator-runtime harvest | skill-graph / workflow-graph engine | "STAY KILLED … `work_engine/` already runs a directive graph" | **A** | **STAY-KILLED** (redundant with in-process `work_engine/`, not identity) | evidence of a real gap `work_engine` cannot serve |
47
+ | 10 | operator-runtime harvest | `model-overlays/` per-model behavioral patch | "GATE (default-off) … falsified at current scale (honest-null); duplicates RDP" | **A** | GATED (not forbidden) | reopen if a keystone probe exposes RDP failure on a real host |
48
+ | 11 | positioning-and-enforcement (Source A) | compiled **control plane** / runtime hooks | "no daemon … compiled control plane … runtime MCP hooks = Tier-2 opt-in/experimental" | **B** | **RE-AFFIRMED** (positioning asset) | flip if >60% of active users are on hook-capable hosts |
49
+ | 12 | subagent-value-realization (Source A subagent harvest) | in-process "swarm" Map / topology **engine** + consensus voting | "CUT → an in-process actor runtime is identity-rejected (no-runtime)" | **B** | **RE-AFFIRMED** by the ADR-109 identity floor (terminates-in-command is not enough) | the routing `_lib` deterministic fns are already Class A and shipped — only the runtime shell was rejected |
50
+ | 13 | orchestration-scope-decision (active) | swarm front (100+ agents, background daemon, memory DB) | "the swarm category ships … background daemon, memory DB" | **B** | **RE-AFFIRMED** | its own honest-exit decision; competitor shape stays out |
51
+ | 14 | persona-library harvest | host-plugin runtime router | "REJECT \| ADR-109 no-runtime floor + ADR-088 … reopen only via superseding ADR" | **B** | **RE-AFFIRMED** | needs its own superseding ADR (ADR-124 does not open it — runtime router on a host is Class B) |
52
+ | 15 | persona-library harvest | BYO MCP-memory 4-tool contract | "REJECT \| heavyweight memory removed (ADR-094)" | **C** | **RE-AFFIRMED** | ADR-094 binds |
53
+ | 16 | persona-library harvest | declarative projection-target registry + semantic adapters | "REJECT (council, unanimous) \| surface-matrix already stronger; zero demand" | **A** | **CLOSED** (redundancy + demand, not identity) | per-host defer on a real logged request |
54
+ | 17 | persona-library harvest | `catalog_delegate` auto-activation tool | "REJECT \| write-adjacent auto-activation; violates default-off + ADR-109" | **A** (logic) | **CLOSED** on auto-activation policy | not engine identity |
55
+ | 18 | universal-os reframe | UI control plane (Electron / web UI) | "Reject \| explicitly 'not a runtime'; host agents provide UI" | **B** | **RE-AFFIRMED** | — |
56
+ | 19 | universal-os reframe | memory governance per domain | "Reject \| stateless YAML/MD; memory is host responsibility" | **B** | **RE-AFFIRMED** | — |
57
+ | 20 | universal-os reframe | marketplace / pack-ecosystem infra | "Reject \| zero third-party packs exist … vapor work" | **B** | **RE-AFFIRMED** | when third-party packs exist |
58
+ | 21 | small-enhancements harvest | continuous-learning auto-write store; cron/dispatch; control-pane SQLite runtime; knowledge-graph MCP | "All other harvest REJECTS … stand" | **B**/**C** | **RE-AFFIRMED** | file-first `patterns/` was the only reversal |
59
+ | 22 | agent-memory removal | Layer-2 memory (PostgreSQL + pgvector + MCP + decay + trust) | "architecturally unsound for a 'no app runtime' suite" | **C** | **RE-AFFIRMED** (canonical Layer-2 sunset origin) | — |
60
+ | 23 | memory-retrieval economy | always-on worker/service, Chroma, Postgres; write-time LLM observation | Non-goals: "any always-on worker/service, Chroma, Postgres runtime"; "write-time LLM … unmetered cost" | **B**/**C** | **RE-AFFIRMED** | embedded FTS5 is the Class-A slice, measurement-gated (ADR-116) |
61
+ | 24 | opt-retrieval-and-memory (Source G protocol) | code-graph **engine** (vectors / embedded DB / background service) | "No vectors, no embedded DB, no background service — the Layer-2 sunset" | **B**/**C** for the rejected shapes | **RE-AFFIRMED** for services; the *protocol borrows* (edge confidence, BM25, budget envelope) were Class A and already shipped | the native deterministic engine (this roadmap) is the Class-A re-opening |
62
+ | 25 | knowledge-system | vector/semantic search, transcript-RAG; runtime policy engine | "Layer-2 sunset stands … no search infra"; "runtime policy engine … CUT" | **B**/**C** | **RE-AFFIRMED** (Jaccard similarity check adopted instead — Class A) | — |
63
+ | 26 | evidence-v2 project-intelligence | DB / vector store / daemon / runtime self-modifying store | "not add a DB, vector store, daemon, or runtime" | **B**/**C** | **RE-AFFIRMED** (suggestion-gated instead) | — |
64
+ | 27 | analysis-workbench | state-machine runtime / investigation daemon | "would violate the no-runtime boundary … human-gated re-invocation, not a daemon" | **B** | **RE-AFFIRMED** | achieved via human-gated re-invocation |
65
+ | 28 | second-brain | Obsidian vault; NLI contradiction detection; static HTML renderer | "rejected 2/2 … not in scope (decided, not deferred)" | NLI **C**; HTML renderer **B**; BM25 **A** (tripwire-gated) | **RE-AFFIRMED** | HTML renderer revisit-if browsing demand |
66
+ | 29 | retrieval-substrate hardening | watch-**daemon**; engine-fork / minisearch-class dep | "watch-daemon CUT … no engine-forks (ADR-061)" | watch-daemon **B**; BM25 core **A** (shipped) | **RE-AFFIRMED** | FTS5 pre-decided path |
67
+ | 30 | capability-governance | runtime gating **engine** / generic consent machinery | "deferred until N≥2 high-risk domains" | **A**/**B** | DEFERRED (not killed) | reopen at N≥2 high-risk domains; an in-process evaluator is Class A → see `later/road-to-policy-evaluation-core` |
68
+ | 31 | governance-moat | per-skill capability registry | "DO NOT BUILD. maintainability theater with no consumer" | **A** | **CLOSED** (demand/theater, positioning asset) | — |
69
+ | 32 | mcp-distribution | native SSE server | "explicitly rejected … build a bridge, not native" | **C** | **RE-AFFIRMED** | if revived, build a bridge |
70
+ | 33 | mcp-server | tools primitive / engine spawn / state writes / shell exec (Phase 1) | "read-only and instructional … no engine spawn, no state writes, no shell execution" | **C** | **RE-AFFIRMED** (hard read-only floor) | later phases |
71
+ | 34 | loop-engineering | closed measure→adjust loops (auto-demotion/pruning, bench-drift blocking) | "REJECT auto; stays manual … no daemon per ADR-088" | **B** | **RE-AFFIRMED** (manual gate adopted) | each row's revisit-if |
72
+ | 35 | video-deferred design | skill suite behaving as a runtime | "don't build a skill suite as if it were a runtime" | **B** | **RE-AFFIRMED** (meta-guardrail governing the whole class) | — |
73
+ | 36 | mcp-runtime stub | FastMCP / MCP TS SDK (runtime additions) | "FastMCP rejected on safety-audit width; MCP TS SDK on Node-runtime addition" | **C** | **RE-AFFIRMED** | minimal low-level SDK chosen |
74
+ | 37 | originality-gate / contributor-funnel (later/) | standalone zero-config validator engine | "KEEP, demand-gated — Phase-3 probe before any extraction" | **A** | DEMAND-GATED (extractable) | ≥N external-repo signals in the 90-day probe window |
75
+ | 38 | event-driven-discipline (skipped) | move discipline onto hook dispatcher (event-driven runtime) | "CANCELLED, all steps DROPPED … multi-week engineering" | **B** | **RE-AFFIRMED** (cost-rejected) | — |
76
+
77
+ ## Supporting / engine-adjacent rejects (completeness)
78
+
79
+ | # | source cycle (anon.) | item | class note |
80
+ |---|---|---|---|
81
+ | 39 | competitive-borrow | standalone queryable state-store; second similarity engine | **A** — folded into an existing in-process command; do not build a second similarity engine |
82
+ | 40 | lean-initial-context | embedding-router; rule-virtualization; task-classifier | embedding-router **C**; others **A**, "do not build unless re-opened" |
83
+ | 41 | capability-discoverability | per-skill Skill-DAG auto-chaining | **A** — rejected on a sequencing chicken-egg; reopen when a real dependency appears |
84
+ | 42 | contract-integrity (later/) | no-runtime config-surface guard (forbids `vector`/`daemon`/`decay`/`pgvector` keys, `setInterval`/`setTimeout`) | **enforcement mechanism** for B/C rejects — MUST gain a Class-A exception when it lands (ADR-124 § 6); see below |
85
+ | 43 | recursive-verification | router-learning loop; GAN builder | **B** — learning loop/daemon |
86
+ | 44 | autonomous-verify-loop | opus-pinned 3-agent GAN loop | **C** — LLM-in-loop; N=3 cap + judge discipline kept |
87
+
88
+ ## Class-A re-openings — the queue (sequencing rule: one at a time)
89
+
90
+ 1. **Native code-graph engine** (#1, #24) — RE-OPENED, built by this roadmap.
91
+ 2. **Command-invoked deferred-rule retriever** (#3) — `later/road-to-deferred-rule-retriever.md`, blocked on Phase-5 verdict + demand.
92
+ 3. **Deterministic policy-evaluation core** (#12 slice, #30) — `later/road-to-policy-evaluation-core.md`, blocked on Phase-5 verdict + demand.
93
+
94
+ No other row is scheduled. Every future Class-A adoption exits this table only with a named demand signal and its own roadmap.
95
+
96
+ ## Config-surface guard obligation (ADR-124 § 6)
97
+
98
+ Entry #42 is the live enforcement point: a planned no-runtime config-surface
99
+ guard denylists `vector`/`daemon`/`decay`/`pgvector` keys and
100
+ `setInterval`/`setTimeout` outside dev tooling. When that guard lands it MUST
101
+ carve out Class-A engine surfaces (this roadmap's `code_graph/` module and the
102
+ `hooks.code_graph` setting), or Class-A engines fail CI after the doctrine
103
+ flipped. This obligation is recorded here and cited from ADR-124 § 6; the guard
104
+ roadmap, when executed, cites this file back.
@@ -29,7 +29,7 @@ other install, no runtime.
29
29
 
30
30
  **event4u/agent-config** — a governed, no-runtime configuration layer for AI
31
31
  coding agents: audited skills, review personas, rules, and commands projected
32
- into 7+ hosts (Claude Code, Cursor, Windsurf, Copilot, …). Its distinguishing
32
+ into 20 hosts (Claude Code, Cursor, Windsurf, Copilot, Codex, Continue, …). Its distinguishing
33
33
  discipline: **every public claim is machine-checked** — the README binds each
34
34
  claim to resolvable evidence in a Claims-Ledger, and a generated proof page lets
35
35
  anyone reproduce the checks (`docs/proof.md`). Bring your own model.
@@ -37,7 +37,7 @@ No bespoke `BREAKING_CHANGES.md` is maintained — the changelog is the authorit
37
37
 
38
38
  | # | Registry | URL | Submission shape | Status | PR link |
39
39
  |---|---|---|---|---|---|
40
- | 1 | `punkpeye/awesome-mcp-servers` | <https://github.com/punkpeye/awesome-mcp-servers> | One-line entry under the Developer-Tools section + Glama score badge | 🟡 PR open (awaiting maintainer review) | <https://github.com/punkpeye/awesome-mcp-servers/pull/6865> |
40
+ | 1 | `punkpeye/awesome-mcp-servers` | <https://github.com/punkpeye/awesome-mcp-servers> | One-line entry under the Developer-Tools section + Glama score badge | ❌ **PR closed unmerged 2026-06-11** (verified live 2026-07-25 via `gh pr view 6865`; this row previously read "PR open" for six weeks) | <https://github.com/punkpeye/awesome-mcp-servers/pull/6865> |
41
41
  | 2 | `mcp.so` | <https://mcp.so/> | Submit via the directory form; same one-line shape | ✅ submitted (maintainer-confirmed 2026-06) | — |
42
42
  | 3 | `mcpservers.org` | <https://mcpservers.org/> | Submit via the directory form; same one-line shape (verify URL current at submission time) | ✅ submitted (maintainer-confirmed 2026-06) | — |
43
43
  | 4 | `glama.ai` | <https://glama.ai/mcp/servers/event4u-app/agent-config> | Server page live; score badge embedded in the awesome-mcp-servers entry (PR #6865) | ✅ listed (server page + badge return HTTP 200, verified 2026-06-08) | <https://glama.ai/mcp/servers/event4u-app/agent-config> |
@@ -50,37 +50,46 @@ Use this exact text for the awesome-list entry. Adjust the link anchor per direc
50
50
  - [event4u/agent-config](https://github.com/event4u-app/agent-config#readme) — Universal AI Agent OS. Audited skills, governance rules, commands, and templates for Claude Code, Cursor, Windsurf, Copilot. Bring your own provider.
51
51
  ```
52
52
 
53
- ## PR body update — 3.2.0 reality
53
+ ## Submission body — ledger-bound, version-agnostic
54
54
 
55
- When the maintainer opens the PR / posts the directory entry, the
56
- description block carries the concrete reality the 3.2.0 review
57
- named. Reviewer verbatim quote: *"deutlich mehr vorzuweisen als bei
58
- jedem vorherigen Erwähnungszeitpunkt."* The numbers below mirror the <!-- md-language-check: ignore -->
59
- 3.2.0 release notes and the `task adoption:status` snapshot from
60
- that release; refresh them before posting if a later release has
61
- shipped.
55
+ Reuse this block in any directory submission or PR description.
56
+
57
+ It deliberately carries **no artefact counts and no version number.** The block
58
+ this replaced described version 3.2.0 with figures like "4929 tests" and role
59
+ experiences that no longer exist; it sat here for months while the package
60
+ reached 9.7.0, because this file is not scanned by the artefact-count gate
61
+ (it is now — see § Drift guard). A stale number on a public growth surface is
62
+ precisely what this package positions against, so the shape below cannot rot:
63
+ every figure resolves through [`docs/CLAIMS.md`](../CLAIMS.md), and anything you
64
+ add needs a ledger entry or it does not go in.
62
65
 
63
66
  ```
64
- event4u/agent-config 3.2.0 ships:
65
-
66
- - 4929 tests across Python + TypeScript matrix (Linux + macOS).
67
- - /knowledge cluster — local-only document ingestion via markitdown;
68
- per-namespace memory_retrieve with trust scoring.
69
- - Three role experiences (galabau / content-creator / consultant) +
70
- daily workspace browser surface in the modern Preact shell.
71
- - Cinematic AI-video pipeline (/video:from-script, /video:scene,
72
- /video:storyboard, /video:stitch) — provider-agnostic; dry-run
73
- default; the package never sees API keys.
74
- - 9 Iron-Law rules + tier-1/2 routed kernel; ai-council
75
- second-opinion loop for high-impact decisions.
76
-
77
- Bring your own provider (Anthropic / OpenAI / Google / Cloudflare).
78
- No SaaS; no remote sync; npx-quickstart installs in ~3 minutes.
67
+ event4u/agent-config — a governance and content layer for AI coding agents,
68
+ compiled into each host's native format. Bring your own provider: no SaaS, no
69
+ remote sync, and no background daemon (claim: no-runtime-daemon).
70
+
71
+ What is different is falsifiability. Every public claim binds to evidence a
72
+ skeptic can reproduce on a fresh checkout, and the runs where the layer changed
73
+ nothing are published too (claim: positioning-honest-nulls). The measured wedge
74
+ is deliberately narrow: on weak or cheap hosts the `essential` tier transplants
75
+ scope and downstream-change discipline at a measured 1.71x corpus cost, and it
76
+ switches itself off on hosts where the effect measured null.
77
+
78
+ Start at the proof, not the catalog:
79
+ https://event4u-app.github.io/agent-config/proof/
79
80
  ```
80
81
 
81
- Drop this block into the PR description once and reuse it across
82
- the three registries; it is the "deutlich mehr vorzuweisen" frame
83
- condensed to a half-screen.
82
+ Before pasting, verify: `task check-claims` is green on `main`, and each
83
+ `claim:` id above still resolves to a `backed` entry. Artefact counts belong in
84
+ the README badges (`update_counts` owns them) — never hand-typed into a listing.
85
+
86
+ ## Drift guard
87
+
88
+ `docs/distribution/registries.md` is in
89
+ [`check_artefact_count_messaging`](../../src/scripts/check_artefact_count_messaging.ts)
90
+ `SURFACES`, so any artefact count that appears here must match the canonical
91
+ number or CI fails. That is the structural fix for the rot described above:
92
+ the previous block went stale silently because nothing watched this file.
84
93
 
85
94
  ## Submission checklist
86
95
 
@@ -31,6 +31,13 @@ it a two-tier experience — strong on Claude, absent on Cursor/Windsurf/Copilot
31
31
  So the universal lever is the compile-time layer; runtime hooks are an opt-in
32
32
  **bonus** on the hosts that can run them, never the floor.
33
33
 
34
+ The ADR-124 code-graph nudge is a case in point: on hook-capable hosts the
35
+ default-off `code-graph` PreToolUse hook surfaces "query the graph first" once
36
+ per session; on instruction-file hosts the same intent rides the always-loaded
37
+ [`external-code-graph-interop`](../src/rules/external-code-graph-interop.md)
38
+ rule and the [`code-intelligence`](../src/skills/code-intelligence/SKILL.md)
39
+ skill — the capability degrades gracefully, it does not disappear.
40
+
34
41
  **Where MCP fits.** MCP is a *transport* surface, not a third enforcement layer.
35
42
  On a host that runs MCP servers, MCP is one path by which a tool lifecycle (and
36
43
  therefore the runtime-hook column above) can become available — but MCP presence
@@ -1,6 +1,6 @@
1
1
  # Featured Skills
2
2
 
3
- A curated subset of the 278 skills. Three tiers, one per primary audience. Full catalog lives in [`dist/agent-src/skills/`](../dist/agent-src/skills/); see also [`docs/catalog.md`](catalog.md) for the complete index and [`docs/featured-commands.md`](featured-commands.md) for command-level highlights.
3
+ A curated subset of the 281 skills. Three tiers, one per primary audience. Full catalog lives in [`dist/agent-src/skills/`](../dist/agent-src/skills/); see also [`docs/catalog.md`](catalog.md) for the complete index and [`docs/featured-commands.md`](featured-commands.md) for command-level highlights.
4
4
 
5
5
  > **Eval-gated messaging note.** Until `task bench --corpus non-dev` reports `selection_accuracy >= 0.60` (see `road-to-product-adoption.md` Phase 1), this page is documentation, not marketing. The entries below are the candidates the corpus tests against; their description quality is what the eval validates.
6
6
 
@@ -92,4 +92,4 @@ task lint-featured-skills
92
92
 
93
93
  CI runs this in `taskfiles/ci-fast.yml`. Stale entries (renamed / removed skill or command) fail the build. See [`scripts/lint_featured_skills.py`](../src/scripts/lint_featured_skills.py) for the matcher.
94
94
 
95
- → Browse all 278 skills: [`dist/agent-src/skills/`](../dist/agent-src/skills/) · all 190 commands: [`dist/agent-src/commands/`](../dist/agent-src/commands/)
95
+ → Browse all 281 skills: [`dist/agent-src/skills/`](../dist/agent-src/skills/) · all 190 commands: [`dist/agent-src/commands/`](../dist/agent-src/commands/)
@@ -2,7 +2,7 @@
2
2
 
3
3
  > Pick the entry that matches what you do day-to-day. Each section names the three skills you will reach for first and shows whether MCP (no terminal) or CLI (terminal) is the simpler install path for that role.
4
4
 
5
- `agent-config` ships 278 skills, 105 governed rules, and 190 commands. You do not need all of them. Each role below filters to the slice that pays back in week one; the rest stays available and shows up on demand when a task references it.
5
+ `agent-config` ships 281 skills, 107 governed rules, and 190 commands. You do not need all of them. Each role below filters to the slice that pays back in week one; the rest stays available and shows up on demand when a task references it.
6
6
 
7
7
  > **Taglines at a glance →** [`docs/role-experiences.md`](role-experiences.md) — the one-line pitch per role experience, in one table.
8
8