Specs Tickets
Create and execute tickets through the spec-driven lifecycle, or resume work on existing ones.
Skill Dependencies
This skill is part of a set of skills designed to work together:
- spec-driven — Core rules and high-level document map
- specs-setup — Initialize
specs/ for a new project
- specs-tickets (this skill) — Create and execute tickets through their lifecycle
- specs-review — Audit specs health, consistency, and drift
- specs-finish-ticket — Review implemented tickets before closure
If any of these skills are missing from the project, instruct the user to install them before proceeding:
npx skills add b12consulting/skills --skill <missing_skill>
Always load the spec-driven skill first for the core rules. Load the methodology reference for detailed lifecycle and Findings guidance. Load templates when creating documents.
Prerequisites
- Verify
specs/ folder exists with Vision.md, PRD.md, and Architecture/README.md. If missing, prompt the user to run the specs-setup skill first.
- Read
specs/README.md, then specs/Vision.md, specs/PRD.md, and specs/Architecture/README.md to understand the project context.
- Read architecture sub-documents relevant to your ticket such as
specs/Architecture/data-model.md.
Entry Point: New Ticket or Existing?
Determine whether the user wants to create a new ticket or continue an existing one.
- If the user describes new work, go to the New Ticket section below.
- If the user references an existing ticket, go to the Resume Ticket section below.
- If unclear, ask the user.
New Ticket
Phase 0: Create Ticket
- Ask the user to describe the work to be done.
- Determine the next ticket number: scan
specs/tickets/ for the highest existing number and increment by one. If no tickets exist, start at 001.
- Derive a short slug from the description using lowercase hyphen-separated words.
- Create the ticket folder and
Spec.md:
specs/tickets/<NNN>-<slug>/Spec.md
Use this frontmatter:
---
id: "<NNN>"
title: "<Descriptive title>"
status: research
owner: ""
created: YYYY-MM-DD
updated: YYYY-MM-DD
---
Follow with a one-paragraph summary of the ticket and the initial spec scaffold.
Then proceed to Phase 1: Research.
Resume Ticket
1. Identify the Ticket
Ask the user which ticket to continue, or identify it from conversation context:
- ticket number such as
003
- description such as
the auth ticket by scanning ticket titles
If ambiguous, list active tickets from specs/README.md and ask the user to pick one.
2. Read Ticket State
Read the ticket's Spec.md and note the status from frontmatter. Then read all existing documents in the ticket folder to understand the full context.
Summarize the current state for the user: what phase the ticket is in, what is complete, and what comes next.
3. Check for Drift
Compare the ticket's documents against the current state of:
specs/Vision.md and specs/PRD.md — have requirements or success expectations changed since this ticket was written?
specs/Architecture/README.md — has the architecture evolved?
- the codebase — has relevant code changed since the ticket was last worked on?
If drift is detected:
- report the specific inconsistencies to the user
- discuss whether the ticket needs updating before continuing
- if specs changed, the ticket may need
Spec.md or Plan.md updates
- if code changed, completed checklist items may need re-verification
4. Resolve Blockers
If the ticket status is open-questions:
- present the unresolved questions from
Decisions.md to the user
- ask for decisions on each
- record decisions in the Resolved section of
Decisions.md
- update the ticket status once all questions are answered
If the ticket's Plan.md already records unresolved blockers or sequencing constraints:
- report those blockers and their current status
- discuss whether to wait, work around, or re-scope
5. Resume the Lifecycle
Based on the current status, pick up at the appropriate phase:
| Current Status |
Next Action |
research |
Review Research.md findings. Proceed to Phase 2: Specify. |
specifying |
Check whether Spec.md has been validated. If yes, proceed to Phase 3: Plan. If no, present it for validation. |
open-questions |
Resolve questions, then return to the prior phase. |
planned |
Review Plan.md, including its checklist, and proceed to implementation once it is confirmed. |
in-progress |
Continue from the execution checklist in Plan.md. |
done |
Inform the user the ticket is complete. Ask whether they want to reopen it or create a follow-up. |
archived |
Inform the user the ticket was archived. Ask whether they want to create a new ticket instead. |
6. Update Findings
If resuming work uncovers durable assumptions, frictions, workarounds, follow-up candidates, or residual risks, create or update Findings.md. Keep it curated and durable rather than chronological.
Ticket Lifecycle
The lifecycle is: Research → Specify → Plan → Implement → Finish Review → Done.
User validation is required at the spec, plan, and closeout checkpoints.
Any participant (human or agent) can execute any phase. The lifecycle defines the order, not who does what.
Phase 1: Research
Goal: Understand the problem space and gather information needed to write a good spec.
- Investigate the codebase, existing documentation, and any external resources relevant to the ticket.
- Identify technical constraints, existing patterns, and potential approaches.
- If the ticket may affect domain entities or boundary payloads, identify:
- the canonical domain concepts involved
- the canonical boundary contract involved
- the owner, producers, and consumers of that contract
- whether serialization or persistence format differs from the canonical in-memory shape
- Document findings in
Research.md:
- Objective: what we are trying to learn
- Findings: organized by topic
- Options considered with pros and cons
- Recommendation
- References
- Update ticket status to
research in Spec.md.
Research.md is optional for straightforward tickets. If the path is clear from the user's description, skip directly to Phase 2. A one-line bug fix does not need research, but a new feature with multiple possible approaches often does.
Phase 2: Specify
Goal: Define what done looks like.
Based on research findings or the user's description, write Spec.md:
- User stories: who wants what and why. Assign a priority (
P1, P2, P3, ...) to each story. Each story should be independently testable and include a one-line verification note.
- Acceptance criteria: concrete, testable conditions that prove the work is done
- Scope boundaries: what is in scope and explicitly out of scope
Clarification scan. Before finalizing the spec, scan it for ambiguity across these categories:
- functional scope and behavior
- domain and data model
- interaction and UX flow
- non-functional quality attributes
- integration and external dependencies
- edge cases and failure handling
- constraints and trade-offs
- terminology consistency
For each category that is partial or missing, decide whether clarification materially affects implementation. If it does, ask the user. Limit yourself to the most impactful questions. If a gap is better deferred to planning, note it internally and move on.
If there are unresolved questions that block specification, create Decisions.md:
- list each question with context in the Open section
- provide options with trade-offs for each
- include a suggested answer for each
- ask the user to decide on all open questions before proceeding
- move resolved questions to the Resolved section with the decision, date, and rationale
Self-validate the spec. Before presenting it to the user, check:
- no implementation details have leaked into the spec
- every requirement is testable and unambiguous
- acceptance criteria are measurable
- scope is clearly bounded
- no more than 3 items remain marked
[NEEDS CLARIFICATION]
- all user stories have a priority and an independent-test description
- field-level schema details appear in the spec only when they are part of a user-visible or product-level contract; stable technical contract definitions live in architecture docs or the plan
If any check fails, fix the spec before presenting it.
Update ticket status to specifying, or open-questions if questions exist, in Spec.md.
Present Spec.md to the user for validation.
CHECKPOINT: Do not proceed to Phase 3 until the user has validated the spec.
Phase 3: Plan
Goal: Define the implementation strategy and executable checklist.
Based on the confirmed spec, write Plan.md:
- Approach: high-level implementation strategy
- Key design decisions: important choices and their rationale
- Dependencies and sequencing: only the blockers or ordering constraints that materially affect execution
- Data model and contract impact: canonical entities, boundary contracts, serialization differences, and compatibility or cutover policy when relevant
- Implementation checklist: the concrete execution checklist with file-scoped items
- Risks and mitigations: what could go wrong and how to handle it
- Verification: the checks that prove the plan satisfies the spec
Check alignment with architecture docs. If the plan requires architectural changes:
- flag this to the user explicitly
- propose an ADR in
specs/decisions/
- update
specs/Architecture/README.md and any affected sub-documents only after user approval
Coverage check. Before presenting the plan, verify that Spec.md and Plan.md are consistent:
- every requirement maps to at least one checklist item
- every checklist item traces back to a requirement or design decision
- terminology is consistent across the two files
For tickets that affect data modeling or boundary contracts, also verify:
- every changed canonical entity or contract is reflected in the relevant architecture doc
- every contract change has explicit verification checklist items for producer and consumer alignment
- compatibility or migration work is represented in
Plan.md when needed
If gaps are found, update Plan.md or Spec.md before proceeding. This check is lightweight — skip it for very small tickets with <= 5 checklist items.
Update ticket status to planned in Spec.md.
Present Plan.md to the user for confirmation.
CHECKPOINT: Do not proceed to implementation until the user has confirmed the plan.
Phase 4: Implement
Goal: Execute the plan.
Work through the execution checklist in Plan.md sequentially:
- check off each item as it is completed
- if an item reveals the spec or plan needs updating, pause implementation
- update the relevant document, inform the user, and get confirmation if the change is significant
Update Findings.md progressively:
- use it for durable discoveries that matter after the session ends
- create it as soon as those discoveries appear; do not wait until the ticket is nearly done
- every finding must end with a clear disposition such as
Addressed here, Follow-up needed, or Accepted for now
Drift detection during implementation: If implementation reveals a conflict with Vision.md, PRD.md, or architecture docs:
- alert the user immediately
- either create an ADR to update specs, or create a follow-up ticket to fix the code
- do not silently deviate from specs
Update ticket status to in-progress in Spec.md.
Phase 5: Prepare Finish Review
Goal: Hand the ticket off for independent closeout review before it is marked done.
- Verify all acceptance criteria from
Spec.md appear to be met.
- Make a final pass over
Plan.md and Findings.md:
- ensure completed checklist items are checked off or clearly superseded
- ensure
Findings.md captures durable assumptions, frictions, follow-up candidates, residual risks, and test gaps with clear dispositions
- If the ticket affects data shape, update
specs/Architecture/data-model.md to classify the change explicitly:
- Do not mark the ticket
done yet.
- Ask the user to start a fresh conversation and run the specs-finish-ticket skill for independent review.
The ticket typically remains in-progress until the finish review passes and the user confirms closure.
Handling Changes Mid-Flight
Requirements often change during implementation. When they do:
- Update
Spec.md with the new or changed requirements.
- Update
Plan.md so the approach, sequencing, and checklist still reflect reality.
- Update
Findings.md if the change revealed an assumption, workaround, follow-up candidate, or residual risk worth preserving.
- If the change affects
Vision.md, PRD.md, or architecture docs, create an ADR.
- If the change alters canonical entities, boundary contracts, or serialization policy, update
specs/Architecture/data-model.md and/or the relevant architecture docs when those definitions are part of the long-lived system design.
- Re-validate with the user if the change is significant.
The spec is always the source of truth for the ticket, not the code. Keep it in sync.
Scaling Guidance
- Small tickets such as a bug fix or config change: create the ticket, specify it, write a compact plan with checklist, implement it, then send it to finish review. Skip Research.
- Medium tickets such as a feature or refactor: use all phases. Research may be brief.
- Large tickets such as a new system or major redesign: use all phases. Consider breaking the work into multiple tickets if the
Plan.md checklist exceeds ~15 items.
1---2name: specs-tickets3description: Create new spec-driven tickets and resume existing ones through the full lifecycle: research, specification, planning, and implementation. Use when: the user describes new work to be done; continuing a previously started ticket; a feature, bug fix, or task needs planning and implementation; starting or resuming planned work on a project with specs/. Triggers on: 'new ticket', 'new feature', 'fix bug', 'implement', 'create ticket', 'I want to build', 'let us work on', 'add feature', 'continue ticket', 'resume work', 'pick up where we left off', 'work on ticket', 'existing ticket', 'check ticket status', 'what is the state of ticket'.4---56# Specs Tickets78Create and execute tickets through the spec-driven lifecycle, or resume work on existing ones.910## Skill Dependencies1112This skill is part of a set of skills designed to work together:1314- **spec-driven** — Core rules and high-level document map15- **specs-setup** — Initialize `specs/` for a new project16- **specs-tickets** (this skill) — Create and execute tickets through their lifecycle17- **specs-review** — Audit specs health, consistency, and drift18- **specs-finish-ticket** — Review implemented tickets before closure1920If any of these skills are missing from the project, **instruct the user to install them** before proceeding:2122```bash23npx skills add b12consulting/skills --skill <missing_skill>24```2526**Always load the [spec-driven](../spec-driven/SKILL.md) skill first** for the core rules. Load the [methodology reference](../spec-driven/references/methodology.md) for detailed lifecycle and Findings guidance. Load [templates](../spec-driven/references/templates.md) when creating documents.2728## Prerequisites29301. Verify `specs/` folder exists with `Vision.md`, `PRD.md`, and `Architecture/README.md`. If missing, prompt the user to run the [specs-setup](../specs-setup/SKILL.md) skill first.312. Read `specs/README.md`, then `specs/Vision.md`, `specs/PRD.md`, and `specs/Architecture/README.md` to understand the project context.323. Read architecture sub-documents relevant to your ticket such as `specs/Architecture/data-model.md`.3334---3536## Entry Point: New Ticket or Existing?3738Determine whether the user wants to **create a new ticket** or **continue an existing one**.3940- If the user describes new work, go to the New Ticket section below.41- If the user references an existing ticket, go to the Resume Ticket section below.42- If unclear, ask the user.4344---4546## New Ticket4748### Phase 0: Create Ticket49501. Ask the user to describe the work to be done.512. Determine the next ticket number: scan `specs/tickets/` for the highest existing number and increment by one. If no tickets exist, start at `001`.523. Derive a short slug from the description using lowercase hyphen-separated words.534. Create the ticket folder and `Spec.md`:5455```text56specs/tickets/<NNN>-<slug>/Spec.md57```5859Use this frontmatter:6061```yaml62---63id: "<NNN>"64title: "<Descriptive title>"65status: research66owner: ""67created: YYYY-MM-DD68updated: YYYY-MM-DD69---70```7172Follow with a one-paragraph summary of the ticket and the initial spec scaffold.7374Then proceed to Phase 1: Research.7576---7778## Resume Ticket7980### 1. Identify the Ticket8182Ask the user which ticket to continue, or identify it from conversation context:8384- ticket number such as `003`85- description such as `the auth ticket` by scanning ticket titles8687If ambiguous, list active tickets from `specs/README.md` and ask the user to pick one.8889### 2. Read Ticket State9091Read the ticket's `Spec.md` and note the **status** from frontmatter. Then read **all existing documents** in the ticket folder to understand the full context.9293Summarize the current state for the user: what phase the ticket is in, what is complete, and what comes next.9495### 3. Check for Drift9697Compare the ticket's documents against the current state of:9899- **`specs/Vision.md`** and **`specs/PRD.md`** — have requirements or success expectations changed since this ticket was written?100- **`specs/Architecture/README.md`** — has the architecture evolved?101- **the codebase** — has relevant code changed since the ticket was last worked on?102103If drift is detected:104105- report the specific inconsistencies to the user106- discuss whether the ticket needs updating before continuing107- if specs changed, the ticket may need `Spec.md` or `Plan.md` updates108- if code changed, completed checklist items may need re-verification109110### 4. Resolve Blockers111112If the ticket status is `open-questions`:113114- present the unresolved questions from `Decisions.md` to the user115- ask for decisions on each116- record decisions in the Resolved section of `Decisions.md`117- update the ticket status once all questions are answered118119If the ticket's `Plan.md` already records unresolved blockers or sequencing constraints:120121- report those blockers and their current status122- discuss whether to wait, work around, or re-scope123124### 5. Resume the Lifecycle125126Based on the current status, pick up at the appropriate phase:127128| Current Status | Next Action |129| ---------------- | --------------------------------------------------------------------------------------------------------------- |130| `research` | Review `Research.md` findings. Proceed to Phase 2: Specify. |131| `specifying` | Check whether `Spec.md` has been validated. If yes, proceed to Phase 3: Plan. If no, present it for validation. |132| `open-questions` | Resolve questions, then return to the prior phase. |133| `planned` | Review `Plan.md`, including its checklist, and proceed to implementation once it is confirmed. |134| `in-progress` | Continue from the execution checklist in `Plan.md`. |135| `done` | Inform the user the ticket is complete. Ask whether they want to reopen it or create a follow-up. |136| `archived` | Inform the user the ticket was archived. Ask whether they want to create a new ticket instead. |137138### 6. Update Findings139140If resuming work uncovers durable assumptions, frictions, workarounds, follow-up candidates, or residual risks, create or update `Findings.md`. Keep it curated and durable rather than chronological.141142---143144## Ticket Lifecycle145146The lifecycle is: Research → Specify → Plan → Implement → Finish Review → Done.147148User validation is required at the spec, plan, and closeout checkpoints.149150**Any participant (human or agent) can execute any phase.** The lifecycle defines the order, not who does what.151152---153154### Phase 1: Research155156**Goal**: Understand the problem space and gather information needed to write a good spec.1571581. Investigate the codebase, existing documentation, and any external resources relevant to the ticket.1592. Identify technical constraints, existing patterns, and potential approaches.1603. If the ticket may affect domain entities or boundary payloads, identify:161 - the canonical domain concepts involved162 - the canonical boundary contract involved163 - the owner, producers, and consumers of that contract164 - whether serialization or persistence format differs from the canonical in-memory shape1654. Document findings in `Research.md`:166 - Objective: what we are trying to learn167 - Findings: organized by topic168 - Options considered with pros and cons169 - Recommendation170 - References1715. Update ticket status to `research` in `Spec.md`.172173**`Research.md` is optional for straightforward tickets.** If the path is clear from the user's description, skip directly to Phase 2. A one-line bug fix does not need research, but a new feature with multiple possible approaches often does.174175---176177### Phase 2: Specify178179**Goal**: Define what done looks like.1801811. Based on research findings or the user's description, write `Spec.md`:182 - **User stories**: who wants what and why. Assign a **priority** (`P1`, `P2`, `P3`, ...) to each story. Each story should be **independently testable** and include a one-line verification note.183 - **Acceptance criteria**: concrete, testable conditions that prove the work is done184 - **Scope boundaries**: what is in scope and explicitly out of scope1851862. **Clarification scan.** Before finalizing the spec, scan it for ambiguity across these categories:187 - functional scope and behavior188 - domain and data model189 - interaction and UX flow190 - non-functional quality attributes191 - integration and external dependencies192 - edge cases and failure handling193 - constraints and trade-offs194 - terminology consistency195196 For each category that is partial or missing, decide whether clarification materially affects implementation. If it does, ask the user. Limit yourself to the most impactful questions. If a gap is better deferred to planning, note it internally and move on.1971983. If there are unresolved questions that block specification, create `Decisions.md`:199 - list each question with context in the Open section200 - provide options with trade-offs for each201 - include a suggested answer for each202 - ask the user to decide on all open questions before proceeding203 - move resolved questions to the Resolved section with the decision, date, and rationale2042054. **Self-validate the spec.** Before presenting it to the user, check:206 - no implementation details have leaked into the spec207 - every requirement is testable and unambiguous208 - acceptance criteria are measurable209 - scope is clearly bounded210 - no more than 3 items remain marked `[NEEDS CLARIFICATION]`211 - all user stories have a priority and an independent-test description212 - field-level schema details appear in the spec only when they are part of a user-visible or product-level contract; stable technical contract definitions live in architecture docs or the plan213214 If any check fails, fix the spec before presenting it.2152165. Update ticket status to `specifying`, or `open-questions` if questions exist, in `Spec.md`.2172186. **Present `Spec.md` to the user for validation.**219220> **CHECKPOINT: Do not proceed to Phase 3 until the user has validated the spec.**221222---223224### Phase 3: Plan225226**Goal**: Define the implementation strategy and executable checklist.2272281. Based on the confirmed spec, write `Plan.md`:229 - **Approach**: high-level implementation strategy230 - **Key design decisions**: important choices and their rationale231 - **Dependencies and sequencing**: only the blockers or ordering constraints that materially affect execution232 - **Data model and contract impact**: canonical entities, boundary contracts, serialization differences, and compatibility or cutover policy when relevant233 - **Implementation checklist**: the concrete execution checklist with file-scoped items234 - **Risks and mitigations**: what could go wrong and how to handle it235 - **Verification**: the checks that prove the plan satisfies the spec2362372. **Check alignment with architecture docs.** If the plan requires architectural changes:238 - flag this to the user explicitly239 - propose an ADR in `specs/decisions/`240 - update `specs/Architecture/README.md` and any affected sub-documents only after user approval2412423. **Coverage check.** Before presenting the plan, verify that `Spec.md` and `Plan.md` are consistent:243 - every requirement maps to at least one checklist item244 - every checklist item traces back to a requirement or design decision245 - terminology is consistent across the two files246247 For tickets that affect data modeling or boundary contracts, also verify:248 - every changed canonical entity or contract is reflected in the relevant architecture doc249 - every contract change has explicit verification checklist items for producer and consumer alignment250 - compatibility or migration work is represented in `Plan.md` when needed251252 If gaps are found, update `Plan.md` or `Spec.md` before proceeding. This check is lightweight — skip it for very small tickets with <= 5 checklist items.2532544. Update ticket status to `planned` in `Spec.md`.2552565. **Present `Plan.md` to the user for confirmation.**257258> **CHECKPOINT: Do not proceed to implementation until the user has confirmed the plan.**259260---261262### Phase 4: Implement263264**Goal**: Execute the plan.2652661. Work through the execution checklist in `Plan.md` sequentially:267 - check off each item as it is completed268 - if an item reveals the spec or plan needs updating, pause implementation269 - update the relevant document, inform the user, and get confirmation if the change is significant2702712. Update `Findings.md` progressively:272 - use it for durable discoveries that matter after the session ends273 - create it as soon as those discoveries appear; do not wait until the ticket is nearly done274 - every finding must end with a clear disposition such as `Addressed here`, `Follow-up needed`, or `Accepted for now`2752763. **Drift detection during implementation**: If implementation reveals a conflict with `Vision.md`, `PRD.md`, or architecture docs:277 - alert the user immediately278 - either create an ADR to update specs, or create a follow-up ticket to fix the code279 - **do not silently deviate from specs**2802814. Update ticket status to `in-progress` in `Spec.md`.282283---284285### Phase 5: Prepare Finish Review286287**Goal**: Hand the ticket off for independent closeout review before it is marked done.2882891. Verify all acceptance criteria from `Spec.md` appear to be met.2902. Make a final pass over `Plan.md` and `Findings.md`:291 - ensure completed checklist items are checked off or clearly superseded292 - ensure `Findings.md` captures durable assumptions, frictions, follow-up candidates, residual risks, and test gaps with clear dispositions2933. If the ticket affects data shape, update `specs/Architecture/data-model.md` to classify the change explicitly:2944. Do **not** mark the ticket `done` yet.2955. Ask the user to start a **fresh conversation** and run the [specs-finish-ticket](../specs-finish-ticket/SKILL.md) skill for independent review.296297The ticket typically remains `in-progress` until the finish review passes and the user confirms closure.298299---300301## Handling Changes Mid-Flight302303Requirements often change during implementation. When they do:3043051. Update `Spec.md` with the new or changed requirements.3062. Update `Plan.md` so the approach, sequencing, and checklist still reflect reality.3073. Update `Findings.md` if the change revealed an assumption, workaround, follow-up candidate, or residual risk worth preserving.3084. If the change affects `Vision.md`, `PRD.md`, or architecture docs, create an ADR.3095. If the change alters canonical entities, boundary contracts, or serialization policy, update `specs/Architecture/data-model.md` and/or the relevant architecture docs when those definitions are part of the long-lived system design.3106. Re-validate with the user if the change is significant.311312The spec is always the source of truth for the ticket, not the code. Keep it in sync.313314## Scaling Guidance315316- **Small tickets** such as a bug fix or config change: create the ticket, specify it, write a compact plan with checklist, implement it, then send it to finish review. Skip Research.317- **Medium tickets** such as a feature or refactor: use all phases. Research may be brief.318- **Large tickets** such as a new system or major redesign: use all phases. Consider breaking the work into multiple tickets if the `Plan.md` checklist exceeds ~15 items.