Releases: Wave-Engineering/mcp-server-sdlc
v2.0.1
Fixes
- fix(routing):
getAdapteruses repo slug depth to infer platform — 3+ segment slugs route to GitLab regardless of server cwd (#426) - fix(gitlab-api): treat empty stdout from glab list endpoints as empty collection, not error — fixes intermittent
ibm()failure during precheck (#428) - fix(pr_comment): add
target: "issue" | "mr"param to disambiguate GitLab issue vs MR commenting (#430)
v2.0.0
What's Changed
- chore(phase-3): close retrofit — MV-05 verified, MV-06 partial, VRTM populated (#325) by @bakeb7j0 in #369
- feat(wave_init)!: accept kahuna: { plan_id, slug }; remove legacy epic_id by @bakeb7j0 in #370
- feat(wave_finalize)!: accept plan_id; title pattern plan(#N) by @bakeb7j0 in #371
- docs(wave-finalize): correct stale epic_id comment by @bakeb7j0 in #372
- chore(changelog): aggregate P2W2 entries by @bakeb7j0 in #373
- feat(wave-reconcile): Prime(post-wave) reconciliation handler + Category B drift-halt by @bakeb7j0 in #374
- feat(devspec-finalize): require depends_on field on every Story by @bakeb7j0 in #375
- chore(changelog): aggregate P2W3 entries by @bakeb7j0 in #376
Full Changelog: v1.8.1...v2.0.0
v1.8.1 — Platform Adapter Retrofit (Phase 2 + Phase 3)
Platform Adapter Retrofit — Phase 2 + Phase 3 complete
Internal refactor. All 25 platform-aware handlers are now migrated to the PlatformAdapter pair (GitHubAdapter, GitLabAdapter). Gate-greps enforce the adapter boundary across the full handler tree; lib/glab.ts has been removed.
Version note:
v1.8.0shipped the Phase-1-close milestone earlier today (2026-04-26 AM).v1.8.1completes the retrofit (Phase 2 + Phase 3) as a single coherent follow-on release. The bump is non-destructive to thev1.8.0pinning already in the wild.
What users see
No behavioral changes. Every MCP tool call emits the same I/O contract as v1.8.0. lib/glab.ts is no longer exported (internal-only change).
What changed internally
- MIGRATED_METHODS: 10/25 → 26/26
scripts/ci/migration-allowlist.txt: 31 entries → 0 (empty — gate-greps now enforce against ALL handlers)lib/glab.ts: deleted (all helpers migrated to adapters)- Test suite: 1466 → final count (green on every migration PR)
- Bugs closed en route: #280, #281, #282, #283
Links
- Dev Spec:
docs/platform-adapter-retrofit-devspec.md - Adapter architecture:
docs/adapters/README.md - Phase 1 survey:
docs/adapters/survey.md - VRTM: Dev Spec § Appendix V (to be finalized in Story 3.6)
- Full changelog:
v1.8.0...v1.8.1
Install / upgrade
SDLC_VERSION=v1.8.1 ./install-remote.shBinaries attached below (sdlc-server-linux-x64, sdlc-server-darwin-arm64, sdlc-server-darwin-x64) per DM-07.
v1.8.0
What's Changed
- chore(handlers): sweep Bun.spawnSync from remaining 4 handlers by @bakeb7j0 in #264
- feat(adapters): scaffold lib/adapters/ + extract lib/shared/ + gate-greps by @bakeb7j0 in #265
- feat(adapters): migrate pr_create to PlatformAdapter pair by @bakeb7j0 in #266
- feat(adapter): migrate pr_diff to platform adapter pattern (#241) by @bakeb7j0 in #267
- feat(adapter): migrate pr_files to platform adapter pattern (#242) by @bakeb7j0 in #268
- feat(adapter): migrate pr_list to platform adapter pattern (#243) by @bakeb7j0 in #269
- feat(adapter): migrate pr_status to platform adapter pattern (#244) by @bakeb7j0 in #270
- feat(adapter): migrate pr_comment to platform adapter pattern (#245) by @bakeb7j0 in #271
- feat(adapter): migrate pr_wait_ci snapshot to platform adapter pattern (#246) by @bakeb7j0 in #274
- bug(commutativity_verify): lock single-log-emit contract + stop test log pollution by @bakeb7j0 in #272
- fix(ci_wait_run): add expected_sha to anchor wait to a specific commit by @bakeb7j0 in #273
Full Changelog: v1.7.1...v1.8.0
v1.7.1
What's Changed
- chore: track CLAUDE.md and gitignore env-local artifacts by @bakeb7j0 in #232
- docs(devspec): formalize platform adapter retrofit Dev Spec by @bakeb7j0 in #234
- docs(devspec): enumerate canary story 1.3-1.11 details for /upshift parser by @bakeb7j0 in #236
- chore(pr_create): normalize Bun.spawnSync to execSync by @bakeb7j0 in #254
- fix(pr_merge): honest merged-state reporting + working merge-queue detection by @bakeb7j0 in #263
Full Changelog: v1.7.0...v1.7.1
v1.7.0
Highlights
- 🆕 New
pr_merge_waittool — blocks until the commit lands onmain(or timeout). Same input aspr_mergeplustimeout_sec(default 600). Detect-and-skip if PR already merged. - 🔄
pr_mergenow returns the AGGREGATE state —{enrolled, merged, merge_method, queue:{enabled,position,enforced}, pr_state, warnings}. Eager but honest: queue-enrolled PRs reportmerged:false, pr_state:"OPEN"instead of the old optimisticmerged:truelie. Caller decides what "merged" means. - 🤝
skip_traingraceful degrade (folds #224) — on a merge-queue-enforced repo, the flag is silently dropped with awarnings[]entry instead of hard-erroring. Same behavior whenuse_merge_queue:true + skip_train:trueare combined. - 🐛
wave_previous_mergedfilters accepted deferrals — accepted-deferral issues are part of the wave's completion contract, no longer counted as open. Pending deferrals still count as open. Newdeferred_issues[]response field surfaces what was filtered.
⚠️ Behaviorally breaking
pr_merge's merged field semantics changed. Pre-v1.7.0 callers expected merged:true after queue enrollment (eager-but-misleading). The new shape returns merged:false until the commit is on main. Migration: switch to pr_merge_wait if you need "block until on main" semantics. The tool descriptions in both handlers explain when to use which.
What's Changed
- fix(wave_previous_merged): filter accepted-deferred issues from open_issues by @bakeb7j0 in #228
- feat(pr_merge): aggregate response + new pr_merge_wait tool by @bakeb7j0 in #229
Full Changelog: v1.6.0...v1.7.0
v1.6.0
Highlights
- 🆕 3 new handlers:
wave_finalize(kahuna→main MR assembly),label_list,label_create(idempotent, cross-platform) - 🚀 KAHUNA Phase 1 plumbing:
wave-stateschema gainskahuna_branch/kahuna_branches/gate-action labels;wave_initoptional kahuna-branch creation;commutativity_verifysingle-target safety-gate mode +timeout_sec - 🤝 Cross-repo support across
pr_*,ci_*,wave_*, andepic_sub_issues— handlers accept explicitrepoand resolve bare#Nrefs against the originating repo - 🔍
commutativity_verifyinstall + degradation:install-remote.shnow bundles[email protected](withSDLC_PROBE_REFoverride and--skip-probeflag); handler returns the newPROBE_UNAVAILABLEverdict when the binary is missing instead of opaque{ok:false} - 📝
pr_createauto-resolves default branch whenbaseis omitted;spec_validate_structureaccepts**Dependencies:**bold-label fallback for parity withspec_dependencies - 🐛
pr_wait_cireliability: works ongh < 2.50(Ubuntu LTS) by switching togh pr view --json statusCheckRollup;decideno longer deadlocks when every check is SKIPPED
Backward-compatible: commutativity_verify keeps group_verdict/pairs aliases for /nextwave and other pre-§5.1.2 consumers.
What's Changed
- chore(ci): replace setup-bun with npm install by @bakeb7j0 in #180
- fix(parsers): align spec handler grammar with ecosystem templates by @bakeb7j0 in #182
- fix(wave_previous_merged): verify PR-merged closure via GraphQL by @bakeb7j0 in #184
- fix(wave_compute): story-self fallback for single-story /prepwaves input by @bakeb7j0 in #191
- fix(wave_init): collision guard + rich success payload in extend mode by @bakeb7j0 in #192
- fix(ci_wait_run): merge-queue-only CI fallback via event field by @bakeb7j0 in #193
- fix(wave_next_pending): populate topology via computeWaves fallback by @bakeb7j0 in #194
- fix(cross-repo): epic_sub_issues resolves bare #N refs against epic's repo by @bakeb7j0 in #200
- fix(cross-repo): pr_* tools accept explicit repo param by @bakeb7j0 in #201
- fix(cross-repo): ci_* tools accept explicit repo param by @bakeb7j0 in #202
- fix(cross-repo): wave state handlers thread new repo + issue_ref inputs to CLI by @bakeb7j0 in #203
- feat(wave-state): kahuna_branch field + kahuna_branches history + gate actions by @bakeb7j0 in #210
- feat(commutativity_verify): single-target mode + timeout_sec input by @bakeb7j0 in #211
- feat(wave_finalize): new handler for kahuna→main MR assembly by @bakeb7j0 in #212
- feat(wave_init): optional kahuna branch creation and recording by @bakeb7j0 in #213
- fix(wave_compute): accept same section-name aliases as epic_sub_issues by @bakeb7j0 in #214
- feat(spec_validate_structure): accept Dependencies: label fallback for parity with spec_dependencies by @bakeb7j0 in #215
- feat(pr_create): auto-resolve default branch when base is omitted by @bakeb7j0 in #216
- feat(labels): add label_list and label_create tools — idempotent, cross-platform by @bakeb7j0 in #217
- feat(commutativity_verify): install probe + PROBE_UNAVAILABLE verdict by @bakeb7j0 in #219
- fix(pr_wait_ci): use
gh pr view --json statusCheckRollup(gh < 2.50 compat) by @bakeb7j0 in #222 - fix(pr_wait_ci): all-skipped checks no longer deadlock decide() by @bakeb7j0 in #226
Full Changelog: v1.5.0...v1.6.0
v1.5.0 — Commutativity-aware flight partitioning
Features
- commutativity_verify — merge-time changeset commutativity analysis via
commutativity-probe(#165) - commutativity_predict — planning-time manifest-based commutativity prediction (#179)
- pr_merge skip_train — bypass merge queue when commutativity is proven safe (#165)
- flight_partition manifest discount — discount
DEPENDENCY_MANIFESToverlaps (Cargo.toml, package.json, go.mod, etc.) to reduce over-serialization of parallel flights (#176) - wave_reconcile_mrs — backfill
mr_urlswhen a wavemachine worker resumes after a crash (#178) - MCP logging standard — structured JSON logging across all handlers (#168)
Fixes
- pr_wait_ci heartbeat — MCP-side state updates during CI polling;
wave_show()no longer reports stale timestamps during long CI waits (#177) - pr_create idempotent — returns existing PR/MR on duplicate instead of erroring (#162)
- Platform detection — consolidated detection logic, fixed misrouting and inverted logic (#161)
Stats
- 69 handlers registered
- 1056 tests passing
- 2520 expect() calls
Epic
Closes #175 — Commutativity-Aware Partitioning + Wave State Reliability
v1.4.0
v1.4.0 — GitLab adapter migration + nested group path fix
Features:
- lib/glab.ts adapter with typed API wrappers for all GitLab operations (#149)
- Migrated wave handlers to lib/glab.ts (#150)
- Migrated all 18 non-wave handlers to lib/glab adapter (#154)
- Topology overloading with reason field (#153)
Fixes:
- Nested GitLab group paths (e.g., org/sub/group/repo) now parse correctly (#156)
Chores:
v1.3.0
What's Changed
- feat(sdlc-mcp): devspec_finalize handler by @bakeb7j0 in #123
- feat(sdlc-mcp): devspec_locate handler by @bakeb7j0 in #122
- feat(sdlc-mcp): devspec_verify_approved handler by @bakeb7j0 in #125
- feat(sdlc-mcp): devspec_approve handler by @bakeb7j0 in #124
- feat(sdlc-mcp): devspec_summary handler by @bakeb7j0 in #126
- feat(sdlc-mcp): devspec_parse_section_8 handler by @bakeb7j0 in #127
- feat(sdlc-mcp): ddd_locate_sketchbook handler by @bakeb7j0 in #128
- feat(sdlc-mcp): ddd_verify_committed handler by @bakeb7j0 in #130
- feat(sdlc-mcp): ddd_locate_domain_model handler by @bakeb7j0 in #129
- feat(sdlc-mcp): ddd_summary handler by @bakeb7j0 in #131
- feat(sdlc-mcp): campaign_stage_complete handler by @bakeb7j0 in #140
- feat(sdlc-mcp): campaign_defer handler by @bakeb7j0 in #139
- feat(sdlc-mcp): campaign_init handler by @bakeb7j0 in #138
- feat(sdlc-mcp): campaign_stage_start handler by @bakeb7j0 in #136
- feat(sdlc-mcp): campaign_show handler by @bakeb7j0 in #137
- feat(sdlc-mcp): campaign_dashboard_url handler by @bakeb7j0 in #142
- feat(sdlc-mcp): campaign_stage_review handler by @bakeb7j0 in #141
Full Changelog: v1.2.0...v1.3.0