Operate in the main thread as Architect. Decompose the reviewed plan into
independently implementable tickets under tickets/. Do not write product code.
Draft and validate the cut before asking for approval.
Use any path accompanying the invocation to resolve the plan:
- A named Markdown file is the plan path.
- A named directory resolves to
<directory>/plan.md. - Otherwise use
plan.mdin the current working directory.
Read the plan first. If it is missing, tell the user to invoke $plan-feature
and stop. Read decision-brief.md next to it when present. Tickets live in
tickets/ next to the plan.
Existing Tickets
If the tickets directory already contains files:
- Derive completed ids from commit messages with a full line exactly equal to
Ticket: <id>. - Classify the request as an accidental collision, a full replacement with no completed work, or an incremental re-decomposition.
- Stop and explain the proposed treatment.
- Get explicit approval before writing or removing ticket files.
For a full replacement, replace open or blocked tickets with fresh ids. For an incremental re-decomposition, preserve completed ticket files and ids unchanged, replace only open or blocked tickets with fresh ids, and add corrective tickets when the new plan invalidates accepted behavior. Never rewrite an accepted ticket or reuse its id.
This approved replacement is part of the active workflow. It does not authorize end-of-workflow cleanup or replacement of artifacts from a different workflow.
Cut Rules
Every ticket must be implementable by a fresh developer from only the ticket,
plan, brief, repository seeds, and an optional correction brief.
- Start with a runnable tracer. The first behavior ticket has
tracer: trueand delivers the smallest observable path through the system. It proves the path at the closest real browser, CLI, API, integration, or public library boundary. Every later behavior ticket depends on it directly or transitively. - Use a contract ticket only when justified. It may precede the tracer only for a narrow, stable external or shared boundary that consumers require first, such as a schema, protocol, or ABI. State the justification. Typed code and easy stubs are not justification.
- Cut later work vertically. Each behavior ticket owns observable behavior end to end and carries a subset of the plan's Gherkin scenarios.
- Size for review and proof. Prefer a diff one person can review in one sitting, roughly 100-200 hand-written changed lines when practical. Explain larger slices that cannot split without losing end-to-end proof.
- Declare ownership. Each ticket has a
scope. Inspect sibling overlap; deliberate serial overlap can be valid for routers, schemas, and registries. - Place checkpoints. The tracer always has
checkpoint: human. In a high-risk workflow, mark load-bearing, migration, security, persistence, and hard-to-reverse slices the same way. Final human review remains required. - Preserve effective history. Keep a completed tracer if it still proves
the path. If invalidated, create a fresh correcting behavior ticket with
tracer: trueandcorrects: [<old-tracer>].
Proposed Cut And Approval
Draft the full cut in memory. Present each ticket's id, title, type, tracer, checkpoint, dependencies, expected scope, scenarios, and Observable Proof. Present preliminary gate results. Wait for explicit user approval before creating, changing, or removing ticket files.
Ticket Schema
After approval, write one file per new ticket at tickets/<id>.md:
---
id: auth-001
title: <short imperative title>
type: behavior
tracer: true
checkpoint: human
status: open
deps: []
corrects: []
scope:
- Sources/Auth/Login.swift
- Tests/AuthTests/LoginTests.swift
gherkin:
- "@must Login succeeds with valid credentials"
seeds:
- Sources/Auth/AuthService.swift
verification: test-first
---
## Goal
One or two sentences.
## Contract
The interface slice this ticket materializes, referencing the plan's Execution
Sketch. A contract ticket also justifies its behaviorless predecessor.
## Acceptance Criteria
Concrete criteria derived from the assigned scenarios.
## Observable Proof
How to exercise the slice through a real boundary. A public-interface test is
acceptable for pure library work. A contract ticket names its compile, schema,
or compatibility check.
## Notes
(left empty at creation; escalation notes only)
Allowed frontmatter values:
type:behaviororcontracttracer: exactly one effective behavior ticket istruecheckpoint:humanornonestatus:openorblocked; never store done, ready, or in-progressverification:test-first,implementation-first,characterization-first, ormanual-verification, plus a command when useful
A contract ticket owns no Gherkin scenarios and normally has tracer: false.
corrects retires each named completed ticket from current-plan ownership in
full. A correcting behavior ticket carries every still-current, non-deferred
scenario from the historical ticket plus the corrected behavior. Use an
extension ticket without corrects when old behavior remains current. Only the
tip of a correction chain is effective.
Mechanical Gate
Run these checks before presenting the cut and again against disk after writing:
- Coverage: every non-deferred scenario belongs to exactly one effective behavior ticket; deferred scenarios belong to none.
- Tracer: exactly one effective behavior ticket is the first observable slice, and later behavior reaches it through dependencies.
- Contract justification: any predecessor is narrow, stable, and has named consumers.
- DAG and references: dependency and correction graphs are acyclic. Deps
resolve to effective or preserved completed tickets.
correctsresolves only to preserved completed tickets. - Observable proof: every behavior ticket reaches a real boundary.
- Human review: tracer and high-risk checkpoints match the plan.
- Reviewability: likely large tickets are flagged and justified.
- Scope overlap: every sibling overlap is reported as deliberate and serial or corrected as a bad cut.
- Verifiability: every ticket declares a method.
- Seeds exist: check every seed path mechanically against the current disk. Future files belong in Contract, not seeds.
- Scope sanity: flag scope paths whose parent directory is also missing.
- Id hygiene: filename stem equals frontmatter id; new ids are unique and do
not already appear as an exact
Ticket: <id>trailer. Preserved completed ids are exempt.
Write And Re-check
After approval, preserve completed files, write the approved fresh files, and remove only replaced open or blocked files from this active workflow. Rerun the gate against disk and full commit messages.
Ticket files are temporary and remain uncommitted. Never stage or commit the brief, plan, or tickets. The user owns final cleanup.
If decomposition reveals a wrong program design, stop and send the user back to
$plan-feature. Do not hide the flaw in ticket wording.
Final Response
Report:
- plan and tickets paths
- preserved, created, replaced, and removed tickets
- coverage, tracer, DAG, proof, review, scope, seed, and id gate results
- open questions
- the next explicit invocation:
$start-work