← back to Norma
Verify Norma browser journeys with settled cross-browser evidence
4d399e10c9003d9dd8d769903957f5b0e4e42639 · 2026-09-11 08:32:13 -0700 · Steve Abrams
Files touched
M cta/CTA-REPORT.mdM docs/sessions/learnings.mdM docs/sessions/sessions.mdM docs/sessions/tasks-completed.mdM docs/sessions/tasks-requested.mdA scripts/verify-browser-ux.mjsA verification/browser-ux-artifacts.jsonM verification/browser-ux-isolated.jsonA verification/dtd-TK-11315/claude.txtA verification/dtd-TK-11315/codex-debate.txtA verification/dtd-TK-11315/codex.txtA verification/dtd-TK-11315/grok.txtA verification/dtd-TK-11315/kimi.txtA verification/dtd-TK-11315/muse.txtA verification/dtd-TK-11315/question.txtA verification/dtd-TK-11315/qwen.txtM verification/e2e-proof.json
Diff
commit 4d399e10c9003d9dd8d769903957f5b0e4e42639
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Fri Sep 11 08:32:13 2026 -0700
Verify Norma browser journeys with settled cross-browser evidence
---
cta/CTA-REPORT.md | 63 +-
docs/sessions/learnings.md | 10 +
docs/sessions/sessions.md | 4 +
docs/sessions/tasks-completed.md | 7 +
docs/sessions/tasks-requested.md | 4 +
scripts/verify-browser-ux.mjs | 247 ++++++++
verification/browser-ux-artifacts.json | 602 ++++++++++++++++++
verification/browser-ux-isolated.json | 966 ++++++++++++++---------------
verification/dtd-TK-11315/claude.txt | 1 +
verification/dtd-TK-11315/codex-debate.txt | 9 +
verification/dtd-TK-11315/codex.txt | 3 +
verification/dtd-TK-11315/grok.txt | 1 +
verification/dtd-TK-11315/kimi.txt | 1 +
verification/dtd-TK-11315/muse.txt | 1 +
verification/dtd-TK-11315/question.txt | 1 +
verification/dtd-TK-11315/qwen.txt | 2 +
verification/e2e-proof.json | 210 ++++++-
17 files changed, 1579 insertions(+), 553 deletions(-)
diff --git a/cta/CTA-REPORT.md b/cta/CTA-REPORT.md
index b3a128c..102b5a8 100644
--- a/cta/CTA-REPORT.md
+++ b/cta/CTA-REPORT.md
@@ -1,46 +1,49 @@
-# Norma public Pulse CTA report
+# TK-11315 — Norma browser UX verification
-Target: http://127.0.0.1:7400
-Run: 2026-09-09, local PM2 service
+2026-09-11. **Scoped journeys PASS: 12/12 journeys, 54 step assertions.**
+This is a scoped browser test, not certification that every application control has been exercised. Staff journeys retain third-party Google favicon warnings.
-## Verdict
+| Journey | Chromium | WebKit | Boundary evidence |
+|---|---|---|---|
+| Public home/list/about, scratch and live | PASS | PASS | Session JSON, petition JSON, actual petition title, completed response bodies |
+| Theme persistence, search open/close/Escape, empty search and restoration, mobile menu | PASS | PASS | Before/after screenshots and full context video |
+| Admin login, reload, sandbox selection, Grants/Petitions/News/Pipeline, logout | PASS | PASS | Exact headings, real organization content, recommendation response schema, cookie removal |
+| Staff login, reload, denied admin API, logout | PASS, favicon warnings | PASS, favicon warnings | Correct identity, registry 403, cookie absent, unauthenticated session |
+| Pulse login, reload, denied admin API, logout | PASS | PASS | Pulse landing and identity, registry 403, cookie removal |
+| Invalid credentials | PASS | PASS | HTTP 401, visible Invalid credentials, remains on login |
-PARTIAL. The three public routes rendered with HTTP 200 in both Chromium and WebKit. Chromium had no captured console/page errors. WebKit rendered the routes but reported repeated localhost fetch/CORS/RSC fallback errors during client navigation. Browserbase was skipped because a cloud browser cannot reach loopback `127.0.0.1:7400`.
+## Historical WebKit blocker
-## Component × engine results
+The old `/tmp/norma-ux-webkit.mjs` navigated away immediately after DOMContentLoaded/title. Its companion CTA mini script navigated back after 200 ms and had an undefined result variable. Those artifacts did not establish a persistent CORS failure.
-| Surface | Chromium | WebKit/Safari | Evidence |
-|---|---|---|---|
-| `/pulse` page load | PASS, 200, title rendered | PASS, 200, title rendered; client fetch errors | `cta/shots/chrome/pulse-page.png`, `cta/shots/safari/pulse-page.png` |
-| `/pulse/petitions` page load | PASS, 200 | PASS, 200; RSC fallback errors during nav | route-check.json |
-| `/pulse/about` page load | PASS, 200 | PASS, 200; RSC fallback errors during nav | route-check.json |
-| Visible controls on `/pulse` | Safely clicked visible non-mutating controls; before/after shots captured | Safely clicked visible non-mutating controls; before/after shots captured | `cta/shots/{chrome,safari}/pulse-*before.png`, `pulse-*after.png` |
-| Full pass recording | Captured WebM | Captured WebM | `cta/rec/chrome/*.webm`, `cta/rec/safari/*.webm` |
+The new runner waits for completed API bodies and data-backed UI, then settled navigation. Current WebKit public and admin journeys produce no console or request errors before teardown on the relevant targets. The original error is no longer reproducible under these checks; premature navigation is the likely explanation, not a proven root cause for every historical event.
-## Errors
+Guest topics intentionally returns 307 because that endpoint is auth-gated; the app uses a manual redirect. The runner verifies that exact redirect and records Chromium cancellation. Cancelled speculative RSC prefetches are separately recognized by the actual prefetch request header; demanded navigation and data still require success. There is no broad network-error suppression.
-Chromium: 0 console/page errors in route-level check.
+## Warnings and limitations
-WebKit reported:
+- Staff recorded 2 Chromium and 7 WebKit events involving Google favicon service (404/cancellation). These remain in the JSON warnings and raw event stream. A zero-console-error CTA verdict is not claimed.
+- Admin module data is the existing Riverside Sandbox fixture, including empty states. This verifies navigation and loading, not production record completeness or CRUD.
+- Live authenticated coverage remains unclaimed: seeded credentials apply only to scratch sdcc_test.
+- Browserbase cannot reach loopback. No public tunnel, paid cloud session, live sends, OAuth, publishing, signing, destructive actions, or exhaustive nested dialogs were exercised.
+- No application code was changed or deployed. The two suggestion POST routes were inspected: SELECTs and local scoring, without external AI calls or data writes.
-- `Fetch API cannot load http: /127.0.0.1:7400/api/auth/session due to access control checks.`
-- Equivalent access-control failures for `/api/pulse/petitions` and `/api/petitions/topics`.
-- Next RSC payload failures for `/pulse/about`, `/pulse/petitions/create`, `/pulse`, and login, followed by browser-navigation fallback.
+## Evidence and reproduction
-These may be caused by the loopback target and WebKit origin handling in this test environment; they are still recorded as a Safari UX risk and require verification from a normal Safari window or a reachable HTTPS staging URL.
+- `scripts/verify-browser-ux.mjs`
+- `verification/browser-ux-isolated.json` and `verification/browser-ux-live-public.json`
+- `verification/browser-ux-artifacts.json`: SHA-256 and size for 120 screenshots/recordings
+- `verification/e2e-proof.json`
+- Screenshots/video: `test-results/TK-11315-isolated/` and `test-results/TK-11315-live-public/` (retained locally, ignored by Git)
-## Chrome-vs-Safari mismatches
+Run `bash scripts/test-instance.sh`, then `node scripts/verify-browser-ux.mjs`. Public pass: `NORMA_TEST_URL=http://127.0.0.1:7400 node scripts/verify-browser-ux.mjs --public-only`. Stop only the scratch instance you started afterward.
-Safari produced client-side fetch/RSC errors that Chromium did not. Both engines returned 200 for all three document navigations. No code was changed during this test.
+Owned :7411 instance stopped, all browser contexts closed, live :7400/login returned 200 after cleanup.
-## Browserbase
+## Acceptance review
-SKIP: Browserbase cloud cannot access the local loopback service. A reachable staging URL is required for the third engine.
+DTD chose scoped completion after all required journeys pass: **A, 2/2 valid votes** (Codex and Qwen; Claude disabled under zero-cost mode, Grok/Kimi/Muse unavailable). Mandatory Codex adversarial review: **KEEP**. Transcripts: `verification/dtd-TK-11315/`. Missing essential coverage would still block completion; exclusions are not substitutes for tests.
-## Artifacts
+Independent read-only reviewer accepted the final script and all 12 reports, checked screenshot existence, and visually inspected actual sandbox Pipeline content. Parent independently ran the tests and inspected the same functional boundary.
-- `cta/route-check.json`
-- `cta/shots/chrome/`
-- `cta/shots/safari/`
-- `cta/rec/chrome/`
-- `cta/rec/safari/`
+Five-lens evidence review: engineering requires completed responses and correct identity (met); design requires screenshot inspection (Pipeline inspected); user requires login/navigation/search/logout (met); skeptic rejects exhaustive or live-auth claims (explicitly excluded); strategy accepts completion of this testing ticket without authorizing deployment. The warnings limit the cleanliness claim, not the demonstrated scoped journeys.
diff --git a/docs/sessions/learnings.md b/docs/sessions/learnings.md
index dc2a8e3..f4ea275 100644
--- a/docs/sessions/learnings.md
+++ b/docs/sessions/learnings.md
@@ -203,3 +203,13 @@ Technical learnings, gotchas, and patterns discovered during development. Append
- Fix order: `ps aux | grep "[p]laywright install"` to confirm no LIVE install holds the lock → `rm -rf ~/Library/Caches/ms-playwright/__dirlock` → `npx playwright install chromium`. Only remove the lock after confirming nothing is actively installing (another agent session on this Mac can legitimately hold it).
- The 5 non-browser suites (api-smoke / security-regression / write-smoke / crud-lifecycle / authz-matrix) run first and independently, so a red e2e with green everything-else = environment, not app. Full green today: api 20, write 35, crud 35, authz 12, e2e 9.
- `npm run reload` = fast emergency recovery (build→restart→:7400 health-gate, no suite). `npm run deploy:local` = ship NEW code (build→`npm run gate` full battery→reload). Gate instance is isolated on :7414 / sdcc_test with sends sinked — safe to run anytime, never touches live :7400 or the sdcc DB.
+
+
+## 2026-09-11 — Browser evidence gotchas (TK-11315)
+- DOMContentLoaded plus title/body visibility is too early for API/RSC claims. Await completed response bodies, data-backed UI and settled navigation; classify teardown separately. Historical WebKit probe navigated prematurely.
+- Admin default welcome screen can remain nonempty while tabs change: select a real sandbox org before claiming module coverage and assert exact headings (News Feed, Petition Pipeline).
+- Wait for logout response/cookie removal before checking session; networkidle can still describe the previous page at click time.
+- Public topics intentionally uses redirect:manual against an auth-gated 307; Chromium routing can report cancellation on topics or the redirected login. Retain raw events and match only this exact known case.
+- Recommendation endpoints grants/suggest and petitions/suggest use POST but are SELECT-only local scoring. Review semantics, not just method names.
+- Google favicons can 404 or cancel: record third-party warnings explicitly; do not broadly suppress all network/resource errors.
+- Petition list link accessible name includes card metadata: assert its title heading rather than exact link name.
diff --git a/docs/sessions/sessions.md b/docs/sessions/sessions.md
index 9f88442..5a321f5 100644
--- a/docs/sessions/sessions.md
+++ b/docs/sessions/sessions.md
@@ -384,3 +384,7 @@ Resumed the stalled `dw-instagram` ticket TK-10573 (DOING 24h, ticketmaster-nudg
## 2026-08-16 → 08-17 — Resume: outage recovery, pm2 reconcile, TK-10293 gate verified green
Resumed after compaction. Recovered a second Norma :7400 outage (norma-email gone from pm2 after a reboot fractured the daemon into 4 Gods). Handed pm2 fleet reconciliation to vp-operations (TK-10606, now done: 1 God daemon, 126 apps, recurrence fixed, fracture-canary loaded+PASS) and the GA4 store grant to analytics-agent (TK-10200, blocked on Steve's browser action). Then verified the TK-10293 deliverable: full `npm run gate` battery green end-to-end (api 20 / security / write 35 / crud 35 / authz 12 / e2e 9). Along the way fixed a missing Playwright chromium binary + a stale ms-playwright `__dirlock` that was silently no-op'ing reinstalls. Everything in the Norma lane green; nothing pending on our end except Steve's GA4 grant.
+
+
+## 2026-09-11 — TK-11315 browser UX verification
+Resumed owned ticket, read inbox, checked sleep/screensaver/caffeinate, bound Red tab and ticket. Snapshotted pre-existing IG/CTA work as 592b0c5. Replaced premature-navigation evidence with a reproducible scoped runner. Chromium/WebKit: 10 isolated + 2 live-public journeys pass, 54 steps; 120 screenshot/video artifacts hashed. Staff has 9 Google favicon warning events. Historical WebKit error no longer reproduces with completed API bodies and settled navigation. Independent review accepted scope. Scratch :7411 stopped; live :7400/login 200. No app changes, deploy, live auth, external sends or remote push. Evidence: cta/CTA-REPORT.md and verification/e2e-proof.json.
diff --git a/docs/sessions/tasks-completed.md b/docs/sessions/tasks-completed.md
index cbc8ebe..99220b7 100644
--- a/docs/sessions/tasks-completed.md
+++ b/docs/sessions/tasks-completed.md
@@ -139,3 +139,10 @@ Tasks fully implemented and deployed.
- **TK-10606 pm2 fracture** — handed to vp-operations; reconciled to 1 canonical God daemon. Verified independently: 126 apps (125 online + `usre-broker-rotate` correctly stopped 4:15am cron one-shot), dump backed up, recurrence fixed (redundant `com.steve.pm2-resurrect.plist`→`.disabled-TK10606`), `com.steve.pm2-fracture-canary` loaded + PASS. Closed by claude-mail under Steve's "All Approved".
- **TK-10200 GA4 grant** — handed to analytics-agent; dashboard verified live (ETL 150/150 props 0 err), SA email confirmed (`analytics-agent@dw-ga4-attribution.iam.gserviceaccount.com`), copy-paste grant steps refreshed in pending-approval. Stays blocked on Steve's one browser action.
- **TK-10293 durable gate — VERIFIED GREEN** — ran full `npm run gate`: all 6 suites pass end-to-end. Fixed a missing Playwright chromium binary + a stale `__dirlock` (see learnings). Deliverable confirmed live-green.
+
+
+## 2026-09-11 — TK-11315 scoped browser test complete
+- Added scripts/verify-browser-ux.mjs: settled UI/API assertions, three-role identity persistence, organization-aware admin navigation, negative auth, cookie cleanup, mutation guard, screenshots/video and raw events.
+- 12/12 journeys, 54 assertions passed; public live and isolated auth coverage distinguished. 9 third-party favicon warning events retained.
+- Reports: cta/CTA-REPORT.md, verification/e2e-proof.json, browser-ux-{isolated,live-public,artifacts}.json, dtd-TK-11315 transcripts.
+- Checked all 120 referenced artifacts, reviewed sandbox Pipeline screenshot, accepted independent review. Owned test instance stopped and live service healthy. No production changes or remote push.
diff --git a/docs/sessions/tasks-requested.md b/docs/sessions/tasks-requested.md
index e2b4c51..03287df 100644
--- a/docs/sessions/tasks-requested.md
+++ b/docs/sessions/tasks-requested.md
@@ -96,3 +96,7 @@ Track every task the user has requested, regardless of completion status.
| 56 | Theme + age slider + impersonate dropdown all at the very top of the app | PARTIAL — theme + age are already at the top (`InboxThemeBanner` + `AgeThemeSlider` above the header). Impersonate dropdown TODO. |
| 57 | Reset admin password to something memorable | DONE — `admin / NormaAdmin2026!`. |
| 58 | Commit + "push" everything | DONE locally — 11 fresh commits today, prod files bit-for-bit match HEAD. No remote per `feedback_never_push_to_remotes.md`; confirmed with Steve to stay local-only. |
+
+
+## 2026-09-11 — TK-11315
+User requested inbox-first ownership and completion of TK-11315-test-norma-ux-with-browser-agents with every action logged and gated actions preserved. Completed scoped verification; see cta/CTA-REPORT.md.
diff --git a/scripts/verify-browser-ux.mjs b/scripts/verify-browser-ux.mjs
new file mode 100644
index 0000000..8e158c4
--- /dev/null
+++ b/scripts/verify-browser-ux.mjs
@@ -0,0 +1,247 @@
+/** TK-11315: settled browser journeys; no broad network-error suppression.
+ * Run: node scripts/verify-browser-ux.mjs [--public-only]
+ * Auth runs are restricted to the existing scratch instance on :7411.
+ * Screenshots/videos stay in test-results; the JSON report is durable evidence.
+ */
+import { chromium, webkit, expect } from '@playwright/test';
+import { mkdirSync, writeFileSync, readFileSync } from 'node:fs';
+import { execFileSync } from 'node:child_process';
+
+const publicOnly = process.argv.includes('--public-only');
+const base = process.env.NORMA_TEST_URL || 'http://127.0.0.1:7411';
+const origin = new URL(base);
+if (!['127.0.0.1', 'localhost'].includes(origin.hostname) || (!publicOnly && origin.port !== '7411')) {
+ throw new Error('Authenticated verification requires loopback :7411; public-only requires loopback.');
+}
+const tag = publicOnly ? 'live-public' : 'isolated';
+const artifacts = `test-results/TK-11315-${tag}`;
+mkdirSync(artifacts, { recursive: true });
+const report = {
+ ticket: 'TK-11315', timestamp: new Date().toISOString(), base, publicOnly,
+ sourceCommit: execFileSync('git', ['rev-parse', 'HEAD'], { encoding: 'utf8' }).trim(),
+ buildId: readFileSync('.next/BUILD_ID', 'utf8').trim(),
+ artifactDirectory: artifacts, results: [],
+ scope: 'Public home/list/about, theme/search/menu, seeded admin/staff/pulse login, session persistence, core admin tabs, logout and negative auth.',
+ exclusions: ['Browserbase: cloud cannot reach loopback; no tunnel or paid session created.', 'External links, OAuth, send, publish, petition signing/creation, destructive actions, and exhaustive nested admin dialogs are outside this non-mutating UX pass.'],
+};
+
+async function journey(engineName, browser, name, run) {
+ const ctx = await browser.newContext({ viewport: { width: 1440, height: 1000 }, recordVideo: { dir: `${artifacts}/${engineName}` } });
+ const page = await ctx.newPage();
+ page.setDefaultTimeout(15000);
+ let phase = 'entry';
+ const result = { engine: engineName, name, assertions: [], events: [], screenshots: [], verdict: 'PASS' };
+ const log = (type, data) => result.events.push({ at: new Date().toISOString(), phase, type, ...data });
+ const urlPath = u => new URL(u).pathname + new URL(u).search;
+ await ctx.route('**/*', route => {
+ const req = route.request();
+ const u = new URL(req.url());
+ // Reviewed handlers: suggest endpoints perform SELECTs and local rule scoring only.
+ const allowedPost = !publicOnly && req.method() === 'POST' && ['/api/auth/login', '/api/auth/logout', '/api/grants/suggest', '/api/petitions/suggest'].includes(u.pathname);
+ const readAsset = ['GET', 'HEAD'].includes(req.method()) && ['image', 'stylesheet', 'font'].includes(req.resourceType());
+ if ((u.origin !== origin.origin && !readAsset) || (!['GET', 'HEAD'].includes(req.method()) && !allowedPost)) {
+ log('blocked-side-effect', { url: u.origin + u.pathname, method: req.method() });
+ return route.abort('blockedbyclient');
+ }
+ return route.continue();
+ });
+ page.on('console', m => m.type() === 'error' && log('console-error', { message: m.text(), location: m.location().url }));
+ page.on('pageerror', e => log('page-error', { message: String(e) }));
+ page.on('requestfailed', r => log('request-failed', { url: r.url(), path: urlPath(r.url()), error: r.failure()?.errorText, prefetch: r.headers()['next-router-prefetch'] === '1', redirectedFrom: r.redirectedFrom() ? urlPath(r.redirectedFrom().url()) : null }));
+ page.on('response', r => {
+ if (r.url().includes('/api/') || r.status() >= 400) log('response', { url: r.url(), path: urlPath(r.url()), status: r.status() });
+ });
+ const settled = async () => page.waitForLoadState('networkidle');
+ const shot = async label => {
+ const path = `${artifacts}/${engineName}/${name}-${label}.png`;
+ await page.screenshot({ path, fullPage: true });
+ result.screenshots.push(path);
+ };
+ const step = async (label, fn) => {
+ phase = label;
+ await shot(`${result.assertions.length}-before`);
+ await fn();
+ await settled();
+ await shot(`${result.assertions.length}-after`);
+ result.assertions.push(label);
+ };
+ const dataResponse = async promise => {
+ const response = await promise;
+ expect(response.status()).toBe(200);
+ expect(await response.finished()).toBeNull();
+ return response.json();
+ };
+ const waitAPI = path => page.waitForResponse(r => new URL(r.url()).pathname === path && r.request().method() === 'GET');
+ try {
+ await run({ page, ctx, step, settled, shot, dataResponse, waitAPI, result });
+ await settled();
+ result.warnings = result.events.filter(e => /^https:\/\/(?:www\.google\.com\/s2\/favicons|t\d\.gstatic\.com\/faviconV2)/.test(e.url || e.location || ''));
+ const failures = result.events.filter(e => {
+ if (result.warnings.includes(e)) return false;
+ if (e.phase === 'invalid-credentials' && e.type === 'console-error' && e.location === `${base}/api/auth/login` && /^Failed to load resource:.*401/.test(e.message)) return false;
+ // The landing deliberately fetches auth-gated topics with redirect:manual.
+ // Chromium reports only this exact cancelled redirect as a request failure.
+ if (e.type === 'request-failed' && e.path === '/login' && e.redirectedFrom?.startsWith('/api/petitions/topics?') && e.error === 'net::ERR_ABORTED') return false;
+ if (e.type === 'request-failed' && e.path === '/api/petitions/topics?limit=12&source=pulse&org=false' && e.error === 'net::ERR_ABORTED' && result.guestTopicsStatus === 307) return false;
+ // Next may cancel a speculative prefetch; demanded data/SPA paths still have assertions.
+ if (e.type === 'request-failed' && e.prefetch && e.path.includes('_rsc=') && e.error === 'net::ERR_ABORTED') return false;
+ return ['console-error', 'page-error', 'request-failed', 'blocked-side-effect'].includes(e.type) ||
+ (e.type === 'response' && e.status >= 400 && !(e.phase === 'invalid-credentials' && e.path === '/api/auth/login' && e.status === 401));
+ });
+ expect(failures, JSON.stringify(failures)).toEqual([]);
+ } catch (e) {
+ result.verdict = 'FAIL';
+ result.failure = String(e).split('Call log:')[0];
+ await shot('failure').catch(() => {});
+ } finally {
+ phase = 'teardown';
+ try { await ctx.close(); result.video = await page.video()?.path(); }
+ catch (e) { result.verdict = 'FAIL'; result.cleanupFailure = String(e).split('Call log:')[0]; }
+ report.results.push(result);
+ writeFileSync(`verification/browser-ux-${tag}.json`, JSON.stringify(report, null, 2) + '\n');
+ console.log(`${engineName} ${name}: ${result.verdict}${result.failure ? '\n' + result.failure.slice(0, 900) : ''}`);
+ }
+}
+
+for (const [engineName, engine] of [['chromium', chromium], ['webkit', webkit]]) {
+ const browser = await engine.launch();
+ try {
+ await journey(engineName, browser, 'public', async ({ page, ctx, result, step, settled, waitAPI, dataResponse }) => {
+ result.guestTopicsStatus = (await ctx.request.get(`${base}/api/petitions/topics?limit=12&source=pulse&org=false`, { maxRedirects: 0 })).status();
+ expect(result.guestTopicsStatus).toBe(307);
+ const session = waitAPI('/api/auth/session');
+ const petitions = waitAPI('/api/pulse/petitions');
+ await page.goto(`${base}/pulse`);
+ expect((await dataResponse(session)).authenticated).toBe(false);
+ const data = await dataResponse(petitions);
+ expect(Array.isArray(data.petitions)).toBe(true);
+ await settled();
+ await expect(page.getByRole('heading', { name: 'Featured Petitions' })).toBeVisible();
+ if (data.petitions.length) await expect(page.getByRole('link', { name: data.petitions[0].title, exact: true })).toBeVisible();
+ else await expect(page.getByText('No active petitions yet. Be the first to create one!', { exact: true })).toBeVisible();
+ await step('theme-controls-and-persistence', async () => {
+ const select = page.getByLabel('Pick inbox theme');
+ const initial = await select.inputValue();
+ await page.getByRole('button', { name: 'Next theme', exact: true }).click();
+ expect(await select.inputValue()).not.toBe(initial);
+ const chosen = await select.inputValue();
+ await page.reload(); await settled();
+ await expect(select).toHaveValue(chosen);
+ await page.getByRole('button', { name: 'Previous theme', exact: true }).click();
+ await expect(select).toHaveValue(initial);
+ });
+ await step('search-open-close-and-escape', async () => {
+ await page.getByRole('button', { name: 'Open search' }).click();
+ await expect(page.getByRole('dialog', { name: 'Global search' })).toBeVisible();
+ await page.getByRole('button', { name: 'Close search' }).click();
+ await expect(page.getByRole('dialog', { name: 'Global search' })).toHaveCount(0);
+ await page.getByRole('button', { name: 'Open search' }).click();
+ await page.keyboard.press('Escape');
+ await expect(page.getByRole('dialog', { name: 'Global search' })).toHaveCount(0);
+ });
+ await step('petition-list-spa-and-search', async () => {
+ const response = waitAPI('/api/pulse/petitions');
+ await page.getByRole('link', { name: 'Browse Petitions', exact: true }).click();
+ await dataResponse(response);
+ await expect(page.getByRole('heading', { name: 'Active Petitions' })).toBeVisible();
+ await settled();
+ const empty = page.waitForResponse(r => new URL(r.url()).pathname === '/api/pulse/petitions' && new URL(r.url()).searchParams.get('search') === 'tk11315-no-such-petition-8b7c');
+ await page.getByPlaceholder('Search petitions...').fill('tk11315-no-such-petition-8b7c');
+ expect((await dataResponse(empty)).petitions).toHaveLength(0);
+ await expect(page.getByRole('heading', { name: 'No petitions found' })).toBeVisible();
+ const restored = page.waitForResponse(r => new URL(r.url()).pathname === '/api/pulse/petitions' && !new URL(r.url()).searchParams.has('search'));
+ await page.getByPlaceholder('Search petitions...').fill('');
+ const restoredData = await dataResponse(restored);
+ if (restoredData.petitions.length) await expect(page.getByRole('heading', { level: 3, name: restoredData.petitions[0].title, exact: true })).toBeVisible();
+ else await expect(page.getByRole('heading', { name: 'No petitions found' })).toBeVisible();
+ });
+ await step('about-spa-navigation', async () => {
+ await page.getByRole('link', { name: 'About', exact: true }).first().click();
+ await expect(page).toHaveURL(`${base}/pulse/about`);
+ await expect(page.locator('h1')).toBeVisible();
+ });
+ await step('mobile-menu-and-home', async () => {
+ await page.setViewportSize({ width: 390, height: 844 });
+ const toggle = page.getByRole('button', { name: 'Toggle menu' });
+ await expect(toggle).toBeVisible(); await toggle.click();
+ const home = page.getByRole('link', { name: 'Home', exact: true }).filter({ visible: true }).first();
+ await home.click();
+ await expect(page).toHaveURL(`${base}/pulse`);
+ await expect(page.locator('h1')).toBeVisible();
+ });
+ });
+ if (!publicOnly) {
+ for (const [username, role] of [['admin', 'admin'], ['teststaff', 'staff'], ['testpulse', 'pulse']]) {
+ await journey(engineName, browser, role, async ({ page, ctx, step, settled }) => {
+ await page.goto(`${base}/login`); await settled();
+ await step('login-and-role-session', async () => {
+ await page.getByPlaceholder('Username or email').fill(username);
+ await page.getByPlaceholder('Password').fill(process.env.NORMA_TEST_PW || 'TestPass123!');
+ await page.getByPlaceholder('Password').press('Enter');
+ await page.waitForURL(u => u.pathname !== '/login'); await settled();
+ const session = await page.evaluate(() => fetch('/api/auth/session').then(r => r.json()));
+ expect(session).toMatchObject({ authenticated: true, user: username, role });
+ if (role === 'pulse') expect(new URL(page.url()).pathname).toBe('/pulse');
+ else await expect(page.locator('#main-content')).toBeVisible();
+ });
+ await step('reload-preserves-session', async () => {
+ await page.reload(); await settled();
+ expect(await page.evaluate(() => fetch('/api/auth/session').then(r => r.json()))).toMatchObject({ authenticated: true, user: username, role });
+ });
+ if (role === 'admin') await step('select-sandbox-organization', async () => {
+ await page.getByText('Riverside Community · Sandbox', { exact: true }).click();
+ await settled();
+ await expect(page.getByText('Select an organization from the sidebar to get started.', { exact: false })).toHaveCount(0);
+ });
+ if (role === 'admin') for (const tab of ['Grants', 'Petitions', 'News', 'Pipeline']) {
+ await step(`admin-tab-${tab.toLowerCase()}`, async () => {
+ const suggestion = ['Grants', 'Petitions'].includes(tab) ? page.waitForResponse(r => new URL(r.url()).pathname === `/api/${tab.toLowerCase()}/suggest` && r.request().method() === 'POST') : null;
+ await page.getByText(tab, { exact: true }).first().click();
+ if (suggestion) {
+ const response = await suggestion;
+ expect(response.status()).toBe(200);
+ expect(await response.finished()).toBeNull();
+ expect(Array.isArray((await response.json()).suggestions)).toBe(true);
+ }
+ await settled();
+ await expect(page.getByRole('heading', { level: 1, name: ({ Pipeline: 'Petition Pipeline', News: 'News Feed' })[tab] || tab, exact: true })).toBeVisible();
+ await expect(page.locator('#main-content')).not.toBeEmpty();
+ await expect(page.getByText('Select an organization from the sidebar to get started.', { exact: false })).toHaveCount(0);
+ await expect(page.locator('#main-content')).not.toContainText(/something went wrong|application error/i);
+ });
+ }
+ if (role !== 'admin') await step('admin-api-denied', async () => {
+ const res = await ctx.request.get(`${base}/api/registry`);
+ expect(res.status()).toBe(403);
+ });
+ await step('logout-clears-session', async () => {
+ const response = page.waitForResponse(r => r.url() === `${base}/api/auth/logout` && r.request().method() === 'POST');
+ await page.getByRole('button', { name: /sign out/i }).filter({ visible: true }).first().click();
+ expect((await response).status()).toBe(200);
+ await expect.poll(async () => (await ctx.cookies()).some(c => c.name === 'norma-auth')).toBe(false);
+ if (role === 'pulse') await expect(page.getByRole('link', { name: 'Sign In', exact: true }).first()).toBeVisible();
+ else await expect(page).toHaveURL(`${base}/login`);
+ await settled();
+ expect((await page.evaluate(() => fetch('/api/auth/session').then(r => r.json()))).authenticated).toBe(false);
+ expect((await ctx.cookies()).some(c => c.name === 'norma-auth')).toBe(false);
+ });
+ });
+ }
+ await journey(engineName, browser, 'negative', async ({ page, step, settled }) => {
+ await page.goto(`${base}/login`); await settled();
+ await step('invalid-credentials', async () => {
+ const res = page.waitForResponse(r => r.url().endsWith('/api/auth/login'));
+ await page.getByPlaceholder('Username or email').fill(`tk11315-invalid-${engineName}`);
+ await page.getByPlaceholder('Password').fill('incorrect-test-password');
+ await page.getByPlaceholder('Password').press('Enter');
+ expect((await res).status()).toBe(401);
+ await expect(page.getByText('Invalid credentials', { exact: true })).toBeVisible();
+ await expect(page).toHaveURL(`${base}/login`);
+ });
+ });
+ }
+ } finally { await browser.close(); }
+}
+report.verdict = report.results.every(r => r.verdict === 'PASS') ? 'PASS' : 'FAIL';
+writeFileSync(`verification/browser-ux-${tag}.json`, JSON.stringify(report, null, 2) + '\n');
+process.exitCode = report.verdict === 'PASS' ? 0 : 1;
diff --git a/verification/browser-ux-artifacts.json b/verification/browser-ux-artifacts.json
new file mode 100644
index 0000000..aaba350
--- /dev/null
+++ b/verification/browser-ux-artifacts.json
@@ -0,0 +1,602 @@
+[
+ {
+ "path": "test-results/TK-11315-isolated/chromium/public-0-before.png",
+ "bytes": 194089,
+ "sha256": "e6b6647b040239098fc5372271dd02d6df8c8214d880d5b386f05e0234cca864"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/chromium/public-0-after.png",
+ "bytes": 191251,
+ "sha256": "c3d27a6ab04c20d38f11f7f2df158df71eccebf0c891d664429a6a31b3e94a14"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/chromium/public-1-before.png",
+ "bytes": 191448,
+ "sha256": "e814631c5fbab054b6b897463a7a3dd01a257b784dcad9cb2c8cf959bf987247"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/chromium/public-1-after.png",
+ "bytes": 193042,
+ "sha256": "5c59e85577f24d496f4abbf0cda995362b9cdfad581ffd4c4b40ebb4e46c4739"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/chromium/public-2-before.png",
+ "bytes": 192787,
+ "sha256": "855cb8a923adaa9d2dd153fb6ff83b3938e119ce1dc2020b0924257b832b4c77"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/chromium/public-2-after.png",
+ "bytes": 105106,
+ "sha256": "780afc76bf81b2c93b5a4c00e9dc06bb9631ab2517d2e3a10fcc66b7248076b3"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/chromium/public-3-before.png",
+ "bytes": 105106,
+ "sha256": "780afc76bf81b2c93b5a4c00e9dc06bb9631ab2517d2e3a10fcc66b7248076b3"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/chromium/public-3-after.png",
+ "bytes": 248561,
+ "sha256": "74ef87b64038b913dc69f0d0e91fd50fba3e7811a71f9835018999d087d09b2b"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/chromium/public-4-before.png",
+ "bytes": 248561,
+ "sha256": "74ef87b64038b913dc69f0d0e91fd50fba3e7811a71f9835018999d087d09b2b"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/chromium/public-4-after.png",
+ "bytes": 148236,
+ "sha256": "5f40ec376bbfbde9879007ba0b9d1485c4093723680e689360b9002a89395423"
+ },
+ {
+ "path": "/Users/macstudio3/Projects/Norma/test-results/TK-11315-isolated/chromium/page@ed809c30ba7769e17c01dd3d568fa0dd.webm",
+ "bytes": 561247,
+ "sha256": "c4dd207f42b3d04220be94291e0934d4840bdedbdda348bf6c4c93de0d8a5365"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/chromium/admin-0-before.png",
+ "bytes": 41210,
+ "sha256": "5a43e2f1be74bdafe3e8fa990a38d624d6a1ffd3bf535fd74e4baf1eea483aed"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/chromium/admin-0-after.png",
+ "bytes": 100146,
+ "sha256": "6a9251d01b3bbbddbb26be695e45204e91857c7adcff8f3095001814ece40047"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/chromium/admin-1-before.png",
+ "bytes": 100153,
+ "sha256": "dbe55ef1d85980fbb9ef47de2159d2b872c2899ed943c4a9fd10218cf9de2479"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/chromium/admin-1-after.png",
+ "bytes": 116853,
+ "sha256": "bd1f8a1776bd30465c287b385cd7f89561495fee86ea30420117fa7c16b0fbc5"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/chromium/admin-2-before.png",
+ "bytes": 116850,
+ "sha256": "b2294f91b545dd8be9aa8be59ec07eb538f3a43b62a0384929d7d773aefbade9"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/chromium/admin-2-after.png",
+ "bytes": 179161,
+ "sha256": "481380a5ddb212ff84a91686817dd0a4504cc6ed435aa2c46217719136b6635d"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/chromium/admin-3-before.png",
+ "bytes": 224314,
+ "sha256": "5c2a9c485693685b0e30a72e52dbb91212cd40169456fb2fb62b3202427b3ed4"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/chromium/admin-3-after.png",
+ "bytes": 148418,
+ "sha256": "0b75766cbe3ff6e283b26a6f605095248f05af67dce191985e6a949b2f73e8ca"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/chromium/admin-4-before.png",
+ "bytes": 148541,
+ "sha256": "cb67cbe1f7d14e27d2c4522fe9221c5409a45ca2bb7e82d14b74471f685152fe"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/chromium/admin-4-after.png",
+ "bytes": 164399,
+ "sha256": "7efb8b892463468730dfdf4c9fb6ee982a44b3a3c5ccc29aad792b651d023438"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/chromium/admin-5-before.png",
+ "bytes": 187371,
+ "sha256": "6dc85c167b8545dfa0aae5b3d0deaaf1cac84d9cd591736e8d76975f7accfb4c"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/chromium/admin-5-after.png",
+ "bytes": 155789,
+ "sha256": "6f17dd55450ab563b8e63b3839a76c16cea5309a31a5d1f1cb34a8a9e8715b7d"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/chromium/admin-6-before.png",
+ "bytes": 154268,
+ "sha256": "3f13132d35f99e4be63a907bbe6cf126cc7034d60fd5505f47063402c123f9a6"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/chromium/admin-6-after.png",
+ "bytes": 131677,
+ "sha256": "9d450a1cad9e12d87736ffc066902c1ba1b9152e008973d185a11d238044650d"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/chromium/admin-7-before.png",
+ "bytes": 131379,
+ "sha256": "bc0ea11cf12360559ee12f641bebd26673ea14ed8bc3a8fba1561a2afca1b902"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/chromium/admin-7-after.png",
+ "bytes": 41196,
+ "sha256": "ece2409f4c7fe00e9af352c3c70f49836ff3a1807bf90514ed1c3ae10a019f71"
+ },
+ {
+ "path": "/Users/macstudio3/Projects/Norma/test-results/TK-11315-isolated/chromium/page@9990432086d2a0151622da3e560c20ca.webm",
+ "bytes": 400894,
+ "sha256": "dfe35e8199b6e96a2c915a508978496d40430eeab54dae1ea65bdc5ac8bb5975"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/chromium/staff-0-before.png",
+ "bytes": 41210,
+ "sha256": "5a43e2f1be74bdafe3e8fa990a38d624d6a1ffd3bf535fd74e4baf1eea483aed"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/chromium/staff-0-after.png",
+ "bytes": 236819,
+ "sha256": "ec0653eccca65ba7f271df28dd11fd88c9d43fb50447dee7968e1f276c581295"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/chromium/staff-1-before.png",
+ "bytes": 229767,
+ "sha256": "64f6aad2bef99d3e5a9ae1654f3f54367f3d1cd515e750923bc6834890d587fa"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/chromium/staff-1-after.png",
+ "bytes": 262419,
+ "sha256": "2db51eacbd12ed65d7d44138781033bfc7aafbbf9a271170ee1bc633d444308a"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/chromium/staff-2-before.png",
+ "bytes": 262674,
+ "sha256": "eb58316357c2424cf7c6b9f5af99f2a5d4efd6ae27ae0f1cc187939ff846b3d2"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/chromium/staff-2-after.png",
+ "bytes": 262776,
+ "sha256": "b1dff417df4c89220146a95e449d000ab8dde008cfe9b2875d43f7d063ba3874"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/chromium/staff-3-before.png",
+ "bytes": 262910,
+ "sha256": "f5ffa9f9f71e7923631034e7ce30bc72594739e4337cd367b9f75cde001cc182"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/chromium/staff-3-after.png",
+ "bytes": 41198,
+ "sha256": "b2829ff6cd37b66c20da05f831d98b9a9250a14aaca7a38428ddb41b17ab143b"
+ },
+ {
+ "path": "/Users/macstudio3/Projects/Norma/test-results/TK-11315-isolated/chromium/page@cf5b64b0766019b794dd5e2255a1ab48.webm",
+ "bytes": 231651,
+ "sha256": "8c5ad840caa218981016fc5f539032f0c7e2ca62f7335bf3df738368a7a4baa5"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/chromium/pulse-0-before.png",
+ "bytes": 41210,
+ "sha256": "5a43e2f1be74bdafe3e8fa990a38d624d6a1ffd3bf535fd74e4baf1eea483aed"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/chromium/pulse-0-after.png",
+ "bytes": 183700,
+ "sha256": "f258d70d116ffcaee919aa74a1ea12a32c7a8a4d155c1c309a68801cb754a26c"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/chromium/pulse-1-before.png",
+ "bytes": 189620,
+ "sha256": "2bd50484cf9833e1810242fc5a1c61c02432c036c63790d2d748c67dc64d1115"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/chromium/pulse-1-after.png",
+ "bytes": 215853,
+ "sha256": "4cf397e951c727d5e6a4ab14caed1c9f0bd8881cbe24d8d51f1c8a86ab0b05cc"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/chromium/pulse-2-before.png",
+ "bytes": 215845,
+ "sha256": "b9c9dacadb573d663a83b717bf3d8c3f30a4ce2160d98575c0eb2b1dc40367d9"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/chromium/pulse-2-after.png",
+ "bytes": 216222,
+ "sha256": "384d5abb5b3d0ac9b0c7b082e3d1fb5103090217e44f798a500c562a6381288f"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/chromium/pulse-3-before.png",
+ "bytes": 216894,
+ "sha256": "4bc9dc106212e1fb949902bf7b9474a984fbf076d548119e5c4f12366927779b"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/chromium/pulse-3-after.png",
+ "bytes": 214511,
+ "sha256": "88ac3ed0cb5cfc646b1f0729e67d2fffe97bba9860ca8e04c6c722f46cf96e0d"
+ },
+ {
+ "path": "/Users/macstudio3/Projects/Norma/test-results/TK-11315-isolated/chromium/page@767958a1501af82ae767532ce5bac046.webm",
+ "bytes": 189107,
+ "sha256": "61d7b7940ead3dce4657bf87f06bd7f9a9f28d08ac1007b62886efe708644a85"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/chromium/negative-0-before.png",
+ "bytes": 41210,
+ "sha256": "5a43e2f1be74bdafe3e8fa990a38d624d6a1ffd3bf535fd74e4baf1eea483aed"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/chromium/negative-0-after.png",
+ "bytes": 43747,
+ "sha256": "423f35912c71d48f6c13c180ece759f51f51df1a222e6ef807aac1146956baa5"
+ },
+ {
+ "path": "/Users/macstudio3/Projects/Norma/test-results/TK-11315-isolated/chromium/page@5bbe5ac3c41abd428280f88ec28678c9.webm",
+ "bytes": 39793,
+ "sha256": "3472a0c6cdfc4e245c25cf09b43c0fca15568d2708064f2bdc6732f7265fb54d"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/webkit/public-0-before.png",
+ "bytes": 254322,
+ "sha256": "5469410579d10ba2c2c57e7bebfc5c9b099672aafbbee22523da3cb4eb08f45e"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/webkit/public-0-after.png",
+ "bytes": 253847,
+ "sha256": "f25665c9a23c0f36a7a7a0792ea680b95891438fc3e2e1f0ce9b808c1533ac91"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/webkit/public-1-before.png",
+ "bytes": 254456,
+ "sha256": "0a32df580954283ba71dc0060586756729be8647defde5c995098c85ad2ac862"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/webkit/public-1-after.png",
+ "bytes": 256023,
+ "sha256": "e983e6be5ccbae8de30e0956821f197d89ed8330a0c39bb4f30de6717620fb1c"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/webkit/public-2-before.png",
+ "bytes": 256624,
+ "sha256": "031d45596baf593ca14e88cfbeccec590f2daeacf9b41bf952a8c8fdfe358301"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/webkit/public-2-after.png",
+ "bytes": 141865,
+ "sha256": "586e93723bd11a6975438ffebd57a5fe874750f0c97a9c388cd70c6e20c1062a"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/webkit/public-3-before.png",
+ "bytes": 141735,
+ "sha256": "774ae7b274d642506421897ad13a783e30c0fac7de08f65ea489f6ec5e9aa7b1"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/webkit/public-3-after.png",
+ "bytes": 324846,
+ "sha256": "cab12682d40d6960d7cd5d8fc76259b6a4f959f5286067bf06a7d4c174d02b8a"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/webkit/public-4-before.png",
+ "bytes": 325385,
+ "sha256": "c2eea4e37640666b495cd0ed4d37a7a9308e08b51fb51c064aa933fb9f147f3e"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/webkit/public-4-after.png",
+ "bytes": 191341,
+ "sha256": "0d38ba1aea2a65a77b998c4cf3715ce09074fee0f84c188b6ec60f8f5e1b59b8"
+ },
+ {
+ "path": "/Users/macstudio3/Projects/Norma/test-results/TK-11315-isolated/webkit/page@295490f4c6512db6aa63c5fd154f820d.webm",
+ "bytes": 332828,
+ "sha256": "6e9e039ce50db941cfbb936f7e27e0fe70a16065992412dbc9757cb10fd63277"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/webkit/admin-0-before.png",
+ "bytes": 69709,
+ "sha256": "65ab71bf81db4135b6f0ad0438c65963d9246d14a8ba4a957ace0657a0d1ffb1"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/webkit/admin-0-after.png",
+ "bytes": 161039,
+ "sha256": "fad86142dc1c73df3bce1fbc25bf46311ba8bc9603b3307e0a78ca53bda15936"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/webkit/admin-1-before.png",
+ "bytes": 161056,
+ "sha256": "4cbbcf5e8d46b1b676130ecc2f6c610737ed74d8cfd70b922572bfce830d45eb"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/webkit/admin-1-after.png",
+ "bytes": 161270,
+ "sha256": "4dc8d7d143ac9fbce0b7341d5ca2709cd6fb59d6f972a81d814856f5fed54819"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/webkit/admin-2-before.png",
+ "bytes": 161280,
+ "sha256": "20466cd2d94f2e52862812b51918dfff5956a5e2725fe08a64e6635b94490673"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/webkit/admin-2-after.png",
+ "bytes": 207690,
+ "sha256": "d7bb9c41155062db75c1ffa7128491aa872a59aea27122c3ce49686c392b52a8"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/webkit/admin-3-before.png",
+ "bytes": 276331,
+ "sha256": "bb64c7808cbf59ff8c1d05157df00016ca5649ed900f695178add05dcea3035e"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/webkit/admin-3-after.png",
+ "bytes": 196265,
+ "sha256": "3da13366122b3341fc7f5c9b40c6c89d6fb864547fb53cd5ec4d0f739358d33d"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/webkit/admin-4-before.png",
+ "bytes": 196411,
+ "sha256": "e9850d606c49c48a7f3160520e584dcb86b004d8b419a4259e41b73b199149d8"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/webkit/admin-4-after.png",
+ "bytes": 246215,
+ "sha256": "29e0a00ac2315ce91cb46a90bba7cc6c8348e8245408451affb75e91840bd037"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/webkit/admin-5-before.png",
+ "bytes": 249294,
+ "sha256": "f19e58d19835634de5f29f75e2d4df21009364aff77b125abe5e5c98a2f599e3"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/webkit/admin-5-after.png",
+ "bytes": 166514,
+ "sha256": "4876b81b2c5db440aa0580a878a0f3b977cd61474aeae90070c0ba8efb58b992"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/webkit/admin-6-before.png",
+ "bytes": 165992,
+ "sha256": "29738836aae6e5d2f26eee7b096cf62c7e1479fa8c4dbe70673fa05f32b7b9d2"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/webkit/admin-6-after.png",
+ "bytes": 230419,
+ "sha256": "8e7632d4e7c06756941f5c927a0b468896257cc5a4b9ce323902d11d26fe8240"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/webkit/admin-7-before.png",
+ "bytes": 280475,
+ "sha256": "5b4b217e0933ff49d973da6d654ea9983dccd393b0ef3f7990f04a0a7e47e468"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/webkit/admin-7-after.png",
+ "bytes": 69709,
+ "sha256": "65ab71bf81db4135b6f0ad0438c65963d9246d14a8ba4a957ace0657a0d1ffb1"
+ },
+ {
+ "path": "/Users/macstudio3/Projects/Norma/test-results/TK-11315-isolated/webkit/page@979f746d2fa0db8c717515ab3abd0d97.webm",
+ "bytes": 236612,
+ "sha256": "87221f5bdaf16023b9f6cd57ffc5a021f797408f360a683d35c7d7f333c96e25"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/webkit/staff-0-before.png",
+ "bytes": 69709,
+ "sha256": "65ab71bf81db4135b6f0ad0438c65963d9246d14a8ba4a957ace0657a0d1ffb1"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/webkit/staff-0-after.png",
+ "bytes": 519035,
+ "sha256": "29dd9316f6b84b5cac0cb8479a4b26f46e94d29562448760876c5eee3f6c9cef"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/webkit/staff-1-before.png",
+ "bytes": 552519,
+ "sha256": "956f6f36588d182b52dce96572aded2cee9cd706f712a4a77b78f74140e8fc44"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/webkit/staff-1-after.png",
+ "bytes": 558361,
+ "sha256": "0f184b49234fae5738191f868dffa38a384c289fccdce30c6f90f5919138c19f"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/webkit/staff-2-before.png",
+ "bytes": 558906,
+ "sha256": "fbe2fc173e1213f6d5486fd4ede4772d6daba18c0d15ec2e82c4a9370c149bc3"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/webkit/staff-2-after.png",
+ "bytes": 558879,
+ "sha256": "a75261e32a8dbd097690ea00b0ce57364f684b0c653eb51c850736818a760283"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/webkit/staff-3-before.png",
+ "bytes": 558581,
+ "sha256": "476dd2424d2bc12c93a167699be6c4f404ca2731aee9c2d67dc92e235e45ff68"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/webkit/staff-3-after.png",
+ "bytes": 69709,
+ "sha256": "65ab71bf81db4135b6f0ad0438c65963d9246d14a8ba4a957ace0657a0d1ffb1"
+ },
+ {
+ "path": "/Users/macstudio3/Projects/Norma/test-results/TK-11315-isolated/webkit/page@1007a2df4cdbfbea565404a2e45bc5d9.webm",
+ "bytes": 157157,
+ "sha256": "f4e0db0d971fc79dee2005af82a0ac97378cbe809e7cd04b3301787d60a77c01"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/webkit/pulse-0-before.png",
+ "bytes": 69709,
+ "sha256": "65ab71bf81db4135b6f0ad0438c65963d9246d14a8ba4a957ace0657a0d1ffb1"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/webkit/pulse-0-after.png",
+ "bytes": 287700,
+ "sha256": "99fc225fa0fc797b3c3bfb8116d81366acccc6c4140c98e368dc679b47b1c6e8"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/webkit/pulse-1-before.png",
+ "bytes": 289192,
+ "sha256": "e068ff1f3402a70b169a3f817ba57bec932e8d2b183cd8184a0bab7ceb001d12"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/webkit/pulse-1-after.png",
+ "bytes": 294371,
+ "sha256": "930cbcfcc9610b0c82a81791625aa44bbafc785d6b05fe3f526f4b70516d49c6"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/webkit/pulse-2-before.png",
+ "bytes": 295434,
+ "sha256": "e29d65697ad0a33dbdf4d97e032256489aece8c9c505de31be5b71b9db305220"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/webkit/pulse-2-after.png",
+ "bytes": 295874,
+ "sha256": "c26fdf1c47b06bfe680dc543d9ed43a49b1d3829f74c61bd02d44741b220c9b7"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/webkit/pulse-3-before.png",
+ "bytes": 295590,
+ "sha256": "e823015c313bea20d4ffa7b2585debae9c2a625fd4cfadd85232985b244e3c74"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/webkit/pulse-3-after.png",
+ "bytes": 291695,
+ "sha256": "c74f5b491d1564ce8f894c89dc4e85ee8b9338d3066e6ee8582f1c2a0aeebcb7"
+ },
+ {
+ "path": "/Users/macstudio3/Projects/Norma/test-results/TK-11315-isolated/webkit/page@01f3a8b14cf252b501ddacc720a1ab96.webm",
+ "bytes": 254259,
+ "sha256": "17e2824945e524e40b53d974d4e830e3d636a8c8ef2016a3b12af46c55e334f7"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/webkit/negative-0-before.png",
+ "bytes": 69709,
+ "sha256": "65ab71bf81db4135b6f0ad0438c65963d9246d14a8ba4a957ace0657a0d1ffb1"
+ },
+ {
+ "path": "test-results/TK-11315-isolated/webkit/negative-0-after.png",
+ "bytes": 73827,
+ "sha256": "e8d35ce7e4e5dfc7396e5afddab1e70b85f15f114fc1f5e30b5ccf95fc7b8ab5"
+ },
+ {
+ "path": "/Users/macstudio3/Projects/Norma/test-results/TK-11315-isolated/webkit/page@4e0cbd4e4d33bb45f6eaaa480b119ec7.webm",
+ "bytes": 38715,
+ "sha256": "bc804dbda19fe8e86301c38dd06e8246a07e7b0506b8123fbf5d8dcd4c310dfb"
+ },
+ {
+ "path": "test-results/TK-11315-live-public/chromium/public-0-before.png",
+ "bytes": 339032,
+ "sha256": "38fdd465d0c811bf1a4b67aaf594620f8323b7ad1f5578bd129cab6c3d507d82"
+ },
+ {
+ "path": "test-results/TK-11315-live-public/chromium/public-0-after.png",
+ "bytes": 337716,
+ "sha256": "14514670980667c4eba2444645857a22e796e49ea6261521d94a154cc60a0534"
+ },
+ {
+ "path": "test-results/TK-11315-live-public/chromium/public-1-before.png",
+ "bytes": 338145,
+ "sha256": "bd6214c00418e795c7963c246fc620b1e82ef85e93935a6cbec545fb0c1d2cd1"
+ },
+ {
+ "path": "test-results/TK-11315-live-public/chromium/public-1-after.png",
+ "bytes": 339828,
+ "sha256": "e22ee06687866881ad36bb256da4ca54346609333dc2ba51d45d1f7d227435d5"
+ },
+ {
+ "path": "test-results/TK-11315-live-public/chromium/public-2-before.png",
+ "bytes": 339927,
+ "sha256": "beba60b7bc5577f600a46f550b222c143799b3121d611af1957b0c85104a4b94"
+ },
+ {
+ "path": "test-results/TK-11315-live-public/chromium/public-2-after.png",
+ "bytes": 406498,
+ "sha256": "9c6a1509a421a080135c05a651e9fd2bf02e7727187c46fd9d027131d81ce634"
+ },
+ {
+ "path": "test-results/TK-11315-live-public/chromium/public-3-before.png",
+ "bytes": 408450,
+ "sha256": "7c1a2bffc1e0ef7fc5161c2d2c07138439e9e543f391fffe6ef80ac06fb31392"
+ },
+ {
+ "path": "test-results/TK-11315-live-public/chromium/public-3-after.png",
+ "bytes": 248561,
+ "sha256": "74ef87b64038b913dc69f0d0e91fd50fba3e7811a71f9835018999d087d09b2b"
+ },
+ {
+ "path": "test-results/TK-11315-live-public/chromium/public-4-before.png",
+ "bytes": 248561,
+ "sha256": "74ef87b64038b913dc69f0d0e91fd50fba3e7811a71f9835018999d087d09b2b"
+ },
+ {
+ "path": "test-results/TK-11315-live-public/chromium/public-4-after.png",
+ "bytes": 308677,
+ "sha256": "e3f40ecdd9e6b03211d221fe2b858167351c277986888de905dc055fee4311b9"
+ },
+ {
+ "path": "/Users/macstudio3/Projects/Norma/test-results/TK-11315-live-public/chromium/page@711ef6346f9dd6a28e64313f0efc7f9f.webm",
+ "bytes": 372661,
+ "sha256": "66d34a10a8267ae2192e7f20ef972069f260bd7798308e1462b9b7e2e3f5094d"
+ },
+ {
+ "path": "test-results/TK-11315-live-public/webkit/public-0-before.png",
+ "bytes": 423049,
+ "sha256": "7e81d05c196e0837a421be3dea97d1fed9a8b25627612ebbffbf81721115b4ef"
+ },
+ {
+ "path": "test-results/TK-11315-live-public/webkit/public-0-after.png",
+ "bytes": 422319,
+ "sha256": "a10fbb09e3ab909228bae7f48fb966ed54618527a85bb325a02fd38d11194d6f"
+ },
+ {
+ "path": "test-results/TK-11315-live-public/webkit/public-1-before.png",
+ "bytes": 424080,
+ "sha256": "b3bd3fb805d845b51fd9c85a09be558e14a78b00567c985a4fb5f0e17fbe2a9b"
+ },
+ {
+ "path": "test-results/TK-11315-live-public/webkit/public-1-after.png",
+ "bytes": 425221,
+ "sha256": "5ca661b5fcf1a5d7dcff2f0232e70d74694616c0b61312af771d8c751fef4a9e"
+ },
+ {
+ "path": "test-results/TK-11315-live-public/webkit/public-2-before.png",
+ "bytes": 425033,
+ "sha256": "77dccb943a9b22bbe3e6761bfaa058c9d6982da91c33814631951db3bf2c0fdf"
+ },
+ {
+ "path": "test-results/TK-11315-live-public/webkit/public-2-after.png",
+ "bytes": 465600,
+ "sha256": "3995e0b1914cf2f26a0335961fec94d9584ee26daef9ed8a4c575ecd5d18e18a"
+ },
+ {
+ "path": "test-results/TK-11315-live-public/webkit/public-3-before.png",
+ "bytes": 465581,
+ "sha256": "9abdc46d6844e483e5a26eeb9ce08af2051a3ab7496eda57ad4bcef4908b967c"
+ },
+ {
+ "path": "test-results/TK-11315-live-public/webkit/public-3-after.png",
+ "bytes": 324846,
+ "sha256": "cab12682d40d6960d7cd5d8fc76259b6a4f959f5286067bf06a7d4c174d02b8a"
+ },
+ {
+ "path": "test-results/TK-11315-live-public/webkit/public-4-before.png",
+ "bytes": 324859,
+ "sha256": "57e3f287393746ccc5987f0b8d7bd94c6a45a92fd14de1811015af5ac12761d4"
+ },
+ {
+ "path": "test-results/TK-11315-live-public/webkit/public-4-after.png",
+ "bytes": 284511,
+ "sha256": "72dc9227927862f35c592d28ac53f5a09d658aeabaff4742ccc7fd994a2bd831"
+ },
+ {
+ "path": "/Users/macstudio3/Projects/Norma/test-results/TK-11315-live-public/webkit/page@2e9df47b07b2317079a0549b2521eb48.webm",
+ "bytes": 431009,
+ "sha256": "b07f0dfb86bfe71238c2b7ff59333764923979a808cc0e44006f8e09571b766e"
+ }
+]
diff --git a/verification/browser-ux-isolated.json b/verification/browser-ux-isolated.json
index fabc200..a05e4e3 100644
--- a/verification/browser-ux-isolated.json
+++ b/verification/browser-ux-isolated.json
@@ -1,9 +1,9 @@
{
"ticket": "TK-11315",
- "timestamp": "2026-09-11T15:24:10.650Z",
+ "timestamp": "2026-09-11T15:27:31.072Z",
"base": "http://127.0.0.1:7411",
"publicOnly": false,
- "sourceCommit": "592b0c526c9fb9edbf5227f8fcda97501ecaa7f3",
+ "sourceCommit": "61f50062b57d7f28bf6011bc72a55378afe26466",
"buildId": "8u8WwDnP_ebJCe8g8jINs",
"artifactDirectory": "test-results/TK-11315-isolated",
"results": [
@@ -19,7 +19,7 @@
],
"events": [
{
- "at": "2026-09-11T15:24:11.556Z",
+ "at": "2026-09-11T15:27:32.517Z",
"phase": "entry",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -27,7 +27,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:11.562Z",
+ "at": "2026-09-11T15:27:32.524Z",
"phase": "entry",
"type": "request-failed",
"url": "http://127.0.0.1:7411/api/petitions/topics?limit=12&source=pulse&org=false",
@@ -37,7 +37,7 @@
"redirectedFrom": null
},
{
- "at": "2026-09-11T15:24:11.563Z",
+ "at": "2026-09-11T15:27:32.525Z",
"phase": "entry",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -45,7 +45,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:11.828Z",
+ "at": "2026-09-11T15:27:34.963Z",
"phase": "entry",
"type": "response",
"url": "http://127.0.0.1:7411/api/pulse/petitions?limit=12&sort=featured",
@@ -53,7 +53,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:12.709Z",
+ "at": "2026-09-11T15:27:35.836Z",
"phase": "theme-controls-and-persistence",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -61,7 +61,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:12.713Z",
+ "at": "2026-09-11T15:27:35.838Z",
"phase": "theme-controls-and-persistence",
"type": "request-failed",
"url": "http://127.0.0.1:7411/api/petitions/topics?limit=12&source=pulse&org=false",
@@ -71,7 +71,7 @@
"redirectedFrom": null
},
{
- "at": "2026-09-11T15:24:12.714Z",
+ "at": "2026-09-11T15:27:35.846Z",
"phase": "theme-controls-and-persistence",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -79,7 +79,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:12.715Z",
+ "at": "2026-09-11T15:27:35.855Z",
"phase": "theme-controls-and-persistence",
"type": "response",
"url": "http://127.0.0.1:7411/api/pulse/petitions?limit=12&sort=featured",
@@ -87,7 +87,17 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:13.928Z",
+ "at": "2026-09-11T15:27:35.877Z",
+ "phase": "theme-controls-and-persistence",
+ "type": "request-failed",
+ "url": "http://127.0.0.1:7411/pulse/petition/64f1e462-50e2-4451-a678-a1288d0500ca?_rsc=kBQU-ReggSCntE0F",
+ "path": "/pulse/petition/64f1e462-50e2-4451-a678-a1288d0500ca?_rsc=kBQU-ReggSCntE0F",
+ "error": "net::ERR_ABORTED",
+ "prefetch": true,
+ "redirectedFrom": null
+ },
+ {
+ "at": "2026-09-11T15:27:36.888Z",
"phase": "petition-list-spa-and-search",
"type": "response",
"url": "http://127.0.0.1:7411/api/pulse/petitions?limit=12&offset=0&sort=featured",
@@ -95,7 +105,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:13.948Z",
+ "at": "2026-09-11T15:27:36.956Z",
"phase": "petition-list-spa-and-search",
"type": "response",
"url": "http://127.0.0.1:7411/api/pulse/petitions?limit=12&offset=0&sort=featured&search=tk11315-no-such-petition-8b7c",
@@ -103,7 +113,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:13.967Z",
+ "at": "2026-09-11T15:27:36.976Z",
"phase": "petition-list-spa-and-search",
"type": "response",
"url": "http://127.0.0.1:7411/api/pulse/petitions?limit=12&offset=0&sort=featured",
@@ -111,7 +121,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:14.485Z",
+ "at": "2026-09-11T15:27:37.387Z",
"phase": "mobile-menu-and-home",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -119,7 +129,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:14.488Z",
+ "at": "2026-09-11T15:27:37.388Z",
"phase": "mobile-menu-and-home",
"type": "request-failed",
"url": "http://127.0.0.1:7411/api/petitions/topics?limit=12&source=pulse&org=false",
@@ -129,7 +139,7 @@
"redirectedFrom": null
},
{
- "at": "2026-09-11T15:24:14.490Z",
+ "at": "2026-09-11T15:27:37.389Z",
"phase": "mobile-menu-and-home",
"type": "response",
"url": "http://127.0.0.1:7411/api/pulse/petitions?limit=12&sort=featured",
@@ -152,7 +162,7 @@
"verdict": "PASS",
"guestTopicsStatus": 307,
"warnings": [],
- "video": "/Users/macstudio3/Projects/Norma/test-results/TK-11315-isolated/chromium/page@94cc1e7ec4cd7c3a2c89f61a993e2fce.webm"
+ "video": "/Users/macstudio3/Projects/Norma/test-results/TK-11315-isolated/chromium/page@ed809c30ba7769e17c01dd3d568fa0dd.webm"
},
{
"engine": "chromium",
@@ -169,7 +179,7 @@
],
"events": [
{
- "at": "2026-09-11T15:24:15.646Z",
+ "at": "2026-09-11T15:27:39.180Z",
"phase": "login-and-role-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/login",
@@ -177,7 +187,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:15.807Z",
+ "at": "2026-09-11T15:27:39.336Z",
"phase": "login-and-role-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -185,7 +195,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:15.824Z",
+ "at": "2026-09-11T15:27:39.344Z",
"phase": "login-and-role-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -193,7 +203,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:15.830Z",
+ "at": "2026-09-11T15:27:39.355Z",
"phase": "login-and-role-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/admin/impersonate",
@@ -201,7 +211,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:15.832Z",
+ "at": "2026-09-11T15:27:39.355Z",
"phase": "login-and-role-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/admin/impersonate",
@@ -209,7 +219,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:15.834Z",
+ "at": "2026-09-11T15:27:39.355Z",
"phase": "login-and-role-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -217,7 +227,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:15.834Z",
+ "at": "2026-09-11T15:27:39.355Z",
"phase": "login-and-role-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -225,15 +235,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:15.846Z",
- "phase": "login-and-role-session",
- "type": "response",
- "url": "http://127.0.0.1:7411/api/accounts",
- "path": "/api/accounts",
- "status": 200
- },
- {
- "at": "2026-09-11T15:24:16.527Z",
+ "at": "2026-09-11T15:27:39.649Z",
"phase": "reload-preserves-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -241,7 +243,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:16.609Z",
+ "at": "2026-09-11T15:27:39.667Z",
"phase": "reload-preserves-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/admin/impersonate",
@@ -249,7 +251,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:16.609Z",
+ "at": "2026-09-11T15:27:39.671Z",
"phase": "reload-preserves-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/admin/impersonate",
@@ -257,7 +259,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:16.609Z",
+ "at": "2026-09-11T15:27:39.673Z",
"phase": "reload-preserves-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -265,7 +267,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:16.609Z",
+ "at": "2026-09-11T15:27:39.673Z",
"phase": "reload-preserves-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -273,7 +275,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:16.609Z",
+ "at": "2026-09-11T15:27:39.675Z",
"phase": "reload-preserves-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/accounts",
@@ -281,7 +283,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:17.202Z",
+ "at": "2026-09-11T15:27:40.195Z",
"phase": "reload-preserves-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -289,15 +291,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:17.730Z",
- "phase": "select-sandbox-organization",
- "type": "response",
- "url": "http://127.0.0.1:7411/api/pipeline?limit=1",
- "path": "/api/pipeline?limit=1",
- "status": 200
- },
- {
- "at": "2026-09-11T15:24:17.731Z",
+ "at": "2026-09-11T15:27:40.445Z",
"phase": "select-sandbox-organization",
"type": "response",
"url": "http://127.0.0.1:7411/api/petitions?limit=1",
@@ -305,111 +299,95 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:17.731Z",
- "phase": "select-sandbox-organization",
+ "at": "2026-09-11T15:27:40.582Z",
+ "phase": "admin-tab-grants",
"type": "response",
- "url": "http://127.0.0.1:7411/api/petitions?status=active",
- "path": "/api/petitions?status=active",
+ "url": "http://127.0.0.1:7411/api/pipeline?limit=1",
+ "path": "/api/pipeline?limit=1",
"status": 200
},
{
- "at": "2026-09-11T15:24:17.731Z",
- "phase": "select-sandbox-organization",
+ "at": "2026-09-11T15:27:40.587Z",
+ "phase": "admin-tab-grants",
"type": "response",
- "url": "http://127.0.0.1:7411/api/radar",
- "path": "/api/radar",
+ "url": "http://127.0.0.1:7411/api/petitions?status=active",
+ "path": "/api/petitions?status=active",
"status": 200
},
{
- "at": "2026-09-11T15:24:17.731Z",
- "phase": "select-sandbox-organization",
+ "at": "2026-09-11T15:27:40.631Z",
+ "phase": "admin-tab-grants",
"type": "response",
"url": "http://127.0.0.1:7411/api/intelligence/activity?type=news_trigger,journalist_mention&limit=3",
"path": "/api/intelligence/activity?type=news_trigger,journalist_mention&limit=3",
"status": 200
},
{
- "at": "2026-09-11T15:24:17.731Z",
- "phase": "select-sandbox-organization",
- "type": "response",
- "url": "http://127.0.0.1:7411/api/intelligence/briefing?limit=5&strategy=all",
- "path": "/api/intelligence/briefing?limit=5&strategy=all",
- "status": 200
- },
- {
- "at": "2026-09-11T15:24:17.731Z",
- "phase": "select-sandbox-organization",
+ "at": "2026-09-11T15:27:40.757Z",
+ "phase": "admin-tab-grants",
"type": "response",
- "url": "http://127.0.0.1:7411/api/sessions",
- "path": "/api/sessions",
+ "url": "http://127.0.0.1:7411/api/radar",
+ "path": "/api/radar",
"status": 200
},
{
- "at": "2026-09-11T15:24:17.731Z",
- "phase": "select-sandbox-organization",
+ "at": "2026-09-11T15:27:40.789Z",
+ "phase": "admin-tab-grants",
"type": "response",
- "url": "http://127.0.0.1:7411/api/alerts?categories=news_media,grants,petitions&limit=1",
- "path": "/api/alerts?categories=news_media,grants,petitions&limit=1",
+ "url": "http://127.0.0.1:7411/api/intelligence/briefing?limit=5&strategy=all",
+ "path": "/api/intelligence/briefing?limit=5&strategy=all",
"status": 200
},
{
- "at": "2026-09-11T15:24:17.731Z",
- "phase": "select-sandbox-organization",
+ "at": "2026-09-11T15:27:40.814Z",
+ "phase": "admin-tab-grants",
"type": "response",
"url": "http://127.0.0.1:7411/api/grants?upcoming=true",
"path": "/api/grants?upcoming=true",
"status": 200
},
{
- "at": "2026-09-11T15:24:17.732Z",
- "phase": "select-sandbox-organization",
- "type": "response",
- "url": "http://127.0.0.1:7411/api/alerts?categories=news_media&limit=1",
- "path": "/api/alerts?categories=news_media&limit=1",
- "status": 200
- },
- {
- "at": "2026-09-11T15:24:17.732Z",
- "phase": "select-sandbox-organization",
+ "at": "2026-09-11T15:27:40.815Z",
+ "phase": "admin-tab-grants",
"type": "response",
"url": "http://127.0.0.1:7411/api/accounts",
"path": "/api/accounts",
"status": 200
},
{
- "at": "2026-09-11T15:24:17.868Z",
- "phase": "select-sandbox-organization",
+ "at": "2026-09-11T15:27:40.822Z",
+ "phase": "admin-tab-grants",
"type": "response",
- "url": "http://127.0.0.1:7411/api/alerts?limit=10",
- "path": "/api/alerts?limit=10",
+ "url": "http://127.0.0.1:7411/api/grants/suggest",
+ "path": "/api/grants/suggest",
"status": 200
},
{
- "at": "2026-09-11T15:24:19.938Z",
+ "at": "2026-09-11T15:27:40.829Z",
"phase": "admin-tab-grants",
- "type": "blocked-side-effect",
- "url": "http://127.0.0.1:7411/api/grants/suggest",
- "method": "POST"
+ "type": "response",
+ "url": "http://127.0.0.1:7411/api/grants?sort=deadline",
+ "path": "/api/grants?sort=deadline",
+ "status": 200
},
{
- "at": "2026-09-11T15:24:20.028Z",
+ "at": "2026-09-11T15:27:40.835Z",
"phase": "admin-tab-grants",
- "type": "request-failed",
- "url": "http://127.0.0.1:7411/api/grants/suggest",
- "path": "/api/grants/suggest",
- "error": "net::ERR_BLOCKED_BY_CLIENT.Inspector",
- "prefetch": false,
- "redirectedFrom": null
+ "type": "response",
+ "url": "http://127.0.0.1:7411/api/alerts?categories=news_media,grants,petitions&limit=1",
+ "path": "/api/alerts?categories=news_media,grants,petitions&limit=1",
+ "status": 200
},
{
- "at": "2026-09-11T15:24:20.028Z",
+ "at": "2026-09-11T15:27:40.835Z",
"phase": "admin-tab-grants",
- "type": "console-error",
- "message": "Failed to load resource: net::ERR_BLOCKED_BY_CLIENT.Inspector",
- "location": "http://127.0.0.1:7411/api/grants/suggest"
+ "type": "response",
+ "url": "http://127.0.0.1:7411/api/alerts?categories=news_media&limit=1",
+ "path": "/api/alerts?categories=news_media&limit=1",
+ "status": 200
},
{
- "at": "2026-09-11T15:24:20.028Z",
+ "at": "2026-09-11T15:27:40.839Z",
"phase": "admin-tab-grants",
"type": "response",
"url": "http://127.0.0.1:7411/api/grants/calendar?month=2026-09",
@@ -417,39 +395,23 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:20.030Z",
- "phase": "admin-tab-grants",
+ "at": "2026-09-11T15:27:40.937Z",
+ "phase": "admin-tab-petitions",
"type": "response",
- "url": "http://127.0.0.1:7411/api/grants?sort=deadline",
- "path": "/api/grants?sort=deadline",
+ "url": "http://127.0.0.1:7411/api/sessions",
+ "path": "/api/sessions",
"status": 200
},
{
- "at": "2026-09-11T15:24:22.158Z",
- "phase": "admin-tab-petitions",
- "type": "blocked-side-effect",
- "url": "http://127.0.0.1:7411/api/petitions/suggest",
- "method": "POST"
- },
- {
- "at": "2026-09-11T15:24:22.179Z",
+ "at": "2026-09-11T15:27:41.025Z",
"phase": "admin-tab-petitions",
- "type": "request-failed",
+ "type": "response",
"url": "http://127.0.0.1:7411/api/petitions/suggest",
"path": "/api/petitions/suggest",
- "error": "net::ERR_BLOCKED_BY_CLIENT.Inspector",
- "prefetch": false,
- "redirectedFrom": null
- },
- {
- "at": "2026-09-11T15:24:22.179Z",
- "phase": "admin-tab-petitions",
- "type": "console-error",
- "message": "Failed to load resource: net::ERR_BLOCKED_BY_CLIENT.Inspector",
- "location": "http://127.0.0.1:7411/api/petitions/suggest"
+ "status": 200
},
{
- "at": "2026-09-11T15:24:22.183Z",
+ "at": "2026-09-11T15:27:41.026Z",
"phase": "admin-tab-petitions",
"type": "response",
"url": "http://127.0.0.1:7411/api/petitions",
@@ -457,7 +419,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:22.183Z",
+ "at": "2026-09-11T15:27:41.051Z",
"phase": "admin-tab-petitions",
"type": "response",
"url": "http://127.0.0.1:7411/api/donations?from=2026-09-01",
@@ -465,7 +427,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:22.187Z",
+ "at": "2026-09-11T15:27:41.116Z",
"phase": "admin-tab-petitions",
"type": "response",
"url": "http://127.0.0.1:7411/api/donations/insights",
@@ -473,7 +435,15 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:22.894Z",
+ "at": "2026-09-11T15:27:41.203Z",
+ "phase": "admin-tab-news",
+ "type": "response",
+ "url": "http://127.0.0.1:7411/api/alerts?limit=10",
+ "path": "/api/alerts?limit=10",
+ "status": 200
+ },
+ {
+ "at": "2026-09-11T15:27:41.310Z",
"phase": "admin-tab-news",
"type": "response",
"url": "http://127.0.0.1:7411/api/news/outlets",
@@ -481,23 +451,23 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:22.908Z",
- "phase": "admin-tab-news",
+ "at": "2026-09-11T15:27:41.416Z",
+ "phase": "admin-tab-pipeline",
"type": "response",
"url": "http://127.0.0.1:7411/api/news/tags?date_range=month",
"path": "/api/news/tags?date_range=month",
"status": 200
},
{
- "at": "2026-09-11T15:24:22.914Z",
- "phase": "admin-tab-news",
+ "at": "2026-09-11T15:27:41.460Z",
+ "phase": "admin-tab-pipeline",
"type": "response",
"url": "http://127.0.0.1:7411/api/news?date_range=month",
"path": "/api/news?date_range=month",
"status": 200
},
{
- "at": "2026-09-11T15:24:23.716Z",
+ "at": "2026-09-11T15:27:41.501Z",
"phase": "admin-tab-pipeline",
"type": "response",
"url": "http://127.0.0.1:7411/api/pipeline?status=reviewed&limit=50",
@@ -505,7 +475,15 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:23.716Z",
+ "at": "2026-09-11T15:27:41.501Z",
+ "phase": "admin-tab-pipeline",
+ "type": "response",
+ "url": "http://127.0.0.1:7411/api/pipeline?status=posting&limit=50",
+ "path": "/api/pipeline?status=posting&limit=50",
+ "status": 200
+ },
+ {
+ "at": "2026-09-11T15:27:41.501Z",
"phase": "admin-tab-pipeline",
"type": "response",
"url": "http://127.0.0.1:7411/api/pipeline?status=draft&limit=50",
@@ -513,7 +491,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:23.722Z",
+ "at": "2026-09-11T15:27:41.502Z",
"phase": "admin-tab-pipeline",
"type": "response",
"url": "http://127.0.0.1:7411/api/pipeline?status=approved&limit=50",
@@ -521,15 +499,15 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:23.722Z",
+ "at": "2026-09-11T15:27:41.514Z",
"phase": "admin-tab-pipeline",
"type": "response",
- "url": "http://127.0.0.1:7411/api/pipeline?status=posting&limit=50",
- "path": "/api/pipeline?status=posting&limit=50",
+ "url": "http://127.0.0.1:7411/api/pipeline?status=tracking&limit=50",
+ "path": "/api/pipeline?status=tracking&limit=50",
"status": 200
},
{
- "at": "2026-09-11T15:24:23.722Z",
+ "at": "2026-09-11T15:27:41.514Z",
"phase": "admin-tab-pipeline",
"type": "response",
"url": "http://127.0.0.1:7411/api/pipeline?status=posted&limit=50",
@@ -537,31 +515,23 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:23.722Z",
- "phase": "admin-tab-pipeline",
- "type": "response",
- "url": "http://127.0.0.1:7411/api/scheduled?status=scheduled&limit=50",
- "path": "/api/scheduled?status=scheduled&limit=50",
- "status": 200
- },
- {
- "at": "2026-09-11T15:24:23.722Z",
+ "at": "2026-09-11T15:27:41.553Z",
"phase": "admin-tab-pipeline",
"type": "response",
- "url": "http://127.0.0.1:7411/api/pipeline?status=tracking&limit=50",
- "path": "/api/pipeline?status=tracking&limit=50",
+ "url": "http://127.0.0.1:7411/api/pipeline/stats",
+ "path": "/api/pipeline/stats",
"status": 200
},
{
- "at": "2026-09-11T15:24:23.722Z",
- "phase": "admin-tab-pipeline",
+ "at": "2026-09-11T15:27:41.630Z",
+ "phase": "logout-clears-session",
"type": "response",
- "url": "http://127.0.0.1:7411/api/pipeline/stats",
- "path": "/api/pipeline/stats",
+ "url": "http://127.0.0.1:7411/api/scheduled?status=scheduled&limit=50",
+ "path": "/api/scheduled?status=scheduled&limit=50",
"status": 200
},
{
- "at": "2026-09-11T15:24:24.289Z",
+ "at": "2026-09-11T15:27:41.680Z",
"phase": "logout-clears-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/logout",
@@ -569,7 +539,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:24.438Z",
+ "at": "2026-09-11T15:27:41.721Z",
"phase": "logout-clears-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -593,13 +563,11 @@
"test-results/TK-11315-isolated/chromium/admin-6-before.png",
"test-results/TK-11315-isolated/chromium/admin-6-after.png",
"test-results/TK-11315-isolated/chromium/admin-7-before.png",
- "test-results/TK-11315-isolated/chromium/admin-7-after.png",
- "test-results/TK-11315-isolated/chromium/admin-failure.png"
+ "test-results/TK-11315-isolated/chromium/admin-7-after.png"
],
- "verdict": "FAIL",
+ "verdict": "PASS",
"warnings": [],
- "failure": "Error: [{\"at\":\"2026-09-11T15:24:19.938Z\",\"phase\":\"admin-tab-grants\",\"type\":\"blocked-side-effect\",\"url\":\"http://127.0.0.1:7411/api/grants/suggest\",\"method\":\"POST\"},{\"at\":\"2026-09-11T15:24:20.028Z\",\"phase\":\"admin-tab-grants\",\"type\":\"request-failed\",\"url\":\"http://127.0.0.1:7411/api/grants/suggest\",\"path\":\"/api/grants/suggest\",\"error\":\"net::ERR_BLOCKED_BY_CLIENT.Inspector\",\"prefetch\":false,\"redirectedFrom\":null},{\"at\":\"2026-09-11T15:24:20.028Z\",\"phase\":\"admin-tab-grants\",\"type\":\"console-error\",\"message\":\"Failed to load resource: net::ERR_BLOCKED_BY_CLIENT.Inspector\",\"location\":\"http://127.0.0.1:7411/api/grants/suggest\"},{\"at\":\"2026-09-11T15:24:22.158Z\",\"phase\":\"admin-tab-petitions\",\"type\":\"blocked-side-effect\",\"url\":\"http://127.0.0.1:7411/api/petitions/suggest\",\"method\":\"POST\"},{\"at\":\"2026-09-11T15:24:22.179Z\",\"phase\":\"admin-tab-petitions\",\"type\":\"request-failed\",\"url\":\"http://127.0.0.1:7411/api/petitions/suggest\",\"path\":\"/api/petitions/suggest\",\"error\":\"net::ERR_BLOCKED_BY_CLIENT.Inspector\",\"prefetch\":false,\"redirectedFrom\":null},{\"at\":\"2026-09-11T15:24:22.179Z\",\"phase\":\"admin-tab-petitions\",\"type\":\"console-error\",\"message\":\"Failed to load resource: net::ERR_BLOCKED_BY_CLIENT.Inspector\",\"location\":\"http://127.0.0.1:7411/api/petitions/suggest\"}]\n\nexpect(received).toEqual(expected) // deep equality\n\n- Expected - 1\n+ Received + 50\n\n- Array []\n+ Array [\n+ Object {\n+ \"at\": \"2026-09-11T15:24:19.938Z\",\n+ \"method\": \"POST\",\n+ \"phase\": \"admin-tab-grants\",\n+ \"type\": \"blocked-side-effect\",\n+ \"url\": \"http://127.0.0.1:7411/api/grants/suggest\",\n+ },\n+ Object {\n+ \"at\": \"2026-09-11T15:24:20.028Z\",\n+ \"error\": \"net::ERR_BLOCKED_BY_CLIENT.Inspector\",\n+ \"path\": \"/api/grants/suggest\",\n+ \"phase\": \"admin-tab-grants\",\n+ \"prefetch\": false,\n+ \"redirectedFrom\": null,\n+ \"type\": \"request-failed\",\n+ \"url\": \"http://127.0.0.1:7411/api/grants/suggest\",\n+ },\n+ Object {\n+ \"at\": \"2026-09-11T15:24:20.028Z\",\n+ \"location\": \"http://127.0.0.1:7411/api/grants/suggest\",\n+ \"message\": \"Failed to load resource: net::ERR_BLOCKED_BY_CLIENT.Inspector\",\n+ \"phase\": \"admin-tab-grants\",\n+ \"type\": \"console-error\",\n+ },\n+ Object {\n+ \"at\": \"2026-09-11T15:24:22.158Z\",\n+ \"method\": \"POST\",\n+ \"phase\": \"admin-tab-petitions\",\n+ \"type\": \"blocked-side-effect\",\n+ \"url\": \"http://127.0.0.1:7411/api/petitions/suggest\",\n+ },\n+ Object {\n+ \"at\": \"2026-09-11T15:24:22.179Z\",\n+ \"error\": \"net::ERR_BLOCKED_BY_CLIENT.Inspector\",\n+ \"path\": \"/api/petitions/suggest\",\n+ \"phase\": \"admin-tab-petitions\",\n+ \"prefetch\": false,\n+ \"redirectedFrom\": null,\n+ \"type\": \"request-failed\",\n+ \"url\": \"http://127.0.0.1:7411/api/petitions/suggest\",\n+ },\n+ Object {\n+ \"at\": \"2026-09-11T15:24:22.179Z\",\n+ \"location\": \"http://127.0.0.1:7411/api/petitions/suggest\",\n+ \"message\": \"Failed to load resource: net::ERR_BLOCKED_BY_CLIENT.Inspector\",\n+ \"phase\": \"admin-tab-petitions\",\n+ \"type\": \"console-error\",\n+ },\n+ ]",
- "video": "/Users/macstudio3/Projects/Norma/test-results/TK-11315-isolated/chromium/page@6a4038b9043eeae45dfb2444edbe3b25.webm"
+ "video": "/Users/macstudio3/Projects/Norma/test-results/TK-11315-isolated/chromium/page@9990432086d2a0151622da3e560c20ca.webm"
},
{
"engine": "chromium",
@@ -612,7 +580,7 @@
],
"events": [
{
- "at": "2026-09-11T15:24:25.798Z",
+ "at": "2026-09-11T15:27:42.987Z",
"phase": "login-and-role-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/login",
@@ -620,7 +588,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:25.957Z",
+ "at": "2026-09-11T15:27:43.139Z",
"phase": "login-and-role-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -628,7 +596,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:25.971Z",
+ "at": "2026-09-11T15:27:43.140Z",
"phase": "login-and-role-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -636,7 +604,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:26.015Z",
+ "at": "2026-09-11T15:27:43.158Z",
"phase": "login-and-role-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/accounts",
@@ -644,7 +612,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:26.036Z",
+ "at": "2026-09-11T15:27:43.172Z",
"phase": "login-and-role-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/radar",
@@ -652,23 +620,23 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:26.037Z",
+ "at": "2026-09-11T15:27:43.172Z",
"phase": "login-and-role-session",
"type": "response",
- "url": "http://127.0.0.1:7411/api/pipeline?limit=1",
- "path": "/api/pipeline?limit=1",
+ "url": "http://127.0.0.1:7411/api/petitions?limit=1",
+ "path": "/api/petitions?limit=1",
"status": 200
},
{
- "at": "2026-09-11T15:24:26.037Z",
+ "at": "2026-09-11T15:27:43.173Z",
"phase": "login-and-role-session",
"type": "response",
- "url": "http://127.0.0.1:7411/api/petitions?limit=1",
- "path": "/api/petitions?limit=1",
+ "url": "http://127.0.0.1:7411/api/pipeline?limit=1",
+ "path": "/api/pipeline?limit=1",
"status": 200
},
{
- "at": "2026-09-11T15:24:26.038Z",
+ "at": "2026-09-11T15:27:43.173Z",
"phase": "login-and-role-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/accounts",
@@ -676,7 +644,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:26.084Z",
+ "at": "2026-09-11T15:27:43.208Z",
"phase": "login-and-role-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/news?limit=5",
@@ -684,15 +652,15 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:26.084Z",
- "phase": "login-and-role-session",
+ "at": "2026-09-11T15:27:43.385Z",
+ "phase": "reload-preserves-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/email-sends?limit=50",
"path": "/api/email-sends?limit=50",
"status": 200
},
{
- "at": "2026-09-11T15:24:26.336Z",
+ "at": "2026-09-11T15:27:43.609Z",
"phase": "reload-preserves-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -700,7 +668,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:26.353Z",
+ "at": "2026-09-11T15:27:43.624Z",
"phase": "reload-preserves-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/accounts",
@@ -708,7 +676,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:26.366Z",
+ "at": "2026-09-11T15:27:43.640Z",
"phase": "reload-preserves-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/radar",
@@ -716,7 +684,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:26.367Z",
+ "at": "2026-09-11T15:27:43.642Z",
"phase": "reload-preserves-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/petitions?limit=1",
@@ -724,7 +692,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:26.367Z",
+ "at": "2026-09-11T15:27:43.642Z",
"phase": "reload-preserves-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/pipeline?limit=1",
@@ -732,7 +700,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:26.368Z",
+ "at": "2026-09-11T15:27:43.642Z",
"phase": "reload-preserves-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/email-sends?limit=50",
@@ -740,7 +708,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:26.369Z",
+ "at": "2026-09-11T15:27:43.642Z",
"phase": "reload-preserves-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/news?limit=5",
@@ -748,7 +716,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:26.479Z",
+ "at": "2026-09-11T15:27:43.741Z",
"phase": "reload-preserves-session",
"type": "response",
"url": "https://t0.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=http://theeconomictimes.com&size=24",
@@ -756,14 +724,14 @@
"status": 404
},
{
- "at": "2026-09-11T15:24:26.479Z",
+ "at": "2026-09-11T15:27:43.741Z",
"phase": "reload-preserves-session",
"type": "console-error",
"message": "Failed to load resource: the server responded with a status of 404 ()",
"location": "https://t0.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=http://theeconomictimes.com&size=24"
},
{
- "at": "2026-09-11T15:24:27.022Z",
+ "at": "2026-09-11T15:27:44.250Z",
"phase": "reload-preserves-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -771,7 +739,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:27.676Z",
+ "at": "2026-09-11T15:27:44.711Z",
"phase": "logout-clears-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/logout",
@@ -779,7 +747,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:27.811Z",
+ "at": "2026-09-11T15:27:44.740Z",
"phase": "logout-clears-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/petitions?limit=1",
@@ -787,7 +755,7 @@
"status": 307
},
{
- "at": "2026-09-11T15:24:27.811Z",
+ "at": "2026-09-11T15:27:44.740Z",
"phase": "logout-clears-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/pipeline?limit=1",
@@ -795,15 +763,15 @@
"status": 307
},
{
- "at": "2026-09-11T15:24:27.811Z",
+ "at": "2026-09-11T15:27:44.741Z",
"phase": "logout-clears-session",
"type": "response",
- "url": "http://127.0.0.1:7411/api/intelligence/activity?type=news_trigger,journalist_mention&limit=3",
- "path": "/api/intelligence/activity?type=news_trigger,journalist_mention&limit=3",
+ "url": "http://127.0.0.1:7411/api/radar",
+ "path": "/api/radar",
"status": 307
},
{
- "at": "2026-09-11T15:24:27.811Z",
+ "at": "2026-09-11T15:27:44.742Z",
"phase": "logout-clears-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -811,31 +779,31 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:27.811Z",
+ "at": "2026-09-11T15:27:44.742Z",
"phase": "logout-clears-session",
"type": "response",
- "url": "http://127.0.0.1:7411/api/radar",
- "path": "/api/radar",
+ "url": "http://127.0.0.1:7411/api/admin/impersonate",
+ "path": "/api/admin/impersonate",
"status": 307
},
{
- "at": "2026-09-11T15:24:27.811Z",
+ "at": "2026-09-11T15:27:44.742Z",
"phase": "logout-clears-session",
"type": "response",
- "url": "http://127.0.0.1:7411/api/admin/impersonate",
- "path": "/api/admin/impersonate",
+ "url": "http://127.0.0.1:7411/api/intelligence/briefing?limit=5&strategy=all",
+ "path": "/api/intelligence/briefing?limit=5&strategy=all",
"status": 307
},
{
- "at": "2026-09-11T15:24:27.811Z",
+ "at": "2026-09-11T15:27:44.743Z",
"phase": "logout-clears-session",
"type": "response",
- "url": "http://127.0.0.1:7411/api/intelligence/briefing?limit=5&strategy=all",
- "path": "/api/intelligence/briefing?limit=5&strategy=all",
+ "url": "http://127.0.0.1:7411/api/alerts?categories=news_media,grants,petitions&limit=1",
+ "path": "/api/alerts?categories=news_media,grants,petitions&limit=1",
"status": 307
},
{
- "at": "2026-09-11T15:24:27.812Z",
+ "at": "2026-09-11T15:27:44.743Z",
"phase": "logout-clears-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/sessions",
@@ -843,7 +811,7 @@
"status": 307
},
{
- "at": "2026-09-11T15:24:27.812Z",
+ "at": "2026-09-11T15:27:44.744Z",
"phase": "logout-clears-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/petitions?status=active",
@@ -851,7 +819,7 @@
"status": 307
},
{
- "at": "2026-09-11T15:24:27.812Z",
+ "at": "2026-09-11T15:27:44.744Z",
"phase": "logout-clears-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/grants?upcoming=true",
@@ -859,31 +827,31 @@
"status": 307
},
{
- "at": "2026-09-11T15:24:27.812Z",
+ "at": "2026-09-11T15:27:44.744Z",
"phase": "logout-clears-session",
"type": "response",
- "url": "http://127.0.0.1:7411/api/alerts?limit=10",
- "path": "/api/alerts?limit=10",
+ "url": "http://127.0.0.1:7411/api/intelligence/activity?type=news_trigger,journalist_mention&limit=3",
+ "path": "/api/intelligence/activity?type=news_trigger,journalist_mention&limit=3",
"status": 307
},
{
- "at": "2026-09-11T15:24:27.812Z",
+ "at": "2026-09-11T15:27:44.745Z",
"phase": "logout-clears-session",
"type": "response",
- "url": "http://127.0.0.1:7411/api/alerts?categories=news_media,grants,petitions&limit=1",
- "path": "/api/alerts?categories=news_media,grants,petitions&limit=1",
+ "url": "http://127.0.0.1:7411/api/alerts?categories=news_media&limit=1",
+ "path": "/api/alerts?categories=news_media&limit=1",
"status": 307
},
{
- "at": "2026-09-11T15:24:27.812Z",
+ "at": "2026-09-11T15:27:44.747Z",
"phase": "logout-clears-session",
"type": "response",
- "url": "http://127.0.0.1:7411/api/alerts?categories=news_media&limit=1",
- "path": "/api/alerts?categories=news_media&limit=1",
+ "url": "http://127.0.0.1:7411/api/alerts?limit=10",
+ "path": "/api/alerts?limit=10",
"status": 307
},
{
- "at": "2026-09-11T15:24:27.981Z",
+ "at": "2026-09-11T15:27:44.820Z",
"phase": "logout-clears-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -904,7 +872,7 @@
"verdict": "PASS",
"warnings": [
{
- "at": "2026-09-11T15:24:26.479Z",
+ "at": "2026-09-11T15:27:43.741Z",
"phase": "reload-preserves-session",
"type": "response",
"url": "https://t0.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=http://theeconomictimes.com&size=24",
@@ -912,14 +880,14 @@
"status": 404
},
{
- "at": "2026-09-11T15:24:26.479Z",
+ "at": "2026-09-11T15:27:43.741Z",
"phase": "reload-preserves-session",
"type": "console-error",
"message": "Failed to load resource: the server responded with a status of 404 ()",
"location": "https://t0.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=http://theeconomictimes.com&size=24"
}
],
- "video": "/Users/macstudio3/Projects/Norma/test-results/TK-11315-isolated/chromium/page@b4adee4ee7988799c6a0a63233e9551f.webm"
+ "video": "/Users/macstudio3/Projects/Norma/test-results/TK-11315-isolated/chromium/page@cf5b64b0766019b794dd5e2255a1ab48.webm"
},
{
"engine": "chromium",
@@ -932,7 +900,7 @@
],
"events": [
{
- "at": "2026-09-11T15:24:29.132Z",
+ "at": "2026-09-11T15:27:45.909Z",
"phase": "login-and-role-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/login",
@@ -940,15 +908,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:29.192Z",
- "phase": "login-and-role-session",
- "type": "response",
- "url": "http://127.0.0.1:7411/api/auth/session",
- "path": "/api/auth/session",
- "status": 200
- },
- {
- "at": "2026-09-11T15:24:29.194Z",
+ "at": "2026-09-11T15:27:45.972Z",
"phase": "login-and-role-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -956,7 +916,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:29.194Z",
+ "at": "2026-09-11T15:27:45.972Z",
"phase": "login-and-role-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -964,7 +924,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:29.194Z",
+ "at": "2026-09-11T15:27:45.973Z",
"phase": "login-and-role-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/pulse/petitions?limit=12&sort=featured",
@@ -972,15 +932,15 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:29.209Z",
+ "at": "2026-09-11T15:27:45.978Z",
"phase": "login-and-role-session",
"type": "response",
- "url": "http://127.0.0.1:7411/api/petitions/topics?limit=12&source=pulse&org=false",
- "path": "/api/petitions/topics?limit=12&source=pulse&org=false",
+ "url": "http://127.0.0.1:7411/api/auth/session",
+ "path": "/api/auth/session",
"status": 200
},
{
- "at": "2026-09-11T15:24:29.209Z",
+ "at": "2026-09-11T15:27:46.036Z",
"phase": "login-and-role-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/pulse/tracked?page=1&limit=100",
@@ -988,25 +948,23 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:29.217Z",
- "phase": "login-and-role-session",
+ "at": "2026-09-11T15:27:46.102Z",
+ "phase": "reload-preserves-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/pulse/activity?page=1&limit=100",
"path": "/api/pulse/activity?page=1&limit=100",
"status": 200
},
{
- "at": "2026-09-11T15:24:29.229Z",
- "phase": "login-and-role-session",
- "type": "request-failed",
- "url": "http://127.0.0.1:7411/pulse/petition/64f1e462-50e2-4451-a678-a1288d0500ca?_rsc=kBQU-ReggSCntE0F",
- "path": "/pulse/petition/64f1e462-50e2-4451-a678-a1288d0500ca?_rsc=kBQU-ReggSCntE0F",
- "error": "net::ERR_ABORTED",
- "prefetch": true,
- "redirectedFrom": null
+ "at": "2026-09-11T15:27:46.106Z",
+ "phase": "reload-preserves-session",
+ "type": "response",
+ "url": "http://127.0.0.1:7411/api/petitions/topics?limit=12&source=pulse&org=false",
+ "path": "/api/petitions/topics?limit=12&source=pulse&org=false",
+ "status": 200
},
{
- "at": "2026-09-11T15:24:29.484Z",
+ "at": "2026-09-11T15:27:46.270Z",
"phase": "reload-preserves-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -1014,7 +972,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:29.484Z",
+ "at": "2026-09-11T15:27:46.271Z",
"phase": "reload-preserves-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -1022,7 +980,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:29.488Z",
+ "at": "2026-09-11T15:27:46.273Z",
"phase": "reload-preserves-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/pulse/petitions?limit=12&sort=featured",
@@ -1030,7 +988,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:29.488Z",
+ "at": "2026-09-11T15:27:46.279Z",
"phase": "reload-preserves-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/petitions/topics?limit=12&source=pulse&org=false",
@@ -1038,7 +996,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:29.494Z",
+ "at": "2026-09-11T15:27:46.279Z",
"phase": "reload-preserves-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/pulse/tracked?page=1&limit=100",
@@ -1046,7 +1004,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:29.494Z",
+ "at": "2026-09-11T15:27:46.283Z",
"phase": "reload-preserves-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/pulse/activity?page=1&limit=100",
@@ -1054,7 +1012,17 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:30.026Z",
+ "at": "2026-09-11T15:27:46.298Z",
+ "phase": "reload-preserves-session",
+ "type": "request-failed",
+ "url": "http://127.0.0.1:7411/pulse/petition/64f1e462-50e2-4451-a678-a1288d0500ca?_rsc=kBQU-ReggSCntE0F",
+ "path": "/pulse/petition/64f1e462-50e2-4451-a678-a1288d0500ca?_rsc=kBQU-ReggSCntE0F",
+ "error": "net::ERR_ABORTED",
+ "prefetch": true,
+ "redirectedFrom": null
+ },
+ {
+ "at": "2026-09-11T15:27:46.808Z",
"phase": "reload-preserves-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -1062,7 +1030,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:30.452Z",
+ "at": "2026-09-11T15:27:47.228Z",
"phase": "logout-clears-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/logout",
@@ -1070,7 +1038,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:30.462Z",
+ "at": "2026-09-11T15:27:47.240Z",
"phase": "logout-clears-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -1090,7 +1058,7 @@
],
"verdict": "PASS",
"warnings": [],
- "video": "/Users/macstudio3/Projects/Norma/test-results/TK-11315-isolated/chromium/page@21f1c00dd6bd2eaa55c279662b38aa30.webm"
+ "video": "/Users/macstudio3/Projects/Norma/test-results/TK-11315-isolated/chromium/page@767958a1501af82ae767532ce5bac046.webm"
},
{
"engine": "chromium",
@@ -1100,7 +1068,7 @@
],
"events": [
{
- "at": "2026-09-11T15:24:31.582Z",
+ "at": "2026-09-11T15:27:48.321Z",
"phase": "invalid-credentials",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/login",
@@ -1108,7 +1076,7 @@
"status": 401
},
{
- "at": "2026-09-11T15:24:31.582Z",
+ "at": "2026-09-11T15:27:48.322Z",
"phase": "invalid-credentials",
"type": "console-error",
"message": "Failed to load resource: the server responded with a status of 401 (Unauthorized)",
@@ -1121,7 +1089,7 @@
],
"verdict": "PASS",
"warnings": [],
- "video": "/Users/macstudio3/Projects/Norma/test-results/TK-11315-isolated/chromium/page@7559ba659afc6e2da976b5bfd28ade7f.webm"
+ "video": "/Users/macstudio3/Projects/Norma/test-results/TK-11315-isolated/chromium/page@5bbe5ac3c41abd428280f88ec28678c9.webm"
},
{
"engine": "webkit",
@@ -1135,7 +1103,7 @@
],
"events": [
{
- "at": "2026-09-11T15:24:34.627Z",
+ "at": "2026-09-11T15:27:50.247Z",
"phase": "entry",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -1143,7 +1111,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:34.631Z",
+ "at": "2026-09-11T15:27:50.247Z",
"phase": "entry",
"type": "response",
"url": "http://127.0.0.1:7411/api/petitions/topics?limit=12&source=pulse&org=false",
@@ -1151,7 +1119,7 @@
"status": 307
},
{
- "at": "2026-09-11T15:24:34.631Z",
+ "at": "2026-09-11T15:27:50.247Z",
"phase": "entry",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -1159,7 +1127,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:34.751Z",
+ "at": "2026-09-11T15:27:50.248Z",
"phase": "entry",
"type": "response",
"url": "http://127.0.0.1:7411/api/pulse/petitions?limit=12&sort=featured",
@@ -1167,7 +1135,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:35.722Z",
+ "at": "2026-09-11T15:27:51.148Z",
"phase": "theme-controls-and-persistence",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -1175,7 +1143,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:35.722Z",
+ "at": "2026-09-11T15:27:51.148Z",
"phase": "theme-controls-and-persistence",
"type": "response",
"url": "http://127.0.0.1:7411/api/petitions/topics?limit=12&source=pulse&org=false",
@@ -1183,7 +1151,7 @@
"status": 307
},
{
- "at": "2026-09-11T15:24:35.722Z",
+ "at": "2026-09-11T15:27:51.149Z",
"phase": "theme-controls-and-persistence",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -1191,7 +1159,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:35.722Z",
+ "at": "2026-09-11T15:27:51.150Z",
"phase": "theme-controls-and-persistence",
"type": "response",
"url": "http://127.0.0.1:7411/api/pulse/petitions?limit=12&sort=featured",
@@ -1199,7 +1167,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:36.958Z",
+ "at": "2026-09-11T15:27:52.423Z",
"phase": "petition-list-spa-and-search",
"type": "response",
"url": "http://127.0.0.1:7411/api/pulse/petitions?limit=12&offset=0&sort=featured",
@@ -1207,7 +1175,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:36.978Z",
+ "at": "2026-09-11T15:27:52.443Z",
"phase": "petition-list-spa-and-search",
"type": "response",
"url": "http://127.0.0.1:7411/api/pulse/petitions?limit=12&offset=0&sort=featured&search=tk11315-no-such-petition-8b7c",
@@ -1215,7 +1183,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:36.996Z",
+ "at": "2026-09-11T15:27:52.460Z",
"phase": "petition-list-spa-and-search",
"type": "response",
"url": "http://127.0.0.1:7411/api/pulse/petitions?limit=12&offset=0&sort=featured",
@@ -1223,7 +1191,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:37.520Z",
+ "at": "2026-09-11T15:27:52.943Z",
"phase": "mobile-menu-and-home",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -1231,7 +1199,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:37.527Z",
+ "at": "2026-09-11T15:27:52.943Z",
"phase": "mobile-menu-and-home",
"type": "response",
"url": "http://127.0.0.1:7411/api/petitions/topics?limit=12&source=pulse&org=false",
@@ -1239,7 +1207,7 @@
"status": 307
},
{
- "at": "2026-09-11T15:24:37.527Z",
+ "at": "2026-09-11T15:27:52.943Z",
"phase": "mobile-menu-and-home",
"type": "response",
"url": "http://127.0.0.1:7411/api/pulse/petitions?limit=12&sort=featured",
@@ -1262,7 +1230,7 @@
"verdict": "PASS",
"guestTopicsStatus": 307,
"warnings": [],
- "video": "/Users/macstudio3/Projects/Norma/test-results/TK-11315-isolated/webkit/page@c76185dd4aa3b76a34e6f0c39538000c.webm"
+ "video": "/Users/macstudio3/Projects/Norma/test-results/TK-11315-isolated/webkit/page@295490f4c6512db6aa63c5fd154f820d.webm"
},
{
"engine": "webkit",
@@ -1279,7 +1247,7 @@
],
"events": [
{
- "at": "2026-09-11T15:24:38.823Z",
+ "at": "2026-09-11T15:27:54.153Z",
"phase": "login-and-role-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/login",
@@ -1287,7 +1255,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:38.950Z",
+ "at": "2026-09-11T15:27:54.269Z",
"phase": "login-and-role-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -1295,7 +1263,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:38.959Z",
+ "at": "2026-09-11T15:27:54.278Z",
"phase": "login-and-role-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -1303,7 +1271,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:39.012Z",
+ "at": "2026-09-11T15:27:54.304Z",
"phase": "login-and-role-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/admin/impersonate",
@@ -1311,7 +1279,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:39.013Z",
+ "at": "2026-09-11T15:27:54.307Z",
"phase": "login-and-role-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/admin/impersonate",
@@ -1319,7 +1287,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:39.023Z",
+ "at": "2026-09-11T15:27:54.308Z",
"phase": "login-and-role-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -1327,7 +1295,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:39.023Z",
+ "at": "2026-09-11T15:27:54.308Z",
"phase": "login-and-role-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -1335,7 +1303,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:39.023Z",
+ "at": "2026-09-11T15:27:54.308Z",
"phase": "login-and-role-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/accounts",
@@ -1343,7 +1311,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:39.256Z",
+ "at": "2026-09-11T15:27:54.545Z",
"phase": "reload-preserves-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -1351,15 +1319,15 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:39.275Z",
+ "at": "2026-09-11T15:27:54.569Z",
"phase": "reload-preserves-session",
"type": "response",
- "url": "http://127.0.0.1:7411/api/auth/session",
- "path": "/api/auth/session",
+ "url": "http://127.0.0.1:7411/api/admin/impersonate",
+ "path": "/api/admin/impersonate",
"status": 200
},
{
- "at": "2026-09-11T15:24:39.280Z",
+ "at": "2026-09-11T15:27:54.570Z",
"phase": "reload-preserves-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/admin/impersonate",
@@ -1367,15 +1335,15 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:39.281Z",
+ "at": "2026-09-11T15:27:54.570Z",
"phase": "reload-preserves-session",
"type": "response",
- "url": "http://127.0.0.1:7411/api/admin/impersonate",
- "path": "/api/admin/impersonate",
+ "url": "http://127.0.0.1:7411/api/auth/session",
+ "path": "/api/auth/session",
"status": 200
},
{
- "at": "2026-09-11T15:24:39.283Z",
+ "at": "2026-09-11T15:27:54.570Z",
"phase": "reload-preserves-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -1383,7 +1351,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:39.285Z",
+ "at": "2026-09-11T15:27:54.572Z",
"phase": "reload-preserves-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/accounts",
@@ -1391,7 +1359,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:39.801Z",
+ "at": "2026-09-11T15:27:55.096Z",
"phase": "reload-preserves-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -1399,7 +1367,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:40.061Z",
+ "at": "2026-09-11T15:27:55.319Z",
"phase": "select-sandbox-organization",
"type": "response",
"url": "http://127.0.0.1:7411/api/radar",
@@ -1407,7 +1375,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:40.061Z",
+ "at": "2026-09-11T15:27:55.319Z",
"phase": "select-sandbox-organization",
"type": "response",
"url": "http://127.0.0.1:7411/api/pipeline?limit=1",
@@ -1415,15 +1383,15 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:40.062Z",
+ "at": "2026-09-11T15:27:55.319Z",
"phase": "select-sandbox-organization",
"type": "response",
- "url": "http://127.0.0.1:7411/api/petitions?limit=1",
- "path": "/api/petitions?limit=1",
+ "url": "http://127.0.0.1:7411/api/intelligence/briefing?limit=5&strategy=all",
+ "path": "/api/intelligence/briefing?limit=5&strategy=all",
"status": 200
},
{
- "at": "2026-09-11T15:24:40.062Z",
+ "at": "2026-09-11T15:27:55.319Z",
"phase": "select-sandbox-organization",
"type": "response",
"url": "http://127.0.0.1:7411/api/intelligence/activity?type=news_trigger,journalist_mention&limit=3",
@@ -1431,63 +1399,63 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:40.062Z",
+ "at": "2026-09-11T15:27:55.319Z",
"phase": "select-sandbox-organization",
"type": "response",
- "url": "http://127.0.0.1:7411/api/alerts?categories=news_media,grants,petitions&limit=1",
- "path": "/api/alerts?categories=news_media,grants,petitions&limit=1",
+ "url": "http://127.0.0.1:7411/api/petitions?limit=1",
+ "path": "/api/petitions?limit=1",
"status": 200
},
{
- "at": "2026-09-11T15:24:40.062Z",
+ "at": "2026-09-11T15:27:55.319Z",
"phase": "select-sandbox-organization",
"type": "response",
- "url": "http://127.0.0.1:7411/api/petitions?status=active",
- "path": "/api/petitions?status=active",
+ "url": "http://127.0.0.1:7411/api/alerts?categories=news_media,grants,petitions&limit=1",
+ "path": "/api/alerts?categories=news_media,grants,petitions&limit=1",
"status": 200
},
{
- "at": "2026-09-11T15:24:40.062Z",
+ "at": "2026-09-11T15:27:55.319Z",
"phase": "select-sandbox-organization",
"type": "response",
- "url": "http://127.0.0.1:7411/api/grants?upcoming=true",
- "path": "/api/grants?upcoming=true",
+ "url": "http://127.0.0.1:7411/api/sessions",
+ "path": "/api/sessions",
"status": 200
},
{
- "at": "2026-09-11T15:24:40.067Z",
+ "at": "2026-09-11T15:27:55.320Z",
"phase": "select-sandbox-organization",
"type": "response",
- "url": "http://127.0.0.1:7411/api/intelligence/briefing?limit=5&strategy=all",
- "path": "/api/intelligence/briefing?limit=5&strategy=all",
+ "url": "http://127.0.0.1:7411/api/petitions?status=active",
+ "path": "/api/petitions?status=active",
"status": 200
},
{
- "at": "2026-09-11T15:24:40.067Z",
+ "at": "2026-09-11T15:27:55.320Z",
"phase": "select-sandbox-organization",
"type": "response",
- "url": "http://127.0.0.1:7411/api/alerts?categories=news_media&limit=1",
- "path": "/api/alerts?categories=news_media&limit=1",
+ "url": "http://127.0.0.1:7411/api/accounts",
+ "path": "/api/accounts",
"status": 200
},
{
- "at": "2026-09-11T15:24:40.077Z",
+ "at": "2026-09-11T15:27:55.320Z",
"phase": "select-sandbox-organization",
"type": "response",
- "url": "http://127.0.0.1:7411/api/accounts",
- "path": "/api/accounts",
+ "url": "http://127.0.0.1:7411/api/grants?upcoming=true",
+ "path": "/api/grants?upcoming=true",
"status": 200
},
{
- "at": "2026-09-11T15:24:40.077Z",
+ "at": "2026-09-11T15:27:55.320Z",
"phase": "select-sandbox-organization",
"type": "response",
- "url": "http://127.0.0.1:7411/api/sessions",
- "path": "/api/sessions",
+ "url": "http://127.0.0.1:7411/api/alerts?categories=news_media&limit=1",
+ "path": "/api/alerts?categories=news_media&limit=1",
"status": 200
},
{
- "at": "2026-09-11T15:24:40.083Z",
+ "at": "2026-09-11T15:27:55.320Z",
"phase": "select-sandbox-organization",
"type": "response",
"url": "http://127.0.0.1:7411/api/alerts?limit=10",
@@ -1495,32 +1463,23 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:40.334Z",
+ "at": "2026-09-11T15:27:55.576Z",
"phase": "admin-tab-grants",
- "type": "blocked-side-effect",
- "url": "http://127.0.0.1:7411/api/grants/suggest",
- "method": "POST"
+ "type": "response",
+ "url": "http://127.0.0.1:7411/api/grants/calendar?month=2026-09",
+ "path": "/api/grants/calendar?month=2026-09",
+ "status": 200
},
{
- "at": "2026-09-11T15:24:40.364Z",
+ "at": "2026-09-11T15:27:55.576Z",
"phase": "admin-tab-grants",
- "type": "request-failed",
+ "type": "response",
"url": "http://127.0.0.1:7411/api/grants/suggest",
"path": "/api/grants/suggest",
- "error": "Blocked by Web Inspector",
- "prefetch": false,
- "redirectedFrom": null
- },
- {
- "at": "2026-09-11T15:24:40.364Z",
- "phase": "admin-tab-grants",
- "type": "response",
- "url": "http://127.0.0.1:7411/api/grants/calendar?month=2026-09",
- "path": "/api/grants/calendar?month=2026-09",
"status": 200
},
{
- "at": "2026-09-11T15:24:40.364Z",
+ "at": "2026-09-11T15:27:55.576Z",
"phase": "admin-tab-grants",
"type": "response",
"url": "http://127.0.0.1:7411/api/grants?sort=deadline",
@@ -1528,32 +1487,31 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:40.609Z",
+ "at": "2026-09-11T15:27:55.831Z",
"phase": "admin-tab-petitions",
- "type": "blocked-side-effect",
- "url": "http://127.0.0.1:7411/api/petitions/suggest",
- "method": "POST"
+ "type": "response",
+ "url": "http://127.0.0.1:7411/api/donations/insights",
+ "path": "/api/donations/insights",
+ "status": 200
},
{
- "at": "2026-09-11T15:24:40.614Z",
+ "at": "2026-09-11T15:27:55.831Z",
"phase": "admin-tab-petitions",
- "type": "request-failed",
+ "type": "response",
"url": "http://127.0.0.1:7411/api/petitions/suggest",
"path": "/api/petitions/suggest",
- "error": "Blocked by Web Inspector",
- "prefetch": false,
- "redirectedFrom": null
+ "status": 200
},
{
- "at": "2026-09-11T15:24:40.620Z",
+ "at": "2026-09-11T15:27:55.832Z",
"phase": "admin-tab-petitions",
"type": "response",
- "url": "http://127.0.0.1:7411/api/donations/insights",
- "path": "/api/donations/insights",
+ "url": "http://127.0.0.1:7411/api/donations?from=2026-09-01",
+ "path": "/api/donations?from=2026-09-01",
"status": 200
},
{
- "at": "2026-09-11T15:24:40.622Z",
+ "at": "2026-09-11T15:27:55.832Z",
"phase": "admin-tab-petitions",
"type": "response",
"url": "http://127.0.0.1:7411/api/petitions",
@@ -1561,15 +1519,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:40.622Z",
- "phase": "admin-tab-petitions",
- "type": "response",
- "url": "http://127.0.0.1:7411/api/donations?from=2026-09-01",
- "path": "/api/donations?from=2026-09-01",
- "status": 200
- },
- {
- "at": "2026-09-11T15:24:40.923Z",
+ "at": "2026-09-11T15:27:56.076Z",
"phase": "admin-tab-news",
"type": "response",
"url": "http://127.0.0.1:7411/api/news/outlets",
@@ -1577,7 +1527,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:40.926Z",
+ "at": "2026-09-11T15:27:56.091Z",
"phase": "admin-tab-news",
"type": "response",
"url": "http://127.0.0.1:7411/api/news/tags?date_range=month",
@@ -1585,7 +1535,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:40.928Z",
+ "at": "2026-09-11T15:27:56.091Z",
"phase": "admin-tab-news",
"type": "response",
"url": "http://127.0.0.1:7411/api/news?date_range=month",
@@ -1593,47 +1543,47 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:41.154Z",
+ "at": "2026-09-11T15:27:56.483Z",
"phase": "admin-tab-pipeline",
"type": "response",
- "url": "http://127.0.0.1:7411/api/pipeline?status=draft&limit=50",
- "path": "/api/pipeline?status=draft&limit=50",
+ "url": "http://127.0.0.1:7411/api/scheduled?status=scheduled&limit=50",
+ "path": "/api/scheduled?status=scheduled&limit=50",
"status": 200
},
{
- "at": "2026-09-11T15:24:41.154Z",
+ "at": "2026-09-11T15:27:56.483Z",
"phase": "admin-tab-pipeline",
"type": "response",
- "url": "http://127.0.0.1:7411/api/pipeline?status=reviewed&limit=50",
- "path": "/api/pipeline?status=reviewed&limit=50",
+ "url": "http://127.0.0.1:7411/api/pipeline?status=approved&limit=50",
+ "path": "/api/pipeline?status=approved&limit=50",
"status": 200
},
{
- "at": "2026-09-11T15:24:41.156Z",
+ "at": "2026-09-11T15:27:56.483Z",
"phase": "admin-tab-pipeline",
"type": "response",
- "url": "http://127.0.0.1:7411/api/pipeline?status=approved&limit=50",
- "path": "/api/pipeline?status=approved&limit=50",
+ "url": "http://127.0.0.1:7411/api/pipeline?status=reviewed&limit=50",
+ "path": "/api/pipeline?status=reviewed&limit=50",
"status": 200
},
{
- "at": "2026-09-11T15:24:41.156Z",
+ "at": "2026-09-11T15:27:56.483Z",
"phase": "admin-tab-pipeline",
"type": "response",
- "url": "http://127.0.0.1:7411/api/pipeline?status=posting&limit=50",
- "path": "/api/pipeline?status=posting&limit=50",
+ "url": "http://127.0.0.1:7411/api/pipeline?status=draft&limit=50",
+ "path": "/api/pipeline?status=draft&limit=50",
"status": 200
},
{
- "at": "2026-09-11T15:24:41.156Z",
+ "at": "2026-09-11T15:27:56.483Z",
"phase": "admin-tab-pipeline",
"type": "response",
- "url": "http://127.0.0.1:7411/api/scheduled?status=scheduled&limit=50",
- "path": "/api/scheduled?status=scheduled&limit=50",
+ "url": "http://127.0.0.1:7411/api/pipeline?status=posting&limit=50",
+ "path": "/api/pipeline?status=posting&limit=50",
"status": 200
},
{
- "at": "2026-09-11T15:24:41.156Z",
+ "at": "2026-09-11T15:27:56.483Z",
"phase": "admin-tab-pipeline",
"type": "response",
"url": "http://127.0.0.1:7411/api/pipeline?status=posted&limit=50",
@@ -1641,7 +1591,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:41.158Z",
+ "at": "2026-09-11T15:27:56.484Z",
"phase": "admin-tab-pipeline",
"type": "response",
"url": "http://127.0.0.1:7411/api/pipeline?status=tracking&limit=50",
@@ -1649,7 +1599,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:41.158Z",
+ "at": "2026-09-11T15:27:56.484Z",
"phase": "admin-tab-pipeline",
"type": "response",
"url": "http://127.0.0.1:7411/api/pipeline/stats",
@@ -1657,7 +1607,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:41.484Z",
+ "at": "2026-09-11T15:27:57.021Z",
"phase": "logout-clears-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/logout",
@@ -1665,7 +1615,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:41.551Z",
+ "at": "2026-09-11T15:27:57.149Z",
"phase": "logout-clears-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -1689,13 +1639,11 @@
"test-results/TK-11315-isolated/webkit/admin-6-before.png",
"test-results/TK-11315-isolated/webkit/admin-6-after.png",
"test-results/TK-11315-isolated/webkit/admin-7-before.png",
- "test-results/TK-11315-isolated/webkit/admin-7-after.png",
- "test-results/TK-11315-isolated/webkit/admin-failure.png"
+ "test-results/TK-11315-isolated/webkit/admin-7-after.png"
],
- "verdict": "FAIL",
+ "verdict": "PASS",
"warnings": [],
- "failure": "Error: [{\"at\":\"2026-09-11T15:24:40.334Z\",\"phase\":\"admin-tab-grants\",\"type\":\"blocked-side-effect\",\"url\":\"http://127.0.0.1:7411/api/grants/suggest\",\"method\":\"POST\"},{\"at\":\"2026-09-11T15:24:40.364Z\",\"phase\":\"admin-tab-grants\",\"type\":\"request-failed\",\"url\":\"http://127.0.0.1:7411/api/grants/suggest\",\"path\":\"/api/grants/suggest\",\"error\":\"Blocked by Web Inspector\",\"prefetch\":false,\"redirectedFrom\":null},{\"at\":\"2026-09-11T15:24:40.609Z\",\"phase\":\"admin-tab-petitions\",\"type\":\"blocked-side-effect\",\"url\":\"http://127.0.0.1:7411/api/petitions/suggest\",\"method\":\"POST\"},{\"at\":\"2026-09-11T15:24:40.614Z\",\"phase\":\"admin-tab-petitions\",\"type\":\"request-failed\",\"url\":\"http://127.0.0.1:7411/api/petitions/suggest\",\"path\":\"/api/petitions/suggest\",\"error\":\"Blocked by Web Inspector\",\"prefetch\":false,\"redirectedFrom\":null}]\n\nexpect(received).toEqual(expected) // deep equality\n\n- Expected - 1\n+ Received + 36\n\n- Array []\n+ Array [\n+ Object {\n+ \"at\": \"2026-09-11T15:24:40.334Z\",\n+ \"method\": \"POST\",\n+ \"phase\": \"admin-tab-grants\",\n+ \"type\": \"blocked-side-effect\",\n+ \"url\": \"http://127.0.0.1:7411/api/grants/suggest\",\n+ },\n+ Object {\n+ \"at\": \"2026-09-11T15:24:40.364Z\",\n+ \"error\": \"Blocked by Web Inspector\",\n+ \"path\": \"/api/grants/suggest\",\n+ \"phase\": \"admin-tab-grants\",\n+ \"prefetch\": false,\n+ \"redirectedFrom\": null,\n+ \"type\": \"request-failed\",\n+ \"url\": \"http://127.0.0.1:7411/api/grants/suggest\",\n+ },\n+ Object {\n+ \"at\": \"2026-09-11T15:24:40.609Z\",\n+ \"method\": \"POST\",\n+ \"phase\": \"admin-tab-petitions\",\n+ \"type\": \"blocked-side-effect\",\n+ \"url\": \"http://127.0.0.1:7411/api/petitions/suggest\",\n+ },\n+ Object {\n+ \"at\": \"2026-09-11T15:24:40.614Z\",\n+ \"error\": \"Blocked by Web Inspector\",\n+ \"path\": \"/api/petitions/suggest\",\n+ \"phase\": \"admin-tab-petitions\",\n+ \"prefetch\": false,\n+ \"redirectedFrom\": null,\n+ \"type\": \"request-failed\",\n+ \"url\": \"http://127.0.0.1:7411/api/petitions/suggest\",\n+ },\n+ ]",
- "video": "/Users/macstudio3/Projects/Norma/test-results/TK-11315-isolated/webkit/page@91fe4847907bf0c7157f2518fd730fb9.webm"
+ "video": "/Users/macstudio3/Projects/Norma/test-results/TK-11315-isolated/webkit/page@979f746d2fa0db8c717515ab3abd0d97.webm"
},
{
"engine": "webkit",
@@ -1708,7 +1656,7 @@
],
"events": [
{
- "at": "2026-09-11T15:24:42.816Z",
+ "at": "2026-09-11T15:27:58.319Z",
"phase": "login-and-role-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/login",
@@ -1716,7 +1664,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:42.934Z",
+ "at": "2026-09-11T15:27:58.432Z",
"phase": "login-and-role-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -1724,7 +1672,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:42.934Z",
+ "at": "2026-09-11T15:27:58.432Z",
"phase": "login-and-role-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -1732,7 +1680,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:42.985Z",
+ "at": "2026-09-11T15:27:58.485Z",
"phase": "login-and-role-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/accounts",
@@ -1740,23 +1688,23 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:43.004Z",
+ "at": "2026-09-11T15:27:58.550Z",
"phase": "login-and-role-session",
"type": "response",
- "url": "http://127.0.0.1:7411/api/accounts",
- "path": "/api/accounts",
+ "url": "http://127.0.0.1:7411/api/pipeline?limit=1",
+ "path": "/api/pipeline?limit=1",
"status": 200
},
{
- "at": "2026-09-11T15:24:43.004Z",
+ "at": "2026-09-11T15:27:58.550Z",
"phase": "login-and-role-session",
"type": "response",
- "url": "http://127.0.0.1:7411/api/pipeline?limit=1",
- "path": "/api/pipeline?limit=1",
+ "url": "http://127.0.0.1:7411/api/accounts",
+ "path": "/api/accounts",
"status": 200
},
{
- "at": "2026-09-11T15:24:43.004Z",
+ "at": "2026-09-11T15:27:58.550Z",
"phase": "login-and-role-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/petitions?limit=1",
@@ -1764,7 +1712,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:43.004Z",
+ "at": "2026-09-11T15:27:58.550Z",
"phase": "login-and-role-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/news?limit=5",
@@ -1772,7 +1720,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:43.004Z",
+ "at": "2026-09-11T15:27:58.551Z",
"phase": "login-and-role-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/email-sends?limit=50",
@@ -1780,7 +1728,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:43.064Z",
+ "at": "2026-09-11T15:27:58.551Z",
"phase": "login-and-role-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/radar",
@@ -1788,57 +1736,57 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:43.139Z",
+ "at": "2026-09-11T15:27:58.661Z",
"phase": "reload-preserves-session",
"type": "request-failed",
- "url": "https://www.google.com/s2/favicons?domain=nerdwallet.com&sz=24",
- "path": "/s2/favicons?domain=nerdwallet.com&sz=24",
+ "url": "https://t1.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=http://aolcom.com&size=24",
+ "path": "/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=http://aolcom.com&size=24",
"error": "cancelled",
"prefetch": false,
- "redirectedFrom": null
+ "redirectedFrom": "/s2/favicons?domain=aolcom.com&sz=24"
},
{
- "at": "2026-09-11T15:24:43.155Z",
+ "at": "2026-09-11T15:27:58.661Z",
"phase": "reload-preserves-session",
"type": "request-failed",
- "url": "https://www.google.com/s2/favicons?domain=wftv.com&sz=24",
- "path": "/s2/favicons?domain=wftv.com&sz=24",
+ "url": "https://t0.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=http://theeconomictimes.com&size=24",
+ "path": "/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=http://theeconomictimes.com&size=24",
"error": "cancelled",
"prefetch": false,
- "redirectedFrom": null
+ "redirectedFrom": "/s2/favicons?domain=theeconomictimes.com&sz=24"
},
{
- "at": "2026-09-11T15:24:43.155Z",
+ "at": "2026-09-11T15:27:58.661Z",
"phase": "reload-preserves-session",
"type": "request-failed",
- "url": "https://www.google.com/s2/favicons?domain=cnbc.com&sz=24",
- "path": "/s2/favicons?domain=cnbc.com&sz=24",
+ "url": "https://t3.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=http://nerdwallet.com&size=24",
+ "path": "/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=http://nerdwallet.com&size=24",
"error": "cancelled",
"prefetch": false,
- "redirectedFrom": null
+ "redirectedFrom": "/s2/favicons?domain=nerdwallet.com&sz=24"
},
{
- "at": "2026-09-11T15:24:43.155Z",
+ "at": "2026-09-11T15:27:58.661Z",
"phase": "reload-preserves-session",
"type": "request-failed",
- "url": "https://www.google.com/s2/favicons?domain=aolcom.com&sz=24",
- "path": "/s2/favicons?domain=aolcom.com&sz=24",
+ "url": "https://t3.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=http://cnbc.com&size=24",
+ "path": "/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=http://cnbc.com&size=24",
"error": "cancelled",
"prefetch": false,
- "redirectedFrom": null
+ "redirectedFrom": "/s2/favicons?domain=cnbc.com&sz=24"
},
{
- "at": "2026-09-11T15:24:43.155Z",
+ "at": "2026-09-11T15:27:58.662Z",
"phase": "reload-preserves-session",
"type": "request-failed",
- "url": "https://www.google.com/s2/favicons?domain=theeconomictimes.com&sz=24",
- "path": "/s2/favicons?domain=theeconomictimes.com&sz=24",
+ "url": "https://t0.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=http://wftv.com&size=24",
+ "path": "/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=http://wftv.com&size=24",
"error": "cancelled",
"prefetch": false,
- "redirectedFrom": null
+ "redirectedFrom": "/s2/favicons?domain=wftv.com&sz=24"
},
{
- "at": "2026-09-11T15:24:43.274Z",
+ "at": "2026-09-11T15:27:58.767Z",
"phase": "reload-preserves-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -1846,7 +1794,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:43.293Z",
+ "at": "2026-09-11T15:27:58.786Z",
"phase": "reload-preserves-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/accounts",
@@ -1854,7 +1802,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:43.321Z",
+ "at": "2026-09-11T15:27:58.818Z",
"phase": "reload-preserves-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/radar",
@@ -1862,7 +1810,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:43.325Z",
+ "at": "2026-09-11T15:27:58.819Z",
"phase": "reload-preserves-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/petitions?limit=1",
@@ -1870,31 +1818,31 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:43.325Z",
+ "at": "2026-09-11T15:27:58.819Z",
"phase": "reload-preserves-session",
"type": "response",
- "url": "http://127.0.0.1:7411/api/pipeline?limit=1",
- "path": "/api/pipeline?limit=1",
+ "url": "http://127.0.0.1:7411/api/email-sends?limit=50",
+ "path": "/api/email-sends?limit=50",
"status": 200
},
{
- "at": "2026-09-11T15:24:43.325Z",
+ "at": "2026-09-11T15:27:58.819Z",
"phase": "reload-preserves-session",
"type": "response",
- "url": "http://127.0.0.1:7411/api/email-sends?limit=50",
- "path": "/api/email-sends?limit=50",
+ "url": "http://127.0.0.1:7411/api/news?limit=5",
+ "path": "/api/news?limit=5",
"status": 200
},
{
- "at": "2026-09-11T15:24:43.326Z",
+ "at": "2026-09-11T15:27:58.819Z",
"phase": "reload-preserves-session",
"type": "response",
- "url": "http://127.0.0.1:7411/api/news?limit=5",
- "path": "/api/news?limit=5",
+ "url": "http://127.0.0.1:7411/api/pipeline?limit=1",
+ "path": "/api/pipeline?limit=1",
"status": 200
},
{
- "at": "2026-09-11T15:24:43.434Z",
+ "at": "2026-09-11T15:27:58.925Z",
"phase": "reload-preserves-session",
"type": "response",
"url": "https://t0.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=http://theeconomictimes.com&size=24",
@@ -1902,14 +1850,14 @@
"status": 404
},
{
- "at": "2026-09-11T15:24:43.434Z",
+ "at": "2026-09-11T15:27:58.925Z",
"phase": "reload-preserves-session",
"type": "console-error",
"message": "Failed to load resource: the server responded with a status of 404 ()",
"location": "https://t0.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=http://theeconomictimes.com&size=24"
},
{
- "at": "2026-09-11T15:24:43.987Z",
+ "at": "2026-09-11T15:27:59.443Z",
"phase": "reload-preserves-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -1917,7 +1865,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:45.241Z",
+ "at": "2026-09-11T15:27:59.893Z",
"phase": "logout-clears-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/logout",
@@ -1925,7 +1873,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:45.464Z",
+ "at": "2026-09-11T15:27:59.936Z",
"phase": "logout-clears-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/petitions?limit=1",
@@ -1933,7 +1881,7 @@
"status": 307
},
{
- "at": "2026-09-11T15:24:45.464Z",
+ "at": "2026-09-11T15:27:59.936Z",
"phase": "logout-clears-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/pipeline?limit=1",
@@ -1941,7 +1889,7 @@
"status": 307
},
{
- "at": "2026-09-11T15:24:45.466Z",
+ "at": "2026-09-11T15:27:59.936Z",
"phase": "logout-clears-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/radar",
@@ -1949,7 +1897,7 @@
"status": 307
},
{
- "at": "2026-09-11T15:24:45.473Z",
+ "at": "2026-09-11T15:27:59.936Z",
"phase": "logout-clears-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -1957,7 +1905,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:45.473Z",
+ "at": "2026-09-11T15:27:59.936Z",
"phase": "logout-clears-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/admin/impersonate",
@@ -1965,7 +1913,7 @@
"status": 307
},
{
- "at": "2026-09-11T15:24:45.473Z",
+ "at": "2026-09-11T15:27:59.937Z",
"phase": "logout-clears-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/intelligence/briefing?limit=5&strategy=all",
@@ -1973,7 +1921,7 @@
"status": 307
},
{
- "at": "2026-09-11T15:24:45.473Z",
+ "at": "2026-09-11T15:27:59.937Z",
"phase": "logout-clears-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/alerts?categories=news_media,grants,petitions&limit=1",
@@ -1981,15 +1929,7 @@
"status": 307
},
{
- "at": "2026-09-11T15:24:45.473Z",
- "phase": "logout-clears-session",
- "type": "response",
- "url": "http://127.0.0.1:7411/api/intelligence/activity?type=news_trigger,journalist_mention&limit=3",
- "path": "/api/intelligence/activity?type=news_trigger,journalist_mention&limit=3",
- "status": 307
- },
- {
- "at": "2026-09-11T15:24:45.474Z",
+ "at": "2026-09-11T15:27:59.937Z",
"phase": "logout-clears-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/sessions",
@@ -1997,7 +1937,7 @@
"status": 307
},
{
- "at": "2026-09-11T15:24:45.474Z",
+ "at": "2026-09-11T15:27:59.937Z",
"phase": "logout-clears-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/petitions?status=active",
@@ -2005,7 +1945,7 @@
"status": 307
},
{
- "at": "2026-09-11T15:24:45.474Z",
+ "at": "2026-09-11T15:27:59.938Z",
"phase": "logout-clears-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/grants?upcoming=true",
@@ -2013,15 +1953,15 @@
"status": 307
},
{
- "at": "2026-09-11T15:24:45.474Z",
+ "at": "2026-09-11T15:27:59.938Z",
"phase": "logout-clears-session",
"type": "response",
- "url": "http://127.0.0.1:7411/api/alerts?limit=10",
- "path": "/api/alerts?limit=10",
+ "url": "http://127.0.0.1:7411/api/intelligence/activity?type=news_trigger,journalist_mention&limit=3",
+ "path": "/api/intelligence/activity?type=news_trigger,journalist_mention&limit=3",
"status": 307
},
{
- "at": "2026-09-11T15:24:45.474Z",
+ "at": "2026-09-11T15:27:59.939Z",
"phase": "logout-clears-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/alerts?categories=news_media&limit=1",
@@ -2029,7 +1969,15 @@
"status": 307
},
{
- "at": "2026-09-11T15:24:45.680Z",
+ "at": "2026-09-11T15:27:59.940Z",
+ "phase": "logout-clears-session",
+ "type": "response",
+ "url": "http://127.0.0.1:7411/api/alerts?limit=10",
+ "path": "/api/alerts?limit=10",
+ "status": 307
+ },
+ {
+ "at": "2026-09-11T15:27:59.972Z",
"phase": "logout-clears-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -2050,57 +1998,57 @@
"verdict": "PASS",
"warnings": [
{
- "at": "2026-09-11T15:24:43.139Z",
+ "at": "2026-09-11T15:27:58.661Z",
"phase": "reload-preserves-session",
"type": "request-failed",
- "url": "https://www.google.com/s2/favicons?domain=nerdwallet.com&sz=24",
- "path": "/s2/favicons?domain=nerdwallet.com&sz=24",
+ "url": "https://t1.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=http://aolcom.com&size=24",
+ "path": "/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=http://aolcom.com&size=24",
"error": "cancelled",
"prefetch": false,
- "redirectedFrom": null
+ "redirectedFrom": "/s2/favicons?domain=aolcom.com&sz=24"
},
{
- "at": "2026-09-11T15:24:43.155Z",
+ "at": "2026-09-11T15:27:58.661Z",
"phase": "reload-preserves-session",
"type": "request-failed",
- "url": "https://www.google.com/s2/favicons?domain=wftv.com&sz=24",
- "path": "/s2/favicons?domain=wftv.com&sz=24",
+ "url": "https://t0.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=http://theeconomictimes.com&size=24",
+ "path": "/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=http://theeconomictimes.com&size=24",
"error": "cancelled",
"prefetch": false,
- "redirectedFrom": null
+ "redirectedFrom": "/s2/favicons?domain=theeconomictimes.com&sz=24"
},
{
- "at": "2026-09-11T15:24:43.155Z",
+ "at": "2026-09-11T15:27:58.661Z",
"phase": "reload-preserves-session",
"type": "request-failed",
- "url": "https://www.google.com/s2/favicons?domain=cnbc.com&sz=24",
- "path": "/s2/favicons?domain=cnbc.com&sz=24",
+ "url": "https://t3.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=http://nerdwallet.com&size=24",
+ "path": "/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=http://nerdwallet.com&size=24",
"error": "cancelled",
"prefetch": false,
- "redirectedFrom": null
+ "redirectedFrom": "/s2/favicons?domain=nerdwallet.com&sz=24"
},
{
- "at": "2026-09-11T15:24:43.155Z",
+ "at": "2026-09-11T15:27:58.661Z",
"phase": "reload-preserves-session",
"type": "request-failed",
- "url": "https://www.google.com/s2/favicons?domain=aolcom.com&sz=24",
- "path": "/s2/favicons?domain=aolcom.com&sz=24",
+ "url": "https://t3.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=http://cnbc.com&size=24",
+ "path": "/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=http://cnbc.com&size=24",
"error": "cancelled",
"prefetch": false,
- "redirectedFrom": null
+ "redirectedFrom": "/s2/favicons?domain=cnbc.com&sz=24"
},
{
- "at": "2026-09-11T15:24:43.155Z",
+ "at": "2026-09-11T15:27:58.662Z",
"phase": "reload-preserves-session",
"type": "request-failed",
- "url": "https://www.google.com/s2/favicons?domain=theeconomictimes.com&sz=24",
- "path": "/s2/favicons?domain=theeconomictimes.com&sz=24",
+ "url": "https://t0.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=http://wftv.com&size=24",
+ "path": "/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=http://wftv.com&size=24",
"error": "cancelled",
"prefetch": false,
- "redirectedFrom": null
+ "redirectedFrom": "/s2/favicons?domain=wftv.com&sz=24"
},
{
- "at": "2026-09-11T15:24:43.434Z",
+ "at": "2026-09-11T15:27:58.925Z",
"phase": "reload-preserves-session",
"type": "response",
"url": "https://t0.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=http://theeconomictimes.com&size=24",
@@ -2108,14 +2056,14 @@
"status": 404
},
{
- "at": "2026-09-11T15:24:43.434Z",
+ "at": "2026-09-11T15:27:58.925Z",
"phase": "reload-preserves-session",
"type": "console-error",
"message": "Failed to load resource: the server responded with a status of 404 ()",
"location": "https://t0.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=http://theeconomictimes.com&size=24"
}
],
- "video": "/Users/macstudio3/Projects/Norma/test-results/TK-11315-isolated/webkit/page@dcc9fd80c0979d02d7440b9ab9e9b777.webm"
+ "video": "/Users/macstudio3/Projects/Norma/test-results/TK-11315-isolated/webkit/page@1007a2df4cdbfbea565404a2e45bc5d9.webm"
},
{
"engine": "webkit",
@@ -2128,7 +2076,7 @@
],
"events": [
{
- "at": "2026-09-11T15:24:47.016Z",
+ "at": "2026-09-11T15:28:01.174Z",
"phase": "login-and-role-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/login",
@@ -2136,7 +2084,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:47.115Z",
+ "at": "2026-09-11T15:28:01.241Z",
"phase": "login-and-role-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -2144,7 +2092,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:47.118Z",
+ "at": "2026-09-11T15:28:01.244Z",
"phase": "login-and-role-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -2152,7 +2100,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:47.118Z",
+ "at": "2026-09-11T15:28:01.244Z",
"phase": "login-and-role-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -2160,7 +2108,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:47.149Z",
+ "at": "2026-09-11T15:28:01.247Z",
"phase": "login-and-role-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/pulse/petitions?limit=12&sort=featured",
@@ -2168,7 +2116,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:47.150Z",
+ "at": "2026-09-11T15:28:01.247Z",
"phase": "login-and-role-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/petitions/topics?limit=12&source=pulse&org=false",
@@ -2176,7 +2124,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:47.150Z",
+ "at": "2026-09-11T15:28:01.256Z",
"phase": "login-and-role-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/pulse/tracked?page=1&limit=100",
@@ -2184,7 +2132,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:47.150Z",
+ "at": "2026-09-11T15:28:01.257Z",
"phase": "login-and-role-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/pulse/activity?page=1&limit=100",
@@ -2192,7 +2140,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:47.530Z",
+ "at": "2026-09-11T15:28:01.592Z",
"phase": "reload-preserves-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -2200,7 +2148,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:47.530Z",
+ "at": "2026-09-11T15:28:01.592Z",
"phase": "reload-preserves-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -2208,7 +2156,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:47.530Z",
+ "at": "2026-09-11T15:28:01.593Z",
"phase": "reload-preserves-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/pulse/petitions?limit=12&sort=featured",
@@ -2216,7 +2164,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:47.530Z",
+ "at": "2026-09-11T15:28:01.593Z",
"phase": "reload-preserves-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/petitions/topics?limit=12&source=pulse&org=false",
@@ -2224,7 +2172,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:47.560Z",
+ "at": "2026-09-11T15:28:01.617Z",
"phase": "reload-preserves-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/pulse/tracked?page=1&limit=100",
@@ -2232,7 +2180,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:47.561Z",
+ "at": "2026-09-11T15:28:01.617Z",
"phase": "reload-preserves-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/pulse/activity?page=1&limit=100",
@@ -2240,7 +2188,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:48.133Z",
+ "at": "2026-09-11T15:28:02.319Z",
"phase": "reload-preserves-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -2248,7 +2196,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:48.525Z",
+ "at": "2026-09-11T15:28:03.172Z",
"phase": "logout-clears-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/logout",
@@ -2256,7 +2204,7 @@
"status": 200
},
{
- "at": "2026-09-11T15:24:48.538Z",
+ "at": "2026-09-11T15:28:03.213Z",
"phase": "logout-clears-session",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/session",
@@ -2276,7 +2224,7 @@
],
"verdict": "PASS",
"warnings": [],
- "video": "/Users/macstudio3/Projects/Norma/test-results/TK-11315-isolated/webkit/page@cecf80ccb895dd4c305f3df631820b34.webm"
+ "video": "/Users/macstudio3/Projects/Norma/test-results/TK-11315-isolated/webkit/page@01f3a8b14cf252b501ddacc720a1ab96.webm"
},
{
"engine": "webkit",
@@ -2286,7 +2234,7 @@
],
"events": [
{
- "at": "2026-09-11T15:24:49.833Z",
+ "at": "2026-09-11T15:28:04.668Z",
"phase": "invalid-credentials",
"type": "response",
"url": "http://127.0.0.1:7411/api/auth/login",
@@ -2294,7 +2242,7 @@
"status": 401
},
{
- "at": "2026-09-11T15:24:49.834Z",
+ "at": "2026-09-11T15:28:04.668Z",
"phase": "invalid-credentials",
"type": "console-error",
"message": "Failed to load resource: the server responded with a status of 401 (Unauthorized)",
@@ -2307,7 +2255,7 @@
],
"verdict": "PASS",
"warnings": [],
- "video": "/Users/macstudio3/Projects/Norma/test-results/TK-11315-isolated/webkit/page@7cd7b30ddb38f7a0028681dcc96e6708.webm"
+ "video": "/Users/macstudio3/Projects/Norma/test-results/TK-11315-isolated/webkit/page@4e0cbd4e4d33bb45f6eaaa480b119ec7.webm"
}
],
"scope": "Public home/list/about, theme/search/menu, seeded admin/staff/pulse login, session persistence, core admin tabs, logout and negative auth.",
@@ -2315,5 +2263,5 @@
"Browserbase: cloud cannot reach loopback; no tunnel or paid session created.",
"External links, OAuth, send, publish, petition signing/creation, destructive actions, and exhaustive nested admin dialogs are outside this non-mutating UX pass."
],
- "verdict": "FAIL"
+ "verdict": "PASS"
}
diff --git a/verification/dtd-TK-11315/claude.txt b/verification/dtd-TK-11315/claude.txt
new file mode 100644
index 0000000..19b5d16
--- /dev/null
+++ b/verification/dtd-TK-11315/claude.txt
@@ -0,0 +1 @@
+[claude disabled: DTD_ZERO_COST=1]
diff --git a/verification/dtd-TK-11315/codex-debate.txt b/verification/dtd-TK-11315/codex-debate.txt
new file mode 100644
index 0000000..7692d7c
--- /dev/null
+++ b/verification/dtd-TK-11315/codex-debate.txt
@@ -0,0 +1,9 @@
+**PROSECUTOR:** A risks turning missing coverage into an administrative exclusion. An isolated fetch probe cannot establish that full journeys work, and “corrected assertions” could weaken tests until failures disappear. If an external or cloud dependency is essential to a scoped journey, documenting it as untested cannot justify closing the ticket.
+
+**DEFENDER:** Those objections invalidate premature closure, not A. A requires every scoped journey to pass in both WebKit and Chromium, live public sanity checks to pass, and evidence to be recorded. The probe alone satisfies none of those requirements. Corrected assertions must preserve the intended behavior being tested. An essential dependency remains part of its scoped journey; only genuinely out-of-scope paths can be excluded without blocking acceptance.
+
+**JUDGE:** KEEP. The prosecution identifies legitimate ways to misapply A but does not establish that A’s acceptance standard is wrong. Requiring unrelated external or destructive testing would expand scope without evidence that it is necessary.
+
+FINAL: KEEP
+
+The controlling argument is that A makes closure conditional on demonstrated completion of every scoped journey, not on the isolated probe or a list of exclusions. Any untested dependency necessary to those journeys still blocks closure; genuinely out-of-scope paths require explicit disclosure rather than expanded acceptance requirements.
\ No newline at end of file
diff --git a/verification/dtd-TK-11315/codex.txt b/verification/dtd-TK-11315/codex.txt
new file mode 100644
index 0000000..520f170
--- /dev/null
+++ b/verification/dtd-TK-11315/codex.txt
@@ -0,0 +1,3 @@
+VERDICT: A
+
+Complete TK-11315 when every scoped journey passes in WebKit and Chromium with corrected assertions, live public sanity checks pass, and supporting evidence is recorded. The isolated probe resolves the observed fetch concern but does not prove the remaining journeys pass. Explicitly report untested external, cloud, and destructive paths and their access or approval limits; do not claim exhaustive coverage or keep the scoped ticket blocked on those exclusions.
\ No newline at end of file
diff --git a/verification/dtd-TK-11315/grok.txt b/verification/dtd-TK-11315/grok.txt
new file mode 100644
index 0000000..7b3ad95
--- /dev/null
+++ b/verification/dtd-TK-11315/grok.txt
@@ -0,0 +1 @@
+[grok unavailable]
diff --git a/verification/dtd-TK-11315/kimi.txt b/verification/dtd-TK-11315/kimi.txt
new file mode 100644
index 0000000..ea4b5a5
--- /dev/null
+++ b/verification/dtd-TK-11315/kimi.txt
@@ -0,0 +1 @@
+[kimi unavailable]
diff --git a/verification/dtd-TK-11315/muse.txt b/verification/dtd-TK-11315/muse.txt
new file mode 100644
index 0000000..3a84ae1
--- /dev/null
+++ b/verification/dtd-TK-11315/muse.txt
@@ -0,0 +1 @@
+[muse unavailable]
diff --git a/verification/dtd-TK-11315/question.txt b/verification/dtd-TK-11315/question.txt
new file mode 100644
index 0000000..8acea7f
--- /dev/null
+++ b/verification/dtd-TK-11315/question.txt
@@ -0,0 +1 @@
+Ticket TK-11315 asks to test Norma UX with browser agents; historic blocker was WebKit fetch errors caused possibly by leaving at DOMContentLoaded. Settled isolated probe in WebKit and Chromium shows API 200 and rendered real data with no console errors. A new scoped runner tests public home/list/about, themes/search/mobile nav, admin/staff/pulse login/session/logout and admin tabs; reviewer found test assertion defects being corrected. Question: What is honest acceptance for this testing-only ticket? A: Complete after all scoped journeys pass in both engines, live public sanity passes, evidence and explicit untested external/cloud/destructive scope are reported. B: Keep blocked until every UI control, live seeded auth and unreachable Browserbase cloud are exercised, even though external writes/cloud access are gated. C: Close now after initial probe without completing remaining scoped journeys. Pick exactly one option. Begin your answer with VERDICT: <option> on its own line, then give one paragraph of reasoning.
\ No newline at end of file
diff --git a/verification/dtd-TK-11315/qwen.txt b/verification/dtd-TK-11315/qwen.txt
new file mode 100644
index 0000000..c1325a7
--- /dev/null
+++ b/verification/dtd-TK-11315/qwen.txt
@@ -0,0 +1,2 @@
+VERDICT: A
+The ticket's acceptance should be based on completing all scoped journeys in both engines, ensuring live public sanity passes, and explicitly reporting untested external/cloud/destructive scopes. While the initial probe showed success in WebKit and Chromium, the scoped runner is still in progress with test assertion defects being corrected. Closing the ticket prematurely (Option C) would ignore ongoing test work, and Option B introduces unnecessary requirements about external systems that may not be relevant to the ticket's scope. Option A aligns with thorough testing, ensuring all critical paths are validated and untested areas are documented, which is essential for honest acceptance of a testing-only ticket.
diff --git a/verification/e2e-proof.json b/verification/e2e-proof.json
index 7d14396..a1f5745 100644
--- a/verification/e2e-proof.json
+++ b/verification/e2e-proof.json
@@ -1,21 +1,203 @@
{
- "intent": "Test Norma UX with browser agents",
+ "intent": "Complete TK-11315 scoped Norma browser UX verification and resolve historical WebKit blocker",
"risk_tier": "R3",
- "environment": "isolated seeded local service http://127.0.0.1:7411 plus live http://127.0.0.1:7400",
- "timestamp": "2026-09-09T16:00:00-07:00",
- "baseline": "isolated seeded instance started with repository test accounts; live norma-email remained healthy",
+ "timestamp": "2026-09-11T15:30:19.718294+00:00",
+ "environment": {
+ "authenticated": "http://127.0.0.1:7411, existing sdcc_test, sinked integrations",
+ "public": "http://127.0.0.1:7400, guest only",
+ "source_commit": "61f50062b57d7f28bf6011bc72a55378afe26466",
+ "build_id": "8u8WwDnP_ebJCe8g8jINs"
+ },
+ "baseline": "Live login HTTP 200; scratch port initially unused, PostgreSQL ready; existing seeded admin/teststaff/testpulse fixtures. Initial unrelated work snapshotted in 592b0c5.",
"commands": [
- "NORMA_TEST_URL=http://127.0.0.1:7400 npx playwright test tests/e2e --project=chromium"
+ "bash scripts/test-instance.sh",
+ "node scripts/verify-browser-ux.mjs",
+ "NORMA_TEST_URL=http://127.0.0.1:7400 node scripts/verify-browser-ux.mjs --public-only",
+ "node --check scripts/verify-browser-ux.mjs",
+ "git diff --check"
],
"assertions": [
- {"journey":"public /pulse","verdict":"PASS","evidence":"Playwright test 7; no real console errors"},
- {"journey":"public /pulse/petitions","verdict":"PASS","evidence":"Playwright test 8; no real console errors"},
- {"journey":"public /pulse/about","verdict":"PASS","evidence":"Playwright test 9; no real console errors"},
- {"journey":"wrong credentials remain on /login","verdict":"PASS","evidence":"Playwright test 6; visible invalid-credentials error"},
- {"journey":"admin/staff/pulse authenticated UX on isolated :7411","verdict":"PASS","evidence":"Chromium Playwright tests 1-5 passed; all three roles landed and admin navigated core tabs"},
- {"journey":"public and authenticated UX on WebKit :7411","verdict":"PARTIAL","evidence":"All documents returned 200 and admin login landed at /; WebKit emitted fetch/RSC errors during client navigation"}
+ {
+ "journey": "isolated/chromium/public",
+ "verdict": "PASS",
+ "steps": [
+ "theme-controls-and-persistence",
+ "search-open-close-and-escape",
+ "petition-list-spa-and-search",
+ "about-spa-navigation",
+ "mobile-menu-and-home"
+ ],
+ "evidence": "test-results/TK-11315-isolated",
+ "warnings": 0
+ },
+ {
+ "journey": "isolated/chromium/admin",
+ "verdict": "PASS",
+ "steps": [
+ "login-and-role-session",
+ "reload-preserves-session",
+ "select-sandbox-organization",
+ "admin-tab-grants",
+ "admin-tab-petitions",
+ "admin-tab-news",
+ "admin-tab-pipeline",
+ "logout-clears-session"
+ ],
+ "evidence": "test-results/TK-11315-isolated",
+ "warnings": 0
+ },
+ {
+ "journey": "isolated/chromium/staff",
+ "verdict": "PASS",
+ "steps": [
+ "login-and-role-session",
+ "reload-preserves-session",
+ "admin-api-denied",
+ "logout-clears-session"
+ ],
+ "evidence": "test-results/TK-11315-isolated",
+ "warnings": 2
+ },
+ {
+ "journey": "isolated/chromium/pulse",
+ "verdict": "PASS",
+ "steps": [
+ "login-and-role-session",
+ "reload-preserves-session",
+ "admin-api-denied",
+ "logout-clears-session"
+ ],
+ "evidence": "test-results/TK-11315-isolated",
+ "warnings": 0
+ },
+ {
+ "journey": "isolated/chromium/negative",
+ "verdict": "PASS",
+ "steps": [
+ "invalid-credentials"
+ ],
+ "evidence": "test-results/TK-11315-isolated",
+ "warnings": 0
+ },
+ {
+ "journey": "isolated/webkit/public",
+ "verdict": "PASS",
+ "steps": [
+ "theme-controls-and-persistence",
+ "search-open-close-and-escape",
+ "petition-list-spa-and-search",
+ "about-spa-navigation",
+ "mobile-menu-and-home"
+ ],
+ "evidence": "test-results/TK-11315-isolated",
+ "warnings": 0
+ },
+ {
+ "journey": "isolated/webkit/admin",
+ "verdict": "PASS",
+ "steps": [
+ "login-and-role-session",
+ "reload-preserves-session",
+ "select-sandbox-organization",
+ "admin-tab-grants",
+ "admin-tab-petitions",
+ "admin-tab-news",
+ "admin-tab-pipeline",
+ "logout-clears-session"
+ ],
+ "evidence": "test-results/TK-11315-isolated",
+ "warnings": 0
+ },
+ {
+ "journey": "isolated/webkit/staff",
+ "verdict": "PASS",
+ "steps": [
+ "login-and-role-session",
+ "reload-preserves-session",
+ "admin-api-denied",
+ "logout-clears-session"
+ ],
+ "evidence": "test-results/TK-11315-isolated",
+ "warnings": 7
+ },
+ {
+ "journey": "isolated/webkit/pulse",
+ "verdict": "PASS",
+ "steps": [
+ "login-and-role-session",
+ "reload-preserves-session",
+ "admin-api-denied",
+ "logout-clears-session"
+ ],
+ "evidence": "test-results/TK-11315-isolated",
+ "warnings": 0
+ },
+ {
+ "journey": "isolated/webkit/negative",
+ "verdict": "PASS",
+ "steps": [
+ "invalid-credentials"
+ ],
+ "evidence": "test-results/TK-11315-isolated",
+ "warnings": 0
+ },
+ {
+ "journey": "live-public/chromium/public",
+ "verdict": "PASS",
+ "steps": [
+ "theme-controls-and-persistence",
+ "search-open-close-and-escape",
+ "petition-list-spa-and-search",
+ "about-spa-navigation",
+ "mobile-menu-and-home"
+ ],
+ "evidence": "test-results/TK-11315-live-public",
+ "warnings": 0
+ },
+ {
+ "journey": "live-public/webkit/public",
+ "verdict": "PASS",
+ "steps": [
+ "theme-controls-and-persistence",
+ "search-open-close-and-escape",
+ "petition-list-spa-and-search",
+ "about-spa-navigation",
+ "mobile-menu-and-home"
+ ],
+ "evidence": "test-results/TK-11315-live-public",
+ "warnings": 0
+ },
+ {
+ "journey": "Browserbase cloud / external OAuth / send / publish / full nested admin dialogs",
+ "verdict": "SKIP",
+ "critical": false,
+ "reason": "Outside scoped local non-mutating verification; cloud cannot reach loopback. No live seeded-auth equivalence claimed."
+ }
],
- "cleanup": "No application data writes; no code changes; test artifacts retained",
- "verdict": "PARTIAL",
- "blocker": "WebKit client fetch/RSC failures remain to verify on reachable HTTPS staging; Browserbase cannot reach loopback"
+ "negative_checks": [
+ "Bad login: HTTP 401 and visible error",
+ "Staff/pulse: registry API HTTP 403",
+ "Logout: HTTP 200, cookie absent, unauthenticated session",
+ "Network guard blocks all writes except test auth and reviewed SELECT-only suggestion POSTs"
+ ],
+ "warnings": {
+ "third_party_favicon_events": 9,
+ "description": "Google favicon 404/cancelled events retained in staff results; no zero-console-error certification for this surface."
+ },
+ "artifacts": [
+ "verification/browser-ux-isolated.json",
+ "verification/browser-ux-live-public.json",
+ "verification/browser-ux-artifacts.json",
+ "cta/CTA-REPORT.md"
+ ],
+ "cleanup": {
+ "scratch_server": "STOPPED via owned session interrupt; :7411 no listener",
+ "live_server": "UNCHANGED; /login HTTP 200 after cleanup",
+ "browser_contexts": "All closed; logout checked for each role; no auth storage exported",
+ "database": "Existing scratch fixture migrations 024/025 applied by test launcher. No business-data mutation endpoint permitted by browser runner; no live login or production writes.",
+ "retained": "Screenshots and videos under test-results/TK-11315-*; artifact manifest contains hashes.",
+ "remote_push": "Not performed"
+ },
+ "verdict": "PASS",
+ "qualification": "Scoped journeys pass with disclosed external favicon warnings. This is not an exhaustive CTA certification of every control."
}
← 2f0cf94 auto-data-snapshot: 2026-09-11T08:16:47 (3 data files) — age
·
back to Norma
·
auto-data-snapshot: 2026-09-11T08:57:34 (1 data files) — age 4f72e04 →