@event4u/agent-config 8.7.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 (83) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +52 -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/supply-chain-intake/SKILL.md +100 -0
  23. package/dist/agent-src/skills/supply-chain-intake/evals/triggers.json +52 -0
  24. package/dist/agent-src/skills/testing-anti-patterns/SKILL.md +43 -2
  25. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  26. package/dist/agent-src/templates/roadmaps.md +24 -0
  27. package/dist/discovery/deprecation-report.md +1 -1
  28. package/dist/discovery/discovery-manifest.json +195 -15
  29. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  30. package/dist/discovery/discovery-manifest.summary.md +3 -3
  31. package/dist/discovery/orphan-report.md +1 -1
  32. package/dist/discovery/packs.json +13 -5
  33. package/dist/discovery/trust-report.md +11 -11
  34. package/dist/discovery/workspaces.json +12 -4
  35. package/dist/install/install.mjs +5 -2
  36. package/dist/mcp/awesome-mcp-servers.row.md +1 -1
  37. package/dist/mcp/mcp-cloudflare-catalogue.json +1 -1
  38. package/dist/mcp/registry-manifest.json +4 -4
  39. package/dist/router.json +1 -1
  40. package/dist/server/schemas/settings.js +2 -1
  41. package/dist/server/schemas/settings.js.map +1 -1
  42. package/docs/CLAIMS.md +30 -2
  43. package/docs/architecture.md +2 -2
  44. package/docs/catalog.md +14 -0
  45. package/docs/contracts/mcp-tool-inventory.md +31 -30
  46. package/docs/decisions/ADR-105-automatic-subagent-orchestration.md +6 -0
  47. package/docs/decisions/ADR-116-memory-tripwire-activation-path.md +2 -2
  48. package/docs/decisions/ADR-117-subagents-auto-default-on.md +88 -0
  49. package/docs/decisions/INDEX.md +1 -0
  50. package/docs/experiences/content_creator.md +2 -0
  51. package/docs/experiences/finance.md +2 -0
  52. package/docs/experiences/founder.md +2 -0
  53. package/docs/experiences/ops.md +2 -0
  54. package/docs/featured-skills.md +2 -2
  55. package/docs/getting-started-by-role.md +1 -1
  56. package/docs/getting-started.md +1 -1
  57. package/docs/governance-advantage.md +1 -1
  58. package/docs/guidelines/agent-infra/memory-access.md +12 -0
  59. package/docs/proof.md +45 -3
  60. package/docs/release-runbook.md +138 -0
  61. package/docs/second-brain-scope.md +73 -0
  62. package/docs/succession.md +80 -0
  63. package/package.json +2 -2
  64. package/src/config/agent-settings.template.yml +25 -6
  65. package/src/scripts/_lib/orchestration_gate.ts +12 -8
  66. package/src/scripts/_lib/orchestration_savings.ts +127 -0
  67. package/src/scripts/build_proof.ts +38 -0
  68. package/src/scripts/chat_history.ts +79 -7
  69. package/src/scripts/domain_soundness_status.ts +236 -0
  70. package/src/scripts/generate_index.ts +14 -0
  71. package/src/scripts/hot_context_hook.ts +47 -2
  72. package/src/scripts/lint_behavioural_eval_freshness.ts +140 -0
  73. package/src/scripts/mcp_server/consumer_tool_catalog.json +22 -3
  74. package/src/scripts/mcp_server/tools.ts +159 -1
  75. package/src/scripts/memory_lookup.ts +184 -6
  76. package/src/scripts/memory_replay.ts +285 -0
  77. package/src/scripts/orchestration_savings_report.ts +100 -0
  78. package/src/scripts/schemas/domain-truth.schema.json +94 -0
  79. package/src/scripts/schemas/evals.schema.json +113 -0
  80. package/src/scripts/second_brain_score.ts +186 -0
  81. package/src/scripts/session_memory_index.ts +94 -0
  82. package/src/scripts/skill_eval_coverage.ts +318 -0
  83. package/src/server/schemas/settings.ts +5 -2
@@ -14,42 +14,43 @@ keep-beta-until: 2026-08-14
14
14
 
15
15
  ## Summary
16
16
 
17
- - **Total tools:** 27
18
- - **By transport:** stdio=18
19
- - **By side-effect:** fs-write=8, ro=16, shell=3
17
+ - **Total tools:** 28
18
+ - **By transport:** stdio=19
19
+ - **By side-effect:** fs-write=8, ro=17, shell=3
20
20
  - **Discovery-only stubs (no implementation):** 9
21
21
 
22
22
  ## Tools
23
23
 
24
24
  | Tool | Side-effect | Transports | Catalog | Handler |
25
25
  |---|---|---|---|---|
