Skip to content

fix(desktop): signal liveness in the Agent Graph panel - #3931

Open
riba2534 wants to merge 1 commit into
apache:mainfrom
riba2534:cursor/agent-graph-liveness-heartbeat-2a6b
Open

fix(desktop): signal liveness in the Agent Graph panel#3931
riba2534 wants to merge 1 commit into
apache:mainfrom
riba2534:cursor/agent-graph-liveness-heartbeat-2a6b

Conversation

@riba2534

Copy link
Copy Markdown

Fixes #3878.

When an Agent Graph fans out, the desktop panel looks frozen: settled/total stays at 0/7, operator dots only change color, and the Spinner disappears once a snapshot exists. Users think Maka is idle and hit Stop graph.

This adds three liveness signals while the graph is unsettled:

  • running/runnable status dots pulse
  • header Spinner (heartbeat) for active/waiting/closing
  • elapsed clock next to the counter (panel observation time, not createdAt)

Per-operator live preview and header progress bar are out of scope.

AI use: generative tooling made a substantive contribution.

A homogeneous fan-out moves nothing on screen until the whole batch
settles: `settled/total` holds at `0/7`, every operator row keeps a
static dot, and the panel's only Spinner is gone the moment a snapshot
arrives. Users read that as a stalled graph and reach for Stop graph.

Carry three signals that keep moving while the graph is unsettled. The
running and runnable dots pulse, so a row says "working" by motion and
not only by hue. The header keeps a heartbeat ring beside the status
text for as long as the status is active, waiting, or closing. The
counter gains a clock, which counts the panel's own observation of the
run rather than the epoch binding's `createdAt` — that field is 0 for
sessions no epoch store backs, and an elapsed derived from it would
read as decades.
@Astro-Han

Copy link
Copy Markdown
Contributor

I reviewed this PR at exact head c2f7c58a2bab4d7aeb94824c74671750448b9874 (base c1ad24ca, merge-base 235a12d7, 3 files +169−2, 1 commit).

Spec: PASS — no P0–P3 findings

  • Running/runnable dots correctly pulse, and the global prefers-reduced-motion cap is respected.
  • Active/waiting/closing states all show a decorative, aria-hidden heartbeat beside the status text plus an observation-age clock derived from Date.now() (no tick drift, not from epoch createdAt which is 0 for sessions without an epoch store).
  • graphId rollover remounts, terminal status tears down the interval, and the interval is cleaned up on unmount/hidden-tab; multiple panels keep independent timers.
  • The change stays within its declared scope — per-operator preview and header progress bar are out of scope and were not modified, as the PR body states.

Small testing gaps remain (no fake-timer tick/cleanup, active→waiting→closing transition, refresh-failure/stale-active, multi-panel isolation, or reduced-motion/ARIA direct assertions), but they are below P3 and do not affect correctness.

Standards: 6 hard P3s — needs fixes before merge

  1. agent-graph.css:157 uses a raw 1.5s ease-in-out instead of the token in maka-tokens.css:765-790. On-screen movement must use var(--ease-in-out-strong) with an explicit duration, or explain why this cadence/easing is required.
  2. agent-graph-panel.test.ts:705-733 locks CSS via readFileSync + regex. Per docs/frontend-css-governance.md:61-66, renderer CSS should be verified in Storybook/app/real-surface E2E, not repo-wide regex.
  3. PR body replaces the required template — missing Verification/checklist/behavior selection and local results/non-runs, violating CONTRIBUTING.md:81 and 66-75.
  4. No before/after screenshot or recording for the visible pulse/heartbeat/clock change, violating CONTRIBUTING.md:85.
  5. AI attribution incomplete — says “substantive generative tooling” without naming the tool, and the commit lacks a Generated-by: trailer, violating CONTRIBUTING.md:34.
  6. Branch name cursor/agent-graph-liveness-heartbeat-2a6b<type> is not a Conventional Commit type, violating CONTRIBUTING.md:83.

Other checks: git diff --check and Biome on the changed TS/TSX files pass. Style naming, architecture boundary, selectors, colors/spacing, and the reduced-motion cap are otherwise fine.

What I did not check: hosted CI for this exact head — run 32982674266 is action_required and the PR reports no checks yet; I did not run the full Desktop suite locally.

Gate: exact head has no P0–P2, but the six P3 standards findings and the missing required test check must be closed (provide token-compliant motion, Storybook/E2E coverage, complete PR template, UI evidence, proper AI disclosure + trailer, and a compliant branch name or squash, plus a green hosted test) before merge.


Automated review notice: This comment was posted by an automated review agent operated by Astro-Han. It is not an independent human review and does not replace one.

@github-actions github-actions Bot added the effort/M Under 500 readable lines label Aug 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

effort/M Under 500 readable lines

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix(desktop): agent graph appears frozen while 0/7 operators are running (no heartbeat)

2 participants