Skip to content

[RELEASE] Fix Guard panel rendering on top of every tab, stuck on Loading (0.12.806 regression) - #5476

Merged
vivekchand merged 2 commits into
mainfrom
fix/guard-page-wrapper
Sep 3, 2026
Merged

vivekchand merged 2 commits into
mainfrom
fix/guard-page-wrapper

Conversation

@vivekchand

@vivekchand vivekchand commented Sep 3, 2026

Copy link
Copy Markdown
Owner

What broke

0.12.806 (#5470) shipped guard.html wrapped in <div id="guard" class="tab-content">. The dashboard hides panels through .page / #page-<tab> and has no rule for tab-content, so the Guard cards rendered on top of Home, Agents, Activity, Sessions, Cost and every other tab, frozen on "Loading..." because the loader keyed on a #page-guard element that did not exist. Selecting any runtime also hid the Guard nav item: guard was in the per-runtime tab list but in no capability map and not marked node-wide.

Fix

  1. guard.html is a normal .page panel with id page-guard.
  2. The 38 Guard stylesheet rules are scoped to #page-guard instead of the old id, so buttons, pills and tables style again.
  3. guard joins _CM_NODE_TABS, next to Approvals and Alerts, so the nav item survives the runtime switcher.

Verification

  • tests/test_tab_template_page_wrapper.py (added to the CI file list): fails on the shipped template and on an orphaned CSS scope, passes on the fix.
  • Source boot on port 8901, checked in Chrome: Home and Cost render without the Guard overlay; Guard loads its three cards, styled; nav item present with Claude Code selected.
  • ruff count on dashboard.py clawmetry/ unchanged from origin/main; node --check passes on app.js.

Not in this PR

Every store read on this machine currently takes about 27 s (the daemon query server is serialising a stream of query_aggregates calls from three dashboards against a 1.6 GB store). That is why the Home tab showed "Load failed, retrying" and why Guard took a minute to fill. It is unrelated to the template bug and is noted separately.

Product record

🤖 Generated with Claude Code

https://claude.ai/code/session_01JqeUMB1GPqXU3AJgDmg3mW

@8090-software-factory

Copy link
Copy Markdown

⚠️ Drift Bot (ClawMetry): 1 potential drift finding(s)

1. Blueprint: Local Agent Observability

File: tests/test_tab_template_page_wrapper.py

The test codifies that all dashboard tab templates must use .page class with id="page-<tab>" structure and that CSS rules must be scoped to these IDs, but this architectural convention is not documented in the Local Agent Observability blueprint or any other blueprint.

@8090-software-factory

Copy link
Copy Markdown

✅ Drift Bot (ClawMetry): no drift detected

Drift Bot analyzed the changed files against this project's blueprints and requirements and found no drift.

@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Visual diff

Comparing 7e9a4a290e13 (head) against the PR base branch.

68 of 70 comparison(s) flagged (>1% pixel diff).

View Before After Diff
desktop overview ⚠️ before after diff · 100.00%
desktop flow ⚠️ before after diff · 100.00%
desktop brain ⚠️ before after diff · 100.00%
desktop usage ⚠️ before after diff · 100.00%
desktop crons ⚠️ before after diff · 100.00%
desktop memory ⚠️ before after diff · 100.00%
desktop security ⚠️ before after diff · 100.00%
desktop subagents ⚠️ before after diff · 100.00%
desktop transcripts ⚠️ before after diff · 100.00%
desktop logs ⚠️ before after diff · 100.00%
desktop skills ⚠️ before after diff · 100.00%
desktop models ⚠️ before after diff · 100.00%
desktop approvals ⚠️ before after diff · 100.00%
desktop alerts ⚠️ before after diff · 100.00%
desktop notifications ⚠️ before after diff · 100.00%
desktop limits before after diff · 0.89%
desktop clusters ⚠️ before after diff · 100.00%
desktop history ⚠️ before after diff · 100.00%
desktop channels before after diff · 0.26%
desktop dives ⚠️ before after diff · 100.00%
desktop harness ⚠️ before after diff · 100.00%
desktop inventory ⚠️ before after diff · 100.00%
desktop nemoclaw ⚠️ before after diff · 100.00%
desktop guard ⚠️ before after diff · 100.00%
desktop policy ⚠️ before after diff · 100.00%
desktop selfevolve ⚠️ before after diff · 100.00%
desktop swimlane ⚠️ before after diff · 100.00%
desktop tool-catalog ⚠️ before after diff · 100.00%
desktop tracing ⚠️ before after diff · 100.00%
desktop turn-anatomy ⚠️ before after diff · 100.00%
desktop version-impact ⚠️ before after diff · 100.00%
desktop context-economics ⚠️ before after diff · 100.00%
desktop agents ⚠️ before after diff · 100.00%
desktop evals ⚠️ before after diff · 100.00%
desktop bench ⚠️ before after diff · 100.00%
mobile overview ⚠️ before after diff · 100.00%
mobile flow ⚠️ before after diff · 100.00%
mobile brain ⚠️ before after diff · 100.00%
mobile usage ⚠️ before after diff · 100.00%
mobile crons ⚠️ before after diff · 100.00%
mobile memory ⚠️ before after diff · 100.00%
mobile security ⚠️ before after diff · 100.00%
mobile subagents ⚠️ before after diff · 100.00%
mobile transcripts ⚠️ before after diff · 100.00%
mobile logs ⚠️ before after diff · 100.00%
mobile skills ⚠️ before after diff · 100.00%
mobile models ⚠️ before after diff · 100.00%
mobile approvals ⚠️ before after diff · 100.00%
mobile alerts ⚠️ before after diff · 100.00%
mobile notifications ⚠️ before after diff · 100.00%
mobile limits ⚠️ before after diff · 100.00%
mobile clusters ⚠️ before after diff · 100.00%
mobile history ⚠️ before after diff · 100.00%
mobile channels ⚠️ before after diff · 100.00%
mobile dives ⚠️ before after diff · 100.00%
mobile harness ⚠️ before after diff · 100.00%
mobile inventory ⚠️ before after diff · 100.00%
mobile nemoclaw ⚠️ before after diff · 100.00%
mobile guard ⚠️ before after diff · 100.00%
mobile policy ⚠️ before after diff · 100.00%
mobile selfevolve ⚠️ before after diff · 100.00%
mobile swimlane ⚠️ before after diff · 100.00%
mobile tool-catalog ⚠️ before after diff · 100.00%
mobile tracing ⚠️ before after diff · 100.00%
mobile turn-anatomy ⚠️ before after diff · 100.00%
mobile version-impact ⚠️ before after diff · 100.00%
mobile context-economics ⚠️ before after diff · 100.00%
mobile agents ⚠️ before after diff · 100.00%
mobile evals ⚠️ before after diff · 100.00%
mobile bench ⚠️ before after diff · 100.00%

Folder: 7e9a4a290e13. Full PNGs also attached as a workflow artefact.

Generated by visual-diff bot. Pixel diffs >1% flagged; eyeball the table before merging. This check is non-blocking — fail = bot bug, not a code problem.

vivekchand and others added 2 commits September 3, 2026 23:57
guard.html shipped in #5470 wrapped in <div id="guard" class="tab-content">.
The switcher hides panels via .page / #page-<tab>; nothing hides tab-content,
so the Guard cards drew above every tab, stuck on "Loading..." because
loadGuardTab keyed on a #page-guard that did not exist.

- guard.html is a normal .page panel with id page-guard
- the 38 #guard-scoped CSS rules move to #page-guard
- guard joins _CM_NODE_TABS so the nav item survives the runtime switcher
- tests/test_tab_template_page_wrapper.py guards all three (red on the
  shipped template and on an orphaned CSS scope); added to the CI file list

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JqeUMB1GPqXU3AJgDmg3mW
Local Agent Observability gained a "Dashboard tab panel contract" section
and the Guard Enforcement component block cites it for guard.html.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JqeUMB1GPqXU3AJgDmg3mW
@vivekchand
vivekchand force-pushed the fix/guard-page-wrapper branch from 8510cef to 7e9a4a2 Compare September 3, 2026 21:58
@8090-software-factory

Copy link
Copy Markdown

✅ Drift Bot (ClawMetry): no drift detected

Drift Bot analyzed the changed files against this project's blueprints and requirements and found no drift.

github-actions Bot pushed a commit that referenced this pull request Sep 3, 2026
@vivekchand
vivekchand merged commit f1115e8 into main Sep 3, 2026
40 of 41 checks 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.

1 participant