Verifies the flag returns true after openDatabase() is called and
persists after closeDatabase(), ensuring the "not yet initialized"
vs "genuinely unavailable" distinction works correctly.
deriveState() is called during before_agent_start context injection,
before any tool invocation has had a chance to open the DB. Previously,
isDbAvailable() returning false in this path triggered a misleading
"DB unavailable — using filesystem state derivation (degraded mode)"
warning, even though the DB was simply not yet initialized (not failed).
Add a _dbOpenAttempted flag in gsd-db.ts that tracks whether
openDatabase() has been called at least once. The degraded-mode warning
now only fires when the DB was actually attempted and failed to open,
not when it hasn't been initialized yet.
Supersedes #3922.
Three fixes to prevent cross-milestone contamination during parallel merge:
1. autoCommitDirtyState branch guard: only auto-commit when cwd is on the
milestone branch, not the integration branch. Prevents committing dirty
files from other milestones onto main.
2. process.chdir(previousCwd) before MergeConflictError throw: restores cwd
so the next merge in a parallel sequence doesn't inherit a leaked cwd.
3. Pre-teardown auto-commit branch guard: skip the safety-net commit when
cwd is on the integration branch, not the milestone branch.
Supersedes #3130.
- Stream tool results in real-time during Claude Code SDK sessions
instead of deferring until session end. Tool calls (read, bash, write,
etc.) now show their output as they complete, not collapsed as "..."
- Stop suppressing toolcall_start/delta/end events from stream adapter
so the TUI can render tool call progress during streaming
- On SDK turn boundary (user message with tool results), push synthetic
toolcall_end events with externalResult attached for immediate rendering
- Chat controller checks for externalResult on toolcall_end message
updates and calls updateResult on pending ToolExecutionComponents
- Fix case-sensitive tool name matching (Read vs read, Bash vs bash)
in TUI ToolExecutionComponent rendering
- Auto-discover and pass GSD_WORKFLOW_EXECUTORS_MODULE and
GSD_WORKFLOW_WRITE_GATE_MODULE env vars in MCP server launch config
- Add /gsd mcp init command and auto-bootstrap .mcp.json for Claude
Code provider during auto-start
- Add tool_execution_update event type for web UI streaming updates
- Add setStderrLoggingEnabled toggle for workflow logger
ensureDbOpen() returns false on failure instead of throwing, so the
try/catch alone was not catching the real failure path. Now check the
return value and notify the user with a visible warning when DB or
STATE.md generation fails, instead of silently claiming full success.
The init wizard created .gsd/milestones/ and PREFERENCES.md but never
called ensureDbOpen(), leaving GSD in degraded markdown-only mode on
every fresh install. 20+ DB-gated features were disabled until a tool
handler happened to trigger DB creation as a side effect.
- Call ensureDbOpen(basePath) after bootstrapGsdDirectory() so the
SQLite database exists immediately
- Create .gsd/runtime/ directory to match the headless bootstrap path
- Generate initial STATE.md via deriveState + buildStateMarkdown so
the explicit /gsd init path produces it (showSmartEntry would have
generated it, but ops.ts returns before entering that flow)
All three additions are wrapped in non-fatal try/catch — failures
log warnings but never block project init.
Closes#3880
- auto.ts: restore s.autoStartTime from meta.autoStartTime in both
custom workflow and milestone resume paths, with Date.now() fallback
and zero-guard
- auto.ts: replace 3 empty catch blocks with logWarning calls
- guided-flow.ts: replace empty catch with logWarning call
- interrupted-session.ts: add autoStartTime to PausedSessionMetadata
Adds a GitHub Actions cron job that runs every Monday, executes
generate-models.ts against live provider APIs, and opens a PR
automatically if models.generated.ts has changed.
Closes#3888
Co-Authored-By: Claude Code <noreply@anthropic.com>