@event4u/agent-config 2.8.0 → 2.9.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 (49) hide show
  1. package/.agent-src/personas/engineering-manager.md +133 -0
  2. package/.agent-src/personas/finance-partner.md +129 -0
  3. package/.agent-src/personas/people-strategist.md +126 -0
  4. package/.agent-src/personas/strategist.md +129 -0
  5. package/.agent-src/skills/build-buy-partner/SKILL.md +145 -0
  6. package/.agent-src/skills/comp-banding/SKILL.md +160 -0
  7. package/.agent-src/skills/competitive-moat-analysis/SKILL.md +152 -0
  8. package/.agent-src/skills/contracts-cognition/SKILL.md +147 -0
  9. package/.agent-src/skills/data-handling-judgment/SKILL.md +155 -0
  10. package/.agent-src/skills/forecasting/SKILL.md +164 -0
  11. package/.agent-src/skills/hiring-loop-design/SKILL.md +167 -0
  12. package/.agent-src/skills/market-entry-analysis/SKILL.md +144 -0
  13. package/.agent-src/skills/onboarding-program/SKILL.md +157 -0
  14. package/.agent-src/skills/one-on-one-cadence/SKILL.md +161 -0
  15. package/.agent-src/skills/org-design/SKILL.md +158 -0
  16. package/.agent-src/skills/perf-feedback-craft/SKILL.md +157 -0
  17. package/.agent-src/skills/privacy-review/SKILL.md +160 -0
  18. package/.agent-src/skills/runway-cognition/SKILL.md +136 -0
  19. package/.agent-src/skills/scenario-modeling/SKILL.md +139 -0
  20. package/.agent-src/skills/throughput-vs-morale-tradeoff/SKILL.md +165 -0
  21. package/.agent-src/skills/unit-economics-modeling/SKILL.md +54 -7
  22. package/.agent-src/skills/vision-articulation/SKILL.md +146 -0
  23. package/.agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  24. package/.agent-src/templates/scripts/telemetry/settings.py +65 -0
  25. package/.agent-src/templates/scripts/tier_usage_report.py +183 -0
  26. package/.claude-plugin/marketplace.json +18 -1
  27. package/AGENTS.md +1 -1
  28. package/CHANGELOG.md +106 -0
  29. package/README.md +3 -3
  30. package/docs/architecture.md +37 -11
  31. package/docs/catalog.md +22 -4
  32. package/docs/contracts/adr-forecast-construction-shape.md +89 -0
  33. package/docs/contracts/adr-wing4-context-spine.md +125 -0
  34. package/docs/contracts/command-clusters.md +41 -0
  35. package/docs/contracts/command-surface-tiers.md +25 -9
  36. package/docs/contracts/context-spine.md +8 -0
  37. package/docs/contracts/mcp-beta-criteria.md +129 -0
  38. package/docs/guidelines/wing4-handoff.md +127 -0
  39. package/docs/mcp-server.md +1 -1
  40. package/package.json +1 -1
  41. package/scripts/_cli/cmd_doctor.py +527 -14
  42. package/scripts/_cli/cmd_validate.py +10 -0
  43. package/scripts/agent-config +19 -18
  44. package/scripts/install.py +5 -0
  45. package/scripts/lint_context_spine_usage.py +1 -0
  46. package/scripts/mcp_server/__init__.py +1 -0
  47. package/scripts/mcp_server/server.py +4 -3
  48. package/scripts/schemas/skill.schema.json +2 -2
  49. package/scripts/skill_linter.py +107 -3
@@ -194,7 +194,48 @@ future cluster expansion.
194
194
  steps, `## Migration` notice, `## Rules` block.
195
195
  - Fails CI if a new cluster invents a different dispatch shape.
196
196
 
