@event4u/agent-config 8.9.0 → 8.10.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 (117) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +41 -0
  3. package/README.md +5 -5
  4. package/dist/agent-src/commands/cost/report.md +13 -3
  5. package/dist/agent-src/commands/tests/create.md +28 -6
  6. package/dist/agent-src/commands/work.md +33 -0
  7. package/dist/agent-src/commands/worktree/cleanup.md +78 -0
  8. package/dist/agent-src/commands/worktree/create.md +62 -0
  9. package/dist/agent-src/commands/worktree/status.md +63 -0
  10. package/dist/agent-src/commands/worktree/verify.md +70 -0
  11. package/dist/agent-src/commands/worktree.md +85 -0
  12. package/dist/agent-src/contexts/execution/orchestration-telemetry.md +47 -34
  13. package/dist/agent-src/rules/design-fidelity.md +40 -0
  14. package/dist/agent-src/rules/spreadsheet-source-quality.md +61 -0
  15. package/dist/agent-src/skills/accessibility-auditor/evals/evals.json +15 -0
  16. package/dist/agent-src/skills/analysis-skill-router/evals/evals.json +13 -0
  17. package/dist/agent-src/skills/api-testing/SKILL.md +15 -1
  18. package/dist/agent-src/skills/character-consistency/evals/evals.json +16 -0
  19. package/dist/agent-src/skills/command-routing/evals/evals.json +14 -0
  20. package/dist/agent-src/skills/dashboard-design/evals/evals.json +16 -0
  21. package/dist/agent-src/skills/dcf-modeling/evals/evals.json +20 -0
  22. package/dist/agent-src/skills/decision-record/evals/evals.json +20 -0
  23. package/dist/agent-src/skills/design-intelligence/evals/evals.json +14 -0
  24. package/dist/agent-src/skills/design-review/SKILL.md +6 -0
  25. package/dist/agent-src/skills/design-system-capture/SKILL.md +21 -0
  26. package/dist/agent-src/skills/design-system-capture/evals/evals.json +15 -0
  27. package/dist/agent-src/skills/developer-like-execution/evals/evals.json +16 -0
  28. package/dist/agent-src/skills/doc-coauthoring/SKILL.md +27 -0
  29. package/dist/agent-src/skills/doc-coauthoring/evals/evals.json +16 -0
  30. package/dist/agent-src/skills/editorial-calendar/evals/domain-truth.json +16 -0
  31. package/dist/agent-src/skills/editorial-calendar/evals/evals.json +16 -0
  32. package/dist/agent-src/skills/estimate-ticket/evals/evals.json +16 -0
  33. package/dist/agent-src/skills/existing-ui-audit/SKILL.md +30 -0
  34. package/dist/agent-src/skills/existing-ui-audit/evals/triggers.json +47 -0
  35. package/dist/agent-src/skills/fe-design/SKILL.md +36 -5
  36. package/dist/agent-src/skills/fe-design/evals/triggers.json +47 -0
  37. package/dist/agent-src/skills/forecasting/evals/evals.json +20 -0
  38. package/dist/agent-src/skills/fundraising-narrative/evals/domain-truth.json +16 -0
  39. package/dist/agent-src/skills/fundraising-narrative/evals/evals.json +16 -0
  40. package/dist/agent-src/skills/html-deck/SKILL.md +27 -0
  41. package/dist/agent-src/skills/iconography/SKILL.md +24 -0
  42. package/dist/agent-src/skills/incident-commander/evals/domain-truth.json +16 -0
  43. package/dist/agent-src/skills/incident-commander/evals/evals.json +20 -0
  44. package/dist/agent-src/skills/launch-readiness/evals/evals.json +21 -0
  45. package/dist/agent-src/skills/logging-monitoring/evals/evals.json +16 -0
  46. package/dist/agent-src/skills/messaging-architecture/evals/domain-truth.json +16 -0
  47. package/dist/agent-src/skills/messaging-architecture/evals/evals.json +16 -0
  48. package/dist/agent-src/skills/perf-feedback-craft/evals/evals.json +16 -0
  49. package/dist/agent-src/skills/pest-testing/SKILL.md +1 -1
  50. package/dist/agent-src/skills/playwright-testing/SKILL.md +16 -0
  51. package/dist/agent-src/skills/prompt-engineering-patterns/evals/evals.json +16 -0
  52. package/dist/agent-src/skills/refine-prompt/evals/evals.json +16 -0
  53. package/dist/agent-src/skills/refine-ticket/evals/evals.json +16 -0
  54. package/dist/agent-src/skills/release-comms/evals/evals.json +16 -0
  55. package/dist/agent-src/skills/rice-prioritization/evals/evals.json +20 -0
  56. package/dist/agent-src/skills/runway-cognition/evals/evals.json +20 -0
  57. package/dist/agent-src/skills/scenario-modeling/evals/evals.json +20 -0
  58. package/dist/agent-src/skills/spreadsheet-authoring/SKILL.md +98 -0
  59. package/dist/agent-src/skills/spreadsheet-authoring/evals/triggers.json +47 -0
  60. package/dist/agent-src/skills/systematic-debugging/evals/evals.json +20 -0
  61. package/dist/agent-src/skills/test-case-discovery/SKILL.md +118 -0
  62. package/dist/agent-src/skills/test-case-discovery/evals/triggers.json +52 -0
  63. package/dist/agent-src/skills/test-driven-development/SKILL.md +32 -6
  64. package/dist/agent-src/skills/test-driven-development/evals/evals.json +16 -0
  65. package/dist/agent-src/skills/testing-anti-patterns/SKILL.md +7 -6
  66. package/dist/agent-src/skills/threat-modeling/evals/evals.json +21 -0
  67. package/dist/agent-src/skills/typography-system/evals/evals.json +14 -0
  68. package/dist/agent-src/skills/unit-economics-modeling/evals/evals.json +24 -0
  69. package/dist/agent-src/skills/verify-completion-evidence/evals/evals.json +16 -0
  70. package/dist/agent-src/skills/vision-articulation/evals/evals.json +16 -0
  71. package/dist/agent-src/skills/voice-and-tone-design/evals/evals.json +16 -0
  72. package/dist/agent-src/skills/worktree-lifecycle/SKILL.md +180 -0
  73. package/dist/agent-src/skills/worktree-lifecycle/evals/triggers.json +52 -0
  74. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  75. package/dist/discovery/deprecation-report.md +1 -1
  76. package/dist/discovery/discovery-manifest.json +249 -32
  77. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  78. package/dist/discovery/discovery-manifest.summary.md +6 -6
  79. package/dist/discovery/orphan-report.md +1 -1
  80. package/dist/discovery/packs.json +22 -13
  81. package/dist/discovery/trust-report.md +4 -4
  82. package/dist/discovery/workspaces.json +22 -11
  83. package/dist/mcp/registry-manifest.json +2 -2
  84. package/dist/router.json +1 -1
  85. package/docs/CLAIMS.md +3 -3
  86. package/docs/architecture.md +3 -3
  87. package/docs/catalog.md +19 -8
  88. package/docs/command-flows.md +6 -1
  89. package/docs/contracts/CHANGELOG-conventions.md +6 -0
  90. package/docs/contracts/design-artifact-lifecycle.md +93 -0
  91. package/docs/contracts/design-artifact-verification.md +30 -1
  92. package/docs/contracts/release-pr-gating.md +26 -0
  93. package/docs/contracts/release-sizing.md +85 -0
  94. package/docs/contracts/surface-agent-contracts.md +153 -0
  95. package/docs/decisions/ADR-115-command-cluster-consolidation-phase-4.md +1 -1
  96. package/docs/distribution/consumer-matrix.md +96 -0
  97. package/docs/featured-skills.md +2 -2
  98. package/docs/getting-started-by-role.md +1 -1
  99. package/docs/getting-started.md +2 -2
  100. package/docs/governance-advantage.md +1 -1
  101. package/docs/proof.md +4 -4
  102. package/docs/release-runbook.md +3 -0
  103. package/docs/self-review-gate.md +51 -0
  104. package/package.json +1 -1
  105. package/src/scripts/_lib/orchestration_record.ts +13 -0
  106. package/src/scripts/_lib/orchestration_savings.ts +52 -0
  107. package/src/scripts/check_release_adjacent_health.ts +121 -0
  108. package/src/scripts/check_rule_invariants.ts +275 -0
  109. package/src/scripts/consumer_matrix.ts +353 -0
  110. package/src/scripts/generate_index.ts +3 -2
  111. package/src/scripts/lint_changelog_rollback.ts +293 -0
  112. package/src/scripts/orchestration_record.ts +16 -0
  113. package/src/scripts/orchestration_savings_report.ts +36 -3
  114. package/src/scripts/second_brain_retrieval.ts +44 -2
  115. package/src/scripts/self_review_gate.test.ts +65 -0
  116. package/src/scripts/self_review_gate.ts +272 -0
  117. package/src/scripts/trigger_eval_grandfather.json +223 -224
