@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.
- package/.agent-src/personas/engineering-manager.md +133 -0
- package/.agent-src/personas/finance-partner.md +129 -0
- package/.agent-src/personas/people-strategist.md +126 -0
- package/.agent-src/personas/strategist.md +129 -0
- package/.agent-src/skills/build-buy-partner/SKILL.md +145 -0
- package/.agent-src/skills/comp-banding/SKILL.md +160 -0
- package/.agent-src/skills/competitive-moat-analysis/SKILL.md +152 -0
- package/.agent-src/skills/contracts-cognition/SKILL.md +147 -0
- package/.agent-src/skills/data-handling-judgment/SKILL.md +155 -0
- package/.agent-src/skills/forecasting/SKILL.md +164 -0
- package/.agent-src/skills/hiring-loop-design/SKILL.md +167 -0
- package/.agent-src/skills/market-entry-analysis/SKILL.md +144 -0
- package/.agent-src/skills/onboarding-program/SKILL.md +157 -0
- package/.agent-src/skills/one-on-one-cadence/SKILL.md +161 -0
- package/.agent-src/skills/org-design/SKILL.md +158 -0
- package/.agent-src/skills/perf-feedback-craft/SKILL.md +157 -0
- package/.agent-src/skills/privacy-review/SKILL.md +160 -0
- package/.agent-src/skills/runway-cognition/SKILL.md +136 -0
- package/.agent-src/skills/scenario-modeling/SKILL.md +139 -0
- package/.agent-src/skills/throughput-vs-morale-tradeoff/SKILL.md +165 -0
- package/.agent-src/skills/unit-economics-modeling/SKILL.md +54 -7
- package/.agent-src/skills/vision-articulation/SKILL.md +146 -0
- package/.agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/.agent-src/templates/scripts/telemetry/settings.py +65 -0
- package/.agent-src/templates/scripts/tier_usage_report.py +183 -0
- package/.claude-plugin/marketplace.json +18 -1
- package/AGENTS.md +1 -1
- package/CHANGELOG.md +106 -0
- package/README.md +3 -3
- package/docs/architecture.md +37 -11
- package/docs/catalog.md +22 -4
- package/docs/contracts/adr-forecast-construction-shape.md +89 -0
- package/docs/contracts/adr-wing4-context-spine.md +125 -0
- package/docs/contracts/command-clusters.md +41 -0
- package/docs/contracts/command-surface-tiers.md +25 -9
- package/docs/contracts/context-spine.md +8 -0
- package/docs/contracts/mcp-beta-criteria.md +129 -0
- package/docs/guidelines/wing4-handoff.md +127 -0
- package/docs/mcp-server.md +1 -1
- package/package.json +1 -1
- package/scripts/_cli/cmd_doctor.py +527 -14
- package/scripts/_cli/cmd_validate.py +10 -0
- package/scripts/agent-config +19 -18
- package/scripts/install.py +5 -0
- package/scripts/lint_context_spine_usage.py +1 -0
- package/scripts/mcp_server/__init__.py +1 -0
- package/scripts/mcp_server/server.py +4 -3
- package/scripts/schemas/skill.schema.json +2 -2
- 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
|
-
|
|
46
|
-
(`
|
|
47
|
-
|
|
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`, `
|
|
52
|
-
`
|
|
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.
|
package/docs/mcp-server.md
CHANGED
|
@@ -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