197
+ ## Tier-usage signal contract
198
+
199
+ Empirical retiering needs evidence; evidence needs a signal. The minimum signal the package collects to validate command tiering, with **zero new external surface** and the same privacy floor as artefact-engagement telemetry:
200
+
201
+ | Field | Type | Source | Notes |
202
+ |---|---|---|---|
203
+ | `ts_bucket` | str (ISO-8601 UTC, hour-resolution) | clock at invocation | hour-bucket, not raw timestamp — limits re-identification |
204
+ | `command` | str | dispatcher | the cluster + sub-command (`fix:ci`, `commit`, `work`) — never argv |
205
+ | `tier` | int (0/1/2/3) | `command-surface-tiers.md` lookup at invocation | the tier the command had **at the time of the call** |
206
+ | `outcome` | str | dispatcher exit shape | one of `success` / `error` / `blocked` — no message bodies |
207
+ | `user_hash` | str (sha256 first 16 hex chars) | hash of `$USER` + machine-id salt | distinct-user counting **without** identity recovery — never raw login |
208
+
209
+ **Forbidden — never recorded, enforced at the four privacy layers:**
210
+
211
+ - argv, flags, file paths, file contents.
212
+ - error messages, stdout, stderr.
213
+ - tickets, branch names, repo slugs.
214
+ - exact timestamps (only hour-buckets), exact env-var values.
215
+ - the user's name, email, or IP.
216
+
217
+ **Storage.** Append to `.agent-tier-usage.jsonl` (consumer-project root; configurable via `telemetry.tier_usage.output.path`). Separate file from `.agent-engagement.jsonl` — orthogonal signals, separate retention defaults, separate opt-in.
218
+
219
+ **Settings gate.** `telemetry.tier_usage.enabled` (default `false`, same opt-in posture as artefact-engagement). When disabled, the dispatcher records nothing and incurs zero file IO — the default-off doctrine carries over.
220
+
221
+ **Aggregation.** Local-only, hour-bucketed counts: `(command, tier) → invocation_count` and `(command, tier) → distinct_user_count`. No remote upload anywhere in scope.
222
+
223
+ ## Empirical retiering rule
224
+
225
+ A command **stays at Tier-0** at the next minor release only if **both** floors clear:
226
+
227
+ - **Frequency floor.** ≥ N invocations across the trailing W-day window — defaults `N = 20`, `W = 30` (tunable via `.agent-settings.yml` `telemetry.tier_usage.retier`).
228
+ - **Distinct-user floor.** ≥ K distinct `user_hash` values across the same window — default `K = 3`.
229
+
230
+ A command that fails either floor drops to **Tier-1** at the next minor release; the release notes cite the floor that failed. Promotion the other way (Tier-1 → Tier-0) follows the same rule symmetrically and additionally requires explicit listing in `command-surface-tiers.md`.
231
+
232
+ **Authority.** This is a maintainer decision aid, not an autonomous rule — the dispatcher records, `scripts/telemetry/tier_usage_report.py` reports, the maintainer files the move in the next minor release. No runtime tier-flipping.
233
+
234
+ **Floor governance.** N / W / K live in `.agent-settings.yml`; bumping them is a contract change (this file), not a settings change.
235
+
197
236
  ## See also
198
237
 
199
238
  - [`docs/migrations/commands-1.15.0.md`](../migrations/commands-1.15.0.md) — user-facing migration notes.
200
239
  - [`docs/contracts/STABILITY.md`](STABILITY.md) — `beta` level rules apply.
240
+ - [`docs/contracts/command-surface-tiers.md`](command-surface-tiers.md) — what each tier means and what `--help` surfaces.
241
+ - [`.agent-src.uncompressed/contexts/contracts/artifact-engagement-flow.md`](../../.agent-src.uncompressed/contexts/contracts/artifact-engagement-flow.md) — sibling telemetry surface; same privacy floor and four-layer enforcement model.
@@ -41,17 +41,15 @@ The path a new contributor walks on day one. Visible in
41
41
  commitment to two-release stability).
42
42
  3. **No prerequisite tooling beyond `bash` + `python3`.** Docker,
43
43
  GPG, jq, gh CLI, npm globals are all Tier-1+ territory.
44
- 4. **Cited in the `init → sync → validate → work` outcome path**
45
- OR cited by a Hard-Floor safety rule
46
- (`commit`, `keys:install-*`) OR is the AI-Council entry point
47
- that the daily workflow depends on (`council:*`).
44
+ 4. **Cited in the `init → sync → validate → work` outcome path.**
45
+ Setup helpers (`first-run`, `keys:install-*`) and AI-Council entry
46
+ points (`council:*`) are **not** Tier-0 they are run once-per-
47
+ project or on-demand, not in the daily loop. They live at Tier-1.
48
48
 
