@event4u/agent-config 8.6.0 → 8.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 (118) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +81 -0
  3. package/CONTRIBUTING.md +25 -0
  4. package/README.md +7 -4
  5. package/dist/agent-src/contexts/execution/auto-orchestration-activation.md +1 -1
  6. package/dist/agent-src/contexts/execution/orchestration-benchmark-gate.md +28 -16
  7. package/dist/agent-src/contexts/execution/orchestration-telemetry.md +15 -0
  8. package/dist/agent-src/rules/active-remediation.md +92 -0
  9. package/dist/agent-src/rules/broken-access-control.md +106 -0
  10. package/dist/agent-src/rules/communication-through-line.md +42 -0
  11. package/dist/agent-src/rules/decision-revisit-gate.md +8 -0
  12. package/dist/agent-src/rules/minimal-safe-diff.md +18 -1
  13. package/dist/agent-src/rules/prefer-enums-over-literals.md +65 -0
  14. package/dist/agent-src/rules/senior-engineering-discipline.md +82 -0
  15. package/dist/agent-src/skills/ai-code-blindspots/SKILL.md +105 -0
  16. package/dist/agent-src/skills/ai-code-blindspots/evals/triggers.json +52 -0
  17. package/dist/agent-src/skills/authz-review/SKILL.md +21 -4
  18. package/dist/agent-src/skills/dependency-upgrade/SKILL.md +20 -0
  19. package/dist/agent-src/skills/frontend-render-security/SKILL.md +104 -0
  20. package/dist/agent-src/skills/frontend-render-security/evals/triggers.json +52 -0
  21. package/dist/agent-src/skills/roadmap-writing/SKILL.md +7 -0
  22. package/dist/agent-src/skills/skill-writing/SKILL.md +4 -0
  23. package/dist/agent-src/skills/supply-chain-intake/SKILL.md +100 -0
  24. package/dist/agent-src/skills/supply-chain-intake/evals/triggers.json +52 -0
  25. package/dist/agent-src/skills/testing-anti-patterns/SKILL.md +43 -2
  26. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  27. package/dist/agent-src/templates/roadmaps.md +24 -0
  28. package/dist/discovery/deprecation-report.md +1 -1
  29. package/dist/discovery/discovery-manifest.json +196 -16
  30. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  31. package/dist/discovery/discovery-manifest.summary.md +3 -3
  32. package/dist/discovery/orphan-report.md +1 -1
  33. package/dist/discovery/packs.json +13 -5
  34. package/dist/discovery/trust-report.md +11 -11
  35. package/dist/discovery/workspaces.json +12 -4
  36. package/dist/install/emit_host_rules_cli.js +185 -0
  37. package/dist/install/emit_host_rules_cli.js.map +1 -0
  38. package/dist/install/install.mjs +11 -2
  39. package/dist/install/plan.js +4 -1
  40. package/dist/install/plan.js.map +1 -1
  41. package/dist/install/rule_scope.js +109 -0
  42. package/dist/install/rule_scope.js.map +1 -0
  43. package/dist/install/rule_scope_cli.js +77 -0
  44. package/dist/install/rule_scope_cli.js.map +1 -0
  45. package/dist/install/wizard-plan.js +14 -1
  46. package/dist/install/wizard-plan.js.map +1 -1
  47. package/dist/mcp/awesome-mcp-servers.row.md +1 -1
  48. package/dist/mcp/mcp-cloudflare-catalogue.json +1 -1
  49. package/dist/mcp/registry-manifest.json +4 -4
  50. package/dist/router.json +1 -1
  51. package/dist/scripts/_lib/agent_settings.js +963 -0
  52. package/dist/scripts/_lib/agent_settings.js.map +1 -0
  53. package/dist/scripts/_lib/agent_src.js +607 -0
  54. package/dist/scripts/_lib/agent_src.js.map +1 -0
  55. package/dist/scripts/_lib/claude_settings_hooks.js +209 -0
  56. package/dist/scripts/_lib/claude_settings_hooks.js.map +1 -0
  57. package/dist/scripts/_lib/model_tier.js +64 -0
  58. package/dist/scripts/_lib/model_tier.js.map +1 -0
  59. package/dist/scripts/_lib/script_output.js +140 -0
  60. package/dist/scripts/_lib/script_output.js.map +1 -0
  61. package/dist/scripts/_lib/user_global_paths.js +297 -0
  62. package/dist/scripts/_lib/user_global_paths.js.map +1 -0
  63. package/dist/scripts/condense.js +2181 -0
  64. package/dist/scripts/condense.js.map +1 -0
  65. package/dist/server/routes/install.js +18 -2
  66. package/dist/server/routes/install.js.map +1 -1
  67. package/dist/server/schemas/settings.js +4 -1
  68. package/dist/server/schemas/settings.js.map +1 -1
  69. package/docs/CLAIMS.md +30 -2
  70. package/docs/architecture.md +2 -2
  71. package/docs/catalog.md +14 -0
  72. package/docs/contracts/mcp-tool-inventory.md +31 -30
  73. package/docs/decisions/ADR-105-automatic-subagent-orchestration.md +6 -0
  74. package/docs/decisions/ADR-116-memory-tripwire-activation-path.md +2 -2
  75. package/docs/decisions/ADR-117-subagents-auto-default-on.md +88 -0
  76. package/docs/decisions/INDEX.md +1 -0
  77. package/docs/experiences/content_creator.md +2 -0
  78. package/docs/experiences/finance.md +2 -0
  79. package/docs/experiences/founder.md +2 -0
  80. package/docs/experiences/ops.md +2 -0
  81. package/docs/featured-skills.md +2 -2
  82. package/docs/getting-started-by-role.md +1 -1
  83. package/docs/getting-started.md +1 -1
  84. package/docs/governance-advantage.md +1 -1
  85. package/docs/guidelines/agent-infra/memory-access.md +12 -0
  86. package/docs/proof.md +45 -3
  87. package/docs/release-runbook.md +138 -0
  88. package/docs/second-brain-scope.md +73 -0
  89. package/docs/succession.md +80 -0
  90. package/package.json +2 -2
  91. package/src/config/agent-settings.template.yml +29 -8
  92. package/src/install/emit_host_rules_cli.ts +190 -0
  93. package/src/install/plan.ts +11 -1
  94. package/src/install/rule_scope.ts +120 -0
  95. package/src/install/rule_scope_cli.ts +79 -0
  96. package/src/install/wizard-plan.ts +22 -1
  97. package/src/scripts/_lib/orchestration_gate.ts +12 -8
  98. package/src/scripts/_lib/orchestration_savings.ts +127 -0
  99. package/src/scripts/build_proof.ts +38 -0
  100. package/src/scripts/chat_history.ts +79 -7
  101. package/src/scripts/check_trigger_eval_presence.ts +171 -0
  102. package/src/scripts/domain_soundness_status.ts +236 -0
  103. package/src/scripts/generate_index.ts +14 -0
  104. package/src/scripts/hot_context_hook.ts +47 -2
  105. package/src/scripts/install.sh +118 -4
  106. package/src/scripts/lint_behavioural_eval_freshness.ts +140 -0
  107. package/src/scripts/mcp_server/consumer_tool_catalog.json +22 -3
  108. package/src/scripts/mcp_server/tools.ts +159 -1
  109. package/src/scripts/memory_lookup.ts +184 -6
  110. package/src/scripts/memory_replay.ts +285 -0
  111. package/src/scripts/orchestration_savings_report.ts +100 -0
  112. package/src/scripts/schemas/domain-truth.schema.json +94 -0
  113. package/src/scripts/schemas/evals.schema.json +113 -0
  114. package/src/scripts/second_brain_score.ts +186 -0
  115. package/src/scripts/session_memory_index.ts +94 -0
  116. package/src/scripts/skill_eval_coverage.ts +318 -0
  117. package/src/scripts/trigger_eval_grandfather.json +226 -0
  118. package/src/server/schemas/settings.ts +11 -2
