Skip to content

chore: bug fixes github issues users#8

Merged
vnovick merged 3 commits intomainfrom
fix-github-issues-sync
Mar 18, 2026
Merged

chore: bug fixes github issues users#8
vnovick merged 3 commits intomainfrom
fix-github-issues-sync

Conversation

@vnovick
Copy link
Owner

@vnovick vnovick commented Mar 18, 2026

Bug Fixes

1. TUI shows actual error reasons (internal/orchestrator/orchestrator.go)
Added logBuf entries for two failure paths that previously showed no detail in the TUI:

  • before_run hook failed — when a pre-run hook exits non-zero
  • prompt render failed — when the agent prompt template fails to render

2. Web server shows ERROR-level log entries (internal/server/handlers.go)
Added an ERROR case to parseLogLine. Previously only INFO and WARN were parsed —
ERROR lines were silently dropped, so error entries never appeared in the web UI log view.

3. GitHub closed-issue state detection (internal/tracker/github/normalize.go)
When a GitHub issue is closed via the UI (no label set), deriveState was returning "closed"
literally — which wasn't in terminal_states, causing the reconciler to log misleading messages.
Now it checks for a matching terminal label first, falls back to terminalStates[0], then
"closed" as a last resort. Two tests were added to cover this.

4. Paused→discard re-dispatch race — three parts:

  • internal/orchestrator/state.go: Added DiscardingIdentifiers map and EventDiscardComplete
    event type
  • internal/orchestrator/dispatch.go: Added DiscardingIdentifiers check to IsEligible and
    IneligibleReason
  • internal/orchestrator/orchestrator.go: When EventTerminatePaused fires, the issue is
    immediately added to DiscardingIdentifiers (blocking re-dispatch), and the async
    UpdateIssueState goroutine sends EventDiscardComplete when done, which removes it
  • cmd/symphony/main.go: TerminateIssue callbacks now call orch.Refresh() after discard —
    this is safe because DiscardingIdentifiers prevents re-dispatch until the label update
    completes, even if a poll runs immediately

5. GitHub state casing — duplicate Kanban columns (internal/tracker/github/normalize.go, client.go)
extractLabels lowercases all GitHub label names (by design, for consistent matching). However,
deriveState was returning the lowercased label instead of the configured state name, so issues
came back with e.g. State: "in progress" while the config had "In Progress". The frontend's
Set<string> deduplication is case-sensitive, creating a separate column for each casing variant.
Fixed in two places:

  • normalize.go: deriveState now returns active/terminal (configured casing) instead of
    the lowercased label — affects all active and terminal state matches
  • client.go: fetchPaginated extraStates fallback now uses derived = extra (configured
    casing) instead of derived = label — affects backlog/completion states not in active/terminal

Config Changes (cmd/symphony/main.go)

  • Linear template: uncommented working_state: "In Progress" so it's active by default
  • Linear template: improved backlog_states comment

Release

All five fixes affect runtime behavior. A patch release is appropriate — no breaking API
changes, no new required config fields. DiscardingIdentifiers is internal state that is not
persisted to disk in a way that would break existing snapshots.

@vnovick vnovick merged commit 282d3d9 into main Mar 18, 2026
3 of 4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant