Skip to content

Business Hub: pipeline next-action + executive rollup on Command Center, Decision Log, context-pressure/goal-loop attention#218

Merged
richard-devbot merged 6 commits into
mainfrom
feat/ui-command-94-156
Jul 6, 2026
Merged

Business Hub: pipeline next-action + executive rollup on Command Center, Decision Log, context-pressure/goal-loop attention#218
richard-devbot merged 6 commits into
mainfrom
feat/ui-command-94-156

Conversation

@richard-devbot

Copy link
Copy Markdown
Owner

Summary

Command-pages slice of the 2026-07-06 UI wave (after the #216 page-module split).

State layer (state/index.js, append-only [wave:command] block)

  • Every run in the snapshot now carries run.pipelineRollup — a compact summary of its pipeline-state.json: schema_version, pipeline status, retries, context_pressure, checkpoints, goal_loop (BLE-4 recommendation used as the last verdict), and a classified next_action whose sentence comes from recommendPipelineAction — the same brain as the pipeline status CLI, never re-implemented client-side.
  • Read path only: persisted pipeline-state.json preferred; fully-parsed runs summarize in memory; index-served lite runs without a persisted rollup stay null (honest empty state, no guess). Any per-run failure yields null, never a broken snapshot.
  • Lite runs get their manifest schema_version restored with one tiny read (the rollup index drops it; P0: schema_version on run manifests + corruption surfacing in Diagnostics #82 stamps it, this PR renders it).

Command Center (pages/command-center.js)

Decisions page (pages/decisions.js)

  • Decision Log (UI: Executive rollup on Command Center + Decision Log page #94): chronological record of resolved/waived decisions — who decided, when, the recorded resolution (or an honest "waived without a recorded resolution"), impact, gated stage, and a run link into the drawer. Pending queue unchanged above it.

Tests

tests/dashboard-command-pages.test.js (7 tests): next-action text byte-identical to recommendPipelineAction; approval blockers outrank everything; July signals rolled up; lite runs keep persisted rollup + manifest schema_version; corrupt persisted state never breaks the snapshot; page modules carry panels/chips/empty states; bundle still compiles and stays inline-script safe.

Verification

  • npm test 662 pass · npm run lint · npm run validate (196 agents) · node scripts/security-audit.mjs · git diff --check — all green.
  • Live hub against the local fixture run (goal loop iteration 1 RETRY, context_pressure_warning, BLOCKED 005-testing with guardrail_triggered, schema_version 2 manifest): next-action card shows the CLI's retry sentence for stage 08-testing with task 005-testing; exec strip shows $4.87 / 1.7M tokens / 100% pass rate / 1 open decision; schema badge reads rollup v1 · manifest v2 when the run is scoped; Needs Attention lists the context-pressure and goal-loop rows; Decision Log renders DEC-001 resolved / DEC-002 waived newest-first; chip navigation verified; zero console errors.

Closes #94
Part of #156 (Command Center next-action + schema-version visibility; the retry-trace/feed remainder ships separately)
Part of #215 (context-pressure + goal-loop Needs-Attention slice)

🤖 Generated with Claude Code

richardsongunde and others added 4 commits July 6, 2026 20:26
run.pipelineRollup carries schema_version, pipeline status, retries,
context_pressure, checkpoints, goal_loop (with the BLE-4 recommendation as
the last verdict) and a classified next_action whose sentence comes from
recommendPipelineAction — the same brain as the pipeline status CLI, never
a client-side re-implementation. Persisted pipeline-state.json preferred;
fully-parsed runs summarize in memory (read-only); index-served lite runs
without a persisted rollup stay null. Lite runs also get their manifest
schema_version restored (#82 stamps it, #156 renders it).

Part of #156, #215; supports #94.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…p and July attention signals

- Pipeline Next Action card (#156): the deterministic recommendation from
  the run's pipeline-state rollup — the exact sentence the pipeline status
  CLI prints — for the scoped run, with a chip that jumps to the tab holding
  the action (Approvals for approvals, Alerts & Guardrails for blocked or
  retrying stages). Honest empty states when no runs or no rollup exist.
- Executive rollup strip (#94): runs by status, spend so far, tokens, task
  pass-rate, open decisions — computed from the scoped snapshot — plus the
  schema-version badge (rollup + manifest) when a single run is selected (#156).
- Needs Attention (#215 slice): context-pressure warning count with the
  long-loop quality-risk wording, and active goal loops with iteration,
  last verdict and criteria progress.

The page module injects its own panels (the shared skeleton in
ui/pages/index.js stays untouched for the parallel page wave).

Part of #156, #215; part of #94.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Chronological record of resolved and waived decisions across the runs in
scope (#94): who decided, when, the recorded resolution (or an honest
'waived without a recorded resolution'), impact, the stage the decision
gated, and a keyboard-reachable run link into the run drawer. Newest first;
the pending queue stays as-is above it.

Closes the Decision Log half of #94.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Fixture-shaped run (goal loop iteration 1 with a RETRY recommendation, one
context_pressure_warning, a BLOCKED testing task with guardrail_triggered,
checkpoints, schema_version 2 manifest) drives the state assertions:
- next-action text is byte-identical to recommendPipelineAction (no second brain)
- approval blockers outrank everything in the classification
- July signals (context pressure, goal loop verdict) roll up per run
- index-served lite runs keep the persisted rollup + manifest schema_version
- corrupt persisted state never breaks the snapshot or fabricates data
- both page modules carry their injected panels, chip routing, empty states
- the assembled bundle still compiles and stays inline-script safe

Covers #94, #156 (command slice), #215 (context-pressure/goal-loop slice).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@qodo-code-review

Copy link
Copy Markdown

Qodo reviews are paused for this user.

Troubleshooting steps vary by plan Learn more →

On a Teams plan?
Reviews resume once this user has a paid seat and their Git account is linked in Qodo.
Link Git account →

Using GitHub Enterprise Server, GitLab Self-Managed, or Bitbucket Data Center?
These require an Enterprise plan - Contact us
Contact us →

@coderabbitai

coderabbitai Bot commented Jul 6, 2026

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

@richard-devbot, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 45 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: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 5e15d911-481c-466a-8699-8c73614e586b

📥 Commits

Reviewing files that changed from the base of the PR and between 1fc07b8 and 5cb9923.

📒 Files selected for processing (5)
  • src/observability/dashboard/state/index.js
  • src/observability/dashboard/ui/pages/command-center.js
  • src/observability/dashboard/ui/pages/decisions.js
  • src/observability/dashboard/ui/styles.js
  • tests/dashboard-command-pages.test.js
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/ui-command-94-156

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

richardsongunde and others added 2 commits July 6, 2026 21:34
…stale-as-live (#218 review)

The Command Center hero rendered recommendPipelineAction(state) from the
persisted pipeline-state.json and always captioned it "Same recommendation the
CLI computes." On an active run whose pipeline-state.json lags the live event
stream, that pinned a stale recommendation while the page chrome read "live" —
the exact "never let stale data look live" failure.

- compactPipelineRollup: compare state.generated_at to the newest event ts
  (data already in the snapshot — no extra read) and expose
  { generated_at, stale, events_behind }. A freshly built rollup stamps
  generated_at = now, so it is never falsely stale.
- Command Center: the hero's source line now reflects ITS OWN freshness —
  fresh keeps the CLI-parity line; stale shows an honest "N newer events since;
  run pipeline status --regenerate" hint with an amber marker.
- Deferred to #221: persist the compact rollup in the run index so
  completed/index-served runs cost zero file reads per poll (the proper fix
  touches rollup-index.js), plus reading the real goal_evaluated fields.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
# Conflicts:
#	src/observability/dashboard/ui/styles.js
@richard-devbot richard-devbot merged commit dc45b1a into main Jul 6, 2026
1 check 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.

UI: Executive rollup on Command Center + Decision Log page

2 participants