@@ -0,0 +1,100 @@
1
+ ---
2
+ model_tier: medium
3
+ name: supply-chain-intake
4
+ description: "Before adding/installing any dependency the agent named — verify the package exists (slopsquatting: ~1 in 5 AI suggestions are hallucinated), isn't typo-adjacent, is pinned + locked, and CVE-scanned"
5
+ domain: devops
6
+ workspaces:
7
+ - engineering
8
+ packs:
9
+ - engineering-base
10
+ ---
11
+
12
+ # supply-chain-intake
13
+
14
+ An LLM generates a plausible-sounding package name token-by-token with no lookup against a real registry. ~19.7% of AI-recommended packages don't exist (576k-sample study); the same fake name recurs across runs, so attackers pre-register it as malware — "slopsquatting". The `huggingface-cli` PoC (an empty package matching a common hallucination) drew 30k+ downloads. Endor Labs: only ~1 in 5 AI-recommended dependency versions is both real *and* safe. A dependency the agent named is untrusted until verified — never install it just because the model produced the name.
15
+
16
+ ## When to use
17
+
18
+ - About to add a dependency to `package.json` / `requirements.txt` / `go.mod` / `Cargo.toml` / `composer.json` / `pyproject.toml`, or run `npm/pnpm/yarn install`, `pip install`, `go get`, `cargo add`, `composer require`.
19
+ - Reviewing an AI-authored diff touching a dependency manifest or lockfile.
20
+ - An install command was suggested (especially `curl … | bash`).
21
+
22
+ Do NOT use when: no dependency is added and no manifest/lockfile is touched.
23
+
24
+ ## The Iron Law
25
+
26
+ ```
27
+ VERIFY THE PACKAGE EXISTS ON THE REAL REGISTRY BEFORE YOU INSTALL IT.
28
+ A NAME THE MODEL PRODUCED IS A HYPOTHESIS, NOT A DEPENDENCY.
29
+ PIN IT, LOCK IT, CVE-SCAN IT. NEVER PIPE A REMOTE SCRIPT STRAIGHT TO A SHELL.
30
+ ```
31
+
32
+ ## Procedure — intake gate (run in order before adding a dependency)
33
+
34
+ 1. **Existence** — confirm the exact string resolves on the real registry, published before your session, with real usage:
35
+ ```bash
36
+ npm view <pkg> version # non-zero exit = does not exist (hallucination)
37
+ pip index versions <pkg> # or: pip install <pkg>== to list
38
+ go list -m <module>@latest
39
+ cargo search <crate>
40
+ ```
41
+ Non-existent, brand-new (days old), or near-zero-download → **stop**, treat as hallucination/slopsquat.
42
+ 2. **Typo-adjacency** — name within 1–2 chars of a far-more-popular package (`python-dateutil` vs `dateutil`, `lodahs` vs `lodash`)? Probably want the popular one — confirm before installing.
43
+ 3. **Version safety** — the model's pin may predate a CVE fix (training-cutoff reintroduction). Take the current patched release, then scan:
44
+ ```bash
45
+ npm audit # block on high/critical
46
+ pip-audit
47
+ osv-scanner -r .
48
+ ```
49
+ 4. **Pin + lock** — install exact + commit the lockfile; reject floating ranges (`^`, `latest`, no lockfile) on production deps.
50
+ ```bash
51
+ npm install --save-exact <pkg> && git add package-lock.json
52
+ ```
53
+ 5. **License** — confirm compatible with the project's declared license before it lands.
54
+ 6. **No pipe-to-shell** — never `curl … | bash` an install; download → inspect → execute over pinned HTTPS, or surface it to the user for confirmation.
55
+
56
+ ## Backstop greps
57
+
58
+ ```bash
59
+ # Floating / unpinned production deps (npm)
60
+ rg -n '"[^"]+":\s*"(\^|~|\*|latest)' package.json
61
+ # Missing lockfile alongside a manifest
62
+ [ -f package.json ] && [ ! -f package-lock.json ] && echo "no lockfile"
63
+ # curl|bash install patterns anywhere in the change
64
+ rg -n 'curl[^|]*\|\s*(bash|sh)|wget[^|]*\|\s*(bash|sh)' .
65
+ ```
66
+
67
+ ## Output format
68
+
69
+ 1. Per new dependency: name, resolved registry version, publish date / usage signal, and the existence-check command output (`npm view … → 4.17.21`) — proving it real.
70
+ 2. The lockfile diff staged, and the `audit` / `osv-scanner` result (`0 high/critical`, or the finding + resolution).
71
+ 3. For any suggested install command, confirmation it isn't `curl|bash` and the source is pinned HTTPS.
72
+
73
+ ## Gotcha
74
+
75
+ - Hallucinated names are *repeatable* — re-prompting the same model yields the same fake name, so "it looked confident / consistent" isn't evidence it exists. Only the registry is.
76
+ - Short, "obvious" variants (`X-cli`, `X-client`, `X-sdk`) are the prime hallucination shape — verify these hardest.
77
+ - A package that exists but was published this week with 12 downloads is a slopsquat candidate, not a safe dep — weigh age + usage, not just existence.
78
+ - Lockfile integrity is part of the threat model: an unhashed or floating entry can pull a freshly-poisoned release even when a lockfile is "present".
79
+
80
+ ## Do NOT
81
+
82
+ - Do NOT run an install command for a package you haven't existence-checked this session.
83
+ - Do NOT accept the model's version pin as authoritative — re-check against current CVEs.
84
+ - Do NOT commit a manifest change without its lockfile.
85
+ - Do NOT pipe a fetched script into an interpreter.
86
+ - Do NOT inline code that duplicates a copyleft source without carrying its license.
87
+
88
+ ## Auto-trigger keywords
89
+
90
+ - dependency intake
91
+ - package hallucination
92
+ - slopsquatting
93
+ - add a dependency
94
+ - npm install / pip install / go get
95
+
96
+ ## See also
97
+
98
+ - [`ai-code-blindspots`](../ai-code-blindspots/SKILL.md) — the surface→controls checklist that routes here.
99
+ - [`senior-engineering-discipline`](../../rules/senior-engineering-discipline.md) — anchor rule.
100
+ - [`dependency-upgrade`](../dependency-upgrade/SKILL.md), [`secrets-management`](../secrets-management/SKILL.md), [`security`](../security/SKILL.md).
@@ -0,0 +1,52 @@
1
+ {
2
+ "skill": "supply-chain-intake",
3
+ "last_eval": "2026-07-09",
4
+ "description": "5 should-trigger + 5 should-not-trigger queries. Should-trigger covers DE + EN phrasings for verifying a new third-party dependency before install (existence/slopsquatting, pin+lock, CVE, no curl|bash). Should-not-trigger covers near-miss neighbours (upgrading existing deps, secrets, generic checklist, server auth) whose vocabulary overlaps.",
5
+ "queries": [
6
+ {
7
+ "q": "add the package the model suggested to package.json and install it",
8
+ "trigger": true
9
+ },
10
+ {
11
+ "q": "is this pip package real or a hallucination before I install?",
12
+ "trigger": true
13
+ },
14
+ {
15
+ "q": "the install command is a curl piped to bash — is that safe?",
16
+ "trigger": true
17
+ },
18
+ {
19
+ "q": "prüf diese neue Abhängigkeit bevor ich sie installiere (existiert sie überhaupt?)",
20
+ "trigger": true
21
+ },
22
+ {
23
+ "q": "should I pin this dependency and commit a lockfile?",
24
+ "trigger": true
25
+ },
26
+ {
27
+ "q": "upgrade our existing lodash to the latest major and fix breakages",
28
+ "trigger": false,
29
+ "note": "upgrading an already-trusted dep → dependency-upgrade"
30
+ },
31
+ {
32
+ "q": "rotate the API keys stored in our secret manager",
33
+ "trigger": false,
34
+ "note": "secrets lifecycle → secrets-management"
35
+ },
36
+ {
37
+ "q": "what cross-cutting controls did I miss across this diff?",
38
+ "trigger": false,
39
+ "note": "cross-surface checklist → ai-code-blindspots"
40
+ },
41
+ {
42
+ "q": "review the authorization on this endpoint",
43
+ "trigger": false,
44
+ "note": "server-side authz → authz-review"
45
+ },
46
+ {
47
+ "q": "why is my build failing on a type error?",
48
+ "trigger": false,
49
+ "note": "build/type debugging — not dependency intake"
50
+ }
51
+ ]
52
+ }
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  model_tier: medium
3
3
  name: testing-anti-patterns
