--- type: trekbrief brief_version: "2.2" created: {YYYY-MM-DD} task: "{one-line task description}" slug: {slug} project_dir: .claude/projects/{YYYY-MM-DD}-{slug}/ research_topics: {N} research_status: pending # pending | in_progress | complete | skipped auto_research: false # true if user opted into Claude-managed research interview_turns: {N} source: {interview | manual} # v5.5 — framing: how this brief relates to prior operator intent. REQUIRED at # brief_version ≥ 2.2. One of: preserve | refine | replace | new-direction. # AskUserQuestion-validated in /trekbrief Phase 2.5 BEFORE any brief prose is # written — the first layer of the framing-alignment defense (guards against the # plan polishing a wrong premise after a rejected iteration). framing: {preserve | refine | replace | new-direction} # Size class (ceremony by size), said aloud in the /trekbrief question round and # overridable by the operator; it only ever moves up mid-task. Optional: absent # reads as architectural (the heaviest). One of: small | bounded | architectural. ceremony: {small | bounded | architectural} # Where the brief and plan live: git (committed) or local (kept out of git via # .git/info/exclude). The approval log is committed either way. Optional: absent # reads as local. Asked once per task in the /trekbrief question round. artifact_store: {git | local} # v5.1 — per-phase effort + model signal (Phase 3.5). # `effort` ∈ {low, standard, high}; `model` ∈ {sonnet, opus, fable} (v5.9). # Omit `model:` for `standard` so composition falls through to profile # resolver. Force-stop alternative is the commented # `phase_signals_partial: true` below (mutually exclusive with `phase_signals`). phase_signals: - phase: research effort: standard - phase: plan effort: standard - phase: execute effort: standard - phase: review effort: standard # phase_signals_partial: true # uncomment to record force-stop instead of phase_signals --- # Task: {title} > Generated by `/trekbrief` on {YYYY-MM-DD}. > This brief is the contract between requirements and planning. `/trekplan` > reads it to produce the implementation plan. Every decision in the plan must > trace back to content in this brief. ## TL;DR *≤ 5 lines. The framing-anchored one-glance summary: what this brief asks for and how it relates to prior operator intent (framing: {preserve | refine | replace | new-direction}). Written FIRST so a reader catches a wrong premise before reading the full brief. Required at brief_version ≥ 2.2.* {≤5-line summary.} ## Intent *Why are we doing this? What is the motivation, user need, or strategic context? 3-5 sentences. Load-bearing for the plan — every implementation decision must trace back to this intent.* {Intent paragraph. Answers "why bother?".} ## Goal *What does success look like concretely? What state will the system be in when this is done? 1 paragraph. Specific enough to disagree with.* {Goal paragraph.} ## Non-Goals *What is explicitly out of scope? Prevents plan-critic and scope-guardian from flagging gaps for things we deliberately do not do.* - {non-goal 1} - {non-goal 2} ## Constraints *Technical, time, or resource limitations. Hard boundaries the plan must respect.* - {constraint 1} - {constraint 2} ## Preferences *Preferred patterns, frameworks, libraries, or approaches. Soft constraints (the plan may deviate with justification).* - {preference 1} - {preference 2} ## Non-Functional Requirements *Performance, security, accessibility, scalability, or other quality attributes. Quantified where possible.* - {NFR 1 — e.g., "p95 response time < 200ms"} - {NFR 2 — e.g., "Zero new npm dependencies"} ## Success Criteria *Falsifiable, command-checkable conditions that define "done". Each must be verifiable by running a specific command or observing a specific system behavior.* - {criterion — e.g., "All existing tests pass: `npm test` exits 0"} - {criterion — e.g., "New endpoint answers ok: `bash tests/health.sh` exits 0 (the script calls the endpoint and checks the status field)"} - {criterion — e.g., "No TypeScript errors: `npm run typecheck` exits 0"} One command per criterion, from the runner's allowlist (`npm test`, `npm run