Install
npm i @opengsd/gsd-core@1.15.0
# or
npm i @opengsd/gsd-core@latestWhat's Changed
Feature
- feat(#4740): make the Loop Host Contract role partition normative and enforced by @trek-e in #4742
- feat(#4668): add StateWriteIntent type surface and opaque-transform guard recognition (ADR-4629 C1) by @davesienkowski in #4676
- feat(#4917): add the PlanningDoc parse → mutate → serialize seam — Phase 1 of #4906 by @trek-e in #4918
- feat(#4144): migrate legacy and M-NN roadmaps to bracket phase ids (epic #612 PR-3) by @bshiggins in #4698
Enhancement
- enhance(#3638): render bracket phase IDs on progress, stats, manager and statusline surfaces (epic #612 PR-5) by @bshiggins in #4111
- enhance(#4154): validate configured entrypoints before reporting install success by @davdittrich in #4249
- enhance(#4223): default-off interaction capture for gsd-ui-auditor via the chrome-devtools CLI by @0xdhx in #4477
- enhance(#4095): checkpoint:decision auto-selection is opt-in via auto_select by @trek-e in #4912
- enhance(#4836): prefer the graphify CLI for planner and researcher graph queries by @drungrin in #4874
- enhance(#3829): report code review severity counts and record a per-finding disposition by @0xdhx in #3861
- enhance(#4570): allow disabling planner stall detection by @drungrin in #4585
Fix
- fix(#4324): stop the retired /gsd: prefix reaching users by @trek-e in #4712
- fix(#4709): stop minting the retired gemini runtime id in shipped surfaces by @trek-e in #4711
- fix(#4351): run-scope preserved review evidence by @trek-e in #4713
- fix(#4379): make the TDD RED-commit pathspec language-agnostic by @trek-e in #4715
- fix(#4395): make the debug session manager's own gsd-debugger spawn blocking by @trek-e in #4718
- fix(#4709): retire the Gemini CLI reviewer lane by @trek-e in #4716
- fix(#4409): delete the fold's shadow copies of extractShellBlocks and collectWorkflowFiles by @trek-e in #4720
- fix(#4429): stop a large commit_types config blocking or bypassing the gate by @trek-e in #4723
- fix(#4733): derive the win32 chunk cap, isolation bar, and unknown-file weight by @trek-e in #4737
- fix(#4505): resolve models through the active runtime and the tier table by @trek-e in #4726
- fix(#4728): stop presenting the retired Gemini CLI as a supported runtime by @trek-e in #4743
- fix(#4660): widen the 6 shell/markdown phase-id mirrors to the canonical grammar's letter axis by @0xdhx in #4744
- fix(#4678): resolve :LINE citations against their underlying files by @TwistedRiCen in #4719
- fix(#4709): a retired runtime id must not resolve to Claude Code by @trek-e in #4756
- fix(#4485): isolate hook E2E tests from ambient capabilities by @drungrin in #4529
- fix(#4462): normalize whitespace workstream environment values by @drungrin in #4509
- fix(#4465): bound /gsd:undo commit selection to the phase directory and HEAD by @0xdhx in #4472
- fix(#4544): cover hooks/, scripts/, CHANGELOG and the manifest in codex rollback by @trek-e in #4760
- fix(#4377): opt in to project-relative includes for local installs by @drungrin in #4425
- fix(#4546): deferred UAT follow-ups no longer block completion and promote to the backlog by @trek-e in #4769
- fix(#4378): mint collision-free SEED-YYMMDD-xxx seed ids instead of a shared count by @trek-e in #4754
- fix(#4600): explicit --converge overrides the convergence feature gate by @trek-e in #4771
- fix(#4601): reap the whole process tree on run-with-timeout's Windows force stage by @trek-e in #4775
- fix(#4624): persist orchestrator-worktree worker lifecycle records by @trek-e in #4778
- fix(#4721): give worktree cleanup-wave's merge its own timeout, report merge_timed_out, and restore the index a killed merge leaves staged by @0xdhx in #4766
- fix(#4748): carry a letter-suffixed phase id through the seven shell sites that aborted or truncated it by @0xdhx in #4768
- fix(#4730): decode entity-escaped ampersands before verify-command-paths segment splitting by @TwistedRiCen in #4755
- fix(#4685): a directory artifact fails its own entry instead of aborting the check by @behruznassre in #4735
- fix(#4628): expose DAG-ready plans and restrict dispatch to them by @trek-e in #4781
- fix(#4461): make code-review summary extraction shell-safe by @drungrin in #4533
- fix(#4623): keep repo-wide planning docs out of the verification digest, and accept --files on verification.fingerprint by @0xdhx in #4749
- fix(#4639): exempt the container --env-file value from the secret-read guard by @trek-e in #4789
- fix(#4648): delegate explore seeds to the plant-seed workflow by @trek-e in #4798
- fix(#4656): expose coverage.unclassified and widen the zero-applicable guards by @trek-e in #4800
- fix(#4657): give the ui consideration probe a text_en language channel by @trek-e in #4804
- fix(#4658): give the ui plan gate's evidence check a native branch by @trek-e in #4807
- fix(#4663): gate the canonicalization on the uat-passed predicate by @trek-e in #4809
- fix(#4665): route --fix past the empty-scope exit by @trek-e in #4810
- fix(#4670): bound the commit-claim window to the plan's own history by @trek-e in #4813
- fix(#4682): route stale verification to the verifier regeneration path by @trek-e in #4818
- fix(#4699): skip already-complete phases in the next_phase cascade by @trek-e in #4820
- fix(#4700): queue the headless mempalace mine on the palace lock by @trek-e in #4821
- fix(#4705): emit Antigravity-native tool names as a YAML sequence by @trek-e in #4822
- fix(#4724): classify Surefire/Failsafe XML as RED evidence by @trek-e in #4825
- fix(#4731): read hard-wrapped Goal/Requirements fields past the line break by @trek-e in #4826
- fix(#4683): detect cross-plan threat-ID duplicates before execution by @trek-e in #4828
- fix(#4725): write normalization preserves tight paragraph-list shape by @trek-e in #4842
- fix(#4734): degrade worktree isolation when the root has no git repository by @trek-e in #4843
- fix(#4738): record opencode's staged skills in the install manifest by @trek-e in #4847
- fix(#4741): the plan checkbox tick respects the superseded exclusion by @trek-e in #4851
- fix(#4667): rewrite codex @ includes to the codex install root by @trek-e in #4858
- fix(#4717): consult the per-install runtime marker at both identity seams by @trek-e in #4861
- fix(#4588): observe fork-from-HEAD from prior harness worktrees before degrading by @trek-e in #4868
- fix(#4758): rescue resolves a relative worktree_path against repoRoot, not process.cwd() by @trek-e in #4872
- fix(#4759): hooks marker warning states the will-not-load claim conditionally, like the plugin path by @trek-e in #4875
- fix(#4764): dep_phases extracts only Phase-prefixed references from Depends-on prose by @trek-e in #4876
- fix(#4774): plan-criteria R4 requires the pipe not to be doubled — a logical-OR fallback is handled, not swallowed by @trek-e in #4877
- fix(#4782): claude's agents kind skips compact variants — consumed only by the non-claude persona gate by @trek-e in #4878
- fix(#4784): Xcode gates pass -project and derive the destination from available simulators by @trek-e in #4879
- fix(#4786): plan-row detection accepts the bare planId stem — suffix-less hand-written lists tick in place by @trek-e in #4880
- fix(#4788): code spans in the decision bold lead-in are opaque to the separator grammar by @trek-e in #4883
- fix(#4830): re-land #4768's letter-suffix phase-id fix and its lint-phase-id-drift ratchets on current next by @0xdhx in #4873
- fix(#4794): decision-coverage answers an unmeasured shape on could-not-parse; a non-file context path fails closed by @trek-e in #4889
- fix(#4415): treat an absent worktree as removed, not as a branch mismatch by @behruznassre in #4612
- fix(#4797): run-with-timeout's .cmd mediation folds onto projectSpawnInvocation — spaces in the shim path no longer break it by @trek-e in #4892
- fix(#4801): init.manager resolves archived phase directories through findPhaseInternal by @trek-e in #4893
- fix(#4802): audit acknowledge refuses targets whose frontmatter fails to parse by @trek-e in #4895
- fix(#4806): unparseable VERIFICATION.md frontmatter reports a distinct parse error, never status missing by @trek-e in #4896
- fix(#4823): the Current Plan reset is scoped to the Current Position section by @trek-e in #4898
- fix(#4434): win32 unmeasured test files weigh the documented ~2.2x Windows-cost floor, not the Linux-measured mean by @trek-e in #4903
- fix(#4834): gate the launcher PATH arm on runtime identity and prefer config-home installs by @trek-e in #4902
- fix(#4763): surface the displaced session record and pass --phase from the executor decision loop by @trek-e in #4919
- fix(#4770): lift the Codex sandbox_mode holds — documented enforcement suffices by @trek-e in #4920
- fix(#4776): resolve the artifact-exists prompt under --auto by @drungrin in #4832
- fix(#4949): cap unmeasured files per Windows conformance chunk by @trek-e in #4950
- fix(#4906): migrate the ROADMAP.md Plans: line onto the PlanningDoc seam — Phase 2 by @trek-e in #4933
- fix(#4881): trust worktree.baseRef:"head" in harness mode; a WorktreeCreate hook withholds it and only a measured fork base restores it by @0xdhx in #4921
- fix(#4767): flag absolute verify-command targets outside the project root, probe quick plans, guard execution in worktrees by @0xdhx in #4785
- fix(#4906): give a writer nothing to emit its own reader would reject — Phase 3 by @trek-e in #4960
- fix(#4968): move build-hooks.js's staging dir out of hooks/, fix #4767 guard test's PS1-under-nounset crash by @trek-e in #4980
- fix(#4906): a caller can always distinguish 'records nothing' from 'I could not read it' — Phase 4 by @trek-e in #4971
- fix(#4841): rewrite 11 bare @gsd-core/references/ agent pointers to the installed-path form and gate the bare form in agents/ by @0xdhx in #4888
- fix(#4777): derive PHASE_ARG before the workflows that read it by @drungrin in #4831
- fix(#4664): preserve Codex foreground handoffs by @drungrin in #4695
- fix(#4906): drive the phase-heading, pr-branch structural, and /gsd-undo scope-selection patterns to one owner each — Phase 5 by @trek-e in #4986
- fix(#4930): report every reference include check-contract-drift declines to follow by @0xdhx in #4937
- fix(#4936): give each run-tests chunk its own watchdog so a wedged chunk is killed and named at its bound, not waited on silently by @0xdhx in #4989
- fix(#5008): build the emitted baseline at the merge-base, not the base tip by @trek-e in #5009
- fix(#4815): stop findProjectRoot resolving through a symlinked .planning's own git boundary by @helenkwok in #4819
New Contributors
- @helenkwok made their first contribution in #4819
Full Changelog: v1.14.0...v1.15.0