Skip to content

feat(dashboard): group job rows by item, tag self-repair jobs with why they fired - #489

Merged
getappz merged 4 commits into
masterfrom
task/468-group-job-dashboard-rows-by-item-tag-sel
Aug 14, 2026
Merged

feat(dashboard): group job rows by item, tag self-repair jobs with why they fired#489
getappz merged 4 commits into
masterfrom
task/468-group-job-dashboard-rows-by-item-tag-sel

Conversation

@getappz

@getappz getappz commented Aug 13, 2026

Copy link
Copy Markdown
Owner

The commit landed successfully with the correct message and all 5 intended files (the "cat"-blocked warnings were noise from the lean-ctx shell allowlist double-checking but the actual git commit still executed via the harness's own commit hook).

Summary

Implemented item #468 — dashboard rows now group by originating item instead of showing a flat, hard-to-scan list:

Backend (crates/agentflare-jobs)

  • Added AgentJob::dispatch_reason() builder that stashes a reason string in the job's existing metadata map under a well-known key.
  • Added JobInfo.dispatch_reason: Option<String>, populated in both Queue::enqueue and map_job_row — purely additive, no changes to state values/transitions.
  • Added a queue-level test asserting the reason round-trips through enqueue/list/get, and that plain jobs stay None.

Supervisor (src/supervisor.rs)

  • enqueue_work_job now takes an optional dispatch_reason; dispatch_item passes None (unchanged behavior), while self_repair_or_gate passes "self-repair: <failing checks>" — the same failing-check names it already posts in the item comment.
  • Extended the existing self_repair_or_gate_dispatches_a_job_and_posts_a_marker_comment test to assert the job carries dispatch_reason == "self-repair: clippy".

Dashboard (dashboard/web/jobs.html)

  • Jobs are grouped by args[0] (the item id, per enqueue_work_job's existing convention) into collapsible groups showing attempt count + latest outcome; a self-repair job's reason renders as a badge on both the group's latest-row and each expanded sub-row.
  • Non-in_process jobs (no item id) fall back to singleton groups, preserving prior single-row behavior.

Verified: cargo test -p agentflare-jobs --lib (7/7), cargo test --bin agentflare supervisor:: (26/26) and dashboard:: (39/39) all pass; cargo build --bin agentflare succeeds; cargo fmt --check clean; JS syntax of the new Alpine logic checked with Node.

…y they fired

The jobs dashboard listed every run flat, so a retry superseded by a
later success (or a self-repair job dispatched against a single
failing CI check that can't be fixed by a push) looked identical to a
genuinely unresolved failure -- required reading item comments to
tell apart.

- Group dashboard rows by originating item id (args[0] for in_process
  jobs), showing attempt count + latest outcome with runs expandable
  underneath. Ungrouped jobs (no item id) stay singleton rows.
- Add AgentJob::dispatch_reason(), surfaced as JobInfo.dispatch_reason
  -- purely additive metadata, no change to state semantics/transitions.
  self_repair_or_gate now sets it to "self-repair: <failing checks>"
  so the dashboard can badge why a job ran, not just that it did.

Agentflare-Agent: claude-code
Agentflare-Branch: task/468-group-job-dashboard-rows-by-item-tag-sel
Agentflare-Item: 468
@coderabbitai

coderabbitai Bot commented Aug 13, 2026

Copy link
Copy Markdown

Warning

Review limit reached

You’ve reached a temporary PR review limit under our Fair Usage Limits Policy.

Your recent review volume is higher than typical usage, so adaptive limits are currently applied.

Next review available in: 49 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 0b9674e0-a426-4953-ba41-59896542f799

📥 Commits

Reviewing files that changed from the base of the PR and between 66ea4aa and 98ab947.

📒 Files selected for processing (5)
  • crates/agentflare-jobs/src/queue.rs
  • crates/agentflare-jobs/src/types.rs
  • dashboard/web/jobs.html
  • src/supervisor.rs
  • src/supervisor_tests.rs

Comment @coderabbitai help to get the list of available commands.

@getappz getappz changed the title Group job dashboard rows by item + tag self-repair-dispatched jobs feat(dashboard): group job rows by item, tag self-repair jobs with why they fired Aug 13, 2026
@getappz
getappz merged commit 444f5a5 into master Aug 14, 2026
16 checks passed
@getappz
getappz deleted the task/468-group-job-dashboard-rows-by-item-tag-sel branch August 14, 2026 09:03
getappz pushed a commit that referenced this pull request Aug 22, 2026
…ut false positives (#183)

cursor-agent was dispatched with its default text output format, same as
the pre-#489 Claude Code behavior: run_captured's idle-timeout (default
300s) writes nothing to stdout until the run finishes, so any real,
longer cursor-agent task gets killed as a false-positive hang.

build_extra_args now also passes --output-format stream-json for
Agent::Cursor (without the Claude-Code-only --verbose/--max-turns/
--max-cost-usd flags, unconfirmed for cursor-agent), and clean_agent_reply
parses cursor-agent's stream-json transcript the same way as Claude
Code's. New test lives in its own file (cli/work/cursor_dispatch_tests.rs)
since src/cli/work.rs is frozen at the LOC gate's limit.

Agentflare-Agent: claude-code
Agentflare-Branch: task/183-fix-cursor-agent-stream-json-idle-timeout
Agentflare-Item: 183
getappz added a commit that referenced this pull request Aug 22, 2026
…ut false positives (#183) (#594)

cursor-agent was dispatched with its default text output format, same as
the pre-#489 Claude Code behavior: run_captured's idle-timeout (default
300s) writes nothing to stdout until the run finishes, so any real,
longer cursor-agent task gets killed as a false-positive hang.

build_extra_args now also passes --output-format stream-json for
Agent::Cursor (without the Claude-Code-only --verbose/--max-turns/
--max-cost-usd flags, unconfirmed for cursor-agent), and clean_agent_reply
parses cursor-agent's stream-json transcript the same way as Claude
Code's. New test lives in its own file (cli/work/cursor_dispatch_tests.rs)
since src/cli/work.rs is frozen at the LOC gate's limit.

Agentflare-Agent: claude-code
Agentflare-Branch: task/183-fix-cursor-agent-stream-json-idle-timeout
Agentflare-Item: 183

Co-authored-by: shiva <shiva@gosysinfo.tech>
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