26
- | `lint_skills` | `ro` | stdio | [`consumer_tool_catalog.json:7`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L7) | [`tools.ts:1102`](../../src/scripts/mcp_server/tools.ts#L1102) |
27
- | `chat_history_append` | `fs-write` | stdio | [`consumer_tool_catalog.json:24`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L24) | [`tools.ts:1130`](../../src/scripts/mcp_server/tools.ts#L1130) |
28
- | `chat_history_read` | `ro` | stdio | [`consumer_tool_catalog.json:43`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L43) | [`tools.ts:1191`](../../src/scripts/mcp_server/tools.ts#L1191) |
29
- | `memory_lookup` | `ro` | stdio | [`consumer_tool_catalog.json:59`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L59) | [`tools.ts:1233`](../../src/scripts/mcp_server/tools.ts#L1233) |
30
- | `memory_signal` | `fs-write` | stdio | [`consumer_tool_catalog.json:75`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L75) | [`tools.ts:1360`](../../src/scripts/mcp_server/tools.ts#L1360) |
31
- | `memory_status` | `ro` | stdio | [`consumer_tool_catalog.json:91`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L91) | [`tools.ts:1275`](../../src/scripts/mcp_server/tools.ts#L1275) |
32
- | `skill_trigger_eval` | `ro` | _(stub)_ | [`consumer_tool_catalog.json:98`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L98) | _stub-only_ |
33
- | `suggest_command` | `ro` | _(stub)_ | [`consumer_tool_catalog.json:114`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L114) | _stub-only_ |
34
- | `suggest_skill_for_task` | `ro` | _(stub)_ | [`consumer_tool_catalog.json:129`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L129) | _stub-only_ |
35
- | `mine_session` | `ro` | _(stub)_ | [`consumer_tool_catalog.json:144`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L144) | _stub-only_ |
36
- | `update_form_request_messages` | `fs-write` | _(stub)_ | [`consumer_tool_catalog.json:158`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L158) | _stub-only_ |
37
- | `sync_gitignore` | `fs-write` | _(stub)_ | [`consumer_tool_catalog.json:173`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L173) | _stub-only_ |
38
- | `sync_agent_settings` | `fs-write` | _(stub)_ | [`consumer_tool_catalog.json:186`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L186) | _stub-only_ |
39
- | `run_tests` | `shell` | stdio | [`consumer_tool_catalog.json:200`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L200) | [`tools.ts:1535`](../../src/scripts/mcp_server/tools.ts#L1535) |
40
- | `run_quality_checks` | `shell` | _(stub)_ | [`consumer_tool_catalog.json:214`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L214) | _stub-only_ |
41
- | `list_skills` | `ro` | stdio | [`consumer_tool_catalog.json:227`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L227) | [`tools.ts:1289`](../../src/scripts/mcp_server/tools.ts#L1289) |
42
- | `list_commands` | `ro` | stdio | [`consumer_tool_catalog.json:234`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L234) | [`tools.ts:1304`](../../src/scripts/mcp_server/tools.ts#L1304) |
43
- | `list_rules` | `ro` | stdio | [`consumer_tool_catalog.json:241`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L241) | [`tools.ts:1319`](../../src/scripts/mcp_server/tools.ts#L1319) |
44
- | `compile_router` | `shell` | _(stub)_ | [`consumer_tool_catalog.json:248`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L248) | _stub-only_ |
45
- | `read_resource_body` | `ro` | stdio | [`consumer_tool_catalog.json:261`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L261) | [`tools.ts:1335`](../../src/scripts/mcp_server/tools.ts#L1335) |
46
- | `roadmap_progress` | `fs-write` | stdio | [`consumer_tool_catalog.json:275`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L275) | [`tools.ts:1394`](../../src/scripts/mcp_server/tools.ts#L1394) |
47
- | `roadmap_archive` | `fs-write` | stdio | [`consumer_tool_catalog.json:288`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L288) | [`tools.ts:1417`](../../src/scripts/mcp_server/tools.ts#L1417) |
48
- | `capabilities_index` | `fs-write` | stdio | [`consumer_tool_catalog.json:295`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L295) | [`tools.ts:1433`](../../src/scripts/mcp_server/tools.ts#L1433) |
49
- | `doctor_report` | `ro` | stdio | [`consumer_tool_catalog.json:308`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L308) | [`tools.ts:1456`](../../src/scripts/mcp_server/tools.ts#L1456) |
50
- | `conformance_check` | `ro` | stdio | [`consumer_tool_catalog.json:315`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L315) | [`tools.ts:1470`](../../src/scripts/mcp_server/tools.ts#L1470) |
51
- | `telemetry_report` | `ro` | stdio | [`consumer_tool_catalog.json:322`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L322) | [`tools.ts:1484`](../../src/scripts/mcp_server/tools.ts#L1484) |
52
- | `council_estimate` | `ro` | stdio | [`consumer_tool_catalog.json:335`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L335) | [`tools.ts:1506`](../../src/scripts/mcp_server/tools.ts#L1506) |
26
+ | `lint_skills` | `ro` | stdio | [`consumer_tool_catalog.json:7`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L7) | [`tools.ts:1183`](../../src/scripts/mcp_server/tools.ts#L1183) |
27
+ | `chat_history_append` | `fs-write` | stdio | [`consumer_tool_catalog.json:24`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L24) | [`tools.ts:1211`](../../src/scripts/mcp_server/tools.ts#L1211) |
28
+ | `chat_history_read` | `ro` | stdio | [`consumer_tool_catalog.json:43`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L43) | [`tools.ts:1272`](../../src/scripts/mcp_server/tools.ts#L1272) |
29
+ | `memory_lookup` | `ro` | stdio | [`consumer_tool_catalog.json:63`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L63) | [`tools.ts:1348`](../../src/scripts/mcp_server/tools.ts#L1348) |
30
+ | `memory_get` | `ro` | stdio | [`consumer_tool_catalog.json:80`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L80) | [`tools.ts:1404`](../../src/scripts/mcp_server/tools.ts#L1404) |
31
+ | `memory_signal` | `fs-write` | stdio | [`consumer_tool_catalog.json:94`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L94) | [`tools.ts:1513`](../../src/scripts/mcp_server/tools.ts#L1513) |
32
+ | `memory_status` | `ro` | stdio | [`consumer_tool_catalog.json:110`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L110) | [`tools.ts:1428`](../../src/scripts/mcp_server/tools.ts#L1428) |
33
+ | `skill_trigger_eval` | `ro` | _(stub)_ | [`consumer_tool_catalog.json:117`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L117) | _stub-only_ |
34
+ | `suggest_command` | `ro` | _(stub)_ | [`consumer_tool_catalog.json:133`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L133) | _stub-only_ |
35
+ | `suggest_skill_for_task` | `ro` | _(stub)_ | [`consumer_tool_catalog.json:148`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L148) | _stub-only_ |
36
+ | `mine_session` | `ro` | _(stub)_ | [`consumer_tool_catalog.json:163`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L163) | _stub-only_ |
37
+ | `update_form_request_messages` | `fs-write` | _(stub)_ | [`consumer_tool_catalog.json:177`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L177) | _stub-only_ |
38
+ | `sync_gitignore` | `fs-write` | _(stub)_ | [`consumer_tool_catalog.json:192`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L192) | _stub-only_ |
39
+ | `sync_agent_settings` | `fs-write` | _(stub)_ | [`consumer_tool_catalog.json:205`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L205) | _stub-only_ |
40
+ | `run_tests` | `shell` | stdio | [`consumer_tool_catalog.json:219`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L219) | [`tools.ts:1688`](../../src/scripts/mcp_server/tools.ts#L1688) |
41
+ | `run_quality_checks` | `shell` | _(stub)_ | [`consumer_tool_catalog.json:233`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L233) | _stub-only_ |
42
+ | `list_skills` | `ro` | stdio | [`consumer_tool_catalog.json:246`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L246) | [`tools.ts:1442`](../../src/scripts/mcp_server/tools.ts#L1442) |
43
+ | `list_commands` | `ro` | stdio | [`consumer_tool_catalog.json:253`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L253) | [`tools.ts:1457`](../../src/scripts/mcp_server/tools.ts#L1457) |
44
+ | `list_rules` | `ro` | stdio | [`consumer_tool_catalog.json:260`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L260) | [`tools.ts:1472`](../../src/scripts/mcp_server/tools.ts#L1472) |
45
+ | `compile_router` | `shell` | _(stub)_ | [`consumer_tool_catalog.json:267`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L267) | _stub-only_ |
46
+ | `read_resource_body` | `ro` | stdio | [`consumer_tool_catalog.json:280`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L280) | [`tools.ts:1488`](../../src/scripts/mcp_server/tools.ts#L1488) |
47
+ | `roadmap_progress` | `fs-write` | stdio | [`consumer_tool_catalog.json:294`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L294) | [`tools.ts:1547`](../../src/scripts/mcp_server/tools.ts#L1547) |
48
+ | `roadmap_archive` | `fs-write` | stdio | [`consumer_tool_catalog.json:307`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L307) | [`tools.ts:1570`](../../src/scripts/mcp_server/tools.ts#L1570) |
49
+ | `capabilities_index` | `fs-write` | stdio | [`consumer_tool_catalog.json:314`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L314) | [`tools.ts:1586`](../../src/scripts/mcp_server/tools.ts#L1586) |
50
+ | `doctor_report` | `ro` | stdio | [`consumer_tool_catalog.json:327`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L327) | [`tools.ts:1609`](../../src/scripts/mcp_server/tools.ts#L1609) |
51
+ | `conformance_check` | `ro` | stdio | [`consumer_tool_catalog.json:334`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L334) | [`tools.ts:1623`](../../src/scripts/mcp_server/tools.ts#L1623) |
52
+ | `telemetry_report` | `ro` | stdio | [`consumer_tool_catalog.json:341`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L341) | [`tools.ts:1637`](../../src/scripts/mcp_server/tools.ts#L1637) |
53
+ | `council_estimate` | `ro` | stdio | [`consumer_tool_catalog.json:354`](../../src/scripts/mcp_server/consumer_tool_catalog.json#L354) | [`tools.ts:1659`](../../src/scripts/mcp_server/tools.ts#L1659) |
53
54
 
54
55
  ## Glossary
55
56
 
@@ -17,6 +17,12 @@ type: structural
17
17
  (claude-sonnet-4-5 + gpt-4o, design mode) plus host critical-evaluation, and
18
18
  implemented by `road-to-auto-subagent-orchestration.md`.
19
19
 
20
+ > **Amended 2026-07-09 by ADR-117.** Decision 2 below ("conservative-until-proven
21
+ > shipped default `ask`") is superseded: the shipped default is flipped to `on`
22
+ > on subagent-capable hosts, on a bounded-downside re-evaluation (cost-routing
23
+ > already ships, downside is small and reversible). Every other decision in this
24
+ > ADR stands. See ADR-117 and `orchestration-default-flip-verdict § 2026-07-09`.
25
+
20
26
  ## Context
21
27
 
22
28
  The package shipped three latent subagent surfaces — the
@@ -27,7 +27,7 @@ apart:
27
27
  1. `agents/settings/contexts/second-brain-delta-verdict.md` Q4
28
28
  (2026-07-07): "file-first in-memory BM25 (minisearch-class, re-index at
29
29
  session-start, no persistence)".
30
- 2. `agents/roadmaps/road-to-memory-retrieval-economy.md` Phase 6
30
+ 2. `agents/roadmaps/archive/road-to-memory-retrieval-economy.md` Phase 6
31
31
  (2026-07-07/08): "SQLite FTS5 over the memory files … replacing
32
32
  `_score()`'s substring pass".
33
33
  3. `docs/decisions/ADR-061-corpus-grounding-layer.md`: "a new domain ships
@@ -115,7 +115,7 @@ new debate; in this state, firing would have required one.
115
115
 
116
116
  ## References
117
117
 
118
- - `agents/roadmaps/road-to-memory-retrieval-economy.md` § Phase 6 (engine
118
+ - `agents/roadmaps/archive/road-to-memory-retrieval-economy.md` § Phase 6 (engine
119
119
  note + measurement-at-activation clause).
120
120
  - `agents/settings/contexts/second-brain-delta-verdict.md` Q4 (amended
121
121
  wording + tripwire table).
@@ -0,0 +1,88 @@
1
+ ---
2
+ adr: 117
3
+ status: accepted
4
+ date: 2026-07-09
5
+ decision: subagents-auto-default-on
6
+ supersedes: 105
7
+ superseded_by: —
8
+ phase: auto-subagent-orchestration
9
+ type: structural
10
+ ---
11
+
12
+ # ADR-117 — Flip `subagents.auto` shipped default to `on` (host-gated) on bounded-downside re-evaluation
13
+
14
+ ## Status
15
+
16
+ **Accepted** · 2026-07-09. Amends ADR-105 Decision 2 ("conservative-until-proven
17
+ shipped default `ask`"). Resolved by a re-evaluation under `decision-revisit-gate`
18
+ plus a deep AI-council round (claude-sonnet-4-5 + gpt-4o, 2026-07-08, 4 rounds).
19
+
20
+ ## Context
21
+
22
+ ADR-105 shipped `subagents.auto: ask` as the conservative default and gated the
23
+ flip to `on` behind a Phase-6 benchmark. That benchmark was found
24
+ **non-producible** in this package's harness (no runtime executes model
25
+ `Task`/`Agent` tool calls), so the 2026-06-26 verdict
26
+ (`orchestration-default-flip-verdict.md`) took the honest-null branch: keep
27
+ `ask`, re-gate on realized telemetry.
28
+
29
+ That re-gate was **self-locking**: realized telemetry only accrues when the
30
+ layer is `on`, but `on` was withheld pending telemetry. Meanwhile the package
31
+ evolved:
32
+
33
+ - **Cost-routing shipped.** `road-to-cost-aware-model-routing` (2026-07-08) landed
34
+ `inferSliceTier` — delegable slices already run on the cheapest capable tier.
35
+ The system is not cost-blind; only the default was conservative.
36
+ - **The harness now executes subagents.** Host harnesses (Claude Code) execute
37
+ `Agent`/`Task` calls, so a directional probe is finally possible.
38
+
39
+ ## Decision
40
+
41
+ The shipped default for `subagents.auto` is **`on`** on hosts whose capability
42
+ manifest reports `subagent_spawn: true`, and `off` on hosts without a subagent
43
+ primitive. `resolveShippedDefault()` is retained as the telemetry-driven
44
+ **demotion** gate.
45
+
46
+ This is a **bounded-downside** decision, explicitly **not** a passed rigorous
47
+ benchmark. The basis:
48
+
49
+ 1. **Bounded downside.** `on` auto-dispatches only structurally-signalled,
50
+ cost-routed, verified slices (per `auto-dispatch-classification`). It cannot
51
+ delegate unstructured, tiny, or frontier-priced work.
52
+ 2. **Directional probe (N=2, real, honest limits).** Two live read-only-fan-out
53
+ delegations this session (~70k, ~86k Sonnet tokens on real work) → ~80%
54
+ per-task saving vs the inline-Opus counterfactual, outputs verified usable.
55
+ Small N, single task-type, arithmetic counterfactual — directional only.
56
+ 3. **Reversible + monitored.** A measured telemetry regression demotes back to
57
+ `ask` via `gateVerdict`/`resolveShippedDefault`.
58
+
59
+ ## Consequences
60
+
61
+ - On subagent-capable hosts, delegable tasks auto-dispatch without a per-task
62
+ ask; the choice is surfaced in one line.
63
+ - Realized orchestration telemetry now accrues, breaking the deadlock and
64
+ feeding the demotion gate.
65
+ - Hosts without `subagent_spawn` are unaffected (`off`, no-op).
66
+ - The delegability floor (`SIZE_FLOOR = 1` in `auto_dispatch.ts`) is unchanged
67
+ and noted as a follow-up refinement — the structural-signal gate already keeps
68
+ unstructured/tiny work in-session, so it is not load-bearing for this flip.
69
+
70
+ ## Alternatives
71
+
72
+ - **Keep `ask`, wait for a rigorous benchmark** — rejected: the benchmark is
73
+ non-producible here and the telemetry re-gate is deadlocked; this is
74
+ indefinite inertia, not caution.
75
+ - **Flip `on` universally with no cost-routing / floor argument** — rejected:
76
+ that is the money-losing "flip on unmeasured claim" the deep council warned
77
+ against; the bounded-downside basis is what makes this flip responsible.
78
+ - **Per-profile default (`on` only for developer)** — rejected for now: no
79
+ per-profile-default plumbing exists (would be new code); host-gating already
80
+ scopes the risk.
81
+
82
+ ## References
83
+
84
+ - ADR-105 — automatic subagent orchestration (Decision 2 amended here).
85
+ - ADR-109 — subagent-v1 contract; ADR-110 — discipline profile.
86
+ - `agents/settings/contexts/orchestration-default-flip-verdict.md` § 2026-07-09.
87
+ - `src/agent-src/contexts/execution/orchestration-benchmark-gate.md` — demotion gate.
88
+ - `src/agent-src/contexts/execution/auto-dispatch-classification.md` — delegability + cost-routing.
@@ -120,6 +120,7 @@ _Auto-generated by `scripts/adr/regenerate_index.py`. Do not edit._
120
120
  | [ADR-114](ADR-114-commit-policy-iron-law-override.md) | Commit Policy Iron Law Override | — | — | — |
121
121
  | [ADR-115](ADR-115-command-cluster-consolidation-phase-4.md) | Command Cluster Consolidation Phase 4 | accepted | 2026-07-08 | — |
122
122
  | [ADR-116](ADR-116-memory-tripwire-activation-path.md) | Memory Tripwire Activation Path | accepted | 2026-07-08 | — |
123
+ | [ADR-117](ADR-117-subagents-auto-default-on.md) | Subagents Auto Default On | accepted | 2026-07-09 | 105 |
123
124
  | [ADR-200](ADR-200-python-to-typescript-migration.md) | Python To Typescript Migration | accepted | 2026-06-11 | — |
124
125
 
125
126
  ## Unnumbered (legacy)
@@ -8,6 +8,8 @@
8
8
  Writers, ghostwriters, marketers — draft in someone else's voice, plan a quarter
9
9
  of content, ship a launch, render a cinematic AI video.
10
10
 
11
+ > **Domain-soundness status (honest).** These skills are forged on TS/PHP; their embedded domain heuristics are **not independently validated**. Until a skill passes a sourced `evals/domain-truth.json` fixture (`./scripts-run src/scripts/domain_soundness_status`), treat its domain correctness as a general-purpose scaffold, not proven practice. The safety floor bounds *liability*, not *correctness*.
12
+
11
13
  ## First three tasks
12
14
 
13
15
  1. **Write in a voice** — `/ghostwriter` against a public-figure voice profile, or `/post-as` for your own (`.agent-user.md`).
@@ -9,6 +9,8 @@ The CFO / fractional finance / FP&A lead — build a DCF, stress-test the plan,
9
9
  frame the runway call. Every output carries the finance safety floor (no final
10
10
  invest/raise verdict; assumptions + sensitivity + confidence band).
11
11
 
12
+ > **Domain-soundness status (honest).** These skills are forged on TS/PHP; their embedded domain heuristics are **not independently validated**. Until a skill passes a sourced `evals/domain-truth.json` fixture (`./scripts-run src/scripts/domain_soundness_status`), treat its domain correctness as a general-purpose scaffold, not proven practice. The safety floor bounds *liability*, not *correctness*.
13
+
12
14
  ## First three tasks
13
15
 
14
16
  1. **Value it** — `dcf-modeling` walks WACC / terminal-value / 5-year-hold reasoning.
@@ -8,6 +8,8 @@
8
8
  The solo / early-stage founder — sharpen a fuzzy idea, rank what to build, write
9
9
  the why-now slide, get a neutral second opinion.
10
10
 
11
+ > **Domain-soundness status (honest).** These skills are forged on TS/PHP; their embedded domain heuristics are **not independently validated**. Until a skill passes a sourced `evals/domain-truth.json` fixture (`./scripts-run src/scripts/domain_soundness_status`), treat its domain correctness as a general-purpose scaffold, not proven practice. The safety floor bounds *liability*, not *correctness*.
12
+
11
13
  ## First three tasks
12
14
 
13
15
  1. **Sharpen the idea** — `/challenge-me` runs a grill-style interview that turns a vague plan into a copyable pitch.
@@ -8,6 +8,8 @@
8
8
  RevOps, support, SRE-adjacent — threat-model a change before it ships, command
9
9
  the incident when it breaks, build the dashboard that catches it next time.
10
10
 
11
+ > **Domain-soundness status (honest).** These skills are forged on TS/PHP; their embedded domain heuristics are **not independently validated**. Until a skill passes a sourced `evals/domain-truth.json` fixture (`./scripts-run src/scripts/domain_soundness_status`), treat its domain correctness as a general-purpose scaffold, not proven practice. The safety floor bounds *liability*, not *correctness*.
12
+
11
13
  ## First three tasks
12
14
 
13
15
  1. **Threat-model first** — `/threat-model` enumerates abuse cases and trust boundaries before the first line of code.
@@ -1,6 +1,6 @@
1
1
  # Featured Skills
2
2
 
3
- A curated subset of the 264 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 267 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 264 skills: [`dist/agent-src/skills/`](../dist/agent-src/skills/) · all 172 commands: [`dist/agent-src/commands/`](../dist/agent-src/commands/)
95
+ → Browse all 267 skills: [`dist/agent-src/skills/`](../dist/agent-src/skills/) · all 172 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 264 skills, 95 governed rules, and 172 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 267 skills, 100 governed rules, and 172 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
 
@@ -134,7 +134,7 @@ Your agent is now:
134
134
  - **Respecting your codebase** — no conflicting patterns
135
135
  - **Following standards** — consistent code quality
136
136
 
137
- This is enforced automatically by 95 rules. No configuration needed.
137
+ This is enforced automatically by 100 rules. No configuration needed.
138
138
 
139
139
  ---
140
140
 
@@ -33,7 +33,7 @@ the host lacks (a static host gives it no runtime attention guarantee, but a
33
33
  runtime-only system gives it nothing at all here). A runtime-only system contributes *nothing* on these hosts.
34
34
 
35
35
  ### 2. Intent routing, not a 500-artefact dump
36
- A prompt does not load all 264 skills. `dist/router.json` (91 routed rules, intent →
36
+ A prompt does not load all 267 skills. `dist/router.json` (96 routed rules, intent →
37
37
  skill, keyword/phrase/path triggers) carries the right skill on intent. The
38
38
  governance value is *selection discipline* — the host gets the relevant rule
39
39
  set, not the whole catalogue as context ballast.
@@ -22,6 +22,18 @@ agent-config memory:lookup \
22
22
  # --envelope v1 for the retrieval-contract envelope.
23
23
  ```
24
24
 
25
+ **Index-first discipline** (road-to-memory-retrieval-economy — the mirror
26
+ of the MCP tool descriptions, for hosts without MCP): when you expect more
27
+ hits than you need, look up with `--envelope v1 --detail index` first —
28
+ each row carries `id`, `title` and `tokens_estimate` (the cost of fetching
29
+ it) — then fetch ONLY the ids you will actually use via the `memory_get`
30
+ MCP tool (or a full `--detail full` lookup narrowed to the right keys),
31
+ batching multiple ids into one call. For precise single-hit lookups the
32
+ full envelope is already minimal — the paired measurement showed index-
33
+ first COSTS tokens there (honest null pinned in
34
+ `internal/bench/reports/memory-retrieval-run.json`), so reach for index
35
+ mode on broad or exploratory queries, not reflexively.
36
+
25
37
  Every backend MUST return a list of `Hit` with:
26
38
 
27
39
  | Field | Meaning |
package/docs/proof.md CHANGED
@@ -26,16 +26,20 @@ evidence pointer, or `task check-claims` fails the build.
26
26
 
27
27
  | Claim | Kind | Evidence | Resolves |
28
28
  |---|---|---|---|
29
+ | The release process is documented as an inheritable runbook + succession doc, and the project's bus-factor (trailing-90-day distinct human reviewers) is tracked and reported truthfully — currently 1, not implied to be more. | qual | `docs/succession.md#trailing 90 days` | ✅ |
29
30
  | 172 commands. | quant | `src/scripts/check_artefact_count_messaging.ts#Artefact-count messaging gate` | ✅ |
30
31
  | On a weak host (claude-haiku-4-5) the package produces a significant, placebo-controlled discipline lift on scope/downstream traps; on a strong host the same measurement is a published null — the package transplants discipline a weak model lacks, not model intelligence. | quant | `docs/benchmark.md#weak-host-specific` | ✅ |
32
+ | The non-coding domain skills (finance/founder/ops/content) are forged on TS/PHP and labeled unvalidated until they pass a sourced domain-truth fixture; no public prose implies proven domain correctness, and the validated count is CI-ratcheted. | qual | `src/scripts/domain_soundness_status.ts#checkRatchet` | ✅ |
31
33
  | On the READ-ONLY FAN-OUT slice family, tier-downshifted subagent dispatch (lite/haiku vs session-tier-proxy sonnet) nets a ≥30% USD-weighted token-cost reduction at held quality — measured 2026-07-08 (n=10 paired live dispatches, 20 telemetry lines): 10/10 exact-match on BOTH arms, 29.4% fewer raw tokens, 76.5% USD-weighted cost reduction at the 3x haiku↔sonnet price ratio. FAMILY-SCOPED — the mechanical-edit family is unmeasured and its downshift (incl. the deferred tier downgrades of existing units) stays gated. Negative control held: an open-ended synthesis/unknown slice never resolves below the session tier (inferSliceTier → medium/inherit, never lite). | quant | `internal/bench/routing-downshift/results-2026-07-08.md#FAMILY-SCOPED PROVE` | ✅ |
32
34
  | The lift-carrying essential cut (kernel + downstream-changes) keeps a significant weak-host discipline lift at a fraction of the full load's tokens, and the lift is FAMILY- and HOST-SCOPED — measured on three hosts: claude-haiku-4-5 (weak) shows the family-scoped lift (trapE 0.533→1.000, 7/7 discordant, corpus cost 1.71x); claude-sonnet-4-6 (strong) is a ceiling null; gpt-5-mini (non-Claude weak, codex prompt-prepend surface) FAILED replication with headroom (corpus Δ=+0.024 p=0.70, capability trend n.s. — no harm claimed, injection-surface confound documented). Therefore discipline_profile: auto enables the lift only where measured (vendor-granular unknown_defaults). Non-claims — the balanced router profile was removed after a NULL measurement (p=0.81, n=24); no full-tier recommendation exists; no cross-vendor lift is claimed. | quant | `docs/benchmark.md#REPLICATION FAILED` | ✅ |
35
+ | Behavioural-eval coverage is measured per tier and CI-ratcheted so it can only rise; the current coverage and its gap are published, never implied as "264 evaluated skills". | qual | `src/scripts/skill_eval_coverage.ts#checkRatchet` | ✅ |
33
36
  | The whole layer is compiled into host agents with zero runtime daemon. | qual | `docs/contracts/no-runtime-boundary.md#file-first, no-runtime suite` | ✅ |
34
- | 95 governed rules. | quant | `src/scripts/check_artefact_count_messaging.ts#Artefact-count messaging gate` | ✅ |
35
- | 264 skills (README hero + feature list). | quant | `src/scripts/check_artefact_count_messaging.ts#Artefact-count messaging gate` | ✅ |
37
+ | 100 governed rules. | quant | `src/scripts/check_artefact_count_messaging.ts#Artefact-count messaging gate` | ✅ |
38
+ | The second-brain substrate ships as continuity convenience; its cross-session task lift is unmeasured. A deterministic recall scorer + corpus exist (the rig), but no paired run has measured a lift, so no "second brain" capability claim is made until a backed lift entry exists. | qual | `docs/second-brain-scope.md#no measured task-lift` | ✅ |
39
+ | 267 skills (README hero + feature list). | quant | `src/scripts/check_artefact_count_messaging.ts#Artefact-count messaging gate` | ✅ |
36
40
  | Removes only its own keys from a shared host config (matched by JSON-pointer + SHA-256), never a neighbour tool's entries. | qual | `docs/contracts/install-layout.md#JSON-pointer` | ✅ |
37
41
 
38
- **8 backed claim(s)** — all evidence pointers resolve in CI.
42
+ **12 backed claim(s)** — all evidence pointers resolve in CI.
39
43
 
40
44
  Artefact counts in public prose (skills, commands, governed rules,
41
45
  guidelines, personas) are **generated from source and CI-drift-checked**:
@@ -54,6 +58,42 @@ Benchmark results — **including the runs where the package changed nothing**
54
58
  live in [`docs/benchmark.md`](benchmark.md). We do not delete a measured null to
55
59
  make a number look better; the null is the evidence of honesty.
56
60
 
61
+ **Behavioural-eval coverage — the honest baseline.** Skill *quality* is only
62
+ as good as its measurement. Today **2 of 264** skills carry a behavioural
63
+ `evals.json`, and the highest-traffic / highest-cost tiers (default-surface +
64
+ `rich` + routers, **0 of 35**) are not yet covered. We publish that gap rather
65
+ than imply "264 evaluated skills": coverage is measured per tier
66
+ (`./scripts-run src/scripts/skill_eval_coverage`) and **CI-ratcheted so it can
67
+ only rise** — a merged change can never lower it. Authoring the priority-tier
68
+ evals is gated on per-case human ratification (a generated assertion that
69
+ checks the wrong property is worse than none), so the number grows
70
+ deliberately, not overnight.
71
+
72
+ **Non-coding domain soundness — scoped, not proven.** The `finance` /
73
+ `founder` / `ops` / `content` profiles sell concrete domain value (DCF,
74
+ runway, RICE, incident command, messaging), but the skills are forged on
75
+ TS/PHP — "promising, not proven" off those stacks. A disclaimer floor
76
+ bounds *liability*, not *correctness*: a skill can be format-correct,
77
+ disclaimered, and still embed a wrong domain assumption. Today **0 of 20**
78
+ default-surface domain skills carry a sourced `domain-truth` fixture
79
+ (`./scripts-run src/scripts/domain_soundness_status`); all are labeled
80
+ `unvalidated` and the validated count is CI-ratcheted. Authoring the
81
+ answer keys needs domain competence (a cited method, not the skill's own
82
+ output), so validation lands deliberately — the gap is published, never
83
+ implied away.
84
+
85
+ **Second-brain substrate — continuity convenience, task-lift unmeasured.**
86
+ The memory substrate is built (working-memory continuity across
87
+ compaction, promotable knowledge cards, contradiction surfacing), but
88
+ whether it beats a no-memory baseline on a reproducible task is **not yet
89
+ measured**. The measurement rig exists — a deterministic multi-session
90
+ recall corpus + scorer (`./scripts-run src/scripts/second_brain_score
91
+ --dry-run`, no model-in-the-loop grading) — but the paired
92
+ `memory-on`/`off`/`placebo` run is spend-bearing and pending. So no
93
+ "second brain" capability claim is made anywhere; the substrate ships as
94
+ continuity convenience until a paired run backs a lift. Boundary vs a
95
+ human PKM is stated in [`docs/second-brain-scope.md`](second-brain-scope.md).
96
+
57
97
  ## 3. Known limits (published, witness-tested)
58
98
 
59
99
  Each limitation below is stated by the skill itself and carries a witness
@@ -89,6 +129,8 @@ task check-claims # every markered public claim binds to resolvable evidence
89
129
  task check-refs # no broken internal references
90
130
  task check-skill-gaps # every logged known-limit cites a real witness test
91
131
  task check-comparison # every comparison-table "our evidence" pointer resolves
132
+ ./scripts-run src/scripts/skill_eval_coverage # behavioural-eval coverage, per tier
133
+ ./scripts-run src/scripts/skill_eval_coverage --check # the ratchet: coverage may not drop
92
134
  task build-proof-check # this page is in sync with its sources
93
135
  ```
94
136
 
@@ -0,0 +1,138 @@
1
+ # Release runbook — cut a correct release from written steps alone
2
+
3
+ > **Bus-factor doc (road-to-maintainer-bus-factor Phase 3).** The goal: a second
4
+ > maintainer — or the current one after a long gap — can cut a correct release by
5
+ > following THIS document, with no tribal knowledge. Every step maps to a real
6
+ > gate or command in the repo; nothing here is aspirational. Companion:
7
+ > [`succession.md`](succession.md) (secrets, operator-gated steps, "healthy main").
8
+ >
9
+ > **Source of truth for the mechanism:** [`src/scripts/release.ts`](../src/scripts/release.ts)
10
+ > (the shared pipeline) + [`.github/workflows/release.yml`](../.github/workflows/release.yml)
11
+ > (the CI entry) + [`ADR-113`](decisions/ADR-113-ci-native-release-label-trigger.md).
12
+ > If this runbook and those disagree, THEY win and this doc is stale — fix it.
13
+
14
+ ## 0. Mental model
15
+
16
+ There is **one** release pipeline (`src/scripts/release.ts`) reached by **two**
17
+ entry points that produce the identical result:
18
+
19
+ | Entry point | How | When to use |
20
+ |---|---|---|
21
+ | **Local** | `task release` (interactive) | You want to watch it, or CI dispatch is unavailable. |
22
+ | **CI-native** | merge a PR labeled `release` / `release:major` / `release:minor` / `release:patch` | The normal path — the merge triggers [`release.yml`](../.github/workflows/release.yml), which runs `release.ts --ci`. |
23
+
24
+ `release` auto-detects the semver bump from Conventional Commits since the last
25
+ tag; `release:major|minor|patch` forces it. A manual/recovery entry exists via
26
+ the **workflow_dispatch** on `release.yml` (inputs: `bump`, `version`,
27
+ `dry_run`, `resume`).
28
+
29
+ ## 1. Pre-flight (before you start)
30
+
31
+ - [ ] `main` is green on the latest commit (all required checks — see
32
+ [`branch-protection-policy.md`](contracts/branch-protection-policy.md)).
33
+ - [ ] Working tree clean, on `main`, `origin/main` in sync
34
+ (`release.ts` step 1 enforces this and aborts otherwise).
35
+ - [ ] `gh` authenticated (`gh auth status`).
36
+ - [ ] The target tag does **not** already exist (step 1 checks; use `--resume`
37
+ to recover a partial run — see § 5).
38
+ - [ ] You have read [`succession.md`](succession.md) if any secret-gated
39
+ downstream (npm publish, cloud deploy) must succeed this release.
40
+
41
+ ## 2. The pipeline — what `release.ts` does (9 steps)
42
+
43
+ Both entry points run these in order. Each step prints what it will do before
44
+ doing it, so a crash localises to a step.
45
+
46
+ 1. **Preflight** — on `main`, clean tree, `origin` in sync, `gh` present, target
47
+ tag absent.
48
+ 2. **Plan** — compute the new version, parse Conventional Commits since the last
49
+ tag, render the CHANGELOG section.
50
+ 3. **Confirm** — show the preview and ask once. `--yes` skips; `--ci` always
51
+ requires `--yes` (no terminal in CI).
52
+ 4. **Branch + bump** — create `release/X.Y.Z`; update `package.json`,
53
+ `.claude-plugin/marketplace.json`, `CHANGELOG.md`; then run
54
+ `task release-prepare` so pack manifests + tool projections pick up the new
55
+ version (skip this and the PR's own consistency check fails — PR #226
56
+ post-mortem).
57
+ 5. **Commit + push** — commit `release: X.Y.Z`, push the branch, open the PR.
58
+ 6. **Wait for CI** — `gh pr checks --watch` (skippable with `--no-wait`).
59
+ 7. **Merge** — `gh pr merge --merge --delete-branch`.
60
+ 8. **Tag main** — fast-forward `main`, tag the merge commit, push the tag.
61
+ 9. **GitHub Release** — `gh release create X.Y.Z --notes <changelog>`. Under
62
+ `--ci`, also dispatches `release-guard.yml` + `publish-npm.yml` +
63
+ `cloud-release.yml` (a bot-pushed tag does not trigger them on its own —
64
+ GitHub's `GITHUB_TOKEN` recursion guard).
65
+
66
+ ## 3. The two ways to run it
67
+
68
+ ### A. CI-native (normal)
69
+
70
+ 1. Open your change PR as usual; get it green + merged into `main`.
71
+ 2. To release, add a **`release`** label (or `release:minor` etc.) to a PR and
72
+ merge it. `release.yml` fires on `pull_request: closed` (merged) and runs
73
+ `release.ts --ci`.
74
+ 3. **Manual checkpoint (only without `RELEASE_PR_TOKEN`):** GitHub's
75
+ bot-created-PR safeguard queues the release PR's required checks in an
76
+ approval-required state. Go to the release PR → **"Approve workflows to
77
+ run"** once. The job's `gh pr checks --watch` then proceeds. This is a
78
+ deliberate production-release checkpoint, not a bug (see
79
+ [`branch-protection-policy.md`](contracts/branch-protection-policy.md)).
80
+ Configuring `RELEASE_PR_TOKEN` removes it (see [`succession.md`](succession.md)).
81
+ 4. Watch the `release.yml` run to green. It merges the release PR, tags, cuts
82
+ the GitHub Release, and dispatches the downstream workflows.
83
+
84
+ ### B. Local (`task release`)
85
+
86
+ 1. `task release` — interactive; it runs the same 9 steps and asks once at
87
+ step 3. Use `--as minor` / `--version X.Y.Z` to override the bump; `--dry-run`
88
+ to preview with zero git/gh mutations.
89
+ 2. Watch it merge + tag. The tag push triggers `publish-npm.yml` directly (local
90
+ runs use your user token, so no recursion guard applies).
91
+
92
+ ## 4. Post-release verification
93
+
94
+ - [ ] `git log --first-parent origin/main -1` shows the `release: X.Y.Z` merge.
95
+ - [ ] `gh release view X.Y.Z` exists with the CHANGELOG notes.
96
+ - [ ] `publish-npm.yml` succeeded (npm has the new version) — see
97
+ [`succession.md`](succession.md) for the token dependency.
98
+ - [ ] Downstream deploys (`cloud-release.yml`, site) green if this release
99
+ touched them.
100
+ - [ ] `main` is green post-merge (no drift gate red: `release-drift.yml`,
101
+ `release-guard.yml`).
102
+
103
+ ## 5. Recovery — a partial or failed release
104
+
105
+ `release.ts` is **idempotent under `--resume`**: it probes existing state
106
+ (branch, commit, PR, tag, GitHub Release) and skips completed steps.
107
+
108
+ - Re-run `release.yml` via **workflow_dispatch** with `resume: true`, or locally
109
+ `task release -- --resume`.
110
+ - Firing the `release` label path twice is a clean no-op (the `--ci`
111
+ nothing-to-release short-circuit).
112
+ - If a downstream dispatch (npm/cloud) failed but the tag + Release exist, re-run
113
+ that specific workflow from the Actions tab — do **not** re-cut the release.
114
+
115
+ ## 6. What can go wrong (known checkpoints)
116
+
117
+ - **Release PR checks stuck "expected"** → the approve-workflows checkpoint in
118
+ § 3.A step 3. Not a failure; click approve.
119
+ - **Consistency check red on the release PR** → step 4's `task release-prepare`
120
+ did not run or pack manifests drifted; re-run it on the release branch.
121
+ - **Tag exists but no npm version** → `publish-npm.yml` did not fire or failed;
122
+ re-run it (§ 5). Never delete + re-push the tag to "retry".
123
+ - **`main`/`origin` diverged mid-release** → stop; resolve the divergence with
124
+ the `git-workflow` skill's Divergent-State Recovery procedure first, then
125
+ `--resume`.
126
+
127
+ ## 7. Verify this runbook is not stale
128
+
129
+ ```bash
130
+ # every command / gate this runbook names still exists:
131
+ test -f src/scripts/release.ts && test -f .github/workflows/release.yml
132
+ grep -q "release-prepare" Taskfile.yml
133
+ ./scripts-run src/scripts/check_release_pr_shape --help >/dev/null 2>&1 || true
134
+ ```
135
+
136
+ A written-steps-only **dry run** (cut a no-op release following ONLY this doc,
137
+ no tribal knowledge) is the real freshness test — see the roadmap's Phase 3
138
+ dry-run step (maintainer-run; every gap found is a fix to this file).
@@ -0,0 +1,73 @@
1
+ # Second-brain scope — what it is, what it is not, what is measured
2
+
3
+ > The agent-config "second-brain" substrate is **agent-facing memory**, not a
4
+ > human personal-knowledge-management (PKM) tool. This page states the boundary
5
+ > honestly and binds every capability word to evidence. It follows the
6
+ > `docs/proof.md` § 4 discipline: the category column describes human-PKM only
7
+ > by what is publicly observable, never as a counter-claim to a named project.
8
+ >
9
+ > Roadmap: `road-to-second-brain-delta-proof`. Verdict of record:
10
+ > `agents/settings/contexts/second-brain-delta-verdict.md` (council 2026-07-07).
11
+
12
+ ## The honest status (2026-07-08)
13
+
14
+ The substrate is **built** (typed knowledge dirs, INDEX generator, retrieval
15
+ protocol, `hot_context_hook` working-memory continuity across compaction,
16
+ `fold_intake`, contradiction surfacing). What is **not yet measured** is the
17
+ *delta*: whether agent-facing memory beats a no-memory baseline on a
18
+ reproducible multi-session task.
19
+
20
+ - **The measurement rig exists** — a deterministic multi-session recall corpus
21
+ (`internal/bench/second-brain/corpus/`) + a scorer
22
+ (`src/scripts/second_brain_score.ts`) with no model-in-the-loop grading. It
23
+ dry-runs correctly and discriminatingly on hand-written transcripts.
24
+ - **The paired run does not** — the 3-arm `memory-on` / `memory-off` /
25
+ `placebo` measurement (Phase 2) is spend-bearing and has not been run. So
26
+ there is **no measured task-lift**, and therefore **no "second brain"
27
+ capability claim** is made anywhere in public prose. This is the
28
+ falsifiability lock: the marker never outruns the evidence.
29
+
30
+ Until the paired run backs a lift, the substrate is documented as **continuity
31
+ convenience** — it carries working memory across sessions and compaction — not
32
+ a proven task-accuracy multiplier.
33
+
34
+ ## What it IS (by design; task-lift unmeasured)
35
+
36
+ | Capability | What it does | Evidence status |
37
+ |---|---|---|
38
+ | Working-memory continuity | `hot_context_hook` re-injects a bounded, deterministic cache across session boundaries and Claude Code compaction | mechanism shipped; task-lift **unmeasured** |
39
+ | Promotable knowledge cards/pages | typed dirs + INDEX + retrieval protocol, with redaction + team-share gate | mechanism shipped; task-lift **unmeasured** |
40
+ | Contradiction surfacing | a session that contradicts a prior decision is flagged on promote | mechanism shipped; catch-rate **unmeasured** |
41
+
42
+ ## What it is NOT
43
+
44
+ - **Not a human-browsable knowledge graph.** There is no `.obsidian/` config,
45
+ no enforced `[[wikilink]]` convention, no link-density value thesis. An
46
+ editable vault view was evaluated and **rejected** (the dual-write hazard:
47
+ an external edit that never commits silently diverges the INDEX and
48
+ recurrence counters). Browsability, if demanded, is a read-only static
49
+ render — not an editable vault.
50
+ - **Not an Obsidian (or any named PKM) replacement.** The category — a
51
+ human Markdown graph browsed in an editor, value proportional to
52
+ link-density, hybrid human-facing retrieval — is a *different product* for a
53
+ *different consumer* (a person, not an agent). This package writes
54
+ agent-facing memory; it does not serve a human graph browser.
55
+ - **Not a measured accuracy multiplier** — see the honest status above.
56
+
57
+ ## Interop, not competition (gated on a measured lift)
58
+
59
+ If — and only if — the Phase-2 paired run shows a real lift, the sanctioned
60
+ next step is a **one-way export** (promoted cards → plain Obsidian-compatible
61
+ Markdown + wikilinks), positioning agent-config as the *writer* and a human PKM
62
+ as the *reader*: complementary, never a replacement. Absent a measured lift,
63
+ the exporter is not built.
64
+
65
+ ## Verify
66
+
67
+ ```bash
68
+ ./scripts-run src/scripts/second_brain_score # corpus summary
69
+ ./scripts-run src/scripts/second_brain_score --dry-run # scorer correct + discriminating, no spend
70
+ ```
71
+
72
+ The paired-run delta, when authorized, pins to
73
+ `internal/bench/reports/` and updates `docs/CLAIMS.md` + `docs/benchmark.md`.