Added
- add searchExcludeDirs setting for @ file autocomplete blacklist (#1202)
- ci: automate prod-release with version bump, changelog, and tag push (#1194)
- auto-open HTML reports in default browser on manual export (#1164)
- upgrade to Node.js 24 LTS across CI, Docker, and package config (#1165)
- add /gsd logs command to browse activity, debug, and metrics logs (#1162)
- browser-tools: configurable screenshot resolution, format, and quality (#1152)
- add pre-commit secret scanner and CI secret detection (#1148)
- mcporter: add .gsd/mcp.json per-project MCP config support (#1141)
- metrics: add API request counter for copilot/subscription users (#1140)
- per-milestone depth verification + queue-flow write-gate (#1116)
- add OSC 8 clickable hyperlinks for file paths in export notifications (#1114)
- park/discard actions for in-progress milestones (#1107)
- ci: implement three-stage promotion pipeline (Dev → Test → Prod) (#1098)
- cache-ordered prompt assembly and dashboard cache hit rate (#1094)
- add comprehensive API key manager (/gsd keys) (#1089)
- ci: add multi-stage Dockerfile for CI builder and runtime images
- gsd: add directory safeguards for system/home paths (#1053)
- enhance HTML report with derived metrics, visualizations, and interactivity (#1078)
- auto-extract lessons to KNOWLEDGE.md on slice/milestone completion (#711) (#1081)
- auto-create PR on milestone completion (#687) (#1084)
- wire semantic chunking, add preferences, metrics, and docs
- add token optimization suite for prompt caching, compression, and smart context selection
- autocomplete: add /thinking completions, GSD subcommand descriptions, and test coverage (#1019)
- add respectGitignoreInPicker setting for @ file picker (#979) (#1016)
- prefs: add search_provider to preferences.md (#1001)
- add
--eventsflag for JSONL stream filtering (#1000) - add 10 bundled skills for UI, quality, and code optimization (#999)
- ux: group model list by provider in /gsd prefs wizard (#993)
- add
--answersflag for headless answer injection (#982) - add project onboarding detection and init wizard
Fixed
- ci: add npm publish to prod-release and prevent mid-deploy cancellation (#1208)
- ci: use env var for Discord webhook secret in if-condition
- complete shared barrel exports and add import-claude to help text (#1198)
- broaden unit-runtime path sanitization to strip all unsafe characters
- detect stale bundled resources via content fingerprint (#1193)
- include promptGuidelines in customPrompt path of buildSystemPrompt (#1187)
- prevent branch-mode merge fallback from firing in worktree isolation (#1183)
- treat auto-discovered verification failures as advisory, not blocking (#1188)
- ci: remove @latest npm promotion from pipeline
- ci: skip GitHub release creation when tag already exists
- handle Windows non-ASCII paths in cpSync with copyFileSync fallback (#1181)
- non-blocking verification gate for auto-discovered commands (#1177)
- add defensive guards against undefined .filter() in auto-mode dispatch/recovery (#1180)
- sync living docs (DECISIONS/REQUIREMENTS/PROJECT/KNOWLEDGE) between worktree and project root (#1173)
- route needs-discussion phase to interactive flow instead of stopping (#1175)
- run resource-skew check before early TTY gate
- move TTY check before heavy initialization to prevent process hang
- ci: skip init smoke test in non-TTY CI environments (#1172)
- ci: skip publish when version already exists on npm (#1166)
- ci: use local binary for pipeline smoke test (#1163)
- prevent concurrent GSD sessions from overlapping on same project (#1154)
- exclude completion-transition errors from health escalation at task level (#1157)
- ci: skip git-diff guard in prepublishOnly during CI (#1160)
- /gsd quick respects git isolation: none preference (#1156)
- text-based fallbacks for RPC mode where TUI widgets produce empty turns (#1112)
- headless-query: use jiti to load extension .ts modules (#1143)
- pause auto-mode when env variables needed instead of blocking (#1147)
- ci: fix dev-publish version stamp and platform sync (#1145)
- google-search: add 30s timeout to Gemini API call (#1139)
- verification-gate: sanitize preference commands with isLikelyCommand (#1138)
- auto-dashboard: show trigger task label for hook units (#1136)
- auto-worktree: detect worktree structurally when originalBase is null (#1135)
- model-resolver: prefer provider's recommended variant over saved base model (#1131)
- auto-worktree: auto-commit project root dirty state before milestone merge (#1130)
- guided-flow: support re-discuss flow for already-discussed slices (#1129)
- dispatch guard skips parked milestones — they no longer block later milestone dispatch (#1126)
- worktree reassess-roadmap loop — existsSync fallback in checkNeedsReassessment (#1117)
- lsp: use where.exe on Windows to resolve command paths (#1134)
- gsd-db: auto-initialize database when tools are called (#1133)
- inline preferences path to fix remote questions setup (#1110) (#1111)
- ci: add safe.directory for containerized pipeline job (#1108)
- remove .gsd/ from tracking, ignore entire directory
- update tests for god-file decomposition
- strip model variant suffix for API key auth (#1097) (#1099)
- match both milestoneId and sliceId when filtering duplicate blocker cards
- add dispatch stall guards to prevent auto-mode pause after slice completion (#1073) (#1076)
- prevent summarizing phase stall by retrying dropped agent_end events (#1072) (#1074)
- use atomic writes for completed-units.json and invalidate caches in db-writer (#1069)
- reject prose Verify: fields from being executed as shell commands (#1066) (#1068)
- restore session model on error instead of reading stale global prefs (#1065) (#1067)
- prevent run-uat re-dispatch loop when roadmap checkbox update fails (#1063) (#1064)
- inline compareSemver in gsd extension to fix broken relative import (#1058)
- disable reasoning for MiniMax-M2.5 in alibaba-coding-plan provider (#1003) (#1055)
- improve LSP diagnostics when no servers detected (#1082) (#1086)
- prevent summarizing phase stall by retrying dropped agent_end events (#1072)
- switch alibaba-coding-plan to OpenAI-compat endpoint with proper compat flags (#1003)
- add barrel files for remote-questions, ttsr, and shared extensions (#1048)
- consolidate frontmatter parsing into shared module (#1040)
- always ensure tasks/ directory exists for slice units (#900) (#1050)
- centralize GSD timeout and cache constants (#1038)
- improve RemotePromptRecord.ref type safety (#1041)
- document silent catch handlers in browser-tools (#1037)
- use literal union types in RuntimeErrorJSON for type safety (#1034)
- extract sanitizeError to shared module and apply to ask-user-questions (#1033)
- deduplicate formatDateShort into shared/format-utils (#1032)
- add error handlers to visualizer overlay promise chains (#1027)
- security: use execFileSync in resolve-config-value to prevent shell operator bypass (#1025)
- security: use execFile for browser URL opening to prevent shell injection (#1022)
- prevent duplicate milestone IDs when generating multiple before persisting (#961) (#1018)
- consolidate duplicate formatting functions (#1011)
- gsd: delete orphaned complexity.ts (#1005)
- search: consolidate duplicate Brave API helpers (#1010)
- merge worktree to main when all milestones complete (#962) (#1007)
- gsd: deduplicate resolveGitHeadPath function (#1015)
- add missing package.json subpath exports and oauth stubs (#1014)
- gsd: consolidate string-array normalizer functions into shared utility (#1009)
- browser-tools: document intentional silent catches, add debug logging for others (#1013)
- consolidate duplicate VerificationCheck/Result type definitions (#1008)
- gsd: add GIT_NO_PROMPT_ENV to gitFileExec and deduplicate constant (#1006)
- remote-questions: add null coalesce for optional threadUrl (#1004)
- auto-resume on transient server errors, not just rate limits (#886) (#957)
- replace ambiguous compound question in reflection step (#963) (#1002)
- gsd: remove STATE.md update instructions from all prompts (#983)
- gsd: clear all caches after discuss dispatch so picker sees new CONTEXT files (#981)
- auto: dispatch retry after verification gate failure (#998)
- enforce GSDError usage and activate unused error codes (#997)
- unify extension discovery logic (#995)
- deduplicate tierLabel/tierOrdinal exports (#988)
- deduplicate getMainBranch implementations (#994)
- add error handling for unhandled promise rejections (#992)
- deduplicate formatTokenCount into shared format-utils (#987)
- add debug logging to silent catch blocks in auto.ts (#986)
- deduplicate formatDuration into shared format-utils (#989)
- add exports fields to pi-tui and pi-agent-core packages (#991)
- remove dead github-client.ts (never imported) (#990)
- deduplicate parseJSONL and unify MAX_JSONL_BYTES constant (#985)
- remove broken ./hooks export path from pi-coding-agent (#984)
- inline bundled extension path parsing in subagent
Changed
- extract numeric validation helpers in prefs wizard (#1205)
- deduplicate projectRoot() and dispatchDoctorHeal() between commands.ts and commands-handlers.ts (#1203)
- extract shared JSON persistence utility, migrate metrics + routing-history + unit-runtime (#1206)
- remove unused preferences-hooks.ts re-export facade (#1207)
- remove commands.ts re-exports, import directly from submodules (#1204)
- extract frontmatter body extraction into shared helper (#1201)
- deduplicate projectRoot() — single source in commands.ts (#1197)
- extract PER_REQUEST_TIMEOUT_MS to shared types (#1196)
- update state — S01 planned, ready for execution
- M001-1ya5a3/S01: auto-commit after state-rebuild
- M001-1ya5a3/S01: auto-commit after research-slice
- decompose doctor.ts into types, format, and checks modules (#1096)
- extract milestone-ids and guided-flow-queue from guided-flow.ts (#1095)
- decompose preferences.ts, populate skills and models modules (#1091)
- decompose auto.ts into 6 focused modules (#1088)
- decompose commands.ts into 5 focused modules
- remove redundant test file, identify consolidation targets (#1070)
- batch 2 — consolidate preferences, convert 8 more files to node:test (#1061)
- consolidate tests by area, standardize on node:test (#1059)
- skip initResources when version matches, consolidate startup I/O (#1052)
- centralize magic numbers into constants.ts (#1044)
- resource-loader: extract syncResourceDir to eliminate triplicated sync logic (#1036)
- bg-shell: split 1604-line god file into tool, command, and lifecycle modules (#1049)
- headless: split 772-line god file into events, UI, and context modules (#1047)
- gsd: extract safeCopy/safeMkdir helpers to replace repetitive try/catch FS patterns (#1043)
- gsd: extract atomicWriteSync utility to replace 6 duplicate write-tmp-rename patterns (#1046)
- gsd: unify duplicate padRight/truncate into shared format-utils (#1045)
- loader: consolidate 5 duplicate package.json version reads into cached helper (#1042)
- headless: remove duplicate jsonLine, use serializeJsonLine from pi-coding-agent (#1039)
- fix unicode regex discrepancy and standardize function naming (#1031)
- fix chalk version mismatch and document pinned dependency rationale (#1030)
- add concurrency limits to unbounded Promise.all operations (#1029)
- optimize SSE streaming buffer to avoid quadratic string growth (#1024)
- reduce makeTreeWritable calls from 6 to 2 on startup (#1023)
- add domain-grouped re-exports for preferences module (#996)