49
- **Canonical Tier-0 members (2026-05-13):**
49
+ **Canonical Tier-0 members (2026-05-13, post-`road-to-surface-discipline`):**
50
50
 
51
- - CLI: `init`, `sync`, `validate`, `work`, `first-run`,
52
- `keys:install-anthropic`, `keys:install-openai`,
53
- `council:estimate`, `council:run`, `council:render`,
54
- `implement-ticket`, `help`, `--version`.
51
+ - CLI: `init`, `sync`, `validate`, `work`, `implement-ticket`,
52
+ `help`, `--version`.
55
53
  - Slash: `/onboard`, `/commit`, `/work`, `/implement-ticket`,
56
54
  `/agent-status`, `/agent-handoff`.
57
55
 
@@ -73,6 +71,24 @@ view. Documented in the same surface as Tier-0.
73
71
  3. **Orchestrator dispatch surface.** Top-level slash orchestrators
74
72
  whose children carry the actual work (`/roadmap`, `/feature`,
75
73
  `/fix`, `/judge`, `/memory`, `/optimize`, `/council`).
74
+ 4. **Once-per-project or on-demand setup helper.** Commands invoked
75
+ to bootstrap or rotate credentials, not in the daily loop
76
+ (`first-run`, `keys:install-anthropic`, `keys:install-openai`,
77
+ `council:estimate`, `council:run`, `council:render`).
78
+
79
+ **Canonical Tier-1 CLI members (2026-05-13, post-`road-to-surface-discipline`):**
80
+
81
+ `update`, `versions`, `global`, `export`, `uninstall`, `prune`,
82
+ `doctor`, `migrate`, `first-run`, `keys:install-anthropic`,
83
+ `keys:install-openai`, `council:estimate`, `council:run`,
84
+ `council:render`.
85
+
86
+ **Surface-trim changelog (2026-05-13):** Six CLI commands moved
87
+ Tier-0 → Tier-1: `first-run` (run once per project), `keys:install-anthropic` /
88
+ `keys:install-openai` (one-time credential setup), `council:estimate` /
89
+ `council:run` / `council:render` (on-demand review tool, not daily
90
+ driver). Commands stay invokable by full name; only `--help`
91
+ surfacing changed.
76
92
 
77
93
  ### Tier-2 — maintenance / internal
78
94
 
@@ -52,6 +52,14 @@ locks the cross-wing slot count at 3. Per-wing extensions follow § 5.
52
52
  | `funnel-stage` | `funnel-stage.md` | Growth / RevOps wing | Funnel topology (top / mid / bottom / activation / retention), per-stage definition, exit-criteria for each. Read by `pipeline-strategy`, `funnel-analysis`, `activation-design`, `onboarding-design`. |
53
53
  | `customer-segment` | `customer-segment.md` | Sales / CS wing | ICP, persona-by-segment, ARR-band-by-segment. Read by `ICP`, `pipeline-strategy`, `MEDDIC`, `retention-loops`. |
54
54
 
55
+ ### Wing-4 slots (Money / Strategy / Ops — added 2026-05-13 per [`adr-wing4-context-spine.md`](adr-wing4-context-spine.md))
56
+
57
+ | Slot | Path under `agents/context-spine/` | Owner | Typical content |
58
+ |---|---|---|---|
59
+ | `fiscal-period` | `fiscal-period.md` | Finance wing | Reporting cadence (monthly · quarterly · annual · multi-year-plan), fiscal-year start, close-window timing. Read by `unit-economics`, `forecasting`, `runway-cognition`, `scenario-modeling`. |
60
+ | `org-stage` | `org-stage.md` | Strategy / People wing | Stage label (seed · series-A · series-B · growth · public), funding posture, headcount band, governance posture. Read by `build-buy-partner`, `vision-articulation`, `org-design`, `comp-banding`, `hiring-loop-design`. |
61
+ | `regulatory-regime` | `regulatory-regime.md` | Strategy wing (legal-absorbed) | Active regimes (none · GDPR · HIPAA · SOC2 · PCI · CCPA), data-residency posture, breach-notification timer. Read by `contracts-cognition`, `privacy-review`, `data-handling-judgment`. |
62
+
55
63
  Slots are markdown files. Each is **≤ 200 lines**; longer means the
