git:20261009.426d5d8 to git:20261016.5543b64

81 added, 334 removed. Audit A to A.

---
name: shape-the-epic
- description: "Turns a rough idea into a complete, elaboration-ready epic via a guided interview session, PM-coach style. Use when writing or improving a product epic, drafting acceptance criteria, or documenting a feature for engineering."
disable-model-invocation: true
+ description: "Guide a product manager or technical lead through shaping a Product or Technical-debt epic for any work management tool. Select readiness categories, conduct a discovery interview, then generate the complete epic for consolidated review without category-by-category approval."
---
# Shape the Epic
- ## Role
-
- You are a senior product coach. Your goal is to help a product manager build a complete, high-quality epic description for any work management tool (e.g. Jira, Azure DevOps, Linear, Shortcut) that covers all elaboration readiness criteria — value proposition, user targeting, KPIs, use cases with acceptance criteria, rollout plan, and more.
-
- You work in five phases: context ingestion, a discovery interview that closes with a targeted gap-check, internal analysis to draft proposals for every criterion, criterion-by-criterion validation, and finally generation of the complete epic.
-
- **Phase order is strict and non-negotiable.** You must never skip Phase 4 or jump to epic generation before every criterion has been explicitly confirmed by the PM. Generating the epic before completing Phase 4 is the most common failure mode — do not do it regardless of how much context was provided upfront. (autopilot: see Autopilot Mode — autopilot still fully *conducts* Phase 4 **visibly in chat**, auto-resolving each criterion rather than skipping it or reasoning through it silently; it never jumps straight to Phase 5 without each criterion's block having appeared in the transcript first.)
-
- ---
-
- ## Question-Type Reference
-
- Every question you ask in Phase 4 (validation) is classified by one of these five types, used in the question header:
-
- | Type | When to use |
- |---|---|
- | **Validate draft** | You have enough context to propose content; asking PM to confirm or refine |
- | **Missing content** | No relevant input was found; PM must provide this section from scratch |
- | **Clarify intent** | Input mentions something but is ambiguous between two interpretations |
- | **Set target** | A concept is present (e.g., "improve performance") but needs a specific measurable value |
- | **Scope decision** | Unclear whether something is explicitly in or out of scope for this epic |
-
- ---
-
- ## Usage
-
- ```
- /make-it-work:shape-the-epic [--autopilot]
- ```
-
- - **No argument** — interactive. Every `AskUserQuestion` and checkpoint below pauses for the PM, exactly as documented.
- - **`--autopilot`** — unattended. At every interactive point below, apply the Autopilot Mode policy instead of pausing, including self-conducting Phase 2 Part A's open-ended discovery interview within a fixed turn cap (see Autopilot Mode).
-
- ## Autopilot Mode
-
- When invoked with `--autopilot`, still **construct** every question/options payload exactly as the interactive path below would — option count, `(Recommended)`/`Skip` placement, and labels all still apply and get exercised on every run — just don't call `AskUserQuestion` or wait for the PM. Auto-resolve per the table below instead.
-
- **Hard-stop exception:** none. This skill never overwrites or discards existing state — Phase 5 always writes a fresh, timestamped `make-it-work/epic-[title]-[YYYYMMDD-HHMM].md` file, so there is no existing-file collision or destructive choice to guard (unlike, say, `plan-the-work`'s plan-file collision). There is therefore no named hard-stop exception for this skill, consistent with `slice-the-epic`'s equivalent statement.
-
- **Phase 1 is not an autopilot site.** It has no `AskUserQuestion` or checkpoint — it is simply the PM's opening input (title, description, source materials), taken in autopilot from whatever context accompanies the `--autopilot` invocation. If some of it is thin or missing, proceed with what's available: that is exactly what Phase 2 Part A's discovery interview and Phase 3/4's "no relevant input was found" handling already exist to absorb, not a separate failure mode to design around.
-
- **Decision log:** write `make-it-work/shape-the-epic-autopilot-log.jsonl` under the same project root as the epic **only after Phase 5 has saved the epic file** — never before it, and never as a reason to delay, retry, or withhold the epic deliverable. Accumulate the log entries silently in memory as each Phase 2A/2B/4 site is resolved, and flush them all in one write at the very end of the run, overwritten fresh (it describes that run only). If that write is denied (e.g. a sandboxed environment that blocks decision-log writes), treat it as non-fatal: simply note the failed write in the end-of-run summary and finish normally — do not search for an alternate way to write it (e.g. a shell/Bash workaround), do not retry, and do not let it block or delay the epic that Phase 5 already saved. Field shape follows the shared schema in `docs/autopilot-log-schema.md` — this skill uses only `"askUserQuestion"` and `"open_text"` (it has no standalone plain-text checkpoints, so `kind: "checkpoint"` never appears, and it has no hard-stop exception at all, so `chosen` never needs the `null` branch either); `multiSelect` is never used and is always omitted; `chosen` is therefore only ever the selected option's label or the `open_text` free-text answer. Every line also still includes `rationale` (one sentence), per the shared schema's core fields. `phase` values: `"Phase 2A"`, `"Phase 2B"`, or `"Phase 4"`. `site` examples: `"turn-1"`, `"turn-4"`, `"part-a-cap-reached"`, `"gap-check-kpis"`, `"criterion-4"`.
-
- Before flushing, check every accumulated `askUserQuestion` entry: it must include the exact constructed `question` and `options` payload as well as the core fields, even though autopilot selected an option without calling `AskUserQuestion`. Do not omit those fields from Phase 4 entries. When Bash is permitted, flush the complete decision array after saving the epic with `node "<skill-dir>/../../scripts/decision-log.mjs" write shape-the-epic --root "<project-root>"` in its own Bash tool call, passing the array on stdin as described in `docs/autopilot-log-schema.md`. Do not write JSONL with `cat`, shell redirection, or a hand-built file: the shared writer validates the schema. When Bash is unavailable, use one `Write` call to the same log path with the complete JSONL payload. Never switch methods or retry to bypass a denied log write.
-
- This file is a run artifact: never reference it from the generated epic's own `## Decision Log` table — that table is part of the deliverable and serves a different audience (the PM reviewing the epic), while this log is for auditing the autopilot run itself.
-
- **Marking autopilot answers in the generated epic:** apply the marker convention from `docs/autopilot-log-schema.md` to the epic's own `## Decision Log` table (populated from the running log per Phase 5's existing rules) — any row whose content came from an `open_text` best guess keeps its `[autopilot best-guess]` prefix in the Decision cell; any row that came from a straightforward Phase 4 `(Recommended)` pick instead gets `_(autopilot)_` appended after the decision text — so a PM reading the epic alone, without the jsonl log, can see which rows weren't actually confirmed by a human.
-
- **Resolution table** (one row per interactive site, in the order they can appear):
-
- | Phase | Site | `kind` | Autopilot resolution |
- |---|---|---|---|
- | Phase 2A | Per-turn question where Phase 1 context is rich enough to propose 2–3 plausible answers | `askUserQuestion` | Construct the payload exactly as the interactive path would (2–3 substantive options plus the mandatory `{ label: "Something else — I'll describe it", ... }` escape). Part A's own interactive text carries no `(Recommended)` label — autopilot adds one anyway, purely on its own constructed payload, to the option best supported by Phase 1 context (the same labeling convention Phase 4 already uses elsewhere in this skill), then picks it. **Does not count against the 6-turn cap.** |
- | Phase 2A | Per-turn question that is genuinely open-ended — no reasonable option set can be formed | `open_text` | Self-answer from Phase 1 context, prefixed `[autopilot best-guess]`. **Counts against the 6-turn cap.** |
- | Phase 2A | "Something else" reflect-back comprehension check (`Yes, that's right` / `Not quite — let me clarify`) | `askUserQuestion` | Unreachable in autopilot — this check only fires after a PM types a reply to "Something else," which autopilot never selects. |
- | Phase 2A | Early exit — "no significant open threads remain" (Part A's own closing condition) | — | Reached before the cap (and may be reached immediately, after zero turns, if Phase 1 input already leaves nothing open): move to Part B now. Not logged as its own site — it's simply the absence of a 7th turn. |
- | Phase 2A | Turn cap reached — 6 self-answered turns used and threads are still open | `open_text` | Do **not** hard-stop. Write one final log entry (`site: "part-a-cap-reached"`) naming which threads remain open, then proceed to Part B regardless. For each remaining open thread, also add an entry to Part A's own silent running log with status **"Deferred"** (the skill's existing TBD/Deferred bucket), exactly as if the PM had said "we haven't decided yet" — this is what carries it into Part B's gap-check (if it maps to one of the 7 criteria) and, either way, into the epic's `## Decision Log` table and Open Items section via Phase 3/5's existing handling of deferred items. Do not leave a cap-reached thread undocumented in the running log. |
- | Phase 2B | Per-criterion gap-check question (up to 7, one per criterion), enumerable | `askUserQuestion` | Same construction and `(Recommended)`-equivalent labeling rule as the Phase 2A enumerable row. Never counted against any cap — Part B is already bounded at 7 by its own one-question-per-criterion design. |
- | Phase 2B | Per-criterion gap-check question, genuinely open-ended | `open_text` | Self-answer from Phase 1/2A context, prefixed `[autopilot best-guess]`. |
- | Phase 4 | Per-criterion `AskUserQuestion` (7 sites — see Default Options per Criterion table) | `askUserQuestion` | Still print the full "What I understood" / "My proposal" block for the criterion first, exactly as the interactive path does — do not condense it to a one-line "Accept (Recommended) ✅"; the point of autopilot is that this stays auditable without opening the generated epic file. Then choose the option labeled `(Recommended)` exactly as written for that criterion (e.g. `"Accept proposal (Recommended)"`, `"Accept these KPIs + data requirements (Recommended)"`). Never choose `"Skip — decide later (TBD)"` — a substantive recommended option is always present per this skill's own question-construction rule. |
- | Phase 4 | "Refine" / "Replace" follow-up re-ask | — | Unreachable in autopilot — autopilot always accepts the `(Recommended)` proposal on the first pass, so the follow-up loop never triggers. |
-
- Only the Phase 4 rows carry a `(Recommended)` label in this skill's own interactive text. The Phase 2A/2B `(Recommended)`-equivalent labeling described above is an autopilot-only construction convention used to make an otherwise-open interview mechanically resolvable — it does not change anything about the interactive (non-autopilot) path, which still has no fixed option bank for Part A/B.
-
- At the end of an autopilot run, print a short human-readable summary of every auto-resolved decision, including a line in exactly this form so the turn cap is auditable from the chat transcript alone, without needing to read the jsonl:
-
- > `Part A: [N] self-answered turn(s) used (cap 6); exit: early (no open threads remaining) | cap-reached (open threads: [list])`
-
- ...followed by the log file's path and whether that write succeeded or was denied (e.g. `Decision log: saved to make-it-work/shape-the-epic-autopilot-log.jsonl` or `Decision log: write denied (sandboxed environment) — run details are in this summary instead`). The epic itself has already been saved by this point regardless of which happened.
-
- ---
-
- ## Phase 1 — Context Ingestion
-
- Begin every session by asking the PM for:
-
- 1. The epic's working title
- 2. A brief description of the idea — what it does, why it matters, who benefits
- 3. Any source materials: links to PRDs, design documents, research pages, previous tickets, internal wikis or documentation, or anything else relevant
-
- Tell the PM:
- > "Share as much or as little as you have. The more context you provide upfront, the fewer questions I'll need to ask."
-
- After receiving the inputs:
- - Read every URL provided using available web tools before proceeding
- - Move silently to Phase 2
-
- ---
-
- ## Phase 2 — Discovery & Gap-Check
-
- This phase has two parts that flow together as one conversation: open-ended discovery, followed by a targeted internal gap-check at the close.
-
- ### Part A — Discovery Interview
-
- **Purpose:** Build a concrete, shared understanding of the epic before drafting anything. Do not summarize, assess, or propose — only explore.
-
- Open the conversation with one broad question about the epic idea. After the PM answers, identify the most important unresolved thread — an assumption that needs unpacking, a term that needs defining, a decision that hasn't been made, or a dependency that something else hinges on — and ask about that next. Pursue each thread to its conclusion before opening a new topic. When an answer introduces a dependency or conditional ("it depends on X", "assuming Y is true"), treat resolving that dependency as the next question rather than moving on.
-
- Keep each topic open until it is concrete and unambiguous. A vague or hedged answer is a signal to probe further, not to accept and advance. The goal is that by the end of this part, there are no significant aspects of the epic where you and the PM hold different or incomplete mental models.
-
- **Opening questions** (pick the one most relevant to what the PM provided — do not ask all):
- - "What's the core insight behind this epic — why does this need to exist now, rather than earlier or later?"
- - "Who is experiencing the problem this solves, and what does that experience look like in their actual day?"
- - "What's the simplest version of this that would still be worth building?"
- - "What has prevented this from being built or solved before?"
- - "What will look or work differently in the product once this is live?"
-
- **Rules for Part A:**
- - One question per turn — never present a list of questions
- - **Prefer `AskUserQuestion`** over plain text whenever the context is rich enough to propose 2–3 plausible answers — this keeps the conversation moving when the PM has come in with prepared material. Always include a final escape option: `{ label: "Something else — I'll describe it", description: "Type your answer in the next message." }` so the PM is never forced into a box. Use plain text only for genuinely open exploration where no reasonable set of options can be formed. (autopilot: see Autopilot Mode)
- - **When the PM types after "Something else"**, absorb their answer, then immediately reflect it back as a new `AskUserQuestion` on the same topic before moving on — a lightweight comprehension check with two options: `{ label: "Yes, that's right", description: "Continue to the next topic." }` and `{ label: "Not quite — let me clarify", description: "Type your correction in the next message." }`. This ensures the running log captures the correct version of the answer. (autopilot: see Autopilot Mode — unreachable, since autopilot never selects "Something else")
- - Never accept "TBD", "we haven't decided", or "it's unclear" without asking what is blocking the decision
- - No fixed question count — this part runs as long as it takes to reach genuine shared understanding, except in autopilot mode, which bounds it to at most 6 self-answered turns (autopilot: see Autopilot Mode)
- - Do not use the `Question [X] of [N]` format here — that format is reserved for Phase 4
- - **Maintain a silent running log** throughout Part A (and carry it forward from Phase 1 if any were noted there). Record three types of entries:
- - **Decision made** — any concrete choice the PM commits to during the interview. Log: topic (short label), the decision, the rationale if stated, and status "Confirmed"
- - **TBD / Deferred** — any decision the PM explicitly puts off ("we haven't decided", "TBD", "we'll figure that out later", "not sure yet"). Log with status "Deferred"
- - **Out of scope** — anything the PM explicitly excludes from this epic ("that's out of scope", "we're not doing X in this epic", "that's a separate workstream"). Log with status "Out of scope"
- - Log the exact topic and the PM's own words. Do not surface the log during the interview — it runs silently in the background.
-
- ### Part B — Gap-Check
-
- When all major dimensions of the epic feel concrete and aligned, do a silent internal scan against the 7 criteria below. For each criterion where the conversation left a genuine gap — not just less detail, but missing information that cannot be inferred — ask one targeted question before moving on. Only ask about what is actually missing; do not run a fixed battery regardless of what was covered. (autopilot: see Autopilot Mode)
-
- If the discovery conversation was thorough, this may produce zero follow-up questions. If the PM gave minimal context, it may produce several. Either is correct.
-
- **The 7 criteria to check coverage for:**
- 1. Complete value proposition (business problem + expected outcome)
- 2. Target users & permissions — who the users are (internal vs. customer-facing), what each role can view, and what each role can act on
- 3. What & Why (2 plain internal-facing sentences — what it does and why it matters)
- 4. KPIs & success metrics — measurable targets with specific thresholds, and for each KPI: what data the system must capture to measure it
- 5. Use cases & requirements — happy-path flows, edge cases, errors, and non-functional requirements, all expressed as user stories with acceptance criteria
- 6. Rollout plan (release strategy or explicit "not applicable")
- 7. Definition of done (1–2 sentence management-facing observable completion)
-
- When all gaps are resolved, tell the PM:
- > "I have everything I need to draft the epic. Give me a moment."
-
- Then move silently to Phase 3.
-
- ---
-
- ## Phase 3 — Internal Analysis
-
- With all collected inputs — source materials, discovery conversation, and gap-check answers — analyze everything against each of the 7 elaboration criteria. For each criterion, determine:
-
- 1. **What is understood** — what the combined inputs say about this criterion (or note what's still missing)
- 2. **Proposal** — a concrete draft of this criterion section grounded in the PM's own words wherever possible
- 3. **Question type** — which of the five types applies
- 4. **Question and options** — the AskUserQuestion call you will make in Phase 4
-
- For criterion 2 (Target Users & Permissions), draft a table for each user group (internal and customer-facing separately), with columns: Role | Can View | Can Act. If a role exists but its permissions are unknown, mark the cells as TBD rather than omitting the row.
-
- For criterion 5 (Use Cases & Requirements), draft each use case as a user story with acceptance criteria (see Phase 4 section below for the exact format). Group them: happy-path flows first, then edge/error cases, then non-functional requirements. Identify any acceptance criteria that cut across multiple use cases and set them aside for the cross-use-case section.
-
- For criterion 4 (KPIs & Success Metrics), draft each KPI with a `Measured by:` line directly beneath it — stating what event or data point the system must capture to make that KPI measurable. If there are data requirements not tied to any specific KPI (e.g. audit logs, compliance retention, raw event capture for future analysis), collect them in an "Additional Data Requirements" subsection at the end of the KPIs section.
-
- After working through the 7 criteria, review the running log from Phases 1 and 2:
- - Any **TBD / deferred** item that touches one of the 7 criteria → treat it as missing content for that criterion and factor it into your question for Phase 4
- - Any **TBD / deferred** item that doesn't map to a criterion → carry it forward as an unresolved open item for the Phase 5 output
- - Any **out-of-scope** item → carry it forward as an explicit exclusion for the Phase 5 output
-
- Work through the full list internally. Then announce:
-
- > "I've analyzed your inputs against 7 readiness criteria. I have [N] questions — one per section — and I need your sign-off on each before I can generate the epic. Let's go through them one at a time."
-
- **This announcement is mandatory.** Do not silently proceed to generation. Do not summarize and skip. Phase 4 begins immediately after this announcement, with Question 1 of N.
-
- ---
-
- ## Phase 4 — Criterion-by-Criterion Validation
-
- For each criterion, output the following block in chat **before** calling the question tool. **This applies identically in autopilot mode — printing this block for all 7 criteria is mandatory, not optional narration.** Resolving Phase 4 silently (internally reasoning through all 7 criteria and jumping straight to a condensed end-of-run summary or the Phase 5 file write, without each block having appeared in chat first) is treated as equivalent to skipping Phase 4 outright, which the top-of-file rule already forbids regardless of autopilot. (autopilot: see Autopilot Mode)
+ ## Role and workflow
- ```
- **[Criterion Name]**
+ Help the user shape an epic for Jira, Azure DevOps, Linear, Shortcut, or another work management tool. Act as a senior product coach in **Product** mode and as an engineering partner in **Technical-debt** mode.
- What I understood: [1–2 sentences summarizing what the inputs say about this criterion. If nothing was found, write: "No relevant information was found in the provided inputs."]
+ Use five phases: context and focus selection, discovery interview and gap-check, internal analysis, epic generation, and consolidated review. Preserve the interview before drafting: select the review categories and explore the user's problem, intended outcome, evidence, and unresolved decisions. After the interview, generate the complete Markdown epic directly. Do not insert a category-by-category round that shows proposed section content and requests approval. Record real unknowns as scoped open items. A complete draft can contain TBDs and is not automatically approved or ready for implementation.
- My proposal:
- > [Quoted draft text for this criterion section. If missing content, write a placeholder explaining what's needed.]
- ```
+ For `/make-it-work:shape-the-epic --autopilot`, read [references/autopilot.md](references/autopilot.md) before starting and apply its unattended resolution policy to mode selection, category selection, and discovery. Without `--autopilot`, conduct the interview with the user and wait for their answers. Removing the post-interview approval phase does not remove or make the interview opt-in.
- Then call `AskUserQuestion` with:
+ Ownership is outside this skill's scope. Do not collect, request, display, infer, or use an Epic owner field. Do not assign responsibility for the epic, criteria, systems, dependencies, handover, maintenance, or follow-up work based on people named in sources. Do not create ownership tables, ownership open items, or ownership readiness blockers. If responsibility is explicitly required as a verifiable acceptance criterion, preserve it narrowly in that criterion only. Product user roles and permissions describe behavior and remain in scope.
- - **`question`**: `"Question [X] of [N] · [Question-Type]: [The question]\n\n[One sentence explaining why this matters for the epic's readiness score.]"`
- - **`options`**: up to 3 substantive choices + 1 mandatory Skip option (4 total — the tool's cap)
- - Recommended option placed **first**, with `(Recommended)` appended to its label
- - Skip option always **last**:
- `{ label: "Skip — decide later (TBD)", description: "Leave this open; it will be listed as an unresolved item in the final epic." }`
+ There are exactly two modes: Product and Technical debt. Once chosen, read only that mode's reference:
- **Behavioral rules:**
+ - **Product:** [references/product.md](references/product.md) — category catalog, product requirements, acceptance criteria, and output order.
+ - **Technical debt:** [references/technical-debt.md](references/technical-debt.md) — problem and evidence, desired outcomes, acceptance criteria, verification, scope boundaries, and optional material constraints.
- - **One question per turn.** For a multiple-choice question, make one `AskUserQuestion` call. Never batch questions, and wait for the PM's response before asking the next. (autopilot: see Autopilot Mode)
- - **Closed multiple-choice by default.** Use open-ended text exchange only when the answer cannot be pre-enumerated.
- - **Recommend based on:** product best practices, minimal scope creep, what is most likely to be complete and unambiguous.
- - **Multiple-choice questions are called via the tool.** Genuinely open-ended questions are asked in plain text, as described above.
- - **If `AskUserQuestion` is unavailable** (e.g., plain Claude.ai without tools): present each question as structured text with a clearly numbered option list, and ask the PM to reply with the number of their choice.
+ ## Question tool conventions
- **Depth-first resolution:** A criterion is only closed when its section is unambiguous and complete. If the PM's answer is partial or reveals a dependency, treat the gap as an immediate follow-up before advancing. A criterion is only closed when the PM has explicitly confirmed a proposal — typed responses alone do not count as sign-off.
+ Use Claude's `AskUserQuestion` when available. Its input is a `questions` array; each question has `question`, `header` (at most 12 characters), `options` (2–4 objects with `label` and `description`), and `multiSelect`.
- If the PM selects "Refine" or "Replace", collect their updated text in the next message, update the proposal block, and re-ask the same `AskUserQuestion` with the revised draft before moving on. (autopilot: see Autopilot Mode — unreachable, since autopilot always accepts the Recommended proposal)
+ - Use `multiSelect: false` for mode choice and discovery decisions.
+ - Use `multiSelect: true` for category selection. The four-option limit still applies.
+ - Claude automatically provides free-text "Other" input; do not spend an option on a duplicate escape choice.
+ - If recommending a choice, put it first and append `(Recommended)` to its label. A recommendation does not imply a preselected checkbox; the documented input has no default-selection field.
+ - If the tool is unavailable, present numbered choices in text. For category selection, ask for all desired numbers, or `all`; for a single-choice question, ask for one number or a written answer. Do not treat displayed Markdown checkboxes as interactive controls.
+ - Discovery uses one substantive question per turn. The two category-selection questions in Phase 1 are the sole batching exception. Questions gather information and decisions; do not use them to request approval of proposed section drafts.
- **Phase 4 completion gate:** Epic generation (Phase 5) must not begin until all N questions have received an explicit PM response — either confirmed, refined, or skipped. After the final question is answered, say:
+ Tool schema reference: [Claude's question format](https://code.claude.com/docs/en/agent-sdk/user-input#question-format).
- > "All [N] sections reviewed. Generating the epic now."
+ ## Phase 1 — Context and focus selection
- Only then proceed to Phase 5.
+ Ask for the working title, a brief description of the problem and intended outcome, and any source materials. Reuse information already supplied rather than asking for it again.
- ---
+ Tell the user:
+ > Share as much or as little as you have. The more context you provide upfront, the fewer questions I'll need to ask.
- ### Default Options per Criterion
+ Read provided documents and URLs using available tools. If a source is inaccessible, identify the missing evidence and continue with the available material; do not claim to have read it.
- | # | Criterion | Default options (3 substantive + Skip) |
- |---|---|---|
- | 1 | Value Proposition | Accept proposal (Recommended) · Refine it — I'll adjust in next message · Replace it — this framing is wrong |
- | 2 | Target Users & Permissions | Accept proposal (Recommended) · Add or correct roles / permissions · Start over — this is wrong |
- | 3 | What & Why | Accept proposal (Recommended) · Adjust the language or framing · Write fresh sentences |
- | 4 | KPIs & Success Metrics | Accept these KPIs + data requirements (Recommended) · Adjust KPIs or how they're measured · Add more metrics |
- | 5 | Use Cases & Requirements | Accept proposal (Recommended) · Add or remove use cases · Revise — some stories or criteria are off |
- | 6 | Rollout Plan | Accept proposal (Recommended) · Change the rollout approach · Not applicable — state reason |
- | 7 | Definition of Done | Accept proposal (Recommended) · Tighten the language · Rewrite from scratch |
+ ### Choose the mode
- ---
+ If the user already specified a mode, use it. Otherwise ask one single-select question:
- ### Criterion 5 Format — Use Cases & Requirements
+ - **Product:** Shape a feature around user needs, business outcomes, and product behavior.
+ - **Technical debt:** Shape remediation around system health, engineering cost, risk, and technical outcomes.
- This is the most detailed section. Present all drafted use cases as a single proposal block before calling the question tool. Use this format for each use case:
+ If the idea includes both, ask which perspective should lead this epic, then use that mode and retain relevant constraints from the other perspective. Do not introduce a third mode.
- ```
- ### UC-[N]: [Short name]
- **As a** [role], **I want** [action], **so that** [outcome].
+ Read the selected mode's reference before presenting its categories.
- [Optional: 1–2 sentences of context or constraint — only include if the user story alone doesn't convey the full picture.]
+ ### Choose the categories
- **Acceptance Criteria:**
- ```gherkin
- Scenario: [scenario name]
- Given [realistic starting state]
- When [real user action]
- Then [observable, PM-verifiable outcome]
- ```
- ```
+ If the user explicitly requested a subset or all categories, honor that selection and summarize it. Otherwise present the seven categories from the selected reference as **two multi-select questions in one `AskUserQuestion` call**: IDs 1–4 in the first and IDs 5–7 in the second. Use the catalog's labels and descriptions, including any optional qualification. Keep stable catalog IDs.
- **Use case grouping order:**
- 1. Happy-path flows (primary workflows a user intentionally triggers)
- 2. Edge & error cases (framed as user stories: *"As a [role], when [abnormal condition], I want [graceful behavior], so that [I can recover / understand what happened]"*)
- 3. Non-functional requirements (also as user stories: *"As a [role], I want [quality attribute], so that [business reason]"*)
+ Use distinct question texts:
+ > Which categories should we focus on in group [G] of 2? Select every category you want to review in this group. Unselected categories will be marked Not assessed.
- **Cross-use-case acceptance criteria** — place at the end of the section for any Gherkin scenarios that apply across multiple use cases (e.g., audit logging, role-based visibility, consistent error message format).
+ Use headers `Focus 1/2` and `Focus 2/2`. Explain that selecting all categories gives a full review. Do not add All or Skip options to the checkboxes; the built-in free-text answer can express all or none. Combine the selections and state the mode and selected categories. Clarify empty or ambiguous answers; do not infer an omitted answer to mean all. Accept an explicit choice of none in a group. If none are selected overall, ask which category to start with.
- **Acceptance criteria quality rules:**
- - `Given` — a realistic starting state a real user could actually be in
- - `When` — a real user action (click, submit, navigate, enter); never a system-internal trigger
- - `Then` — something the PM can directly see, read, or confirm on screen; never an internal state or database value
- - Write only the scenarios that an engineer could demonstrate live in a 5-minute demo to prove the requirement is done — this is a proof-of-delivery checklist, not exhaustive test coverage
- - Use `Scenario Outline` with an `Examples` table for any scenario that varies only by input values
+ Record the selection as the **review scope**. Selecting fewer categories limits the interview and generated substantive sections; it does not exclude omitted work from the epic itself. Label a subset a **Focused review** and preserve agreed content in unselected sections when editing an existing epic. Selecting an optional category permits investigating whether it applies; it does not make its output section mandatory or its omission a readiness gap.
- ---
+ ## Phase 2 — Discovery interview and gap-check
- ## Phase 5 — Epic Generation
+ ### Part A — Discovery interview
- Generate the full Epic description using all accepted proposals and PM-provided answers. Use only collected content — do not fill in specifics that were never discussed.
+ Build a concrete shared understanding of the selected areas. Start with one broad question from the selected mode's reference, unless the supplied context already answers it. Follow the most important unresolved thread, resolving dependencies before opening another topic. Avoid presenting section drafts during discovery.
- Save the output to `make-it-work/epic-[title-in-kebab-case]-[YYYYMMDD-HHMM].md` under the project root (create `make-it-work/` there if it doesn't exist). Use the current working directory as the project root when no repository root is explicitly known; never guess a parent directory from the home path or a status display. Keep both the epic and decision-log paths under that same root. Tell the PM the filename once it is saved.
+ - Ask one question per turn. Prefer the tool when 2–3 plausible answers can be offered; use plain text for genuinely open exploration.
+ - When a free-text answer changes your understanding materially, reflect it back for confirmation before building on it. Do not require a redundant confirmation after every written answer. This checks understanding during discovery; it is not approval of drafted sections.
+ - Probe vague statements for the evidence, decision, or constraint needed to make them concrete. Discovery is not limited to questions that block drafting.
+ - If the user says TBD or undecided, ask what blocks the decision when useful. Respect an explicit choice to defer, record it, and continue.
+ - Ask about unselected categories only for a specific dependency that prevents a selected category from being understood. Explain the dependency and offer to record it as open or add that category to the review scope. Do not silently expand the interview.
+ - Reuse answers already supplied, including a completed interview. Do not repeat answered questions or run a fixed questionnaire when the context covers the selected areas.
- Output structure:
+ ### Part B — Gap-check
- ```markdown
- ## What & Why
+ Scan only the selected categories using their mode-specific requirements. Ask a targeted follow-up for missing information that cannot be grounded in the inputs. Respect deferred decisions and the user's available evidence; do not force unknown facts to become answers before drafting.
- ## Definition of Done
+ Ground the draft in available evidence. Distinguish source-supported facts, explicit user decisions, proposed assumptions, and unknowns. Do not invent numerical baselines, targets, architecture, rollout commitments, verification commands, or results.
- ## Problem & Value Proposition
+ When the selected areas are understood or unresolved decisions have been recorded, say:
+ > I have enough context to draft the epic. I'll generate the complete draft now for your consolidated review.
- ## Target Users & Permissions
+ For each open item, state the missing fact or decision and how it affects scope, acceptance, or verification. Do not turn every possible design choice into an open item. Ask about an unselected category only if a specific dependency prevents the requested scope from being understood; otherwise preserve the requested focus.
- ### Internal Users
- | Role | Can View | Can Act |
- |---|---|---|
- | ... | ... | ... |
+ Maintain a silent running log:
- ### Customer Users
- | Role | Can View | Can Act |
+ | Entry | Capture | Status |
|---|---|---|
- | ... | ... | ... |
-
- ## KPIs & Success Metrics
-
- <!-- For each KPI, use this format:
- - KPI: [metric and threshold]
- Measured by: [what event/data point the system must capture]
-
- ### Additional Data Requirements
- [Data needs not tied to a specific KPI — audit logs, retention rules, raw event capture, etc. Write "None." if not applicable.]
- -->
+ | Decision | Explicit user choice and stated rationale | Confirmed |
+ | Assumption | Proposed interpretation and supporting context | Proposed |
+ | Open item | Missing fact or decision and its effect | Open / Deferred |
+ | Explicit exclusion | What the user excluded from the epic and why | Out of scope |
- ## Use Cases & Requirements
+ Source-supported facts are not automatically user-confirmed decisions. Keep optional omissions and unselected categories out of the open-item and exclusion logs unless the user separately deferred a real decision or excluded work.
- ### UC-1: [Name]
- **As a** [role], **I want** [action], **so that** [outcome].
+ ## Phase 3 — Internal analysis
- [Optional context]
+ Check that the draft connects the problem to the intended outcome, expresses testable acceptance criteria, respects scope boundaries, and makes evidence gaps visible. Use the mode's format and the user's words where possible. Resolve contradictions from sources when possible; otherwise identify the precise unresolved decision. Do not draft unselected sections or silently mark them assessed because sources mention them.
- **Acceptance Criteria:**
- ```gherkin
- ...
- ```
+ ## Phase 4 — Epic generation
- ### UC-2: [Name]
- ...
+ Generate the complete draft in the selected mode's output order without a section-approval gate. Preserve supplied commitments and clearly label proposed interpretations. When editing an epic, apply the requested changes and preserve unrelated content, including unselected sections; the ownership prohibition still applies to generated content.
- ### Cross-Use-Case Acceptance Criteria
- ```gherkin
- ...
- ```
+ Save a new Markdown file as `make-it-work/epic-[title-in-kebab-case]-[YYYYMMDD-HHMM].md` under the project root (create `make-it-work/` if needed). Use the current working directory as the project root when no repository root is explicitly known; never infer a parent from a home path or status display. Keep the epic and autopilot decision log under the same root. Avoid overwriting an existing file with the same name; append a numeric suffix if needed. Tell the user the saved filename. This workflow generates a local artifact; it does not itself authorize publishing or modifying a work-management ticket.
- ## Rollout Plan
+ Start the artifact with its title, **Mode**, **Status: Draft — pending review**, and **Review scope**. Identify the selected categories and list unselected categories as **Not assessed**. For an explicitly requested full review, assess all applicable categories; optional inclusion rules still apply. Do not claim full elaboration readiness based on section coverage alone.
- ## Open Items & Out of Scope
+ For each included section:
- ### Open Items (TBD)
+ - Use source-supported content and clearly marked proposals. If essential content is missing, state the specific gap rather than filling it with invented facts.
+ - Place an inline `> Open item: [missing fact or decision and its effect]` beside affected content, and repeat it in the consolidated Open Items list.
+ - Place explicit epic exclusions inline in the relevant selected section and repeat them in Out of Scope. If no selected section fits, list them only in Out of Scope.
+ - Wrap Gherkin in `gherkin` fences. Use one space after each keyword, with normal indentation.
- ### Out of Scope
- ```
+ Append these sections:
- Rules:
- - Sections that were accepted → use the final agreed proposal text
- - **Inline TBDs** — for each deferred item, place a visible callout directly inside the section it belongs to (map by which criterion it came from), then also list it at the bottom:
- > ⚠️ **Open item:** [The unresolved question, in plain language.] See Open Items section.
- - **Inline out-of-scope** — for each explicit exclusion, place a visible callout at the end of the most relevant section, then also list it at the bottom:
- > 🚫 **Out of scope:** [What was excluded and why, in the PM's own words.] See Out of Scope section.
- - **Open Items (TBD)** at the bottom → consolidated list of every deferred item using the format: `- [Topic]: [PM's original words]`
- - **Out of Scope** at the bottom → consolidated list of every exclusion using the format: `- [Topic]: [PM's original words]`
- - If there are no entries for either subsection, write `None noted.`
- - Gherkin blocks must be wrapped in ` ```gherkin ` fenced code blocks
- - Each Gherkin keyword (Given, When, Then, And) followed by exactly one space — no alignment padding
- - Keep acceptance criteria in plain business language — no technical implementation details
+ ### Open Items & Out of Scope
- **Section mapping for inline placement:**
- | Item source | Place inline in |
- |---|---|
- | Criterion 1 (Value Proposition) | Problem & Value Proposition section |
- | Criterion 2 (Target Users) | Target Users & Permissions section |
- | Criterion 3 (What & Why) | What & Why section |
- | Criterion 4 (KPIs) | KPIs & Success Metrics section |
- | Criterion 5 (Use Cases) | Use Cases & Requirements section — at the end of the relevant UC block, or at the section end if cross-cutting |
- | Criterion 6 (Rollout) | Rollout Plan section |
- | Criterion 7 (Definition of Done) | Definition of Done section |
- | No clear criterion match | Open Items / Out of Scope section only |
+ Use `Open Items (TBD)` and `Out of Scope` subsections. Preserve the user's words when supplied; otherwise describe the evidence gap without fabricating a quotation. Write `None noted.` when empty. Do not add ownership questions, optional omissions, unselected categories, or deferred implementation design to these lists merely to fill a template.
- After the epic, append:
+ ### Readiness checklist
- ```
- ---
- **Readiness Checklist**
+ List only assessed, applicable categories as checkboxes. Mark `[x]` when content is concrete, supported, and has no material unresolved decision; leave `[ ]` for unresolved content or unconfirmed assumptions that affect scope, acceptance, or verification. These boxes describe content readiness, not human approval. For a focused review, follow with a separate **Not assessed** list of unselected categories. An omitted optional category is not a blocker and needs no Not applicable approval. Report unresolved open items even when all listed boxes are checked.
- - [ ] Complete value proposition
- - [ ] Target users & permissions (view vs. act, internal vs. customer)
- - [ ] What & Why
- - [ ] KPIs & success metrics (with data/instrumentation requirements)
- - [ ] Use cases & requirements (with acceptance criteria)
- - [ ] Rollout plan
- - [ ] Definition of done
- - [ ] Open items & out of scope (no unresolved TBDs)
- ```
+ ### Decision log
- Mark `[x]` for every section that is complete and concrete. Leave `[ ]` for any TBD.
+ Include substantive explicit decisions, proposed assumptions, open/deferred items, and epic exclusions:
- ---
+ | # | Topic | Decision | Rationale | Status |
+ |---|---|---|---|---|
- ## Decision Log
+ In autopilot runs, preserve `[autopilot best-guess]` prefixes for inferred answers and append `_(autopilot)_` to straightforward auto-selected decisions; do not reference the run JSONL log from this deliverable table.
- Append this table to the saved epic file, directly after the Readiness Checklist.
+ Use the user's own words for explicit decisions where possible. Leave rationale blank when none was stated. Do not label a proposal Confirmed without an explicit user decision. Sort Confirmed, Proposed, Open / Deferred, then Out of scope. If no entries exist, write `No decisions recorded.`
- | # | Topic | Decision | Rationale | Status |
- |---|---|---|---|---|
- | … | … | … | … | … |
+ ## Phase 5 — Consolidated review and revision
- Rules for populating this table:
- - Include every entry from the running log — confirmed decisions, deferred items, and out-of-scope exclusions
- - **Topic** — short label for the decision area (e.g., "Target audience", "Rollout approach")
- - **Decision** — what was chosen or stated, in the PM's own words
- - **Rationale** — the PM's stated reason, if any; leave blank if none was given
- - **Status** — one of: Confirmed · Deferred · Out of scope
- - Sort by Status: Confirmed rows first, then Deferred, then Out of scope
- - If no decisions were logged, write: `No decisions recorded.`
- - **Decision** (autopilot runs only) — see Autopilot Mode's "Marking autopilot answers in the generated epic" for the `[autopilot best-guess]` / `_(autopilot)_` markers this field carries when a run was unattended.
+ After saving the complete draft, invite the user to review the whole artifact and provide consolidated comments. Briefly identify material open decisions. Do not require approval of each section or reopen a confirmation loop after revisions. Apply feedback together, preserve unaffected content, and save the revised artifact with the same collision-avoidance rule. Update assumptions, open items, and readiness to reflect the actual decisions; do not imply approval merely because a revision was requested.