singularity-forge/src
Tom Boucher a061e3c276 feat: stop/backtrack capture classifications for milestone regression (#3488)
* feat: add stop/backtrack capture classifications for milestone regression (#3487)

Adds 4-layer methodology for halting auto-mode and backtracking to
previous milestones when captures indicate the user wants to stop or
that a milestone missed critical features:

1. Type layer: "stop" and "backtrack" classification types in captures.ts
2. Guard layer: pre-dispatch stop check in runGuards() pauses auto-mode
   before the next unit dispatches
3. Resolution layer: executeBacktrack() writes BACKTRACK-TRIGGER.md and
   milestone regression markers for state machine detection
4. Protection layer: revertExecutorResolvedCaptures() detects and reverts
   captures silenced by non-triage agents (resolved without classification)

Also adds fast-path stop detection in auto-post-unit.ts that pattern-matches
pending capture text for stop keywords without waiting for triage.

Closes #3487

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat: add slice-level skip with gsd_skip_slice tool (#3477)

Adds "skipped" as a closed status alongside "complete" and "done":

- status-guards.ts: isClosedStatus() recognizes "skipped"
- state.ts: isStatusDone() recognizes "skipped"
- gsd-db.ts: getActiveSliceFromDb() skips slices with status "skipped"
- db-tools.ts: new gsd_skip_slice tool for rethink and manual use
- rethink.md: added "Skip a slice" operation to rethink prompt
- rethink.ts: buildRethinkData shows skipped slice counts

Skipped slices satisfy dependencies for downstream slices, allowing
auto-mode to advance past them. Slice data is preserved for reference.

Relates to #3477

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: resolve 4 issues found in adversarial review of PR #3488

1. triage-ui.ts: Restore stop/backtrack entries in CLASSIFICATION_LABELS
   and ALL_CLASSIFICATIONS — the Record<Classification, ...> type requires
   all union members, and runtime lookups would crash on stop/backtrack.
   Also auto-confirm stop/backtrack in the triage confirmation flow
   (matching the triage-captures.md prompt directive).

2. triage-resolution.ts: Replace require("node:fs") in clearBacktrackTrigger
   with ESM import of unlinkSync — consistent with the rest of the codebase.

3. auto-post-unit.ts: Anchor STOP_PATTERN regex to start-of-string (^) to
   prevent false positives on captures like "add a pause button" or "stop
   the timer from re-rendering" which are feature descriptions, not halt
   directives.

4. status-guards.test.ts: Add missing test case for isClosedStatus("skipped")
   to cover the new status value.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: update tool-naming test count for gsd_skip_slice

The new gsd_skip_slice tool (no alias) brings the total from 29 to 30.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-04 01:40:33 -04:00
..
resources feat: stop/backtrack capture classifications for milestone regression (#3488) 2026-04-04 01:40:33 -04:00
tests refactor(test): consolidate regression and override tests into #666 test files 2026-04-02 14:06:19 +02:00
web fix: add windowsHide to all web-mode subprocess spawns (#2628) (#3046) 2026-03-30 14:50:13 -06:00
app-paths.js feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
app-paths.ts feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
bundled-extension-paths.ts Fix packaging verification and path portability (#378) 2026-03-14 12:28:14 -06:00
bundled-resource-path.ts M001: The Minimal Machine — linear auto-loop, sole-authority state, sidecar queue, WorktreeResolver (#1419) 2026-03-19 14:56:00 -06:00
cli-web-branch.ts feat: add --host, --port, --allowed-origins flags for web mode (#1847) (#1873) 2026-03-21 15:22:01 -06:00
cli.ts fix(security): add configurable overrides for command allowlist and SSRF blocklist 2026-04-02 13:45:05 +02:00
extension-discovery.ts fix: apply pi manifest opt-out to extension-discovery.ts (#1545) 2026-03-20 08:11:51 -06:00
extension-registry.ts feat: add GSD_HOME env var to override global ~/.gsd directory (#1566) 2026-03-20 08:29:01 -06:00
headless-answers.ts refactor(headless): remove duplicate jsonLine, use serializeJsonLine from pi-coding-agent (#1039) 2026-03-17 18:35:00 -06:00
headless-context.ts refactor(headless): split 772-line god file into events, UI, and context modules (#1047) 2026-03-17 18:36:20 -06:00
headless-events.ts fix(headless): match "completed" status from RPC v2 in exit code mapper 2026-03-27 17:04:31 -06:00
headless-query.ts fix: guard activeMilestone.id access in discuss and headless paths (#2776) 2026-03-26 20:05:19 -06:00
headless-types.ts test: Added --output-format text|json|stream-json flag, standardized ex… 2026-03-26 11:34:21 -06:00
headless-ui.ts feat: stream full text and thinking output in headless verbose mode (#2934) 2026-03-27 21:57:11 -06:00
headless.ts feat: stream full text and thinking output in headless verbose mode (#2934) 2026-03-27 21:57:11 -06:00
help-text.ts fix: route gsd auto to headless runner to prevent hang on piped stdin/stdout (#3057) 2026-03-30 14:44:04 -06:00
loader.ts feat: managed RTK integration with opt-in preference and web UI toggle (#2620) 2026-03-26 09:33:07 -06:00
logo.ts fix: abort squash-merge on conflict and stop auto-mode instead of looping (#merge-bug-fix) 2026-03-12 15:32:39 -06:00
mcp-server.ts feat: add VS Code extension scaffold and MCP server compiled module 2026-03-16 16:46:20 -05:00
models-resolver.ts refactor: remove unnecessary 'as any' casts, dead exports, and duplicate code (#786) 2026-03-16 21:47:04 -06:00
onboarding.ts feat(extensions): add Ollama extension for first-class local LLM support (#3371) 2026-04-01 08:37:31 -06:00
pi-migration.ts Merge pull request #151 from dbachelder/fix/pi-provider-reuse-and-extension-loading 2026-03-12 22:25:15 -06:00
project-sessions.ts feat(web): browser-based web interface (#1717) 2026-03-21 12:16:54 -06:00
remote-questions-config.ts chore: rename preferences.md to PREFERENCES.md for consistency (#2700) (#2738) 2026-03-26 16:09:59 -06:00
resource-loader.ts feat(extensions): wire up topological sort and unified registry filtering (#3152) 2026-03-31 11:54:48 -06:00
rtk.ts refactor(gsd): extract duplicated status guards and validation helpers (#2767) 2026-03-26 18:14:43 -06:00
security-overrides.ts fix(security): add configurable overrides for command allowlist and SSRF blocklist 2026-04-02 13:45:05 +02:00
startup-model-validation.ts fix: defer model validation until after extensions register (#3089) 2026-03-30 14:38:10 -06:00
startup-timings.ts Improve startup performance with lazy extension loading (#1336) 2026-03-19 07:38:50 -06:00
tool-bootstrap.ts M001: The Minimal Machine — linear auto-loop, sole-authority state, sidecar queue, WorktreeResolver (#1419) 2026-03-19 14:56:00 -06:00
update-check.ts feat: add /gsd update slash command for in-session self-update (#964) 2026-03-17 16:13:02 -06:00
update-cmd.ts feat: add gsd update subcommand for self-update 2026-03-13 18:47:33 -03:00
web-mode.ts fix: add windowsHide to all web-mode subprocess spawns (#2628) (#3046) 2026-03-30 14:50:13 -06:00
welcome-screen.ts Merge pull request #2312 from jeremymcs/fix/tui-review 2026-04-01 16:38:31 -05:00
wizard.ts fix(remote-questions): empty-key entry in auth.json shadows valid Discord bot token (#2737) 2026-03-26 16:16:42 -06:00
worktree-cli.ts refactor: move GSD metadata from commit subject scopes to git trailers 2026-03-25 22:56:48 +00:00
worktree-name-gen.ts feat: add -w/--worktree CLI flag for isolated worktree sessions (#1247) 2026-03-18 14:57:25 -06:00