@event4u/agent-config 1.34.0 → 1.35.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 (29) hide show
  1. package/.agent-src/commands/roadmap/process-full.md +17 -15
  2. package/.agent-src/contexts/execution/roadmap-process-loop.md +11 -10
  3. package/.agent-src/personas/discovery-lead.md +99 -0
  4. package/.agent-src/personas/product-owner.md +71 -52
  5. package/.agent-src/personas/revops-maintainer.md +100 -0
  6. package/.agent-src/personas/tech-writer.md +99 -0
  7. package/.agent-src/skills/competitive-positioning/SKILL.md +152 -0
  8. package/.agent-src/skills/customer-research/SKILL.md +116 -0
  9. package/.agent-src/skills/decision-record/SKILL.md +78 -3
  10. package/.agent-src/skills/discovery-interview/SKILL.md +152 -0
  11. package/.agent-src/skills/launch-readiness/SKILL.md +156 -0
  12. package/.agent-src/skills/release-comms/SKILL.md +123 -0
  13. package/.agent-src/skills/roadmap-writing/SKILL.md +1 -1
  14. package/.agent-src/skills/stakeholder-tradeoff/SKILL.md +91 -3
  15. package/.agent-src/skills/voc-extract/SKILL.md +164 -0
  16. package/.agent-src/templates/roadmaps.md +9 -0
  17. package/.claude-plugin/marketplace.json +7 -1
  18. package/CHANGELOG.md +34 -0
  19. package/README.md +2 -2
  20. package/docs/architecture.md +2 -2
  21. package/docs/catalog.md +6 -3
  22. package/docs/contracts/context-spine.md +133 -0
  23. package/docs/contracts/file-ownership-matrix.json +110 -0
  24. package/docs/contracts/mental-models.md +336 -0
  25. package/docs/guidelines/cross-role-handoff.md +127 -0
  26. package/package.json +1 -1
  27. package/scripts/lint_context_spine_usage.py +133 -0
  28. package/scripts/lint_roadmap_complexity.py +37 -0
  29. package/scripts/schemas/skill.schema.json +9 -0
