diff --git a/src/adapters/codex.mjs b/src/adapters/codex.mjs index c5ea629..16b0f08 100644 --- a/src/adapters/codex.mjs +++ b/src/adapters/codex.mjs @@ -7,6 +7,7 @@ const codex = { defaultPort: 9335, lastVerified: { darwin: { appVersion: "26.707.72221", build: "5307", verifiedAt: "2026-07-16" }, + win32: { appVersion: "26.727.6591", build: "535", verifiedAt: "2026-08-01" }, }, rendererProfiles: { [codexThemeV1Profile.id]: codexThemeV1Profile, @@ -39,7 +40,9 @@ const codex = { // The root landmark is the only blocking check: it doubles as the // "app finished booting" signal and the minimal app fingerprint. Everything // else warns — the sidebar collapses, and CSS is inert on absent nodes. - rootAny: ["main.main-surface"], + // Keep fallbacks anchored to #root: bare main/[role="main"] selectors also + // match route content and auxiliary surfaces, so they are not app landmarks. + rootAny: ["main.main-surface", "#root main"], recommended: [ { name: "sidebar", any: ["aside.app-shell-left-panel"] }, { name: "composer", any: [".composer-surface-chrome"] }, diff --git a/tests/adapters.test.mjs b/tests/adapters.test.mjs index 1017c12..add1f2c 100644 --- a/tests/adapters.test.mjs +++ b/tests/adapters.test.mjs @@ -30,7 +30,14 @@ test("Codex verification keeps only current cross-route landmarks", () => { build: "5307", verifiedAt: "2026-07-16", }); - assert.deepEqual(adapter.verification.rootAny, ["main.main-surface"]); + assert.deepEqual(adapter.lastVerified.win32, { + appVersion: "26.727.6591", + build: "535", + verifiedAt: "2026-08-01", + }); + assert.deepEqual(adapter.verification.rootAny, ["main.main-surface", "#root main"]); + assert.ok(!adapter.verification.rootAny.includes("main")); + assert.ok(!adapter.verification.rootAny.some((selector) => selector.includes('[role="main"]'))); // Only the root landmark blocks: the sidebar collapses and other panels are // route-dependent, so every other landmark is warning-level. assert.equal(adapter.verification.required, undefined);