Install
npm i @opengsd/gsd-core@1.14.0
# or
npm i @opengsd/gsd-core@latestWhat's Changed
Feature
- feat(#4422): block merging into next/main while the base branch's Tests run is red by @trek-e in #4428
- feat(#4593): add a macOS-specific conformance tier, final phase of epic #4589 by @trek-e in #4607
- feat(#4142): thread convention through the completion-path membership seam by @bshiggins in #3644
Enhancement
- enhance(#2586): stop installing Codex context-monitor hooks without metrics by @trek-e in #4367
- enhance(#2618): render pending todos as one bounded bullet per todo by @trek-e in #4384
- enhance(#3085): add Grep to allowed-tools for 21 skills by @trek-e in #4397
- enhance(#4401): register workflow.compact_content as a validated config key by @bsmerbeck in #4441
- enhance(#4139): Phase 2 — one shared gate, one pilot split, one accuracy spot-check by @trek-e in #4471
- enhance(#4139): Phase 3 — partition rules + the five checks by @trek-e in #4497
- enhance(#4139): Phase 4 — measure the window instead of asserting it by @trek-e in #4502
- enhance(#4261): report size-cap headroom on every run, with a reserved margin by @drungrin in #4418
- enhance(#4209): optional external source reviewer lanes for /gsd:code-review by @davdittrich in #4323
- enhance(#4405): split the rest of the eager-window workflows worth splitting by @trek-e in #4536
- enhance(#4139): Phase 6 — the lazily-read remainder and the artifact templates by @trek-e in #4540
- enhance(#4089): add minimum-solution reasoning check by @lorenzespinosa in #4118
- enhance(#4285): resolve context-monitor fire-points from .planning/config.json by @behruznassre in #4366
- enhance(#3418): report real codebase drift instead of the whole repository by @funkadelic in #4124
- enhance(#4139): Phase 7 — the agent-skill seam picks the payload in code by @trek-e in #4553
- enhance(#4139): Phase 8 — the toggle becomes discoverable, and the ledger closes by @trek-e in #4587
Fix
- fix(#4130): parse phase-prefixed decision IDs (D4-01) by @trek-e in #4357
- fix(#4129): derive completed_phases from the ROADMAP authority; honor the progress-ratchet on every state write by @trek-e in #4359
- fix(#4134): refuse punctuation-only milestone heading names by @trek-e in #4358
- fix(#4363): bump download-artifact and setup-node off node20 runtimes by @trek-e in #4365
- fix(#4145): resolve gsd-pristine/ baselines by recorded hash, relocate orphans by @trek-e in #4364
- fix(#4130): --context flag for check decision-coverage-plan + parseDecisions quadratic-backtracking hardening by @trek-e in #4374
- fix(#4136): compute the Incorporated status; stop re-grafting superseded patches by @trek-e in #4373
- fix(#4135): headline baseline coverage, opt-in strict gate, git-history widening by @trek-e in #4376
- fix(#4138): begin-phase without --phase exits non-zero and writes nothing by @trek-e in #4380
- fix(#4192): honor explicit model pins on the claude runtime by @trek-e in #4396
- fix(#4187): status reader resolves a bare VERIFICATION.md like resolve-file by @trek-e in #4388
- fix(#4398): render the pending-todo bullet link repo-relative by @trek-e in #4416
- fix(#4197): dedup the update-context fast path against the selected global dir by @trek-e in #4413
- fix(#4211): materialize Kimi's agent tree recursively during surface apply by @drungrin in #4371
- fix(#4421): rescind #494's macOS full-matrix skip on changed test files by @trek-e in #4427
- fix(#4137): existsSync-guard the Homebrew Cellar rewrite in normalizeNodePath by @trek-e in #4375
- fix(#4205): filter gsd_run, not gsd-tools, when isolating PATH in launcher fixtures by @davdittrich in #4337
- fix(#4186): anchored status vocabulary, record-session arg guard, recount pin by @trek-e in #4381
- fix(#4218): stop the orchestrator steering an executor that is still working by @drungrin in #4391
- fix(#4217): reconcile artifacts before classifying an abnormally-ended executor by @trek-e in #4442
- fix(#4448): stop io.test.cjs's in-process runMain calls from corrupting node:test's own fd-1 IPC by @trek-e in #4452
- fix(#4446): ban ad hoc timeout literals in tests, ship with full legacy allowlist by @trek-e in #4449
- fix(#4225): scope the sibling-worktree phase-number horizon to the active workstream by @trek-e in #4450
- fix(#4243): anchor stateReplaceField bold form; pin frontmatter round-trip by @trek-e in #4453
- fix(#4247): refuse update-plan-progress on a roadmap with no writable phase entry by @trek-e in #4468
- fix(#4243): anchor stateReplaceProgressPercent bold form to line start by @trek-e in #4474
- fix(#4256): resolve todos from the root via todosDir everywhere by @trek-e in #4479
- fix(#4342): run the bug-167 routing test in a fixture project, not the developer's by @drungrin in #4387
- fix(#4254): pin sequential executor to the orchestrator's validated root by @trek-e in #4476
- fix(#4276): read the quoting, not just the digits, before eating an IO number by @drungrin in #4420
- fix(#4439): render pending-todo 'created' as date-only, matching [date] by @trek-e in #4494
- fix(#4257): harvest only prose phase references; W002 names its workstream scope by @trek-e in #4486
- fix(#4443): register hooks.commit_types (and sibling hooks.community) in config schema by @trek-e in #4501
- fix(#4444): honor config-set --dry-run instead of silently ignoring it by @trek-e in #4504
- fix(#4291): isolate ship:pre and empty-points e2e CLI tests from real HOME by @davdittrich in #4321
- fix(#4447): classify mixed structural+transient planning commits as a 5th arm by @trek-e in #4537
- fix(#4454): surface skipped explicit --files paths instead of silent success by @trek-e in #4538
- fix(#4455): autonomous.md and complete-milestone.md resolve STATE/ROADMAP/MILESTONES/PROJECT/REQUIREMENTS through the workstream-scoped init fields by @trek-e in #4542
- fix(#4455): PROJECT.md is shared across workstreams, not workstream-scoped by @trek-e in #4543
- fix(#4456): forward --ws to every downstream new-milestone.md call by @trek-e in #4545
- fix(#4457): cover init.new-milestone's project_exists/project_path under an active workstream by @trek-e in #4547
- fix(#4458): reuse detectSubRepos for new-project.md's sub-repo detection by @trek-e in #4548
- fix(#4459): anchor update_codebase_map's diff base on the phase directory by @trek-e in #4549
- fix(#4540): execute-plan.md 21 bytes over its DEFAULT size-tier cap by @trek-e in #4555
- fix(#4341): reference-count the git-config sandbox the three guard suites share by @drungrin in #4389
- fix(#4383): require phase before planned-phase writes by @drungrin in #4534
- fix(#4492): index the suffix window instead of pattern-matching it by @behruznassre in #4539
- fix(#4460): gate Tier 3's #2666 cross-check on FILES_OVERRIDE by @trek-e in #4552
- fix(#4466): bound quick.md's post-execute review scope tip at the task's own last commit by @trek-e in #4571
- fix(#4469): anchor beginPhaseCore's focusPattern regex to line start by @trek-e in #4577
- fix(#4478): anchor collectAnalyzePhases's phase-heading regex to line start by @trek-e in #4578
- fix(#4487): stamp broken-windows ledger entries with the resolved milestone by @trek-e in #4583
- fix(#4460): correct two stale changesets left by an admin-merge race by @trek-e in #4572
- fix(#4488): report state update as successful when the value is already correct by @trek-e in #4581
- fix(#4489): make capability-registry.test.cjs's extractShellBlocks CRLF-safe by @trek-e in #4584
- fix(#4482): strip Copilot notes from OpenCode artifacts by @drungrin in #4532
- fix(#3660): reap a bounded check's orphaned worker after its own timeout kill by @trek-e in #4615
- fix(#4480): require a name column in roadmap phase tables by @drungrin in #4511
- fix(#4481): anchor bold STATE field reads to line start by @drungrin in #4510
- fix(#4424): assert the launcher snippet's env surface is covered by the scrub lists by @davdittrich in #4503
- fix(#4282): register PATTERNS.md as a canonical .planning/ artifact by @trek-e in #4618
- fix(#4294): reserve a full progress bar for 100% and give the render half one owner by @0xdhx in #4473
- fix(#4259): fold shell continuations before the T6 docs-parity site scan by @drungrin in #4423
- fix(#4208): add
--files-removedsocommit --filescan record a move without a directory pathspec by @0xdhx in #4253 - fix(#4433,#4569,#4126): consolidate the phase-identity seam at name-validity, allocation, and branch-slug by @trek-e in #4640
- fix(#4619): execute-phase computes decimal/N-segment phase numbers without breaking shell arithmetic by @trek-e in #4644
- fix(#4641): make test-conformance the sole Windows selector and narrow the tier to 28.5% by @trek-e in #4643
- fix(#4568): widen the phase-number regex to accept N-segment ids at 6 shell/markdown sites by @trek-e in #4646
- fix(#4651): classify .env names by final extension, and close the trailing-dot alias bypass — Phase 1 of #4636 by @trek-e in #4659
- fix(#4652): confine every boundary that joins argv to a managed root — Phase 2 of #4636 by @trek-e in #4666
- fix(#4653): make path containment one decision, narrow the export, and close a symlink escape — Phase 3 of #4636 by @trek-e in #4672
- fix(#4558): report a byte-identical restore destination as already_present by @TwistedRiCen in #4599
- fix(#3780): serialize WINDOWS.md ledger mutations on a cross-process lock by @trek-e in #4681
- fix(#3929): seed install-time capability validation with the merged registry by @trek-e in #4691
- fix(#4055): verify a phase branch is genuinely new before create-and-switch by @trek-e in #4694
- fix(#4594): one canonical dispatch-identity owner — the emitted format and the parser that reads it back by @trek-e in #4693
New Contributors
- @bsmerbeck made their first contribution in #4441
- @lorenzespinosa made their first contribution in #4118
- @TwistedRiCen made their first contribution in #4599
Full Changelog: v1.13.0...v1.14.0