@@ -0,0 +1,133 @@
1
+ ---
2
+ stability: stable
3
+ ---
4
+
5
+
6
+ # Context-Spine Contract
7
+
8
+ > **Status:** active · **Stability:** stable · **Owner:** unified-senior-roles Block K1
9
+ > · **Lint gate:** `task lint-skills` (frontmatter shape only — slot semantics are author-side)
10
+
11
+ Senior skills repeatedly need three slabs of context that the user
12
+ already supplied earlier in the project: **what the product is**,
13
+ **who the team is**, **what the repo looks like**. The context-spine
14
+ mechanic captures those slabs once per project and lets every senior
15
+ skill cite the slot it needs — without re-asking the user, without
16
+ re-reading the manifest tree on every entry.
17
+
18
+ ## § 1 — Purpose
19
+
20
+ Three failure modes the spine prevents:
21
+
22
+ 1. **Repeat-the-context tax** — every senior skill restates "what is
23
+ this project / what does the team do / where does the code live"
24
+ to the user. The spine factors that into shared slots.
25
+ 2. **Implicit-read drift** — a skill silently reads `composer.json` /
26
+ `README.md` / `package.json` to infer context, gets stale
27
+ information, and bakes it into the artifact. Spine reads are
28
+ **opt-in via frontmatter**, never implicit.
29
+ 3. **Cross-role bikeshed** — Wave-2 personas (Block N) and Wing-3 / 4
30
+ senior skills argue over whose context-doc is canonical. The spine
31
+ names three slots and freezes the count.
32
+
33
+ ## § 2 — Slot definitions
34
+
35
+ The spine has **exactly three slots**. Council Q1 verdict (2026-05-05,
36
+ KEEP-3): slot count is locked; extensions require an ADR (§ 5).
37
+
38
+ | Slot | Path under `agents/context-spine/` | Owner | Typical content |
39
+ |---|---|---|---|
40
+ | `product` | `product.md` | Product / discovery wing | What the product **is**, who it serves, the problem it solves, the JTBD framing, the bounded scope. Read by Block-L senior PO / discovery skills. |
41
+ | `team` | `team.md` | RevOps / maintainer wing | Who **maintains** this codebase, how decisions are made, review-routing conventions, cadence (release rhythm, planning ritual). Read by review-routing, finishing-a-development-branch, persona overrides. |
42
+ | `repo` | `repo.md` | Engineering wing | What the codebase **is** at the file-tree level: stack one-liner, primary languages, top-level module map, deploy target. Read by analysis skills, blast-radius-analyzer, project-analysis-* skills. |
43
+
44
+ Slots are markdown files. Each is **≤ 200 lines**; longer means the
45
+ slot is doing two jobs and the author should split or trim. Empty /
46
+ missing slot is allowed — the citing skill MUST handle absence
47
+ gracefully and fall back to its existing read paths.
48
+
49
+ ## § 3 — Frontmatter opt-in
50
+
51
+ A senior skill declares which slots it reads via the `context_spine`
52
+ frontmatter array:
53
+
54
+ ```yaml
55
+ ---
56
+ name: customer-research
57
+ tier: senior
58
+ context_spine: [product, team]
59
+ ...
60
+ ---
61
+ ```
62
+
63
+ Rules:
64
+
65
+ - The key is **optional**. Senior skills MAY ship without it; the
66
+ default (`[]`) means the skill does not read the spine.
67
+ - Values are restricted to the literal slot names: `product`, `team`,
68
+ `repo`. Unknown values fail `task lint-skills` with
69
+ `unknown_context_spine_slot`.
70
+ - Reads MUST be opt-in and explicit. A skill body that says *"reads
71
+ `agents/context-spine/product.md` if present"* without declaring
72
+ the slot in frontmatter is **incorrect** — it bypasses the lint
73
+ gate and the user's expectation that the spine read is visible.
74
+ - The frontmatter value is the **contract**. The skill body cites
75
+ `agents/context-spine/<slot>.md` once near the top and lets the
76
+ reader follow the link if they care.
77
+
78
+ ## § 4 — No implicit reads
79
+
80
+ The spine is a **discipline**, not a runtime. There is no Python
81
+ loader that injects spine content into a skill's prompt. The agent
82
+ loading a senior skill reads the skill body, sees the
83
+ `context_spine: [...]` declaration, and — if the slot files exist
84
+ — quotes them inline before executing the skill's procedure. The
85
+ skill body MUST NOT state a behavior that depends on the spine being
86
+ read; absence is recoverable, presence is a bonus.
87
+
88
+ This keeps the spine cheap (no orchestration plumbing), explicit
89
+ (every read is in frontmatter), and reversible (deleting the slot
90
+ file does not break the skill).
91
+
92
+ ## § 5 — Slot-add policy
93
+
94
+ Adding a fourth slot is **structurally allowed but procedurally
95
+ expensive**. Two preconditions:
96
+
97
+ 1. **Citation evidence.** ≥ 2 shipped senior skills declare the new
98
+ slot in their frontmatter and cite it in the body, with PRs
99
+ merged to `main`. Drafts and roadmap items do not count.
100
+ 2. **ADR.** A new ADR under `docs/contracts/` named
101
+ `adr-context-spine-slot-<name>.md` documents the cognition gap
102
+ the existing three slots cannot fill, the slot's owner wing, and
103
+ the migration plan for the existing senior catalog (do they
104
+ declare the new slot, do they ignore it, do they get retrofitted).
105
+
106
+ The ADR ships with the schema bump (`scripts/schemas/skill.schema.json`
107
+ extends the `context_spine` enum) and a CHANGELOG entry under
108
+ `### Breaking` if the new enum value tightens an existing skill's
109
+ declaration.
110
+
111
+ This policy mitigates the slot-sprawl failure mode: "tri-slot locked
112
+ at 3 + ADR-gated growth" is the brake. The ADR is the single growth
113
+ lever; no consumer-side override exists.
114
+
115
+ ## § 6 — Author checklist
116
+
117
+ Before shipping a senior skill that opts into the spine:
118
+
119
+ - [ ] Frontmatter declares `context_spine:` with values from
120
+ `{product, team, repo}`.
121
+ - [ ] Skill body cites `agents/context-spine/<slot>.md` near the top
122
+ (one link per declared slot).
123
+ - [ ] Procedure handles missing-slot gracefully — falls back to the
124
+ skill's existing read path, never errors out.
125
+ - [ ] `task lint-skills` passes with no `unknown_context_spine_slot`.
126
+
127
+ ## See also
128
+
129
+ - `.agent-src.uncompressed/rules/skill-quality.md` § Senior-Tier
130
+ Required Structure — the four blocks every `tier: senior` skill
131
+ ships independently of spine opt-in.
132
+ - `docs/contracts/cross-wing-handoff.md` — typed handoffs between
133
+ senior skills; orthogonal to the spine (composition vs context).
@@ -1452,6 +1452,12 @@
1452
1452
  "load_context": [],
1453
1453
  "load_context_eager": []
1454
1454
  },
1455
+ ".agent-src.uncompressed/skills/customer-research/SKILL.md": {
1456
+ "kind": "skill",
1457
+ "rule_type": null,
1458
+ "load_context": [],
1459
+ "load_context_eager": []
1460
+ },
1455
1461
  ".agent-src.uncompressed/skills/dashboard-design/SKILL.md": {
1456
1462
  "kind": "skill",
1457
1463
  "rule_type": null,
@@ -2022,6 +2028,12 @@
2022
2028
  "load_context": [],
2023
2029
  "load_context_eager": []
2024
2030
  },
2031
+ ".agent-src.uncompressed/skills/release-comms/SKILL.md": {
2032
+ "kind": "skill",
2033
+ "rule_type": null,
2034
+ "load_context": [],
2035
+ "load_context_eager": []
2036
+ },
2025
2037
  ".agent-src.uncompressed/skills/repomix-packer/SKILL.md": {
2026
2038
  "kind": "skill",
2027
2039
  "rule_type": null,
@@ -4822,6 +4834,20 @@
4822
4834
  "via": "self",
4823
4835
  "depth": 0
4824
4836
  },
4837
+ {
4838
+ "source": ".agent-src.uncompressed/personas/product-owner.md",
4839
+ "target": ".agent-src.uncompressed/skills/customer-research/SKILL.md",
4840
+ "type": "READ_ONLY",
4841
+ "via": "body_link",
4842
+ "depth": 1
4843
+ },
4844
+ {
4845
+ "source": ".agent-src.uncompressed/personas/product-owner.md",
4846
+ "target": ".agent-src.uncompressed/skills/release-comms/SKILL.md",
4847
+ "type": "READ_ONLY",
4848
+ "via": "body_link",
4849
+ "depth": 1
4850
+ },
4825
4851
  {
4826
4852
  "source": ".agent-src.uncompressed/personas/qa.md",
4827
4853
  "target": ".agent-src.uncompressed/personas/qa.md",
@@ -6488,6 +6514,48 @@
6488
6514
  "via": "self",
6489
6515
  "depth": 0
6490
6516
  },
6517
+ {
6518
+ "source": ".agent-src.uncompressed/skills/customer-research/SKILL.md",
6519
+ "target": ".agent-src.uncompressed/personas/product-owner.md",
6520
+ "type": "READ_ONLY",
6521
+ "via": "body_link",
6522
+ "depth": 1
6523
+ },
6524
+ {
6525
+ "source": ".agent-src.uncompressed/skills/customer-research/SKILL.md",
6526
+ "target": ".agent-src.uncompressed/skills/customer-research/SKILL.md",
6527
+ "type": "WRITE",
6528
+ "via": "self",
6529
+ "depth": 0
6530
+ },
6531
+ {
6532
+ "source": ".agent-src.uncompressed/skills/customer-research/SKILL.md",
6533
+ "target": ".agent-src.uncompressed/skills/funnel-analysis/SKILL.md",
6534
+ "type": "READ_ONLY",
6535
+ "via": "body_link",
6536
+ "depth": 1
6537
+ },
6538
+ {
6539
+ "source": ".agent-src.uncompressed/skills/customer-research/SKILL.md",
6540
+ "target": ".agent-src.uncompressed/skills/po-discovery/SKILL.md",
6541
+ "type": "READ_ONLY",
6542
+ "via": "body_link",
6543
+ "depth": 1
6544
+ },
6545
+ {
6546
+ "source": ".agent-src.uncompressed/skills/customer-research/SKILL.md",
6547
+ "target": ".agent-src.uncompressed/skills/refine-ticket/SKILL.md",
6548
+ "type": "READ_ONLY",
6549
+ "via": "body_link",
6550
+ "depth": 1
6551
+ },
6552
+ {
6553
+ "source": ".agent-src.uncompressed/skills/customer-research/SKILL.md",
6554
+ "target": ".agent-src.uncompressed/skills/rice-prioritization/SKILL.md",
6555
+ "type": "READ_ONLY",
6556
+ "via": "body_link",
6557
+ "depth": 1
6558
+ },
6491
6559
  {
6492
6560
  "source": ".agent-src.uncompressed/skills/dashboard-design/SKILL.md",
6493
6561
  "target": ".agent-src.uncompressed/skills/dashboard-design/SKILL.md",
@@ -8056,6 +8124,48 @@
8056
8124
  "via": "body_link",
8057
8125
  "depth": 1
8058
8126
  },
