singularity-forge/mintlify-docs/guides/change-management.mdx
ace-pm 9d739dfa5d Rename GSD→SF: complete rebrand from fork origin
- All gsdDir/gsdRoot/gsdHome → sfDir/sfRootDir/sfHome
- GSDWorkspace* → SFWorkspace* interfaces
- bootstrapGsdProject → bootstrapProject
- runGSDDoctor → runSFDoctor
- GsdClient → SfClient, gsd-client.ts → sf-client.ts
- .gsd/ → .sf/ in all tests, docs, docker, native, vscode
- Auto-migration: headless detects .gsd/ → renames to .sf/
- Deleted gsd-phase-state.ts backward-compat re-export
- Renamed bin/gsd-from-source → bin/sf-from-source
- Updated mintlify docs, github workflows, docker configs
2026-04-15 18:33:47 +02:00

211 lines
6.8 KiB
Text

---
title: "Change management"
description: "How to handle bugs, new features, and roadmap reshuffling after milestones are underway."
---
Reality diverges from plans. This guide covers every situation where you need to act on something discovered after work is already in flight — from a single bug fix to inserting a whole new milestone before the next planned one.
## Mental model
SF's pipeline looks like this:
```
M001 complete → M002 complete → M003 → M004 → ...
```
The key invariant: **completed units are sealed.** A finished task, slice, or milestone can't be un-completed. What you can always do is add new work ahead of or after any remaining unit.
Between milestones you have the most freedom. Inside a running milestone you have real steering options without breaking the state machine.
---
## Small bug or quick fix
**A self-contained fix that can be described in a sentence.**
```
/sf quick "fix the date formatting bug in the invoice renderer"
```
`/sf quick` executes immediately with full SF guarantees (atomic commit, state tracking) but skips milestone ceremony. It doesn't touch the milestone pipeline.
---
## Bug or idea discovered while auto-mode is running
**You spot something mid-execution but don't want to interrupt the run.**
```
/sf capture "the login redirect is broken on mobile viewports"
/sf capture "add a loading spinner to the data table"
```
Captures are appended to `.sf/CAPTURES.md` and triaged automatically at natural seams between tasks. See [captures and triage](/guides/captures-triage) for the full classification system.
To force processing immediately:
```
/sf triage
```
---
## Current slice plan is wrong
**You're mid-slice and the plan no longer makes sense — wrong approach, missing step, or a blocker.**
```
/sf steer
```
This opens an interactive session to hard-edit plan documents. Changes are picked up at the next phase boundary without stopping auto-mode.
For structural changes (adding tasks, removing tasks), the agent triggers a slice replan internally when it discovers a blocker. Completed tasks are protected — only pending tasks can be mutated.
---
## Bugs and features need to land before the next milestone
**M001 and M002 are done. You've found bugs and have new features that must ship before M003 can proceed.**
<Steps>
<Step title="Triage your list">
Separate into: bugs vs. features, and must-before-M003 vs. can-wait.
</Step>
<Step title="Create a new milestone for the pre-M003 work">
```
/sf new-milestone
```
Describe the bugs and features. SF creates a milestone — the title is what matters, not the number.
</Step>
<Step title="Check and reorder the queue">
```
/sf queue
```
Confirm the new milestone is queued before M003. Reorder if needed.
</Step>
<Step title="Park M003 if it shouldn't run yet">
```
/sf park M003
```
Parking skips M003 without deleting it. Unpark when ready:
```
/sf unpark M003
```
</Step>
<Step title="Run auto-mode">
```
/sf auto
```
Auto-mode dispatches the next active milestone in queue order.
</Step>
</Steps>
---
## Modifying a not-yet-started milestone
**You want to change M003's scope — add slices, remove slices, change the approach — before it starts.**
Since M003 hasn't started, its plan files can be edited directly. Use `/sf discuss` to talk through the changes and let SF rewrite the artifacts:
```
/sf discuss
```
> "M003 needs to include the new auth flow we discovered. Can we add a slice for that and remove the old token refresh slice?"
Or use `/sf steer` to edit plan files directly.
If M003 is partially done (some slices complete), auto-mode calls `reassess-roadmap` automatically after each slice. You can also discuss changes during a pause — SF can add, modify, or remove pending slices without touching the completed ones.
---
## A milestone needs to step back one position
**Your "Milestone 3" is effectively now "Milestone 4" because new work must insert before it.**
SF milestone numbers are labels, not positions. Execution order is controlled by the queue, not the ID. The procedure is the same as above: create the new milestone, confirm queue order with `/sf queue`, park M003 if needed.
The milestone IDs stay as-is — M003 just executes later. No renumbering needed.
---
## Many bugs — worth a dedicated bugfix milestone
**After M002 you have 10+ bugs across multiple systems. Too scattered for individual quick tasks.**
```
/sf new-milestone
```
Describe the full bug list. SF creates a milestone with slices organized by system or severity. Run it in auto-mode like any other milestone. When done, all bugs land as clean commits with a formal milestone summary — readable as a bugfix release.
---
## Feature ideas that can wait
**Real ideas, but nothing that blocks the current plan.**
```
/sf capture "dark mode toggle on the dashboard"
```
Deferred captures surface during roadmap reassessment. SF can fold them into a later milestone when the timing makes sense. Or queue a dedicated features milestone directly:
```
/sf queue
```
---
## Bug in a completed slice
**A shipped slice has a bug but it's already sealed.**
You cannot un-complete the slice. Options:
- `/sf quick` for small fixes
- A new slice in the next milestone that explicitly patches the bug — reference the original slice in the description
- `/sf steer` to add a fix task to the current active milestone if you're still inside it
The completed slice record is preserved as-is. The fix lands as new work with its own commit and summary.
---
## An entire milestone went in the wrong direction
**M002 is done but the approach was wrong, and M003 builds on it.**
<Steps>
<Step title="Discuss the situation">
```
/sf discuss
```
Work through what's wrong and what the correction looks like before touching anything.
</Step>
<Step title="Create a correction milestone">
A focused "M002b" or "M002-fix" that refactors or replaces what went wrong. Scope it precisely to the broken parts.
</Step>
<Step title="Revise M003 if needed">
If M003 doesn't depend on the broken parts, trim its scope so it doesn't compound the problem. Fix fully in the correction milestone first.
</Step>
</Steps>
---
## Quick reference
| Situation | Command |
|---|---|
| Small self-contained fix | `/sf quick` |
| Thought during auto-mode | `/sf capture` |
| Force-process captures now | `/sf triage` |
| Current slice plan is wrong | `/sf steer` |
| New work must land before next milestone | `/sf new-milestone` + `/sf queue` |
| Delay a future milestone | `/sf park <MID>` / `/sf unpark <MID>` |
| Modify a not-yet-started milestone | `/sf discuss` or `/sf steer` |
| Many bugs → dedicated milestone | `/sf new-milestone` (bugfix scope) |
| Ideas that can wait | `/sf capture` or `/sf queue` |
| Check/reorder pipeline | `/sf queue` |
| Architecture discussion | `/sf discuss` |