/gsd-insert-phase step 4 instructed the agent to directly Edit/Write
.planning/STATE.md to append a Roadmap Evolution entry. Projects that
ship a protect-files.sh PreToolUse hook (a recommended hardening
pattern) blocked the raw write, silently leaving STATE.md out of sync
with ROADMAP.md.
Adds a dedicated SDK handler state.add-roadmap-evolution (plus space
alias) that:
- Reads STATE.md through the shared readModifyWriteStateMd lockfile
path (matches sibling mutation handlers — atomic against
concurrent writers).
- Locates ### Roadmap Evolution under ## Accumulated Context, or
creates both sections as needed.
- Dedupes on exact-line match so idempotent retries are no-ops
({ added: false, reason: "duplicate" }).
- Validates --phase / --action presence and action membership,
throwing GSDError(Validation) for bad input (no silent
{ ok: false } swallow).
Workflow change (insert-phase.md step 4):
- Replaces the raw Edit/Write instructions for STATE.md with
gsd-sdk query state.patch (for the next-phase pointer) and
gsd-sdk query state.add-roadmap-evolution (for the evolution
log).
- Updates success criteria to check handler responses.
- Drops "Write" from commands/gsd/insert-phase.md allowed-tools
(no step in the workflow needs it any more).
Tests (vitest, sdk/src/query/state-mutation.test.ts): subsection
creation when missing; append-preserving-order when present;
duplicate -> reason=duplicate; idempotence over two calls; three
validation cases covering missing --phase, missing --action, and
invalid action.
This is the first SDK handler dedicated to STATE.md Roadmap
Evolution mutations. Other workflows with similar raw STATE.md
edits (/gsd-pause-work, /gsd-resume-work, /gsd-new-project,
/gsd-complete-milestone, /gsd-add-phase) remain on raw Edit/Write
and will need follow-up issues to migrate — out of scope for this
fix.
Closes #2662
32 lines
1.0 KiB
Markdown
32 lines
1.0 KiB
Markdown
---
|
|
name: gsd:insert-phase
|
|
description: Insert urgent work as decimal phase (e.g., 72.1) between existing phases
|
|
argument-hint: <after> <description>
|
|
allowed-tools:
|
|
- Read
|
|
- Bash
|
|
---
|
|
|
|
<objective>
|
|
Insert a decimal phase for urgent work discovered mid-milestone that must be completed between existing integer phases.
|
|
|
|
Uses decimal numbering (72.1, 72.2, etc.) to preserve the logical sequence of planned phases while accommodating urgent insertions.
|
|
|
|
Purpose: Handle urgent work discovered during execution without renumbering entire roadmap.
|
|
</objective>
|
|
|
|
<execution_context>
|
|
@~/.claude/get-shit-done/workflows/insert-phase.md
|
|
</execution_context>
|
|
|
|
<context>
|
|
Arguments: $ARGUMENTS (format: <after-phase-number> <description>)
|
|
|
|
Roadmap and state are resolved in-workflow via `init phase-op` and targeted tool calls.
|
|
</context>
|
|
|
|
<process>
|
|
Execute the insert-phase workflow from @~/.claude/get-shit-done/workflows/insert-phase.md end-to-end.
|
|
Preserve all validation gates (argument parsing, phase verification, decimal calculation, roadmap updates).
|
|
</process>
|