Conversation
…n slots.ts (NousResearch#76381) KNOWN_SLOT_NAMES declares and extending-the-dashboard.md documents ten shell slots, but App.tsx rendered only seven — plugins targeting sidebar, footer-left, or footer-right mounted into nothing (silent no-op), including Nous's own strike-freedom-cockpit example. Render footer-left/footer-right in SidebarFooter with the default cells (version, org link) as PluginSlot fallbacks so plugin content replaces them exactly as documented, and render the sidebar slot in the shell rail only when layoutVariant === 'cockpit' (extracted as CockpitSidebarSlot so the rule is testable). Tests (web/src/plugins/shell-slots.test.tsx, vitest + renderToStaticMarkup, no jsdom): default cells render as fallback, plugin content replaces each footer cell, sidebar slot renders plugin content only in the cockpit variant, nothing when unclaimed. Verified both directions on the real tree: the file fails on pre-fix main (missing component + footer assertions), 6/6 pass with the fix.
|
Thanks for the focused dashboard-plugin fix. Verified against current main ( The PR's Automated hermes-sweeper review. |
SummaryOne PR addresses issue #76381. #76488 adds all three missing shell render points: footer slots wrap the existing cells as fallbacks, while the sidebar slot is mounted only for the documented cockpit layout. Related pull requests
Suggested consolidationKeep #76488 open with the complete three-slot implementation and focused regression suite as the salvage path. It is the only PR in this complex, directly addresses every missing render point reported by #76381, and has no competing or duplicate PRs to close. Complex graphflowchart LR
classDef open fill:#dbeafe,stroke:#1d4ed8,color:#1e3a8a
classDef merged fill:#dcfce7,stroke:#15803d,color:#14532d
classDef closed fill:#e5e7eb,stroke:#6b7280,color:#1f2937
classDef unverified fill:#f3f4f6,stroke:#9ca3af,color:#374151
classDef best stroke-width:3px,stroke:#b45309
classDef target stroke-width:3px,stroke:#4338ca
I76381(["issue #76381 (open)"])
P76488["PR #76488 (open)"]
P76488 -->|best fix| I76381
class I76381 open
class P76488 open
class P76488 best
class P76488 target
click I76381 "https://github.com/NousResearch/hermes-agent/issues/76381"
click P76488 "https://github.com/NousResearch/hermes-agent/pull/76488"
Graph: solid arrow = fixes / best fix, dashed arrow = partial or unverified (see edge label); boxed group = PRs duplicating each other; amber border = best fix; indigo border = target; gray node = closed (state tag in the node label). Cross-PR triage: Reviewed 1 pull request and 1 issue in this complex. Each diff was read against this issue; Assessment working set: 8 kB of PR diffs, 4 kB of issue/PR text, <1 kB of discussion (2 comments), 2 verify verdicts. verdicts reflect diff content, not PR titles. Part of an automated triage batch. |
What does this PR do?
KNOWN_SLOT_NAMES declares and extending-the-dashboard.md documents ten shell slots, but App.tsx rendered only seven — plugins targeting sidebar, footer-left, or footer-right mounted into nothing (silent no-op), including Nous's own strike-freedom-cockpit example. Render footer-left/footer-right in SidebarFooter with the default cells (version, org link) as PluginSlot fallbacks so plugin content replaces them exactly as documented, and render the sidebar slot in the shell rail only when layoutVariant === 'cockpit'. Fixes #76381.
Related Issue
#76381
Changes Made
fix/pluginslot-shell-renders— 4 file(s) changed vs base:web/src/App.tsxweb/src/components/CockpitSidebarSlot.tsxweb/src/components/SidebarFooter.tsxweb/src/plugins/shell-slots.test.tsxweb/src/components/SidebarFooter.tsx: both cells wrapped in PluginSlot with the original content as fallback (replaces-default semantics per the docs). web/src/components/CockpitSidebarSlot.tsx (new): the cockpit-only rule extracted so it is testable without mounting the full App shell. web/src/App.tsx: rail renders CockpitSidebarSlot after the nav. web/src/plugins/shell-slots.test.tsx (new): 6 vitest tests via renderToStaticMarkup (node env, no jsdom) — fallback cells render, plugin content replaces each footer cell, sidebar renders only in cockpit, nothing when unclaimed.
How to Test
Validation completed (recorded by prp):
Logs
Sabotage verification: