Install
npm i @opengsd/gsd-core@1.11.0
# or
npm i @opengsd/gsd-core@latestWhat's Changed
Feature
- feat(#1954): flag undeclared coupling between same-wave plans by @trek-e in #3237
- feat(#1955): flag coincidental reliance in goal-backward verification by @trek-e in #3250
- feat(#1956): flag cross-artifact fact drift in the plan drift guard by @trek-e in #3259
- feat(#1953): complexity-triggered refactor extension point (execute:post) by @trek-e in #3261
- feat(#2870): resolve install scope as a value by @trek-e in #3278
- feat(#2871): resolve triggers and host precedence, not just placement by @trek-e in #3291
- feat(#3313): allow-test-rule total-file-count ratchet, F17 promotions by @trek-e in #3326
- feat(#3218): the prompt layer asks the CLI for plan counts by @trek-e in #3327
- feat(#1689): per-plan agent_hint executor routing by @trek-e in #3417
- feat(#3409): reject shell guards that cannot observe their own failure arm by @trek-e in #3558
Enhancement
- enhance(#3248): disclose capability skills as an instruction surface by @trek-e in #3253
- enhance(#2596): validate a wave branch's committed diff stays in its declared scope by @trek-e in #3264
- enhance(#2704): resolve documentation links and compare H1 status brackets in the ADR gate by @trek-e in #3266
- enhance(#3241): omit the codex per-agent model by default by @trek-e in #3276
- enhance(#3242): validate codex .toml model posture, not just presence by @trek-e in #3290
- enhance(#2229): add three-way claim disposition (admit/refute/abstain) to /gsd-explore research pass by @davesienkowski in #2543
- enhance(#3243): sync installed codex .toml model/effort to the passive posture by @trek-e in #3296
- enhance(#3245): report the detected host runtime in init by @trek-e in #3307
- enhance(#2872): record scope and runtime in the install manifest by @trek-e in #3323
- enhance(#2573): stamp STATE.md with its commit and surface a freshness hint by @davesienkowski in #2622
- enhance(#2483): stop the claude reviewer lane from inheriting CLAUDE.md + auto-memory by @0xdhx in #2493
- enhance(#3180): one code, one rule, one subject, with a typed remedy — Phase 11 by @trek-e in #3405
- enhance(#3180): the sibling validators share one envelope and one owner — Phase 12 by @trek-e in #3407
- enhance(#2115): replace bare eval with llm eval and drop ai system in the AI-integration gate by @0xdhx in #3431
- enhance(#2873): detect cross-scope shadowing and reach the project-local spec tree by @trek-e in #3537
- enhance(#2874): return the executed plan and route install IO through a seam by @trek-e in #3568
- enh(#3565): sentinel/contract registry + check:contract-drift lint by @trek-e in #3571
- enhance(#2142): archive quick tasks at milestone close-out by @trek-e in #3592
- enh(#2875): materialization primitives — durable user-artifact staging and descriptor-authoritative agents by @trek-e in #3600
- enhance(#3587): add a per-phase commit_docs override by @trek-e in #3601
- enhance(#3588): add an opt-in commit_docs pre-commit hook by @trek-e in #3609
- enh(#2876): retire the dead and pass-through exports from bin/install.js by @trek-e in #3615
- enhance(#3617): one canonical Windows binary resolver in the platform seam (epic #3411 Phase 1) by @trek-e in #3621
- enhance(#3618): fold fallow-runner onto the canonical binary resolver (epic #3411 Phase 2) by @trek-e in #3633
- enhance(#3619): ratchet the platform seam with local/no-private-binary-resolution (epic #3411 Phase 3) by @trek-e in #3636
- enhance(#2295): record the resolved model per reviewer in REVIEWS.md frontmatter by @trek-e in #3649
Fix
- fix(#3174): read quick's verification status via the verification.status query by @0xdhx in #3205
- fix(#3156): derive the config-location scrub set and close the leaks it cannot reach by @0xdhx in #2677
- fix(#3204): milestone sectioning is vocabulary, not heading position by @trek-e in #3230
- fix(#3238): bump js-yaml to the patched 4.3.1 (high-severity devDep advisory) by @trek-e in #3246
- fix(#2359): CHANGELOG 1.4.0 Cursor commands entry cites #805, not #803 by @trek-e in #3252
- fix(#2725): repoint the pre-commit alias guard at sources git can actually stage, drop nine dead ones by @trek-e in #3273
- fix(#3177): correct the stale Claude Code Agent() dispatch claim in two workflows by @trek-e in #3281
- fix(#3271): delete 25 duplicated folded test suites and fix three runner defects found doing it by @trek-e in #3285
- fix(#2652): gate quick/diagnose dispatch on dispatch.isolation, not the runtime name by @behruznassre in #2728
- fix(#3162): resolve active state phase before drift scan by @denniyahh in #3208
- fix(#2783): address wedged PRs in ship note protocol by @denniyahh in #2818
- fix(#3207): create-and-switch on the first phase/milestone commit by @trek-e in #3363
- fix(#3213): segment-boundary membership for letter-named phase dirs by @trek-e in #3368
- fix(#3224): register WINDOWS.md as a canonical .planning/ artifact by @trek-e in #3369
- fix(#3225): guard W006/W007 + consistency loops with isSentinelPhaseId by @trek-e in #3371
- fix(#3233): no-op state update-progress when the milestone scan finds zero plans by @trek-e in #3375
- fix(#3255): updateTableCell scans for the table carrying the requested column by @trek-e in #3377
- fix(#3257): preserve full-line frontmatter comments through the parse→reconstruct pair + syncStateFrontmatter by @trek-e in #3387
- fix(#3133): keep global Claude @-references on tilde, not $HOME by @trek-e in #3393
- fix(#3321): exclude .claude/.planning from no-phantom-issue-refs SKIP_DIRS by @trek-e in #3396
- fix(#3102): render edge-probe coverage report so the resolution loop consumes it by @davesienkowski in #3391
- fix(#3203): stop npm-global installs validating bundled agents against themselves by @0xdhx in #3229
- fix(#2528): resolve digit-leading phase directories by bare number by @JusticeWay in #2559
- fix(#2486): do not recommend or persist Claude-only worktree isolation on non-Claude runtimes by @behruznassre in #2531
- fix(#2570): parse leading date from last_activity so stale_activity fires with a description suffix by @davesienkowski in #2571
- fix(#3320): widen c8 --include glob to cover nested gsd-core/bin/lib dirs by @trek-e in #3397
- fix(#3319): mutation-gate has_work=false renders skipped, not success by @trek-e in #3399
- fix(#3163): scope phase.add insertion to the current milestone by @trek-e in #3400
- fix(#3170): anchor milestone one-liner extraction to a summary-shaped heading by @trek-e in #3401
- fix(#3025): refuse cross-runtime skill sync in sync-skills by @trek-e in #3404
- fix(#3367): expectedQuickId derives UTC values to match the TZ-pinned subprocess by @bshiggins in #3398
- fix(#1526): delegate auto-chain post-completion to transition workflow by @trek-e in #3419
- fix(#3151): stop emitting effort: into skill frontmatter (prompt-cache invalidation) by @trek-e in #3425
- fix(#3165): recover phase_count when scoped window is truncated by @trek-e in #3428
- fix(#3171): init execute-phase emits display name, not directory slug by @trek-e in #3429
- fix(#3188): null absent planning-doc paths in init phase queries by @trek-e in #3430
- fix(#3193): tolerate attributes on plan-task child tags by @trek-e in #3433
- fix(#3190): commit review.md in --auto loop; fix report env var by @trek-e in #3434
- fix(#3194): verify source-grounded lane evidence from review output by @trek-e in #3436
- fix(#3191): anchor remaining diff-base greps, portably by @trek-e in #3437
- fix(#3189): drop non-id prose from phase_req_ids before gap check by @trek-e in #3438
- fix(#3263): warn in roadmap validate on truncated milestone window by @trek-e in #3444
- fix(#3262): guard phase writes against milestone-scope headings by @trek-e in #3446
- fix(#3258): honor all field-classification preservation rows by @trek-e in #3447
- fix(#3275): resolve reviewer lane binaries via shared pathext scan by @trek-e in #3445
- fix(#3303): correct code_review_depth doc; add agent_skills array form by @trek-e in #3449
- fix(#3280): read frontmatter current_phase in w011 and de-force w027 worktree advice by @trek-e in #3452
- fix(#3297): project --gaps mode onto next-up execute command by @trek-e in #3453
- fix(#3300): guard build_prompt optional sections against nullglob by @trek-e in #3454
- fix(#3311): milestone lock makes parallel-phase state conflicts visible by @trek-e in #3455
- fix(#3440): retire GAP CLOSURE PLANS CREATED marker, document artifact return contract by @trek-e in #3443
- fix(#3312): require static frontend evidence before ui-plan-gate blocks by @trek-e in #3451
- fix(#3302): return per-agent worktree metadata from workflow scripts by @trek-e in #3450
- fix(#3345): stop counting blocked summaries as completed plans by @trek-e in #3459
- fix(#3324): build-time embed execution context instead of literal @-includes by @trek-e in #3462
- fix(#3329): reconcile stale managed .sh hook commands on install/update by @trek-e in #3460
- fix(#1884): surface planning-lock mkdir failures, not a phantom timeout by @trek-e in #3472
- fix(#3427): teach full-form depends_on ids in phase-prompt template by @trek-e in #3475
- fix(#3448): thread next_action through debug auto-resume respawn by @trek-e in #3476
- fix(#3354): preserve stored total_phases when milestone is unbounded by @trek-e in #3480
- fix(#3350): prefer lowest outstanding phase over positional next in phase complete by @trek-e in #3482
- fix(#3370): state checkpoint gate semantics in executor dispatch prompts by @trek-e in #3478
- fix(#3384): strip mcp__* tool grants from zcode-installed subagents by @trek-e in #3483
- fix(#3456): render /gsd command output via ctx.ui.notify in pi by @trek-e in #3485
- fix(#3355): pick phase-dir dedup survivor from content, not mtime by @trek-e in #3486
- fix(#3351): reconcile state.patch report with persisted state.md by @trek-e in #3487
- fix(#3426): anchor rule 3 gate tests on heading structure not token scan by @trek-e in #3489
- fix(#3395): own the phase line in planned-phase and persist --name by @trek-e in #3490
- fix(#3457): split deferred items on leaf headings, not bullets by @trek-e in #3488
- fix(#3374): phase.complete stops harvesting stale body stopped_at by @trek-e in #3491
- fix(#3498): escapeRegex falls back below Node 24 (no RegExp.escape) by @trek-e in #3499
- fix(#3477): run untrusted key_links patterns on a linear-time engine by @trek-e in #3496
- fix(#3423): standardize on <required_reading>, retire the files_to_read emit tag by @trek-e in #3432
- fix(#3493): confine key_links from:/to: to the project directory by @trek-e in #3506
- fix(#3357): one phase-pinned resolver for verification-report discovery by @trek-e in #3513
- fix(#3515): disclose the intentional mcp unconfined posture by @trek-e in #3517
- fix(#3504): harden hook injection patterns and force-add guard by @trek-e in #3510
- fix(#3514): deny internal fetch hosts; disclose unverified integrity by @trek-e in #3516
- fix(#3497): unescape double-quoted scalars on parse so round-trips stop doubling backslashes by @trek-e in #3521
- fix(#3481): resolve add-roadmap-evolution's phase from STATE.md, not a literal
?by @trek-e in #3522 - fix(#3518): pin uat_path to the phase's own UAT artifact via the shared phase-pinned resolver by @trek-e in #3525
- fix(#3503): derive the code-review diff base from GSD's own commit scopes, not prose mentions by @trek-e in #3526
- fix(#3479): treat absent default-true mempalace keys as enabled in every prose gate by @trek-e in #3527
- fix(#3210): gate unmet preconditions as blocking-human; cap blocker retries at needs_human by @trek-e in #3528
- fix(#3534): resolve-execution reports resolved and effective effort by @trek-e in #3542
- fix(#3533): effort inherit — expressible, omitted at writers, never re-added by @trek-e in #3541
- fix(#3532): warn when global defaults keys are shadowed by a project config by @trek-e in #3540
- fix(#3511): scope every phase-directory scan to the phase it belongs to by @trek-e in #3535
- fix(#3531): merge routing_tier_defaults over manifest tier defaults by @trek-e in #3539
- fix(#3544): restore tilde form for at-refs in the global spec tree by @trek-e in #3551
- fix(#3458): scan archived milestone phases, and make [A] Acknowledge actually suppress by @trek-e in #3555
- fix(#3561): route /gsd-map-codebase --fast to a scan.md path the runtime can resolve by @trek-e in #3562
- fix(#3543): bake no tier model when the effective model_profile is unverifiable by @trek-e in #3563
- fix(#3547): exercise the real global config-home shape in the install harness by @trek-e in #3567
- fix(#3557): accept claude code session id in the workstream session probe by @trek-e in #3570
- fix(#3206): define "explicit evidence" inline at verifier 5b; repair stale honest-verifier cites by @0xdhx in #3435
- fix(#3566): read the per-install .gsd-runtime marker above host-wide defaults in the isolation guards by @trek-e in #3589
- fix(#3569): require a digit-bearing phase id in the stats heading scan by @trek-e in #3591
- fix(#3572): keep phase remove's STATE.md write single-block and drop the removed heading by @trek-e in #3594
- fix(#3585): close raw-git bypasses of the commit_docs gate by @trek-e in #3590
- fix(#3573): keep the stored total_phases when the roadmap is absent at state-write time by @trek-e in #3595
- fix(#3576): repair all 43 dead references/ cites and gate the canonical resolvable form by @trek-e in #3596
- fix(#3586): warn when .planning/ is gitignored but still tracked by @trek-e in #3598
- fix(#3577): recognize markdown-table phase rows across the roadmap enumeration family by @trek-e in #3599
- fix(#3581): derive init.progress's next_phase from roadmap order, not artifact presence by @trek-e in #3603
- fix(#3559): dispatch every ship:pre capability gate, not two hardcoded capIds by @trek-e in #3608
- fix(#3597): count scenario expectation failures in the QA gate, and fix the workstream scope split it exposed by @trek-e in #3607
- fix(#3578): derive milestone status from phase counters, not phase-completion prose by @trek-e in #3614
- fix(#3579): a pointer-less session inherits the repo active-workstream marker by @trek-e in #3616
- fix(#3582): route every hook's compiled-module require through the self-heal build seam by @trek-e in #3629
- fix(#3583): one percent per write — route update-progress through the shared computation by @trek-e in #3634
- fix(#3584): the verb owns the count token and nothing else by @trek-e in #3635
- fix(#3618): update the Windows fallow assertions to the behavior #3618 chose by @trek-e in #3654
- fix(#3631): exclude only pycache-resident bytecode from the consent digest by @trek-e in #3650
- fix(#3582): stop the cold-tree fixture racing concurrent hook builds by @trek-e in #3656
- fix(#3620): point the docs at files that actually exist by @trek-e in #3658
- fix(#3582): stop the cold-tree guard from racing the builders it guards against by @trek-e in #3665
New Contributors
- @onionviolet made their first contribution in #3403
Full Changelog: v1.10.0...v1.11.0