4
- description: "Use BEFORE writing/changing tests, adding mocks, or test-only methods on production classes — Iron Laws against mocking-the-mock, production pollution, silent partial mocks."
4
+ description: "Use BEFORE writing/changing tests, adding mocks, or test-only methods on production classes — vs mocking-the-mock, production pollution, partial mocks, and overfit/tautological assertions"
5
5
  domain: quality
6
6
  workspaces:
7
7
  - engineering
@@ -42,6 +42,7 @@ Do NOT use when:
42
42
  3. NEVER mock without understanding the dependency chain — observe first, mock minimally.
43
43
  4. NEVER ship partial mocks — mirror the real response shape completely.
44
44
  5. NEVER treat tests as an afterthought — write the failing test first.
45
+ 6. NEVER overfit an assertion — assert the general rule, derive expected values from inputs/seeded data, cover boundary + error cases.
45
46
  ```
46
47
 
47
48
  ## Procedure: Run the gate before each anti-pattern
@@ -126,6 +127,40 @@ Symptom: "Implementation complete, ready for testing." Implementation went in wi
126
127
 
127
128
  Gate: a feature is not complete until a failing-then-passing test cycle ran for it. Route to [`test-driven-development`](../test-driven-development/SKILL.md).
128
129
 
130
+ ### Anti-Pattern 6 — Overfit / tautological assertions & unrealistic test data
131
+
132
+ Symptom: the test passes only for one crafted input and proves nothing about the general rule — a hardcoded expected value the code always emits, a narrow regex pinned to a fixed date/id, or an assertion restating the seed. AI-written tests reach the same coverage as human tests but ~4× worse fault detection (weak-oracle): they execute the path, then assert something too weak to catch a bug. Same shape as mocking-the-mock — asserting on your own construction, not the system's behavior.
133
+
134
+ Gate:
135
+
136
+ ```
137
+ BEFORE writing an assertion:
138
+ Ask: "Would this still pass if the input changed, and FAIL if the RULE broke?"
139
+ IF it only passes for one crafted value, or restates a hardcoded literal:
140
+ STOP — derive the expected from the input, and add cases that vary it.
141
+ ```
142
+
143
+ Test-data realism — seeders/factories emit random data; the test derives its expectation from that data, never a hardcoded literal:
144
+
145
+ ```js
146
+ // ❌ WRONG — hardcoded expectation, single happy case
147
+ const res = await api.get('/users/1')
148
+ expect(res.body).toEqual({ id: 1, name: 'Alice', email: 'alice@example.com' })
149
+ expect(log).toMatch(/User 1 logged in at 2026-01-01/) // pins incidental values
150
+
151
+ // ✅ RIGHT — derive from seeded random data + cover more than the happy path
152
+ const user = await seedUser() // faker-random name/email
153
+ const res = await api.get(`/users/${user.id}`)
154
+ expect(res.body.id).toBe(user.id) // derived, not hardcoded
155
+ expect(res.body.name).toBe(user.name)
156
+ expect(res.body).not.toHaveProperty('passwordHash') // security property
157
+ expect((await api.get('/users/999999')).status).toBe(404) // boundary: missing
158
+ expect((await api.get('/users/abc')).status).toBe(400) // error: invalid input
159
+ expect([403, 404]).toContain((await api.get(`/users/${otherTenantUser.id}`)).status) // abuse: tenant isolation (404 hides existence)
160
+ ```
161
+
162
+ Deriving from seeded data is necessary but **not sufficient** — a test that only reads back the exact fields it seeded is still overfit (a code mutation survives it). A real test also exercises boundary (empty / null / max / Unicode), error (missing / invalid), and, on security-sensitive paths, an abuse case (IDOR, injection string, XSS payload). Coverage of *cases*, not just lines.
163
+
129
164
  ## Output format
130
165
 
131
166
  1. The mocking decision recorded as a one-line comment in the test file (`// mock at <seam>: <reason>`).
