fix(dashboard): preserve issue row urls#96
Conversation
Summary: - Normalize orchestrator issue entry fields for running, retry, blocked, and snapshot payloads. - Add regression coverage for presenter issue URLs and dashboard URL controls across running, retry, and recent rows. Rationale: - The dashboard controls depend on a stable issue URL field, but that shape was rebuilt in several places and could silently drift. Tests: - mix test test/symphony_elixir/orchestrator_status_test.exs test/symphony_elixir_web/dashboard_live_test.exs - mix test test/symphony_elixir/extensions_test.exs - make all Co-authored-by: Codex <codex@openai.com>
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f398a3621a
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| running_entry | ||
| |> Map.merge(issue_entry_fields(issue)) | ||
| |> Map.put(:issue, issue) |
There was a problem hiding this comment.
Avoid clearing cached issue fields on running refresh
refresh_running_issue_state/2 now does Map.merge(issue_entry_fields(issue)), which overwrites previously cached :url, :title, and :description with nil when a refreshed %Issue{} is partial. In that case the dashboard loses issue URL controls for still-running rows (and the same pattern is used for blocked rows), whereas the previous behavior preserved the cached top-level fields as a fallback. This shows up when a tracker intermittently omits those fields during poll refreshes.
Useful? React with 👍 / 👎.
ReworkP2 from Codex on
This means the icons LOSE their URL on every refresh cycle — exactly the bug this PR is supposed to lock down. The icons will disappear again after the next state refresh. Fix: Don't defp merge_keeping_non_nil(existing, new) do
Enum.reduce(new, existing, fn
{_k, nil}, acc -> acc
{k, v}, acc -> Map.put(acc, k, v)
end)
endCritical for the regression test: add a test asserting that after a refresh cycle where the fetch returns nil for |
Context
Fixes #93. Dashboard issue URL controls need stable row URLs after recent entry-shape changes.
TL;DR
Keep dashboard issue URL buttons wired across running, retry, and recent rows.
Summary
Alternatives
Test Plan
make -C elixir allmix test test/symphony_elixir/orchestrator_status_test.exs test/symphony_elixir_web/dashboard_live_test.exsmix test test/symphony_elixir/extensions_test.exs