@event4u/agent-config 2.8.0 → 2.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 (67) 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/rules/no-roadmap-references.md +19 -0
  6. package/.agent-src/skills/build-buy-partner/SKILL.md +145 -0
  7. package/.agent-src/skills/comp-banding/SKILL.md +160 -0
  8. package/.agent-src/skills/competitive-moat-analysis/SKILL.md +152 -0
  9. package/.agent-src/skills/contracts-cognition/SKILL.md +147 -0
  10. package/.agent-src/skills/data-handling-judgment/SKILL.md +155 -0
  11. package/.agent-src/skills/forecasting/SKILL.md +164 -0
  12. package/.agent-src/skills/hiring-loop-design/SKILL.md +167 -0
  13. package/.agent-src/skills/market-entry-analysis/SKILL.md +144 -0
  14. package/.agent-src/skills/onboarding-program/SKILL.md +157 -0
  15. package/.agent-src/skills/one-on-one-cadence/SKILL.md +161 -0
  16. package/.agent-src/skills/org-design/SKILL.md +158 -0
  17. package/.agent-src/skills/perf-feedback-craft/SKILL.md +157 -0
  18. package/.agent-src/skills/privacy-review/SKILL.md +160 -0
  19. package/.agent-src/skills/runway-cognition/SKILL.md +136 -0
  20. package/.agent-src/skills/scenario-modeling/SKILL.md +139 -0
  21. package/.agent-src/skills/throughput-vs-morale-tradeoff/SKILL.md +165 -0
  22. package/.agent-src/skills/unit-economics-modeling/SKILL.md +54 -7
  23. package/.agent-src/skills/vision-articulation/SKILL.md +146 -0
  24. package/.agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  25. package/.agent-src/templates/scripts/telemetry/settings.py +65 -0
  26. package/.agent-src/templates/scripts/tier_usage_report.py +183 -0
  27. package/.agent-src/templates/scripts/work_engine/hooks/builtin/memory_visibility.py +32 -3
  28. package/.agent-src/templates/scripts/work_engine/scoring/memory_visibility.py +147 -1
  29. package/.claude-plugin/marketplace.json +18 -1
  30. package/AGENTS.md +1 -1
  31. package/CHANGELOG.md +134 -0
  32. package/README.md +34 -14
  33. package/config/agent-settings.template.yml +28 -0
  34. package/docs/architecture.md +37 -11
  35. package/docs/catalog.md +22 -4
  36. package/docs/contracts/adr-forecast-construction-shape.md +89 -0
  37. package/docs/contracts/adr-wing4-context-spine.md +125 -0
  38. package/docs/contracts/command-clusters.md +41 -0
  39. package/docs/contracts/command-surface-tiers.md +25 -9
  40. package/docs/contracts/context-spine.md +8 -0
  41. package/docs/contracts/decision-trace-v1.md +30 -0
  42. package/docs/contracts/hook-architecture-v1.md +46 -0
  43. package/docs/contracts/mcp-beta-criteria.md +129 -0
  44. package/docs/contracts/memory-visibility-v1.md +33 -0
  45. package/docs/contracts/settings-sync-yaml-subset.md +138 -0
  46. package/docs/guidelines/wing4-handoff.md +127 -0
  47. package/docs/mcp-server.md +1 -1
  48. package/docs/readme-split-plan.md +102 -0
  49. package/package.json +1 -1
  50. package/scripts/_cli/cmd_doctor.py +527 -14
  51. package/scripts/_cli/cmd_settings_check.py +171 -0
  52. package/scripts/_cli/cmd_validate.py +10 -0
  53. package/scripts/agent-config +59 -18
  54. package/scripts/chat_history.py +19 -0
  55. package/scripts/check_council_references.py +46 -5
  56. package/scripts/hooks/dispatch_hook.py +5 -1
  57. package/scripts/hooks/replay_hook.py +144 -0
  58. package/scripts/hooks/state_io.py +24 -1
  59. package/scripts/hooks_doctor.py +184 -0
  60. package/scripts/install.py +5 -0
  61. package/scripts/lint_context_spine_usage.py +1 -0
  62. package/scripts/lint_hook_concern_budget.py +203 -0
  63. package/scripts/mcp_server/__init__.py +1 -0
  64. package/scripts/mcp_server/server.py +4 -3
  65. package/scripts/roadmap_progress_hook.py +11 -0
  66. package/scripts/schemas/skill.schema.json +2 -2
  67. package/scripts/skill_linter.py +107 -3
@@ -4,22 +4,44 @@
4
4
 
5
5
  ## System overview
6
6
 
7
+ Six layers, ordered from "how the package reaches a consumer" down to "what a consumer's agent actually executes". Each layer names its canonical contract under [`docs/contracts/`](contracts/) — the overview is a router, not a re-statement.
8
+
7
9
  ```
8
- Rules Behavior enforcement (always active) ← stable
9
- Skills Execution logic (on-demand expertise) ← stable
10
- Runtime Dispatcher Single-skill shell execution (pilot skills) ← stable (mechanism)
11
- Work Engine Multi-step orchestration for /work + /implement beta
12
- Tool Adapters External integrations (GitHub, Jira) experimental
10
+ Distribution npx-only runtime · install.sh · lockfile pin ← stable
11
+ Governance Kernel rules · tier-1/2 routing · command clusters ← stable
12
+ Router-Kernel router.json · always-loaded Iron Laws · char caps ← stable
13
+ Projection Compression · augment / multi-tool / cloud bundles stable
14
+ Execution Contracts Skills · commands · work-engine · roadmap engine stable / beta
15
+ MCP Lite/Full → Hosted read-only (Lite) · local stdio (Full) ← experimental
13
16
  ```
14
17
 
18
+ | Layer | Canonical contract | Tier |
19
+ |---|---|---|
20
+ | **Distribution** | [`installed-tools-lockfile.md`](contracts/installed-tools-lockfile.md) + the "Distribution model" subsection below | stable |
21
+ | **Governance** | [`command-clusters.md`](contracts/command-clusters.md) + [`command-surface-tiers.md`](contracts/command-surface-tiers.md) | stable |
22
+ | **Router-Kernel** | [`kernel-membership.md`](contracts/kernel-membership.md) + [`rule-router.md`](contracts/rule-router.md) | stable |
23
+ | **Projection** | [`architecture/compression.md`](architecture/compression.md), [`augment-projection.md`](architecture/augment-projection.md), [`multi-tool-projection.md`](architecture/multi-tool-projection.md), [`claude-bundle.md`](architecture/claude-bundle.md) | stable |
24
+ | **Execution Contracts** | [`implement-ticket-flow.md`](contracts/implement-ticket-flow.md), [`orchestration-dsl-v1.md`](contracts/orchestration-dsl-v1.md), [`adr-product-ui-track.md`](contracts/adr-product-ui-track.md) | stable (skills · commands) / beta (work-engine · roadmap engine) |
25
+ | **MCP Lite/Full** | [`mcp-phase-1-scope.md`](contracts/mcp-phase-1-scope.md), [`mcp-cloud-scope.md`](contracts/mcp-cloud-scope.md), [`mcp-beta-criteria.md`](contracts/mcp-beta-criteria.md) | experimental — promotion to beta gated on `mcp-beta-criteria.md` (six artefact gates, monitored by `agent-config doctor --check mcp-beta-readiness`) |
26
+
15
27
  Stability tiers follow [`docs/contracts/STABILITY.md`](contracts/STABILITY.md):
