Tom Boucher
bd27d4fabe
feat(roadmap): surface wave dependencies and cross-cutting constraints ( #2487 )
...
* feat(roadmap): surface wave dependencies and cross-cutting constraints (#2447 )
Adds roadmap.annotate-dependencies command that post-processes a phase's
ROADMAP plan list to insert wave dependency notes and surface must_haves.truths
entries shared across 2+ plans as cross-cutting constraints. Operation is
idempotent and purely derived from existing PLAN frontmatter.
Closes #2447
* fix(roadmap): address CodeRabbit review findings on PR #2487
- roadmap.cjs: expand idempotency guard to also check for existing
cross-cutting constraints header, preventing duplicate injection on
re-runs; add content equality check before writing to preserve
true idempotency for single-wave phases
- plan-phase.md: move ROADMAP annotation (13d) before docs commit (13c)
so annotated ROADMAP.md is included in the commit rather than left dirty;
include .planning/ROADMAP.md in committed files list
- sdk/src/query/index.ts: add annotate-dependencies aliases to
QUERY_MUTATION_COMMANDS so the mutation is properly event-wired
- sdk/src/query/roadmap.ts: add timeout (15s) and maxBuffer to spawnSync;
check result.error before result.status to handle spawn/timeout failures
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
---------
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-20 18:19:21 -04:00
Rezolv
c5b1445529
feat(sdk): golden parity harness and query handler CJS alignment ( #2302 Track A) ( #2341 )
...
* feat(sdk): golden parity harness and query handler CJS alignment (#2302 Track A)
Golden/read-only parity tests and registry alignment, query handler fixes
(check-completion, state-mutation, commit, validate, summary, etc.), and
WAITING.json dual-write for .gsd/.planning readers.
Refs gsd-build/get-shit-done#2341
* fix(sdk): getMilestoneInfo matches GSD ROADMAP (🟡 , last bold, STATE fallback)
- Recognize in-flight 🟡 milestone bullets like 🚧 .
- Derive from last **vX.Y Title** before ## Phases when emoji absent.
- Fall back to STATE.md milestone when ROADMAP is missing; use last bare vX.Y
in cleaned text instead of first (avoids v1.0 from shipped list).
- Fixes init.execute-phase milestone_version and buildStateFrontmatter after
state.begin-phase (syncStateFrontmatter).
* feat(sdk): phase list, plan task structure, requirements extract handlers
- Register phase.list-plans, phase.list-artifacts, plan.task-structure,
requirements.extract-from-plans (SDK-only; golden-policy exceptions).
- Add unit tests; document in QUERY-HANDLERS.md.
- writeProfile: honor --output, render dimensions, return profile_path and dimensions_scored.
* feat(sdk): centralize getGsdAgentsDir in query helpers
Extract agent directory resolution to helpers (GSD_AGENTS_DIR, primary
~/.claude/agents, legacy path). Use from init and docs-init init bundles.
docs(15): add 15-CONTEXT for autonomous phase-15 run.
* feat(sdk): query CLI CJS fallback and session correlation
- createRegistry(eventStream, sessionId) threads correlation into mutation events
- gsd-sdk query falls back to gsd-tools.cjs when no native handler matches
(disable with GSD_QUERY_FALLBACK=off); stderr bridge warnings
- Export createRegistry from @gsd-build/sdk; add sdk/README.md
- Update QUERY-HANDLERS.md and registry module docs for fallback + sessionId
- Agents: prefer node dist/cli.js query over cat/grep for STATE and plans
* fix(sdk): init phase_found parity, docs-init agents path, state field extract
- Normalize findPhase not-found to null before roadmap fallback (matches findPhaseInternal)
- docs-init: use detectRuntime + resolveAgentsDir for checkAgentsInstalled
- state.cjs stateExtractField: horizontal whitespace only after colon (YAML progress guard)
- Tests: commit_docs default true; config-get golden uses temp config; golden integration green
Refs: #2302
* refactor(sdk): share SessionJsonlRecord in profile-extract-messages
CodeRabbit nit: dedupe JSONL record shape for isGenuineUserMessage and streamExtractMessages.
* fix(sdk): address CodeRabbit major threads (paths, gates, audit, verify)
- Resolve @file: and CLI JSON indirection relative to projectDir; guard empty normalized query command
- plan.task-structure + intel extract/patch-meta: resolvePathUnderProject containment
- check.config-gates: safe string booleans; plan_checker alias precedence over plan_check default
- state.validate/sync: phaseTokenMatches + comparePhaseNum ordering
- verify.schema-drift: token match phase dirs; files_modified from parsed frontmatter
- audit-open: has_scan_errors, unreadable rows, human report when scans fail
- requirements PLANNED key PLAN for root PLAN.md; gsd-tools timeout note
- ingest-docs: repo-root path containment; classifier output slug-hash
Golden parity test strips has_scan_errors until CJS adds field.
* fix: Resolve CodeRabbit security and quality findings
- Secure intel.ts and cli.ts against path traversal
- Catch and validate git add status in commit.ts
- Expand roadmap milestone marker extraction
- Fix parsing array-of-objects in frontmatter YAML
- Fix unhandled config evaluations
- Improve coverage test parity mapping
* test: raise planner character extraction limit to 48K
* fix(sdk): resolve TS build error in docs-init passing config
2026-04-20 18:09:02 -04:00
Jeremy McSpadden
0a62e5223e
fix(sdk): register init.ingest-docs handler and add registry drift guard ( #2442 )
...
The ingest-docs workflow called `gsd-sdk query init.ingest-docs` with a
fallback to `init.default` — neither was registered in createRegistry(),
so the workflow proceeded with `{}` and tried to parse project_exists,
planning_exists, has_git, and project_path from empty.
- Add initIngestDocs handler; register dotted + space aliases
- Simplify workflow call; drop broken fallback
- Repo-wide drift guard scans commands/, agents/, get-shit-done/,
hooks/, bin/, scripts/, docs/ for `gsd-sdk query <cmd>` and fails
on any reference with no registered handler (file:line citations)
- Unit tests for the new handler
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-19 15:55:37 -05:00
Rezolv
d3a79917fa
feat: Phase 2 caller migration — gsd-sdk query in workflows, agents, commands ( #2179 )
...
* feat: Phase 2 caller migration — gsd-sdk query in workflows (#2122 )
Cherry-picked orchestration rewrites from feat/sdk-foundation (#2008 , 4018fee) onto current main, resolving conflicts to keep upstream worktree guards and post-merge test gate. SDK stub registry omitted (out of Phase 2 scope per #2122 ).
Refs: #2122 #2008
Made-with: Cursor
* docs: add gsd-sdk query migration blurb
Made-with: Cursor
* docs(workflows): extend Phase 2 gsd-sdk query caller migration
- Swap node gsd-tools.cjs for gsd-sdk query in review, plan-phase, execute-plan,
ship, extract_learnings, ai-integration-phase, eval-review, next, thread
- Document graphify CJS-only in gsd-planner; dual-path in CLI-TOOLS and ARCHITECTURE
- Update tests: workstreams gsd-sdk path, thread frontmatter.get, workspace init.*,
CRLF-safe autonomous frontmatter parse
- CHANGELOG: Phase 2 caller migration scope
Made-with: Cursor
* docs(phase2): USER-GUIDE + remaining gsd-sdk query call sites
- USER-GUIDE: dual-path CLI section; state validate/sync use full CJS path
- Commands: debug (config-get+tdd), quick (security note), intel Task prompt
- Agent: gsd-debug-session-manager resolve-model via jq
- Workflows: milestone-summary, forensics, next, complete-milestone/verify-work
(audit-open CJS notes), discuss-phase, progress, verify-phase, add/insert/remove
phase, transition, manager, quick workflow; remove-phase commit without --files
- Test: quick-session-management accepts frontmatter.get
- CHANGELOG: Phase 2 follow-up bullet
Made-with: Cursor
* docs(phase2): align gsd-sdk query examples in commands and agents
- init.* query names; frontmatter.get uses positional field name
- state.* handlers use positional args; commit uses positional paths
- CJS-only notes for from-gsd2 and graphify; learnings.query wording
- CHANGELOG: Phase 2 orchestration doc pass
Made-with: Cursor
* docs(phase2): normalize gsd-sdk query commit to positional file paths
- Strip --files from commit examples in workflows, references, commands
- Keep commit-to-subrepo ... --files (separate handler)
- git-planning-commit.md: document positional args
- Tests: new-project commit line, state.record-session, gates CRLF, roadmap.analyze
- CHANGELOG [Unreleased]
Made-with: Cursor
* feat(sdk): gsd-sdk query parity with gsd-tools and PR 2179 registry fixes
- Route query via longest-prefix match and dotted single-token expansion; fall back
to runGsdToolsQuery (same argv as node gsd-tools.cjs) for full CLI coverage.
- Parse gsd-sdk query permissively so gsd-tools flags (--json, --verify, etc.) are
not rejected by strict parseArgs.
- resolveGsdToolsPath: honor GSD_TOOLS_PATH; prefer bundled get-shit-done copy
over project .claude installs; export runGsdToolsQuery from the SDK.
- Fix gsd-tools audit-open (core.output; pass object for --json JSON).
- Register summary-extract as alias of summary.extract; fix audit-fix workflow to
call audit-uat instead of invalid init.audit-uat (PR review).
Updates QUERY-HANDLERS.md and CHANGELOG [Unreleased].
Made-with: Cursor
* fix(sdk): Phase 2 scope — Trek-e review (#2179 , #2122 )
- Remove gsd-sdk query passthrough to gsd-tools.cjs; drop GSD_TOOLS_PATH
- Consolidate argv routing in resolveQueryArgv(); update USAGE and QUERY-HANDLERS
- Surface @file: read failures in GSDTools.parseOutput
- execute-plan: defer Task Commit Protocol to gsd-executor
- stale-colon-refs: skip .planning/ and root CLAUDE.md (gitignored overlays)
- CHANGELOG [Unreleased]: maintainer review and routing notes
Made-with: Cursor
2026-04-15 22:46:31 -04:00
Rezolv
6f79b1dd5e
feat(sdk): Phase 1 typed query foundation (gsd-sdk query) ( #2118 )
...
* feat(sdk): add typed query foundation and gsd-sdk query (Phase 1)
Add sdk/src/query registry and handlers with tests, GSDQueryError, CLI query wiring, and supporting type/tool-scoping hooks. Update CHANGELOG. Vitest 4 constructor mock fixes in milestone-runner tests.
Made-with: Cursor
* chore: gitignore .cursor for local-only Cursor assets
Made-with: Cursor
* fix(sdk): harden query layer for PR review (paths, locks, CLI, ReDoS)
- resolvePathUnderProject: realpath + relative containment for frontmatter and key_links
- commitToSubrepo: path checks + sanitizeCommitMessage
- statePlannedPhase: readModifyWriteStateMd (lock); MUTATION_COMMANDS + events
- key_links: regexForKeyLinkPattern length/ReDoS guard; phase dirs: reject .. and separators
- gsd-sdk: strip --pick before parseArgs; strict parser; QueryRegistry.commands()
- progress: static GSDError import; tests updated
Made-with: Cursor
* feat(sdk): query follow-up — tests, QUERY-HANDLERS, registry, locks, intel depth
Made-with: Cursor
* docs(sdk): use ASCII punctuation in QUERY-HANDLERS.md
Made-with: Cursor
2026-04-12 18:15:04 -04:00
Tom Boucher
002bcf2a8a
fix(2137): skip worktree isolation when .gitmodules detected ( #2144 )
...
* feat(sdk): add typed query foundation and gsd-sdk query (Phase 1)
Add sdk/src/query registry and handlers with tests, GSDQueryError, CLI query wiring, and supporting type/tool-scoping hooks. Update CHANGELOG. Vitest 4 constructor mock fixes in milestone-runner tests.
Made-with: Cursor
* fix(2137): skip worktree isolation when .gitmodules detected
When a project contains git submodules, worktree isolation cannot
correctly handle submodule commits — three separate gaps exist in
worktree setup, executor commit protocol, and merge-back. Rather
than patch each gap individually, detect .gitmodules at phase start
and fall back to sequential execution, which handles submodules
transparently (Option B).
Affected workflows: execute-phase.md, quick.md
---------
Co-authored-by: David Sienkowski <dave@sienkowski.com >
2026-04-12 08:33:04 -04:00