@@ -139,6 +174,7 @@ Gate: a feature is not complete until a failing-then-passing test cycle ran for
139
174
  - Layer 3 environment guards from [`defense-in-depth`](../defense-in-depth/SKILL.md) often expose anti-pattern 2: if a production guard fires only in tests, the test setup is wrong, not the guard.
140
175
  - Long mock setups (> 50% of the test) are a signal that integration tests would be simpler — consider it before piling on more mocks.
141
176
  - **Diagnose, do not brute-force.** If a test fails after a mock change, **never guess** at another mock tweak — drop a debugger / Xdebug breakpoint at the seam, observe the real call shape, then mock minimally. Two retries without a root-cause hypothesis = STOP and rethink.
177
+ - An assertion that derives from seeded data but only checks the happy path is still overfit — a code mutation survives it. Require ≥1 boundary/error/abuse case per behavior, not just line coverage.
142
178
 
143
179
  ## Do NOT
144
180
 
@@ -147,6 +183,7 @@ Gate: a feature is not complete until a failing-then-passing test cycle ran for
147
183
  - Do NOT mock a method whose side effects the test depends on without reading the implementation.
148
184
  - Do NOT invent mock data shapes from memory — record from the real source.
149
185
  - Do NOT mark a story complete until at least one test was watched failing first.