8127
+ {
8128
+ "source": ".agent-src.uncompressed/skills/release-comms/SKILL.md",
8129
+ "target": ".agent-src.uncompressed/personas/product-owner.md",
8130
+ "type": "READ_ONLY",
8131
+ "via": "body_link",
8132
+ "depth": 1
8133
+ },
8134
+ {
8135
+ "source": ".agent-src.uncompressed/skills/release-comms/SKILL.md",
8136
+ "target": ".agent-src.uncompressed/skills/customer-research/SKILL.md",
8137
+ "type": "READ_ONLY",
8138
+ "via": "body_link",
8139
+ "depth": 1
8140
+ },
8141
+ {
8142
+ "source": ".agent-src.uncompressed/skills/release-comms/SKILL.md",
8143
+ "target": ".agent-src.uncompressed/skills/funnel-analysis/SKILL.md",
8144
+ "type": "READ_ONLY",
8145
+ "via": "body_link",
8146
+ "depth": 1
8147
+ },
8148
+ {
8149
+ "source": ".agent-src.uncompressed/skills/release-comms/SKILL.md",
8150
+ "target": ".agent-src.uncompressed/skills/incident-commander/SKILL.md",
8151
+ "type": "READ_ONLY",
8152
+ "via": "body_link",
8153
+ "depth": 1
8154
+ },
8155
+ {
8156
+ "source": ".agent-src.uncompressed/skills/release-comms/SKILL.md",
8157
+ "target": ".agent-src.uncompressed/skills/release-comms/SKILL.md",
8158
+ "type": "WRITE",
8159
+ "via": "self",
8160
+ "depth": 0
8161
+ },
8162
+ {
8163
+ "source": ".agent-src.uncompressed/skills/release-comms/SKILL.md",
8164
+ "target": ".agent-src.uncompressed/skills/rice-prioritization/SKILL.md",
8165
+ "type": "READ_ONLY",
8166
+ "via": "body_link",
8167
+ "depth": 1
8168
+ },
8059
8169
  {
8060
8170
  "source": ".agent-src.uncompressed/skills/repomix-packer/SKILL.md",
8061
8171
  "target": ".agent-src.uncompressed/commands/analyze-reference-repo.md",
@@ -0,0 +1,336 @@
1
+ ---
2
+ stability: stable
3
+ ---
4
+
5
+
6
+ # Mental Models — Top-30 Cross-Role Reference
7
+
8
+ > **Status:** active · **Stability:** stable · **Owner:** unified-senior-roles Block K4
9
+ > · **Hard cap:** 30 models · **R23 mitigation:** additions require removing one (zero-sum)
10
+
11
+ A ranked, citation-only reference. Senior skills cite a model by
12
+ its number when the cognition step it triggers needs framing prose
13
+ the skill would otherwise re-invent. The doc is not auto-loaded
14
+ and never appears in a prompt unless a skill names a row.
15
+
16
+ ## How this list was built
17
+
18
+ Council iter-1 (Anthropic `claude-sonnet-4-5` + OpenAI `gpt-4o`,
19
+ 2026-05-05) Q2 verdict: **Ranked Top-30**, cross-role bias.
20
+ Channel-specific (CAC/LTV-as-model, ad-auction, SEO keyword),
21
+ C-suite strategy (Blue Ocean, Porter's Five Forces), and sales
22
+ pipeline (BANT, MEDDIC) **explicitly cut** — they are domain
23
+ heuristics, not cross-role cognition tools. Additions require
24
+ removing one.
25
+
26
+ Each entry: title · domain · ≤ 8-line summary · one citation example
27
+ from a shipped skill (path is the proof of provenance, not a load
28
+ instruction).
29
+
30
+ ## The 30 models
31
+
32
+ ### 1. First-principles thinking
33
+
34
+ Strip the problem to assumptions you can defend from physics, contract,
35
+ or hard data. Re-derive the answer from those, not by analogy to past
36
+ decisions. The expensive part is identifying which "principle" is
37
+ actually load-bearing vs. inherited belief; the cheap part is the
38
+ re-derivation. Use when an inherited approach feels stale and you
39
+ suspect the real constraint moved.
40
+ *Cited by:* `.agent-src.uncompressed/skills/improve-before-implement/`
41
+ (challenges weak requirements before code is written).
42
+
43
+ ### 2. Jobs-to-be-Done (JTBD)
44
+
45
+ A user "hires" a product to make progress in a specific situation;
46
+ the job is the situation × motivation × expected outcome, not the
47
+ demographic. The unit of analysis is the **switch event** — what
48
+ caused them to fire the previous solution. JTBD reframes feature
49
+ requests as evidence of an unmet job, not feature gaps.
50
+ *Cited by:* `.agent-src.uncompressed/skills/po-discovery/`
51
+ (reframes fuzzy product asks via job-shape).
52
+
53
+ ### 3. Pareto principle (80/20)
54
+
55
+ Roughly 80% of effects come from 20% of causes. The lift is in
56
+ **identifying** the 20% — which user segment, which test failure,
57
+ which N+1 query — not in re-stating the ratio. Anti-pattern: using
58
+ 80/20 as permission to ignore the long tail without measuring it.
59
+ *Cited by:* `.agent-src.uncompressed/skills/performance-analysis/`
60
+ (N+1 detection prioritizes the 20% of queries causing 80% of latency).
61
+
62
+ ### 4. Second-order thinking
63
+
64
+ Ask "and then what?" until the chain breaks down. First-order picks
65
+ what looks best now; second-order weighs the consequences of the
66
+ consequences. Most "obvious" decisions die at second-order — the
67
+ optimization that ships now creates the maintenance debt that kills
68
+ velocity in 6 months.
69
+ *Cited by:* `.agent-src.uncompressed/skills/adversarial-review/`
70
+ (stress-tests a plan by walking past the immediate verdict).
71
+
72
+ ### 5. Opportunity cost
73
+
74
+ The real cost of any choice is the **next-best alternative you did
75
+ not pick**, not the dollar / time spent. A 2-week feature is not
76
+ "2 weeks expensive" — it is the highest-value 2-week feature you
77
+ chose not to ship instead. Naming the alternative makes the cost
78
+ legible; pretending there isn't one is the failure mode.
79
+ *Cited by:* `.agent-src.uncompressed/skills/rice-prioritization/`
80
+ (scores compete for capacity; non-shipped items are the cost basis).
81
+
82
+ ### 6. Theory of constraints
83
+
84
+ System throughput is bounded by exactly one constraint at a time.
85
+ Improving any non-constraint resource is local optimization with
86
+ zero system effect — usually negative, since it loads the actual
87
+ constraint harder. The discipline: identify, exploit, subordinate,
88
+ elevate, then find the next constraint.
89
+ *Cited by:* `.agent-src.uncompressed/skills/funnel-analysis/`
90
+ (identifies the single funnel stage that bounds conversion throughput).
91
+
92
+ ### 7. MVP (Minimum Viable Product)
93
+
94
+ The smallest thing that produces real evidence about whether the
95
+ hypothesis holds. MVP is a **measurement instrument**, not a
96
+ junior-grade product. The trap is shipping an MVP that cannot
97
+ distinguish "user behavior validates the hypothesis" from "user
98
+ behavior was driven by something else"; that is just a small
99
+ product.
100
+ *Cited by:* `.agent-src.uncompressed/skills/po-discovery/`
101
+ (scopes a discovery slice that produces a learning, not a feature).
102
+
103
+ ### 8. Build-Measure-Learn
104
+
105
+ A loop: build the smallest test, measure the actual signal, decide
106
+ to persevere or pivot. The skill is in **shortening the loop** —
107
+ weeks beat months because months let teams rationalize a failed
108
+ hypothesis. The loop is the artefact; any individual cycle is just
109
+ one iteration.
110
+ *Cited by:* `.agent-src.uncompressed/skills/test-driven-development/`
111
+ (the build-measure-learn loop applied to one function at a time).
112
+
113
+ ### 9. Hypothesis-driven development
114
+
115
+ State the hypothesis as a falsifiable sentence with a metric and a
116
+ threshold **before** writing the code. "If we do X, metric Y will
117
+ move by Z." Without the threshold, the team will declare any
118
+ movement victory. With it, the team learns from the misses.
119
+ *Cited by:* `.agent-src.uncompressed/skills/project-analysis-hypothesis-driven/`
120
+ (competing hypotheses + validation loops + evidence-based conclusions).
121
+
122
+ ### 10. Reversible vs. irreversible decisions
123
+
124
+ One-way doors deserve a high bar; two-way doors deserve a low bar
125
+ plus speed. The bias under uncertainty: shipping a reversible
126
+ decision early is almost always cheaper than the meeting required
127
+ to decide. The skill is recognizing irreversibility — usually data
128
+ shape, public API surface, or hiring.
129
+ *Cited by:* `.agent-src.uncompressed/skills/decision-record/`
130
+ (records the reversal-criteria so the irreversibility verdict is auditable).
131
+
132
+ ### 11. DX as first-class concern
133
+
134
+ Developer experience is a leading indicator of throughput; it is not
135
+ a polish task. Slow tests, fragile local setup, and surprising tool
136
+ output compound — every developer pays the tax every day. Treat DX
137
+ issues like user-facing bugs, with severity and SLA. The compounding
138
+ math makes "fix it later" almost always wrong.
139
+ *Cited by:* `.agent-src.uncompressed/skills/test-performance/`
140
+ (test-suite latency is a developer-facing metric, optimized as such).
141
+
142
+ ### 12. Conway's Law
143
+
144
+ The systems an organization builds mirror its communication structure.
145
+ Re-orgs propagate to architecture; architecture changes that fight the
146
+ org chart fail. The lever is bidirectional: pick the architecture you
147
+ want, then engineer the communication paths that produce it.
148
+ *Cited by:* `.agent-src.uncompressed/skills/api-design/`
149
+ (bounded-context choices follow team boundaries, not the other way around).
150
+
151
+ ### 13. Occam's Razor
152
+
153
+ Among hypotheses that fit the evidence equally well, prefer the one
154
+ that introduces the fewest new entities. In debugging, the boring
155
+ explanation (typo, off-by-one, stale cache) is usually correct. The
156
+ trap is **assuming** instead of **falsifying** — Occam suggests
157
+ order of investigation, not a verdict.
158
+ *Cited by:* `.agent-src.uncompressed/skills/systematic-debugging/`
159
+ (reproduce → isolate → hypothesize, simplest hypothesis first).
160
+
161
+ ### 14. Meadows leverage points
162
+
163
+ Donella Meadows' ranking: the highest-leverage interventions in a
164
+ system are paradigm shifts, then goals, then rules — far above
165
+ parameter tweaks. Most "improvement" effort fights parameters
166
+ (numbers, delays) at the bottom of the ranking. Climb the ranking
167
+ before optimizing.
168
+ *Cited by:* `.agent-src.uncompressed/skills/architecture-review-lens/`
169
+ (boundary / dependency-direction issues are higher-leverage than tweaks).
170
+
171
+ ### 15. Signal vs. noise
172
+
173
+ Every metric is a sum of underlying signal and measurement noise.
174
+ A change of size N is meaningful only if N exceeds the noise floor
175
+ for that metric × that horizon. The discipline: estimate the noise
176
+ band first, then evaluate the change. Without the noise band, every
177
+ movement looks like a trend.
178
+ *Cited by:* `.agent-src.uncompressed/skills/funnel-analysis/`
179
+ (stage-to-stage drop is read against the typical week-on-week noise).
180
+
181
+ ### 16. Leading vs. lagging indicators
182
+
183
+ Lagging indicators (revenue, churn, retention) are accurate and
184
+ late. Leading indicators (activation events, repeat-use, support
185
+ volume) are noisy and early. Operating on lagging alone means the
186
+ team learns about problems after they cost money. Pair them: lagging
187
+ is the score, leading is the steering wheel.
188
+ *Cited by:* `.agent-src.uncompressed/skills/dashboard-design/`
189
+ (RED / USE / Golden Signals split leading from lagging explicitly).
190
+
191
+ ### 17. Churn as health metric
192
+
193
+ Retention curves expose what acquisition cannot: whether the product
194
+ delivers ongoing value. A flat retention tail means the product
195
+ works for the survivors; a sliding tail means the underlying job is
196
+ not getting done. Churn is upstream of CAC payback — fix it first,
197
+ then scale.
198
+ *Cited by:* `.agent-src.uncompressed/skills/funnel-analysis/`
199
+ (retention bend distinguishes activation problems from product-fit).
200
+
201
+ ### 18. Pull vs. push systems
202
+
203
+ Pull systems start work when downstream capacity opens; push systems
204
+ start work when upstream capacity is free. Push optimizes individual
205
+ utilization, pull optimizes flow. Most software teams claim pull and
206
+ operate push (queues filling up, sprints overcommitted, WIP
207
+ unmanaged). The fix is WIP limits, not motivation.
208
+ *Cited by:* `.agent-src.uncompressed/skills/laravel-horizon/`
209
+ (queue-balance strategies are pull-vs-push policy in concrete form).
210
+
211
+ ### 19. Shift-left
212
+
213
+ Move quality / security / accessibility checks earlier in the
214
+ lifecycle — to the developer's machine, the PR, the design — where
215
+ the cost of fixing is order-of-magnitude lower. The trade-off:
216
+ shift-left adds friction at the front; the math holds when defect
217
+ escape rate drops faster than the friction cost.
218
+ *Cited by:* `.agent-src.uncompressed/skills/threat-modeling/`
219
+ (threats enumerated before implementation, not after pen-test).
220
+
221
+ ### 20. Latency vs. throughput
222
+
223
+ Optimizing one usually hurts the other; the trade-off is structural,
224
+ not implementation-detail. Batch processing trades latency for
225
+ throughput; real-time pipelines trade throughput for latency. The
226
+ mistake is optimizing without naming which one matters for the user
227
+ job at hand.
228
+ *Cited by:* `.agent-src.uncompressed/skills/database/`
229
+ (index strategy and query batching surface the trade-off explicitly).
230
+
231
+ ### 21. Trust boundaries
232
+
233
+ Every system has explicit lines across which inputs cannot be
234
+ trusted: client → server, tenant A → tenant B, free tier → paid
235
+ tier, public endpoint → internal service. Threats enter at boundary
236
+ crossings; defense lives at the crossing, not deeper. Drawing the
237
+ boundary correctly is half the security work.
238
+ *Cited by:* `.agent-src.uncompressed/skills/threat-modeling/`
239
+ (produces trust boundaries + abuse cases mapped to files).
240
+
241
+ ### 22. Defense in depth
242
+
243
+ No single control is sufficient; layer entry validation, business
244
+ rules, environment hardening, and instrumentation so a bypass at
245
+ one layer is caught at the next. The trap is mistaking redundancy
246
+ for security theatre — each layer must have an independent failure
247
+ mode, not a copy of the previous one.
248
+ *Cited by:* `.agent-src.uncompressed/skills/defense-in-depth/`
249
+ (turns local fix into structural one across four guard layers).
250
+
251
+ ### 23. Blast radius
252
+
253
+ Before changing shared code, enumerate every call site, event
254
+ consumer, queue worker, API client, migration, and test that the
255
+ change touches. The radius is the work; the diff is the artefact.
256
+ Underestimating radius is the failure mode that breaks production
257
+ when the change "looked small".
258
+ *Cited by:* `.agent-src.uncompressed/skills/blast-radius-analyzer/`
259
+ (file:line citation per dependency, BEFORE the edit).
260
+
261
+ ### 24. Iron triangle (scope / time / quality)
262
+
263
+ Scope, time, and quality are coupled — fix two, the third moves.
264
+ Pretending to fix all three is how teams ship at low quality and
265
+ call it on-time. The honest move is naming which two are fixed and
266
+ which one absorbs the variance, BEFORE the work starts.
267
+ *Cited by:* `.agent-src.uncompressed/skills/refine-ticket/`
268
+ (AC sharpening forces explicit scope decisions before estimation).
269
+
270
+ ### 25. Definition of Done
271
+
272
+ A shared, auditable description of what "done" means for a unit of
273
+ work — tests, docs, deployment, comms. Without one, every team
274
+ member ships their personal threshold and disputes downstream. The
275
+ discipline is making it visible, agreed, and consistently applied —
276
+ not the specific items on it.
277
+ *Cited by:* `.agent-src.uncompressed/skills/verify-completion-evidence/`
278
+ (fresh evidence is required before any "done" claim).
279
+
280
+ ### 26. Postmortem-driven learning
281
+
282
+ Incidents are signal-rich; the team that captures the signal beats
283
+ the team that hides the incident. Blameless postmortems separate
284
+ contribution from blame, surface systemic causes, and produce
285
+ mitigations that reduce future incident rate — not just the count
286
+ of one-off fixes.
287
+ *Cited by:* `.agent-src.uncompressed/skills/incident-commander/`
288
+ (severity framing + comms cadence + post-mortem skeleton).
289
+
290
+ ### 27. Tech debt as interest
291
+
292
+ Tech debt has a principal (the shortcut taken) and an interest
293
+ payment (the ongoing tax on velocity). Carrying the debt is the
294
+ right call when the principal is repayable and the interest is
295
+ small; the failure is treating ongoing high-interest debt as a
296
+ fixed cost. Track it like a balance sheet.
297
+ *Cited by:* `.agent-src.uncompressed/skills/tech-debt-tracker/`
298
+ (interest-vs-principal framing, prioritisation by carrying cost).
299
+
300
+ ### 28. Mise en place
301
+
302
+ Prepare every input — data, fixtures, dependencies, decisions —
303
+ before the cooking step starts. Switching between prep and cook is
304
+ where errors enter. In software, the analogue is staged commits,
305
+ prepared test fixtures, and decisions locked before implementation.
306
+ The discipline is the savings, not the metaphor.
307
+ *Cited by:* `.agent-src.uncompressed/skills/existing-ui-audit/`
308
+ (inventory before any non-trivial UI edit, hard gate).
309
+
310
+ ### 29. Premortem
311
+
312
+ Before kickoff, assume the project failed and ask why — names the
313
+ risks the team already knows but has not voiced. The trick is the
314
+ past-tense framing; "what could go wrong" surfaces less than "it
315
+ failed, what happened". Cheap; high signal-to-noise; the residual
316
+ output is a risk register the team actually defends.
317
+ *Cited by:* `.agent-src.uncompressed/skills/risk-officer/`
318
+ (blast-radius framing, mitigations, residual-risk verdict pre-commit).
319
+
320
+ ### 30. Inversion
321
+
322
+ Instead of asking "how do I succeed at X?", ask "how would I
323
+ guarantee failure at X?" — then avoid that. Inversion exposes the
324
+ non-obvious failure modes that direct planning misses, especially
325
+ in security, ops, and people problems where the failure surface is
326
+ larger than the success surface.
327
+ *Cited by:* `.agent-src.uncompressed/skills/adversarial-review/`
328
+ (devil's-advocate stress-test poking holes in a plan).
329
+
330
+ ## Adding or removing a model
331
+
332
+ Hard cap is 30. Adding a 31st requires removing one and naming the
333
+ swap in the PR description — the council verdict (R23) is that the
334
+ list earns its weight only if every entry is load-bearing. Removal
335
+ criteria: ≤ 1 citation across the catalog after one minor release,
336
+ or superseded by a more general entry.