Repository navigation
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ck; a framed dashboard leaves notifications to the hub The dashboard page sent no frame-ancestors, so any site could frame the owner's dashboard and steer a click onto an owner action. It now allows only itself and the machine's hub. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…box notification for all Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…boxed frames; duplicate roots; a bad hash From the PR review: - A review page's frame-ancestors names the hub too: browsers check every ancestor, so inside a tab the review frame was refused. - The hub has one address, 127.0.0.1: localhost is redirected there, and dashboards let only that origin frame them (the hub never binds ::1, which something else could hold). - Frames are sandboxed (scripts, same-origin, forms, popups, downloads; never top navigation) and may write the clipboard for the copy buttons. - Two answers claiming one root: the tab keeps the port it shows (or the lowest); its tooltip names the port. A bad #hash no longer stops selection. One sort order; a tab's frame title follows its name; an instance that appears with items already waiting notifies. - The dashboard checks the kit's version again when main moves and every 10 minutes, so a dashboard started before its adoption landed stops showing +local. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…kes its first count as the baseline Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… is never closed under it Node's 5s default keepAliveTimeout closed idle sockets that a client was about to reuse (Node 18's fetch keeps them about 4s), and that request failed with 'fetch failed'. That is the intermittent dashboard-test failure on macOS + Node 18, and browsers can hit the same race. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # test/kit.test.mjs
Member
Author
|
Review (upstream loop). A fresh reviewer agent reviewed it adversarially in two passes.
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Spec:
docs/superpowers/specs/2026-11-05-hub-tabs-design.md. Plan:docs/superpowers/plans/2026-11-05-hub-tabs.md.What
http://127.0.0.1:<port>/. A frame loads on first select and then stays loaded, so it keeps its scroll and notes. A tab follows its instance to a new port.#<name>, or#<name>-<hex6>for twins) keeps the selection. With none, the hub opens the first instance with something in its Inbox.frame-ancestors 'self' http://127.0.0.1:<hub> http://localhost:<hub>, and the hub page's CSP gainsframe-srclisting exactly the 25 instance ports.window.top !== window) shows no Notify control and sends no notifications. A cross-origin frame can't ask for permission, and the hub covers it.Why
The owner wants one page to switch between every devteam project and see which ones are waiting on them.
Authority
connect-src 'self', its own Host, and frames limited to the instance block.frame-ancestors.Checked
Headless Chrome, two fixture instances on test ports:
/#alphaselects alpha.Migration
None. Restart the dashboard after the sync. The tabs appear once the dashboard holding 4320 runs this version.
🤖 Generated with Claude Code