@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,152 @@
1
+ ---
2
+ name: competitive-positioning
3
+ description: "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'."
4
+ status: active
5
+ tier: senior
6
+ source: package
7
+ domain: product
8
+ context_spine: [product]
9
+ ---
10
+
11
+ # competitive-positioning
12
+
13
+ ## When to use
14
+
15
+ - A peer / reference / competitor repository was named and the team needs a structured comparison, not a vibes summary.
16
+ - A pattern from another package is being considered for adoption and the trade-off needs to land in writing.
17
+ - Positioning prose for a README / launch / pricing page needs an ours-vs-theirs decisions table to anchor on.
18
+
19
+ Do NOT use for general repo audits (route to `analyze-reference-repo`),
20
+ upstream-contribution decisions (route to `upstream-contribute`), or
21
+ DCF-style valuation work (route to `dcf-modeling`).
22
+
23
+ ## Cognition cluster
24
+
25
+ - **Mental model 1 — First principles.** Strip the comparison to the
26
+ outcome each package promises its user, not the feature lists. Two
27
+ packages with overlapping features can promise different outcomes
28
+ and therefore are not direct competitors. See
29
+ [`docs/contracts/mental-models.md`](../../../docs/contracts/mental-models.md) § 1.
30
+ - **Mental model 24 — Optionality.** A pattern that costs little to
31
+ adopt and preserves exit value beats a "better" pattern that locks
32
+ the package in. Score adoption cost AND exit cost on every row. See
33
+ `mental-models.md` § 24.
34
+ - **Mental model 12 — Inversion.** For each axis, ask *"what would
35
+ we do if we wanted to lose on this axis?"* The answer surfaces the
36
+ invariants the comparison must preserve. See `mental-models.md` § 12.
37
+ - **Product context-spine slot.** Read the **product** slot for
38
+ segment / focal job / non-goals before picking axes; the comparison
39
+ is only legitimate inside our own scope. See
40
+ [`context-spine`](../../../docs/contracts/context-spine.md).
41
+
42
+ ## Procedure
43
+
44
+ ### 1. Frame the comparison
45
+
46
+ Name the peer in one sentence: *"Package P promises outcome O for
47
+ segment S."* If you cannot, the peer is not a peer; abort.
48
+
49
+ ### 2. Pick the axes
50
+
51
+ 3–7 axes, derived from the **product** spine slot, never from the
52
+ peer's marketing site. Each axis must:
53
+
54
+ - Be observable from the artefacts (repo, docs, package output).
55
+ - Map to a real user outcome, not a feature checklist.
56
+ - Be able to **separate** the two packages on at least the threshold
57
+ of "matters to a switch decision".
58
+
59
+ ### 3. Inspect both packages on each axis
60
+
61
+ For every axis × package cell, capture:
62
+
63
+ - **Evidence** — file path, doc URL, behaviour quote.
64
+ - **Verdict** — clearly stronger / clearly weaker / parity / not
65
+ applicable.
66
+ - **Cost-to-close** — if weaker, what would adopting their approach
67
+ cost in our scope? Mental-model-24 optionality: include exit cost.
68
+
69
+ Cells without evidence are **not** parity; they are *unknown*.
70
+ Surface them; do not silently call them ties.
71
+
72
+ ### 4. Run the inversion check and validate evidence
73
+
74
+ For each axis where we win, ask: *"what change would make us lose
75
+ this axis?"* If the answer is *"none, ever"*, the axis is invariant —
76
+ flag it as a strategic moat, not a feature.
77
+
78
+ Validate every cell against the evidence rule before continuing:
79
+ verify each `clearly stronger` / `clearly weaker` row cites a file
80
+ path, doc URL, or behaviour quote; check that no cell sits at
81
+ parity without evidence; confirm at least one row separates the
82
+ packages on a switch-decision-relevant outcome. Cells that fail
83
+ this validation become *unknowns*, not parity.
84
+
85
+ ### 5. Produce the verdict table
86
+
87
+ One row per axis. Columns: **axis · ours · theirs · verdict ·
88
+ adopt? · rationale**. The `adopt?` column is the only opinion in
89
+ the table.
90
+
91
+ ### 6. Hand back
92
+
93
+ Hand the table to the requester; route adoption decisions to
94
+ [`decision-record`](../decision-record/SKILL.md), upstream proposals
95
+ to [`upstream-contribute`](../upstream-contribute/SKILL.md).
96
+
97
+ ## Related Skills
98
+
99
+ **WHEN to use this**
100
+
101
+ - Two packages are named and a verdict table is the unit of work.
102
+ - A pattern from another package is on the table for adoption.
103
+ - Positioning copy needs an anchor table.
104
+
105
+ **WHEN NOT to use this**
106
+
107
+ - The peer repo needs a generic walk-through first — route to
108
+ [`analyze-reference-repo`](../analyze-reference-repo/SKILL.md);
109
+ this skill consumes its output, never duplicates it.
110
+ - The decision is to contribute back upstream — route to
111
+ [`upstream-contribute`](../upstream-contribute/SKILL.md).
112
+ - The output is monetary value (DCF, valuation) — route to
113
+ [`dcf-modeling`](../dcf-modeling/SKILL.md).
114
+ - The trade-off is across stakeholders inside our own team — route
115
+ to [`stakeholder-tradeoff`](../stakeholder-tradeoff/SKILL.md).
116
+
117
+ ## When the agent should load this
118
+
119
+ - "Wie schlagen wir uns gegen X?"
120
+ - "Sollten wir das Pattern aus Y übernehmen?"
121
+ - "Bau mir die ours-vs-theirs Tabelle für die README."
122
+ - "Wo verlieren wir gegen Package P?"
123
+ - "Welche Achsen sind invariant für uns?"
124
+
125
+ ## Output
126
+
127
+ A single Markdown block with:
128
+
129
+ 1. **Frame** — one-sentence promise of each package, segment named.
130
+ 2. **Axes** — bullet list of 3–7 axes with one-sentence rationale per axis.
131
+ 3. **Verdict table** — `axis · ours · theirs · verdict · adopt? · rationale`.
132
+ 4. **Invariants** — axes flagged as strategic moats with the inversion answer.
133
+ 5. **Adoption queue** — rows where `adopt? = yes`, ordered by cost-to-close.
134
+ 6. **Unknowns** — cells that lacked evidence; explicit, not collapsed to parity.
135
+
136
+ ## Gotcha
137
+
138
+ - A verdict table without **unknowns** is suspect; nobody has
139
+ symmetric evidence on a peer at first pass.
140
+ - `adopt? = yes` without cost-to-close + exit cost is wishful; the
141
+ optionality rule is non-negotiable.
142
+ - Axes derived from the peer's site are reflective, not strategic;
143
+ re-derive from our own product spine slot.
144
+
145
+ ## Do NOT
146
+
147
+ - Do NOT score before evidence — evidence first, verdict after.
148
+ - Do NOT treat unknowns as parity to "complete" the table.
149
+ - Do NOT lock adoption decisions in this skill — hand off to
150
+ `decision-record`.
151
+ - Do NOT include monetary or roadmap framing — this is positioning,
152
+ not planning.
@@ -0,0 +1,116 @@
1
+ ---
2
+ name: customer-research
3
+ description: "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'."
4
+ status: active
5
+ tier: senior
6
+ source: package
7
+ domain: product
8
+ context_spine: [product]
9
+ ---
10
+
11
+ # customer-research
12
+
13
+ ## When to use
14
+
15
+ - A backlog item is fuzzy because no one has talked to a current user about the underlying job in the last quarter.
16
+ - A churn or refund spike needs a switch-event explanation, not a feature gap list.
17
+ - A product owner is about to write AC for a feature that has not been validated against a real user job.
18
+
19
+ Do NOT use for quantitative funnel diagnosis (see `funnel-analysis`),
20
+ RICE-style ranking (see `rice-prioritization`), or surveying at scale —
21
+ this skill is about depth-5-to-10 interviews, not statistics.
22
+
23
+ ## Cognition cluster
24
+
25
+ - **Mental model 2 — Jobs-to-be-Done.** Frames every question against
26
+ the **switch event**: what caused the user to fire the previous
27
+ solution? See [`docs/contracts/mental-models.md`](../../../docs/contracts/mental-models.md) § 2.
28
+ - **Mental model 3 — Pareto principle.** A research week that
29
+ produces 12 distinct insights is usually re-discovering the same
30
+ three. See `mental-models.md` § 3.
31
+
32
+ ## Procedure
33
+
34
+ ### Step 0: Frame the job
35
+
36
+ 1. Write one sentence: *"Users hire \<thing\> to make progress in \<situation\>, when motivated by \<pressure\>, expecting \<outcome\>."* If you cannot finish the sentence, the discovery slice is not yet shaped — stop and route to `po-discovery`.
37
+ 2. Read the **product** slot of the [context-spine](../../../docs/contracts/context-spine.md) (if the consumer project has filled it) for bounded scope, and the **team** slot for the senior PO / researcher handoff target. Skip if absent — note in the brief.
38
+ 3. Identify **one** competing solution the user might fire. Multiple competitors per session blurs the switch event.
39
+
40
+ ### Step 1: Recruit the right 5–8
41
+
42
+ 1. Recruit **switchers** (joined in last 60 days) and **leavers**
43
+ (cancelled in last 60 days). Long-tenure power-users go in a
44
+ separate bucket — they explain habits, not jobs.
45
+ 2. 5 minimum, 8 maximum. Saturation hits around 6 in a tightly
46
+ scoped job — the Pareto cut. Beyond 8 is research theatre.
47
+ 3. Avoid friends, employees, beta-program over-talkers — selection bias is the failure mode that survives the AC.
48
+
49
+ ### Step 2: Run the interview
50
+
51
+ 1. Open with the **switch event**: *"Walk me through the day you decided to start using \<product\>."* Time, place, trigger, alternative considered.
52
+ 2. Past behaviour, not hypothetical. Replace *"would you use"* with *"the last time you needed X, what did you do?"*.
53
+ 3. Capture **quotes**, not summaries. Verbatim quotes survive the AC; paraphrases get re-interpreted into pre-existing beliefs.
54
+ 4. Listen for the **anxiety / habit** pair — what they feared in switching, what habit died.
55
+
56
+ ### Step 3: Code the evidence
57
+
58
+ 1. One quote per insight. Tag each with: switch-event, anxiety, habit, expected-outcome, unexpected-outcome.
59
+ 2. An insight without a quote is a hypothesis, not a finding — mark it.
60
+ 3. Frequency-rank by how many distinct interviewees touched the insight (≥ 3 is signal; 1 is anecdote).
61
+
62
+ ### Step 4: Hand back
63
+
64
+ 1. Produce the three artifacts (see `## Output`).
65
+ 2. Hand the brief to the senior PO. Do **not** translate findings into AC inside this skill — that is `refine-ticket`'s job.
66
+
67
+ ## Related Skills
68
+
69
+ **WHEN to use this**
70
+
71
+ - The unit of analysis is **a real user's switch event**.
72
+ - Discovery is fuzzy and the team is about to ship without validation.
73
+ - A retention or churn spike needs a narrative, not a metric.
74
+
75
+ **WHEN NOT to use this**
76
+
77
+ - Quantitative drop-off across stages — route to [`funnel-analysis`](../funnel-analysis/SKILL.md).
78
+ - Ranking competing initiatives — route to [`rice-prioritization`](../rice-prioritization/SKILL.md).
79
+ - Reframing a fuzzy product ask before any user contact — route to [`po-discovery`](../po-discovery/SKILL.md).
80
+ - AC sharpening on an already-validated ticket — route to [`refine-ticket`](../refine-ticket/SKILL.md).
81
+
82
+ ## When the agent should load this
83
+
84
+ - "We need to talk to users before we build X."
85
+ - "Why are people churning at month 2?"
86
+ - "Run customer research on the new pricing tier."
87
+ - "I keep guessing what the user wants — let's actually ask."
88
+ - "Before refining this ticket, do we know the real job?"
89
+
90
+ ## Output
91
+
92
+ 1. **`research-brief.md`** — frame sentence, recruit criteria, target sample, JTBD focal job, list of competing solutions in scope. Pre-interview artifact.
93
+ 2. **`evidence-log.md`** — one row per insight: quote · interviewee ID · tag (switch / anxiety / habit / outcome) · frequency. Sorted by frequency descending. Verbatim only.
94
+ 3. **`switch-event-summary.md`** — narrative of the dominant switch event(s) the research surfaced, with ≥ 3 supporting quotes per claim. Hand-off artifact for [`refine-ticket`](../refine-ticket/SKILL.md) and the senior product owner persona (currently [`product-owner`](../../personas/product-owner.md); senior persona shipping in next plate).
95
+
96
+ ## Gotcha
97
+
98
+ - Asking *"would you use"* contaminates the answer with politeness; ground every question in past behaviour.
99
+ - One articulate interviewee can swamp evidence-log. Frequency-rank by distinct people, not distinct quotes.
100
+ - Tagging too aggressively pre-interview hides surprise findings — leave room for `unexpected-outcome`.
101
+ - A research week without ≥ 3 disqualified hypotheses is suspect — research that confirms everything is research that asked nothing.
102
+
103
+ ## Do NOT
104
+
105
+ - Do NOT translate findings into acceptance criteria inside this skill — hand off to `refine-ticket`.
106
+ - Do NOT recruit only happy users; switchers and leavers carry the switch-event signal, satisfied users do not.
107
+ - Do NOT skip the frame sentence. An unframed interview produces 50 quotes about 8 different jobs.
108
+
109
+ ## Runnable example
110
+
111
+ Pricing-tier churn at month 2:
112
+
113
+ - Frame: *"Customers hire \<product\> to make progress in \<weekly reporting\>, motivated by \<board cadence\>, expecting \<one-click roll-up\>."*
114
+ - Recruit: 6 leavers (cancelled within 30 days of month 2), 2 switchers from competitor C.
115
+ - Interview: open with *"Walk me through the day you decided to cancel."* Capture verbatim.
116
+ - Output: `evidence-log.md` shows 5 of 8 cite the *manual export step* as the cancellation trigger — switch-event signal, ≥ 3 frequency. `switch-event-summary.md` recommends the senior PO scope a discovery slice on the export step, not the report itself.
@@ -1,12 +1,15 @@
1
1
  ---