186
+ - Do NOT hardcode an expected value the code will emit, or pin a regex to an incidental fixed date/id — derive from inputs and seeded data, and vary the input across cases.
150
187
 
151
188
  ## Auto-trigger keywords
152
189
 
@@ -155,10 +192,14 @@ Gate: a feature is not complete until a failing-then-passing test cycle ran for
155
192
  - test-only method
156
193
  - partial mock
157
194
  - mock without understanding
195
+ - overfit assertion
196
+ - tautological test
197
+ - hardcoded expected value
158
198
 
159
199
  ## Provenance
160
200
 
161
201
  - Adopted from: an external reference (MIT, © 2025 an external reference).
162
202
  - Cross-linked: [`pest-testing`](../pest-testing/SKILL.md), [`test-driven-development`](../test-driven-development/SKILL.md), [`judge-test-coverage`](../judge-test-coverage/SKILL.md).
163
203
  - Provenance registry: `agents/settings/contexts/skills-provenance.yml` (entry: `testing-anti-patterns`).
164
- - Iron-Law floor: `verify-before-complete`, `skill-quality`.
204
+ - Iron-Law floor: `verify-before-complete`, `skill-quality`, `senior-engineering-discipline`.
205
+ - Cross-cutting anchor: [`ai-code-blindspots`](../ai-code-blindspots/SKILL.md) routes here for the test surface.
@@ -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: "8.6.0"
42
+ agent_config_version: "8.8.0"
43
43
 
44
44
  # --- Project identity ---
45
45
  project:
@@ -156,6 +156,30 @@ Templates for roadmap files stored in `agents/roadmaps/` or `{module_root}/{Modu
156
156
  structured form above; renders richer instructions in per-roadmap
157
157
  breakdown.
158
158
 
159
+ 21. **Related roadmaps share a common filename prefix.** When you create
160
+ more than one roadmap that belongs together — a follow-up, siblings
161
+ split from one body of work in a single pass, or phases of one
162
+ initiative in separate files — give them a shared `road-to-<family>-…`
163
+ prefix so relatedness is visible in `agents/roadmaps/` and the
164
+ dashboard groups them. `<family>` = short kebab slug for the shared
165
+ initiative; the suffix distinguishes members:
166
+ - **Split-in-one-pass siblings** → `road-to-<family>-<part>.md`
167
+ (e.g. `road-to-auth-hardening-backend.md`,
168
+ `road-to-auth-hardening-frontend.md`,
169
+ `road-to-auth-hardening-infra.md`).
170
+ - **Follow-ups** → `road-to-<parent>-followup.md` (rule 17): the
171
+ special case where `<parent>` is the family prefix; keep the
172
+ `parent_roadmap:` back-link.
173
+ - **Sibling (non-parent/child) roadmaps** carry no `parent_roadmap:`;
174
+ the shared prefix is the only linkage — do **not** invent a new
175
+ frontmatter field. Cross-link siblings by name in each `## Context`
176
+ block when it helps a reader.
177
+ Pick the `<family>` slug **once, up front**, before the first of the
178
+ set — renaming a prefix later means migrating inbound references. A
179
+ lone roadmap keeps plain `road-to-<slug>.md`; the convention fires
180
+ only when ≥2 related roadmaps are created together or as a follow-up
181
+ chain.
182
+
159
183
  ---
160
184
 
161
185
  ## Quality Gates (remote CI by default)
@@ -1,6 +1,6 @@
1
1
  # Discovery — Deprecation Report
2
2
 
3
- - Generated: `2026-07-08T14:10:55Z`
3
+ - Generated: `2026-07-09T12:23:58Z`
4
4
  - Deprecated artefacts: **0**
5
5
 
6
6
  _None. Tree is clean._
@@ -4714,6 +4714,27 @@
4714
4714
  "agent-config-maintainer"
4715
4715
  ]
4716
4716
  },
4717
+ {
4718
+ "category": "rule",
4719
+ "checksum": "sha256:946542c49f853be23686ab459da7c76c4cc31c710bf43b25c94f5991355f7c11",
4720
+ "install": {
4721
+ "default": true,
4722
+ "removable": false
4723
+ },
4724
+ "lifecycle": "active",
4725
+ "packs": [
4726
+ "engineering-base"
4727
+ ],
4728
+ "path": "src/rules/active-remediation.md",
4729
+ "trust": {
4730
+ "confidence": "high",
4731
+ "human_review_required": false,
4732
+ "level": "core"
4733
+ },
4734
+ "workspaces": [
4735
+ "engineering"
4736
+ ]
4737
+ },
4717
4738
  {
4718
4739
  "category": "rule",
4719
4740
  "checksum": "sha256:d64b9dea4d70a0392472bf94cf1ebc374e18196119e58e20fd660c5d4a3ed7a2",
@@ -4955,6 +4976,27 @@
4955
4976
  "engineering"
4956
4977
  ]
