Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Bug Fixes
1. TUI shows actual error reasons (
internal/orchestrator/orchestrator.go)Added
logBufentries for two failure paths that previously showed no detail in the TUI:before_run hook failed— when a pre-run hook exits non-zeroprompt render failed— when the agent prompt template fails to render2. Web server shows ERROR-level log entries (
internal/server/handlers.go)Added an
ERRORcase toparseLogLine. Previously onlyINFOandWARNwere parsed —ERRORlines 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),
deriveStatewas 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: AddedDiscardingIdentifiersmap andEventDiscardCompleteevent type
internal/orchestrator/dispatch.go: AddedDiscardingIdentifierscheck toIsEligibleandIneligibleReasoninternal/orchestrator/orchestrator.go: WhenEventTerminatePausedfires, the issue isimmediately added to
DiscardingIdentifiers(blocking re-dispatch), and the asyncUpdateIssueStategoroutine sendsEventDiscardCompletewhen done, which removes itcmd/symphony/main.go:TerminateIssuecallbacks now callorch.Refresh()after discard —this is safe because
DiscardingIdentifiersprevents re-dispatch until the label updatecompletes, even if a poll runs immediately
5. GitHub state casing — duplicate Kanban columns (
internal/tracker/github/normalize.go,client.go)extractLabelslowercases all GitHub label names (by design, for consistent matching). However,deriveStatewas returning the lowercasedlabelinstead of the configured state name, so issuescame back with e.g.
State: "in progress"while the config had"In Progress". The frontend'sSet<string>deduplication is case-sensitive, creating a separate column for each casing variant.Fixed in two places:
normalize.go:deriveStatenow returnsactive/terminal(configured casing) instead ofthe lowercased
label— affects all active and terminal state matchesclient.go:fetchPaginatedextraStates fallback now usesderived = extra(configuredcasing) instead of
derived = label— affects backlog/completion states not in active/terminalConfig Changes (
cmd/symphony/main.go)working_state: "In Progress"so it's active by defaultbacklog_statescommentRelease
All five fixes affect runtime behavior. A patch release is appropriate — no breaking API
changes, no new required config fields.
DiscardingIdentifiersis internal state that is notpersisted to disk in a way that would break existing snapshots.