2
2
  name: decision-record
3
3
  description: "Use when locking a trade-off, structuring an ADR draft, or wiring supersession chains — frames options · trade-offs · consequences before the file is written by `adr-create`."
4
+ status: active
5
+ tier: senior
6
+ source: package
7
+ domain: process
8
+ context_spine: [team]
4
9
  personas:
5
10
  - senior-engineer
6
11
  - critical-challenger
7
12
  - product-owner
8
- source: package
9
- domain: process
10
13
  ---
11
14
 
12
15
  # decision-record
@@ -37,6 +40,26 @@ Do NOT use when:
37
40
  - The user wants a feature plan, not a decision — route to the
38
41
  planning command instead.
39
42
 
43
+ ## Cognition cluster
44
+
45
+ - **Mental model 4 — Second-order thinking.** Every decision unlocks
46
+ some futures and locks out others; the consequences block names
47
+ what becomes harder, not just what becomes easier. See
48
+ [`docs/contracts/mental-models.md`](../../../docs/contracts/mental-models.md) § 4.
49
+ - **Mental model 6 — Theory of constraints.** A decision that does
50
+ not move the binding constraint is theatre; if the trade-off matrix
51
+ scores every option the same on the constraint that matters, the
52
+ options are fungible — surface and stop. See `mental-models.md` § 6.
53
+ - **Mental model 10 — Reversible vs irreversible.** Two-way doors
54
+ get a one-page record; one-way doors get the full options +
55
+ consequences + supersession chain. The reversibility row of the
56
+ matrix decides which template fires. See `mental-models.md` § 10.
57
+ - **Team context-spine slot.** Read the **team** slot of the
58
+ [context-spine](../../../docs/contracts/context-spine.md) to
59
+ capture who is bound by the decision (review groups, on-call
60
+ rotation). Skip if the consumer project has not filled it; note in
61
+ the record.
62
+
40
63
  ## Procedure
41
64
 
42
65
  ### 1. State the decision in one sentence
@@ -93,7 +116,39 @@ If this decision overrides a prior ADR:
93
116
  Output the structured payload (below). The user — or
94
117
  `adr-create` — turns it into the file.
95
118
 
96
- ## Output format
119
+ ## Related Skills
120
+
121
+ **WHEN to use this**
122
+
123
+ - The team is about to lock a non-trivial choice and the trade-offs
124
+ need to survive the conversation that produced them.
125
+ - A prior ADR is being overridden and the supersession chain needs
126
+ explicit "what changed in the world" rationale.
127
+ - A planning thread has surfaced ≥ 2 viable options and silence is
128
+ about to pick one by attrition.
129
+
130
+ **WHEN NOT to use this**
131
+
132
+ - The choice splits stakeholders along role lines (PO vs ops, eng vs
133
+ support) — start with [`stakeholder-tradeoff`](../stakeholder-tradeoff/SKILL.md);
134
+ this skill locks the choice **after** the human cost is mapped.
135
+ - The output is the ADR file itself (numbering, index regen) — route
136
+ to [`adr-create`](../adr-create/SKILL.md); this skill produces the
137
+ payload, not the file.
138
+ - The risk shape is the dominant question — route to
139
+ [`risk-officer`](../risk-officer/SKILL.md) first, then return.
140
+ - The decision is reversible and cheap — write a one-line note and
141
+ move on; ADRs are for irreversible or expensive constraints.
142
+
143
+ ## When the agent should load this
144
+
145
+ - "Lass uns das festzurren."
146
+ - "Welche Option ziehen wir und warum?"
147
+ - "Wir müssen ein ADR draus machen."
148
+ - "Trade-off-Matrix für X vs Y."
149
+ - "Diese Entscheidung überschreibt das alte ADR-NN."
150
+
151
+ ## Output
97
152
 