4957
4978
  },
4979
+ {
4980
+ "category": "rule",
4981
+ "checksum": "sha256:edaeae5044cbda656f1abb2377f56cdfb38cce48108e8e83872bd67a1da6ff87",
4982
+ "install": {
4983
+ "default": true,
4984
+ "removable": false
4985
+ },
4986
+ "lifecycle": "active",
4987
+ "packs": [
4988
+ "engineering-base"
4989
+ ],
4990
+ "path": "src/rules/broken-access-control.md",
4991
+ "trust": {
4992
+ "confidence": "high",
4993
+ "human_review_required": false,
4994
+ "level": "core"
4995
+ },
4996
+ "workspaces": [
4997
+ "engineering"
4998
+ ]
4999
+ },
4958
5000
  {
4959
5001
  "category": "rule",
4960
5002
  "checksum": "sha256:9c8f9b1ded54c9601f66c0c87b84c3b2aff4726514ec0231a3cd04c6b58c0cd2",
@@ -5049,6 +5091,36 @@
5049
5091
  "engineering"
5050
5092
  ]
5051
5093
  },
5094
+ {
5095
+ "category": "rule",
5096
+ "checksum": "sha256:f1bc4a87f5a26163cce17fc4b3a8cd4f1dfd4ad52c9fe65da97c9357becbcf35",
5097
+ "install": {
5098
+ "default": true,
5099
+ "removable": false
5100
+ },
5101
+ "lifecycle": "active",
5102
+ "packs": [
5103
+ "engineering-base"
5104
+ ],
5105
+ "path": "src/rules/communication-through-line.md",
5106
+ "trust": {
5107
+ "confidence": "high",
5108
+ "human_review_required": false,
5109
+ "level": "core"
5110
+ },
5111
+ "workspaces": [
5112
+ "agent-config-maintainer",
5113
+ "construction",
5114
+ "engineering",
5115
+ "finance",
5116
+ "founder",
5117
+ "gtm",
5118
+ "legal-review-prep",
5119
+ "ops",
5120
+ "product",
5121
+ "small-business"
5122
+ ]
5123
+ },
5052
5124
  {
5053
5125
  "category": "rule",
5054
5126
  "checksum": "sha256:44216e854bddb1c0fae430451262756ca5e7d13c41ddbe440cecdb678cecf99c",
@@ -5133,7 +5205,7 @@
5133
5205
  },
5134
5206
  {
5135
5207
  "category": "rule",
5136
- "checksum": "sha256:5bdcb01badd0faf96e0a1a56a487f7ae7d757526e7fdb4c36a75ddf4b0510519",
5208
+ "checksum": "sha256:4e3fc01547374c7d76af3b02a77e0667ad10544c63c035ba34b78e90fedaee11",
5137
5209
  "install": {
5138
5210
  "default": true,
5139
5211
  "removable": false
@@ -5874,7 +5946,7 @@
5874
5946
  },
5875
5947
  {
5876
5948
  "category": "rule",
5877
- "checksum": "sha256:1b04f71b85e755fc0319ac67a0447919bb084019ade11c21a616bd3f6739a206",
5949
+ "checksum": "sha256:2ffc4bd12a025affa1097dd9f67cdb0732efac53a97d7a0f6b65b4470974f81e",
5878
5950
  "install": {
5879
5951
  "default": true,
5880
5952
  "removable": false
@@ -6235,6 +6307,27 @@
6235
6307
  "engineering"
6236
6308
  ]
6237
6309
  },
6310
+ {
6311
+ "category": "rule",
6312
+ "checksum": "sha256:0bac9f181f420e3262b44097ed2a192d0f71f40071aa3f7d7b39b798b2cf834b",
6313
+ "install": {
6314
+ "default": true,
6315
+ "removable": false
6316
+ },
6317
+ "lifecycle": "active",
6318
+ "packs": [
6319
+ "engineering-base"
6320
+ ],
6321
+ "path": "src/rules/prefer-enums-over-literals.md",
6322
+ "trust": {
6323
+ "confidence": "high",
6324
+ "human_review_required": false,
6325
+ "level": "core"
6326
+ },
6327
+ "workspaces": [
6328
+ "engineering"
6329
+ ]
6330
+ },
6238
6331
  {
6239
6332
  "category": "rule",
6240
6333
  "checksum": "sha256:f80fdd3259c50aac130892d9e147821a0275f5832c0d58817e2081fa342e736b",
@@ -6461,6 +6554,27 @@
6461
6554
  "engineering"
6462
6555
  ]
6463
6556
  },