16
28
 
17
29
  - **stable** = shipped, documented, exercised by the default (`minimal`) profile or by CI on every PR; SemVer-major for breaks.
18
30
  - **beta** = shipped and load-bearing for one or more flows, but the surface is expected to evolve; minor-version breaks allowed under a `### Breaking` CHANGELOG note.
19
31
  - **experimental** = scaffold or pilot status; breaks allowed in any release.
20
32
 
33
+ ### What changed since 2.2.2
34
+
35
+ Four load-bearing additions reshaped the top of the model between 2.2.2 and the current release. They are listed here so the diagram above reads as the *current* package, not a historical accumulation:
36
+
37
+ 1. **Router-Kernel** — the always-loaded Iron Laws collapsed into a 9-rule kernel with explicit per-rule character budgets enforced by `task lint-rule-budget`; everything else routes via tier-1/2 (`.agent-src/router.json`). Contract: [`kernel-membership.md`](contracts/kernel-membership.md) + [`rule-router.md`](contracts/rule-router.md).
38
+ 2. **MCP Lite/Full** — replaces the old "Tool Adapters" layer at the top level. Lite is the hosted read-only surface (Claude.ai, Cloud agents); Full is the local stdio server consumers self-host. Promotion to beta is gated on six falsifiable artefacts in [`mcp-beta-criteria.md`](contracts/mcp-beta-criteria.md); the old GitHub / Jira adapters remain as an internal detail of the Execution Contracts layer (see Tool Adapters subsection below).
39
+ 3. **npx distribution** — Composer and `npm install` paths retired in favour of `npx @event4u/agent-config`, with the lockfile-equivalent role played by `agent_config_version` in `.agent-settings.yml`. Full rationale in the "Distribution model" subsection below.
40
+ 4. **Command tiering** — `/`-commands now declare a `tier:` (0 / 1 / 2 / 3) that maps to invocation frequency and surface budget; tier-0 is the trimmed Tier-0 set surfaced in `agent-config --help` after the 2.7.x surface-discipline pass. Contract: [`command-surface-tiers.md`](contracts/command-surface-tiers.md) + [`command-clusters.md`](contracts/command-clusters.md).
41
+
21
42
  > The previous "observability, feedback, lifecycle" layers were removed in
22
- > 1.5 — they were scaffolds without production consumers.
43
+ > 1.5 — they were scaffolds without production consumers. The "Tool
44
+ > Adapters" top-level layer was demoted in 2.7 — see point 2 above.
23
45
 
24
46
  ## Content pipelines
25
47
 
@@ -119,16 +141,18 @@ note, package-internal path-swap, description budget, and the
119
141
 
120
142
  | Layer | Count | Purpose |
121
143
  |---|---|---|
122
- | **Skills** | 189 | On-demand expertise — stack analysis (Laravel · Symfony · Zend / Laminas · Next.js · React · Node), testing, Docker, API design, security, observability, … |
144
+ | **Skills** | 206 | On-demand expertise — stack analysis (Laravel · Symfony · Zend / Laminas · Next.js · React · Node), testing, Docker, API design, security, observability, … |
123
145
  | **Rules** | 61 | Always-active constraints — coding standards, scope control, verification, language-and-tone, agent-authority |
124
146
  | **Commands** | 106 | Slash-command workflows — `/commit`, `/create-pr`, `/fix ci`, `/optimize skills`, `/feature plan`, `/work`, `/implement-ticket`, `/compress`, … |
125
- | **Guidelines** | 71 | Reference material cited by skills — PHP patterns, Eloquent, Playwright, agent-infra, … |
147
+ | **Guidelines** | 72 | Reference material cited by skills — PHP patterns, Eloquent, Playwright, agent-infra, … |
126
148
  | **Templates** | 7 | Scaffolds for features, roadmaps, contexts, skills, overrides |
127
149
  | **Contexts** | 5 | Shared knowledge about the system itself |
128
150
 
129
151
  ---
130
152
 
131
- ## Layers
153
+ ## Execution-layer detail
154
+
155
+ > The six layers in the System overview are the top-level model. This section provides depth on the **Governance**, **Router-Kernel**, and **Execution Contracts** layers — the three a host agent interacts with on every turn. Distribution and Projection live in their own sub-pages ([`architecture/`](architecture/) and the "Distribution model" subsection above); MCP Lite/Full lives in [`docs/mcp-server.md`](mcp-server.md).
132
156
 
133
157
  ### 1. Governance Layer
134
158
 
@@ -137,7 +161,7 @@ note, package-internal path-swap, description budget, and the
137
161
  - **Guidelines** → reference-only documentation
138
162
  - **Commands** → workflow orchestration
139
163
 
140
- Ensures: no guessing, analysis before action, real verification, consistent outputs.
164
+ Ensures: no guessing, analysis before action, real verification, consistent outputs. Canonical contracts: [`kernel-membership.md`](contracts/kernel-membership.md), [`rule-router.md`](contracts/rule-router.md), [`command-clusters.md`](contracts/command-clusters.md), [`command-surface-tiers.md`](contracts/command-surface-tiers.md).
141
165
 
142
166
  ### 2. Runtime Dispatcher — stable mechanism, pilot coverage
143
167
 
@@ -222,7 +246,9 @@ The Work Engine **uses** the Runtime Dispatcher when a phase needs
222
246
  to execute a single skill (e.g. lint, refs check), but the two are
223
247
  independent components with separate stability tiers.
224
248
 
225
- ### 4. Tool Adapters — experimental
249
+ ### 4. Tool Adapters — experimental (internal detail; superseded at the top level by MCP)
250
+
251
+ > **Position in the new model.** Tool Adapters no longer occupy a top-level layer — that slot is now **MCP Lite/Full**. The adapter classes still ship as the internal mechanism the Work Engine uses for inline GitHub/Jira reads, but external integration is meant to land via MCP going forward. See [`mcp-phase-1-scope.md`](contracts/mcp-phase-1-scope.md), [`mcp-cloud-scope.md`](contracts/mcp-cloud-scope.md), and [`mcp-beta-criteria.md`](contracts/mcp-beta-criteria.md) for the surface that replaces this layer at the top level.
226
252
 
227
253
  > **Status: scaffold + read-only GitHub calls.** With a `GITHUB_TOKEN` the
228
254
  > GitHub adapter performs real read calls; without one it returns scaffold
package/docs/catalog.md CHANGED
@@ -1,13 +1,13 @@
1
1
  # agent-config — Public Catalog
2
2
 
3
- Consumer-facing catalog of all **424 public artefacts** shipped by
3
+ Consumer-facing catalog of all **442 public artefacts** shipped by
4
4
  this package. Internal package-maintenance rules and deprecation shims
5
5
  are excluded.
6
6
 
7
7
  > **Regenerate:** `python3 scripts/generate_index.py`
8
8
  > Auto-generated — do not edit manually.
9
9
 
10
- ## Skills (189)
10
+ ## Skills (206)
11
11
 
12
12
  | kind | name | extra | description |
13
13
  |---|---|---|---|
@@ -31,23 +31,28 @@ are excluded.
31
31
  | skill | [`blade-ui`](../.agent-src/skills/blade-ui/SKILL.md) | | Use when the project's frontend stack is Blade — dispatched by `directives/ui/{apply,review,polish}.py`. Covers views, components, partials, layouts, and view logic. |
32
32
  | skill | [`blast-radius-analyzer`](../.agent-src/skills/blast-radius-analyzer/SKILL.md) | | Use BEFORE editing shared code — enumerates every call site, event consumer, queue worker, API client, migration, and test that a planned change will touch, with a file:line citation per dependency. |
33
33
  | skill | [`bug-analyzer`](../.agent-src/skills/bug-analyzer/SKILL.md) | | Use when the user shares a Sentry error, Jira bug ticket, or error description and wants root cause analysis. Also for proactive bug hunting and code audits for hidden bugs. |
34
+ | skill | [`build-buy-partner`](../.agent-src/skills/build-buy-partner/SKILL.md) | | Use when deciding insource vs outsource vs acquire — integration-cost analysis, dependency-risk, optionality preservation. Triggers on 'should we build', 'buy vs partner'. |
34
35
  | skill | [`check-refs`](../.agent-src/skills/check-refs/SKILL.md) | | Use when verifying cross-references between skills, rules, commands, guidelines, and context documents are not broken after edits, renames, or deletions. |
35
36
  | skill | [`churn-prevention`](../.agent-src/skills/churn-prevention/SKILL.md) | | Use when designing churn defence — health-score signals, churn-cause split (involuntary / value / relationship / fit), early-warning loop. Triggers on 'why are accounts leaving'. |
36
37
  | skill | [`code-refactoring`](../.agent-src/skills/code-refactoring/SKILL.md) | | Use when the user says "refactor this", "rename class", or "move method". Safely refactors PHP code — finds all callers, updates downstream dependencies, and verifies with quality tools. |
37
38
  | skill | [`code-review`](../.agent-src/skills/code-review/SKILL.md) | | Use when the user says "review this", "check my code", or wants feedback on changes. Reviews for correctness, quality, security, and coding standards. |
38
39
  | skill | [`command-routing`](../.agent-src/skills/command-routing/SKILL.md) | | Use when the user invokes a slash command like /create-pr, /commit, /fix-ci, or pastes command file content — routes to the right command with context inference and GitHub API patterns. |
39
40
  | skill | [`command-writing`](../.agent-src/skills/command-writing/SKILL.md) | | Use when creating or editing a slash command in .agent-src.uncompressed/commands/ — frontmatter, numbered steps, safety gates — even when the user just says 'add a /command for X'. |
41
+ | skill | [`comp-banding`](../.agent-src/skills/comp-banding/SKILL.md) | | Use when designing levels, comp bands, equity-vs-cash, geo adjustments, or raise vs promotion vs market correction. Triggers on 'set our comp bands', 'is this raise market'. |
42
+ | skill | [`competitive-moat-analysis`](../.agent-src/skills/competitive-moat-analysis/SKILL.md) | | Use when mapping competitors, naming defensibility, and finding white-space — moat reasoning, where-to-play, where-not-to-play. Triggers on 'who are we competing with', 'what's our moat'. |
40
43
  | skill | [`competitive-positioning`](../.agent-src/skills/competitive-positioning/SKILL.md) | | Use when comparing this package to a peer / competitor — ours-vs-theirs verdict table, axis selection, adoption queue. Triggers on 'how do we compare to X', 'should we adopt their pattern'. |
41
44
  | skill | [`composer-packages`](../.agent-src/skills/composer-packages/SKILL.md) | | Use when building or maintaining a Composer library — versioning, Laravel integration, autoloading, publishing to private registries — even when the user says 'release a new version'. |
42
45
  | skill | [`content-funnel-design`](../.agent-src/skills/content-funnel-design/SKILL.md) | | Use when mapping funnel-stage to content shape — conversion-pathway, content-as-system, leverage-point selection. Triggers on 'design our content funnel', 'why does mid-funnel leak'. |
43
46
  | skill | [`context-authoring`](../.agent-src/skills/context-authoring/SKILL.md) | | Use when filling in knowledge-layer context files — auth-model, tenant-boundaries, data-sensitivity, deployment-order, observability — interactive walkthrough that turns templates into reviewer fuel. |
44
47
  | skill | [`context-document`](../.agent-src/skills/context-document/SKILL.md) | | Use when the user says "create context", "document this area", or wants a structured snapshot of a codebase area for agent orientation. |
48
+ | skill | [`contracts-cognition`](../.agent-src/skills/contracts-cognition/SKILL.md) | | Use when reading a contract for risk and constraint — clause shape, redline priority, what the contract actually binds. Triggers on 'review this contract', 'what does this MSA constrain'. |
45
49
  | skill | [`conventional-commits-writing`](../.agent-src/skills/conventional-commits-writing/SKILL.md) | | Use when writing commit messages or squash-merge titles — `feat:`, `fix:`, `chore:`, scopes, breaking changes — even when the user just says 'commit this' without naming Conventional Commits. |
46
50
  | skill | [`copilot-agents-optimization`](../.agent-src/skills/copilot-agents-optimization/SKILL.md) | | Use when optimizing AGENTS.md or copilot-instructions.md — deduplicates against .augment/ content, enforces line budgets, and focuses each file on its audience. |
47
51
  | skill | [`copilot-config`](../.agent-src/skills/copilot-config/SKILL.md) | | Use when configuring GitHub Copilot — copilot-instructions.md, PR review patterns, output optimization — even when the user just says 'tune Copilot' or 'why is Copilot commenting on X'. |
48
52
  | skill | [`customer-research`](../.agent-src/skills/customer-research/SKILL.md) | | Use when shaping a discovery slice — JTBD-framed interview guide, switch-event focus, verbatim quotes not summaries. Triggers on 'talk to users', 'why did they cancel', 'before we build X'. |
49
53
  | skill | [`dashboard-design`](../.agent-src/skills/dashboard-design/SKILL.md) | | Use when designing monitoring dashboards — visualization selection, layout principles, observability strategies (RED/USE/Golden Signals), and data storytelling. |
50
54
  | skill | [`data-flow-mapper`](../.agent-src/skills/data-flow-mapper/SKILL.md) | | Use BEFORE editing code that touches user data — traces the value from entry → validation → transformation → storage → egress, every hop cited with file:line. |
55
+ | skill | [`data-handling-judgment`](../.agent-src/skills/data-handling-judgment/SKILL.md) | | Use when classifying data, setting retention, judging cross-border transfer, or shaping DSR workflow. Triggers on 'how long do we keep this', 'can this data go to the US'. |
51
56
  | skill | [`database`](../.agent-src/skills/database/SKILL.md) | | Use when working with database architecture, MariaDB/MySQL tuning, indexing strategies, slow queries, or multi-connection patterns — even when the user just says 'this query is slow'. |
52
57
  | skill | [`dcf-modeling`](../.agent-src/skills/dcf-modeling/SKILL.md) | | Wing-4 valuation cognition for a CFO / finance-partner. Use when a deal, internal investment, or board ask names DCF, intrinsic value, WACC, terminal value, or 'what's it worth on a 5-year hold'. |
53
58
  | skill | [`deal-qualification-meddic`](../.agent-src/skills/deal-qualification-meddic/SKILL.md) | | Use when qualifying or disqualifying a single deal — MEDDIC slots with evidence, inversion test, disqualification heuristic. Triggers on 'is this deal real', 'should we walk away'. |
@@ -74,6 +79,7 @@ are excluded.
74
79
  | skill | [`finishing-a-development-branch`](../.agent-src/skills/finishing-a-development-branch/SKILL.md) | | Use when the feature is implementation-complete and the next step is 'ship it' — verifies, cleans up, and routes to merge/PR/park/discard — even when the user just says 'I'm done, what now?'. |
75
80
  | skill | [`flux`](../.agent-src/skills/flux/SKILL.md) | | Use when the project uses `livewire/flux` — dispatched by `directives/ui/{apply,review,polish}.py`. Covers Flux components, slots, variants, and form primitives. |
76
81
  | skill | [`forecast-accuracy`](../.agent-src/skills/forecast-accuracy/SKILL.md) | | Use when constructing the forecast call — commit / best-case / pipeline categorisation, deal-level evidence test, accuracy retro-loop. Triggers on 'build the forecast', 'why does our commit miss'. |
82
+ | skill | [`forecasting`](../.agent-src/skills/forecasting/SKILL.md) | | Use when constructing the finance-side forecast — top-down vs bottom-up shape, confidence bands, retro-loop. Triggers on 'build the forecast model', 'reconcile top-down with bottom-up'. |
77
83
  | skill | [`form-handler`](../.agent-src/skills/form-handler/SKILL.md) | | Use when designing or reviewing a form — validation timing, error display, submission lifecycle, optimistic UI, dirty/pristine state, idempotency — even on 'why does submit double-fire?'. |
78
84
  | skill | [`fundraising-narrative`](../.agent-src/skills/fundraising-narrative/SKILL.md) | | Use when shaping a capital-raise pitch — why-now / why-us / why-this framing, market-size reasoning, traction-story construction. Triggers on 'tighten the pitch', 'why-now is weak'. |
79
85
  | skill | [`funnel-analysis`](../.agent-src/skills/funnel-analysis/SKILL.md) | | Use when diagnosing where a SaaS or product funnel leaks — visitor → signup → activation → paid → retained — channel-agnostic, conversion-rate-driven. |
@@ -82,6 +88,7 @@ are excluded.
82
88
  | skill | [`grafana`](../.agent-src/skills/grafana/SKILL.md) | | Use when working with Grafana — dashboards, Loki LogQL queries, alerting rules, monitoring panels — even when the user just says 'build me a dashboard' or 'query the logs' without naming Grafana. |
83
89
  | skill | [`gtm-launch`](../.agent-src/skills/gtm-launch/SKILL.md) | | Use when sequencing a launch — alpha / beta / GA waves, audience-by-wave logic, narrative beats per wave, engineering-readiness gates. Triggers on 'plan the launch', 'sequence GA'. |
84
90
  | skill | [`guideline-writing`](../.agent-src/skills/guideline-writing/SKILL.md) | | Use when creating or editing a guideline in docs/guidelines/ — reference material cited by skills, no auto-triggers — even when the user just says 'write up our naming conventions'. |
91
+ | skill | [`hiring-loop-design`](../.agent-src/skills/hiring-loop-design/SKILL.md) | | Use when shaping an engineering hiring loop — stages, take-home vs live, calibration, bar-raiser, signal-vs-noise audit. Triggers on 'design our interview loop', 'audit our hiring bar'. |
85
92
  | skill | [`incident-commander`](../.agent-src/skills/incident-commander/SKILL.md) | | Use during or right after an incident — frames severity, sets comms cadence, drafts the post-mortem skeleton — even when the user just says 'production is down' or 'wir haben einen Vorfall'. |
86
93
  | skill | [`jira-integration`](../.agent-src/skills/jira-integration/SKILL.md) | | Use when the user says "check Jira", "create ticket", "update issue", or needs JQL queries, ticket transitions, or branch-to-ticket linking. |
87
94
  | skill | [`jobs-events`](../.agent-src/skills/jobs-events/SKILL.md) | | Use when creating Laravel jobs, queued workflows, events, or listeners. Covers clear responsibilities, safe serialization, and retry/failure handling. |
@@ -105,6 +112,7 @@ are excluded.
105
112
  | skill | [`livewire`](../.agent-src/skills/livewire/SKILL.md) | | Use when the project's frontend stack is Livewire — dispatched by `directives/ui/{apply,review,polish}.py`. Covers reactive state, events, lifecycle hooks, and component/view separation. |
106
113
  | skill | [`livewire-architect`](../.agent-src/skills/livewire-architect/SKILL.md) | | Use when shaping a Livewire component before code — full-page vs partial, parent/child split, event flow, state-vs-props boundary, hydration cost — even on 'add this Livewire component'. |
107
114
  | skill | [`logging-monitoring`](../.agent-src/skills/logging-monitoring/SKILL.md) | | Use when working with logging or monitoring — Sentry error tracking, Grafana/Loki log aggregation, structured logging channels, or monitoring helpers. |
115
+ | skill | [`market-entry-analysis`](../.agent-src/skills/market-entry-analysis/SKILL.md) | | Use when sequencing market entry — geo / segment / vertical, beachhead selection, regulatory-delta. Triggers on 'should we enter market X', 'which segment first'. |
108
116
  | skill | [`markitdown`](../.agent-src/skills/markitdown/SKILL.md) | | Use when converting PDF, DOCX, XLSX, PPTX, EPUB, images, or audio to Markdown for LLM ingestion via the upstream markitdown-mcp server — 'extract this PDF', 'OCR this image', 'transcribe this audio'. |
109
117
  | skill | [`mcp`](../.agent-src/skills/mcp/SKILL.md) | | Use when working with MCP (Model Context Protocol) servers — their tools, capabilities, and best practices for effective agent workflows. |
110
118
  | skill | [`mcp-builder`](../.agent-src/skills/mcp-builder/SKILL.md) | | Use when building an MCP server in Python (FastMCP) or Node/TypeScript (MCP SDK) — agent-centric tool design, input schemas, error handling, and the 10-question evaluation harness. |
@@ -119,8 +127,12 @@ are excluded.
119
127
  | skill | [`multi-tenancy`](../.agent-src/skills/multi-tenancy/SKILL.md) | | Use when working with the multi-tenant architecture — customer DB switching, FQDN routing, tenant isolation, or cross-tenant operations. |
120
128
  | skill | [`okr-tree-modeling`](../.agent-src/skills/okr-tree-modeling/SKILL.md) | | Use when decomposing a company objective into team OKRs, auditing a draft OKR tree, or stress-testing an existing one for measurability and laddering. |
121
129
  | skill | [`onboarding-design`](../.agent-src/skills/onboarding-design/SKILL.md) | | Use when designing customer onboarding — time-to-first-value, milestone design, friction audit, drop-off diagnosis. Triggers on 'fix onboarding', 'why do new accounts churn fast'. |
130
+ | skill | [`onboarding-program`](../.agent-src/skills/onboarding-program/SKILL.md) | | Use when shaping employee onboarding — time-to-productivity, role-by-role program, mentor pairing, 30/60/90 milestones. Triggers on 'design our onboarding', 'why are new hires ramping slow'. |
131
+ | skill | [`one-on-one-cadence`](../.agent-src/skills/one-on-one-cadence/SKILL.md) | | Use when designing engineering 1:1s — cadence, agenda mix, growth-vs-blocker-vs-trust shape, cancellation anti-patterns. Triggers on 'fix my 1:1s', 'should I cancel 1:1s this week'. |
122
132
  | skill | [`openapi`](../.agent-src/skills/openapi/SKILL.md) | | Use when documenting APIs — OpenAPI/Swagger, PHP attributes, Redocly validation, versioned specs — even when the user just says 'document this endpoint' without naming OpenAPI. |
133
+ | skill | [`org-design`](../.agent-src/skills/org-design/SKILL.md) | | Use when shaping team structure — functional vs squad, span-of-control, reorg cost, Conway-aware boundaries. Triggers on 'should we reorg', 'how do we split this team'. |
123
134
  | skill | [`override-management`](../.agent-src/skills/override-management/SKILL.md) | | Creates and manages project-level overrides for shared skills, rules, and commands — extending or replacing originals from .augment/ with project-specific behavior in agents/overrides/. |
135
+ | skill | [`perf-feedback-craft`](../.agent-src/skills/perf-feedback-craft/SKILL.md) | | Use when shaping feedback — situation-behavior-impact, growth-vs-corrective split, cadence design, ladder-of-inference checks. Triggers on 'how do I give this feedback', 'perf review shape'. |
124
136
  | skill | [`performance`](../.agent-src/skills/performance/SKILL.md) | | Use when optimizing application performance — caching strategies, eager loading, query optimization, Redis patterns, or background job design. |
125
137
  | skill | [`performance-analysis`](../.agent-src/skills/performance-analysis/SKILL.md) | | ONLY when user explicitly requests: performance audit, bottleneck analysis, or N+1 query detection. NOT for regular feature work. |
126
138
  | skill | [`persona-writing`](../.agent-src/skills/persona-writing/SKILL.md) | | Use when creating or editing a persona in .agent-src.uncompressed/personas/ — voice / focus / unique questions / output expectations — even when the user just says 'add a reviewer voice for X'. |
@@ -133,6 +145,7 @@ are excluded.
133
145
  | skill | [`playwright-testing`](../.agent-src/skills/playwright-testing/SKILL.md) | | Use when writing Playwright E2E tests — browser automation, visual regression testing, Page Objects, fixtures, and reliable test patterns. |
134
146
  | skill | [`po-discovery`](../.agent-src/skills/po-discovery/SKILL.md) | | Use when shaping a fuzzy product ask into a refined backlog item — problem framing, user-story rewrite, AC tightening — even if the user just says 'help me write this ticket'. |
135
147
  | skill | [`positioning-strategy`](../.agent-src/skills/positioning-strategy/SKILL.md) | | Use when locking the market frame — category, segment, alternative, point-of-view — before messaging, launch, or pricing rides on it. Triggers on 'who are we for', 'opposable audit'. |
148
+ | skill | [`privacy-review`](../.agent-src/skills/privacy-review/SKILL.md) | | Use when reviewing data flows for GDPR / CCPA / HIPAA fit — regulatory-regime delta, consent shape, breach-impact triage. Triggers on 'is this GDPR-safe', 'do we need a DPA'. |
136
149
  | skill | [`project-analysis-core`](../.agent-src/skills/project-analysis-core/SKILL.md) | | Use for the universal deep-analysis workflow: project discovery, version resolution, docs loading, architecture mapping, execution flow, and package research. |
137
150
  | skill | [`project-analysis-hypothesis-driven`](../.agent-src/skills/project-analysis-hypothesis-driven/SKILL.md) | | Use when a bug has multiple plausible causes across layers — competing hypotheses, validation loops, evidence-based conclusions — even when the user just says 'why is this happening?'. |
138
151
  | skill | [`project-analysis-laravel`](../.agent-src/skills/project-analysis-laravel/SKILL.md) | | Use for deep Laravel project analysis: boot flow, request lifecycle, container usage, Eloquent/data flow, async systems, and Laravel-specific failure patterns. |
@@ -165,6 +178,8 @@ are excluded.
165
178
  | skill | [`roadmap-writing`](../.agent-src/skills/roadmap-writing/SKILL.md) | | Use when authoring or rewriting a roadmap in agents/roadmaps/ — phase prose, goal sentence, acceptance criteria, council notes — even when the user just says 'write a plan for X' or 'draft a roadmap'. |
166
179
  | skill | [`rtk-output-filtering`](../.agent-src/skills/rtk-output-filtering/SKILL.md) | | Use when running verbose CLI commands — wraps them with rtk (Rust Token Killer) for 60-90% token savings. Covers installation, configuration, and usage patterns. |
167
180
  | skill | [`rule-writing`](../.agent-src/skills/rule-writing/SKILL.md) | | Use when creating or editing a rule in .agent-src.uncompressed/rules/ — trigger wording, always vs auto classification, size budget — even when the user just says 'add a rule for X'. |
181
+ | skill | [`runway-cognition`](../.agent-src/skills/runway-cognition/SKILL.md) | | Use when reasoning about cash runway — burn shape, fundraise triggers, layoff-vs-cut-vs-grow decisions. Triggers on 'how long do we have', 'should we raise', 'cut or grow'. |
182
+ | skill | [`scenario-modeling`](../.agent-src/skills/scenario-modeling/SKILL.md) | | Use when constructing base / upside / downside scenarios — three-statement modeling, sensitivity analysis, optionality reasoning. Triggers on 'model the scenarios', 'what if growth halves'. |
168
183
  | skill | [`script-writing`](../.agent-src/skills/script-writing/SKILL.md) | | Use when adding or editing any script under `scripts/` — `--quiet` flag, `_lib/script_output` helpers, silent Taskfile wiring, Iron-Law carve-outs — even when you just say 'add a check script for X'. |
169
184
  | skill | [`secrets-management`](../.agent-src/skills/secrets-management/SKILL.md) | | Use when picking a secrets store, designing rotation, or wiring scanning gates — multi-cloud (Vault, AWS, Azure, GCP), CI, and Kubernetes — decision framework, provider deep-dives externalized. |
170
185
  | skill | [`security`](../.agent-src/skills/security/SKILL.md) | | Use when applying security best practices — authentication, authorization via Policies, CSRF protection, input sanitization, rate limiting, or secure coding. |
@@ -188,15 +203,17 @@ are excluded.
188
203
  | skill | [`test-performance`](../.agent-src/skills/test-performance/SKILL.md) | | Use when optimizing test suite performance — database setup, seeder optimization, parallel testing, CI pipeline efficiency, or RefreshDatabase alternatives. |
189
204
  | skill | [`testing-anti-patterns`](../.agent-src/skills/testing-anti-patterns/SKILL.md) | | Use BEFORE writing or changing tests, adding mocks, or putting test-only methods on production classes — five Iron Laws and gates against mocking-the-mock, production pollution, silent partial mocks. |
190
205
  | skill | [`threat-modeling`](../.agent-src/skills/threat-modeling/SKILL.md) | | Use when adding auth, webhooks, uploads, queues, secrets, tenant boundaries, or public endpoints — produces trust boundaries + abuse cases mapped to files, BEFORE implementation. |
206
+ | skill | [`throughput-vs-morale-tradeoff`](../.agent-src/skills/throughput-vs-morale-tradeoff/SKILL.md) | | Use when balancing eng-team velocity vs quality vs burnout — on-call load, focus fragmentation, reorg shock. Triggers on 'team is burning out', 'why is velocity dropping'. |
191
207
  | skill | [`token-optimizer`](../.agent-src/skills/token-optimizer/SKILL.md) | | Use BEFORE any verbose CLI run, large file read, doc conversion, or near-context handoff — single decision tree keyed by intent that cites the canonical token-saving asset. Consult before the action. |
192
208
  | skill | [`traefik`](../.agent-src/skills/traefik/SKILL.md) | | Use when setting up Traefik as a local reverse proxy — real domains on 127.0.0.1, trusted HTTPS via mkcert, automatic service discovery, and multi-project routing. |
193
209
  | skill | [`ui-component-architect`](../.agent-src/skills/ui-component-architect/SKILL.md) | | Use when shaping a UI component tree — composition vs inheritance, slot patterns, prop API design, controlled vs uncontrolled, polymorphic — even on 'split this component'. |
194
- | skill | [`unit-economics-modeling`](../.agent-src/skills/unit-economics-modeling/SKILL.md) | | Use when modeling CAC, LTV, gross-margin payback, or contribution margin per customer — for SaaS, marketplace, or transactional businesses. |
210
+ | skill | [`unit-economics-modeling`](../.agent-src/skills/unit-economics-modeling/SKILL.md) | | Use when modeling CAC, LTV, payback, contribution margin, or burn-multiple per customer — SaaS, marketplace, or transactional. Triggers on 'are we unit-economic', 'what is our LTV/CAC'. |
195
211
  | skill | [`universal-project-analysis`](../.agent-src/skills/universal-project-analysis/SKILL.md) | | ONLY when user explicitly requests: full project analysis, deep codebase audit, or comprehensive architecture review. Routes to core and framework-specific analysis skills. |
196
212
  | skill | [`upstream-contribute`](../.agent-src/skills/upstream-contribute/SKILL.md) | | Use when a learning, new skill, rule improvement, or bug fix from a consumer project should be contributed back to the shared agent-config package. |
197
213
  | skill | [`using-git-worktrees`](../.agent-src/skills/using-git-worktrees/SKILL.md) | | Use when starting parallel work in isolation from the current branch — spawn a git worktree with ignore-safety checks and a clean test baseline — even when the user says 'try this on the side'. |
198
214
  | skill | [`validate-feature-fit`](../.agent-src/skills/validate-feature-fit/SKILL.md) | | Validate whether a feature request fits the existing codebase — check for duplicates, contradictions, scope creep, and architectural misfit |
199
215
  | skill | [`verify-completion-evidence`](../.agent-src/skills/verify-completion-evidence/SKILL.md) | | Use when claiming 'done', suggesting a commit, push, or PR — runs the evidence gate so completion claims come from fresh output in this message, not memory or earlier runs. |
216
+ | skill | [`vision-articulation`](../.agent-src/skills/vision-articulation/SKILL.md) | | Use when articulating internal vision — where we're going / why now / why us, founder-mode anchor, distinct from fundraising pitch. Triggers on 'what's our vision', 'why are we doing this'. |
200
217
  | skill | [`voc-extract`](../.agent-src/skills/voc-extract/SKILL.md) | | Use when extracting Voice-of-Customer themes from existing artefacts — GH issues, PR threads, Sentry patterns. Triggers on 'what are users saying', 'recurring complaints', 'top themes'. |
201
218
  | skill | [`voice-and-tone-design`](../.agent-src/skills/voice-and-tone-design/SKILL.md) | | Use when shaping brand voice — voice attributes, tone-by-context matrix, consistency review. Triggers on 'define our voice', 'why does our copy sound different on every surface'. |
202
219
  | skill | [`websocket`](../.agent-src/skills/websocket/SKILL.md) | | Use when building real-time features — WebSocket broadcasting, live updates, presence channels, connection state — even when the user just says 'push this to the client live'. |
@@ -375,7 +392,7 @@ are excluded.
375
392
  | command | [`upstream-contribute`](../.agent-src/commands/upstream-contribute.md) | | Contribute a learning, skill, rule, or fix from a consumer project back to the shared agent-config package |
376
393
  | command | [`work`](../.agent-src/commands/work.md) | | Drive a free-form prompt end-to-end through refine → score → plan → implement → test → verify → report — Option-A loop over the `work_engine` Python engine, confidence-band gated, no auto-git. |
377
394
 
378
- ## Guidelines (71)
395
+ ## Guidelines (72)
379
396
 
380
397
  | kind | name | category | description |
381
398
  |---|---|---|---|
@@ -450,6 +467,7 @@ are excluded.
450
467
  | guideline | [`sql`](../docs/guidelines/php/sql.md) | php | |
451
468
  | guideline | [`validations`](../docs/guidelines/php/validations.md) | php | |
452
469
  | guideline | [`websocket`](../docs/guidelines/php/websocket.md) | php | |
470
+ | guideline | [`wing4-handoff`](../docs/guidelines/wing4-handoff.md) | (root) | |
453
471
 
454
472
  ---
455
473
 
@@ -0,0 +1,89 @@
1
+ ---
2
+ stability: beta
3
+ ---
4
+
5
+ # ADR — `forecast-construction-shape`: the O2 ↔ H10 interface
6
+
7
+ > **Status:** Decided · 2026-05-13
8
+ > **Builds on:** [`cross-wing-handoff.md`](cross-wing-handoff.md) § 5 W4 chain;
9
+ > [`wing4-handoff.md`](../guidelines/wing4-handoff.md) § Chain 4;
10
+ > [`gtm-handoff.md`](../guidelines/gtm-handoff.md) § Chain 2 (H10 side).
11
+
12
+ ## Decision
13
+
14
+ `forecasting` (O2, Wing-4, finance-partner) and `forecast-accuracy`
15
+ (H10, Wing-3, RevOps) compose through a **typed interface**, not a
16
+ shared implementation. O2 owns the cognition of *how a forecast is
17
+ constructed*; H10 owns the cognition of *which deals belong in
18
+ commit*. The interface is the only contract that crosses the wing.
19
+
20
+ Interface payload (the `forecast-band.json` artifact):
21
+
22
+ | Field | Type | Meaning |
23
+ |---|---|---|
24
+ | `construction_shape` | enum `top-down` · `bottom-up` · `hybrid` | Which construction shape the forecast was built from. Top-down anchors against TAM × penetration × motion; bottom-up sums deal-level conviction; hybrid is the explicit two-call reconciliation. |
25
+ | `commit_value` | money | Sum of commit-categorised deals × in-window close-rate, or top-down commit-band lower bound. |
26
+ | `best_case_value` | money | Commit + best-case-tagged, or top-down best-case-band upper bound. |
27
+ | `pipeline_value` | money | Population from which commit / best-case are drawn. Not a forecast category, included for ratio reasoning. |
28
+ | `confidence_band` | `{plus_pct: float, minus_pct: float}` | Historical-deviation-derived band around commit. **MUST** be present; a forecast without a band has no honesty about its prior miss-rate. |
29
+ | `retro_signature` | `{horizon: enum, last_two_actual_vs_predicted: [pct, pct]}` | The accuracy retro this band was calibrated against. Horizon = `quarterly` · `monthly` · `annual`. |
30
+ | `segment_scope` | string list | Customer-segment slots the forecast covers (from spine). Empty list = blended; explicit list = per-segment. |
31
+ | `fiscal_period` | string | Reporting cadence slot from `fiscal-period` spine: `monthly` · `quarterly` · `annual` · `multi-year-plan`. |
32
+ | `construction_inputs` | object | Shape-specific inputs: top-down → `{tam, penetration_band, motion_band}`; bottom-up → `{commit_count, best_case_count, evidence_floor}`; hybrid → both. |
33
+
34
+ ## Why this was a real question
35
+
36
+ Three options were on the table:
37
+
38
+ 1. **Shared implementation in one wing.** Forecasting lives entirely
39
+ in Wing-3 (RevOps) or Wing-4 (Finance). Rejected: forecasting is
40
+ constructed from finance fundamentals and consumed from deal-level
41
+ evidence — collapsing it into one wing forces the other to
42
+ re-derive cognition.
43
+ 2. **Free-form text handoff.** O2 emits prose; H10 reads prose.
44
+ Rejected: prose drifts every quarter, the linter cannot catch
45
+ contract breaks, and the retro loop loses the comparison shape.
46
+ 3. **Typed interface, owned by O2.** Accepted: O2 owns the shape so
47
+ that drift is a producer-side fix. H10 consumes against the
48
+ contract and never re-derives forecasting cognition.
49
+
50
+ ## Citation-evidence gating
51
+
52
+ This ADR is the gating artefact. O2 cites the ADR in its frontmatter
53
+ and procedure. H10 cites the ADR in its `Related Skills` carve-out
54
+ and validates its `commit-list.md` against the `forecast-band.json`
55
+ shape. `task lint-handoffs` (Phase 3.2) walks the cross-wing graph
56
+ and rejects a contract break.
57
+
58
+ ## Parallel-development rule
59
+
60
+ O2 ships an **interface-first stub** (this ADR + a stub procedure
61
+ that emits the typed artifact from a single bottom-up case). The
62
+ stub counts as ≥ 100 % of `O2-interface`. H10 starts after the
63
+ interface lands, parallel to O2 implementation. O2 cannot break the
64
+ contract without an ADR revision and a co-ordinated H10 update.
65
+
66
+ ## Counter-evidence the agent should listen for
67
+
68
+ Three signals that this ADR is wrong and needs revisiting:
69
+
70
+ 1. **H10 re-derives forecasting cognition.** If `forecast-accuracy`
71
+ starts shipping top-down vs bottom-up reasoning, the interface
72
+ leaked and one of the two skills is mis-scoped. Re-cut the
73
+ boundary.
74
+ 2. **A third consumer reads `forecast-band.json`.** A new skill
75
+ composing the interface means the contract is load-bearing for
76
+ the broader spine and should graduate from beta to stable.
77
+ 3. **The confidence-band is consistently absent.** Forecasts that
78
+ ship without a band are using the interface as a shape but
79
+ skipping the calibration; the field should become required-on-
80
+ parse, not required-on-cognition.
81
+
82
+ ## See also
83
+
84
+ - [`wing4-handoff.md`](../guidelines/wing4-handoff.md) § Chain 4 —
85
+ finance → GTM prose around this contract.
86
+ - [`gtm-handoff.md`](../guidelines/gtm-handoff.md) § Chain 2 — H10
87
+ side prose; identical contract, opposite consumer.
88
+ - [`cross-wing-handoff.md`](cross-wing-handoff.md) § 5 — wing-scoped
89
+ contract policy this ADR follows.
@@ -0,0 +1,125 @@
1
+ ---
2
+ stability: beta
3
+ ---
4
+
5
+ # ADR — Wing-4 context-spine: Money / Strategy / Ops slot extension
6
+
7
+ > **Status:** Decided · 2026-05-13
8
+ > **Builds on:** [`context-spine.md`](context-spine.md) — tri-slot cross-wing
9
+ > contract (`product`, `team`, `repo`) locked at 3 by council Q1
10
+ > (2026-05-05 KEEP-3, unified-senior-roles iter 1) plus the wing-scoped
11
+ > track established by [`adr-gtm-context-spine.md`](adr-gtm-context-spine.md).
12
+ > **Defers to:** [`cross-wing-handoff.md`](cross-wing-handoff.md) — typed
13
+ > handoff contract; orthogonal to slot membership.
14
+
15
+ ## Decision
16
+
17
+ The context-spine adds **three Wing-4-specific slots** under
18
+ `agents/context-spine/`: `fiscal-period`, `org-stage`,
19
+ `regulatory-regime`. The schema enum in
20
+ [`scripts/schemas/skill.schema.json`](../../scripts/schemas/skill.schema.json)
21
+ extends from
22
+ `{product, team, repo, channel-stage, funnel-stage, customer-segment}`
23
+ to additionally include
24
+ `{fiscal-period, org-stage, regulatory-regime}`.
25
+
26
+ The KEEP-3 lock from council Q1 still applies to **cross-wing slots**.
27
+ The Wing-4 slots are **wing-scoped** under § 5 of the contract: they
28
+ exist for the Money / Strategy / Ops cluster (Block O–S, 18 skills)
29
+ and the Wing-4 personas (Block T, 4 personas). Engineering,
30
+ Foundation, and GTM wings do not opt into them.
31
+
32
+ | Slot | Path | Typical content |
33
+ |---|---|---|
34
+ | `fiscal-period` | `agents/context-spine/fiscal-period.md` | Reporting cadence (monthly · quarterly · annual · multi-year-plan), fiscal-year start, close-window timing. Read by O1 (`unit-economics`), O2 (`forecasting`), O3 (`runway-cognition`), O4 (`scenario-modeling`). |
35
+ | `org-stage` | `agents/context-spine/org-stage.md` | Stage label (seed · series-A · series-B · growth · public), funding posture, headcount band, governance posture. Read by P1 (`build-buy-partner`), P4 (`vision-articulation`), Q1 (`org-design`), Q2 (`comp-banding`), S2 (`hiring-loop-design`). |
36
+ | `regulatory-regime` | `agents/context-spine/regulatory-regime.md` | Active regimes (none · GDPR · HIPAA · SOC2 · PCI · CCPA), data-residency posture, breach-notification timer. Read by P5 (`contracts-cognition`), P6 (`privacy-review`), P7 (`data-handling-judgment`). |
37
+
38
+ ## Why this was a real question
39
+
40
+ Three options were on the table:
41
+
42
+ 1. **Force-fit into existing slots.** Stuff fiscal cadence into
43
+ `team`, stage into `repo`, regulatory regime into `product`.
44
+ Rejected: each slab is owned by a different wing and Wing-4 reads
45
+ would mix tenant-of-record semantics (stage is not codebase
46
+ shape, regulatory regime is not product scope).
47
+ 2. **Wing-4-only frontmatter key.** Add `wing4_spine: [...]` parallel
48
+ to `context_spine`. Rejected for the same reason as Wing-3 ADR:
49
+ two spines duplicate the read-discipline mechanism, the lint
50
+ gate, and the skill-author cognitive load.
51
+ 3. **Extend the spine, scope the slots.** Accepted: same mechanism,
52
+ same lint gate, same opt-in discipline; slot names carry the
53
+ wing scope (`fiscal-period`, `org-stage`, `regulatory-regime`
54
+ are visibly Money / Strategy / Ops shaped).
55
+
56
+ ## Citation-evidence gating — prospective
57
+
58
+ Per § 5 wing-scoped track, the citation chain is **prospective**: the
59
+ roadmap (J1 → O / P / Q / S → T) ships citing skills in the same
60
+ iteration. The ADR is the gating artefact (not the citations); each
61
+ Block O / P / Q / S skill cites ≥ 1 of the three new slots in its
62
+ frontmatter or carries a one-line ADR-opt-out comment in the skill
63
+ body.
64
+
65
+ The J2 linter (council Q7 boundary tests) enforces stage-agnosticism,
66
+ which is orthogonal — a skill can cite `org-stage` for context
67
+ without prescribing stage-specific thresholds (e.g. `runway-cognition`
68
+ reads the stage to colour heuristics, but the procedure must remain
69
+ readable across seed and public).
70
+
71
+ ## Migration plan for the existing senior catalog
72
+
73
+ - **No retrofitting required.** Existing senior skills keep their
74
+ current `context_spine` declarations. Wing-3 skills MAY add a
75
+ Wing-4 slot if their cognition genuinely reads it (e.g. a Growth
76
+ PM reading `regulatory-regime` to scope activation experiments);
77
+ they MUST NOT be retrofitted mechanically.
78
+ - **Opt-out for off-wing skills.** Engineering / Foundation senior
79
+ skills do not need to mention the Wing-4 slots in any way. The
80
+ schema accepts subsets — declaring only `[product, team]` remains
81
+ valid.
82
+ - **Slot-file authoring is consumer-side.** The package ships the
83
+ contract; consumer projects fill
84
+ `agents/context-spine/fiscal-period.md` etc. when adopting Wing-4
85
+ skills. Missing slot file is graceful per § 4 of the contract.
86
+
87
+ ## Counter-evidence the agent should listen for
88
+
89
+ Three signals that this decision is wrong and the ADR needs revisiting:
90
+
91
+ 1. **Off-wing skills start declaring Wing-4 slots.** If an
92
+ Engineering skill cites `org-stage`, the slot is misnamed or the
93
+ wing boundary is leaking. Re-scope the slot or rename it.
94
+ 2. **Wing-4 skills consistently ignore the slot they declared.** If
95
+ Block P privacy skills declare `regulatory-regime` but never
96
+ quote it in their procedure, the slot is decorative and should be
97
+ deleted.
98
+ 3. **A fourth Wing-4 slot is proposed within the same iteration.**
99
+ That is slot-sprawl on the same wing — Block J2 boundary tests
100
+ should reject the addition until a follow-up ADR documents why
101
+ three slots are insufficient.
102
+
103
+ ## Distinction from Wing-3 ADR
104
+
105
+ `adr-gtm-context-spine.md` extends the spine with **flow-state slots**
106
+ (funnel stage, channel stage, customer segment) — slabs that change
107
+ *every quarter* as the GTM motion evolves. Wing-4 extends the spine
108
+ with **constraint slots** (fiscal cadence, org stage, regulatory
109
+ regime) — slabs that change *every fundraise / audit / boundary
110
+ expansion*. Both extensions follow § 5 wing-scoped track; their
111
+ combined accept means the spine schema now declares 9 slots (3
112
+ cross-wing + 3 Wing-3 + 3 Wing-4). Any fourth slot at any wing
113
+ re-opens the slot-sprawl risk and needs a separate ADR.
114
+
115
+ ## See also
116
+
117
+ - [`context-spine.md`](context-spine.md) § 2 (slot table — extended),
118
+ § 5 (slot-add policy — wing-scoped track).
119
+ - [`adr-gtm-context-spine.md`](adr-gtm-context-spine.md) — Wing-3
120
+ reference ADR this one composes against.
121
+ - [`scripts/schemas/skill.schema.json`](../../scripts/schemas/skill.schema.json)
122
+ — `context_spine.items.enum` extended in this ADR.
123
+ - [`.agent-src.uncompressed/rules/skill-quality.md`](../../.agent-src.uncompressed/rules/skill-quality.md)
124
+ § Senior-Tier Required Structure — the four blocks every senior
125
+ skill ships independently of spine opt-in.
@@ -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