98
153
  ```
99
154
  Decision: <one sentence>
@@ -141,3 +196,23 @@ Next: /adr-create with the payload above
141
196
  - Do NOT pad option counts to look thorough; two real options beat
142
197
  four straw men.
143
198
  - Do NOT silently update an old ADR; supersession is explicit.
199
+
200
+ ## Runnable example
201
+
202
+ Replacing the in-house cron runner with a managed scheduler:
203
+
204
+ - Decision: *"We need to decide between keeping the in-house cron
205
+ runner and migrating to the managed scheduler because the on-call
206
+ rotation has paged on missed-run incidents three times in 60 days."*
207
+ - Options: (1) keep in-house + add monitoring; (2) migrate to
208
+ managed scheduler; (3) do nothing.
209
+ - Matrix rows that **separate** options: implementation cost,
210
+ operational load, blast radius on outage, reversibility.
211
+ - Locked: *"We pick the managed scheduler."*
212
+ - Consequences: `+` on-call gets paged on scheduler infra, not
213
+ application code. `–` job definitions move to a vendor format,
214
+ raising migration cost if we leave. `✗` we cannot run jobs in the
215
+ app process anymore — assumes vendor uptime.
216
+ - Supersedes: ADR-014 *"in-house cron runner"*; trigger = three
217
+ missed-run pages in 60 days now exceed the SLO budget.
218
+ - Next: `/adr-create` with the payload, append `supersedes: ADR-014`.
@@ -0,0 +1,152 @@
1
+ ---
2
+ name: discovery-interview
3
+ description: "Use when running discovery interviews — question-bank build, bias audit, insight extraction. Triggers on 'audit my guide', 'extract insights from transcript', 'is my hypothesis falsifiable'."
4
+ status: active
5
+ tier: senior
6
+ source: package
7
+ domain: product
8
+ context_spine: [product]
9
+ ---
10
+
11
+ # discovery-interview
12
+
13
+ ## When to use
14
+
15
+ - A discovery slice has been framed (`customer-research` ran), but the interview guide is still rough or untested.
16
+ - A transcript exists and the team needs structured insight extraction, not narrative summary.
17
+ - An interview round produced surprising findings; a bias audit is needed before the team acts on them.
18
+
19
+ Do NOT use for the upstream framing of the discovery slice (frame
20
+ sentence, recruit criteria, JTBD focal job) — that is
21
+ [`customer-research`](../customer-research/SKILL.md). Do NOT use for
22
+ quantitative survey design or scale-bound research.
23
+
24
+ ## Cognition cluster
25
+
26
+ - **Mental model 22 — Data-informed, not data-driven.** Interview
27
+ data is signal at low N; treat it as evidence to reason with, not
28
+ a vote count. See
29
+ [`docs/contracts/mental-models.md`](../../../docs/contracts/mental-models.md) § 22.
30
+ - **Mental model 15 — Signal vs noise.** A vivid quote from one
31
+ articulate user can swamp three muted but consistent signals;
32
+ frequency-rank by distinct people, never by quote count. See
33
+ `mental-models.md` § 15.
34
+ - **Mental model 28 — Eisenhower matrix.** Sort post-interview
35
+ insights into urgent / important quadrants so the team acts on
36
+ high-importance signals, not the loudest ones. See
37
+ `mental-models.md` § 28.
38
+ - **Product context-spine slot.** Read **product** for the focal job
39
+ + competitor names; do **not** re-derive these inside this skill.
40
+ See [`context-spine`](../../../docs/contracts/context-spine.md).
41
+
42
+ ## Procedure
43
+
44
+ ### 1. Build the question bank
45
+
46
+ 1. Anchor on the **switch event** from `customer-research`. The
47
+ first question is always *"Walk me through the day you decided
48
+ to ..."* — never *"would you ..."*.
49
+ 2. Three layers:
50
+ - **Past behaviour** (what did you do? when? alternative considered?)
51
+ - **Anxiety / habit** (what feared in switching? what habit died?)
52
+ - **Outcome** (what changed for you? expected? unexpected?)
53
+ 3. Cap at 8 open questions per 45-min slot. Beyond that, the
54
+ interview becomes a survey delivered in person.
55
+
56
+ ### 2. Audit the bank for bias
57
+
58
+ Before running, inspect each question and review the bank against the
59
+ four common biases:
60
+
61
+ - **Leading** — *"Don't you think X is annoying?"* → rewrite as past
62
+ behaviour.
63
+ - **Hypothetical** — *"Would you use Y?"* → replace with *"Last
64
+ time you needed Y, what did you do?"*.
65
+ - **Confirmation** — every question presupposes the team's hypothesis
66
+ is correct. At least two questions must be able to **disconfirm** it.
67
+ - **Recall ceiling** — questions that ask for events ≥ 90 days back
68
+ produce confabulation; bound the timeframe.
69
+
70
+ A bank that survives the audit unchanged is suspect — re-read.
71
+
72
+ ### 3. Run-time discipline
73
+
74
+ 1. Open with the switch event. Stay silent for 8 seconds after the
75
+ user finishes; the second answer is usually the truer one.
76
+ 2. Capture verbatim, not paraphrase. *"It made me anxious"* is data;
77
+ *"the user expressed concern"* is interpretation.
78
+ 3. Probe with *"tell me more about X"* on any anxiety / habit
79
+ mention; do not switch topics until the thread is exhausted.
80
+
81
+ ### 4. Extract insights
82
+
83
+ For each transcript:
84
+
85
+ 1. One quote per insight. Tag: switch / anxiety / habit /
86
+ expected-outcome / unexpected-outcome / disconfirmation.
87
+ 2. Frequency-rank by distinct interviewees (≥ 3 = signal; 1 = anecdote).
88
+ 3. Mark **disconfirmations** explicitly — these are the most
89
+ valuable rows, because they are the cheapest to ignore.
90
+
91
+ ### 5. Hand back
92
+
93
+ Produce the three artifacts (see `## Output`); hand the disconfirmation
94
+ log to whoever owns the original hypothesis.
95
+
96
+ ## Related Skills
97
+
98
+ **WHEN to use this**
99
+
100
+ - The discovery slice is framed and the interview guide / transcript
101
+ is the unit of work.
102
+ - A round of interviews ran and the insights need structured extraction
103
+ (frequency-ranked, bias-audited, disconfirmations highlighted).
104
+
105
+ **WHEN NOT to use this**
106
+
107
+ - The slice itself is unframed — start with
108
+ [`customer-research`](../customer-research/SKILL.md); this skill
109
+ inherits its frame, never re-derives it.
110
+ - The signal needs to come from existing artefacts (issues, PRs, errors)
111
+ rather than a live interview — route to [`voc-extract`](../voc-extract/SKILL.md).
112
+ - Insights translate into AC for a ticket — hand off to
113
+ [`refine-ticket`](../refine-ticket/SKILL.md).
114
+ - The output is a quantitative funnel — route to
115
+ [`funnel-analysis`](../funnel-analysis/SKILL.md).
116
+
117
+ ## When the agent should load this
118
+
119
+ - "Hilf mir den Interview-Leitfaden auditieren."
120
+ - "Welche Fragen sind biased?"
121
+ - "Extract die Insights aus diesem Transkript."
122
+ - "Wir haben 6 Interviews geführt — was ist Signal, was ist Anekdote?"
123
+ - "Ist meine Hypothese widerlegbar mit dem aktuellen Frageset?"
124
+
125
+ ## Output
126
+
127
+ 1. **`question-bank.md`** — 8 open questions, each tagged
128
+ past-behaviour / anxiety-habit / outcome; bias-audit notes per
129
+ rewritten question.
130
+ 2. **`insight-log.md`** — one row per insight: quote · interviewee
131
+ ID · tag · distinct-people frequency. Sorted descending. Verbatim.
132
+ 3. **`disconfirmation-log.md`** — each row names the original
133
+ hypothesis, the interview-derived disconfirmation, and the named
134
+ owner who must respond before the team acts on the round.
135
+
136
+ ## Gotcha
137
+
138
+ - A bank that survived the audit unchanged is rare; usually means
139
+ the audit was rushed, not that the bank was perfect.
140
+ - One articulate interviewee biases insight-extraction toward their
141
+ vocabulary — frequency-rank by people, not quotes.
142
+ - Disconfirmations are the cheapest insight to ignore and the most
143
+ valuable to act on; the log exists so they survive the round.
144
+
145
+ ## Do NOT
146
+
147
+ - Do NOT re-derive the frame inside this skill — read the **product**
148
+ spine slot or hand back to `customer-research`.
149
+ - Do NOT translate insights into AC inside this skill — that is
150
+ `refine-ticket`.
151
+ - Do NOT collapse disconfirmations into "we also heard X" prose;
152
+ they earn their own log.
@@ -0,0 +1,156 @@
1
+ ---
2
+ name: launch-readiness
3
+ description: "Use before merging a release-shaped PR — pre-merge checklist, rollout plan, rollback criteria, ops handoff. Triggers on 'ready to ship', 'launch checklist', 'rollout plan for X'."
4
+ status: active
5
+ tier: senior
6
+ source: package
7
+ domain: process
8
+ context_spine: [team, product]
9
+ ---
10
+
11
+ # launch-readiness
12
+
13
+ ## When to use
14
+
15
+ - A change is about to merge that crosses a release boundary (new feature on `main`, version bump, public-facing comms attached).
16
+ - An ops handoff is implied — the on-call rotation, support team, or downstream consumers need to know.
17
+ - A rollback criterion has not been written down yet.
18
+
19
+ Do NOT use for routine internal merges
20
+ ([`finishing-a-development-branch`](../finishing-a-development-branch/SKILL.md))
21
+ or for the comms text itself ([`release-comms`](../release-comms/SKILL.md)).
22
+ This skill produces the **decision** to ship and the rollback contract.
23
+
24
+ ## Cognition cluster
25
+
26
+ - **Mental model 10 — Reversible vs irreversible.** Map every step
27
+ of the rollout to a reversibility class; the rollback criteria
28
+ must name the irreversible steps and the abort threshold for each.
29
+ See [`docs/contracts/mental-models.md`](../../../docs/contracts/mental-models.md) § 10.
30
+ - **Mental model 29 — Pre-mortems.** Imagine the rollout failed in
31
+ six hours; what failed first? The pre-mortem becomes the rollback
32
+ criteria, not a separate document. See `mental-models.md` § 29.
33
+ - **Mental model 4 — Second-order thinking.** Enumerate what
34
+ becomes harder *after* the launch (rollback cost, contributor
35
+ ergonomics, doc churn). See `mental-models.md` § 4.
36
+ - **Team + product context-spine slots.** Read **team** for the
37
+ on-call rotation and ops handoff path; read **product** for the
38
+ segment / cohort exposure of the rollout. See
39
+ [`context-spine`](../../../docs/contracts/context-spine.md).
40
+
41
+ ## Procedure
42
+
43
+ ### 1. Identify the launch shape
44
+
45
+ One sentence: *"This change ships **X** to **segment Y** behind
46
+ **rollout mechanism Z**."* If you cannot, the change is not
47
+ release-shaped; route to `finishing-a-development-branch`.
48
+
49
+ ### 2. Inspect the pre-merge checklist
50
+
51
+ Walk the diff with the following gates:
52
+
53
+ - Tests green on the integration suite (cite the run).
54
+ - Quality gates green (PHPStan / linters / type-checks).
55
+ - Migrations are reversible OR the irreversibility is explicit.
56
+ - Feature flag / kill switch named, default off unless intended.
57
+ - Doc / changelog / release notes present (hand off to
58
+ [`release-comms`](../release-comms/SKILL.md) for the prose).
59
+ - Rollback path tested at least mentally; named in step 4.
60
+
61
+ Cells without evidence block the launch — surface, do not
62
+ hand-wave.
63
+
64
+ ### 3. Plan the rollout
65
+
66
+ - **Mechanism** — flag, canary cohort, blue-green, immediate.
67
+ - **Order** — internal → trusted segment → general; cite the
68
+ segment per stage from the **product** spine slot.
69
+ - **Telemetry** — the metric that **proves** rollout health.
70
+ - **Owner** — named role per stage (not name); from the **team**
71
+ spine slot.
72
+
73
+ ### 4. Write rollback criteria
74
+
75
+ For each stage:
76
+
77
+ - **Trip wire** — the metric value that fires rollback.
78
+ - **Decision window** — how long the trip wire must hold.
79
+ - **Abort path** — what the on-call does (revert PR, flip flag,
80
+ drain queue), pre-rehearsed.
81
+ - **Irreversible steps** — explicit list; if any irreversible step
82
+ is in scope, the launch needs a written sign-off, not implicit.
83
+
84
+ Pre-mortem rule: every trip wire must answer *"what would have
85
+ caused this in six hours?"* If you cannot, the trip wire is wrong.
86
+
87
+ ### 5. Ops handoff
88
+
89
+ - Who is paged on which alert (from **team** spine slot).
90
+ - Where the rollback runbook lives (link).
91
+ - Date / time of the handoff conversation; sign-off from the
92
+ receiving role.
93
+
94
+ ### 6. Hand back
95
+
96
+ Hand the artefact below to whoever requested the launch decision;
97
+ route comms to [`release-comms`](../release-comms/SKILL.md) and
98
+ post-launch metrics tracking to the team's monitoring stack.
99
+
100
+ ## Related Skills
101
+
102
+ **WHEN to use this**
103
+
104
+ - A release-shaped PR is about to merge.
105
+ - Rollback criteria need to land in writing before the merge button
106
+ is pressed.
107
+ - Ops handoff is implied and not yet executed.
108
+
109
+ **WHEN NOT to use this**
110
+
111
+ - The change is internal and routine — route to
112
+ [`finishing-a-development-branch`](../finishing-a-development-branch/SKILL.md).
113
+ - The output is the public comms — route to
114
+ [`release-comms`](../release-comms/SKILL.md).
115
+ - The rollout decision involves stakeholder conflict — route to
116
+ [`stakeholder-tradeoff`](../stakeholder-tradeoff/SKILL.md) first.
117
+ - The decision is reversible-and-cheap — write a one-line note,
118
+ skip the full artefact.
119
+
120
+ ## When the agent should load this
121
+
122
+ - "Sind wir launch-ready?"
123
+ - "Bau mir die Rollback-Kriterien für Phase X."
124
+ - "Ops-Handoff für die Release morgen."
125
+ - "Was bricht, wenn wir den Flag flippen?"
126
+ - "Pre-merge-Checklist für PR #N."
127
+
128
+ ## Output
129
+
130
+ 1. **Launch shape** — one-sentence statement of the change.
131
+ 2. **Pre-merge checklist** — gate · status · evidence (citation).
132
+ 3. **Rollout plan** — stages × mechanism · order · telemetry · owner.
133
+ 4. **Rollback contract** — per stage: trip wire · decision window ·
134
+ abort path · irreversible steps.
135
+ 5. **Ops handoff** — pager mapping · runbook link · sign-off.
136
+ 6. **Outstanding** — anything blocking the launch; explicit, not
137
+ collapsed.
138
+
139
+ ## Gotcha
140
+
141
+ - A checklist with all green and no citations is theatre; every
142
+ green needs an artefact.
143
+ - A trip wire without a decision window is unactionable — *"if
144
+ errors spike"* is not a trigger; *"5xx > 2% for 10 min"* is.
145
+ - Irreversible steps without written sign-off are the most common
146
+ post-mortem ancestor — surface, do not skip.
147
+
148
+ ## Do NOT
149
+
150
+ - Do NOT write the comms text here — that is `release-comms`.
151
+ - Do NOT lock the rollback contract verbally — it lives in the
152
+ output block, citable.
153
+ - Do NOT let any stage own itself — every stage names a role from
154
+ the **team** spine slot.
155
+ - Do NOT hand the artefact to a receiver who has not signed off on
156
+ ops handoff.