6557
+ {
6558
+ "category": "rule",
6559
+ "checksum": "sha256:cac72a508d3680861fdb81c7a62ea17e59c7e8564f92c8b1663c92db4d197381",
6560
+ "install": {
6561
+ "default": true,
6562
+ "removable": false
6563
+ },
6564
+ "lifecycle": "active",
6565
+ "packs": [
6566
+ "engineering-base"
6567
+ ],
6568
+ "path": "src/rules/senior-engineering-discipline.md",
6569
+ "trust": {
6570
+ "confidence": "high",
6571
+ "human_review_required": false,
6572
+ "level": "core"
6573
+ },
6574
+ "workspaces": [
6575
+ "engineering"
6576
+ ]
6577
+ },
6464
6578
  {
6465
6579
  "category": "rule",
6466
6580
  "checksum": "sha256:6bc6052a9c5230706a1d6e79e98b947aea690791c1f7915b99878e5bf6ba01a2",
@@ -7096,6 +7210,28 @@
7096
7210
  "agent-config-maintainer"
7097
7211
  ]
7098
7212
  },
7213
+ {
7214
+ "category": "skill",
7215
+ "checksum": "sha256:54152dfc1fd9b0d269d1d60d4c7c036521de7685005c245cc30757e1f2513847",
7216
+ "install": {
7217
+ "default": true,
7218
+ "removable": false
7219
+ },
7220
+ "lifecycle": "active",
7221
+ "name": "ai-code-blindspots",
7222
+ "packs": [
7223
+ "engineering-base"
7224
+ ],
7225
+ "path": "src/skills/ai-code-blindspots/SKILL.md",
7226
+ "trust": {
7227
+ "confidence": "high",
7228
+ "human_review_required": false,
7229
+ "level": "core"
7230
+ },
7231
+ "workspaces": [
7232
+ "engineering"
7233
+ ]
7234
+ },
7099
7235
  {
7100
7236
  "category": "skill",
7101
7237
  "checksum": "sha256:f40f6c16309f9b749e947f404344763d155f994e4b09b06a932a3517fa8604ab",
@@ -7296,7 +7432,7 @@
7296
7432
  },