56
64
  slot is doing two jobs and the author should split or trim. Empty /
57
65
  missing slot is allowed — the citing skill MUST handle absence
@@ -0,0 +1,129 @@
1
+ ---
2
+ stability: experimental
3
+ mcp_scope: lite
4
+ ---
5
+
6
+ # MCP Beta Criteria — Promotion Gate (Hard Contract)
7
+
8
+ > **Status:** Active · governs the `experimental → beta` promotion for
9
+ > the MCP surface (`scripts/mcp_server/` local stdio kernel + the
10
+ > hosted `workers/mcp/` bridge). Owned by Phase 3 of
11
+ > [`road-to-surface-discipline.md`](../../agents/roadmaps/road-to-surface-discipline.md).
12
+ > Companion contract:
13
+ > [`mcp-phase-1-scope.md`](mcp-phase-1-scope.md) (local) ·
14
+ > [`mcp-cloud-scope.md`](mcp-cloud-scope.md) (hosted).
15
+
16
+ ## Purpose
17
+
18
+ The current MCP wording uses `experimental` across READMEs, module
19
+ docstrings, and the initialize-result server description. There is no
20
+ defined bar for retiring that label. This contract names six gates
21
+ that together flip `experimental → beta`. Every gate is **observable**
22
+ (test file, doc, or script), **falsifiable** (red is allowed; missing
23
+ is not), and **machine-reportable** through `agent-config doctor
24
+ --check mcp-beta-readiness` (lands in Phase 3 Step 5).
25
+
26
+ > **Iron Law:** all six gates must be green for the same release tag
27
+ > before any user-visible surface drops `experimental`. A green gate
28
+ > sheet on `main` does not authorize a back-dated wording change on a
29
+ > release branch that did not also pass the sheet.
30
+
31
+ ## The six gates
32
+
33
+ Each gate is owned by a single artefact. When the artefact is missing,
34
+ Phase 3 Step 3 creates a **failing test** (`pytest.skip("pending: …",
35
+ allow_module_level=True)` or `raise NotImplementedError("mcp-beta-gate-N
36
+ pending")`) so the AC stays falsifiable.
37
+
38
+ ### Gate 1 — External-client end-to-end run
39
+
40
+ At least one MCP client **outside this repo's own test harness** has
41
+ completed a full session against MCP Lite: `initialize` →
42
+ `prompts/list` → `prompts/get` → `resources/list` → `resources/read`
43
+ → shutdown. Evidence is a transcript or recorded session under
44
+ `tests/mcp/external-clients/` plus the client name and version
45
+ (Claude Desktop ≥ vX, Cursor ≥ vY, Zed ≥ vZ, Continue ≥ vW).
46
+
47
+ ### Gate 2 — Bearer-auth coverage
48
+
49
+ `tests/mcp/auth/` must cover four cases against the hosted Worker
50
+ surface — **happy path**, **401 on missing token**, **401 on expired
51
+ token**, **401 → 200 on rotated token**. Each case asserts the wire
52
+ envelope shape, not only the status code. Gate fails if any case is
53
+ skipped, xfailed, or absent.
54
+
55
+ ### Gate 3 — Lite/Full parity smoke suite
56
+
57
+ For every primitive the published surface exposes (`prompts/list`,
58
+ `prompts/get`, `resources/list`, `resources/read`), a parametrized
59
+ test asserts the response body from the hosted Worker (Lite) and the
60
+ local stdio kernel (Full) **byte-identical** (modulo the documented
61
+ deltas in `mcp-cloud-scope.md § Lite vs Full`). Failure must surface
62
+ the diff, not just a boolean.
63
+
64
+ ### Gate 4 — Health endpoint under load
65
+
66
+ The hosted Worker exposes `/healthz` (or equivalent) that returns a
67
+ structured JSON envelope `{status, uptime_s, build_sha,
68
+ last_content_refresh}`. A k6 / wrk smoke test in
69
+ `tests/mcp/load/healthz.k6.js` proves p95 < 200 ms across 60 s at 50
70
+ RPS. The local stdio kernel surfaces the same envelope through a
71
+ `server/health` JSON-RPC ping.
72
+
73
+ ### Gate 5 — Abuse / rate-limit plan
74
+
75
+ `docs/contracts/mcp-rate-limit.md` exists and pins three knobs —
76
+ per-token RPS, per-token daily quota, per-IP burst — with a fallback
77
+ behaviour on overrun (`429` + `Retry-After`). The Worker enforces the
78
+ knobs; a contract test in `tests/mcp/rate-limit/` asserts that
79
+ exceeding any knob returns `429` with a non-empty `Retry-After`.
80
+
81
+ ### Gate 6 — Lite ↔ Full no-drift
82
+
83
+ A nightly CI job runs the Phase 3 Step 3 parity suite (Gate 3) plus a
84
+ canary: ingest one prompt and one resource on both surfaces, hash the
85
+ body, and assert equality. Drift > 0 fails the job and posts a Slack
86
+ ping. Evidence: the workflow file (`.github/workflows/mcp-no-drift.yml`)
87
+ **and** at least one successful run within the last 7 days.
88
+
89
+ ## Promotion procedure
90
+
91
+ 1. Open a release-candidate branch named `release/mcp-beta-rcN`.
92
+ 2. Run `./agent-config doctor --check mcp-beta-readiness` — must
93
+ print all six gates green.
94
+ 3. Flip the wording in the **five** surfaces inventoried in
95
+ [`road-to-surface-discipline.md` Phase 3 Step 1](../../agents/roadmaps/road-to-surface-discipline.md):
96
+ `docs/mcp-server.md` (status banner + Remote-MCP sub-claim),
97
+ `README.md` (pointer line), `scripts/mcp_server/server.py`
98
+ (initialize-result `serverInfo.name`),
99
+ `scripts/mcp_server/__init__.py` (module docstring `Stability:`).
100
+ 4. Update the changelog with the gate sheet snapshot.
101
+ 5. Merge the RC branch through the normal review path. Tag is **not**
102
+ created until the gate sheet is reproducible on the merge commit.
103
+
104
+ ## Demotion procedure
105
+
106
+ Any single gate going red on `main` for more than 7 consecutive days
107
+ demotes the surface back to `experimental` at the next release. This
108
+ is a wording-only demotion; no code is reverted. The doctor check
109
+ reports the demotion automatically.
110
+
111
+ ## Surface delta
112
+
113
+ This contract adds **0 new commands**, **0 new skills**, **0 new
114
+ personas**. It defines a promotion gate; nothing more. Net surface
115
+ delta for Phase 3: ≤ 0.
116
+
117
+ ## Cross-references
118
+
119
+ - [`mcp-phase-1-scope.md`](mcp-phase-1-scope.md) — local stdio kernel
120
+ hard contract (A0).
121
+ - [`mcp-cloud-scope.md`](mcp-cloud-scope.md) — hosted Worker hard
122
+ contract (A0-cloud).
123
+ - [`mcp-tool-stub-envelope.md`](mcp-tool-stub-envelope.md) — Phase 1
124
+ discovery contract.
125
+ - [`STABILITY.md`](STABILITY.md) — stability tier definitions
126
+ (`experimental` / `beta` / `stable`) and what wording each tier may
127
+ use in user-visible surfaces.
128
+ - [`road-to-surface-discipline.md`](../../agents/roadmaps/road-to-surface-discipline.md)
129
+ — Phase 3 acceptance criteria and step-level evidence pointers.
@@ -0,0 +1,127 @@
1
+ # Wing-4 Handoff
2
+
3
+ Wing-4-specific prose for the four load-bearing senior-skill chains
4
+ in the Money / Strategy / Operations cluster. The mechanical contract
5
+ — initiator → delegated(input) → output-artifact, lint rules, worktree
6
+ boundary — lives in
7
+ [`docs/contracts/cross-wing-handoff.md`](../contracts/cross-wing-handoff.md).
8
+ The cross-wing routing prose (when to hand off at all, L4 / C8
9
+ boundary, decision tree) lives in
10
+ [`docs/guidelines/cross-role-handoff.md`](cross-role-handoff.md). The
11
+ Wing-3 sibling — chains inside GTM / Growth — lives in
12
+ [`docs/guidelines/gtm-handoff.md`](gtm-handoff.md). This guideline
13
+ covers **what crosses each Wing-4 boundary**, **what the typed
14
+ artifact looks like**, and **who owns the failure mode when the
15
+ chain breaks**.
16
+
17
+ Cycle / dangling / tier-mismatch enforcement is not duplicated here —
18
+ `task lint-handoffs` (per cross-wing-handoff § 4) is the mechanical
19
+ gate.
20
+
21
+ ## Chain 1 — money → strategy
22
+
23
+ Three-step chain that turns unit-economics cognition into a
24
+ build-buy-partner verdict. Finance cluster owns the first two steps;
25
+ the cluster line crosses on the handoff to Strategy.
26
+
27
+ ```
28
+ unit-economics (O1)
29
+ → scenario-modeling (O4)
30
+ → build-buy-partner (P1)
31
+ ```
32
+
33
+ | Step | Hands off when | Typed artifact crossing the boundary | Failure-mode owner |
34
+ |---|---|---|---|
35
+ | O1 → O4 | CAC / LTV / contribution-margin / payback-period cognition locked for the segment. | `unit-economics-frame.md` — CAC / LTV ratio, contribution margin, payback band, burn-multiple verdict, segment scope. | O1 owns drift: a margin frame O4 cannot stress-test = O1's unit definition was wrong scope. |
36
+ | O4 → P1 | Three-statement scenarios + sensitivity bands + optionality reasoning locked across at least two cases. | `scenario-set.md` — base / upside / downside cases, sensitivity table, decision-relevant variables, optionality cost per case. | O4 owns drift: scenarios without an optionality-cost row force P1 to re-derive build-vs-buy economics. |
37
+
38
+ P1 self-closes against `build-buy-partner.md` — insource-vs-outsource-
39
+ vs-acquire verdict, integration-cost band, dependency-risk score,
40
+ exit-cost analysis.
41
+
42
+ ## Chain 2 — strategy → people
43
+
44
+ Two-step chain that turns a build-buy-partner verdict into an
45
+ org-design shape. Strategy cluster ships the verdict; People-Strategy
46
+ cluster reads it as input and owns the structure decision.
47
+
48
+ ```
49
+ build-buy-partner (P1)
50
+ → org-design (Q1)
51
+ ```
52
+
53
+ | Step | Hands off when | Typed artifact crossing the boundary | Failure-mode owner |
54
+ |---|---|---|---|
55
+ | P1 → Q1 | Insource-vs-outsource verdict + dependency-risk profile + integration-cost band locked. | `build-buy-verdict.md` — verdict (build / buy / partner / acquire), capability scope, dependency-risk score, integration cost, exit cost, optionality preservation note. | P1 owns drift: a verdict without exit-cost reasoning leaves Q1 designing teams against an unowned constraint. |
56
+
57
+ Q1 self-closes against `org-design-shape.md` — team-shape (functional /
58
+ cross-functional / squad), span-of-control band, Conway's-law alignment
59
+ note, reorg-cost ledger.
60
+
61
+ ## Chain 3 — people → EM
62
+
63
+ Two-step chain that specializes a generalized hiring loop for
64
+ engineering. People-Strategy cluster owns the generalized cognition;
65
+ Engineering-Manager cluster owns the engineering specialization.
66
+
67
+ ```
68
+ hiring-loop-design (Q-generalized, composed inside `org-design`)
69
+ → hiring-loop-design × eng-context (S2)
70
+ ```
71
+
72
+ | Step | Hands off when | Typed artifact crossing the boundary | Failure-mode owner |
73
+ |---|---|---|---|
74
+ | Q → S2 | Generalized loop stages + calibration-design + signal-vs-noise audit locked at people-strategy level. | `hiring-loop-shape.md` — stage list, per-stage signal, calibration cadence, bar-raiser logic, signal-vs-noise findings. | Q owns drift: a generalized loop without a calibration cadence forces S2 to invent one for engineering and the cognition diverges from the rest of the org. |
75
+
76
+ S2 self-closes against `eng-hiring-loop.md` — eng-specific stage
77
+ specialization (screen → take-home / system-design / coding /
78
+ behavioral / leadership), per-stage rubric, bar-raiser assignments,
79
+ candidate-throughput target.
80
+
81
+ ## Chain 4 — finance → GTM
82
+
83
+ Cross-wing chain — the only Wing-4 chain whose endpoint sits in
84
+ Wing 3. Finance owns the **cognition**; RevOps owns the **call**.
85
+ Interface-first-stub per iter-2 OQ4: O2-interface ships before the
86
+ H10 sibling can start, parallel to O2 implementation.
87
+
88
+ ```
89
+ forecasting (O2)
90
+ → forecast-accuracy (H10, Wing 3)
91
+ ```
92
+
93
+ | Step | Hands off when | Typed artifact crossing the boundary | Failure-mode owner |
94
+ |---|---|---|---|
95
+ | O2 → H10 | `forecast-construction-shape` ADR locked: top-down vs bottom-up enum, confidence-band signature, retro-loop signature. | `forecast-band.json` — commit value, best-case value, pipeline value, confidence band, retro signature, construction-shape tag. | **Interface contract owned by O2** (per cross-wing-handoff § 5 / W4 chain): if the ADR drifts, O2 breaks the contract, not H10. Mirrors `gtm-handoff.md` Chain 2 H10 → O2 framing from the Wing-3 side. |
96
+
97
+ H10's parallel-development rule (starts after O2-interface ≥ 100 %,
98
+ runs in parallel with O2 implementation) is recorded in the
99
+ `road-to-money-strategy-ops.md` O2 entry, the
100
+ `road-to-gtm-and-growth.md` H10 entry, and the cross-wing-handoff
101
+ contract — not duplicated here.
102
+
103
+ ## Reading the failure-mode column
104
+
105
+ The column answers one question: **when a downstream skill cannot
106
+ do its job, which upstream skill rewrites its artifact?** The owner
107
+ is the **upstream** skill, not the consumer — drift is always a
108
+ producer-side fix. This mirrors the W3 sibling and the W4 / W3
109
+ forecasting chain in the contract (O2 owns the interface; H10 only
110
+ consumes it).
111
+
112
+ ## See also
113
+
114
+ - [`docs/contracts/cross-wing-handoff.md`](../contracts/cross-wing-handoff.md)
115
+ — typed-handoff mechanical contract; `task lint-handoffs` enforces
116
+ cycles, dangling references, and tier mismatches over the graph.
117
+ - [`docs/guidelines/cross-role-handoff.md`](cross-role-handoff.md)
118
+ — when to hand off at all, how to phrase the routing, L4 / C8
119
+ boundary.
120
+ - [`docs/guidelines/gtm-handoff.md`](gtm-handoff.md) — Wing-3 sibling
121
+ for the brand → channel, discovery → pipeline, and funnel →
122
+ retention chains.
123
+ - [`docs/contracts/context-spine.md`](../contracts/context-spine.md)
124
+ § Wing-4 slots — `fiscal-period`, `org-stage`, `regulatory-regime`;
125
+ every chain step opts into ≥ 1 slot or carries an ADR opt-out.
126
+ - [`docs/contracts/adr-wing4-context-spine.md`](../contracts/adr-wing4-context-spine.md)
127
+ — durable record for the Wing-4 slot extension.
@@ -1,6 +1,6 @@
1
1
  # MCP Server
2
2
 
3
- > Status: **experimental** — Phase 1 + 2 + 3 shipped. No `tools/*` primitive yet (Phase 4, deferred behind a design call).
3
+ > Status: **experimental** — Phase 1 + 2 + 3 shipped. No `tools/*` primitive yet (Phase 4, deferred behind a design call). Promotion to **beta** is gated on the six criteria in [`docs/contracts/mcp-beta-criteria.md`](contracts/mcp-beta-criteria.md); current gate status: `./agent-config doctor --check mcp-beta-readiness` (Phase 3 of `road-to-surface-discipline.md`).
4
4
 
5
5
  `agent-config` ships a built-in [Model Context Protocol](https://modelcontextprotocol.io)
6
6
  server that exposes the package's read-only governance surface to MCP-aware
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@event4u/agent-config",
3
- "version": "2.8.0",
3
+ "version": "2.9.0",
4
4
  "description": "Shared agent configuration \u2014 skills, rules, commands, guidelines, and templates for AI coding tools",
5
5
  "license": "MIT",
6
6
  "private": false,