diff --git a/plugins/voyage/templates/trekbrief-template.md b/plugins/voyage/templates/trekbrief-template.md index b35d893..ff72ac4 100644 --- a/plugins/voyage/templates/trekbrief-template.md +++ b/plugins/voyage/templates/trekbrief-template.md @@ -1,6 +1,6 @@ --- type: trekbrief -brief_version: 2.0 +brief_version: 2.1 created: {YYYY-MM-DD} task: "{one-line task description}" slug: {slug} @@ -10,6 +10,20 @@ 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.1 — per-phase effort + model signal (Phase 3.5). +# `effort` ∈ {low, standard, high}. 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} diff --git a/plugins/voyage/tests/fixtures/brief-with-phase-signals.md b/plugins/voyage/tests/fixtures/brief-with-phase-signals.md new file mode 100644 index 0000000..c68e37c --- /dev/null +++ b/plugins/voyage/tests/fixtures/brief-with-phase-signals.md @@ -0,0 +1,42 @@ +--- +type: trekbrief +brief_version: "2.1" +created: 2026-05-13 +task: "Add per-phase effort dialog to /trekbrief" +slug: phase-signals-example +project_dir: .claude/projects/2026-05-13-phase-signals-example/ +research_topics: 2 +research_status: complete +auto_research: false +interview_turns: 6 +source: interview +phase_signals: + - phase: research + effort: low + model: sonnet + - phase: plan + effort: standard + - phase: execute + effort: high + model: opus + - phase: review + effort: standard +--- + +# Task: Phase-signals example + +## Intent + +A minimal brief that exercises the v5.1 phase_signals additive field with a +mix of effort levels and model overrides. Used by tests/validators to confirm +the validator accepts well-formed signals across the supported tier matrix. + +## Goal + +Validator returns valid: true. annotate.mjs strips phase_signals from the +rendered HTML body (frontmatter stays in source). + +## Success Criteria + +- Validator passes. +- annotate.mjs determinism: re-run produces byte-identical HTML. diff --git a/plugins/voyage/tests/fixtures/brief-without-phase-signals.md b/plugins/voyage/tests/fixtures/brief-without-phase-signals.md new file mode 100644 index 0000000..8bec99e --- /dev/null +++ b/plugins/voyage/tests/fixtures/brief-without-phase-signals.md @@ -0,0 +1,31 @@ +--- +type: trekbrief +brief_version: "2.0" +created: 2026-05-13 +task: "Backward-compat fixture for v5.0-style brief" +slug: legacy-brief-example +project_dir: .claude/projects/2026-05-13-legacy-brief-example/ +research_topics: 0 +research_status: complete +auto_research: false +interview_turns: 3 +source: interview +--- + +# Task: Legacy brief example + +## Intent + +A pre-v5.1 brief that pre-dates the phase_signals field. Used by +tests/validators to confirm backward-compatibility: the brief is accepted +without phase_signals as long as brief_version is < 2.1. + +## Goal + +Validator returns valid: true. The sequencing gate +(BRIEF_V51_MISSING_SIGNALS) does NOT fire for brief_version 2.0. + +## Success Criteria + +- Validator passes. +- No BRIEF_V51_MISSING_SIGNALS error in r.errors.