7297
7433
  {
7298
7434
  "category": "skill",
7299
- "checksum": "sha256:b32785552236766bf5641710105d32a5aa79b9104b602364bfcd58f6ba1ad22d",
7435
+ "checksum": "sha256:d3bf7c4c62cb48619aee3ded4d008d273708688566992206f53603410eb061bd",
7300
7436
  "install": {
7301
7437
  "default": true,
7302
7438
  "removable": false
@@ -8330,7 +8466,7 @@
8330
8466
  },
8331
8467
  {
8332
8468
  "category": "skill",
8333
- "checksum": "sha256:6d43cfc5df9f745b583d09c2b2204859ff18a6c06bb269e3a8d48eb7bb76fb69",
8469
+ "checksum": "sha256:b1b597da66c9594e4ac58c8bc41373bbb6e4d1bd25b972cda434c02eab1d0725",
8334
8470
  "install": {
8335
8471
  "default": true,
8336
8472
  "removable": false
@@ -8944,6 +9080,28 @@
8944
9080
  "engineering"
8945
9081
  ]
8946
9082
  },
9083
+ {
9084
+ "category": "skill",
9085
+ "checksum": "sha256:149996466060c6ab2214ffd0e1b5129cd62b655037ea3fab440ab2bb0ca33c3c",
9086
+ "install": {
9087
+ "default": true,
9088
+ "removable": false
9089
+ },
9090
+ "lifecycle": "active",
9091
+ "name": "frontend-render-security",
9092
+ "packs": [
9093
+ "engineering-base"
9094
+ ],
9095
+ "path": "src/skills/frontend-render-security/SKILL.md",
9096
+ "trust": {
9097
+ "confidence": "high",
9098
+ "human_review_required": false,
9099
+ "level": "core"
9100
+ },
9101
+ "workspaces": [
9102
+ "engineering"
9103
+ ]
9104
+ },
8947
9105
  {
8948
9106
  "category": "skill",
8949
9107
  "checksum": "sha256:f1d5f7060b2252ff93e75a95773f6e84e5b83a182faebabff430f77650e768b1",
@@ -11608,7 +11766,7 @@
11608
11766
  },
11609
11767
  {
11610
11768
  "category": "skill",
11611
- "checksum": "sha256:66c7c7d8c94ab40537a0e8dbf39af7bc9f45dc4c1ce207b9b37589a806694489",
11769
+ "checksum": "sha256:08320d5aa61763262860bab8fc5f137f808ed5cb795f3d90f75c4f66e99263c7",
11612
11770
  "install": {
11613
11771
  "default": true,
11614
11772
  "removable": false
@@ -11982,7 +12140,7 @@
11982
12140
  },
11983
12141
  {
11984
12142
  "category": "skill",
11985
- "checksum": "sha256:ce7bb5aa334783a058f320faf1dfb41aa70140d0a557be29d942ddc08898b239",
12143
+ "checksum": "sha256:87eaa14cd95565d3c642e6e5a3ba1e26ac3b0ee1904e05f92c28ea9512c5dbc6",
11986
12144
  "install": {
11987
12145
  "default": true,
11988
12146
  "removable": false
@@ -12134,6 +12292,28 @@
12134
12292
  "agent-config-maintainer"
12135
12293
  ]
12136
12294
  },
12295
+ {
12296
+ "category": "skill",
12297
+ "checksum": "sha256:3a3a2157368c778a5276fd14dc64055fdf02742a2f72d0639eb10c0dcc0446e8",
12298
+ "install": {
12299
+ "default": true,
12300
+ "removable": false
12301
+ },
12302
+ "lifecycle": "active",
12303
+ "name": "supply-chain-intake",
12304
+ "packs": [
12305
+ "engineering-base"
12306
+ ],
12307
+ "path": "src/skills/supply-chain-intake/SKILL.md",
12308
+ "trust": {
12309
+ "confidence": "high",
12310
+ "human_review_required": false,
12311
+ "level": "core"
12312
+ },
12313
+ "workspaces": [
12314
+ "engineering"
12315
+ ]
12316
+ },
12137
12317
  {
12138
12318
  "category": "skill",
12139
12319
  "checksum": "sha256:fb616defc5389d3c921ae0f6554054ac3f6ed8c20f55d75c9452738b2cc57323",
@@ -12334,7 +12514,7 @@
12334
12514
  },
12335
12515
  {
12336
12516
  "category": "skill",
12337
- "checksum": "sha256:244c5db9cd5b7f40f1dfaac9a489973a22be9b7a6b2345370f3da75719a77d50",
12517
+ "checksum": "sha256:0387d4a8a245a15a6a13b951b9721cf0f491dd11c4a66f604619ee480f9b407f",
12338
12518
  "install": {
12339
12519
  "default": true,
12340
12520
  "removable": false
@@ -12769,7 +12949,7 @@
12769
12949
  "workspaces": []
12770
12950
  }
12771
12951
  ],
12772
- "checksum": "sha256:373d4519debcdb5a39c065b83e496247480fc44a91aeb6f495ba5024f2a7192b",
12952
+ "checksum": "sha256:236db1c9e47c8fb6c769af3954d78b738af4308cccd100d55683fbc64ed05fd1",
12773
12953
  "deprecations": [
12774
12954
  {
12775
12955
  "key": "tier",
@@ -12912,10 +13092,10 @@
12912
13092
  "reason": "scaffold template for ticket-bundle tickets (ADR-101); carries no runtime frontmatter — emit-tickets fills it in per ticket"
12913
13093
  }
12914
13094
  ],
12915
- "generated_at": "2026-07-08T14:10:55Z",
13095
+ "generated_at": "2026-07-09T12:23:58Z",
12916
13096
  "packs": [
12917
13097
  {
12918
- "artefact_count": 95,
13098
+ "artefact_count": 103,
12919
13099
  "description": "Framework-neutral engineering hygiene — git, tests, reviews.",
12920
13100
  "domain": "engineering",
12921
13101
  "human_review_required": 0,
@@ -12925,7 +13105,7 @@
12925
13105
  "trust_level_default": "core",
12926
13106
  "trust_summary": {
12927
13107
  "advisory": 0,
12928
- "core": 93,
13108
+ "core": 101,
12929
13109
  "experimental": 1,
12930
13110
  "professional": 1,
12931
13111
  "restricted": 0
@@ -13685,26 +13865,26 @@
13685
13865
  "stats": {
13686
13866
  "by_category": {
13687
13867
  "command": 172,
13688
- "rule": 95,
13689
- "skill": 264,
13868
+ "rule": 100,
13869
+ "skill": 267,
13690
13870
  "subagent": 1,
13691
13871
  "template": 1
13692
13872
  },
13693
13873
  "by_lifecycle": {
13694
- "active": 517,
13874
+ "active": 525,
13695
13875
  "archived": 0,
13696
13876
  "deprecated": 0,
13697
13877
  "experimental": 16
13698
13878
  },
13699
13879
  "by_trust_level": {
13700
13880
  "advisory": 8,
13701
- "core": 409,
13881
+ "core": 417,
13702
13882
  "experimental": 20,
13703
13883
  "professional": 96,
13704
13884
  "restricted": 0
13705
13885
  },
13706
13886
  "documented_unassigned_count": 26,
13707
- "total_artefacts": 533,
13887
+ "total_artefacts": 541,
13708
13888
  "unassigned_count": 0
13709
13889
  },
13710
13890
  "unassigned": [],
@@ -1 +1 @@
1
- 01ac916a948ce2e4232ae06f46e3c626f31a3e328c66904dbfd61ef731a13b1c discovery-manifest.json
1
+ 312e96cd7419ad7db0a90c2a3d76784285c009e41656ee5f98353d9c9457a29f discovery-manifest.json
@@ -1,8 +1,8 @@
1
1
  # Discovery Manifest — Summary
2
2
 
3
- - Generated: `2026-07-08T14:10:55Z`
3
+ - Generated: `2026-07-09T12:23:58Z`
4
4
  - Scanner: `f36b5a348348`
5
- - Artefacts: **533**
5
+ - Artefacts: **541**
6
6
  - Unassigned: **0**
7
7
 
8
8
  ## `engineering` — Engineering
@@ -11,7 +11,7 @@
11
11
 
12
12
  | Pack | Artefacts |
13
13
  |---|---|
14
- | `engineering-base` — Engineering Base | 95 |
14
+ | `engineering-base` — Engineering Base | 103 |
15
15
  | `git` — Git | 4 |
16
16
  | `php` — PHP | 6 |
17
17
  | `laravel` — Laravel | 25 |