@@ -0,0 +1,93 @@
1
+ # Design-Artifact Lifecycle Contract
2
+
3
+ Phase 1 of `road-to-design-artifact-fidelity`.
4
+ One lifecycle every design/artifact skill points at, so "context before taste"
5
+ and "rendered artifact before claim" are a shared workflow, not per-skill folklore.
6
+ Design work is a **pipeline** — understand, inspect, plan, build, verify, hand
7
+ off — not a bag of styling tips.
8
+
9
+ This contract is advisory (staged-rollout stage 1 per
10
+ [`design-artifact-verification` § Staged rollout](design-artifact-verification.md#staged-rollout)):
11
+ skills reference these stages; nothing here is a default gate yet.
12
+
13
+ ## The lifecycle
14
+
15
+ Six stages. Every design task runs the stages its branch (below) selects — never
16
+ skips straight to "build".
17
+
18
+ | # | Stage | What it does | Exercised by fixtures |
19
+ |---|---|---|---|
20
+ | 1 | **Understand** | Medium, audience, fidelity, target host. What *kind* of artifact (screen, deck, doc, component, prototype), for whom, at what polish, verifiable how (per the capability table). | `daf-no-context` |
21
+ | 2 | **Inspect** | Read the existing design system + code **before** styling — code over screenshots when available; copy the visual vocabulary; confirm assets exist. Ask when no context is attached. | `daf-inaccessible-design-system`, `daf-missing-asset` |
22
+ | 3 | **Plan** | Define the visual system + the variation plan: which axis varies, how many options, labelled. No unrequested variations. | `daf-requested-variations`, `daf-unwanted-variations` |
23
+ | 4 | **Build** | Produce the artifact against the system. Surgical on edits; no invented filler (§ Design constraints). | `daf-edit-preservation` |
24
+ | 5 | **Verify** | Prove the rendered artifact — render / load / responsive / export — via a primitive the host has, else caveat honestly (never fake). | `daf-overlapping-text`, `daf-mobile-fit`, `daf-export-readback-failure` |
25
+ | 6 | **Handoff** | Brief, honest handoff: what was built, what is verified vs caveated, implementation intent, preserved comment anchors. | `daf-export-readback-failure` |
26
+
27
+ Fixtures are defined in [`tests/design-artifacts/eval-fixtures.md`](../../tests/design-artifacts/eval-fixtures.md);
28
+ the ids are stable so skill edits in later phases can prove the stage is operational.
29
+
30
+ ## Skill → stage map
31
+
32
+ Skills own the *depth* at each stage; the lifecycle owns the *order*. A skill
33
+ cites the stage(s) it serves instead of re-describing the workflow.
34
+
35
+ | Stage | Primary skills |
36
+ |---|---|
37
+ | Understand | [`fe-design`](../../src/skills/fe-design/SKILL.md), [`design-review`](../../src/skills/design-review/SKILL.md) |
38
+ | Inspect | [`existing-ui-audit`](../../src/skills/existing-ui-audit/SKILL.md), [`brand-audit`](../../src/skills/brand-audit/SKILL.md), [`brand-to-tokens`](../../src/skills/brand-to-tokens/SKILL.md) |
39
+ | Plan | [`fe-design`](../../src/skills/fe-design/SKILL.md), [`ui-component-architect`](../../src/skills/ui-component-architect/SKILL.md) |
40
+ | Build | [`ui-component-architect`](../../src/skills/ui-component-architect/SKILL.md), [`html-deck`](../../src/skills/html-deck/SKILL.md) (decks), [`doc-coauthoring`](../../src/skills/doc-coauthoring/SKILL.md) (documents) |
41
+ | Verify | [`playwright-testing`](../../src/skills/playwright-testing/SKILL.md), [`design-review`](../../src/skills/design-review/SKILL.md), [`markitdown`](../../src/skills/markitdown/SKILL.md) (export readback) |
42
+ | Handoff | [`design-review`](../../src/skills/design-review/SKILL.md), [`design-system-capture`](../../src/skills/design-system-capture/SKILL.md) |
43
+
44
+ (The roadmap's conceptual "presentations" / "PDF / document" skills map to the
45
+ real `html-deck`, `markitdown`, and `doc-coauthoring` skills above.)
46
+
47
+ ## Branch rules
48
+
49
+ The lifecycle is not linear for every task. Pick the branch first; it selects
50
+ which stages run and which fixtures gate it (each branch has ≥1 fixture).
51
+
52
+ | Branch | Trigger | Stages run | Gating fixtures |
53
+ |---|---|---|---|
54
+ | **New design** | Greenfield artifact, no prior version | 1→2→3→4→5→6 (full) | `daf-no-context`, `daf-inaccessible-design-system`, `daf-requested-variations` |
55
+ | **Targeted edit** | Change one named thing in an existing artifact | 2 (light) → 4 → 5 | `daf-edit-preservation`, `daf-unwanted-variations` |
56
+ | **Iteration** | Refine an existing artifact across a version bump | 1 (delta) → 3 → 4 → 5; **preserve the prior version** on a major revision | `daf-requested-variations` |
57
+ | **Design-system extraction** | Derive tokens/components from existing artifacts | 2 (deep) → 6 | `daf-inaccessible-design-system` |
58
+ | **Handoff to production code** | Turn a design into implementation intent | 5 → 6 | `daf-overlapping-text`, `daf-mobile-fit`, `daf-export-readback-failure` |
59
+
60
+ **Targeted edit stays surgical** — no redesign of neighbours, no reformatting of
61
+ untouched regions, comment anchors preserved (the `daf-edit-preservation`
62
+ contract; mirrors [`minimal-safe-diff`](../../src/rules/minimal-safe-diff.md) for
63
+ visual work). **Iteration preserves the prior version** on a major revision so a
64
+ regression is recoverable.
65
+
66
+ ## Design constraints — do not invent filler
67
+
68
+ ```
69
+ EMPTY SPACE IS A COMPOSITION PROBLEM, NOT PERMISSION TO ADD MATERIAL.
70
+ NEVER INVENT FAKE SECTIONS, FAKE METRICS, LOREM-STYLE COPY, OR STOCK
71
+ DECORATION TO FILL A LAYOUT. ASK BEFORE ADDING MATERIAL THAT ISN'T IN THE BRIEF.
72
+ ```
73
+
74
+ - **Do not invent filler.** A sparse layout is solved with composition
75
+ (spacing, scale, hierarchy), not with fabricated content. Fake KPIs, invented
76
+ testimonials, placeholder charts with made-up numbers, and decorative
77
+ stock-like imagery are content the user did not ask for and cannot trust.
78
+ - **Ask before adding material.** If the artifact genuinely needs content that
79
+ isn't supplied (a section the brief implies but doesn't provide), surface the
80
+ gap and ask — do not silently manufacture it. Realistic placeholder clearly
81
+ labelled as placeholder is acceptable when the user asked for a mock; passing
82
+ invented data off as real is not.
83
+
84
+ This is the design-surface instance of the no-invented-facts discipline
85
+ ([`direct-answers`](../../src/rules/direct-answers.md) Iron Law 2) and the
86
+ no-placeholder-slop rule ([`output-discipline`](../../src/rules/output-discipline.md)).
87
+
88
+ ## Related
89
+
90
+ - [`design-artifact-verification`](design-artifact-verification.md) — the Phase-0 host-capability & degrade contract this lifecycle's Verify stage runs against.
91
+ - [`tests/design-artifacts/eval-fixtures.md`](../../tests/design-artifacts/eval-fixtures.md) — the nine fixtures the stages + branches gate on.
92
+ - [`design-fidelity`](../../src/rules/design-fidelity.md) — the provided-design-is-the-spec rule the Inspect stage enforces.
93
+ - [`fe-design`](../../src/skills/fe-design/SKILL.md), [`existing-ui-audit`](../../src/skills/existing-ui-audit/SKILL.md), [`design-review`](../../src/skills/design-review/SKILL.md), [`ui-component-architect`](../../src/skills/ui-component-architect/SKILL.md) — the design skills that cite these stages.
@@ -1,6 +1,6 @@
1
1
  # Design-Artifact Verification — Host-Capability & Degrade Contract
2
2
 
3
- Phase 0 substrate for [`road-to-design-artifact-fidelity`](../../agents/roadmaps/road-to-design-artifact-fidelity.md).
3
+ Phase 0 substrate for `road-to-design-artifact-fidelity`.
4
4
  Design work is only production-grade if the agent **verifies the rendered
5
5
  artifact** — but a verification step the host cannot run must degrade honestly,
6
6
  never block the work or fake a green check.
@@ -78,6 +78,35 @@ When the needed primitive is `❌` (or a `⚠️` probe fails):
78
78
  console errors") for a check that did not run — that is an invented fact
79
79
  ([`direct-answers`](../../src/rules/direct-answers.md) Iron Law 2).
80
80
 
81
+ ## Verification checklist
82
+
83
+ Run before claiming a design artifact done. Each step is gated by the primitive
84
+ it needs — a step whose primitive is absent is **skipped with a caveat**, never
85
+ faked (§ Honest-degrade). "Looks good" is not a verification result.
86
+
87
+ 1. **Open the artifact** (`local_browser` / `playwright` / `pdf_render` / `doc_export`) — it opens and paints; a static-only host inspects the source instead.
88
+ 2. **Console / load errors** (`console_inspect`) — no runtime errors or failed loads on open.
89
+ 3. **Desktop + mobile viewport** (`screenshot`) — inspect a desktop width and ~375px; no overflow / clipping.
90
+ 4. **Text fit / no overlap** (`screenshot`, degrade `static_inspect`) — no collisions or truncation at the target breakpoints.
91
+ 5. **Referenced assets decode** (`image_decode`) — every referenced image / font resolves and decodes (no broken `src`).
92
+ 6. **Key interaction state** (`playwright`) — the primary interaction (open / submit / toggle) behaves; description-only where unavailable.
93
+ 7. **Capture evidence only when supported** (`screenshot`) — attach a screenshot / diff when the host can; otherwise cite what was statically checked.
94
+
95
+ **Completion contract.** A design task with render capability present cannot
96
+ claim "done" without at least steps 1–5 as evidence. Where capability is absent
97
+ (no browser / renderer), report that plainly (§ Rollback language) and keep the
98
+ completion claim scoped to what was actually checked. The checklist is exercised
99
+ by the verification golden tasks in
100
+ [`eval-fixtures.md`](../../tests/design-artifacts/eval-fixtures.md)
101
+ (`daf-nonblank-canvas`, `daf-mobile-fit`, `daf-missing-asset`,
102
+ `daf-overlapping-text`, `daf-broken-interaction`, `daf-export-readback-failure`).
103
+
104
+ Skills wire this in: [`playwright-testing`](../../src/skills/playwright-testing/SKILL.md)
105
+ runs it when a browser primitive is present; [`design-review`](../../src/skills/design-review/SKILL.md)
106
+ gates its verdict on it; static decks / documents use the deck / PDF / document
107
+ verification path ([`html-deck`](../../src/skills/html-deck/SKILL.md),
108
+ [`markitdown`](../../src/skills/markitdown/SKILL.md) readback).
109
+
81
110
  ## Staged rollout
82
111
 
83
112
  Design-artifact fidelity rolls out in three stages so nothing becomes a hard
@@ -80,6 +80,27 @@ the feature-PR floor by adding:
80
80
  | `release-validation.yml` (Phase B) | `release-shape` | shape detector — fails closed if diff exits the allowlist |
81
81
  | `release-validation.yml` (Phase B) | `changelog-entry` | CHANGELOG carries an entry matching the head-branch version |
82
82
  | `release-validation.yml` (Phase B) | `version-consistency` | `package.json` / `marketplace.json` / pack manifests agree on the version |
83
+ | `consumer-matrix.yml` | `consumer-matrix` · `publish-dry-run` · `mcp-worker-dry-run` · `plugin-bootstrap` | pack-based consumer E2E + pre-tag dry-runs of the release-adjacent workflows — see the exemption note below |
84
+
85
+ ## Consumer-matrix exemption — the tarball window
86
+
87
+ The cut surface above rests on "release PRs cannot regress install or
88
+ runtime behaviour by construction". That argument covers the **source
89
+ diff** — it is blind to the **published tarball**. Every historical
90
+ packaging incident (tarball missing `src/install/` across two minors,
91
+ `tsx` absent from the package, npm-pin drift, the MCP worker deploy red
92
+ across five releases) entered `main` on ordinary PRs and manifested only
93
+ at publish time — exactly the window between merge and tag where nothing
94
+ pack-based ran.
95
+
96
+ [`consumer-matrix.yml`](../../.github/workflows/consumer-matrix.yml) is
97
+ therefore **exempt from the release-PR skip and runs ON release PRs** (its
98
+ primary trigger), packing the tarball and exercising it as a consumer,
99
+ plus dry-running `publish-npm.yml` and `deploy-mcp-worker.yml` before the
100
+ tag exists. Contract + counterfactual map:
101
+ [`docs/distribution/consumer-matrix.md`](../distribution/consumer-matrix.md).
102
+ The source-level skips above stay unchanged — the exemption adds the
103
+ tarball dimension, it does not reopen the source matrices.
83
104
 
84
105
  ## Rollback trigger — fail-closed
85
106
 
@@ -122,3 +143,8 @@ name alone never bypasses the heavy matrix.
122
143
  release-branch naming convention.
123
144
  - [`ADR-113`](../decisions/ADR-113-ci-native-release-label-trigger.md) — the
124
145
  CI-native (`release`-label) entry point into the same script.
146
+ - [`docs/distribution/consumer-matrix.md`](../distribution/consumer-matrix.md) —
147
+ pack-based consumer E2E; the documented exemption from the cut surface.
148
+ - [`release-sizing.md`](release-sizing.md) — release scope floor: one primary
149
+ goal per minor, `Rollback:` lines for new / reworked subsystems (gate:
150
+ `src/scripts/lint_changelog_rollback.ts`).
@@ -0,0 +1,85 @@
1
+ ---
2
+ stability: beta
3
+ keep-beta-until: 2026-09-10
4
+ ---
5
+
6
+ # Release Sizing
7
+
8
+ > **Status:** active · v0 / beta · 2026-07-10. Governs how much a
9
+ > minor release may carry and what every shipped subsystem owes the
10
+ > reader: one primary goal, a disable path, and a named rollback.
11
+ > No version numbers appear here as commitments — this contract
12
+ > shapes releases, it does not schedule them.
13
+
14
+ ## One primary product goal per minor release
15
+
16
+ Every minor release names **exactly one primary product goal** — the
17
+ one-sentence answer to "why does this release exist?". Secondary
18
+ changes may ride along, but the release notes lead with the primary
19
+ goal, and a release that cannot name one is not ready to cut.
20
+ Scope discipline, not a ratio: what qualifies is a judgment call the
21
+ maintainer makes when labeling the release PR
22
+ ([`release-pr-gating.md`](release-pr-gating.md)).
23
+
24
+ ## Major subsystems are independently disableable where feasible
25
+
26
+ A major subsystem shipped or substantially reworked in a release is
27
+ **independently disableable** where feasible — a settings key in
28
+ `.agent-settings.yml`, a pack that can stay uninstalled, or an
29
+ explicit opt-in flag. The release notes **name the flag / config
30
+ key** so a consumer who hits a regression can switch the subsystem
31
+ off without downgrading the whole package. "Where feasible" is a
32
+ real qualifier: kernel rules and the install skeleton have no
33
+ sensible off-switch; everything above that floor should.
34
+
35
+ ## Rollback path — the `Rollback:` line
36
+
37
+ Every CHANGELOG entry that **introduces or substantially reworks a
38
+ subsystem** names its rollback path in the entry itself via a
39
+ `Rollback:` line:
40
+
41
+ ```md
42
+ * **workspace:** task-orchestration layer behind `/work` ([abc1234](…))
43
+ Rollback: set `workspace.enabled: false` in `.agent-settings.yml`.
44
+ ```
45
+
46
+ The rollback path is the disable flag from the section above, a
47
+ revert instruction, or a downgrade note — whatever actually undoes
48
+ the subsystem for a consumer. Enforced mechanically:
49
+ `src/scripts/lint_changelog_rollback.ts` fails when a new minor /
50
+ major section (`## [X.Y.0]`) contains no `Rollback:` line. The gate
51
+ only fires for versions **strictly greater** than the version in
52
+ `package.json` at lint time, so historical sections never retro-fail;
53
+ entry shape stays governed by
54
+ [`CHANGELOG-conventions.md`](CHANGELOG-conventions.md).
55
+
56
+ ## Consumer matrix is the floor for every release
57
+
58
+ The pack-based consumer matrix —
59
+ [`../distribution/consumer-matrix.md`](../distribution/consumer-matrix.md)
60
+ (authored in parallel; forward link) — is the **floor** for every
61
+ release: no release ships a change that knowingly breaks a supported
62
+ cell of that matrix without the break being declared under
63
+ `### BREAKING CHANGES` and reflected in the matrix in the same
64
+ release.
65
+
66
+ ## REJECTED — consumer-facing effort ratio
67
+
68
+ The proposed meta-ratio *"≥ 2/3 of effort per release must be
69
+ consumer-facing"* was **CUT by council 2026-07-10**
70
+ (claude-sonnet-4-5 + gpt-4o, unanimous) as a **gameable vanity
71
+ metric**: effort is unmeasurable at review time, "consumer-facing"
72
+ is reclassifiable at will, and the ratio punishes necessary
73
+ infrastructure releases. Recorded here so it is not re-proposed;
74
+ re-opening it requires new evidence per the decision-revisit gate.
75
+
76
+ ## Cross-references
77
+
78
+ - [`CHANGELOG-conventions.md`](CHANGELOG-conventions.md) — entry
79
+ shape the `Rollback:` line extends.
80
+ - [`release-pr-gating.md`](release-pr-gating.md) — release-PR shape
81
+ detection; the sizing judgment happens at labeling time.
82
+ - [`../release-runbook.md`](../release-runbook.md) — the cut
83
+ procedure this contract's pre-flight check lives in.
84
+ - `src/scripts/lint_changelog_rollback.ts` — the mechanized
85
+ `Rollback:` gate (run `--selftest` for its fixture proof).
@@ -0,0 +1,153 @@
1
+ # Surface-Agent Contracts — medium invariants, not one generic agent
2
+
3
+ Backbone for `road-to-surface-specific-agent-contracts`.
4
+ One generic agent does every medium badly. Each **surface** (spreadsheet, deck,
5
+ document, browser, mobile/chat, code, …) has non-negotiable local invariants and
6
+ its own verification truth source. This contract names them, maps them to owner
7
+ skills, and defines how the agent detects a surface, resolves conflicts, and
8
+ hands off between surfaces — advisory first (staged rollout below).
9
+
10
+ Capability + honest-degrade for the *verification* primitives these contracts
11
+ rely on is the sibling [`design-artifact-verification`](design-artifact-verification.md)
12
+ (browser / screenshot / pdf_render / doc_export / image_decode / static_inspect);
13
+ this contract adds the office/data primitives and the surface-routing layer.
14
+
15
+ ## Iron Law — the medium's truth source verifies the work
16
+
17
+ ```
18
+ EACH SURFACE HAS A NON-NEGOTIABLE INVARIANT AND ITS OWN TRUTH SOURCE.
19
+ VERIFY WITH THE MEDIUM'S TRUTH SOURCE — A FORMULA READ-BACK, A RENDERED SLIDE,
20
+ A FETCHED PAGE — NEVER A GENERIC "LOOKS RIGHT". WHEN THE SURFACE TOOL IS
21
+ ABSENT, SAY WHAT COULD NOT BE VERIFIED — NEVER PRETEND THE MEDIUM STEP RAN.
22
+ ```
23
+
24
+ ## Surface detection — before applying any surface rule
25
+
26
+ Resolve the surface from these signals, in priority order:
27
+
28
+ 1. **Explicit file type** — `.xlsx`/`.csv` → spreadsheet, `.pptx`/`.key` → deck, `.docx`/`.md` → document, `.ipynb` → notebook.
29
+ 2. **Requested output format** — "as a deck", "export to PDF", "a spreadsheet".
30
+ 3. **Named tool / plugin / connector** — a named app connector wins over generic browsing.
31
+ 4. **User environment** — mobile/chat host vs desktop IDE vs CI.
32
+ 5. **Data shape** — tabular/numeric → spreadsheet; slides → deck; prose → document.
33
+ 6. **Task verb** — "chart", "model", "present", "browse", "refactor".
34
+ 7. **Target deliverable** — what the user will actually use.
35
+
36
+ **Ambiguity handling.** When ≥2 surfaces plausibly apply and the choice changes
37
+ the work materially, ask ONE compact question (per
38
+ [`ask-when-uncertain`](../../src/rules/ask-when-uncertain.md)); when the user
39
+ already constrained it, proceed and state the surface assumption.
40
+
41
+ ## Surface conflict rule
42
+
43
+ When the user asks for output **native to a different connected surface**,
44
+ delegate to (or ask to enable) that surface — do not force a local workaround.
45
+ A request for a spreadsheet answered with a markdown table, or a deck answered
46
+ with prose, is a surface violation. Prefer the connected surface; if it is
47
+ unavailable, say so and offer the degraded form explicitly as degraded.
48
+
49
+ ## Surface taxonomy
50
+
51
+ Each surface records: **owner** skills/commands · **allowed** tools · **forbidden**
52
+ shortcuts · **truth source** (how the medium verifies) · **handoff** in/out ·
53
+ **trigger** examples · **capability** requirement · **degrade** language.
54
+
55
+ | Surface | Owner skills | Forbidden shortcut | Truth source | Capability → degrade |
56
+ |---|---|---|---|---|
57
+ | **code** | `scope-control`/`verify-before-complete` (rules), stack skills | edit unread files; broad refactor around a fix | tests + type-checker + fresh run | local exec → static-only caveat |
58
+ | **design** | `fe-design`, `design-review`, `existing-ui-audit` | taste before inspecting the system | rendered artifact ([design-artifact-verification](design-artifact-verification.md)) | browser/screenshot → static caveat |
59
+ | **spreadsheet** | `spreadsheet-authoring` (Phase 2) | hardcode a computed value; unofficial financial source unmarked | formula read-back after write | native tooling → exported-file only → "cannot verify" |
60
+ | **document** | `doc-coauthoring`, `markitdown` | rasterize selectable text to PDF | open/export readback | doc parser → format caveat |
61
+ | **deck** | `html-deck` | build slides before an outline; tiny text | export + slide render | deck export → outline-only caveat |
62
+ | **browser** | `browser` surface (Phase 4), MCP fetch | invent a URL; fetch when not needed | the fetched page itself | fetch → "not fetched, cannot confirm" |
63
+ | **mobile/chat** | interaction floor (Phase 5) | markdown tables in narrow chat; multi-question walls | the host's rendering | tappable UI → concise text choices |
64
+ | **research** | `research:deep`/`research:report` | claim without a retrieved source | per-part grounding + disconfirmation | — |
65
+ | **visualizer/diagram** | `html-deck`, image skills | decorative chart over the data's shape | the rendered diagram | render → described-structure caveat |
66
+ | **cowork/dispatch** | `subagent-orchestration` | one agent doing parallel-safe work serially | verified subagent returns | spawn primitive → in-session |
67
+ | **MCP/app connector** | `mcp` | generic web search when a connector fits | the connector's own result | connector present → suggest/opt-in |
68
+
69
+ This taxonomy table **is** the canonical work-surface map. (Note: the existing
70
+ `src/config/surface-matrix.yml` is a *different* concept — per-tool **install-surface**
71
+ de-duplication, set-equality-enforced against `install.ts::USER_SCOPE_PATHS` by
72
+ `lint_surface_matrix`; extending it with *work* surfaces would break that
73
+ linter, so the work-surface map lives here, not there.) Host verification
74
+ capability is `src/config/host-capabilities.yml` +
75
+ [`design-artifact-verification`](design-artifact-verification.md). Carrier
76
+ choice vs host capability vs these invariants stay aligned with the
77
+ artifact-routing work — do not let the three diverge.
78
+
79
+ ## Staged rollout
80
+
81
+ Each surface contract: **advisory** (skills reference the invariant) →
82
+ **routed** (owner skills updated + eval fixtures pass) → **default-on** only
83
+ once the host capability/degrade behaviour is documented for that surface. A
84
+ contract is never default-on for a host class that cannot run the surface's
85
+ truth-source check — it stays advisory + caveat there.
86
+
87
+ ## Cross-surface handoff envelope
88
+
89
+ When work moves between surfaces (spreadsheet → deck, research → document,
90
+ browser evidence → report, design prototype → production code), the source
91
+ surface emits a **handoff envelope** the target consumes instead of redoing
92
+ work:
93
+
94
+ ```
95
+ source_surface · target_surface · user_goal · assets/files ·
96
+ constraints · verification_already_done · pending_checks ·
97
+ capability_limits · assumptions · privacy/source_restrictions
98
+ ```
99
+
100
+ - The target surface **trusts `verification_already_done`** and does not repeat
101
+ it; it runs only `pending_checks`.
102
+ - The target honours `privacy/source_restrictions` — a source-specific
103
+ restriction (e.g. an internal-only dataset) is never widened by the handoff.
104
+ - **Degrade:** if the target surface's tooling is absent, the envelope remains a
105
+ durable **plan** (what to do + what is verified) — never a faked generated
106
+ artifact.
107
+
108
+ ## Mobile/chat interaction floor
109
+
110
+ Interaction style is host-sensitive, not one verbose desktop default.
111
+
112
+ - **Narrow-chat output.** Avoid markdown tables in a narrow chat host; use short
113
+ prose/bullets. Keep post-tool summaries short.
114
+ - **Ask at most one compact question**, and only when it changes the work:
115
+ - **No options** when the user asked for the agent's *analysis* of A vs B — give the recommendation (fixture `ssac-a-or-b-analysis`).
116
+ - **Offer options** when *eliciting a preference* — tappable choices where the host supports them, degrading to concise text choices otherwise (fixture `ssac-preference-elicitation`).
117
+ - **Proceed on stated constraints** when the prompt already fixes them — no redundant questions (fixture `ssac-enough-constraints-no-question`).
118
+
119
+ ## Code surface — audit dispositions (Phase 6)
120
+
121
+ The external code-prompt mechanisms, audited against existing rules — **covered**
122
+ (cite the owner, do not duplicate), **tightened** (a note added), or **rejected**
123
+ (host-specific):
124
+
125
+ | Mechanism | Disposition | Owner / note |
126
+ |---|---|---|
127
+ | Read before proposing | **covered** | `think-before-action`, `source-discovery-gate` (fixture `ssac-edit-unread-file`) |
128
+ | Minimal scoped changes | **covered** | `minimal-safe-diff` (fixture `ssac-broad-refactor-around-bugfix`) |
129
+ | Todo/task visibility | **covered** | host task tooling + roadmap loop; no new rule |
130
+ | Parallel independent exploration | **tighten** | note in `subagent-orchestration` / this contract's cowork row — sequential independent reads when parallel is available is a miss |
131
+ | Specialized tools over shell | **covered** | `mcp` § tool-tier ladder (execution-discipline harvest) |
132
+ | No shell as user communication | **covered** | `output-discipline` / `direct-answers` |
133
+ | Line-specific references | **covered** | `file_path:line` convention in host instructions |
134
+ | No time estimates | **covered** | `direct-answers` § no-duration (execution-discipline harvest) |
135
+ | Fresh verification before "done" | **covered** | `verify-before-complete` (fixture `ssac-claim-done-without-verification`) |
136
+
137
+ No new code-surface rule is created — the deltas are already owned; the one
138
+ **tighten** (parallel-safe exploration) is recorded here + in the cowork row. No
139
+ Codex/host-specific phrasing is adopted.
140
+
141
+ ## Rejected (host/vendor-specific — not adopted)
142
+
143
+ Vendor-specific tool names, per-host UI affordance details, and single-provider
144
+ prompt phrasings from the source family are **not** adopted here — this contract
145
+ encodes surface invariants, not one vendor's tooling. Per-phase rejects are
146
+ recorded in the roadmap.
147
+
148
+ ## Related
149
+
150
+ - [`design-artifact-verification`](design-artifact-verification.md) — verification-primitive capability + honest-degrade (design surface).
151
+ - [`design-artifact-lifecycle`](design-artifact-lifecycle.md) — the design surface's own lifecycle.
152
+ - [`host-capability-manifest`](../../src/agent-src/contexts/execution/host-capability-manifest.md) — subagent primitives (cowork/dispatch surface).
153
+ - [`tests/surface-contracts/eval-fixtures.md`](../../tests/surface-contracts/eval-fixtures.md) — the surface-contract eval fixtures.
@@ -85,7 +85,7 @@ not exploit: **nesting `bug-fix` as `bug/fix` keeps the invoked slug
85
85
 
86
86
  - `docs/contracts/command-clusters.md` — locked table (Phase 4 rows) + the
87
87
  new "Bare invocation" section.
88
- - `agents/roadmaps/road-to-command-structure-optimization.md` — inventory,
88
+ - `agents/roadmaps/archive/road-to-command-structure-optimization.md` — inventory,
89
89
  council verdicts, phases.
90
90
  - ADR-003 (flat clusters), ADR-041 (controlled verbs), ADR-044 (path-derived
91
91
  hyphen slugs).
@@ -0,0 +1,96 @@
1
+ # Consumer Matrix — pack-based release E2E
2
+
3
+ > **Status:** active · **Owner:** maintainer · **Opened:** 2026-07-10
4
+ >
5
+ > Workflow: [`.github/workflows/consumer-matrix.yml`](../../.github/workflows/consumer-matrix.yml)
6
+ > · Runner: [`src/scripts/consumer_matrix.ts`](../../src/scripts/consumer_matrix.ts)
7
+ > · Tripwire: [`.github/workflows/release-adjacent-health.yml`](../../.github/workflows/release-adjacent-health.yml)
8
+ > · Source roadmap: road-to-proof-under-real-conditions (Phase 1)
9
+
10
+ The consumer matrix exercises the **published tarball** the way a consumer
11
+ does — pack → fresh global install into an isolated prefix → `init` into a
12
+ fresh project → `doctor` → `conformance` → MCP stdio handshake →
13
+ `hooks:doctor` → projection presence (`validate`) → uninstall — plus an
14
+ upgrade leg (last published minor from the registry → packed tarball →
15
+ `doctor` stays green) and pre-tag dry-runs of every release-adjacent
16
+ workflow.
17
+
18
+ ## Why it exists — the tarball window
19
+
20
+ Ordinary PRs run source-level matrices; release PRs run shape checks and
21
+ (correctly) skip the source matrices per
22
+ [`release-pr-gating`](../contracts/release-pr-gating.md). That skip is sound
23
+ for the *diff* but blind to the *tarball*: every packaging incident below
24
+ entered `main` on an ordinary PR and manifested only at publish time —
25
+ exactly the window where nothing pack-based ran. The consumer matrix is the
26
+ documented exemption from the release-PR cut surface and runs **on** release
27
+ PRs, plus weekly against registry drift.
28
+
29
+ ## Counterfactual map — five historical failures → the leg that catches each
30
+
31
+ Recorded per the roadmap's acceptance criterion 1. "Leg" names either a
32
+ `consumer_matrix.ts` leg or a `consumer-matrix.yml` job.
33
+
34
+ | # | Historical failure | Caught by |
35
+ |---|---|---|
36
+ | 1 | Published tarball missing `src/install/` while published code imported it (two minors; `ERR_MODULE_NOT_FOUND` in global installs of `doctor`/`conformance`) | `fresh-install` leg (`--version` + every subsequent CLI leg runs from the tarball) **and** `publish-dry-run` job's `prepack-check.mjs` import-completeness step |
37
+ | 2 | `tsx` absent from the published package — hooks and TS commands failed for consumers | `fresh-install` + `hooks` legs (installed binary + `hooks:doctor` run from the isolated prefix, no repo `node_modules` to lean on) |
38
+ | 3 | Release workflow failed on missing `go-task` in the CI environment | `publish-dry-run` job replicates the publish path pre-tag; any missing binary in a release-adjacent workflow surfaces on the release PR, not post-tag (see also the runbook note in [`release-pr-gating`](../contracts/release-pr-gating.md)) |
39
+ | 4 | npm publish failed on `npm@latest` → npm 12 requiring Node 22 while the job ran Node 20 | `publish-dry-run` job: asserts `publish-npm.yml` pins an npm **major** (fails on `npm@latest`), then installs that exact pin on both Node 20 and 22 and runs the publish steps sans `npm publish` |
40
+ | 5 | MCP worker deploy red across five consecutive releases, undetected (worker deps installed, root `tsx` missing) | `mcp-worker-dry-run` job (same pack + `wrangler deploy --dry-run` path, pre-tag, including the root `npm ci`) **and** the daily `release-adjacent-health` tripwire (fails loudly when any watched workflow's last completed run is non-success for > 48h) |
41
+
42
+ **Rule for future failures:** a release incident with no leg in this table
43
+ gets a new leg in the same fix PR — or a recorded reason why it is out of
44
+ scope. The table is the audit trail.
45
+
46
+ ## Triggers
47
+
48
+ | Trigger | What runs | Why |
49
+ |---|---|---|
50
+ | `pull_request` with `release/*` head | all four jobs | the pre-tag gate — release PRs are the primary trigger |
51
+ | weekly cron (Tue 06:00 UTC) | all four jobs | registry/upstream drift between releases — the class the 48h tripwire alone cannot see pre-release |
52
+ | `workflow_dispatch` | all four jobs | on-demand verification (e.g. after a packaging change) |
53
+ | daily cron 06:30 UTC | `release-adjacent-health` | the > 48h durably-red detector |
54
+
55
+ ## Headless default-scope trap (matrix finding, 2026-07-10)
56
+
57
+ Building this matrix surfaced a live consumer trap: on a fresh machine,
58
+ headless `agent-config init --tools=… --yes` (no `--scope`) picks "project
59
+ default for backward compatibility" and then hard-fails with
60
+ `--scope=project is reserved for maintainers (ADR-020)` — the bare README
61
+ invocation is red in any non-TTY context (CI, scripts), while the TTY path
62
+ escapes into the browser wizard. `--scope=auto` honors detection and
63
+ completes the documented global-only consumer install (`~/.claude`,
64
+ `~/.cursor`, `~/.codeium/windsurf`, `~/.event4u` lockfile). The matrix
65
+ therefore runs `init --scope=auto --yes` and pins that behaviour; whether
66
+ the backward-compatibility default should flip to `auto` is a product
67
+ decision tracked outside this contract (it changes installer behaviour, not
68
+ the gate). Two adjacent facts the matrix also pins: standalone `doctor` is
69
+ project-manifest-scoped (exit 2 without a project lockfile — expected on a
70
+ global-only install; `conformance` embeds `doctor --ci` and is the health
71
+ probe the matrix asserts), and consumer uninstall is `uninstall --global`.
72
+
73
+ ## Branch-protection note
74
+
75
+ Marking the four jobs as **required** checks for `release/*` PRs is a
76
+ repository setting (Settings → Branches), not something this repo's files
77
+ can enforce. Until flipped, the jobs still run and fail visibly on the
78
+ release PR; flipping them to required is the intended end state.
79
+
80
+ ## Local run (carve-out verification)
81
+
82
+ ```bash
83
+ npm ci && npm run build
84
+ npx tsx src/scripts/consumer_matrix.ts --json # all legs
85
+ npx tsx src/scripts/consumer_matrix.ts --skip-registry # offline: skips the upgrade leg
86
+ ```
87
+
88
+ ## See also
89
+
90
+ - [`release-pr-gating`](../contracts/release-pr-gating.md) — the cut surface
91
+ this matrix is exempt from, and why.
92
+ - [`public-install-smoke`](public-install-smoke.md) — OS × Node entrypoint
93
+ matrix (installer correctness); the consumer matrix owns tarball shape +
94
+ runtime surface instead.
95
+ - [`release-sizing`](../contracts/release-sizing.md) — names this matrix as
96
+ the floor for every release.
@@ -1,6 +1,6 @@
1
1
  # Featured Skills
2
2
 
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.
3
+ A curated subset of the 270 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 267 skills: [`dist/agent-src/skills/`](../dist/agent-src/skills/) · all 172 commands: [`dist/agent-src/commands/`](../dist/agent-src/commands/)
95
+ → Browse all 270 skills: [`dist/agent-src/skills/`](../dist/agent-src/skills/) · all 177 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 267 skills, 102 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 270 skills, 103 governed rules, and 177 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 102 rules. No configuration needed.
137
+ This is enforced automatically by 103 rules. No configuration needed.
138
138
 
139
139
  ---
140
140
 
@@ -174,7 +174,7 @@ Your agent now understands slash commands:
174
174
  | `/fix quality` | Run and fix all quality checks |
175
175
  | `/chat-history import` | Pull a prior session into the current chat (resume) |
176
176
 
177
- → [Browse all 172 active commands](../dist/agent-src/commands/)
177
+ → [Browse all 177 active commands](../dist/agent-src/commands/)
178
178
 
179
179
  ---
180
180
 
@@ -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 267 skills. `dist/router.json` (98 routed rules, intent →
36
+ A prompt does not load all 270 skills. `dist/router.json` (99 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.
package/docs/proof.md CHANGED
@@ -27,7 +27,7 @@ evidence pointer, or `task check-claims` fails the build.
27
27
  | Claim | Kind | Evidence | Resolves |
28
28
  |---|---|---|---|
29
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` | ✅ |
30
- | 172 commands. | quant | `src/scripts/check_artefact_count_messaging.ts#Artefact-count messaging gate` | ✅ |
30
+ | 177 commands. | quant | `src/scripts/check_artefact_count_messaging.ts#Artefact-count messaging gate` | ✅ |
31
31
  | The retrieval economy cuts always-loaded context tokens ~65.6% measured against the FULL always-loaded projection — 98,529 → 33,897 tokens (eager rule load + skill/command descriptions + MCP schemas, thin-flipped). Method: `agent-config benchmark` over the pinned token baseline; the baseline is the honest "what the user pays if everything loads eagerly", NOT a synthetic full-corpus strawman (council Q4). | quant | `internal/bench/reports/token-baseline.json#eager_rule_load` | ✅ |
32
32
  | 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` | ✅ |
33
33
  | 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` | ✅ |
@@ -36,11 +36,11 @@ evidence pointer, or `task check-claims` fails the build.
36
36
  | 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` | ✅ |
37
37
  | A hand-rolled, dependency-free BM25 + trigram lexical index resolves the "recalls but does not rank" gap: on the retrieval-precision corpus (9 keyword-overlapping-confuser tasks) it drives the mean top tie-set from 3.333 (the `_score` bucket scorer) to 1.0 — every needed decision uniquely top-ranked — with precision@1 and precision@5 unchanged at 1.0. Method: deterministic, model-free re-ranking of the SAME retrieved entry set; both scorers measured over the identical store via `measure_lexical_ranking.ts`. | quant | `internal/bench/reports/lexical-ranking.json` | ✅ |
38
38
  | The whole layer is compiled into host agents with zero runtime daemon. | qual | `docs/contracts/no-runtime-boundary.md#file-first, no-runtime suite` | ✅ |
39
- | 102 governed rules. | quant | `src/scripts/check_artefact_count_messaging.ts#Artefact-count messaging gate` | ✅ |
39
+ | 103 governed rules. | quant | `src/scripts/check_artefact_count_messaging.ts#Artefact-count messaging gate` | ✅ |
40
40
  | On a deterministic multi-session recall corpus, the memory substrate produces a measured, placebo-controlled recall lift — memory-on 27/27 vs no-memory 10/27 and vs equal-byte placebo 9/27 (claude-haiku-4-5, n=9 tasks x 3 seeds, sign test p=0.031 for BOTH pairings). Scoped honestly: this is the context-value upper bound (perfect retrieval on a one-fact-per-task corpus), not retrieval precision under a large store. | quant | `internal/bench/reports/second-brain-delta.json` | ✅ |
41
41
  | Removing the perfect-retrieval assumption, the substrate's REAL keyword retrieval recalls the needed decision into the top-5 under keyword-overlapping confusers (precision@5 9/9) and the model disambiguates it from the co-injected confusers — retrieval-on 27/27 vs no-memory 5/27 and vs equal-count placebo 5/27 (claude-haiku-4-5, 9 tasks x 3 seeds, sign test p=0.008 both). Named limit: retrieval RECALLS but does not RANK (mean tie-set 3.3, ties broken by store order, not relevance) — the discrimination gap that motivates the SQLite-FTS5 activation path (ADR-116) at larger scale. | quant | `internal/bench/reports/second-brain-retrieval.json` | ✅ |
42
42
  | Every artifact the package ships — source AND the condensed projection that reaches consumers — is machine-scanned in CI for hidden-Unicode, mixed-script-confusable, and instruction-smuggling payloads (the rules-file-backdoor class); a finding blocks the release before `npm publish`, not just the merge. | qual | `.github/workflows/publish-npm.yml#lint_agent_security` | ✅ |
43
- | 267 skills (README hero + feature list). | quant | `src/scripts/check_artefact_count_messaging.ts#Artefact-count messaging gate` | ✅ |
43
+ | 270 skills (README hero + feature list). | quant | `src/scripts/check_artefact_count_messaging.ts#Artefact-count messaging gate` | ✅ |
44
44
  | 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` | ✅ |
45
45
 
46
46
  **16 backed claim(s)** — all evidence pointers resolve in CI.
@@ -78,7 +78,7 @@ deliberately, not overnight.
78
78
  runway, RICE, incident command, messaging), but the skills are forged on
79
79
  TS/PHP — "promising, not proven" off those stacks. A disclaimer floor
80
80
  bounds *liability*, not *correctness*: a skill can be format-correct,
81
- disclaimered, and still embed a wrong domain assumption. Today **5 of 20**
81
+ disclaimered, and still embed a wrong domain assumption. Today **9 of 20**
82
82
  default-surface domain skills carry a sourced `domain-truth` fixture
83
83
  (`./scripts-run src/scripts/domain_soundness_status`); the rest are labeled
84
84
  `unvalidated` and the validated count is CI-ratcheted. The fixtures landed
@@ -37,6 +37,9 @@ the **workflow_dispatch** on `release.yml` (inputs: `bump`, `version`,
37
37
  to recover a partial run — see § 5).
38
38
  - [ ] You have read [`succession.md`](succession.md) if any secret-gated
39
39
  downstream (npm publish, cloud deploy) must succeed this release.
40
+ - [ ] The release satisfies [`release-sizing.md`](contracts/release-sizing.md) —
41
+ one primary product goal, and a `Rollback:` line for every new /
42
+ substantially reworked subsystem (gate: `src/scripts/lint_changelog_rollback.ts`).
40
43
 
41
44
  ## 2. The pipeline — what `release.ts` does (9 steps)
42
45