diff --git a/.changeset/tidy-goats-wake.md b/.changeset/tidy-goats-wake.md new file mode 100644 index 000000000..0c0d774f4 --- /dev/null +++ b/.changeset/tidy-goats-wake.md @@ -0,0 +1,5 @@ +--- +type: Changed +pr: 2294 +--- +**Phase plans now lead with a verified end-to-end "tracer" slice by default** — every plan starts with one thin, production-quality slice wired through every layer, which the executor verifies before building out the remaining tasks, so an architectural dead-end surfaces after one commit instead of after ten. Pass `--no-tracer` to restore the previous horizontal-layer default; `--mvp` now layers user-story framing and the Walking Skeleton on top of the tracer-first ordering. (#1945) diff --git a/CONTEXT.md b/CONTEXT.md index c7f40e77f..deb277bd3 100644 --- a/CONTEXT.md +++ b/CONTEXT.md @@ -347,16 +347,19 @@ Second adapter of the Probe Core Module (ADR-550 Decision 7): the spec-phase pro The SINGLE source of truth for "did the phase SPEC supply section X (with at least one resolved row)?" — the SPEC-section detection seam consumed by `plan-phase` Step 7.95 (the spec-less probe fallback) to decide, per section, whether to run the fallback. Replaces the ad-hoc `awk` that previously lived in the workflow body, which hard-coded the section header strings at the call site and hand-rolled markdown-table row counting — a brittleness that produced two bugs: an exact `^## Prohibitions$` anchor that missed the canonical `## Prohibitions (must-NOT)` heading, and a single-table row-counting assumption. **Suffix-tolerant header invariant:** `SECTION_HEADERS` regexes match a heading AND any parenthetical/whitespace suffix — `prohibitions` matches both `## Prohibitions` and `## Prohibitions (must-NOT)`; `edges` matches `## Edge Coverage` (and any future suffix); if spec-phase renames a heading, update HERE and the `templates/spec.md` heading together (the contract is pinned by `tests/spec-section.test.cjs`). **Supply rule:** `supplied = present AND dataRows > 0` — a present-but-empty section is NOT supplied (it triggers the fallback). **Multi-table robustness:** a blank or prose line resets the per-table state, so a section with multiple tables (or prose between them) counts every table's data rows without miscounting a second table's header row; the `|…|` line before a `|---|` separator is the table header row and is never counted. **Fail-safe:** a missing/unreadable SPEC file resolves to `present:false` / `supplied:false` (so the fallback fires) rather than throwing. Exports (locked surface): the `SpecSectionKey` type (`edges | prohibitions`), `SECTION_HEADERS` (the canonical header matchers), the `SectionStatus` shape (`{ key, present, dataRows, supplied }`), `countSectionDataRows` (pure `specText → { present, dataRows }`), and `specSectionStatus` (disk-reading wrapper). CLI: `node spec-section.cjs ` prints `SectionStatus` JSON — exit 0 on success (an absent file is a valid "not supplied" answer), exit 2 only on a usage error (missing args / bad key). Pure and dependency-free. Source of truth: `gsd-core/bin/lib/spec-section.cjs` (generated from `src/spec-section.cts`, gitignored per ADR-457). Tests: `tests/spec-section.test.cjs`. See Edge Probe Module, Prohibition Probe Module, and `references/specless-probe-fallback.md`. ### MVP Mode -Phase-level planning mode that frames work as a vertical slice (UI → API → DB) of one user-visible capability instead of horizontal layers. Resolved at workflow init via the precedence chain: `--mvp` CLI flag → ROADMAP.md `**Mode:** mvp` field → `workflow.mvp_mode` config → false. All-or-nothing per phase (PRD #2826 Q1). Surfaced as `MVP_MODE=true|false` to the planner, executor, verifier, and discovery surfaces (progress, stats, graphify). Canonical parser: `roadmap.cjs` `**Mode:**` field; canonical resolution chain documented in `workflows/plan-phase.md`. Concept index: `references/mvp-concepts.md`. +Phase-level planning **enrichment** layered on top of the default tracer-first decomposition (see Tracer Bullet): it frames the phase goal as a User Story and, on Phase 1 of a new project, emits a Walking Skeleton. Vertical slicing itself is now the default, so MVP Mode no longer *turns it on* — it adds the user-story framing + skeleton. Resolved at workflow init via the precedence chain: `--mvp` CLI flag → ROADMAP.md `**Mode:** mvp` field → `workflow.mvp_mode` config → false. All-or-nothing per phase (PRD #2826 Q1). Surfaced as `MVP_MODE=true|false` to the planner, executor, verifier, and discovery surfaces (progress, stats, graphify). Canonical parser: `roadmap.cjs` `**Mode:**` field; canonical resolution chain documented in `workflows/plan-phase.md`. Concept index: `references/mvp-concepts.md`. ### User Story Phase-goal format under MVP Mode: `As a [role], I want to [capability], so that [outcome].` Required regex shape: `/^As a .+, I want to .+, so that .+\.$/`. Used as the framing input by `gsd-planner` (emits as bolded `## Phase Goal` header in PLAN.md) and as the verification target by `gsd-verifier` (the `[outcome]` clause is the goal-backward verification anchor). Authored interactively by `/gsd-mvp-phase`, validated by SPIDR Splitting when too large. ### Walking Skeleton -Phase 1 deliverable under `--mvp` on a new project: the thinnest end-to-end stack proving every layer (framework, DB, routing, deployment) works together. Emitted as `SKELETON.md` capturing the architectural decisions subsequent vertical slices inherit. Gate fires when `phase_number == "01"` AND `prior_summaries == 0` AND `MVP_MODE=true`. Scope intentionally narrow (PRD #2826 Q2) — does not retrofit existing projects. +Phase 1 deliverable under `--mvp` on a new project — the Phase-1 whole-application special case of a Tracer Bullet: the thinnest end-to-end stack proving every layer (framework, DB, routing, deployment) works together. Emitted as `SKELETON.md` capturing the architectural decisions subsequent vertical slices inherit. Gate fires when `phase_number == "01"` AND `prior_summaries == 0` AND `MVP_MODE=true`. Scope intentionally narrow (PRD #2826 Q2) — does not retrofit existing projects. ### Vertical Slice -Single-feature task that moves one user capability from open-to-close (happy path) end-to-end. Contrast with the horizontal layer (all models, then all APIs, then all UI). The MVP Mode planning unit; SPIDR Splitting axes (Spike, Paths, Interfaces, Data, Rules) are the canonical decomposition tools when a slice is too large for one phase. +Single-feature task that moves one user capability from open-to-close (happy path) end-to-end. Contrast with the horizontal layer (all models, then all APIs, then all UI). The default planning unit under tracer-first decomposition (the leading task is a Tracer Bullet); SPIDR Splitting axes (Spike, Paths, Interfaces, Data, Rules) are the canonical decomposition tools when a slice is too large for one phase. + +### Tracer Bullet +The default GSD decomposition lead: a **permanent, production-quality, minimal end-to-end slice** that wires one path through every layer a phase touches and becomes part of the skeleton of the final system — written for keeps, not thrown away. Contrast with a **prototype** (throwaway reconnaissance code, deleted once its lesson is learned): a tracer's *functionality* gaps are acceptable but its *architectural* gaps are not; stubs are allowed only where they can later be filled without an architectural change. GSD ships tracers, never prototypes — which is why `gsd-planner` LEADS every plan with a `type="tracer"` task (default; `--no-tracer` / `TRACER_MODE=false` opts back into horizontal layers) and `gsd-executor` runs an early integration feedback gate on the tracer's `` before expansion tasks (autonomous: halt-on-fail; interactive: `checkpoint:human-verify`). Origin: *The Pragmatic Programmer* "Tracer Bullets" (#1945); the Walking Skeleton is the Phase-1 whole-application special case. See Vertical Slice, MVP Mode, Walking Skeleton. ### Behavior-Adding Task Predicate over a PLAN.md task: `tdd="true"` frontmatter AND `` block names a user-visible outcome AND `` includes at least one non-`*.md` / non-`*.json` / non-`*.test.*` source file. Pure doc/config/test-only tasks are exempt. The MVP+TDD Gate (in `references/execute-mvp-tdd.md`) only halts execution on this predicate; the gsd-executor agent applies all three checks at runtime. Currently a prose-only specification — no shared utility. diff --git a/agents/gsd-executor.md b/agents/gsd-executor.md index f3f57169e..3e2db5fe2 100644 --- a/agents/gsd-executor.md +++ b/agents/gsd-executor.md @@ -152,11 +152,17 @@ For each task: - Commit (see task_commit_protocol) - Track completion + commit hash for Summary -2. **If `type="checkpoint:*"`:** +2. **If `type="tracer"`:** (the leading thin end-to-end slice — production-quality, never a throwaway) + - Execute and commit exactly like `type="auto"` (real implementation, real ``, atomic commit). + - **Then run the tracer feedback gate BEFORE any expansion task** — an early integration checkpoint on the proven slice: + - **Autonomous run (auto mode active — `AUTO_CHAIN` or `AUTO_CFG` is `"true"`, per ``):** re-run the tracer's `` end-to-end. If it **fails**, HALT and surface it (deviation Rule 1) — do NOT proceed to expansion tasks. Pouring more layers onto a broken foundation is exactly the failure this gate prevents. If it passes, log `⚡ Tracer verified end-to-end — expanding` and continue. + - **Interactive run (auto mode not active):** immediately after committing the tracer, STOP and return a `checkpoint:human-verify` for the tracer's `` (the working slice) using checkpoint_return_format, before any expansion task. + +3. **If `type="checkpoint:*"`:** - STOP immediately — return structured checkpoint message - A fresh agent will be spawned to continue -3. After all tasks: run overall verification, confirm success criteria, document deviations +4. After all tasks: run overall verification, confirm success criteria, document deviations @@ -310,6 +316,8 @@ For full automation-first patterns, server lifecycle, CLI handling: **Quick reference:** Users NEVER run CLI commands. Users ONLY visit URLs, click UI, evaluate visuals, provide secrets. Claude does all automation. +**Tracer feedback gate:** a `type="tracer"` task is followed by an early integration checkpoint on the proven slice (see `` → `execute_tasks`) — in autonomous runs a failing tracer `` HALTS before any expansion task; in interactive runs the executor emits a `checkpoint:human-verify` for the tracer immediately after committing it. + --- **Auto-mode checkpoint behavior** (when `AUTO_CFG` is `"true"`): diff --git a/agents/gsd-planner.md b/agents/gsd-planner.md index 18a792769..50881ec67 100644 --- a/agents/gsd-planner.md +++ b/agents/gsd-planner.md @@ -250,34 +250,33 @@ Exceptions where `tdd="true"` is not needed: `type="checkpoint:*"` tasks, config `workflow.human_verify_mode=end-of-phase`: no `checkpoint:human-verify`; use ``. -## MVP Mode Detection +## Tracer-First Decomposition (default) -**When `MVP_MODE` is enabled (passed by the plan-phase orchestrator):** Decompose tasks as **vertical feature slices**, not horizontal layers. Required reading: Read `~/.claude/gsd-core/references/planner-mvp-mode.md` for the vertical-slice rules (lazy — only on MVP runs). +**Every phase plan LEADS with one `type="tracer"` task** — the thinnest path that touches every layer the phase will modify, wired end-to-end, carrying a real runnable ``. The remaining `` are horizontal *expansion* tasks that build out from the proven slice. This is the default for **every** phase; it is not gated behind a flag. Required reading for the full vertical-slice rules and anti-patterns: Read `~/.claude/gsd-core/references/planner-mvp-mode.md`. -**Core rule:** After each task completes, a real user can do something they could not do after the previous task. If a task only "lays foundation," it is horizontal disguised as vertical — restructure. +**Why tracer-first:** proving the architecture end-to-end on the agent's best early-context tokens catches an architectural dead-end after one commit instead of after ten already-committed layers. -**Plan structure under MVP_MODE:** +**A tracer is production-quality, not a prototype.** It carries the same `` and validation as any `auto` task and becomes part of the skeleton of the final system — you write it for keeps. Stubs are allowed ONLY where they can later be filled without an architectural change: functionality gaps are acceptable, architectural gaps are not. (Glossary: `tracer bullet` vs `prototype` in `CONTEXT.md` — GSD ships tracers, never prototypes.) -1. Frame the phase goal as a user story at the top of `PLAN.md`. The user story is sourced from the `**Goal:**` line in ROADMAP.md (set by `mvp-phase`). Emit it with bolded keywords: +**Tracer task shape:** - ``` - ## Phase Goal +```xml + + End-to-end "[capability]" — one path only + [one file per layer the phase touches] + Wire ONE entry point through every layer to the far end of the stack. No other call sites, no batching. Real error handling on the single path. + [a real, runnable END-TO-END check of the one path — not a per-layer unit test] + The single happy path works end-to-end and is committed. + +``` - **As a** [user role], **I want to** [capability], **so that** [outcome]. - ``` +**Core rule (expansion tasks):** after each task a real user can do something they could not before. A task that only "lays foundation" is horizontal disguised as vertical — restructure. - Format rules (Read `~/.claude/gsd-core/references/user-story-template.md`): - - All three slots required. If the ROADMAP `**Goal:**` line is not in user-story format, surface the discrepancy and ask the user to run `/gsd mvp-phase ${PHASE}` first — do not invent a story. - - Bold the three keywords (`**As a**`, `**I want to**`, `**so that**`) when emitting to PLAN.md. The ROADMAP form does not use bolded keywords; the PLAN form does. -2. First task: failing end-to-end test for the happy path. -3. Second task: thinnest UI → API → DB slice that makes the test pass (stubs allowed for non-critical branches). -4. Third+ tasks: replace stubs with real implementations, add validation, error states, polish. +**`--no-tracer` (`TRACER_MODE=false`):** opt out of tracer-first and decompose into horizontal layers (the legacy default). Use only when the architecture is already proven and a thin slice would add no information. Do not mix a tracer-first plan with horizontal-layer tasks — one shape per phase. -**Mode is all-or-nothing per phase** (PRD decision Q1). Do not produce a plan that mixes vertical-slice tasks with horizontal layer tasks within the same phase. +**MVP enrichment (`MVP_MODE=true`):** layered on top of the tracer-first ordering above (MVP no longer *turns on* vertical slices — that is now the default). It adds: (1) frame the phase goal as a user story at the top of `PLAN.md`, sourced from the ROADMAP `**Goal:**` line, bolding `**As a**` / `**I want to**` / `**so that**` (Read `~/.claude/gsd-core/references/user-story-template.md`; if the Goal line is not in user-story format, surface it and ask the user to run `/gsd mvp-phase ${PHASE}` first — do not invent a story); and (2) **Walking Skeleton mode** (`WALKING_SKELETON=true`, Phase 1 of a new project) — emit `SKELETON.md` from `~/.claude/gsd-core/references/skeleton-template.md` alongside `PLAN.md`. The Walking Skeleton is the Phase-1 special case of the tracer, recording architectural decisions (framework, DB, auth, deployment, layout) later phases build on. -**Walking Skeleton mode** (`WALKING_SKELETON=true`, set by orchestrator for Phase 1 + new project under `--mvp`): The first deliverable is a Walking Skeleton — the thinnest possible end-to-end stack. In addition to `PLAN.md`, produce `SKELETON.md` using the template at `~/.claude/gsd-core/references/skeleton-template.md` (Read it now). `SKELETON.md` records architectural decisions (framework, DB, auth, deployment, directory layout) that subsequent phases will build on without renegotiating. - -**Compatibility with TDD detection:** When both `MVP_MODE=true` and `workflow.tdd_mode=true`, every behavior-adding task uses `tdd="true"` and a `` block, AND the task ordering follows the vertical-slice structure above. The first task is always a failing end-to-end test. +**TDD composition (`workflow.tdd_mode=true`):** the leading tracer task is `type="tracer"` and starts red — its first move is a failing end-to-end test for the happy path — and every behavior-adding expansion task uses `tdd="true"` with a `` block. See @~/.claude/gsd-core/references/planner-guidance.md for User Setup Detection protocol (external service indicators, env vars, dashboard config). @@ -768,6 +767,8 @@ At decision points during plan creation, apply structured reasoning: Decompose phase into tasks. **Think dependencies first, not sequence.** +**Lead with the tracer.** Unless `TRACER_MODE=false` (`--no-tracer`), the FIRST task is a `type="tracer"` slice (see **Tracer-First Decomposition**) wiring one path through every layer the phase touches, end-to-end, with a real ``; the remaining tasks expand out from that proven slice. + For each task: 1. What does it NEED? (files, types, APIs that must exist) 2. What does it CREATE? (files, types, APIs others might need) diff --git a/commands/gsd/plan-phase.md b/commands/gsd/plan-phase.md index 61396ce2e..bf7ef82db 100644 --- a/commands/gsd/plan-phase.md +++ b/commands/gsd/plan-phase.md @@ -1,7 +1,7 @@ --- name: gsd:plan-phase description: Create detailed phase plan (PLAN.md) with verification loop -argument-hint: "[phase] [--auto] [--research] [--skip-research] [--research-phase ] [--view] [--gaps] [--skip-verify] [--prd ] [--ingest ] [--ingest-format ] [--reviews] [--text] [--tdd] [--mvp]" +argument-hint: "[phase] [--auto] [--research] [--skip-research] [--research-phase ] [--view] [--gaps] [--skip-verify] [--prd ] [--ingest ] [--ingest-format ] [--reviews] [--text] [--tdd] [--mvp] [--no-tracer]" effort: max allowed-tools: - Read @@ -52,7 +52,8 @@ Phase number: $ARGUMENTS (optional — auto-detects next unplanned phase if omit - `--ingest-format ` — Optional ADR parser format override (`auto` default). - `--reviews` — Replan incorporating cross-AI review feedback from REVIEWS.md (produced by `/gsd:review`) - `--text` — Use plain-text numbered lists instead of TUI menus (required for `/rc` remote sessions) -- `--mvp` — Vertical MVP mode. Planner organizes tasks as feature slices (UI→API→DB) instead of horizontal layers. On Phase 1 of a new project, also emits `SKELETON.md` (Walking Skeleton). Can be persisted on a phase via `**Mode:** mvp` in ROADMAP.md. +- `--mvp` — MVP enrichment on top of the default tracer-first ordering: frames the phase goal as a user story and, on Phase 1 of a new project, also emits `SKELETON.md` (Walking Skeleton). Vertical slicing itself is now the default (see `--no-tracer`); `--mvp` no longer *turns it on*. Can be persisted on a phase via `**Mode:** mvp` in ROADMAP.md. +- `--no-tracer` — Opt out of the default **tracer-first** decomposition and plan horizontal layers (the legacy default). By default every plan LEADS with one production-quality end-to-end `tracer` slice that is verified before any expansion task. Normalize phase input in step 2 before any directory lookups. diff --git a/docs/AGENTS.md b/docs/AGENTS.md index 7040a6a42..5ad517c52 100644 --- a/docs/AGENTS.md +++ b/docs/AGENTS.md @@ -215,7 +215,8 @@ GSD uses a multi-agent architecture where thin orchestrators (workflow files) sp - Fresh 200K context window per plan - Follows XML task instructions precisely - Atomic git commit per completed task -- Handles checkpoint types: auto, human-verify, decision, human-action +- Handles task types: auto, tracer, checkpoint (human-verify, decision, human-action) +- Tracer feedback gate: after a `tracer` slice, verifies it end-to-end before expansion tasks — autonomous runs halt on failure; interactive runs emit a human-verify checkpoint - Reports deviations from plan in SUMMARY.md - Invokes node repair on verification failure diff --git a/docs/COMMANDS.md b/docs/COMMANDS.md index 22216ff54..1f50dc0f2 100644 --- a/docs/COMMANDS.md +++ b/docs/COMMANDS.md @@ -211,8 +211,9 @@ Research, plan, and verify a phase. | `--validate` | Run state validation before planning begins | | `--bounce` | Run external plan bounce validation after planning (uses `workflow.plan_bounce_script`) | | `--skip-bounce` | Skip plan bounce even if enabled in config | -| `--mvp` | Vertical MVP mode — planner organizes tasks as feature slices (UI→API→DB) instead of horizontal layers. On Phase 1 of a new project with no prior phase summaries, also emits `SKELETON.md` (Walking Skeleton). Can be persisted on a phase via `**Mode:** mvp` in ROADMAP.md, which applies `--mvp` automatically without the flag. | -| `--tdd` | TDD mode — planner applies `type: tdd` to eligible behavior-adding tasks so each begins with a failing test. Composable with `--mvp`: `--mvp --tdd` produces vertical slices where every behavior-adding task starts red-green. | +| `--mvp` | MVP enrichment on top of the default tracer-first ordering — frames the phase goal as a user story and, on Phase 1 of a new project with no prior phase summaries, also emits `SKELETON.md` (Walking Skeleton). Vertical slicing is now the default (see `--no-tracer`); `--mvp` no longer turns it on. Can be persisted on a phase via `**Mode:** mvp` in ROADMAP.md, which applies `--mvp` automatically without the flag. | +| `--no-tracer` | Opt out of the default **tracer-first** decomposition and plan horizontal layers (the legacy default). By default every plan leads with one production-quality end-to-end `tracer` slice that the executor verifies before any expansion task. | +| `--tdd` | TDD mode — planner applies `type: tdd` to eligible behavior-adding tasks so each begins with a failing test. Composable with `--mvp`: `--mvp --tdd` produces vertical slices where every behavior-adding task starts red-green. The leading `tracer` task also starts red under `--tdd`. | | `--granularity ` | Override the planning granularity for this invocation, ignoring config. Valid values: `coarse`, `standard`, `fine`. Takes precedence over `granularities.planning`, top-level `granularity`, and `planning.granularity` config. | **Prerequisites:** `.planning/ROADMAP.md` exists diff --git a/docs/how-to/plan-a-phase.md b/docs/how-to/plan-a-phase.md index ea95a71c5..94b60d908 100644 --- a/docs/how-to/plan-a-phase.md +++ b/docs/how-to/plan-a-phase.md @@ -78,17 +78,23 @@ If you want this granularity applied permanently, set it in config — see [CONF --- -## Plan vertical feature slices instead of horizontal layers +## Tracer-first slices (the default) and opting out -**If you want tasks organised as thin end-to-end slices** (UI → API → DB per feature) rather than by technical layer: +**By default, every plan leads with a `tracer` task** — the thinnest end-to-end slice (UI → API → DB) that touches every layer the phase modifies, wired and verified before any expansion task. A tracer is production-quality, not a throwaway prototype (see the `tracer bullet` glossary entry in `CONTEXT.md`). This proves the architecture early instead of discovering an integration dead-end after ten committed layers. + +To opt out and plan horizontal layers (the legacy default): + +```bash +/gsd-plan-phase 1 --no-tracer +``` + +`--mvp` layers MVP enrichment on top of tracer-first — it frames the phase goal as a user story and, on Phase 1 of a new project with no prior phase summaries, also produces `SKELETON.md` (a Walking Skeleton covering project scaffold, routing, one real DB read/write, one real UI interaction, and dev deployment): ```bash /gsd-plan-phase 1 --mvp ``` -On Phase 1 of a new project with no prior phase summaries, `--mvp` also produces `SKELETON.md` — a Walking Skeleton covering project scaffold, routing, one real DB read/write, one real UI interaction, and dev deployment. - -You can persist MVP mode for a phase without the flag by adding `**Mode:** mvp` to that phase's entry in ROADMAP.md. +You can persist MVP enrichment for a phase without the flag by adding `**Mode:** mvp` to that phase's entry in ROADMAP.md. --- diff --git a/docs/reference/plan-md.md b/docs/reference/plan-md.md index a76197027..3455c8b4d 100644 --- a/docs/reference/plan-md.md +++ b/docs/reference/plan-md.md @@ -144,7 +144,7 @@ References source files the executor needs to read. Includes project-level plann ### `` -Contains one or more `` elements. Every task element must carry ``, ``, ``, ``, ``, ``, and `` for `type="auto"` tasks. +Contains one or more `` elements. Every task element must carry ``, ``, ``, ``, ``, ``, and `` for `type="auto"` and `type="tracer"` tasks. --- @@ -153,6 +153,7 @@ Contains one or more `` elements. Every task element must carry ``, | Type | Use | Autonomy | |---|---|---| | `auto` | Everything the executor can do independently. | Fully autonomous. | +| `tracer` | The leading thin end-to-end slice a plan starts with by default (tracer-first) — production-quality, wired through every layer, with a real end-to-end ``. | Fully autonomous; after committing, the executor runs the tracer's `` as an early integration gate — autonomous runs halt on failure before expansion, interactive runs present a `checkpoint:human-verify`. | | `checkpoint:human-verify` | Visual or functional verification that requires a human to look at a running UI or service. | Pauses execution; presents to the developer; resumes on approval. | | `checkpoint:decision` | Implementation choices that arose during execution and require the developer's input. | Pauses execution; presents options; resumes on selection. | | `checkpoint:human-action` | Truly unavoidable manual steps (account creation, hardware interaction). Used sparingly. | Pauses execution; resumes on confirmation. | diff --git a/gsd-core/references/planner-mvp-mode.md b/gsd-core/references/planner-mvp-mode.md index e55020f90..4c697c026 100644 --- a/gsd-core/references/planner-mvp-mode.md +++ b/gsd-core/references/planner-mvp-mode.md @@ -1,32 +1,31 @@ -# Planner — MVP Mode (Vertical Slice Strategy) +# Planner — Tracer-First Decomposition (Vertical Slices) -> Loaded by `gsd-planner` only when `MVP_MODE=true`. Standard horizontal-layer planning rules continue to apply for all other phases. +> Loaded by `gsd-planner` for the **default** tracer-first decomposition: every phase LEADS with one thin end-to-end `type="tracer"` slice, then expansion tasks. `--no-tracer` (`TRACER_MODE=false`) restores standard horizontal-layer planning. The MVP enrichment (user-story framing) and Walking Skeleton mode apply *on top* when `MVP_MODE=true` / `WALKING_SKELETON=true`. ## Core Rule **Decompose by feature slice, not by technical layer.** Every task must move the user-facing capability forward. After each task, a real user can click through more of the feature than they could before. -**Forbidden** in MVP mode: +**Forbidden** under tracer-first: - "Create the database schema" as a standalone task - "Build the API layer" as a standalone task - "Wire up the UI" as a final integration task -**Required** in MVP mode: -- The first non-test task produces a working end-to-end path. Stubs are allowed for non-critical branches; the happy path must be real. -- Each subsequent task either adds a new slice OR refines an existing slice (validation, error states, edge cases). -- The phase goal is framed as a user story: "**As a** [user], **I want to** [do X], **so that** [Y]." +**Required** under tracer-first: +- The leading `tracer` task produces a working end-to-end path — production-quality, not a prototype. Stubs are allowed ONLY where they can later be filled without an architectural change; the happy path must be real. +- Each subsequent expansion task either adds a new slice OR refines an existing slice (validation, error states, edge cases). +- *(MVP enrichment, `MVP_MODE=true`)* The phase goal is framed as a user story: "**As a** [user], **I want to** [do X], **so that** [Y]." ## Task Order Pattern For a feature `F`: -1. **Failing end-to-end test** for the happy path of `F`. -2. **Thinnest viable slice** — UI form → API endpoint → DB read/write — that makes the test pass. Hard-coded values, missing validation, no error states are fine here. -3. **Real data layer** — replace any stubs from Task 2 with real queries. -4. **Validation + error states** — invalid input, network failure, empty states. -5. **Production polish** — loading indicators, edge cases, accessibility checks. +1. **Tracer slice** — the thinnest end-to-end path (UI form → API endpoint → DB read/write), wired through every layer with a real runnable ``. This task is always `type="tracer"`; production-quality, not a prototype; stubs only where later-fillable without an architectural change. Under `--tdd` it *also* starts red — its first move is a failing end-to-end test for the happy path of `F`. +2. **Real data layer** — replace any stubs from the tracer with real queries. +3. **Validation + error states** — invalid input, network failure, empty states. +4. **Production polish** — loading indicators, edge cases, accessibility checks. -Tasks 3-5 are not always all needed; gate by the phase's acceptance criteria. +Tasks 2-4 are not always all needed; gate by the phase's acceptance criteria. ## Walking Skeleton Mode (`WALKING_SKELETON=true`) diff --git a/gsd-core/references/skeleton-template.md b/gsd-core/references/skeleton-template.md index 95188921a..86c624366 100644 --- a/gsd-core/references/skeleton-template.md +++ b/gsd-core/references/skeleton-template.md @@ -1,6 +1,6 @@ # SKELETON.md Template -> Emitted by `gsd-planner` when `WALKING_SKELETON=true` (Phase 1 + `--mvp` + new project). Records the architectural decisions the rest of the project will build on. +> Emitted by `gsd-planner` when `WALKING_SKELETON=true` (Phase 1 + `--mvp` + new project). The Walking Skeleton is the **Phase-1 special case of the tracer** — a whole-application tracer slice — so it records the architectural decisions the rest of the project's later tracer slices build on. ```markdown # Walking Skeleton — [Project Name] diff --git a/gsd-core/workflows/execute-plan.md b/gsd-core/workflows/execute-plan.md index 3bfa399c0..a35a8428d 100644 --- a/gsd-core/workflows/execute-plan.md +++ b/gsd-core/workflows/execute-plan.md @@ -189,6 +189,7 @@ Deviations are normal — handle via rules below. 3. Per task: - **MANDATORY read_first gate:** If the task has a `` field, you MUST read every listed file BEFORE making any edits. This is not optional. Do not skip files because you "already know" what's in them — read them. The read_first files establish ground truth for the task. - `type="auto"`: if `tdd="true"` → TDD execution. Implement with deviation rules + auth gates. Verify done criteria. Commit (see task_commit). Track hash for Summary. + - `type="tracer"`: execute like `type="auto"` (production-quality, real ``, commit), then run the tracer feedback gate BEFORE any expansion task — an early integration checkpoint. Auto mode active (`AUTO_CHAIN` or `AUTO_CFG`): re-run the tracer ``; on failure HALT and surface (deviation) — do NOT start expansion tasks. Interactive: STOP → return a `checkpoint:human-verify` for the tracer via checkpoint_protocol before expansion. - `type="checkpoint:*"`: STOP → checkpoint_protocol → wait for user → continue only after confirmation. - **HARD GATE — acceptance_criteria verification:** After completing each task, if it has ``, you MUST run a verification loop before proceeding: 1. For each criterion: execute the grep, file check, or CLI command that proves it passes diff --git a/gsd-core/workflows/help/modes/full.md b/gsd-core/workflows/help/modes/full.md index 235fae38d..534777bdf 100644 --- a/gsd-core/workflows/help/modes/full.md +++ b/gsd-core/workflows/help/modes/full.md @@ -105,7 +105,7 @@ Usage: `/gsd:discuss-phase 2` Usage: `/gsd:discuss-phase 2 --batch` Usage: `/gsd:discuss-phase 2 --batch=3` -**`/gsd:plan-phase [--research] [--skip-research] [--research-phase ] [--view] [--gaps] [--skip-verify] [--prd ] [--ingest ] [--ingest-format ] [--reviews] [--text] [--tdd] [--mvp]`** +**`/gsd:plan-phase [--research] [--skip-research] [--research-phase ] [--view] [--gaps] [--skip-verify] [--prd ] [--ingest ] [--ingest-format ] [--reviews] [--text] [--tdd] [--mvp] [--no-tracer]`** Create detailed execution plan for a specific phase. - `--skip-research` — bypass the research subagent @@ -116,7 +116,8 @@ Create detailed execution plan for a specific phase. - `--ingest ` — pre-ingest external ADRs/PRDs/SPECs before planning (see *PRD Express Path* below) - `--ingest-format ` — hint the ADR ingester's parser when `--ingest` is set; defaults to `auto` - `--tdd` — plan in test-driven order (tests before code) -- `--mvp` — vertical-slice MVP planning mode (see also `/gsd:mvp-phase`) +- `--mvp` — MVP enrichment (user story + Walking Skeleton) on top of the default tracer-first ordering (see also `/gsd:mvp-phase`) +- `--no-tracer` — opt out of the default tracer-first slice and plan horizontal layers (legacy default) - Generates `.planning/phases/XX-phase-name/XX-YY-PLAN.md` - Breaks phase into concrete, actionable tasks diff --git a/gsd-core/workflows/plan-phase.md b/gsd-core/workflows/plan-phase.md index 28cc487dd..626d89803 100644 --- a/gsd-core/workflows/plan-phase.md +++ b/gsd-core/workflows/plan-phase.md @@ -95,7 +95,7 @@ Read and execute `gsd-core/workflows/plan-phase/steps/closed-phase-gate.md` — ## 2. Parse and Normalize Arguments -Extract from $ARGUMENTS: phase number (integer or decimal like `2.1`), flags (`--research`, `--skip-research`, `--research-phase `, `--gaps`, `--skip-verify`, `--skip-ui`, `--prd `, `--ingest `, `--ingest-format `, `--reviews`, `--text`, `--bounce`, `--skip-bounce`, `--chunked`, `--mvp`, `--tdd`, `--granularity `, `--force` (override closed-phase gate, see §1.5)). +Extract from $ARGUMENTS: phase number (integer or decimal like `2.1`), flags (`--research`, `--skip-research`, `--research-phase `, `--gaps`, `--skip-verify`, `--skip-ui`, `--prd `, `--ingest `, `--ingest-format `, `--reviews`, `--text`, `--bounce`, `--skip-bounce`, `--chunked`, `--mvp`, `--no-tracer`, `--tdd`, `--granularity `, `--force` (override closed-phase gate, see §1.5)). **`--research-phase ` — research-only mode (#3042 + #3044).** When this flag is present, parse `` as the phase number (overrides any positional phase argument), set `RESEARCH_ONLY=true`, and treat the rest of this workflow as a research-dispatch only — the planner spawn (step 8), plan-checker, verification, gaps, bounce, and post-planning-gaps blocks all skip on `RESEARCH_ONLY`. Use this for cross-phase research, doc review before committing to a planning approach, and correction-without-replanning loops. Replaces the deleted `/gsd-research-phase` command. @@ -128,8 +128,13 @@ if [[ "$ARGUMENTS" =~ (^|[[:space:]])--mvp([[:space:]]|$) ]]; then MVP_FLAG_ARG= if [[ "$ARGUMENTS" =~ (^|[[:space:]])--tdd([[:space:]]|$) ]]; then gsd_run query config-set workflow.tdd_mode true 2>/dev/null || true fi +# Tracer-first is the default; --no-tracer opts back into the legacy horizontal-layer shape. +TRACER_MODE=true +if [[ "$ARGUMENTS" =~ (^|[[:space:]])--no-tracer([[:space:]]|$) ]]; then TRACER_MODE=false; fi ``` +**Tracer-first resolution.** `TRACER_MODE` defaults to `true` — every plan LEADS with one `type="tracer"` end-to-end slice, then expansion tasks. `--no-tracer` sets `TRACER_MODE=false` to restore the legacy horizontal-layer default. Unlike `MVP_MODE`, tracer-first is not a persisted per-phase mode — it is the baseline decomposition discipline, so there is no roadmap/config chain to consult. + Defer the `phase.mvp-mode` query until `PHASE` is finalized (after explicit argument parsing/fallback phase detection + validation). The verb returns `true|false`; full result also exposes `source` (`cli_flag` | `roadmap` | `config` | `none`) for diagnostics. Mode is **all-or-nothing per phase** (PRD decision Q1). **Walking Skeleton gate.** When `MVP_MODE=true` AND `phase_number == "01"` AND there are zero prior phase summaries (new project), the planner runs in **Walking Skeleton mode** (per PRD decision Q2 — new projects only). Detect with: @@ -777,6 +782,7 @@ Historical findings already incorporated, explicitly deferred/rejected in PLAN.m {For each active entry in `PLAN_PRE_HOOKS_JSON` where `kind == "contribution"` and `into == "planner"` (in array order): inject the entry's `fragment.inline` verbatim here. This delivers all planner-targeted contributions — including tdd's `` block (type:tdd heuristics), schema-gate's schema-push detection guidance (if active at plan:pre), and security's threat-model guidance. For the security contribution, also surface the resolved `configValues`: `security_asvs_level` (ASVS enforcement level) and `security_block_on` (severity threshold) so the planner uses the configured values when generating `` blocks. If no active planner contributions exist, omit this block entirely.} +**TRACER_MODE:** ${TRACER_MODE} (when true — the default — the plan LEADS with one `type="tracer"` end-to-end slice touching every layer, then expansion tasks; when false (`--no-tracer`), decompose into horizontal layers.) **MVP_MODE:** ${MVP_MODE} (when true, follow vertical-slice rules from `~/.claude/gsd-core/references/planner-mvp-mode.md`; when false, ignore MVP guidance entirely.) **WALKING_SKELETON:** ${WALKING_SKELETON} (when true, the first deliverable must be a Walking Skeleton — Read the template at `~/.claude/gsd-core/references/skeleton-template.md` and produce SKELETON.md alongside PLAN.md.) **Granularity:** {granularity} diff --git a/skills/gsd-plan-phase/SKILL.md b/skills/gsd-plan-phase/SKILL.md index 17a553d1a..4d911579d 100644 --- a/skills/gsd-plan-phase/SKILL.md +++ b/skills/gsd-plan-phase/SKILL.md @@ -1,7 +1,7 @@ --- name: gsd-plan-phase description: "Create detailed phase plan (PLAN.md) with verification loop" -argument-hint: "[phase] [--auto] [--research] [--skip-research] [--research-phase ] [--view] [--gaps] [--skip-verify] [--prd ] [--ingest ] [--ingest-format ] [--reviews] [--text] [--tdd] [--mvp]" +argument-hint: "[phase] [--auto] [--research] [--skip-research] [--research-phase ] [--view] [--gaps] [--skip-verify] [--prd ] [--ingest ] [--ingest-format ] [--reviews] [--text] [--tdd] [--mvp] [--no-tracer]" effort: max allowed-tools: - Read @@ -52,7 +52,8 @@ Phase number: $ARGUMENTS (optional — auto-detects next unplanned phase if omit - `--ingest-format ` — Optional ADR parser format override (`auto` default). - `--reviews` — Replan incorporating cross-AI review feedback from REVIEWS.md (produced by `/gsd-review`) - `--text` — Use plain-text numbered lists instead of TUI menus (required for `/rc` remote sessions) -- `--mvp` — Vertical MVP mode. Planner organizes tasks as feature slices (UI→API→DB) instead of horizontal layers. On Phase 1 of a new project, also emits `SKELETON.md` (Walking Skeleton). Can be persisted on a phase via `**Mode:** mvp` in ROADMAP.md. +- `--mvp` — MVP enrichment on top of the default tracer-first ordering: frames the phase goal as a user story and, on Phase 1 of a new project, also emits `SKELETON.md` (Walking Skeleton). Vertical slicing itself is now the default (see `--no-tracer`); `--mvp` no longer *turns it on*. Can be persisted on a phase via `**Mode:** mvp` in ROADMAP.md. +- `--no-tracer` — Opt out of the default **tracer-first** decomposition and plan horizontal layers (the legacy default). By default every plan LEADS with one production-quality end-to-end `tracer` slice that is verified before any expansion task. Normalize phase input in step 2 before any directory lookups. diff --git a/tests/agent-size-baseline.json b/tests/agent-size-baseline.json index 84ec93622..afcc1cdad 100644 --- a/tests/agent-size-baseline.json +++ b/tests/agent-size-baseline.json @@ -14,7 +14,7 @@ "gsd-domain-researcher.md": 7032, "gsd-eval-auditor.md": 12496, "gsd-eval-planner.md": 7008, - "gsd-executor.md": 43973, + "gsd-executor.md": 45338, "gsd-framework-selector.md": 6778, "gsd-integration-checker.md": 15238, "gsd-intel-updater.md": 18166, @@ -23,7 +23,7 @@ "gsd-pattern-mapper.md": 12487, "gsd-phase-researcher.md": 40866, "gsd-plan-checker.md": 44780, - "gsd-planner.md": 48191, + "gsd-planner.md": 49314, "gsd-project-researcher.md": 22242, "gsd-research-synthesizer.md": 13847, "gsd-roadmapper.md": 22273, diff --git a/tests/fixtures/golden-install-parity/antigravity.json b/tests/fixtures/golden-install-parity/antigravity.json index 0f8f25708..51ca81c9a 100644 --- a/tests/fixtures/golden-install-parity/antigravity.json +++ b/tests/fixtures/golden-install-parity/antigravity.json @@ -16,7 +16,7 @@ "agents/gsd-domain-researcher.md": "1db46cac3f4d9889", "agents/gsd-eval-auditor.md": "1b8391f1aafb067f", "agents/gsd-eval-planner.md": "3d10fd11147f6857", - "agents/gsd-executor.md": "6b7b461429de7d35", + "agents/gsd-executor.md": "5dc97b2515b36731", "agents/gsd-framework-selector.md": "daa62c79619c76bf", "agents/gsd-integration-checker.md": "0643cd2d779b131c", "agents/gsd-intel-updater.md": "26c1f1e028c6346a", @@ -25,7 +25,7 @@ "agents/gsd-pattern-mapper.md": "e62ee90d39084802", "agents/gsd-phase-researcher.md": "cff1196c8e8bb4fa", "agents/gsd-plan-checker.md": "dd1e7cdc837d8f3e", - "agents/gsd-planner.md": "b6d821f77fd8d7bd", + "agents/gsd-planner.md": "c5de6bb9b277e4d4", "agents/gsd-project-researcher.md": "85de7f562872ee9b", "agents/gsd-research-synthesizer.md": "18a2e1b30ff7ae3a", "agents/gsd-roadmapper.md": "7a8465ac6d4dd29e", @@ -105,7 +105,7 @@ "gsd-core/references/planner-human-verify-mode.md": "676e43b03af6b25b", "gsd-core/references/planner-interface-context.md": "b28fa3da6ae739a8", "gsd-core/references/planner-load-graph-context.md": "90cb2ecd1f3eb4d8", - "gsd-core/references/planner-mvp-mode.md": "343b859a60bcd15e", + "gsd-core/references/planner-mvp-mode.md": "cdac9dde7cd8fa84", "gsd-core/references/planner-reviews.md": "da39eace09a10743", "gsd-core/references/planner-revision.md": "86ba8a511f081f05", "gsd-core/references/planner-source-audit.md": "7de5bdb07232ce0b", @@ -123,7 +123,7 @@ "gsd-core/references/revision-loop.md": "e55ff32dd98c63df", "gsd-core/references/scout-codebase.md": "ba266ecc18fbf172", "gsd-core/references/security-asvs-levels.md": "4774fac3b94b6ca8", - "gsd-core/references/skeleton-template.md": "528691d1f0efa878", + "gsd-core/references/skeleton-template.md": "f11e9cd2948bd33c", "gsd-core/references/sketch-interactivity.md": "7d982fe877e1e1cc", "gsd-core/references/sketch-theme-system.md": "33e2e96e450456f8", "gsd-core/references/sketch-tooling.md": "df6c4f24c1c27611", @@ -239,7 +239,7 @@ "gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "9b7107b31b60a3b9", "gsd-core/workflows/execute-phase/steps/regression-gate.md": "e0fa99178ae544f0", "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e", - "gsd-core/workflows/execute-plan.md": "907af77eafc3d97b", + "gsd-core/workflows/execute-plan.md": "dea5df2e142f66bd", "gsd-core/workflows/explore.md": "934c00f9f216dbdb", "gsd-core/workflows/extract-learnings.md": "167ea7f0e23bf496", "gsd-core/workflows/fast.md": "568e6c3ec00b6e00", @@ -249,7 +249,7 @@ "gsd-core/workflows/help.md": "5d040504b9ab35e3", "gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3", "gsd-core/workflows/help/modes/default.md": "be05e56b2c5ee2c0", - "gsd-core/workflows/help/modes/full.md": "c8ffd141e28f5111", + "gsd-core/workflows/help/modes/full.md": "bf7b148215259e6e", "gsd-core/workflows/help/modes/topic.md": "0bf9ab39d7044d69", "gsd-core/workflows/import.md": "41c62ae199209a68", "gsd-core/workflows/inbox.md": "a448220c548f27bc", @@ -271,7 +271,7 @@ "gsd-core/workflows/onboard.md": "69d871aa53a1a859", "gsd-core/workflows/pause-work.md": "564de32981a24337", "gsd-core/workflows/plan-milestone-gaps.md": "dd6a4b3a8b05ab6e", - "gsd-core/workflows/plan-phase.md": "40eecc5a8817b9f2", + "gsd-core/workflows/plan-phase.md": "c8d8e646fccd4bd3", "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "4099ef6d0868de60", "gsd-core/workflows/plan-phase/steps/prd-express-path.md": "ab0b22244c3389aa", "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "e9de7a96bbfff261", @@ -397,7 +397,7 @@ "skills/gsd-onboard/SKILL.md": "1447665c64c8ade8", "skills/gsd-pause-work/SKILL.md": "9d3cc6bd70b03df1", "skills/gsd-phase/SKILL.md": "00676bbea61410bf", - "skills/gsd-plan-phase/SKILL.md": "168046ccf9702532", + "skills/gsd-plan-phase/SKILL.md": "8439b569426ff621", "skills/gsd-plan-review-convergence/SKILL.md": "af6ed50b242c64b7", "skills/gsd-pr-branch/SKILL.md": "5e050db73988f9a8", "skills/gsd-profile-user/SKILL.md": "10f2ff4be2e7d55f", diff --git a/tests/fixtures/golden-install-parity/augment.json b/tests/fixtures/golden-install-parity/augment.json index 4dbbee033..c630aa354 100644 --- a/tests/fixtures/golden-install-parity/augment.json +++ b/tests/fixtures/golden-install-parity/augment.json @@ -16,7 +16,7 @@ "agents/gsd-domain-researcher.md": "671c9ea949889c4a", "agents/gsd-eval-auditor.md": "fcaec7b00f94c435", "agents/gsd-eval-planner.md": "a4a5b4b3f7828ba3", - "agents/gsd-executor.md": "ed2c39fa8c03d056", + "agents/gsd-executor.md": "2df526331a77b2aa", "agents/gsd-framework-selector.md": "4b77eebbe9288d80", "agents/gsd-integration-checker.md": "fa53e2d78be1de74", "agents/gsd-intel-updater.md": "fa40e685d7441ace", @@ -25,7 +25,7 @@ "agents/gsd-pattern-mapper.md": "43c6021cf7caabfa", "agents/gsd-phase-researcher.md": "f1f6fd6a3e67c7a8", "agents/gsd-plan-checker.md": "bf1a4e636f2390de", - "agents/gsd-planner.md": "6e8c76da9804ac42", + "agents/gsd-planner.md": "4614c9f6250d08d4", "agents/gsd-project-researcher.md": "4531b7cc8f5e5f7d", "agents/gsd-research-synthesizer.md": "4a4f68e6c75b133a", "agents/gsd-roadmapper.md": "bb2f57695dbab32c", @@ -79,7 +79,7 @@ "commands/gsd-onboard.md": "1e8acf7be31834be", "commands/gsd-pause-work.md": "4fb032f72238fe33", "commands/gsd-phase.md": "4920d15d779329eb", - "commands/gsd-plan-phase.md": "e74f3cb7a10cbb83", + "commands/gsd-plan-phase.md": "d467c713ea161e9e", "commands/gsd-plan-review-convergence.md": "3e4aff8f9ec6f8d8", "commands/gsd-pr-branch.md": "e168fcd545d72d0d", "commands/gsd-profile-user.md": "ffd9c2feb4c69f11", @@ -176,7 +176,7 @@ "gsd-core/references/planner-human-verify-mode.md": "56d05e841630b3f4", "gsd-core/references/planner-interface-context.md": "b28fa3da6ae739a8", "gsd-core/references/planner-load-graph-context.md": "ca7a7af3f35ae61b", - "gsd-core/references/planner-mvp-mode.md": "ec33050db81101a8", + "gsd-core/references/planner-mvp-mode.md": "cfd535c9c545e73e", "gsd-core/references/planner-reviews.md": "dda0193a0fbd4947", "gsd-core/references/planner-revision.md": "86ba8a511f081f05", "gsd-core/references/planner-source-audit.md": "7de5bdb07232ce0b", @@ -194,7 +194,7 @@ "gsd-core/references/revision-loop.md": "e55ff32dd98c63df", "gsd-core/references/scout-codebase.md": "ba266ecc18fbf172", "gsd-core/references/security-asvs-levels.md": "4774fac3b94b6ca8", - "gsd-core/references/skeleton-template.md": "528691d1f0efa878", + "gsd-core/references/skeleton-template.md": "f11e9cd2948bd33c", "gsd-core/references/sketch-interactivity.md": "7d982fe877e1e1cc", "gsd-core/references/sketch-theme-system.md": "33e2e96e450456f8", "gsd-core/references/sketch-tooling.md": "df6c4f24c1c27611", @@ -310,7 +310,7 @@ "gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "811b6d8489571581", "gsd-core/workflows/execute-phase/steps/regression-gate.md": "8ccc16a6c7cf6000", "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e", - "gsd-core/workflows/execute-plan.md": "2c412310dce31a0b", + "gsd-core/workflows/execute-plan.md": "7bc87fa99a1f9b0e", "gsd-core/workflows/explore.md": "6c04f2e658d93261", "gsd-core/workflows/extract-learnings.md": "b6f01ca3d8f58de4", "gsd-core/workflows/fast.md": "11f5cd10ae5cc7d3", @@ -320,7 +320,7 @@ "gsd-core/workflows/help.md": "5d040504b9ab35e3", "gsd-core/workflows/help/modes/brief.md": "924860e1f07defb0", "gsd-core/workflows/help/modes/default.md": "08a02976c0c5cc50", - "gsd-core/workflows/help/modes/full.md": "fc307cb77544df1d", + "gsd-core/workflows/help/modes/full.md": "b26853b9911ad97b", "gsd-core/workflows/help/modes/topic.md": "5c160093f3cbf35d", "gsd-core/workflows/import.md": "3d3fa603ceb8bc9f", "gsd-core/workflows/inbox.md": "437f981ef9ae7b26", @@ -342,7 +342,7 @@ "gsd-core/workflows/onboard.md": "6f9e6c0b484271a9", "gsd-core/workflows/pause-work.md": "f2b33bba5593d422", "gsd-core/workflows/plan-milestone-gaps.md": "852f6d7c0c4299dc", - "gsd-core/workflows/plan-phase.md": "a1057033055542a3", + "gsd-core/workflows/plan-phase.md": "3fd22c43ad1fcc90", "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "b36f77ac7344a072", "gsd-core/workflows/plan-phase/steps/prd-express-path.md": "197c0590326371b2", "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "49f58c3f75be3eb5", @@ -488,7 +488,7 @@ "skills/gsd-ns-workflow/skills/mvp-phase/SKILL.md": "f259f089a8d07a54", "skills/gsd-ns-workflow/skills/next/SKILL.md": "e7409245f1a0f9de", "skills/gsd-ns-workflow/skills/phase/SKILL.md": "fe5b26417ee466be", - "skills/gsd-ns-workflow/skills/plan-phase/SKILL.md": "8cf23ecd6ac98069", + "skills/gsd-ns-workflow/skills/plan-phase/SKILL.md": "99a229cf1b4fb7ee", "skills/gsd-ns-workflow/skills/plan-review-convergence/SKILL.md": "93f68cc6a36de7f2", "skills/gsd-ns-workflow/skills/progress/SKILL.md": "68bda87136db9fb3", "skills/gsd-ns-workflow/skills/quick/SKILL.md": "014dec52d85dcb0e", diff --git a/tests/fixtures/golden-install-parity/claude-local.json b/tests/fixtures/golden-install-parity/claude-local.json index eee99afdf..bdc8ffa22 100644 --- a/tests/fixtures/golden-install-parity/claude-local.json +++ b/tests/fixtures/golden-install-parity/claude-local.json @@ -15,7 +15,7 @@ "agents/gsd-domain-researcher.md": "f1e03df842ddfb95", "agents/gsd-eval-auditor.md": "d0f45fff7370bb0b", "agents/gsd-eval-planner.md": "9cc049b82897daa4", - "agents/gsd-executor.md": "62f37fae936e0d2f", + "agents/gsd-executor.md": "e96f3cbde4428497", "agents/gsd-framework-selector.md": "85005d716f9d98f7", "agents/gsd-integration-checker.md": "17a8ee731986564d", "agents/gsd-intel-updater.md": "4953a465db9dadc1", @@ -24,7 +24,7 @@ "agents/gsd-pattern-mapper.md": "b45b5e106775bec1", "agents/gsd-phase-researcher.md": "4772d9eada32e8bd", "agents/gsd-plan-checker.md": "75851b147f35354a", - "agents/gsd-planner.md": "9c9ffc56275b8ca2", + "agents/gsd-planner.md": "a5cdb261a6ccbb96", "agents/gsd-project-researcher.md": "d7f355894519f9fe", "agents/gsd-research-synthesizer.md": "1c738df9932d325a", "agents/gsd-roadmapper.md": "453e9471ad27c7ea", @@ -78,7 +78,7 @@ "commands/gsd-onboard.md": "d0d9405bc73899bd", "commands/gsd-pause-work.md": "01dbaebfefacd252", "commands/gsd-phase.md": "e8c226d2694692a5", - "commands/gsd-plan-phase.md": "518357828182dca7", + "commands/gsd-plan-phase.md": "ae70b58d4d8550c8", "commands/gsd-plan-review-convergence.md": "d5a85a50dcff2dd1", "commands/gsd-pr-branch.md": "382c23a6a644c0e4", "commands/gsd-profile-user.md": "adbc5b025b30e836", @@ -175,7 +175,7 @@ "gsd-core/references/planner-human-verify-mode.md": "56d05e841630b3f4", "gsd-core/references/planner-interface-context.md": "b28fa3da6ae739a8", "gsd-core/references/planner-load-graph-context.md": "add55e135dd968da", - "gsd-core/references/planner-mvp-mode.md": "ffd7b9d0e402714e", + "gsd-core/references/planner-mvp-mode.md": "98bcd2020c30cbd2", "gsd-core/references/planner-reviews.md": "da39eace09a10743", "gsd-core/references/planner-revision.md": "86ba8a511f081f05", "gsd-core/references/planner-source-audit.md": "7de5bdb07232ce0b", @@ -193,7 +193,7 @@ "gsd-core/references/revision-loop.md": "e55ff32dd98c63df", "gsd-core/references/scout-codebase.md": "ba266ecc18fbf172", "gsd-core/references/security-asvs-levels.md": "4774fac3b94b6ca8", - "gsd-core/references/skeleton-template.md": "528691d1f0efa878", + "gsd-core/references/skeleton-template.md": "f11e9cd2948bd33c", "gsd-core/references/sketch-interactivity.md": "7d982fe877e1e1cc", "gsd-core/references/sketch-theme-system.md": "33e2e96e450456f8", "gsd-core/references/sketch-tooling.md": "df6c4f24c1c27611", @@ -309,7 +309,7 @@ "gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "611b2be3bd133eb1", "gsd-core/workflows/execute-phase/steps/regression-gate.md": "016ac9c7c02b1438", "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e", - "gsd-core/workflows/execute-plan.md": "f17623fd47e795dd", + "gsd-core/workflows/execute-plan.md": "e81d3476290ef292", "gsd-core/workflows/explore.md": "95e463d4bdd6dadd", "gsd-core/workflows/extract-learnings.md": "fd75072c339b58bd", "gsd-core/workflows/fast.md": "7f7687b920d79b29", @@ -319,7 +319,7 @@ "gsd-core/workflows/help.md": "5d040504b9ab35e3", "gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3", "gsd-core/workflows/help/modes/default.md": "be05e56b2c5ee2c0", - "gsd-core/workflows/help/modes/full.md": "ce40e843f528e327", + "gsd-core/workflows/help/modes/full.md": "8381c11db152a8a6", "gsd-core/workflows/help/modes/topic.md": "6e42db16f1568be9", "gsd-core/workflows/import.md": "cc21f3da36403ed3", "gsd-core/workflows/inbox.md": "91aac6360e1a8672", @@ -341,7 +341,7 @@ "gsd-core/workflows/onboard.md": "b86d78eef6c77e5b", "gsd-core/workflows/pause-work.md": "da902807d2213204", "gsd-core/workflows/plan-milestone-gaps.md": "7679fac068d1009d", - "gsd-core/workflows/plan-phase.md": "50f812bc3456819d", + "gsd-core/workflows/plan-phase.md": "4b20c2d821e2df8a", "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "4099ef6d0868de60", "gsd-core/workflows/plan-phase/steps/prd-express-path.md": "b810f9f2374e23a5", "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "e9de7a96bbfff261", diff --git a/tests/fixtures/golden-install-parity/claude.json b/tests/fixtures/golden-install-parity/claude.json index e7f84dd41..6bd374f4c 100644 --- a/tests/fixtures/golden-install-parity/claude.json +++ b/tests/fixtures/golden-install-parity/claude.json @@ -15,7 +15,7 @@ "agents/gsd-domain-researcher.md": "5f7d366251b957fe", "agents/gsd-eval-auditor.md": "fea2759beff0a642", "agents/gsd-eval-planner.md": "112f6730f23854e3", - "agents/gsd-executor.md": "d1750d26580daa7f", + "agents/gsd-executor.md": "e44ea5156ca2a42d", "agents/gsd-framework-selector.md": "c350ee693cb1aa4e", "agents/gsd-integration-checker.md": "c8b4e65dee89c8ea", "agents/gsd-intel-updater.md": "5b41e05f90ce89d9", @@ -24,7 +24,7 @@ "agents/gsd-pattern-mapper.md": "b45b5e106775bec1", "agents/gsd-phase-researcher.md": "85217c69c1ed2ac6", "agents/gsd-plan-checker.md": "c70134c61b969589", - "agents/gsd-planner.md": "aa68af11f852ecfd", + "agents/gsd-planner.md": "c07a226ddd579839", "agents/gsd-project-researcher.md": "f468e96f8339d1e0", "agents/gsd-research-synthesizer.md": "7be02e47f4fd901b", "agents/gsd-roadmapper.md": "8a7f1f1256a6aed5", @@ -104,7 +104,7 @@ "gsd-core/references/planner-human-verify-mode.md": "56d05e841630b3f4", "gsd-core/references/planner-interface-context.md": "b28fa3da6ae739a8", "gsd-core/references/planner-load-graph-context.md": "ca7a7af3f35ae61b", - "gsd-core/references/planner-mvp-mode.md": "ec33050db81101a8", + "gsd-core/references/planner-mvp-mode.md": "cfd535c9c545e73e", "gsd-core/references/planner-reviews.md": "da39eace09a10743", "gsd-core/references/planner-revision.md": "86ba8a511f081f05", "gsd-core/references/planner-source-audit.md": "7de5bdb07232ce0b", @@ -122,7 +122,7 @@ "gsd-core/references/revision-loop.md": "e55ff32dd98c63df", "gsd-core/references/scout-codebase.md": "ba266ecc18fbf172", "gsd-core/references/security-asvs-levels.md": "4774fac3b94b6ca8", - "gsd-core/references/skeleton-template.md": "528691d1f0efa878", + "gsd-core/references/skeleton-template.md": "f11e9cd2948bd33c", "gsd-core/references/sketch-interactivity.md": "7d982fe877e1e1cc", "gsd-core/references/sketch-theme-system.md": "33e2e96e450456f8", "gsd-core/references/sketch-tooling.md": "df6c4f24c1c27611", @@ -238,7 +238,7 @@ "gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "811b6d8489571581", "gsd-core/workflows/execute-phase/steps/regression-gate.md": "8ccc16a6c7cf6000", "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e", - "gsd-core/workflows/execute-plan.md": "cce1a33fe9a0a32d", + "gsd-core/workflows/execute-plan.md": "2cddec7d1b197e48", "gsd-core/workflows/explore.md": "b9eea1bac358c9ce", "gsd-core/workflows/extract-learnings.md": "d8177b0c13b7e5ee", "gsd-core/workflows/fast.md": "41a6568b873aef99", @@ -248,7 +248,7 @@ "gsd-core/workflows/help.md": "5d040504b9ab35e3", "gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3", "gsd-core/workflows/help/modes/default.md": "be05e56b2c5ee2c0", - "gsd-core/workflows/help/modes/full.md": "e2084c6766e32d6c", + "gsd-core/workflows/help/modes/full.md": "91c6683e5b5ff4f8", "gsd-core/workflows/help/modes/topic.md": "6e42db16f1568be9", "gsd-core/workflows/import.md": "6e8acff8c3918795", "gsd-core/workflows/inbox.md": "91aac6360e1a8672", @@ -270,7 +270,7 @@ "gsd-core/workflows/onboard.md": "3c50ed1f1fd07619", "gsd-core/workflows/pause-work.md": "5716362557f44ce4", "gsd-core/workflows/plan-milestone-gaps.md": "1b43d12812f7bc1e", - "gsd-core/workflows/plan-phase.md": "a62a13d6b8df73e0", + "gsd-core/workflows/plan-phase.md": "7e6899ce19c134e0", "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "4099ef6d0868de60", "gsd-core/workflows/plan-phase/steps/prd-express-path.md": "197c0590326371b2", "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "e9de7a96bbfff261", @@ -395,7 +395,7 @@ "skills/gsd-onboard/SKILL.md": "46460b479b7524bf", "skills/gsd-pause-work/SKILL.md": "35e8a148e44f5361", "skills/gsd-phase/SKILL.md": "00be96e7ae36c6f0", - "skills/gsd-plan-phase/SKILL.md": "0c9e87da048acfb7", + "skills/gsd-plan-phase/SKILL.md": "a512ac3d14194133", "skills/gsd-plan-review-convergence/SKILL.md": "c3dd8bfa877eaed5", "skills/gsd-pr-branch/SKILL.md": "c5e26f2c6dff1355", "skills/gsd-profile-user/SKILL.md": "894eb2850ecd2dde", diff --git a/tests/fixtures/golden-install-parity/cline.json b/tests/fixtures/golden-install-parity/cline.json index fb5aa35c5..f2dc8db96 100644 --- a/tests/fixtures/golden-install-parity/cline.json +++ b/tests/fixtures/golden-install-parity/cline.json @@ -19,7 +19,7 @@ "agents/gsd-domain-researcher.md": "0fecdaea86466a56", "agents/gsd-eval-auditor.md": "36c44303085df2f8", "agents/gsd-eval-planner.md": "3ddea88a69b4da3f", - "agents/gsd-executor.md": "2ca77ad7d9909f82", + "agents/gsd-executor.md": "9b51734f64049fda", "agents/gsd-framework-selector.md": "564669d479433f15", "agents/gsd-integration-checker.md": "1bbbdd3d420b994e", "agents/gsd-intel-updater.md": "42c40fffbc720d0b", @@ -28,7 +28,7 @@ "agents/gsd-pattern-mapper.md": "b526065fd2efa19c", "agents/gsd-phase-researcher.md": "c507db2ba66038f4", "agents/gsd-plan-checker.md": "a609245dbdc4ef2b", - "agents/gsd-planner.md": "ae6bf9def31a8eec", + "agents/gsd-planner.md": "2fa5c5d4529ef651", "agents/gsd-project-researcher.md": "049f816c6caa4316", "agents/gsd-research-synthesizer.md": "2f7dcbff50371d4c", "agents/gsd-roadmapper.md": "bbb23d3097911516", @@ -108,7 +108,7 @@ "gsd-core/references/planner-human-verify-mode.md": "0519ef5438b2ed30", "gsd-core/references/planner-interface-context.md": "b28fa3da6ae739a8", "gsd-core/references/planner-load-graph-context.md": "e469016f2d51b5bc", - "gsd-core/references/planner-mvp-mode.md": "ec33050db81101a8", + "gsd-core/references/planner-mvp-mode.md": "cfd535c9c545e73e", "gsd-core/references/planner-reviews.md": "dda0193a0fbd4947", "gsd-core/references/planner-revision.md": "86ba8a511f081f05", "gsd-core/references/planner-source-audit.md": "7de5bdb07232ce0b", @@ -126,7 +126,7 @@ "gsd-core/references/revision-loop.md": "e55ff32dd98c63df", "gsd-core/references/scout-codebase.md": "ba266ecc18fbf172", "gsd-core/references/security-asvs-levels.md": "4774fac3b94b6ca8", - "gsd-core/references/skeleton-template.md": "528691d1f0efa878", + "gsd-core/references/skeleton-template.md": "f11e9cd2948bd33c", "gsd-core/references/sketch-interactivity.md": "7d982fe877e1e1cc", "gsd-core/references/sketch-theme-system.md": "33e2e96e450456f8", "gsd-core/references/sketch-tooling.md": "df6c4f24c1c27611", @@ -242,7 +242,7 @@ "gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "82e6cfe1e1b1ec0e", "gsd-core/workflows/execute-phase/steps/regression-gate.md": "36b463d72d3e11c5", "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e", - "gsd-core/workflows/execute-plan.md": "0c5551f99ee0a017", + "gsd-core/workflows/execute-plan.md": "7f186055a0246932", "gsd-core/workflows/explore.md": "e83af8ceae314cf9", "gsd-core/workflows/extract-learnings.md": "6f39375b7dc775f9", "gsd-core/workflows/fast.md": "e4f74a454b6ca5e8", @@ -252,7 +252,7 @@ "gsd-core/workflows/help.md": "5d040504b9ab35e3", "gsd-core/workflows/help/modes/brief.md": "924860e1f07defb0", "gsd-core/workflows/help/modes/default.md": "86f7a14ad06e2f6f", - "gsd-core/workflows/help/modes/full.md": "efb266b8dbe60f51", + "gsd-core/workflows/help/modes/full.md": "a53e85333cf61c36", "gsd-core/workflows/help/modes/topic.md": "5c160093f3cbf35d", "gsd-core/workflows/import.md": "96ec687c5cfe84ac", "gsd-core/workflows/inbox.md": "437f981ef9ae7b26", @@ -274,7 +274,7 @@ "gsd-core/workflows/onboard.md": "6f9e6c0b484271a9", "gsd-core/workflows/pause-work.md": "3530607514b0ac00", "gsd-core/workflows/plan-milestone-gaps.md": "bafdc6945cd2bd87", - "gsd-core/workflows/plan-phase.md": "5a0e013e461375dd", + "gsd-core/workflows/plan-phase.md": "801be4f6db080adb", "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "b36f77ac7344a072", "gsd-core/workflows/plan-phase/steps/prd-express-path.md": "4b0a2cb0f4f28179", "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "090c31e22b1508fe", @@ -392,7 +392,7 @@ "skills/gsd-ns-workflow/skills/mvp-phase/SKILL.md": "6c2beccceb46fda1", "skills/gsd-ns-workflow/skills/next/SKILL.md": "3856471d0f64bf09", "skills/gsd-ns-workflow/skills/phase/SKILL.md": "4e1363db6013a1e5", - "skills/gsd-ns-workflow/skills/plan-phase/SKILL.md": "b7a6ff2837b41143", + "skills/gsd-ns-workflow/skills/plan-phase/SKILL.md": "643641b45747815e", "skills/gsd-ns-workflow/skills/plan-review-convergence/SKILL.md": "b7d213288df9aa96", "skills/gsd-ns-workflow/skills/progress/SKILL.md": "493f467c22d55b6b", "skills/gsd-ns-workflow/skills/quick/SKILL.md": "605e596c680cbb1c", diff --git a/tests/fixtures/golden-install-parity/codebuddy.json b/tests/fixtures/golden-install-parity/codebuddy.json index 2aa98ad7c..6c20489a2 100644 --- a/tests/fixtures/golden-install-parity/codebuddy.json +++ b/tests/fixtures/golden-install-parity/codebuddy.json @@ -16,7 +16,7 @@ "agents/gsd-domain-researcher.md": "1c1a800108a2b225", "agents/gsd-eval-auditor.md": "99012004b14ea602", "agents/gsd-eval-planner.md": "4ebdd7fe9cbb0cfe", - "agents/gsd-executor.md": "d61e084540bb6ee2", + "agents/gsd-executor.md": "4f4bbb77be53a135", "agents/gsd-framework-selector.md": "7726fccc86bfeb50", "agents/gsd-integration-checker.md": "2d8339790bbb2dc3", "agents/gsd-intel-updater.md": "c51339956197cbd3", @@ -25,7 +25,7 @@ "agents/gsd-pattern-mapper.md": "92cfa2e6c2a06bf3", "agents/gsd-phase-researcher.md": "6338474da1a5d65e", "agents/gsd-plan-checker.md": "e704c083b02e8c35", - "agents/gsd-planner.md": "164eab970e2cf025", + "agents/gsd-planner.md": "1ade235391742f7e", "agents/gsd-project-researcher.md": "e43c59f7f1f2f37a", "agents/gsd-research-synthesizer.md": "87955470c3c129b2", "agents/gsd-roadmapper.md": "20b69eff61a7a9fa", @@ -79,7 +79,7 @@ "commands/gsd-onboard.md": "63283b90aa671229", "commands/gsd-pause-work.md": "6caa75a7c2b4dd2d", "commands/gsd-phase.md": "e3ca4958ea20a935", - "commands/gsd-plan-phase.md": "6de27d54ac191539", + "commands/gsd-plan-phase.md": "03e08147bee2e446", "commands/gsd-plan-review-convergence.md": "4d1b90383514958e", "commands/gsd-pr-branch.md": "f5be514b9f69eaf5", "commands/gsd-profile-user.md": "7a9289910719d828", @@ -176,7 +176,7 @@ "gsd-core/references/planner-human-verify-mode.md": "56d05e841630b3f4", "gsd-core/references/planner-interface-context.md": "b28fa3da6ae739a8", "gsd-core/references/planner-load-graph-context.md": "ca7a7af3f35ae61b", - "gsd-core/references/planner-mvp-mode.md": "ec33050db81101a8", + "gsd-core/references/planner-mvp-mode.md": "cfd535c9c545e73e", "gsd-core/references/planner-reviews.md": "dda0193a0fbd4947", "gsd-core/references/planner-revision.md": "86ba8a511f081f05", "gsd-core/references/planner-source-audit.md": "7de5bdb07232ce0b", @@ -194,7 +194,7 @@ "gsd-core/references/revision-loop.md": "e55ff32dd98c63df", "gsd-core/references/scout-codebase.md": "ba266ecc18fbf172", "gsd-core/references/security-asvs-levels.md": "4774fac3b94b6ca8", - "gsd-core/references/skeleton-template.md": "528691d1f0efa878", + "gsd-core/references/skeleton-template.md": "f11e9cd2948bd33c", "gsd-core/references/sketch-interactivity.md": "7d982fe877e1e1cc", "gsd-core/references/sketch-theme-system.md": "33e2e96e450456f8", "gsd-core/references/sketch-tooling.md": "df6c4f24c1c27611", @@ -310,7 +310,7 @@ "gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "811b6d8489571581", "gsd-core/workflows/execute-phase/steps/regression-gate.md": "8ccc16a6c7cf6000", "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e", - "gsd-core/workflows/execute-plan.md": "933d10547116794a", + "gsd-core/workflows/execute-plan.md": "90cfc1e6e677d43f", "gsd-core/workflows/explore.md": "6c04f2e658d93261", "gsd-core/workflows/extract-learnings.md": "b6f01ca3d8f58de4", "gsd-core/workflows/fast.md": "11f5cd10ae5cc7d3", @@ -320,7 +320,7 @@ "gsd-core/workflows/help.md": "5d040504b9ab35e3", "gsd-core/workflows/help/modes/brief.md": "924860e1f07defb0", "gsd-core/workflows/help/modes/default.md": "08a02976c0c5cc50", - "gsd-core/workflows/help/modes/full.md": "3a19e96b69bcc33e", + "gsd-core/workflows/help/modes/full.md": "67e3dffe34ddc9bc", "gsd-core/workflows/help/modes/topic.md": "5c160093f3cbf35d", "gsd-core/workflows/import.md": "3d3fa603ceb8bc9f", "gsd-core/workflows/inbox.md": "437f981ef9ae7b26", @@ -342,7 +342,7 @@ "gsd-core/workflows/onboard.md": "6f9e6c0b484271a9", "gsd-core/workflows/pause-work.md": "f2b33bba5593d422", "gsd-core/workflows/plan-milestone-gaps.md": "852f6d7c0c4299dc", - "gsd-core/workflows/plan-phase.md": "27d4e6b4a084dd99", + "gsd-core/workflows/plan-phase.md": "5124211d53f66feb", "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "b36f77ac7344a072", "gsd-core/workflows/plan-phase/steps/prd-express-path.md": "197c0590326371b2", "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "49f58c3f75be3eb5", @@ -467,7 +467,7 @@ "skills/gsd-onboard/SKILL.md": "6ad789a03124cd4f", "skills/gsd-pause-work/SKILL.md": "e2de20b7539e78d4", "skills/gsd-phase/SKILL.md": "f87211f779315ced", - "skills/gsd-plan-phase/SKILL.md": "6134e837750034ab", + "skills/gsd-plan-phase/SKILL.md": "262e2e7ff694fc09", "skills/gsd-plan-review-convergence/SKILL.md": "e76d306ba8883cdb", "skills/gsd-pr-branch/SKILL.md": "87bb3306488565fb", "skills/gsd-profile-user/SKILL.md": "ee8e8547298006b8", diff --git a/tests/fixtures/golden-install-parity/codex.json b/tests/fixtures/golden-install-parity/codex.json index eafa2de64..22763e40e 100644 --- a/tests/fixtures/golden-install-parity/codex.json +++ b/tests/fixtures/golden-install-parity/codex.json @@ -43,7 +43,7 @@ ".agents/skills/gsd-onboard/SKILL.md": "f42fc2edebeda671", ".agents/skills/gsd-pause-work/SKILL.md": "b379469eed78a196", ".agents/skills/gsd-phase/SKILL.md": "25477edc97a90c91", - ".agents/skills/gsd-plan-phase/SKILL.md": "19ead1acb151a868", + ".agents/skills/gsd-plan-phase/SKILL.md": "c6f734135356faac", ".agents/skills/gsd-plan-review-convergence/SKILL.md": "f654089c11024027", ".agents/skills/gsd-pr-branch/SKILL.md": "6901da15e321913e", ".agents/skills/gsd-profile-user/SKILL.md": "6259fabfb6afe7be", @@ -102,8 +102,8 @@ "agents/gsd-eval-auditor.toml": "9b81d61b3c5f722d", "agents/gsd-eval-planner.md": "73f2ad2ff2797a51", "agents/gsd-eval-planner.toml": "09468ad1a34ac468", - "agents/gsd-executor.md": "0393e5f72e932127", - "agents/gsd-executor.toml": "cdb7bdc04d3b6651", + "agents/gsd-executor.md": "895482e838b13815", + "agents/gsd-executor.toml": "a95f6ad24154e646", "agents/gsd-framework-selector.md": "ebae32430887d2e0", "agents/gsd-framework-selector.toml": "637e4e021b7ec380", "agents/gsd-integration-checker.md": "9cc875676cf7d741", @@ -120,8 +120,8 @@ "agents/gsd-phase-researcher.toml": "44a3d510cd0ce3bd", "agents/gsd-plan-checker.md": "e7f02c10ea788aee", "agents/gsd-plan-checker.toml": "6f8ceb421d0ad721", - "agents/gsd-planner.md": "5d638a2e37b63731", - "agents/gsd-planner.toml": "50cec2af6b45a61c", + "agents/gsd-planner.md": "7d48d3a81760af05", + "agents/gsd-planner.toml": "2527d19b0c47ec66", "agents/gsd-project-researcher.md": "959f2e57c3d69ed8", "agents/gsd-project-researcher.toml": "f395e8e8c4baf1ed", "agents/gsd-research-synthesizer.md": "497f85adf53259ef", @@ -211,7 +211,7 @@ "gsd-core/references/planner-human-verify-mode.md": "3a625b42d9cb93ee", "gsd-core/references/planner-interface-context.md": "b28fa3da6ae739a8", "gsd-core/references/planner-load-graph-context.md": "ca7a7af3f35ae61b", - "gsd-core/references/planner-mvp-mode.md": "ec33050db81101a8", + "gsd-core/references/planner-mvp-mode.md": "cfd535c9c545e73e", "gsd-core/references/planner-reviews.md": "7889bfa28e82156b", "gsd-core/references/planner-revision.md": "2ebf1a714d1ec4bf", "gsd-core/references/planner-source-audit.md": "7de5bdb07232ce0b", @@ -229,7 +229,7 @@ "gsd-core/references/revision-loop.md": "e55ff32dd98c63df", "gsd-core/references/scout-codebase.md": "ba266ecc18fbf172", "gsd-core/references/security-asvs-levels.md": "4774fac3b94b6ca8", - "gsd-core/references/skeleton-template.md": "528691d1f0efa878", + "gsd-core/references/skeleton-template.md": "f11e9cd2948bd33c", "gsd-core/references/sketch-interactivity.md": "7d982fe877e1e1cc", "gsd-core/references/sketch-theme-system.md": "33e2e96e450456f8", "gsd-core/references/sketch-tooling.md": "df6c4f24c1c27611", @@ -345,7 +345,7 @@ "gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "811b6d8489571581", "gsd-core/workflows/execute-phase/steps/regression-gate.md": "8ccc16a6c7cf6000", "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e", - "gsd-core/workflows/execute-plan.md": "ac1f1d9ada00a91e", + "gsd-core/workflows/execute-plan.md": "89dda78cf3c1f1b7", "gsd-core/workflows/explore.md": "2ef10d17c8864a04", "gsd-core/workflows/extract-learnings.md": "f716aa03fcb5f8da", "gsd-core/workflows/fast.md": "e4ed60f96a7b3ac8", @@ -355,7 +355,7 @@ "gsd-core/workflows/help.md": "08e1349950c5602a", "gsd-core/workflows/help/modes/brief.md": "da44b130d1afe556", "gsd-core/workflows/help/modes/default.md": "4bb3082d28026eea", - "gsd-core/workflows/help/modes/full.md": "01a1ec54df54da6e", + "gsd-core/workflows/help/modes/full.md": "773717d0699320b8", "gsd-core/workflows/help/modes/topic.md": "b7c7e4a8800bc3ea", "gsd-core/workflows/import.md": "cb3c8f9d09edb434", "gsd-core/workflows/inbox.md": "61b8b10e7a74b2e9", @@ -377,7 +377,7 @@ "gsd-core/workflows/onboard.md": "83c40ba7055b8b24", "gsd-core/workflows/pause-work.md": "a217770ecafcb2e0", "gsd-core/workflows/plan-milestone-gaps.md": "73d46f77c50a0690", - "gsd-core/workflows/plan-phase.md": "ec989d6bc926bdf6", + "gsd-core/workflows/plan-phase.md": "395fe273b017b2ff", "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "d838b87563feedf6", "gsd-core/workflows/plan-phase/steps/prd-express-path.md": "f10975692cbd036e", "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "f5edc589cab52a7b", diff --git a/tests/fixtures/golden-install-parity/copilot.json b/tests/fixtures/golden-install-parity/copilot.json index ac4b1090d..4698f94b1 100644 --- a/tests/fixtures/golden-install-parity/copilot.json +++ b/tests/fixtures/golden-install-parity/copilot.json @@ -16,7 +16,7 @@ "agents/gsd-domain-researcher.agent.md": "d603239b3e9fe428", "agents/gsd-eval-auditor.agent.md": "3c03009564de55c8", "agents/gsd-eval-planner.agent.md": "14751876fc2b5f16", - "agents/gsd-executor.agent.md": "2ee1020062d8d800", + "agents/gsd-executor.agent.md": "761523a925bd2649", "agents/gsd-framework-selector.agent.md": "cafeec0b3489be45", "agents/gsd-integration-checker.agent.md": "30439b804927acc7", "agents/gsd-intel-updater.agent.md": "238c1a886f35a25c", @@ -25,7 +25,7 @@ "agents/gsd-pattern-mapper.agent.md": "b1f488b0fa6a2395", "agents/gsd-phase-researcher.agent.md": "03cfb510a766fe93", "agents/gsd-plan-checker.agent.md": "c50a5b008ddcbfad", - "agents/gsd-planner.agent.md": "d40d16eced1c6463", + "agents/gsd-planner.agent.md": "2664dc34defa7580", "agents/gsd-project-researcher.agent.md": "d73bdbe986ffa8a6", "agents/gsd-research-synthesizer.agent.md": "f03eed4aa89e47c5", "agents/gsd-roadmapper.agent.md": "322048cf8ddcb4e5", @@ -106,7 +106,7 @@ "gsd-core/references/planner-human-verify-mode.md": "5262b23d822d9541", "gsd-core/references/planner-interface-context.md": "b28fa3da6ae739a8", "gsd-core/references/planner-load-graph-context.md": "641b6c1ce4dd0c8c", - "gsd-core/references/planner-mvp-mode.md": "35890221f823756f", + "gsd-core/references/planner-mvp-mode.md": "355d8a9ff2b2b67e", "gsd-core/references/planner-reviews.md": "da39eace09a10743", "gsd-core/references/planner-revision.md": "86ba8a511f081f05", "gsd-core/references/planner-source-audit.md": "7de5bdb07232ce0b", @@ -124,7 +124,7 @@ "gsd-core/references/revision-loop.md": "e55ff32dd98c63df", "gsd-core/references/scout-codebase.md": "ba266ecc18fbf172", "gsd-core/references/security-asvs-levels.md": "4774fac3b94b6ca8", - "gsd-core/references/skeleton-template.md": "528691d1f0efa878", + "gsd-core/references/skeleton-template.md": "f11e9cd2948bd33c", "gsd-core/references/sketch-interactivity.md": "7d982fe877e1e1cc", "gsd-core/references/sketch-theme-system.md": "33e2e96e450456f8", "gsd-core/references/sketch-tooling.md": "df6c4f24c1c27611", @@ -240,7 +240,7 @@ "gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "1b73ab2fc47c9dbf", "gsd-core/workflows/execute-phase/steps/regression-gate.md": "b26edeee455481a7", "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e", - "gsd-core/workflows/execute-plan.md": "c5e9dae726db15cc", + "gsd-core/workflows/execute-plan.md": "66879e62abcc33ae", "gsd-core/workflows/explore.md": "5fd91a8510e1114b", "gsd-core/workflows/extract-learnings.md": "f34d0b1927545b18", "gsd-core/workflows/fast.md": "66821090b6b8ed3b", @@ -250,7 +250,7 @@ "gsd-core/workflows/help.md": "5d040504b9ab35e3", "gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3", "gsd-core/workflows/help/modes/default.md": "be05e56b2c5ee2c0", - "gsd-core/workflows/help/modes/full.md": "ce88d4eb6b301e09", + "gsd-core/workflows/help/modes/full.md": "bd1bca7960fadd61", "gsd-core/workflows/help/modes/topic.md": "0bf9ab39d7044d69", "gsd-core/workflows/import.md": "f4fa65e332b00f7e", "gsd-core/workflows/inbox.md": "a448220c548f27bc", @@ -272,7 +272,7 @@ "gsd-core/workflows/onboard.md": "a62602c6f3fd538a", "gsd-core/workflows/pause-work.md": "9ce66367be6c40db", "gsd-core/workflows/plan-milestone-gaps.md": "5cf589802d08bdf3", - "gsd-core/workflows/plan-phase.md": "5a2cd75b453aa573", + "gsd-core/workflows/plan-phase.md": "ab96c552cc86d2cc", "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "4099ef6d0868de60", "gsd-core/workflows/plan-phase/steps/prd-express-path.md": "bb052483744f0a6d", "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "e9de7a96bbfff261", @@ -370,7 +370,7 @@ "skills/gsd-onboard/SKILL.md": "4d325f3033df2d37", "skills/gsd-pause-work/SKILL.md": "4f0caa008a8001ff", "skills/gsd-phase/SKILL.md": "d38c7f9b1d0d2360", - "skills/gsd-plan-phase/SKILL.md": "d257bb9b1786039d", + "skills/gsd-plan-phase/SKILL.md": "7761a2f06ac98b30", "skills/gsd-plan-review-convergence/SKILL.md": "9338b49ecddd4ae8", "skills/gsd-pr-branch/SKILL.md": "9cd9740db385d95a", "skills/gsd-profile-user/SKILL.md": "052a8e17ecda40f1", diff --git a/tests/fixtures/golden-install-parity/cursor.json b/tests/fixtures/golden-install-parity/cursor.json index 6b7cefc3a..aac33baf2 100644 --- a/tests/fixtures/golden-install-parity/cursor.json +++ b/tests/fixtures/golden-install-parity/cursor.json @@ -16,7 +16,7 @@ "agents/gsd-domain-researcher.md": "56395dbdabf076f6", "agents/gsd-eval-auditor.md": "ad2840fd5cd76172", "agents/gsd-eval-planner.md": "2049dac060d00eda", - "agents/gsd-executor.md": "e416f9c48fb44c75", + "agents/gsd-executor.md": "68796b76140841c2", "agents/gsd-framework-selector.md": "4b77eebbe9288d80", "agents/gsd-integration-checker.md": "5da30584d06b878c", "agents/gsd-intel-updater.md": "b8971c5d96e63b38", @@ -25,7 +25,7 @@ "agents/gsd-pattern-mapper.md": "1229c215677f740d", "agents/gsd-phase-researcher.md": "982d59921bed463d", "agents/gsd-plan-checker.md": "ba51999876d40cf2", - "agents/gsd-planner.md": "15b5830dafb94517", + "agents/gsd-planner.md": "1feec75fe52b56bd", "agents/gsd-project-researcher.md": "beeac940d3a10e76", "agents/gsd-research-synthesizer.md": "6315f016d55176f4", "agents/gsd-roadmapper.md": "d28e7d4bac46dde2", @@ -79,7 +79,7 @@ "commands/gsd-onboard.md": "d9e52f558fc2b90f", "commands/gsd-pause-work.md": "59630f05f95fff68", "commands/gsd-phase.md": "9a073dcd0f934f90", - "commands/gsd-plan-phase.md": "57de92131fcb16b8", + "commands/gsd-plan-phase.md": "462995ee69ba35b4", "commands/gsd-plan-review-convergence.md": "bded2d831f8ac9de", "commands/gsd-pr-branch.md": "ef2eedb0ed4295da", "commands/gsd-profile-user.md": "0e99de36619c3b7d", @@ -176,7 +176,7 @@ "gsd-core/references/planner-human-verify-mode.md": "5e7925ad77d931d1", "gsd-core/references/planner-interface-context.md": "b28fa3da6ae739a8", "gsd-core/references/planner-load-graph-context.md": "ca7a7af3f35ae61b", - "gsd-core/references/planner-mvp-mode.md": "ec33050db81101a8", + "gsd-core/references/planner-mvp-mode.md": "cfd535c9c545e73e", "gsd-core/references/planner-reviews.md": "da39eace09a10743", "gsd-core/references/planner-revision.md": "86ba8a511f081f05", "gsd-core/references/planner-source-audit.md": "7de5bdb07232ce0b", @@ -194,7 +194,7 @@ "gsd-core/references/revision-loop.md": "e55ff32dd98c63df", "gsd-core/references/scout-codebase.md": "ba266ecc18fbf172", "gsd-core/references/security-asvs-levels.md": "4774fac3b94b6ca8", - "gsd-core/references/skeleton-template.md": "528691d1f0efa878", + "gsd-core/references/skeleton-template.md": "f11e9cd2948bd33c", "gsd-core/references/sketch-interactivity.md": "7d982fe877e1e1cc", "gsd-core/references/sketch-theme-system.md": "33e2e96e450456f8", "gsd-core/references/sketch-tooling.md": "df6c4f24c1c27611", @@ -310,7 +310,7 @@ "gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "811b6d8489571581", "gsd-core/workflows/execute-phase/steps/regression-gate.md": "8ccc16a6c7cf6000", "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e", - "gsd-core/workflows/execute-plan.md": "83dc1bf7f73735c0", + "gsd-core/workflows/execute-plan.md": "a57ce521a92348ef", "gsd-core/workflows/explore.md": "b9eea1bac358c9ce", "gsd-core/workflows/extract-learnings.md": "d8177b0c13b7e5ee", "gsd-core/workflows/fast.md": "77b49793e26b3323", @@ -320,7 +320,7 @@ "gsd-core/workflows/help.md": "08e1349950c5602a", "gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3", "gsd-core/workflows/help/modes/default.md": "b88ff431fffe40ae", - "gsd-core/workflows/help/modes/full.md": "a7a42d4340e8e00b", + "gsd-core/workflows/help/modes/full.md": "d30803f316abd6fa", "gsd-core/workflows/help/modes/topic.md": "cee80e0adfa3b06c", "gsd-core/workflows/import.md": "5d5fb8e51f6a243a", "gsd-core/workflows/inbox.md": "797c287852eb8957", @@ -342,7 +342,7 @@ "gsd-core/workflows/onboard.md": "20c28136423d40ac", "gsd-core/workflows/pause-work.md": "5716362557f44ce4", "gsd-core/workflows/plan-milestone-gaps.md": "1b43d12812f7bc1e", - "gsd-core/workflows/plan-phase.md": "c07b91bb188270d7", + "gsd-core/workflows/plan-phase.md": "846e7347c40cc643", "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "e06ccd4d4c0703fb", "gsd-core/workflows/plan-phase/steps/prd-express-path.md": "197c0590326371b2", "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "3bed01c3c906ac52", @@ -445,7 +445,7 @@ "skills/gsd-onboard/SKILL.md": "cae1f9382469fa00", "skills/gsd-pause-work/SKILL.md": "10e7531a2cb392ad", "skills/gsd-phase/SKILL.md": "1a2c9b64c1af7ffc", - "skills/gsd-plan-phase/SKILL.md": "0784da05d41dcfe7", + "skills/gsd-plan-phase/SKILL.md": "b7846866b27c6d3f", "skills/gsd-plan-review-convergence/SKILL.md": "6ffc6592e39f2e8a", "skills/gsd-pr-branch/SKILL.md": "725727e3c2b66543", "skills/gsd-profile-user/SKILL.md": "eb6842b23f1f9256", diff --git a/tests/fixtures/golden-install-parity/hermes.json b/tests/fixtures/golden-install-parity/hermes.json index 634aa3e89..794efde0a 100644 --- a/tests/fixtures/golden-install-parity/hermes.json +++ b/tests/fixtures/golden-install-parity/hermes.json @@ -16,7 +16,7 @@ "agents/gsd-domain-researcher.md": "412cdbb05ba252ea", "agents/gsd-eval-auditor.md": "4ffb265063c318e5", "agents/gsd-eval-planner.md": "03448fc9c5774b56", - "agents/gsd-executor.md": "9c00261ee92596bb", + "agents/gsd-executor.md": "c1f807f853dc53d7", "agents/gsd-framework-selector.md": "ea9981d65d6b3429", "agents/gsd-integration-checker.md": "35b4f2969d279871", "agents/gsd-intel-updater.md": "5fe5edfae2719cb8", @@ -25,7 +25,7 @@ "agents/gsd-pattern-mapper.md": "cea092600aeb3978", "agents/gsd-phase-researcher.md": "2bd0402f33d757ca", "agents/gsd-plan-checker.md": "4b4e2b475bf5b5c3", - "agents/gsd-planner.md": "018542e335a983fa", + "agents/gsd-planner.md": "a48726410b038084", "agents/gsd-project-researcher.md": "425a7df7f37a5c06", "agents/gsd-research-synthesizer.md": "9d31c87fc2c87ffa", "agents/gsd-roadmapper.md": "64dce5d5f9fa5654", @@ -105,7 +105,7 @@ "gsd-core/references/planner-human-verify-mode.md": "6cfa61ca5f6c1879", "gsd-core/references/planner-interface-context.md": "b28fa3da6ae739a8", "gsd-core/references/planner-load-graph-context.md": "8f598e08696843c0", - "gsd-core/references/planner-mvp-mode.md": "ec33050db81101a8", + "gsd-core/references/planner-mvp-mode.md": "cfd535c9c545e73e", "gsd-core/references/planner-reviews.md": "da39eace09a10743", "gsd-core/references/planner-revision.md": "86ba8a511f081f05", "gsd-core/references/planner-source-audit.md": "7de5bdb07232ce0b", @@ -123,7 +123,7 @@ "gsd-core/references/revision-loop.md": "e55ff32dd98c63df", "gsd-core/references/scout-codebase.md": "ba266ecc18fbf172", "gsd-core/references/security-asvs-levels.md": "4774fac3b94b6ca8", - "gsd-core/references/skeleton-template.md": "528691d1f0efa878", + "gsd-core/references/skeleton-template.md": "f11e9cd2948bd33c", "gsd-core/references/sketch-interactivity.md": "7d982fe877e1e1cc", "gsd-core/references/sketch-theme-system.md": "33e2e96e450456f8", "gsd-core/references/sketch-tooling.md": "df6c4f24c1c27611", @@ -239,7 +239,7 @@ "gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "c9ad17d6cc6dfe45", "gsd-core/workflows/execute-phase/steps/regression-gate.md": "5a78d5dfea6a911a", "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e", - "gsd-core/workflows/execute-plan.md": "4dbe9b6f0c976245", + "gsd-core/workflows/execute-plan.md": "5a6b2176073db3fd", "gsd-core/workflows/explore.md": "48770d68e8b9c132", "gsd-core/workflows/extract-learnings.md": "e9e167c718949c0b", "gsd-core/workflows/fast.md": "c801145115755524", @@ -249,7 +249,7 @@ "gsd-core/workflows/help.md": "5d040504b9ab35e3", "gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3", "gsd-core/workflows/help/modes/default.md": "8874dac94eb68ae6", - "gsd-core/workflows/help/modes/full.md": "62779da88565d65a", + "gsd-core/workflows/help/modes/full.md": "cad4eed3907e8a58", "gsd-core/workflows/help/modes/topic.md": "6e42db16f1568be9", "gsd-core/workflows/import.md": "a441445515bc2dd5", "gsd-core/workflows/inbox.md": "91aac6360e1a8672", @@ -271,7 +271,7 @@ "gsd-core/workflows/onboard.md": "3c50ed1f1fd07619", "gsd-core/workflows/pause-work.md": "ae2d5789a95f70fe", "gsd-core/workflows/plan-milestone-gaps.md": "c86cdc1964256b98", - "gsd-core/workflows/plan-phase.md": "6e3846fb2ae1bd45", + "gsd-core/workflows/plan-phase.md": "79bc3a45f034d851", "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "4099ef6d0868de60", "gsd-core/workflows/plan-phase/steps/prd-express-path.md": "9607e6d03e93c1c2", "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "62f8e4f3b475fe5f", @@ -418,7 +418,7 @@ "skills/gsd/gsd-ns-workflow/skills/mvp-phase/SKILL.md": "0804dfd4124526ba", "skills/gsd/gsd-ns-workflow/skills/next/SKILL.md": "1d30cf6061d15168", "skills/gsd/gsd-ns-workflow/skills/phase/SKILL.md": "610bd06d71198849", - "skills/gsd/gsd-ns-workflow/skills/plan-phase/SKILL.md": "f06f0e2fc8def3f0", + "skills/gsd/gsd-ns-workflow/skills/plan-phase/SKILL.md": "cb1cf29451588047", "skills/gsd/gsd-ns-workflow/skills/plan-review-convergence/SKILL.md": "fddf8bd7b3ae1f10", "skills/gsd/gsd-ns-workflow/skills/progress/SKILL.md": "6ec0e4715dde7ee2", "skills/gsd/gsd-ns-workflow/skills/quick/SKILL.md": "65e377345e9c49a8", diff --git a/tests/fixtures/golden-install-parity/kilo.json b/tests/fixtures/golden-install-parity/kilo.json index 93f262a91..38c54f963 100644 --- a/tests/fixtures/golden-install-parity/kilo.json +++ b/tests/fixtures/golden-install-parity/kilo.json @@ -16,7 +16,7 @@ "agents/gsd-domain-researcher.md": "a3874d80bcbc7380", "agents/gsd-eval-auditor.md": "630d4cd3bd6ea195", "agents/gsd-eval-planner.md": "3db12cde12aeb2c1", - "agents/gsd-executor.md": "24a1c8c8e829d2d1", + "agents/gsd-executor.md": "c53d111b0c795f7c", "agents/gsd-framework-selector.md": "ad5f2c6b9bec6270", "agents/gsd-integration-checker.md": "c503e2f4a3d8ec05", "agents/gsd-intel-updater.md": "231393da62a45b2e", @@ -25,7 +25,7 @@ "agents/gsd-pattern-mapper.md": "6a5408fd11d70391", "agents/gsd-phase-researcher.md": "94818f28c498bb26", "agents/gsd-plan-checker.md": "56164206242c8caf", - "agents/gsd-planner.md": "5adf9f02c77d6859", + "agents/gsd-planner.md": "1fbe1f6e9c3b74f0", "agents/gsd-project-researcher.md": "60573a38d3dfd9fe", "agents/gsd-research-synthesizer.md": "1f7cd286c5783c86", "agents/gsd-roadmapper.md": "277e0a3252553ab7", @@ -79,7 +79,7 @@ "command/gsd-onboard.md": "3e87a21c9c04f0d7", "command/gsd-pause-work.md": "04e993b1c9f8322b", "command/gsd-phase.md": "8f0e98dc6c223229", - "command/gsd-plan-phase.md": "b37e9a61f946c975", + "command/gsd-plan-phase.md": "5ef48b00031b341c", "command/gsd-plan-review-convergence.md": "79a28ef110f9f481", "command/gsd-pr-branch.md": "68e724607de3c480", "command/gsd-profile-user.md": "9704158b2d79cad2", @@ -176,7 +176,7 @@ "gsd-core/references/planner-human-verify-mode.md": "3a625b42d9cb93ee", "gsd-core/references/planner-interface-context.md": "b28fa3da6ae739a8", "gsd-core/references/planner-load-graph-context.md": "ca7a7af3f35ae61b", - "gsd-core/references/planner-mvp-mode.md": "ec33050db81101a8", + "gsd-core/references/planner-mvp-mode.md": "cfd535c9c545e73e", "gsd-core/references/planner-reviews.md": "da39eace09a10743", "gsd-core/references/planner-revision.md": "86ba8a511f081f05", "gsd-core/references/planner-source-audit.md": "7de5bdb07232ce0b", @@ -194,7 +194,7 @@ "gsd-core/references/revision-loop.md": "e55ff32dd98c63df", "gsd-core/references/scout-codebase.md": "ba266ecc18fbf172", "gsd-core/references/security-asvs-levels.md": "4774fac3b94b6ca8", - "gsd-core/references/skeleton-template.md": "528691d1f0efa878", + "gsd-core/references/skeleton-template.md": "f11e9cd2948bd33c", "gsd-core/references/sketch-interactivity.md": "7d982fe877e1e1cc", "gsd-core/references/sketch-theme-system.md": "33e2e96e450456f8", "gsd-core/references/sketch-tooling.md": "df6c4f24c1c27611", @@ -310,7 +310,7 @@ "gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "811b6d8489571581", "gsd-core/workflows/execute-phase/steps/regression-gate.md": "8ccc16a6c7cf6000", "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e", - "gsd-core/workflows/execute-plan.md": "8dc89b35582407f7", + "gsd-core/workflows/execute-plan.md": "21c1dc158588803a", "gsd-core/workflows/explore.md": "14242d36d4822df6", "gsd-core/workflows/extract-learnings.md": "d8177b0c13b7e5ee", "gsd-core/workflows/fast.md": "41a6568b873aef99", @@ -320,7 +320,7 @@ "gsd-core/workflows/help.md": "5d040504b9ab35e3", "gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3", "gsd-core/workflows/help/modes/default.md": "be05e56b2c5ee2c0", - "gsd-core/workflows/help/modes/full.md": "775f766dfafb72f9", + "gsd-core/workflows/help/modes/full.md": "c41d1012b4577fe4", "gsd-core/workflows/help/modes/topic.md": "0bf9ab39d7044d69", "gsd-core/workflows/import.md": "f8bbe6f2c0e08a78", "gsd-core/workflows/inbox.md": "a073396097c89c01", @@ -342,7 +342,7 @@ "gsd-core/workflows/onboard.md": "78b288089305dc46", "gsd-core/workflows/pause-work.md": "a6e5336c409fdc8b", "gsd-core/workflows/plan-milestone-gaps.md": "1b43d12812f7bc1e", - "gsd-core/workflows/plan-phase.md": "65667ea11d155b97", + "gsd-core/workflows/plan-phase.md": "aca787850411c004", "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "4099ef6d0868de60", "gsd-core/workflows/plan-phase/steps/prd-express-path.md": "f10975692cbd036e", "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "e9de7a96bbfff261", @@ -441,7 +441,7 @@ "skills/gsd-onboard/SKILL.md": "0e3cc902f44b41b8", "skills/gsd-pause-work/SKILL.md": "34366b18a392a717", "skills/gsd-phase/SKILL.md": "64a241d4f8665aa2", - "skills/gsd-plan-phase/SKILL.md": "c73cba04a26f0bfe", + "skills/gsd-plan-phase/SKILL.md": "fd51709d82eb05b6", "skills/gsd-plan-review-convergence/SKILL.md": "fae05d6ab16cac10", "skills/gsd-pr-branch/SKILL.md": "a80da6aa95efc50d", "skills/gsd-profile-user/SKILL.md": "4ac2c5ea45d17a9d", diff --git a/tests/fixtures/golden-install-parity/kimi.json b/tests/fixtures/golden-install-parity/kimi.json index d591d5a45..4c842e300 100644 --- a/tests/fixtures/golden-install-parity/kimi.json +++ b/tests/fixtures/golden-install-parity/kimi.json @@ -61,7 +61,7 @@ "agents/subagents/gsd-eval-auditor.yaml": "e3d868bd5fefe938", "agents/subagents/gsd-eval-planner.md": "70f8c5727bfb9876", "agents/subagents/gsd-eval-planner.yaml": "df8499f7af297ec2", - "agents/subagents/gsd-executor.md": "d3b2806c227c6a27", + "agents/subagents/gsd-executor.md": "948d122c6607e343", "agents/subagents/gsd-executor.yaml": "e29422986636fd64", "agents/subagents/gsd-framework-selector.md": "a15b7aa1e0576e16", "agents/subagents/gsd-framework-selector.yaml": "fb52c31cde27b0e3", @@ -79,7 +79,7 @@ "agents/subagents/gsd-phase-researcher.yaml": "7633c8e82617e7cc", "agents/subagents/gsd-plan-checker.md": "bd302afc01ed40f0", "agents/subagents/gsd-plan-checker.yaml": "8295181071121db8", - "agents/subagents/gsd-planner.md": "f4a053af3e081edf", + "agents/subagents/gsd-planner.md": "aaaac708b1cf2939", "agents/subagents/gsd-planner.yaml": "2e83ee194bcd7fbd", "agents/subagents/gsd-project-researcher.md": "39bc2ec5a8b18283", "agents/subagents/gsd-project-researcher.yaml": "ce12586b0347e2dc", @@ -169,7 +169,7 @@ "gsd-core/references/planner-human-verify-mode.md": "56d05e841630b3f4", "gsd-core/references/planner-interface-context.md": "b28fa3da6ae739a8", "gsd-core/references/planner-load-graph-context.md": "ca7a7af3f35ae61b", - "gsd-core/references/planner-mvp-mode.md": "ec33050db81101a8", + "gsd-core/references/planner-mvp-mode.md": "cfd535c9c545e73e", "gsd-core/references/planner-reviews.md": "dda0193a0fbd4947", "gsd-core/references/planner-revision.md": "86ba8a511f081f05", "gsd-core/references/planner-source-audit.md": "7de5bdb07232ce0b", @@ -187,7 +187,7 @@ "gsd-core/references/revision-loop.md": "e55ff32dd98c63df", "gsd-core/references/scout-codebase.md": "ba266ecc18fbf172", "gsd-core/references/security-asvs-levels.md": "4774fac3b94b6ca8", - "gsd-core/references/skeleton-template.md": "528691d1f0efa878", + "gsd-core/references/skeleton-template.md": "f11e9cd2948bd33c", "gsd-core/references/sketch-interactivity.md": "7d982fe877e1e1cc", "gsd-core/references/sketch-theme-system.md": "33e2e96e450456f8", "gsd-core/references/sketch-tooling.md": "df6c4f24c1c27611", @@ -303,7 +303,7 @@ "gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "811b6d8489571581", "gsd-core/workflows/execute-phase/steps/regression-gate.md": "8ccc16a6c7cf6000", "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e", - "gsd-core/workflows/execute-plan.md": "c8502b7475d797a7", + "gsd-core/workflows/execute-plan.md": "3c4310c2dd9ef0ad", "gsd-core/workflows/explore.md": "6c04f2e658d93261", "gsd-core/workflows/extract-learnings.md": "b6f01ca3d8f58de4", "gsd-core/workflows/fast.md": "11f5cd10ae5cc7d3", @@ -313,7 +313,7 @@ "gsd-core/workflows/help.md": "5d040504b9ab35e3", "gsd-core/workflows/help/modes/brief.md": "924860e1f07defb0", "gsd-core/workflows/help/modes/default.md": "08a02976c0c5cc50", - "gsd-core/workflows/help/modes/full.md": "ee47582c5d8d94a7", + "gsd-core/workflows/help/modes/full.md": "9706b4bee6829f82", "gsd-core/workflows/help/modes/topic.md": "5c160093f3cbf35d", "gsd-core/workflows/import.md": "3d3fa603ceb8bc9f", "gsd-core/workflows/inbox.md": "437f981ef9ae7b26", @@ -335,7 +335,7 @@ "gsd-core/workflows/onboard.md": "6f9e6c0b484271a9", "gsd-core/workflows/pause-work.md": "f2b33bba5593d422", "gsd-core/workflows/plan-milestone-gaps.md": "852f6d7c0c4299dc", - "gsd-core/workflows/plan-phase.md": "f584e1d652e47f40", + "gsd-core/workflows/plan-phase.md": "851eb6ba0bc911b9", "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "b36f77ac7344a072", "gsd-core/workflows/plan-phase/steps/prd-express-path.md": "197c0590326371b2", "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "49f58c3f75be3eb5", @@ -432,7 +432,7 @@ "skills/gsd-onboard/SKILL.md": "fd66b3c5b9c6a871", "skills/gsd-pause-work/SKILL.md": "95017c70ae9dca0d", "skills/gsd-phase/SKILL.md": "31578c329cc2583e", - "skills/gsd-plan-phase/SKILL.md": "54798eddf30056b5", + "skills/gsd-plan-phase/SKILL.md": "4c2c6641f59f6496", "skills/gsd-plan-review-convergence/SKILL.md": "0b549738d41d59b5", "skills/gsd-pr-branch/SKILL.md": "67f468db29ff2cf1", "skills/gsd-profile-user/SKILL.md": "19a1d3aba57f6c7c", diff --git a/tests/fixtures/golden-install-parity/opencode.json b/tests/fixtures/golden-install-parity/opencode.json index 0cfa02f66..cbf284a6e 100644 --- a/tests/fixtures/golden-install-parity/opencode.json +++ b/tests/fixtures/golden-install-parity/opencode.json @@ -16,7 +16,7 @@ "agents/gsd-domain-researcher.md": "71250e759ca9e723", "agents/gsd-eval-auditor.md": "c88890105f32ace6", "agents/gsd-eval-planner.md": "60bddb70a937f796", - "agents/gsd-executor.md": "cad2c28464d535df", + "agents/gsd-executor.md": "4f180ee85214abe8", "agents/gsd-framework-selector.md": "1c0a10355e787675", "agents/gsd-integration-checker.md": "a9de5928e5a5c649", "agents/gsd-intel-updater.md": "493e07482fa6198a", @@ -25,7 +25,7 @@ "agents/gsd-pattern-mapper.md": "7c6d1d9817a9c1e7", "agents/gsd-phase-researcher.md": "9874110700b41f48", "agents/gsd-plan-checker.md": "28ca3dc43669894f", - "agents/gsd-planner.md": "4fdb27fe53d38935", + "agents/gsd-planner.md": "4e568338c7ee6b80", "agents/gsd-project-researcher.md": "dae210ae0b3c6e2b", "agents/gsd-research-synthesizer.md": "e02c6ad5d1b74171", "agents/gsd-roadmapper.md": "1658a40b20d8b575", @@ -79,7 +79,7 @@ "command/gsd-onboard.md": "3aafaeb5d3941efe", "command/gsd-pause-work.md": "bb5bf91a2e3e480e", "command/gsd-phase.md": "6bcda1539f949d5a", - "command/gsd-plan-phase.md": "7ee44086b59862b9", + "command/gsd-plan-phase.md": "2c673275cb9517fe", "command/gsd-plan-review-convergence.md": "79e141ca34edba9a", "command/gsd-pr-branch.md": "31fca4f1d6c4ee62", "command/gsd-profile-user.md": "725c14ae7203b5b6", @@ -176,7 +176,7 @@ "gsd-core/references/planner-human-verify-mode.md": "3a625b42d9cb93ee", "gsd-core/references/planner-interface-context.md": "b28fa3da6ae739a8", "gsd-core/references/planner-load-graph-context.md": "97f6e67b56c072c1", - "gsd-core/references/planner-mvp-mode.md": "2901bb0fdb156d5c", + "gsd-core/references/planner-mvp-mode.md": "35d30284ea9110c0", "gsd-core/references/planner-reviews.md": "da39eace09a10743", "gsd-core/references/planner-revision.md": "86ba8a511f081f05", "gsd-core/references/planner-source-audit.md": "7de5bdb07232ce0b", @@ -194,7 +194,7 @@ "gsd-core/references/revision-loop.md": "e55ff32dd98c63df", "gsd-core/references/scout-codebase.md": "ba266ecc18fbf172", "gsd-core/references/security-asvs-levels.md": "4774fac3b94b6ca8", - "gsd-core/references/skeleton-template.md": "528691d1f0efa878", + "gsd-core/references/skeleton-template.md": "f11e9cd2948bd33c", "gsd-core/references/sketch-interactivity.md": "7d982fe877e1e1cc", "gsd-core/references/sketch-theme-system.md": "33e2e96e450456f8", "gsd-core/references/sketch-tooling.md": "df6c4f24c1c27611", @@ -310,7 +310,7 @@ "gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "baa2c401af10a80a", "gsd-core/workflows/execute-phase/steps/regression-gate.md": "b86ca98268dd3705", "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e", - "gsd-core/workflows/execute-plan.md": "e8de8ea661c1fe81", + "gsd-core/workflows/execute-plan.md": "cdd49ac15770c9d1", "gsd-core/workflows/explore.md": "7f5f9231cfd3089b", "gsd-core/workflows/extract-learnings.md": "92b3c0979604b7d0", "gsd-core/workflows/fast.md": "12187b242e6af970", @@ -320,7 +320,7 @@ "gsd-core/workflows/help.md": "5d040504b9ab35e3", "gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3", "gsd-core/workflows/help/modes/default.md": "be05e56b2c5ee2c0", - "gsd-core/workflows/help/modes/full.md": "35598c0ed5f7356f", + "gsd-core/workflows/help/modes/full.md": "de70e34ebd257ce9", "gsd-core/workflows/help/modes/topic.md": "0bf9ab39d7044d69", "gsd-core/workflows/import.md": "67fbf389ab8e57b4", "gsd-core/workflows/inbox.md": "a073396097c89c01", @@ -342,7 +342,7 @@ "gsd-core/workflows/onboard.md": "102556e1715c01b9", "gsd-core/workflows/pause-work.md": "70c72beca55c080a", "gsd-core/workflows/plan-milestone-gaps.md": "0a9dacd422cd9533", - "gsd-core/workflows/plan-phase.md": "824b0fa8d7554ae7", + "gsd-core/workflows/plan-phase.md": "b252c6e1427d508e", "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "4099ef6d0868de60", "gsd-core/workflows/plan-phase/steps/prd-express-path.md": "3a09141de7f3dedb", "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "e9de7a96bbfff261", @@ -469,7 +469,7 @@ "skills/gsd-onboard/SKILL.md": "ea0b1217e5ecae23", "skills/gsd-pause-work/SKILL.md": "c7e9ba4f242c4648", "skills/gsd-phase/SKILL.md": "ee78c0c56c814d84", - "skills/gsd-plan-phase/SKILL.md": "6abcc3a1568a6bb9", + "skills/gsd-plan-phase/SKILL.md": "c9b3b5cb0fbb42a9", "skills/gsd-plan-review-convergence/SKILL.md": "15ab9274bbb733a7", "skills/gsd-pr-branch/SKILL.md": "8fa5a8fa217fe913", "skills/gsd-profile-user/SKILL.md": "3e6155a64523d59f", diff --git a/tests/fixtures/golden-install-parity/pi.json b/tests/fixtures/golden-install-parity/pi.json index 1fe291ea0..1e92570d1 100644 --- a/tests/fixtures/golden-install-parity/pi.json +++ b/tests/fixtures/golden-install-parity/pi.json @@ -72,7 +72,7 @@ "gsd-core/references/planner-human-verify-mode.md": "56d05e841630b3f4", "gsd-core/references/planner-interface-context.md": "b28fa3da6ae739a8", "gsd-core/references/planner-load-graph-context.md": "ca7a7af3f35ae61b", - "gsd-core/references/planner-mvp-mode.md": "ec33050db81101a8", + "gsd-core/references/planner-mvp-mode.md": "cfd535c9c545e73e", "gsd-core/references/planner-reviews.md": "dda0193a0fbd4947", "gsd-core/references/planner-revision.md": "86ba8a511f081f05", "gsd-core/references/planner-source-audit.md": "7de5bdb07232ce0b", @@ -90,7 +90,7 @@ "gsd-core/references/revision-loop.md": "e55ff32dd98c63df", "gsd-core/references/scout-codebase.md": "ba266ecc18fbf172", "gsd-core/references/security-asvs-levels.md": "4774fac3b94b6ca8", - "gsd-core/references/skeleton-template.md": "528691d1f0efa878", + "gsd-core/references/skeleton-template.md": "f11e9cd2948bd33c", "gsd-core/references/sketch-interactivity.md": "7d982fe877e1e1cc", "gsd-core/references/sketch-theme-system.md": "33e2e96e450456f8", "gsd-core/references/sketch-tooling.md": "df6c4f24c1c27611", @@ -206,7 +206,7 @@ "gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "811b6d8489571581", "gsd-core/workflows/execute-phase/steps/regression-gate.md": "8ccc16a6c7cf6000", "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e", - "gsd-core/workflows/execute-plan.md": "ff172c3540b52e9d", + "gsd-core/workflows/execute-plan.md": "d797619290e91120", "gsd-core/workflows/explore.md": "6c04f2e658d93261", "gsd-core/workflows/extract-learnings.md": "b6f01ca3d8f58de4", "gsd-core/workflows/fast.md": "11f5cd10ae5cc7d3", @@ -216,7 +216,7 @@ "gsd-core/workflows/help.md": "5d040504b9ab35e3", "gsd-core/workflows/help/modes/brief.md": "924860e1f07defb0", "gsd-core/workflows/help/modes/default.md": "08a02976c0c5cc50", - "gsd-core/workflows/help/modes/full.md": "87951776f730390d", + "gsd-core/workflows/help/modes/full.md": "584e50ea86a86b6f", "gsd-core/workflows/help/modes/topic.md": "5c160093f3cbf35d", "gsd-core/workflows/import.md": "3d3fa603ceb8bc9f", "gsd-core/workflows/inbox.md": "437f981ef9ae7b26", @@ -238,7 +238,7 @@ "gsd-core/workflows/onboard.md": "6f9e6c0b484271a9", "gsd-core/workflows/pause-work.md": "f2b33bba5593d422", "gsd-core/workflows/plan-milestone-gaps.md": "852f6d7c0c4299dc", - "gsd-core/workflows/plan-phase.md": "5a841e26f1d6f9ae", + "gsd-core/workflows/plan-phase.md": "915e5aee921c011f", "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "b36f77ac7344a072", "gsd-core/workflows/plan-phase/steps/prd-express-path.md": "197c0590326371b2", "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "49f58c3f75be3eb5", diff --git a/tests/fixtures/golden-install-parity/qwen.json b/tests/fixtures/golden-install-parity/qwen.json index dab19ed29..23377c86c 100644 --- a/tests/fixtures/golden-install-parity/qwen.json +++ b/tests/fixtures/golden-install-parity/qwen.json @@ -16,7 +16,7 @@ "agents/gsd-domain-researcher.md": "bd054bb27beed2a7", "agents/gsd-eval-auditor.md": "57cc7458ab5de6b7", "agents/gsd-eval-planner.md": "01b665728dde4ccf", - "agents/gsd-executor.md": "72c02583b569a25f", + "agents/gsd-executor.md": "988960899bd49c68", "agents/gsd-framework-selector.md": "82ba6abea84226b7", "agents/gsd-integration-checker.md": "90835dbc7dfa1691", "agents/gsd-intel-updater.md": "3cc4f6ddd04676ec", @@ -25,7 +25,7 @@ "agents/gsd-pattern-mapper.md": "83c66c7722e8b165", "agents/gsd-phase-researcher.md": "284e55a86ae46d7f", "agents/gsd-plan-checker.md": "c8a8fcc8ed38eff0", - "agents/gsd-planner.md": "a14e9e4981519580", + "agents/gsd-planner.md": "75989c686d191143", "agents/gsd-project-researcher.md": "b5baac64a15c85e2", "agents/gsd-research-synthesizer.md": "6cd9b501dc97bd50", "agents/gsd-roadmapper.md": "c357a77ab919e9e5", @@ -105,7 +105,7 @@ "gsd-core/references/planner-human-verify-mode.md": "ee0edddeed8eb946", "gsd-core/references/planner-interface-context.md": "b28fa3da6ae739a8", "gsd-core/references/planner-load-graph-context.md": "3f6f5ee62d86f72d", - "gsd-core/references/planner-mvp-mode.md": "ec33050db81101a8", + "gsd-core/references/planner-mvp-mode.md": "cfd535c9c545e73e", "gsd-core/references/planner-reviews.md": "da39eace09a10743", "gsd-core/references/planner-revision.md": "86ba8a511f081f05", "gsd-core/references/planner-source-audit.md": "7de5bdb07232ce0b", @@ -123,7 +123,7 @@ "gsd-core/references/revision-loop.md": "e55ff32dd98c63df", "gsd-core/references/scout-codebase.md": "ba266ecc18fbf172", "gsd-core/references/security-asvs-levels.md": "4774fac3b94b6ca8", - "gsd-core/references/skeleton-template.md": "528691d1f0efa878", + "gsd-core/references/skeleton-template.md": "f11e9cd2948bd33c", "gsd-core/references/sketch-interactivity.md": "7d982fe877e1e1cc", "gsd-core/references/sketch-theme-system.md": "33e2e96e450456f8", "gsd-core/references/sketch-tooling.md": "df6c4f24c1c27611", @@ -239,7 +239,7 @@ "gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "98db1ba4c39cd784", "gsd-core/workflows/execute-phase/steps/regression-gate.md": "56fc78db4de210df", "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e", - "gsd-core/workflows/execute-plan.md": "503b0ced0731dc38", + "gsd-core/workflows/execute-plan.md": "79410db4a6bb5a46", "gsd-core/workflows/explore.md": "e1a83a8982532e5b", "gsd-core/workflows/extract-learnings.md": "dd4fdb88605de49a", "gsd-core/workflows/fast.md": "93ed453edddd8c0c", @@ -249,7 +249,7 @@ "gsd-core/workflows/help.md": "5d040504b9ab35e3", "gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3", "gsd-core/workflows/help/modes/default.md": "7ca77077085452f5", - "gsd-core/workflows/help/modes/full.md": "00c1433a639f6ed8", + "gsd-core/workflows/help/modes/full.md": "9d620deed3bf9011", "gsd-core/workflows/help/modes/topic.md": "6e42db16f1568be9", "gsd-core/workflows/import.md": "e56c18a984396066", "gsd-core/workflows/inbox.md": "91aac6360e1a8672", @@ -271,7 +271,7 @@ "gsd-core/workflows/onboard.md": "3c50ed1f1fd07619", "gsd-core/workflows/pause-work.md": "be33f84dc1d4822f", "gsd-core/workflows/plan-milestone-gaps.md": "d98e98486123eb97", - "gsd-core/workflows/plan-phase.md": "e33c0b28f48db48a", + "gsd-core/workflows/plan-phase.md": "2d1f7925036bd901", "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "4099ef6d0868de60", "gsd-core/workflows/plan-phase/steps/prd-express-path.md": "c22ff5ea46de665a", "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "d050d8d551ed1756", @@ -417,7 +417,7 @@ "skills/gsd-ns-workflow/skills/mvp-phase/SKILL.md": "f9a1348c6c297579", "skills/gsd-ns-workflow/skills/next/SKILL.md": "13e394affe675498", "skills/gsd-ns-workflow/skills/phase/SKILL.md": "1ed640e5f06c7be6", - "skills/gsd-ns-workflow/skills/plan-phase/SKILL.md": "75979bb1db5557af", + "skills/gsd-ns-workflow/skills/plan-phase/SKILL.md": "cdfe074359399099", "skills/gsd-ns-workflow/skills/plan-review-convergence/SKILL.md": "c3dd8bfa877eaed5", "skills/gsd-ns-workflow/skills/progress/SKILL.md": "943538c4ac6bde19", "skills/gsd-ns-workflow/skills/quick/SKILL.md": "bd5e4cb79bc41611", diff --git a/tests/fixtures/golden-install-parity/trae.json b/tests/fixtures/golden-install-parity/trae.json index 2d534e876..7edeb68ef 100644 --- a/tests/fixtures/golden-install-parity/trae.json +++ b/tests/fixtures/golden-install-parity/trae.json @@ -16,7 +16,7 @@ "agents/gsd-domain-researcher.md": "b80f76874c04e515", "agents/gsd-eval-auditor.md": "470bf16303ec4d2e", "agents/gsd-eval-planner.md": "22334fde85723c9d", - "agents/gsd-executor.md": "e5b96a52bd3c96c8", + "agents/gsd-executor.md": "2e92d53ec70b614f", "agents/gsd-framework-selector.md": "7726fccc86bfeb50", "agents/gsd-integration-checker.md": "7cd2072984411c7f", "agents/gsd-intel-updater.md": "83de6ba9172891c3", @@ -25,7 +25,7 @@ "agents/gsd-pattern-mapper.md": "b5d7a4abb1baecb9", "agents/gsd-phase-researcher.md": "2256f1f82212c757", "agents/gsd-plan-checker.md": "523119bd5d6599fe", - "agents/gsd-planner.md": "d0e98ddbfb1339f5", + "agents/gsd-planner.md": "3cbce9388340c855", "agents/gsd-project-researcher.md": "ddf7794e81300032", "agents/gsd-research-synthesizer.md": "a124b00271748d07", "agents/gsd-roadmapper.md": "493ef92b42b12cf4", @@ -105,7 +105,7 @@ "gsd-core/references/planner-human-verify-mode.md": "0bb1176995ac1d81", "gsd-core/references/planner-interface-context.md": "b28fa3da6ae739a8", "gsd-core/references/planner-load-graph-context.md": "9a9383599893ea7e", - "gsd-core/references/planner-mvp-mode.md": "ec33050db81101a8", + "gsd-core/references/planner-mvp-mode.md": "cfd535c9c545e73e", "gsd-core/references/planner-reviews.md": "da39eace09a10743", "gsd-core/references/planner-revision.md": "86ba8a511f081f05", "gsd-core/references/planner-source-audit.md": "7de5bdb07232ce0b", @@ -123,7 +123,7 @@ "gsd-core/references/revision-loop.md": "e55ff32dd98c63df", "gsd-core/references/scout-codebase.md": "ba266ecc18fbf172", "gsd-core/references/security-asvs-levels.md": "4774fac3b94b6ca8", - "gsd-core/references/skeleton-template.md": "528691d1f0efa878", + "gsd-core/references/skeleton-template.md": "f11e9cd2948bd33c", "gsd-core/references/sketch-interactivity.md": "7d982fe877e1e1cc", "gsd-core/references/sketch-theme-system.md": "33e2e96e450456f8", "gsd-core/references/sketch-tooling.md": "df6c4f24c1c27611", @@ -239,7 +239,7 @@ "gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "0a9e915170c7121c", "gsd-core/workflows/execute-phase/steps/regression-gate.md": "4b00ef3484a84954", "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e", - "gsd-core/workflows/execute-plan.md": "4910f75bab2040ab", + "gsd-core/workflows/execute-plan.md": "feae1e61007feab2", "gsd-core/workflows/explore.md": "8a5437aa0c239c38", "gsd-core/workflows/extract-learnings.md": "3fcc858b20d0d0e6", "gsd-core/workflows/fast.md": "0f05b1e008ac2fc2", @@ -249,7 +249,7 @@ "gsd-core/workflows/help.md": "08e1349950c5602a", "gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3", "gsd-core/workflows/help/modes/default.md": "ed7368e0d1b8644a", - "gsd-core/workflows/help/modes/full.md": "b3287aa383806758", + "gsd-core/workflows/help/modes/full.md": "249beacac5798123", "gsd-core/workflows/help/modes/topic.md": "8a5344e56fa64ab9", "gsd-core/workflows/import.md": "31af58468db15daf", "gsd-core/workflows/inbox.md": "e9ea37b2d46dc5b4", @@ -271,7 +271,7 @@ "gsd-core/workflows/onboard.md": "61f111302af0f404", "gsd-core/workflows/pause-work.md": "c20d267e28ce92f0", "gsd-core/workflows/plan-milestone-gaps.md": "26db7b9329b7ddc8", - "gsd-core/workflows/plan-phase.md": "8bc16d0a44541ac4", + "gsd-core/workflows/plan-phase.md": "c4d0d0558a3b116e", "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "e06ccd4d4c0703fb", "gsd-core/workflows/plan-phase/steps/prd-express-path.md": "778b73a8db6f7c32", "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "619946c879f33b9d", @@ -389,7 +389,7 @@ "skills/gsd-ns-workflow/skills/mvp-phase/SKILL.md": "fef8178c9920c2dd", "skills/gsd-ns-workflow/skills/next/SKILL.md": "faadd9e2817e7324", "skills/gsd-ns-workflow/skills/phase/SKILL.md": "df3efcd61f7cc796", - "skills/gsd-ns-workflow/skills/plan-phase/SKILL.md": "b6f6395312983c31", + "skills/gsd-ns-workflow/skills/plan-phase/SKILL.md": "a937c8c42e5eaea3", "skills/gsd-ns-workflow/skills/plan-review-convergence/SKILL.md": "d67e16a8e28b780d", "skills/gsd-ns-workflow/skills/progress/SKILL.md": "37a37d2cdfba46ea", "skills/gsd-ns-workflow/skills/quick/SKILL.md": "6fd1b96274b23a9f", diff --git a/tests/fixtures/golden-install-parity/windsurf.json b/tests/fixtures/golden-install-parity/windsurf.json index 8e63e790f..9e15bcb5d 100644 --- a/tests/fixtures/golden-install-parity/windsurf.json +++ b/tests/fixtures/golden-install-parity/windsurf.json @@ -16,7 +16,7 @@ "agents/gsd-domain-researcher.md": "56395dbdabf076f6", "agents/gsd-eval-auditor.md": "fb64fc5acf359747", "agents/gsd-eval-planner.md": "2049dac060d00eda", - "agents/gsd-executor.md": "1eb9f58c5e9da94d", + "agents/gsd-executor.md": "5d56ba16562745d0", "agents/gsd-framework-selector.md": "4b77eebbe9288d80", "agents/gsd-integration-checker.md": "4ffb37fb230c2b90", "agents/gsd-intel-updater.md": "a81d77c143c02108", @@ -25,7 +25,7 @@ "agents/gsd-pattern-mapper.md": "ada0c169daa2f0ec", "agents/gsd-phase-researcher.md": "2a45ebde829555ec", "agents/gsd-plan-checker.md": "33fbf70b7b24eb1e", - "agents/gsd-planner.md": "f408404c60840c9f", + "agents/gsd-planner.md": "c4072a4678c17485", "agents/gsd-project-researcher.md": "f6697b316b5995ba", "agents/gsd-research-synthesizer.md": "04036f38c1d373ea", "agents/gsd-roadmapper.md": "fb62e1e3de84b5f9", @@ -105,7 +105,7 @@ "gsd-core/references/planner-human-verify-mode.md": "86c8c7052806711f", "gsd-core/references/planner-interface-context.md": "b28fa3da6ae739a8", "gsd-core/references/planner-load-graph-context.md": "18d50b6d12db830e", - "gsd-core/references/planner-mvp-mode.md": "ec33050db81101a8", + "gsd-core/references/planner-mvp-mode.md": "cfd535c9c545e73e", "gsd-core/references/planner-reviews.md": "da39eace09a10743", "gsd-core/references/planner-revision.md": "86ba8a511f081f05", "gsd-core/references/planner-source-audit.md": "7de5bdb07232ce0b", @@ -123,7 +123,7 @@ "gsd-core/references/revision-loop.md": "e55ff32dd98c63df", "gsd-core/references/scout-codebase.md": "ba266ecc18fbf172", "gsd-core/references/security-asvs-levels.md": "4774fac3b94b6ca8", - "gsd-core/references/skeleton-template.md": "528691d1f0efa878", + "gsd-core/references/skeleton-template.md": "f11e9cd2948bd33c", "gsd-core/references/sketch-interactivity.md": "7d982fe877e1e1cc", "gsd-core/references/sketch-theme-system.md": "33e2e96e450456f8", "gsd-core/references/sketch-tooling.md": "df6c4f24c1c27611", @@ -239,7 +239,7 @@ "gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "15bca39a75c664be", "gsd-core/workflows/execute-phase/steps/regression-gate.md": "02324a66cb42fae3", "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e", - "gsd-core/workflows/execute-plan.md": "c8567fb4438b4404", + "gsd-core/workflows/execute-plan.md": "403c53e3148033a3", "gsd-core/workflows/explore.md": "04e461ff8159a24e", "gsd-core/workflows/extract-learnings.md": "af793bdf4ffd1c8a", "gsd-core/workflows/fast.md": "b03b9f595892479a", @@ -249,7 +249,7 @@ "gsd-core/workflows/help.md": "08e1349950c5602a", "gsd-core/workflows/help/modes/brief.md": "fa2675516b40e2e3", "gsd-core/workflows/help/modes/default.md": "6a253f1756f74e95", - "gsd-core/workflows/help/modes/full.md": "0cd464dcd077bbfc", + "gsd-core/workflows/help/modes/full.md": "8f1bf0e563a02255", "gsd-core/workflows/help/modes/topic.md": "cee80e0adfa3b06c", "gsd-core/workflows/import.md": "029cacf530aca86b", "gsd-core/workflows/inbox.md": "797c287852eb8957", @@ -271,7 +271,7 @@ "gsd-core/workflows/onboard.md": "20c28136423d40ac", "gsd-core/workflows/pause-work.md": "93fcc1c845da6396", "gsd-core/workflows/plan-milestone-gaps.md": "7880866ee1caf923", - "gsd-core/workflows/plan-phase.md": "29567e9419151453", + "gsd-core/workflows/plan-phase.md": "b0d5d582ef76c0ff", "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "e06ccd4d4c0703fb", "gsd-core/workflows/plan-phase/steps/prd-express-path.md": "80b1ba493a9a967f", "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "3fed4740a91d0443", diff --git a/tests/fixtures/golden-install-parity/zcode.json b/tests/fixtures/golden-install-parity/zcode.json index b71668d20..7d04a71cb 100644 --- a/tests/fixtures/golden-install-parity/zcode.json +++ b/tests/fixtures/golden-install-parity/zcode.json @@ -16,7 +16,7 @@ "agents/gsd-domain-researcher.md": "049f588663814fa2", "agents/gsd-eval-auditor.md": "54870d3b07433525", "agents/gsd-eval-planner.md": "552e9fa164c51ce8", - "agents/gsd-executor.md": "fdd9635cee849c82", + "agents/gsd-executor.md": "b49a6d92b2cd9831", "agents/gsd-framework-selector.md": "8a795f230436ad2e", "agents/gsd-integration-checker.md": "c1760a0bbd4f7bf5", "agents/gsd-intel-updater.md": "944f1d903e2e9e09", @@ -25,7 +25,7 @@ "agents/gsd-pattern-mapper.md": "68ecefd60811a669", "agents/gsd-phase-researcher.md": "2235f61764d8e969", "agents/gsd-plan-checker.md": "bb38f345d3d41edc", - "agents/gsd-planner.md": "262cbc06269277d1", + "agents/gsd-planner.md": "e76def94ab518216", "agents/gsd-project-researcher.md": "f572892f138734ff", "agents/gsd-research-synthesizer.md": "29949bf3f049a8f1", "agents/gsd-roadmapper.md": "840ac933e3b094f9", @@ -79,7 +79,7 @@ "commands/gsd-onboard.md": "a35340ce39334fc7", "commands/gsd-pause-work.md": "40a953fcddbedb5d", "commands/gsd-phase.md": "5dd3d40e3461a973", - "commands/gsd-plan-phase.md": "2fb6cc9c4caa6a36", + "commands/gsd-plan-phase.md": "3fd288ea8d4748e2", "commands/gsd-plan-review-convergence.md": "f8e7ea9c70e59035", "commands/gsd-pr-branch.md": "ab1fcffe92129061", "commands/gsd-profile-user.md": "37c9ef202669bfd3", @@ -176,7 +176,7 @@ "gsd-core/references/planner-human-verify-mode.md": "56d05e841630b3f4", "gsd-core/references/planner-interface-context.md": "b28fa3da6ae739a8", "gsd-core/references/planner-load-graph-context.md": "ca7a7af3f35ae61b", - "gsd-core/references/planner-mvp-mode.md": "ec33050db81101a8", + "gsd-core/references/planner-mvp-mode.md": "cfd535c9c545e73e", "gsd-core/references/planner-reviews.md": "dda0193a0fbd4947", "gsd-core/references/planner-revision.md": "86ba8a511f081f05", "gsd-core/references/planner-source-audit.md": "7de5bdb07232ce0b", @@ -194,7 +194,7 @@ "gsd-core/references/revision-loop.md": "e55ff32dd98c63df", "gsd-core/references/scout-codebase.md": "ba266ecc18fbf172", "gsd-core/references/security-asvs-levels.md": "4774fac3b94b6ca8", - "gsd-core/references/skeleton-template.md": "528691d1f0efa878", + "gsd-core/references/skeleton-template.md": "f11e9cd2948bd33c", "gsd-core/references/sketch-interactivity.md": "7d982fe877e1e1cc", "gsd-core/references/sketch-theme-system.md": "33e2e96e450456f8", "gsd-core/references/sketch-tooling.md": "df6c4f24c1c27611", @@ -310,7 +310,7 @@ "gsd-core/workflows/execute-phase/steps/post-merge-gate.md": "811b6d8489571581", "gsd-core/workflows/execute-phase/steps/regression-gate.md": "8ccc16a6c7cf6000", "gsd-core/workflows/execute-phase/steps/worktree-recovery-policy.md": "be84efbd71e1513e", - "gsd-core/workflows/execute-plan.md": "ed874410972d32b7", + "gsd-core/workflows/execute-plan.md": "4614bb2145a7f737", "gsd-core/workflows/explore.md": "6c04f2e658d93261", "gsd-core/workflows/extract-learnings.md": "b6f01ca3d8f58de4", "gsd-core/workflows/fast.md": "11f5cd10ae5cc7d3", @@ -320,7 +320,7 @@ "gsd-core/workflows/help.md": "5d040504b9ab35e3", "gsd-core/workflows/help/modes/brief.md": "924860e1f07defb0", "gsd-core/workflows/help/modes/default.md": "08a02976c0c5cc50", - "gsd-core/workflows/help/modes/full.md": "895b35f264530d24", + "gsd-core/workflows/help/modes/full.md": "1810842c75f73fb2", "gsd-core/workflows/help/modes/topic.md": "5c160093f3cbf35d", "gsd-core/workflows/import.md": "3d3fa603ceb8bc9f", "gsd-core/workflows/inbox.md": "437f981ef9ae7b26", @@ -342,7 +342,7 @@ "gsd-core/workflows/onboard.md": "6f9e6c0b484271a9", "gsd-core/workflows/pause-work.md": "f2b33bba5593d422", "gsd-core/workflows/plan-milestone-gaps.md": "852f6d7c0c4299dc", - "gsd-core/workflows/plan-phase.md": "3784a2a5e8f098cd", + "gsd-core/workflows/plan-phase.md": "d491791075b1aca9", "gsd-core/workflows/plan-phase/steps/closed-phase-gate.md": "b36f77ac7344a072", "gsd-core/workflows/plan-phase/steps/prd-express-path.md": "197c0590326371b2", "gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md": "49f58c3f75be3eb5", @@ -460,7 +460,7 @@ "skills/gsd-ns-workflow/skills/mvp-phase/SKILL.md": "3455ea7562a447a2", "skills/gsd-ns-workflow/skills/next/SKILL.md": "63659cd48a0276f9", "skills/gsd-ns-workflow/skills/phase/SKILL.md": "b377b03d13db8573", - "skills/gsd-ns-workflow/skills/plan-phase/SKILL.md": "a453c632234623d1", + "skills/gsd-ns-workflow/skills/plan-phase/SKILL.md": "c7cfcb8f3606e69c", "skills/gsd-ns-workflow/skills/plan-review-convergence/SKILL.md": "ded70bf0252c6307", "skills/gsd-ns-workflow/skills/progress/SKILL.md": "fb24eab4a0e5f6a3", "skills/gsd-ns-workflow/skills/quick/SKILL.md": "48629fef2b9ac5b0", diff --git a/tests/tracer-bullet.test.cjs b/tests/tracer-bullet.test.cjs new file mode 100644 index 000000000..30d974e04 --- /dev/null +++ b/tests/tracer-bullet.test.cjs @@ -0,0 +1,370 @@ +// allow-test-rule: source-text-is-the-product [#1945] +// Agent .md / workflow .md / command .md / reference .md / docs .md files — +// their text IS the deployed contract the runtime (and the changelog/docs +// surface) loads. The planner/executor "task type" enum and the tracer-first +// decomposition discipline are prose contracts, not compiled code, so the +// contract test asserts on the shipped text. The behavioral suite at the bottom +// exercises the ONE code seam (verify plan-structure) through the CLI. + +/** + * Tracer-bullet vertical slices (#1945). + * + * Feature: make "thin end-to-end slice first, verify, then expand" a first-class, + * default planning + execution discipline (not an opt-in `--mvp` mode). + * + * 1. Planner — a first-class `tracer` task type + a tracer-first default. + * 2. Executor — a feedback gate after the tracer slice. + * 3. Terminology — `tracer bullet` promoted to the CONTEXT.md glossary. + * + * Acceptance criteria (verbatim from the issue) mapped to tests below. + */ + +const { test, describe } = require('node:test'); +const assert = require('node:assert/strict'); +const fs = require('fs'); +const path = require('path'); +const { runGsdTools, createTempProject, cleanup } = require('./helpers.cjs'); + +const ROOT = path.join(__dirname, '..'); +const read = (rel) => fs.readFileSync(path.join(ROOT, rel), 'utf-8'); + +const PLANNER = read('agents/gsd-planner.md'); +const EXECUTOR = read('agents/gsd-executor.md'); +const EXECUTE_PLAN = read('gsd-core/workflows/execute-plan.md'); +const WORKFLOW = read('gsd-core/workflows/plan-phase.md'); +const COMMAND = read('commands/gsd/plan-phase.md'); +const HELP_FULL = read('gsd-core/workflows/help/modes/full.md'); +const MVP_REF = read('gsd-core/references/planner-mvp-mode.md'); +const CONTEXT = read('CONTEXT.md'); +const COMMANDS_DOC = read('docs/COMMANDS.md'); +const PLAN_MD_REF = read('docs/reference/plan-md.md'); +const HOWTO = read('docs/how-to/plan-a-phase.md'); +const AGENTS_DOC = read('docs/AGENTS.md'); + +// ─── contract parsers (typed views over the deployed prose) ────────────────── + +// Isolate the planner's default-decomposition section so we can prove tracer-first +// is NOT gated behind a flag/mode conditional. +function plannerTracerSection(md) { + const start = md.indexOf('## Tracer-First Decomposition'); + if (start === -1) return ''; + const rest = md.slice(start + 3); + const nextHeading = rest.search(/\n## /); + return nextHeading === -1 ? md.slice(start) : md.slice(start, start + 3 + nextHeading); +} + +function parsePlannerContract(md) { + const section = plannerTracerSection(md); + return { + hasTracerFirstSection: section.length > 0, + // "default" and "not gated behind a flag" — the whole point of #1945. + declaresDefault: /\bdefault\b/i.test(section) && /not gated behind a flag/i.test(section), + leadsWithTracer: /LEADS with one `type="tracer"`/.test(section), + documentsTracerTaskType: //.test(section), + // Production-quality, not a prototype (the book's core distinction). + productionQualityNotPrototype: + /production-quality, not a prototype/i.test(section) && + /architectural gaps are not/i.test(section), + // A real, runnable END-TO-END verify (not a per-layer unit check). + endToEndVerify: /END-TO-END/i.test(section) && /not a per-layer unit test/i.test(section), + // --no-tracer / TRACER_MODE=false restores horizontal layers. + documentsNoTracerOptOut: + /--no-tracer/.test(section) && /TRACER_MODE=false/.test(section) && /horizontal layers/i.test(section), + // The break_into_tasks step itself leads with the tracer by default. + breakStepLeadsWithTracer: + /\*\*Lead with the tracer\.\*\*/.test(md) && + /Unless `TRACER_MODE=false`/.test(md), + // Composition with --tdd (tracer starts red). + composesWithTdd: /TDD composition/i.test(section) && /starts red/i.test(section), + // MVP is now enrichment on top, not the toggle for vertical slices. + mvpIsEnrichment: /MVP enrichment/i.test(section) && /no longer \*turns on\* vertical slices/i.test(section), + }; +} + +function parseExecutorContract(md) { + return { + recognizesTracerType: /\*\*If `type="tracer"`:\*\*/.test(md), + // The gate runs BEFORE expansion tasks — an early integration checkpoint. + earlyIntegrationGate: + /tracer feedback gate BEFORE any expansion task/i.test(md) && + /early integration checkpoint/i.test(md), + // Autonomous: halt-on-fail before any expansion task. + // Keyed on the file's own auto-mode definition (AUTO_CHAIN or AUTO_CFG), + // not AUTO_CFG alone — see . + autoHaltsOnFailure: + /Autonomous run \(auto mode active/i.test(md) && + /`AUTO_CHAIN` or `AUTO_CFG`/.test(md) && + /HALT and surface it/i.test(md) && + /do NOT proceed to expansion tasks/i.test(md), + // Interactive: emit checkpoint:human-verify immediately after the tracer. + interactiveHumanVerify: + /Interactive run \(auto mode not active\)/i.test(md) && + /checkpoint:human-verify/.test(md), + // Cross-referenced in the checkpoint protocol section too. + documentedInCheckpointProtocol: /\*\*Tracer feedback gate:\*\*/.test(md), + }; +} + +function parseWorkflowContract(md) { + const lines = md.split(/\r?\n/); + const argLine = lines.find((l) => l.includes('Extract from $ARGUMENTS:')) || ''; + return { + argListDocumentsNoTracer: argLine.includes('--no-tracer'), + resolvesTracerMode: + md.includes('TRACER_MODE=true') && + md.includes('--no-tracer') && + md.includes('TRACER_MODE=false'), + injectsTracerModeToPlanner: /\*\*TRACER_MODE:\*\* \$\{TRACER_MODE\}/.test(md), + // Guard: must not eagerly @-import the reference (size-budget rule, mirrors + // tests/workflow-size-budget.test.cjs). An eager import is an @-path at line start. + noEagerImportOfMvpRef: !/^\s*@[^\n]*planner-mvp-mode\.md/m.test(md), + }; +} + +function parseCommandContract(md) { + const argHint = (md.split(/\r?\n/).find((l) => l.startsWith('argument-hint:')) || ''); + return { + argHintHasNoTracer: argHint.includes('--no-tracer'), + flagsDocumentNoTracer: /- `--no-tracer` —/.test(md), + }; +} + +// ─── Suite 1: Planner — first-class tracer task + tracer-first default ──────── + +describe('#1945 planner: first-class tracer task + tracer-first default', () => { + const c = parsePlannerContract(PLANNER); + + test('planner has a Tracer-First Decomposition section that is the DEFAULT (not flag-gated)', () => { + assert.ok(c.hasTracerFirstSection, 'planner must document a "Tracer-First Decomposition" section'); + assert.ok(c.declaresDefault, 'the section must declare tracer-first the default, not gated behind a flag'); + }); + + // Acceptance: with no flags, PLAN.md leads with exactly one tracer task touching every layer. + test('every plan LEADS with one type="tracer" task (acceptance #1)', () => { + assert.ok(c.leadsWithTracer, 'planner must instruct leading every plan with one type="tracer" task'); + assert.ok(c.documentsTracerTaskType, 'planner must document the shape'); + assert.ok(c.breakStepLeadsWithTracer, 'the break_into_tasks step must lead with the tracer by default'); + }); + + // Acceptance: the tracer includes a real end-to-end , not a per-layer unit check. + test('tracer task carries a real end-to-end (acceptance #2)', () => { + assert.ok(c.endToEndVerify, 'planner must require a real END-TO-END verify, not a per-layer unit test'); + }); + + // Acceptance: --no-tracer reproduces today's horizontal-layer default. + test('--no-tracer / TRACER_MODE=false restores horizontal layers (acceptance #5)', () => { + assert.ok(c.documentsNoTracerOptOut, 'planner must document the --no-tracer horizontal-layer opt-out'); + }); + + test('tracer is production-quality, not a prototype', () => { + assert.ok(c.productionQualityNotPrototype, 'planner must state a tracer is production-quality, not a prototype'); + }); + + test('composes with --tdd (tracer starts red) and --mvp is enrichment on top', () => { + assert.ok(c.composesWithTdd, 'planner must document tracer + --tdd composition'); + assert.ok(c.mvpIsEnrichment, 'planner must reframe MVP as enrichment, no longer the toggle for vertical slices'); + }); + + test('vertical-slice reference is reconciled to tracer-first-by-default', () => { + assert.match(MVP_REF, /Tracer-First Decomposition/, 'reference title must reflect tracer-first'); + assert.match(MVP_REF, /the \*\*default\*\* tracer-first decomposition/, 'reference must state tracer-first is the default'); + assert.doesNotMatch( + MVP_REF, + /only when `MVP_MODE=true`/, + 'reference must no longer gate vertical slices behind MVP_MODE only', + ); + }); +}); + +// ─── Suite 2: Executor — post-tracer feedback gate ─────────────────────────── + +describe('#1945 executor: post-tracer feedback gate', () => { + const c = parseExecutorContract(EXECUTOR); + + test('executor recognizes type="tracer"', () => { + assert.ok(c.recognizesTracerType, 'executor must handle type="tracer"'); + }); + + test('runs an early integration gate BEFORE expansion tasks', () => { + assert.ok(c.earlyIntegrationGate, 'executor must run the tracer verify as an early integration checkpoint before expansion'); + }); + + // Acceptance: autonomous run halts before any expansion task on a failing tracer. + test('autonomous run HALTS before expansion on a failing tracer (acceptance #3)', () => { + assert.ok(c.autoHaltsOnFailure, 'autonomous run must halt (surfaced) before expansion when the tracer verify fails'); + }); + + // Acceptance: interactive run presents a human-verify checkpoint after the tracer. + test('interactive run emits checkpoint:human-verify after the tracer (acceptance #4)', () => { + assert.ok(c.interactiveHumanVerify, 'interactive run must emit checkpoint:human-verify immediately after the tracer'); + }); + + test('gate is cross-referenced in the checkpoint protocol', () => { + assert.ok(c.documentedInCheckpointProtocol, 'checkpoint protocol must cross-reference the tracer feedback gate'); + }); + + // The execute-plan orchestrator has its OWN inline per-task dispatch (used for + // step-by-step / non-Claude-Code / inline execution) — it must know tracer too, + // else the gate silently no-ops on those paths. + test('execute-plan.md inline dispatch also handles type="tracer" with the gate', () => { + assert.match(EXECUTE_PLAN, /`type="tracer"`/, 'execute-plan.md inline dispatch must handle type="tracer"'); + assert.match(EXECUTE_PLAN, /tracer feedback gate BEFORE any expansion task/i, 'execute-plan.md must run the tracer gate before expansion'); + assert.match(EXECUTE_PLAN, /Auto mode active \(`AUTO_CHAIN` or `AUTO_CFG`\)/, 'execute-plan.md tracer gate must key on auto mode (AUTO_CHAIN or AUTO_CFG)'); + }); +}); + +// ─── Suite 3: Orchestrator + command wire --no-tracer ──────────────────────── + +describe('#1945 plan-phase orchestrator + command: --no-tracer wiring', () => { + const w = parseWorkflowContract(WORKFLOW); + const cmd = parseCommandContract(COMMAND); + + test('workflow argument list documents --no-tracer', () => { + assert.ok(w.argListDocumentsNoTracer, 'plan-phase workflow must extract --no-tracer from $ARGUMENTS'); + }); + + test('workflow resolves TRACER_MODE (default true, --no-tracer -> false)', () => { + assert.ok(w.resolvesTracerMode, 'workflow must resolve TRACER_MODE with a --no-tracer -> false path'); + }); + + test('workflow injects TRACER_MODE into the planner subagent prompt', () => { + assert.ok(w.injectsTracerModeToPlanner, 'workflow must wire **TRACER_MODE:** ${TRACER_MODE} into the planner prompt'); + }); + + test('workflow does not eagerly @-import planner-mvp-mode.md (size-budget guard)', () => { + assert.ok(w.noEagerImportOfMvpRef, 'planner-mvp-mode.md must stay lazily loaded by the planner, not eagerly imported'); + }); + + test('command argument-hint and flags document --no-tracer', () => { + assert.ok(cmd.argHintHasNoTracer, 'command argument-hint must advertise --no-tracer'); + assert.ok(cmd.flagsDocumentNoTracer, 'command flags list must document --no-tracer'); + }); + + test('/gsd:help full listing documents --no-tracer', () => { + assert.match(HELP_FULL, /\[--no-tracer\]/, 'help/modes/full.md plan-phase usage line must list --no-tracer'); + assert.match(HELP_FULL, /- `--no-tracer` —/, 'help/modes/full.md must describe the --no-tracer flag'); + }); +}); + +// ─── Suite 4: Terminology — CONTEXT glossary + docs ────────────────────────── + +describe('#1945 glossary + docs', () => { + // Acceptance: CONTEXT.md glossary defines tracer bullet vs prototype. + test('CONTEXT.md glossary defines "Tracer Bullet" against "prototype" (acceptance #7)', () => { + assert.match(CONTEXT, /^### Tracer Bullet$/m, 'CONTEXT.md must have a ### Tracer Bullet glossary entry'); + const start = CONTEXT.indexOf('### Tracer Bullet'); + const entry = CONTEXT.slice(start, start + 1400); + assert.match(entry, /production-quality/i, 'entry must call a tracer production-quality'); + assert.match(entry, /\bprototype\b/i, 'entry must contrast tracer with a prototype'); + assert.match(entry, /throwaway/i, 'entry must describe a prototype as throwaway'); + }); + + test('docs/COMMANDS.md documents the --no-tracer flag', () => { + assert.match(COMMANDS_DOC, /\| `--no-tracer` \|/, 'COMMANDS.md flag table must include --no-tracer'); + }); + + test('docs/reference/plan-md.md task-types table includes tracer', () => { + assert.match(PLAN_MD_REF, /\| `tracer` \|/, 'plan-md.md Task types table must include a tracer row'); + }); + + test('docs/how-to and docs/AGENTS reflect tracer-first + the executor gate', () => { + assert.match(HOWTO, /tracer/i, 'how-to must mention tracer-first'); + assert.match(HOWTO, /--no-tracer/, 'how-to must mention the --no-tracer opt-out'); + assert.match(AGENTS_DOC, /task types: auto, tracer/i, 'AGENTS.md must list tracer among task types'); + assert.match(AGENTS_DOC, /Tracer feedback gate/i, 'AGENTS.md must describe the executor tracer gate'); + }); +}); + +// ─── Suite 5: Behavioral — the one code seam accepts tracer ────────────────── +// Acceptance #6: `tracer` is accepted everywhere the task-type enum is validated; +// no schema/validation path rejects it. `verify plan-structure` is the only code +// path that inspects . Prove it accepts tracer and never confuses +// a tracer for a checkpoint. + +// Minimal valid PLAN.md; `taskType` and `n` let us sweep the tracer-count boundary. +function planWith({ taskType = 'auto', n = 1, autonomous = 'true' } = {}) { + const tasks = []; + for (let i = 0; i < n; i++) { + tasks.push( + ``, + ` Task ${i + 1}: End-to-end slice`, + ' some/file.ts', + ' Wire one path through every layer', + ' echo ok', + ' Happy path works end-to-end', + '', + '', + ); + } + return [ + '---', + 'phase: 01-test', + 'plan: 01', + 'type: execute', + 'wave: 1', + 'depends_on: []', + 'files_modified: [some/file.ts]', + `autonomous: ${autonomous}`, + 'must_haves:', + ' truths:', + ' - "something is true"', + '---', + '', + '', + '', + ...tasks, + '', + ].join('\n'); +} + +function verifyPlan(tmpDir, content) { + const rel = path.join('.planning', 'phases', '01-test', '01-01-PLAN.md'); + fs.mkdirSync(path.join(tmpDir, '.planning', 'phases', '01-test'), { recursive: true }); + fs.writeFileSync(path.join(tmpDir, rel), content); + const result = runGsdTools(`verify plan-structure ${rel}`, tmpDir); + assert.ok(result.success, `verify plan-structure failed to run: ${result.error}`); + return JSON.parse(result.output); +} + +describe('#1945 behavioral: verify plan-structure accepts type="tracer" (acceptance #6)', () => { + test('a type="tracer" plan validates with no errors', (t) => { + const tmpDir = createTempProject(); + t.after(() => cleanup(tmpDir)); + + const out = verifyPlan(tmpDir, planWith({ taskType: 'tracer', n: 1 })); + assert.strictEqual(out.valid, true, `tracer plan must be valid, errors: ${JSON.stringify(out.errors)}`); + assert.deepStrictEqual(out.errors, [], 'no validation path may reject a tracer task'); + assert.ok( + !out.errors.some((e) => /tracer/i.test(e)) && !(out.warnings || []).some((w) => /tracer/i.test(w)), + 'nothing may flag the tracer task type specifically', + ); + }); + + // verify plan-structure is task-type-agnostic: it accepts any count of tracer + // tasks (0/1/2) with no type-based rejection. This supports acceptance #6; it is + // NOT a claim about the planner's "exactly one leading tracer" contract, which is + // planner prose (asserted in Suite 1), not something plan-structure validates. + test('verify plan-structure accepts 0 / 1 / 2 tracer tasks (type-agnostic, #6)', (t) => { + const tmpDir = createTempProject(); + t.after(() => cleanup(tmpDir)); + + for (const n of [0, 1, 2]) { + const content = n === 0 ? planWith({ taskType: 'auto', n: 1 }) : planWith({ taskType: 'tracer', n }); + const out = verifyPlan(tmpDir, content); + assert.strictEqual(out.valid, true, `${n}-tracer plan must be valid, errors: ${JSON.stringify(out.errors)}`); + } + }); + + // A tracer task is NOT a checkpoint: an autonomous:true tracer plan must not trip + // the "Has checkpoint tasks but autonomous is not false" rule. + test('a tracer task is not misclassified as a checkpoint', (t) => { + const tmpDir = createTempProject(); + t.after(() => cleanup(tmpDir)); + + const out = verifyPlan(tmpDir, planWith({ taskType: 'tracer', n: 1, autonomous: 'true' })); + assert.ok( + !out.errors.some((e) => /checkpoint/i.test(e)), + `tracer must not be treated as a checkpoint, errors: ${JSON.stringify(out.errors)}`, + ); + }); +}); diff --git a/tests/workflow-size-baseline.json b/tests/workflow-size-baseline.json index 4be6332e7..507083645 100644 --- a/tests/workflow-size-baseline.json +++ b/tests/workflow-size-baseline.json @@ -25,7 +25,7 @@ "edit-phase.md": 12927, "eval-review.md": 9967, "execute-phase.md": 93583, - "execute-plan.md": 32655, + "execute-plan.md": 33113, "explore.md": 10541, "extract-learnings.md": 12893, "fast.md": 7613, @@ -53,7 +53,7 @@ "onboard.md": 8590, "pause-work.md": 14441, "plan-milestone-gaps.md": 11809, - "plan-phase.md": 93113, + "plan-phase.md": 93959, "plan-review-convergence.md": 23512, "plant-seed.md": 11785, "pr-branch.md": 15963,