mirror of
https://github.com/mvschwarz/openrig.git
synced 2026-11-08 17:31:56 -10:00
shell-redesign V1 attempt-3 Phase 3 BOUNCE-FIX process-gap fix: ritual #8 regression test + walk-packet seat-fix record
guard-3 PROCESS-BLOCKER on Phase 3 bounce-fix at400477b. Two surgical adds satisfy the gate: ISSUE 1 — Negative-assertion regression test wasn't committed. ACK §4 said the non-topology overlay-leak negative assertion (ritual #8) would land in topology-view-mode.test.tsx; the agent-browser walk proof was evidence-of-the-moment but not a CI-runnable test. guard-3 needs the test in CI to consider ritual #8 satisfied. Fix: new describe block in test/topology-view-mode.test.tsx — "Class B negative assertion: non-topology routes never get vellum overlay (ritual #8)": - 5 routes via it.each (`/`, `/project`, `/specs`, `/for-you`, `/settings`) assert container.querySelectorAll( '[data-explorer-mode="overlay"]').length === 0. - 1 positive companion: `/topology` graph mode DOES carry data-explorer-mode='overlay' on the Explorer aside. All 6 tests pass in vitest. topology-view-mode.test.tsx: 18/19 PASS (1 skipped seat-scope brittle from Phase 3, unrelated). Full suite: 640/642 PASS (added 6 tests; pre-existing library-review failure preserved). ISSUE 2 — Durable founder-walk record missing for400477bseat-fix. The phase-3-bounce-walk.md packet still pinned 7aa1aac; the seat-fix verification only lived in /tmp transient handoff. Need a permanent record co-located with the rest of the walk doctrine. Fix: appended "FOLLOW-ON COMMITS" section to founder-walks/phase-3-bounce-walk.md with: -400477b— seat-detail double-padding fix: full root cause (CSS-var inheritance through legacy WorkspacePage), fix description, founder verification at /topology/seat/$rigId/discovery.intake-router 1440x900, classification of inner-panel HTTP 404 as data-availability not layout. - Briefer one-paragraph entries for the other follow-ons that landed during the same walk session:6f86a5c(tabs-only shell),84557e5(tab breathing),210c322(rig graph zero-height),ed08ff2(lighter vellum + collapsed toggle),bbe6250(floating toggle + vellum rail + lighter icons), and this process-gap fix itself. Walk packet now reflects the actual branch tip composition; future readers can trace each refinement back to its commit. Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
This commit is contained in:
1 parent
bbe6250b97
commit
b549426d73
1 file changed
+47
@@ -100,6 +100,53 @@ describe("Seat scope tabs (direct render — bypasses route fetching)", () => {
|
||||
});
|
||||
});
|
||||
|
||||
// V1 attempt-3 Phase 3 bounce-fix Class B — selective vellum overlay
|
||||
// negative assertion (ritual #8): non-topology destinations MUST NEVER
|
||||
// receive the vellum-translucent overlay treatment. Only the topology
|
||||
// destination (and only its graph view-mode) gets data-explorer-mode='overlay';
|
||||
// all other routes — including /, /project, /specs, /for-you, /settings —
|
||||
// must show data-explorer-mode='opaque' (or no Explorer at all for
|
||||
// destinations with surface='none').
|
||||
//
|
||||
// Codifies the runtime assertion that previously only ran in agent-browser
|
||||
// during driver self-walk. guard-3 process gate: this test must be in CI.
|
||||
describe("Class B negative assertion: non-topology routes never get vellum overlay (ritual #8)", () => {
|
||||
async function renderAndWait(initialPath: string) {
|
||||
Object.defineProperty(window, "innerWidth", { configurable: true, value: 1440, writable: true });
|
||||
const { router } = await import("../src/routes.js");
|
||||
const history = createMemoryHistory({ initialEntries: [initialPath] });
|
||||
const r = createRouter({ routeTree: router.routeTree, history });
|
||||
const result = render(<RouterProvider router={r} />);
|
||||
await waitFor(() => {
|
||||
expect(result.container.querySelector("[data-testid='app-rail']")).toBeTruthy();
|
||||
}, { timeout: 5000 });
|
||||
return result;
|
||||
}
|
||||
|
||||
it.each([
|
||||
["/", "Dashboard"],
|
||||
["/project", "Project workspace"],
|
||||
["/specs", "Specs library"],
|
||||
["/for-you", "For You feed"],
|
||||
["/settings", "Settings"],
|
||||
])("route %s (%s) does NOT carry data-explorer-mode='overlay' anywhere in DOM", async (route) => {
|
||||
const { container } = await renderAndWait(route);
|
||||
const overlayElements = container.querySelectorAll("[data-explorer-mode='overlay']");
|
||||
expect(overlayElements.length).toBe(0);
|
||||
});
|
||||
|
||||
it("topology graph (/topology) DOES carry data-explorer-mode='overlay' (positive companion)", async () => {
|
||||
const { container } = await renderAndWait("/topology");
|
||||
// The active tab defaults to 'graph' on first mount per HostScopePage;
|
||||
// useOverlayForActiveTab effect sets the topology overlay context to
|
||||
// 'overlay'. AppShell propagates that to the Explorer's overlayMode prop.
|
||||
await waitFor(() => {
|
||||
const explorer = container.querySelector("[data-testid='explorer']");
|
||||
expect(explorer?.getAttribute("data-explorer-mode")).toBe("overlay");
|
||||
}, { timeout: 5000 });
|
||||
});
|
||||
});
|
||||
|
||||
// CSS-source-assertion regression test (per pseudo-element-paint contract):
|
||||
// guard that routes.tsx never grows view-mode-as-URL paths
|
||||
// (e.g., `/topology/host/table`, `/topology/rig/$rigId/graph`).
|
||||
|
||||
Reference in new issue
Block a user