@event4u/agent-config 9.6.0 → 9.7.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 (36) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +63 -942
  3. package/README.md +17 -17
  4. package/dist/agent-src/README.md +2 -2
  5. package/dist/agent-src/rules/downstream-changes.md +31 -1
  6. package/dist/agent-src/skills/agent-docs-writing/SKILL.md +34 -16
  7. package/dist/agent-src/skills/agents-md-thin-root/SKILL.md +9 -9
  8. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  9. package/dist/agent-src/templates/github-workflows/doc-impact.yml +101 -0
  10. package/dist/discovery/deprecation-report.md +1 -1
  11. package/dist/discovery/discovery-manifest.json +5 -5
  12. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  13. package/dist/discovery/discovery-manifest.summary.md +1 -1
  14. package/dist/discovery/orphan-report.md +1 -1
  15. package/dist/discovery/packs.json +2 -2
  16. package/dist/discovery/trust-report.md +1 -1
  17. package/dist/discovery/workspaces.json +2 -2
  18. package/dist/mcp/awesome-mcp-servers.row.md +1 -1
  19. package/dist/mcp/mcp-cloudflare-catalogue.json +1 -1
  20. package/dist/mcp/registry-manifest.json +3 -3
  21. package/docs/CLAIMS.md +2 -1
  22. package/docs/archive/CHANGELOG-6.0.0-overview.md +953 -0
  23. package/docs/benchmark.md +33 -9
  24. package/docs/decisions/ADR-122-adversarial-verification-council.md +30 -0
  25. package/docs/decisions/ADR-123-runtime-security-scope-and-spawn-hardening.md +31 -0
  26. package/docs/spawn-site-policy.md +72 -0
  27. package/docs/threat-model.md +1 -1
  28. package/package.json +2 -2
  29. package/src/agent-src/README.md +2 -2
  30. package/src/scripts/_lib/adversarial_bench_score.ts +106 -0
  31. package/src/scripts/_lib/spawn_env.ts +24 -4
  32. package/src/scripts/bench_adversarial_council.ts +292 -0
  33. package/src/scripts/check_no_new_legacy_path.ts +2 -0
  34. package/src/scripts/check_source_pointer_freshness.ts +165 -0
  35. package/src/scripts/hooks/dispatch_hook.ts +5 -1
  36. package/src/scripts/lint_readme_serial_comma.ts +169 -0
package/README.md CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
  **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
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 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.
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.
18
18
 
19
19
  ### What's different
20
20
 
@@ -27,13 +27,13 @@ It is both deep **and** disciplined — and honest about what it deliberately is
27
27
 
28
28
  **What it deliberately is *not*** — a content + governance layer, not a runtime: **no background daemon, no separate state database, no self-rewriting memory, no auto-build pipeline.** The host agent runs the loop; every learned change is human-reviewed; the same layer stays portable across tools. Capability without a process to babysit.
29
29
 
30
- > **Where this comes from (honest provenance).** The skills, rules, and personas
30
+ > **Where this comes from (honest provenance).** The skills, rules and personas
31
31
  > are distilled from real production work on TypeScript and PHP codebases. The
32
32
  > governance mechanics are stack-agnostic, but the domain heuristics are richest
33
33
  > where they were forged — treat coverage on other stacks as promising, not
34
- > proven, and tell us where it falls short.
34
+ > proven and tell us where it falls short.
35
35
 
36
- See exactly [what works on which host](docs/capability-matrix.md), or jump to [things you can do in a minute](docs/cookbook.md).
36
+ See exactly [what works on which host](docs/capability-matrix.md) or jump to [things you can do in a minute](docs/cookbook.md).
37
37
 
38
38
  ### Pick your profile — six entry paths
39
39
 
@@ -100,14 +100,14 @@ is platform operation, not a user-work flow.)
100
100
 
101
101
  > **Creative Pack — cinematic AI video.** script → character-locked image → motion+audio prompt → provider render → stitched clip, with `AIV_DRYRUN=true` as the cost-safety default. A first-class capability inside the **content / creator** experience — no longer the package's headline. See [`/video:from-script`](.augment/commands/video/from-script.md).
102
102
 
103
- > **Legal Pack — not legal advice.** The EU/DE legal pack (contract/NDA/DPA review, triage) is a **research-and-drafting aid only** — it does not provide legal advice, does not replace a qualified lawyer, and must not be relied on for any concrete matter. It produces general information and general templates, never individual-case examination. Read [`LEGAL_NOTICE.md`](LEGAL_NOTICE.md) before use.
103
+ > **Legal Pack — not legal advice.** The EU/DE legal pack (contract/NDA/DPA review, triage) is a **research-and-drafting aid only** — it does not provide legal advice, does not replace a qualified lawyer and must not be relied on for any concrete matter. It produces general information and general templates, never individual-case examination. Read [`LEGAL_NOTICE.md`](LEGAL_NOTICE.md) before use.
104
104
 
105
105
  > Full catalog — every skill, rule, command, guideline: [`docs/catalog.md`](docs/catalog.md). The headline is the **experience** (profile + packs) **and** the depth behind it.
106
106
 
107
107
  ## Use it in your project
108
108
 
109
109
  Run from a consumer repo — bootstrap via `npx`, the agent picks up
110
- your stack, and you ship work end-to-end. New install? Start with the
110
+ your stack and you ship work end-to-end. New install? Start with the
111
111
  [Quickstart](#quickstart). Already installed? [Supported tools](#supported-tools)
112
112
  shows the wired AIs; [`docs/featured-commands.md`](docs/featured-commands.md)
113
113
  lists the end-to-end workflows (`/implement-ticket`, `/work`,
@@ -119,8 +119,8 @@ lists the end-to-end workflows (`/implement-ticket`, `/work`,
119
119
 
120
120
  Don't take the claims on trust — **verify them.** [`docs/proof.md`](docs/proof.md)
121
121
  is generated from source: a claim→evidence table (every public claim binds to a
122
- resolvable pointer, or CI fails), honest-null benchmarks *including the runs where
123
- the package changed nothing*, and a "verify it yourself" block you run on a fresh
122
+ resolvable pointer or CI fails), honest-null benchmarks *including the runs where
123
+ the package changed nothing* and a "verify it yourself" block you run on a fresh
124
124
  checkout. The proof page fails CI if it drifts from its sources — reproducibility
125
125
  is the proof. Browse it on the deployed docs site — the proof page is the primary entry:
126
126
  [event4u-app.github.io/agent-config/proof/](https://event4u-app.github.io/agent-config/proof/).
@@ -132,7 +132,7 @@ find-replace re-skin PRs here runs on your catalog too —
132
132
  [`docs/anti-reskin-gate.md`](docs/anti-reskin-gate.md).
133
133
 
134
134
  Audit-disciplined by construction — every memory consult, decision
135
- key, and hook concern lands in `agents/runtime/state/` so you can replay it.
135
+ key and hook concern lands in `agents/runtime/state/` so you can replay it.
136
136
  [Core principles](#core-principles) names the four invariants;
137
137
  [What `agent-config` is — and what it isn't](#what-agent-config-is--and-what-it-isnt)
138
138
  draws the scope boundary.
@@ -207,7 +207,7 @@ Migrating from a v1.x install? `npx @event4u/agent-config migrate` — full note
207
207
 
208
208
  A **content layer** — skills, rules, commands, guidelines, personas — distributed via npm and projected into every supported AI tool's native config format. It follows the [Agent Skills open standard](https://agentskills.io).
209
209
 
210
- It is **not** an agent runtime. The agent loop, the LLM dispatcher, and tool orchestration stay with the host tool (Claude Code, Augment, Cursor, Cline, Windsurf, Gemini CLI, Copilot). Think of it as a playbook and style guide for those tools — not a replacement.
210
+ It is **not** an agent runtime. The agent loop, the LLM dispatcher and tool orchestration stay with the host tool (Claude Code, Augment, Cursor, Cline, Windsurf, Gemini CLI, Copilot). Think of it as a playbook and style guide for those tools — not a replacement.
211
211
 
212
212
  | In scope | Out of scope |
213
213
  |---|---|
@@ -254,7 +254,7 @@ refine → memory → analyze → plan → implement → test → verify → rep
254
254
  - **Reviews** the diff through four judges (bugs, security, tests, code quality).
255
255
  - **Reports** changes, verdicts, follow-ups — then stops. `/commit` and `/pr:create` are suggestions, never auto-run.
256
256
 
257
- Any ambiguity halts the flow with numbered options — never a silent guess. Persona comes from `.agent-settings.yml` (`roles.active_role`): `senior-engineer` (default), `qa`, or `advisory` (plan-only).
257
+ Any ambiguity halts the flow with numbered options — never a silent guess. Persona comes from `.agent-settings.yml` (`roles.active_role`): `senior-engineer` (default), `qa` or `advisory` (plan-only).
258
258
 
259
259
  → [Command reference](dist/agent-src/commands/implement-ticket.md) · [Flow contract](docs/contracts/implement-ticket-flow.md)
260
260
 
@@ -316,7 +316,7 @@ Create the user file interactively: `/agents user init` ([schema](docs/contracts
316
316
 
317
317
  ### Self-hosted MCP on Cloudflare — zero local install
318
318
 
319
- Skills, commands, rules, and guidelines can be served as an MCP endpoint from your own Cloudflare Worker — any MCP client (Claude Desktop, Claude Code, Cursor, Zed, Continue, hosted agents) talks to it over HTTP. Two auth modes: `public` (default, OSS read-only deploys) and `bearer-auth` (operator opt-in, `MCP-Token` Wrangler secret).
319
+ Skills, commands, rules and guidelines can be served as an MCP endpoint from your own Cloudflare Worker — any MCP client (Claude Desktop, Claude Code, Cursor, Zed, Continue, hosted agents) talks to it over HTTP. Two auth modes: `public` (default, OSS read-only deploys) and `bearer-auth` (operator opt-in, `MCP-Token` Wrangler secret).
320
320
 
321
321
  ```bash
322
322
  task mcp:cloud:login # one-time, opens browser
@@ -340,13 +340,13 @@ task mcp:cloud:secret-put # opt in to bearer-auth (recommended for private de
340
340
 
341
341
  The Hard Floor on organization-mode features (SSO, central policy, OAuth connectors, team-context) is preserved by design — they stay cancelled until a real first customer + funded security audit lifts them. The small-team recipe is the supported path in the meantime.
342
342
 
343
- > *The 9.3/10 feedback round (2026-05-25) re-asked for OAuth knowledge connectors, IAM / org governance, and organization-shared memory. Each is a stable cancellation row in [`team-deployment-posture`](docs/deploy/team-deployment-posture.md) under the same three release gates — recruited team customer · funded audit · maintainer ADR.*
343
+ > *The 9.3/10 feedback round (2026-05-25) re-asked for OAuth knowledge connectors, IAM / org governance and organization-shared memory. Each is a stable cancellation row in [`team-deployment-posture`](docs/deploy/team-deployment-posture.md) under the same three release gates — recruited team customer · funded audit · maintainer ADR.*
344
344
 
345
345
  ---
346
346
 
347
347
  ## Harness expectations
348
348
 
349
- Three classes of install/runtime behaviour look like package bugs but are host-harness behaviour the package cannot control — sibling-plugin namespaces (`codex:*`, `cc-gemini-plugin:*`), deferred tools surfaced via `ToolSearch`, and cross-scope skill drift (real bug, fixed in the distribution-channels track). Diagnostics + the package's response: [`docs/contracts/harness-expectations.md`](docs/contracts/harness-expectations.md). First step when a skill appears twice: `task probe:skills`.
349
+ Three classes of install/runtime behaviour look like package bugs but are host-harness behaviour the package cannot control — sibling-plugin namespaces (`codex:*`, `cc-gemini-plugin:*`), deferred tools surfaced via `ToolSearch` and cross-scope skill drift (real bug, fixed in the distribution-channels track). Diagnostics + the package's response: [`docs/contracts/harness-expectations.md`](docs/contracts/harness-expectations.md). First step when a skill appears twice: `task probe:skills`.
350
350
 
351
351
  ## Supported tools
352
352
 
@@ -477,7 +477,7 @@ Browse content: [all commands](dist/agent-src/commands/) · [skills catalog](doc
477
477
  ## Troubleshooting
478
478
 
479
479
  First stop for any install problem: `agent-config doctor` — it flags a
480
- missing-from-`PATH` binary, binary↔plugin version drift, stale orphans, and
480
+ missing-from-`PATH` binary, binary↔plugin version drift, stale orphans and
481
481
  manifest issues, each with a one-line fix hint.
482
482
 
483
483
  ### A new command / skill is missing in Claude Code after an upgrade
@@ -486,7 +486,7 @@ Under the single-surface model, `agent-config upgrade` refreshes the
486
486
  `~/.claude/` file projection — that IS the content surface, so a fresh
487
487
  session picks the new commands up directly. If commands are still missing,
488
488
  the usual cause is a leftover **marketplace plugin**: it is a git-SHA
489
- snapshot that never moves with the npm upgrade, and it shadows nothing —
489
+ snapshot that never moves with the npm upgrade and it shadows nothing —
490
490
  it just lists everything twice while lagging behind. Remove it:
491
491
 
492
492
  ```bash
@@ -521,7 +521,7 @@ Only the initial `npm install -g` hard-aborts an upgrade. Every later step
521
521
  (global re-deploy with hook registration, settings sync, wrapper + git-hook
522
522
  refresh) runs independently — a single failed step is reported in the
523
523
  end-of-run summary instead of silently skipping the rest. Re-run
524
- `agent-config upgrade` to converge, and use `agent-config doctor` to name
524
+ `agent-config upgrade` to converge and use `agent-config doctor` to name
525
525
  anything left in a mixed state.
526
526
 
527
527
  ### `agent-config: command not found` / hooks stopped firing
@@ -1,8 +1,8 @@
1
1
  # Agent Infrastructure
2
2
 
3
3
  > **⚠️ DO NOT edit files in `dist/agent-src/` or `.augment/` directly.**
4
- > The source of truth is `.agent-src.uncondensed/`. Edit there, then run `task sync`.
5
- > See `.agent-src.uncondensed/commands/condense.md` for the full workflow.
4
+ > The source of truth is `src/` (`src/skills/`, `src/rules/`, `src/agent-src/`). Edit there, then run `task sync`.
5
+ > See the `source-of-truth` rule and the `/condense` command for the full workflow.
6
6
 
7
7
  This directory contains the shared agent infrastructure: skills, commands, rules, guidelines,
8
8
  templates, and contexts that power the AI coding assistant across all projects.
@@ -45,7 +45,36 @@ After editing any file, search for **all** of these:
45
45
  | **Config / bindings** | Search service providers, config files | Update class references in DI bindings |
46
46
  | **API schemas / OpenAPI** | Check controller attributes | Update if response structure changed |
47
47
  | **Routes** | Search `routes/` for controller references | Update after controller rename/move |
48
- | **Documentation** | Search `agents/`, `docs/` for references | Update if behavior or API changed |
48
+ | **Documentation** | Search `agents/`, `docs/`, `README`, examples for references | Update the doc that **describes** the changed surface — see Doc-Impact below |
49
+
50
+ ## Doc-Impact — docs follow code (same change)
51
+
52
+ ```
53
+ A CHANGE TO A PUBLIC SURFACE IS INCOMPLETE UNTIL THE DOC THAT
54
+ DESCRIBES IT IS UPDATED IN THE SAME CHANGE. A DOC MAKING A CLAIM
55
+ THE CODE NOW CONTRADICTS IS A BROKEN CHANGE, NOT A STYLE NIT.
56
+ ```
57
+
58
+ **Public surfaces** whose change triggers a doc update: HTTP route /
59
+ endpoint · exported function / class signature · CLI command or flag ·
60
+ config / settings key · env var · DB schema or migration · event
61
+ payload. Update the doc that describes it — README, API / OpenAPI docs,
62
+ AGENTS.md, code examples, CHANGELOG — in the same commit.
63
+
64
+ **Drift = a falsifiable-claim contradiction**, not incompleteness. Fire
65
+ when a reader following the doc would be misled: an endpoint that no
66
+ longer exists, a wrong return type, a renamed key, a broken example. Do
67
+ **not** fire on "the doc could be more detailed" — completeness is a
68
+ quality nit, not drift.
69
+
70
+ **Escape hatch** (no false-positive fatigue): refactor-only / no
71
+ public-surface change → no doc obligation. If a surface changed but
72
+ genuinely needs no doc edit, state the one-line reason instead of
73
+ editing a doc to satisfy the rule.
74
+
75
+ Detection + the framework-agnostic surface→doc map (Laravel / Symfony /
76
+ Next.js / Python / Go) live in [`agent-docs-writing`](../skills/agent-docs-writing/SKILL.md)
77
+ § Doc-Impact — run it after every code change.
49
78
 
50
79
  ## Breaking changes
51
80
 
@@ -78,3 +107,4 @@ After completing all downstream changes:
78
107
  3. **No broken types / signatures** — project's type-checker (PHPStan / Psalm, TypeScript, mypy / pyright, `go vet`, `cargo check`).
79
108
  4. **No stale references** — grep for the old name / namespace / import path to confirm zero results.
80
109
  5. **No own-orphans** — the same sweep applied to the new diff: identifiers whose last reference disappeared in a file this diff touched are removed in the same diff (see [`minimal-safe-diff § Own-orphan cleanup`](minimal-safe-diff.md#own-orphan-cleanup)); pre-existing dead code stays.
110
+ 6. **No doc drift** — a public surface changed this diff has its describing doc updated (or the one-line no-doc-needed reason stated), per Doc-Impact above.
@@ -189,29 +189,47 @@ After making changes, check if docs need updating:
189
189
  - **Structural changes** → update affected docs in `./agents/`
190
190
  - **New patterns** → update or create guideline docs
191
191
 
192
- ## Doc sync check (after code changes)
192
+ ## Doc-Impact — the mandatory check after every code change
193
193
 
194
- After completing a significant code change, run this mental checklist:
194
+ This is the detection procedure the [`downstream-changes`](../../rules/downstream-changes.md)
195
+ § Doc-Impact obligation points at. **Run it after every code change** — the
196
+ *detection* is non-optional; the human still confirms the actual edit.
195
197
 
196
- | What changed | Doc to check |
198
+ **Step 1 — did a public surface change?** Framework-agnostic surface list:
199
+
200
+ | Public surface changed | Doc that describes it — update in the same change |
197
201
  |---|---|
198
- | Database schema (migration) | `agents/reference/docs/database-setup.md` |
199
- | New API endpoint | OpenAPI annotations, `AGENTS.md` API section |
200
- | New module created | Create `{module_root}/{Module}/{agent_folder}/` (resolve via `modules.root_paths` + `modules.agent_folder`) |
201
- | Service/repository signature changed | Check if referenced in `agents/reference/docs/services-and-repos.md` |
202
- | New environment variable | `.env.example`, `AGENTS.md` environment section |
203
- | Docker/compose change | `agents/reference/docs/docker.md`, `Makefile` documentation |
204
- | New Artisan command | `AGENTS.md` commands section |
205
- | New pattern/convention introduced | Relevant guideline in `.augment/guidelines/` |
206
-
207
- **When unsure** — ask with numbered options:
202
+ | HTTP route / endpoint (Laravel `routes/`, Next.js `app/api`, FastAPI/Express handlers, Go mux) | OpenAPI / API reference, `README` usage, `AGENTS.md` API section |
203
+ | Exported function / class / method signature | The doc/example that calls it; `agents/reference/docs/services-and-repos.md` if referenced |
204
+ | CLI command or flag | `README` usage, `AGENTS.md` commands section, `--help` text |
205
+ | Config / settings key | Settings doc, `README` config section, schema/example file |
206
+ | Environment variable | `.env.example`, `AGENTS.md` environment section |
207
+ | DB schema / migration | `agents/reference/docs/database-setup.md` |
208
+ | Event payload / job constructor | The listener/consumer doc that documents the contract |
209
+ | New module | `{module_root}/{Module}/{agent_folder}/` (resolve via `modules.root_paths` + `modules.agent_folder`) |
210
+ | New pattern / convention | Relevant guideline in `.augment/guidelines/` |
211
+ | Architectural decision | [`adr-create`](../adr-create/SKILL.md) — numbered ADR + index regen |
212
+
213
+ **Step 2 — apply the fire/no-fire test.** Drift is a **falsifiable-claim
214
+ contradiction**, not incompleteness:
215
+
216
+ - **FIRE** (doc is now wrong — a reader would be misled): endpoint no longer
217
+ exists, wrong return type, renamed key, removed flag, broken code example.
218
+ - **DO NOT FIRE** (completeness / quality only): the doc is high-level and
219
+ omits a new internal detail it never claimed to list; "could be clearer".
220
+
221
+ **Step 3 — escape hatch.** Refactor-only / no public-surface change → no doc
222
+ obligation. Surface changed but genuinely needs no doc edit → state the
223
+ one-line reason; never edit a doc just to satisfy the rule (false-positive
224
+ fatigue is worse than a missed nit).
225
+
226
+ **When a doc edit IS needed but you are unsure of the wording** — flag it with
227
+ numbered options; do NOT auto-rewrite prose without the user's knowledge:
208
228
  ```
209
229
  > 1. Yes — update the docs
210
- > 2. No — leave as-is
230
+ > 2. No — leave as-is (reason: …)
211
231
  ```
212
232
 
213
- Do NOT auto-update docs without the user's knowledge. Flag what needs updating and let the user decide.
214
-
215
233
  ## Rules
216
234
 
217
235
  - All `.md` files must be in **English**.
@@ -21,7 +21,7 @@ packs:
21
21
 
22
22
  Use when:
23
23
  - Editing `AGENTS.md` at the package root.
24
- - Editing `packages/core/.agent-src.uncondensed/templates/AGENTS.md` (consumer-shipped template).
24
+ - Editing `src/agent-src/templates/AGENTS.md` (consumer-shipped template).
25
25
  - Reviewing a PR that changes either file.
26
26
  - Running `/optimize/agents`.
27
27
  - A budget meter (`scripts/measure_augment_budget.ts`) flags the package-root AGENTS.md as the dominant cost.
@@ -29,7 +29,7 @@ Use when:
29
29
  ## Do NOT
30
30
 
31
31
  - Edit `.github/copilot-instructions.md` with this skill (use `copilot-agents-optimization` instead).
32
- - Edit other `.md` files under `.augment/`, `packages/*/.agent-src.uncondensed/`, or `agents/` with this skill.
32
+ - Edit other `.md` files under `.augment/`, `src/`, or `agents/` with this skill.
33
33
  - Add a section to AGENTS.md without first checking whether an outboard target already exists in `agents/settings/contexts/` or `docs/contracts/`.
34
34
  - Replace prose with a bare link `[label](path)` — every pointer needs a *why*-clause ≥ 60 chars or it does not count toward the 40 % ratio.
35
35
  - Reuse the package-root anatomy in the consumer template — caps and target paths differ.
@@ -47,7 +47,7 @@ Every entry describes **what** the project does or **where** to learn more — n
47
47
  | File | FAIL above | WARN above | Target |
48
48
  |---|---|---|---|
49
49
  | `AGENTS.md` (package root) | 3,000 chars | 2,800 chars | ≤ 2,800 |
50
- | `packages/core/.agent-src.uncondensed/templates/AGENTS.md` (consumer) | 2,500 chars | 2,300 chars | ≤ 2,300 |
50
+ | `src/agent-src/templates/AGENTS.md` (consumer) | 2,500 chars | 2,300 chars | ≤ 2,300 |
51
51
 
52
52
  Char-count is raw file size (`wc -c`), frontmatter included. Enforcement: `scripts/lint_agents_md.ts` (Phase 7), wired into the package's CI pipeline via the `lint-agents-md` task. WARN is a soft signal in CI; FAIL blocks merge.
53
53
 
@@ -85,7 +85,7 @@ Every substantive pointer specifies, on the same line or the immediately followi
85
85
 
86
86
  ## The contract — emergency-triage block
87
87
 
88
- Every Thin-Root AGENTS.md MUST contain an **Emergency Triage** section verbatim from `packages/core/.agent-src.uncondensed/contexts/contracts/emergency-triage-block.md` (Phase 6.4 will create that file as the canonical source). The block lists the five questions a host agent answers from the root file alone when network / tool access is degraded:
88
+ Every Thin-Root AGENTS.md MUST contain an **Emergency Triage** section verbatim from `src/agent-src/contexts/contracts/emergency-triage-block.md` (Phase 6.4 will create that file as the canonical source). The block lists the five questions a host agent answers from the root file alone when network / tool access is degraded:
89
89
 
90
90
  1. What is this repository?
91
91
  2. What language(s) does this repository accept?
@@ -99,22 +99,22 @@ Each answer must fit on one line. The block exists so the root never silently de
99
99
 
100
100
  1. **Measure baseline.** `wc -c AGENTS.md` and `./scripts-run src/scripts/measure_augment_budget`. Record current char-count and the gap to 2,200 / 2,500.
101
101
  2. **Inventory sections.** List every `## ` heading and its char-count. Mark each as `keep-inline` (Iron-Law-adjacent, ≤ 200 chars, no good outboard target) or `outboard-candidate` (longer-form prose, table-only sections, narrative).
102
- 3. **Identify outboard targets.** For each `outboard-candidate`, name the destination — `packages/core/.agent-src.uncondensed/contexts/`, `docs/contracts/`, an existing rule body, an existing skill body. Never invent a new top-level directory.
102
+ 3. **Identify outboard targets.** For each `outboard-candidate`, name the destination — `src/agent-src/contexts/`, `docs/contracts/`, an existing rule body, an existing skill body. Never invent a new top-level directory.
103
103
  4. **Move content; insert pointer.** Cut the section into the target file. Replace it in AGENTS.md with a single substantive pointer per anatomy above. Verify the *why*-clause length.
104
104
  5. **Re-measure.** `wc -c AGENTS.md` again. If above 2,200, repeat steps 2–4 on the next-largest section. Above 2,500 = must outboard further before commit.
105
105
  6. **Validate pointer ratio.** Count non-blank lines and substantive-pointer lines. Ratio < 0.40 = collapse decorative or boilerplate lines into a single pointer or remove.
106
- 7. **Verify emergency-triage block.** Diff the in-file block against `packages/core/.agent-src.uncondensed/contexts/contracts/emergency-triage-block.md`. Drift = revert to canonical.
106
+ 7. **Verify emergency-triage block.** Diff the in-file block against `src/agent-src/contexts/contracts/emergency-triage-block.md`. Drift = revert to canonical.
107
107
  8. **Run lints.** `task lint-agents-md && task check-refs && task lint-skills`. All green before commit.
108
108
 
109
109
  ## Procedure — apply Thin-Root to consumer template
110
110
 
111
- Same procedure, applied to `packages/core/.agent-src.uncondensed/templates/AGENTS.md`. Hard cap shifts to 2,000 / 1,700. The consumer template intentionally lacks the package-self-references — its pointers target files that exist in the **consumer's** repo (`.augment/skills/`, `agents/settings/contexts/`, ...), not this package's authoring tree.
111
+ Same procedure, applied to `src/agent-src/templates/AGENTS.md`. Hard cap shifts to 2,000 / 1,700. The consumer template intentionally lacks the package-self-references — its pointers target files that exist in the **consumer's** repo (`.augment/skills/`, `agents/settings/contexts/`, ...), not this package's authoring tree.
112
112
 
113
113
  ## Gotchas
114
114
 
115
- - **Outboarding to a new top-level dir.** Inventing `agents/explainers/` or `docs/notes/` for the moved content silently widens the contract surface. Outboard only into `packages/core/.agent-src.uncondensed/contexts/`, `docs/contracts/`, an existing rule body, or an existing skill body.
115
+ - **Outboarding to a new top-level dir.** Inventing `agents/explainers/` or `docs/notes/` for the moved content silently widens the contract surface. Outboard only into `src/agent-src/contexts/`, `docs/contracts/`, an existing rule body, or an existing skill body.
116
116
  - **Pointer-ratio inflation by decoration.** Adding boilerplate "Browse all skills" / "See also" links to lift the ratio above 40 % defeats the purpose. The lint counts only substantive pointers (with a *why*-clause ≥ 60 chars); decorative links get filtered out and the ratio drops back below threshold.
117
- - **Emergency-triage drift.** Editing the in-file emergency-triage block instead of the canonical `packages/core/.agent-src.uncondensed/contexts/contracts/emergency-triage-block.md` causes the package-root and consumer-template versions to diverge silently. Always edit the canonical file and let the lint diff pull both back in sync.
117
+ - **Emergency-triage drift.** Editing the in-file emergency-triage block instead of the canonical `src/agent-src/contexts/contracts/emergency-triage-block.md` causes the package-root and consumer-template versions to diverge silently. Always edit the canonical file and let the lint diff pull both back in sync.
118
118
  - **Cap inversion under WARN.** A 2,250-char AGENTS.md (above 2,200 WARN, below 2,500 FAIL) is a yellow signal not a green one — every additional sentence raises the probability of the next FAIL. Treat WARN as the spend boundary, not a buffer.
119
119
  - **Char-count includes frontmatter.** `wc -c` counts every byte including the YAML preamble, blank lines, and the trailing newline. Stripping a section to "look smaller" without re-running `wc -c` understates the true budget impact.
120
120
  - **Path enumeration.** A run of three or more bare `` `path/to/dir/` `` bullets without *why*-clauses is the classic re-bloat pattern. The lint emits a WARN at ≥ 3 such lines. Collapse them into one capability-style pointer — see the recipe in [`agents-md-anatomy § Iron Law`](../../contexts/contracts/agents-md-anatomy.md#iron-law--capabilities-over-structure).
@@ -39,7 +39,7 @@ schema_version: 1
39
39
  # CI guard: a release bump of `package.json` must update this value
40
40
  # in lockstep — see scripts/check_template_pin_drift.ts (road-to-
41
41
  # portable-runtime-and-update-check P3.3).
42
- agent_config_version: "9.6.0"
42
+ agent_config_version: "9.7.0"
43
43
 
44
44
  # --- Project identity ---
45
45
  project:
@@ -0,0 +1,101 @@
1
+ # Doc-Impact Check — template shipped by agent-config
2
+ #
3
+ # Copy this file to `.github/workflows/doc-impact.yml` in the consumer
4
+ # project. It is the OPTIONAL CI backstop for the doc-follows-code
5
+ # discipline that already ships to you via projection:
6
+ #
7
+ # - rule `downstream-changes` § Doc-Impact — the same-change obligation
8
+ # - skill `agent-docs-writing` § Doc-Impact — the surface→doc procedure
9
+ #
10
+ # Those two are framework-agnostic and behavioral; they need no CI. This
11
+ # workflow adds a deterministic reminder: when a PR changes a PUBLIC
12
+ # SURFACE but touches no documentation, it flags the likely doc drift.
13
+ #
14
+ # Design (per the 2026-07-21 council): WARN-first, opt-in, with an
15
+ # explicit escape hatch — a gate that hard-fails on every surface change
16
+ # gets routinely overridden, which is worse than none. Flip STRICT=true
17
+ # below only once your team wants the hard gate.
18
+ #
19
+ # Framework-agnostic: it globs the changed-file paths, so it works for
20
+ # Laravel / Symfony / Next.js / Python / Go / … without per-stack tuning.
21
+ # Tune the PUBLIC_SURFACE / DOC globs to your repo layout.
22
+ #
23
+ # Escape hatch: put `[docs:not-needed]` in the PR title/body, or use a
24
+ # `refactor:`-prefixed PR title, when a surface changed but genuinely
25
+ # needs no doc edit. State the reason — do not edit a doc just to pass.
26
+
27
+ name: Doc-Impact Check
28
+
29
+ on:
30
+ pull_request:
31
+ types: [opened, synchronize, reopened, edited]
32
+ workflow_dispatch: {}
33
+
34
+ permissions:
35
+ contents: read
36
+
37
+ jobs:
38
+ doc-impact:
39
+ name: Public surface changed without a doc update?
40
+ runs-on: ubuntu-latest
41
+ steps:
42
+ - uses: actions/checkout@v4
43
+ with:
44
+ fetch-depth: 0
45
+
46
+ - name: Detect surface-vs-doc drift
47
+ env:
48
+ BASE_SHA: ${{ github.event.pull_request.base.sha }}
49
+ HEAD_SHA: ${{ github.event.pull_request.head.sha }}
50
+ PR_TITLE: ${{ github.event.pull_request.title }}
51
+ PR_BODY: ${{ github.event.pull_request.body }}
52
+ # Flip to "true" to make the drift a hard CI failure.
53
+ STRICT: "false"
54
+ run: |
55
+ set -euo pipefail
56
+
57
+ # Escape hatch — skip entirely on an explicit opt-out.
58
+ case "${PR_TITLE}${PR_BODY}" in
59
+ *"[docs:not-needed]"*|refactor:*|"refactor("*)
60
+ echo "Doc-Impact: escape hatch present — skipping." ; exit 0 ;;
61
+ esac
62
+
63
+ changed="$(git diff --name-only "${BASE_SHA}" "${HEAD_SHA}")"
64
+ echo "Changed files:"; echo "${changed}" | sed 's/^/ /'
65
+
66
+ # PUBLIC-SURFACE globs (extend for your stack).
67
+ surface="$(printf '%s\n' "${changed}" | grep -E \
68
+ -e '(^|/)routes/' \
69
+ -e '(^|/)(migrations|schema)/' \
70
+ -e 'openapi.*\.(ya?ml|json)$' \
71
+ -e '(^|/)(cli|commands|console)/' \
72
+ -e '(^|/)\.env\.example$' \
73
+ -e '(^|/)(config)/' \
74
+ || true)"
75
+
76
+ # DOC globs — a change to any of these satisfies the obligation.
77
+ docs="$(printf '%s\n' "${changed}" | grep -E \
78
+ -e '\.md$' \
79
+ -e '(^|/)docs/' \
80
+ -e '(^|/)AGENTS\.md$' \
81
+ -e 'openapi.*\.(ya?ml|json)$' \
82
+ -e '(^|/)CHANGELOG' \
83
+ || true)"
84
+
85
+ if [ -n "${surface}" ] && [ -z "${docs}" ]; then
86
+ echo "Public surface(s) changed with NO accompanying doc update:"
87
+ echo "${surface}" | sed 's/^/ /'
88
+ echo ""
89
+ echo "Update the doc that DESCRIBES the changed surface (README /"
90
+ echo "API reference / AGENTS.md / examples / CHANGELOG), per the"
91
+ echo "downstream-changes § Doc-Impact obligation. If no doc is"
92
+ echo "needed, add [docs:not-needed] to the PR with a one-line reason."
93
+ if [ "${STRICT}" = "true" ]; then
94
+ echo "::error::Doc-Impact drift (STRICT mode)."
95
+ exit 1
96
+ fi
97
+ echo "::warning::Public surface changed without a doc update — review Doc-Impact."
98
+ exit 0
99
+ fi
100
+
101
+ echo "Doc-Impact: OK — no undocumented public-surface change."
@@ -1,6 +1,6 @@
1
1
  # Discovery — Deprecation Report
2
2
 
3
- - Generated: `2026-07-20T21:31:59Z`
3
+ - Generated: `2026-07-21T09:23:42Z`
4
4
  - Deprecated artefacts: **0**
5
5
 
6
6
  _None. Tree is clean._
@@ -5974,7 +5974,7 @@
5974
5974
  },
5975
5975
  {
5976
5976
  "category": "rule",
5977
- "checksum": "sha256:334e9b4b83d0115c3c557c3a0f975f6c3340cb394e45646635e9388e11647e6c",
5977
+ "checksum": "sha256:675ea3203cc4291eedd6ed8633170d176d6d8d6748bc167c8418942981fb5ea9",
5978
5978
  "install": {
5979
5979
  "default": true,
5980
5980
  "removable": false
@@ -7730,7 +7730,7 @@
7730
7730
  },
7731
7731
  {
7732
7732
  "category": "skill",
7733
- "checksum": "sha256:88c6ff8281b0ee68b5d6d9402bd4b39087f7fb05e5ad92957fd24a63ee0f4032",
7733
+ "checksum": "sha256:f5633f6e11b8336ea668d9c05dc389d5aac66fc544ed5707245d33c8ea083b5d",
7734
7734
  "install": {
7735
7735
  "default": true,
7736
7736
  "removable": false
@@ -7774,7 +7774,7 @@
7774
7774
  },
7775
7775
  {
7776
7776
  "category": "skill",
7777
- "checksum": "sha256:7d9196f749ea8c8ed0b06e0a8e8985681dc9c43399ec74676397f1baedffc608",
7777
+ "checksum": "sha256:3a690e9739c19360d5b479639fd939aba8aaebcb575d0d56bab55610035bb289",
7778
7778
  "install": {
7779
7779
  "default": true,
7780
7780
  "removable": false
@@ -13781,7 +13781,7 @@
13781
13781
  "workspaces": []
13782
13782
  }
13783
13783
  ],
13784
- "checksum": "sha256:5d153d76966c915aef5ae07b2d82aee0f7f456e65aef5528ebfe6e3355445769",
13784
+ "checksum": "sha256:6a0dbe5b578ca854a9aec57c2a8a135d1aee10247a5f58f32be93f18e750f302",
13785
13785
  "deprecations": [
13786
13786
  {
13787
13787
  "key": "tier",
@@ -13924,7 +13924,7 @@
13924
13924
  "reason": "scaffold template for ticket-bundle tickets (ADR-101); carries no runtime frontmatter — emit-tickets fills it in per ticket"
13925
13925
  }
13926
13926
  ],
13927
- "generated_at": "2026-07-20T21:31:59Z",
13927
+ "generated_at": "2026-07-21T09:23:42Z",
13928
13928
  "packs": [
13929
13929
  {
13930
13930
  "artefact_count": 109,
@@ -1 +1 @@
1
- 225524bcfd872e6503022848fee38c77b6aa3553443fdb0656c447117cc476d1 discovery-manifest.json
1
+ 71417b492c4da8085eb47d0a1edd2c5e00247512b75834b5544409b9a3868415 discovery-manifest.json
@@ -1,6 +1,6 @@
1
1
  # Discovery Manifest — Summary
2
2
 
3
- - Generated: `2026-07-20T21:31:59Z`
3
+ - Generated: `2026-07-21T09:23:42Z`
4
4
  - Scanner: `c24312e116f8`
5
5
  - Artefacts: **575**
6
6
  - Unassigned: **0**
@@ -1,6 +1,6 @@
1
1
  # Discovery — Orphan Report
2
2
 
3
- - Generated: `2026-07-20T21:31:59Z`
3
+ - Generated: `2026-07-21T09:23:42Z`
4
4
  - Orphan artefacts: **0**
5
5
 
6
6
  > An orphan is an artefact whose declared pack has no other members.
@@ -1,6 +1,6 @@
1
1
  {
2
- "checksum": "sha256:5d153d76966c915aef5ae07b2d82aee0f7f456e65aef5528ebfe6e3355445769",
3
- "generated_at": "2026-07-20T21:31:59Z",
2
+ "checksum": "sha256:6a0dbe5b578ca854a9aec57c2a8a135d1aee10247a5f58f32be93f18e750f302",
3
+ "generated_at": "2026-07-21T09:23:42Z",
4
4
  "packs": [
5
5
  {
6
6
  "always_on": false,
@@ -1,6 +1,6 @@
1
1
  # Discovery — Trust Report
2
2
 
3
- - Generated: `2026-07-20T21:31:59Z`
3
+ - Generated: `2026-07-21T09:23:42Z`
4
4
  - Workspaces tracked: **10**
5
5
  - Human-review-required artefacts: **3**
6
6
 
@@ -1,6 +1,6 @@
1
1
  {
2
- "checksum": "sha256:5d153d76966c915aef5ae07b2d82aee0f7f456e65aef5528ebfe6e3355445769",
3
- "generated_at": "2026-07-20T21:31:59Z",
2
+ "checksum": "sha256:6a0dbe5b578ca854a9aec57c2a8a135d1aee10247a5f58f32be93f18e750f302",
3
+ "generated_at": "2026-07-21T09:23:42Z",
4
4
  "scanner_version": "c24312e116f8",
5
5
  "workspaces": [
6
6
  {
@@ -1 +1 @@
1
- | [@event4u/agent-config](https://event4u-app.github.io/agent-config) | Universal AI Agent OS — audited skills, governance rules, commands, and templates for AI coding tools (Claude Code, Cursor, Windsurf, Copilot). | 20 tools (stdio, worker) | `pip install agent-config[mcp] && ./agent-config mcp:run` |
1
+ | [@event4u/agent-config](https://event4u-app.github.io/agent-config) | Universal AI Agent OS — audited skills, governance rules, commands and templates for AI coding tools (Claude Code, Cursor, Windsurf, Copilot). | 20 tools (stdio, worker) | `pip install agent-config[mcp] && ./agent-config mcp:run` |
@@ -1,5 +1,5 @@
1
1
  {
2
- "description": "Universal AI Agent OS \u2014 audited skills, governance rules, commands, and templates for AI coding tools (Claude Code, Cursor, Windsurf, Copilot).",
2
+ "description": "Universal AI Agent OS \u2014 audited skills, governance rules, commands and templates for AI coding tools (Claude Code, Cursor, Windsurf, Copilot).",
3
3
  "homepage": "https://event4u-app.github.io/agent-config",
4
4
  "install_hint_stdio": "pip install agent-config[mcp] && ./agent-config mcp:run",
5
5
  "name": "agent-config-mcp",
@@ -3,13 +3,13 @@
3
3
  "artefact_count": 575,
4
4
  "scanner_version": "c24312e116f8"
5
5
  },
6
- "generated_at": "2026-07-20",
6
+ "generated_at": "2026-07-21",
7
7
  "package": {
8
- "description": "Universal AI Agent OS \u2014 audited skills, governance rules, commands, and templates for AI coding tools (Claude Code, Cursor, Windsurf, Copilot).",
8
+ "description": "Universal AI Agent OS \u2014 audited skills, governance rules, commands and templates for AI coding tools (Claude Code, Cursor, Windsurf, Copilot).",
9
9
  "homepage": "https://event4u-app.github.io/agent-config",
10
10
  "name": "@event4u/agent-config",
11
11
  "repository": "https://github.com/event4u-app/agent-config",
12
- "version": "9.6.0"
12
+ "version": "9.7.0"
13
13
  },
14
14
  "registries": [
15
15
  {
package/docs/CLAIMS.md CHANGED
@@ -257,4 +257,5 @@ visible, not hidden.
257
257
  - kind: quant
258
258
  - evidence: docs/benchmark.md#adversarial-verification-council
259
259
  - status: unbacked
260
- - last_verified:
260
+ - last_verified: 2026-07-21
261
+ - resolution: HONEST-NULL (resolved, not pending). Registered cross-vendor run 2026-07-21 on the curated judge-survivable corpus (internal/bench/adversarial-council/): on the judge-passed residual, the 2-vendor skeptic panel (anthropic+openai) matched the single skeptic exactly (residual recall 0.6 = 0.6, zero lift — the second vendor's residual catches were a strict subset of the first), at a 100% false-positive rate on the controversial-but-correct controls under the adversarial-skeptic posture. Both recall thresholds missed → honest-null → Mode 9 surface stays default-off permanently (like recursive-verification). Reproducible artifact: internal/bench/adversarial-council/runs/. Note: an initial run via `council_cli run` was REJECTED as a measurement artifact (that transport imposes multi-round peer-review + prose output, defeating the independent-skeptic + JSON-scoring protocol) — the valid run uses direct independent per-vendor client calls.