chore(tests): move root test-*.js into tests/unit and tests/e2e (#2036)

Moves 290 root test-*.js into tests/unit (177, listed in test-all.sh) and tests/e2e (113, classified in scripts/non-unit-tests.json), per #1981 and PR-D of #1385. Root goes from 348 entries to 48. test-all.sh and test-fixtures/ stay put. The inventory guard now fails if a test reappears in the root or sits in the wrong folder.

Verified independently of the diff: the invoked sets are unchanged (test-all.sh 177 before and after, deploy.yml 96 before and after, both identical as sets), and a full local run of test-all.sh on master and on the branch produced 4702 output lines each whose only differences are absolute paths, stack-trace line numbers shifted by the REPO_ROOT line, the inventory wording and two perf ratios. The guard was mutation-checked: a test back in the root, a unit suite in tests/e2e, and a suite dropped from test-all.sh each make it exit 1. CI run 35246304316 ran 97 suites from tests/e2e and is green.

Follow-up 9335c51d finished the instruction files: no bare root test command is left in AGENTS.md, the squad charters, .github or docs, and every tests/ path they name resolves.

Merged by the interim maintainer without a second human reviewer: CI and the local runs above are the independent checks.

Known and deliberately out of scope: 18 of the 113 files in tests/e2e are invoked by no runner at all, and one of them cannot run anywhere because it requires jsdom, which is not a declared dependency. Tracked separately.
This commit is contained in:
Alex B
2026-09-17 19:06:07 +02:00
committed by GitHub
parent 5430bc7923
commit 893773338e
302 changed files with 841 additions and 700 deletions
+1 -1
View File
@@ -28,7 +28,7 @@ You will pay special attention to the following areas during your review:
- **Project Architecture**: Does the PR respect the single Node.js server + static frontend architecture? Are changes in the right place?
### 2. Testing and Validation
- **No commit without tests**: Is the backend logic change covered by unit tests? Is `test-packet-filter.js` or `test-aging.js` updated if necessary?
- **No commit without tests**: Is the backend logic change covered by unit tests? Is `tests/unit/test-packet-filter.js` or `tests/unit/test-aging.js` updated if necessary?
- **Browser Validation**: Has the contributor confirmed the change works in a browser? Is there a screenshot for visual changes?
- **Cache Busters**: If any `public/` assets (`.js`, `.css`) were modified, has the cache buster in `public/index.html` been bumped in the *same commit*? This is critical.
+1 -1
View File
@@ -28,7 +28,7 @@ You will pay special attention to the following areas during your review:
- **Project Architecture**: Does the PR respect the single Node.js server + static frontend architecture? Are changes in the right place?
### 2. Testing and Validation
- **No commit without tests**: Is the backend logic change covered by unit tests? Is `test-packet-filter.js` or `test-aging.js` updated if necessary?
- **No commit without tests**: Is the backend logic change covered by unit tests? Is `tests/unit/test-packet-filter.js` or `tests/unit/test-aging.js` updated if necessary?
- **Browser Validation**: Has the contributor confirmed the change works in a browser? Is there a screenshot for visual changes?
- **Cache Busters**: If any `public/` assets (`.js`, `.css`) were modified, has the cache buster in `public/index.html` been bumped in the *same commit*? This is critical.
+96 -96
View File
@@ -472,7 +472,7 @@ jobs:
- name: Run Playwright E2E tests (fail-fast)
run: |
BASE_URL=http://localhost:13581 node test-e2e-playwright.js 2>&1 | tee e2e-output.txt
BASE_URL=http://localhost:13581 node tests/e2e/test-e2e-playwright.js 2>&1 | tee e2e-output.txt
# M5+M6 of #1668 — axe-core CI gate.
# M5: color-contrast on desktop dark+light.
# M6: expanded ruleset (image-alt, label, aria-required-attr,
@@ -483,100 +483,100 @@ jobs:
# Allowlist: tests/a11y-allowlist.yaml (0 entries — hard pass policy).
# Per-viewport summary printed at the end; any net>0 fails the build.
BASE_URL=http://localhost:13581 AXE_SCREENSHOT_DIR=/tmp/axe-1668 \
node test-a11y-axe-1668.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node test-filter-ux-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node test-channel-issue-1087-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node test-channel-issue-1111-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node test-map-modal-fluid-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-map-nodes-pagination-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node test-observer-iata-1188-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node test-issue-1639-observers-sort-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-issue-1758-ng-filter-rerenders-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-nav-fluid-1055-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-nav-priority-1102-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-nav-priority-1311-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-nav-priority-1391-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-issue-1413-nav-overlap-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-issue-1400-nav-vertical-clip.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-nav-more-floor-1139-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-bottom-nav-1061-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-gestures-1062-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-gestures-1185-scroll-discriminator-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-gesture-hints-1065-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-touch-gestures-coverage-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node test-channel-fluid-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node test-table-fluid-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node test-charts-fluid-1058-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node test-slideover-1056-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node test-issue-1692-packets-init-parallel-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node test-slideover-1168-munger-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node test-logo-pulse-1173-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node test-issue-1122-packets-filter-ux-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node test-issue-1128-packets-layout-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node test-issue-1128-multi-viewport-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node test-issue-1136-live-region-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node test-live-multibyte-only-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node test-issue-1150-404-state-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node test-issue-1146-path-link-contrast-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 node test-issue-1705-subpath-contrast-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node test-issue-1147-section-order-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node test-issue-1151-orphan-separators-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node test-issue-1486-collapse-reopens-detail-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-logo-rebrand-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-logo-theme-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-logo-default-sage-teal-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-issue-1109-hamburger-dropdown-visible-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-live-layout-1178-1179-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-issue-1205-live-controls-anchor-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-live-mql-leak-1180-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-issue-1204-live-panel-structure-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-issue-1234-live-chrome-pass2-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-issue-1206-vcr-overlap-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-issue-1244-live-vcr-row-hints-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-issue-1510-live-nav-pin-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-live-fullscreen-1572-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-issue-1599-replay-freeze-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-issue-1648-m1-icons-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-issue-1648-m2-icons-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-issue-1648-m3-icons-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-issue-1648-m4-icons-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-issue-1657-analytics-channels-group-sprites-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node test-issue-1224-channels-mobile-ux-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node test-issue-1367-channels-chat-app-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node test-issue-1236-map-mobile-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node test-issue-1329-map-controls-accordion-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node test-issue-1273-qr-overlay-height-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node test-issue-1281-location-row-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node test-issue-1279-legend-p2-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node test-issue-1799-label-vocab-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-home-coverage-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-path-inspector-coverage-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-issue-1206-resize-observer-leak-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-nav-drawer-1064-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-audio-live-1297-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-audio-lab-1297-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node test-channel-decrypt-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node test-channel-qr-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node test-channel-color-picker-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node test-customize-theme-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node test-customize-branding-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node test-customize-display-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node test-customize-export-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-drag-manager-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-issue-1567-corner-clears-drag-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-issue-1306-collisions-terminology-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-issue-1374-route-map-a11y-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-channels-list-render-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-channels-selection-flow-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-channels-add-modal-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-channels-share-color-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-channels-ws-batch-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-channels-ws-race-1498-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-issue-1487-byop-modal-layout-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-issue-1630-reach-mobile-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-node-reach-coverage-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node test-issue-1640-compare-discovery-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 node test-neighbor-map-btn-clip-e2e.js 2>&1 | tee -a e2e-output.txt
node tests/e2e/test-a11y-axe-1668.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node tests/e2e/test-filter-ux-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node tests/e2e/test-channel-issue-1087-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node tests/e2e/test-channel-issue-1111-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node tests/e2e/test-map-modal-fluid-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-map-nodes-pagination-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node tests/e2e/test-observer-iata-1188-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1639-observers-sort-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1758-ng-filter-rerenders-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-nav-fluid-1055-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-nav-priority-1102-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-nav-priority-1311-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-nav-priority-1391-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1413-nav-overlap-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1400-nav-vertical-clip.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-nav-more-floor-1139-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-bottom-nav-1061-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-gestures-1062-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-gestures-1185-scroll-discriminator-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-gesture-hints-1065-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-touch-gestures-coverage-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node tests/e2e/test-channel-fluid-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node tests/e2e/test-table-fluid-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node tests/e2e/test-charts-fluid-1058-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node tests/e2e/test-slideover-1056-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1692-packets-init-parallel-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node tests/e2e/test-slideover-1168-munger-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node tests/e2e/test-logo-pulse-1173-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1122-packets-filter-ux-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1128-packets-layout-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1128-multi-viewport-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1136-live-region-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node tests/e2e/test-live-multibyte-only-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1150-404-state-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1146-path-link-contrast-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 node tests/e2e/test-issue-1705-subpath-contrast-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1147-section-order-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1151-orphan-separators-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1486-collapse-reopens-detail-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-logo-rebrand-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-logo-theme-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-logo-default-sage-teal-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1109-hamburger-dropdown-visible-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-live-layout-1178-1179-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1205-live-controls-anchor-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-live-mql-leak-1180-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1204-live-panel-structure-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1234-live-chrome-pass2-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1206-vcr-overlap-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1244-live-vcr-row-hints-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1510-live-nav-pin-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-live-fullscreen-1572-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1599-replay-freeze-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1648-m1-icons-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1648-m2-icons-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1648-m3-icons-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1648-m4-icons-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1657-analytics-channels-group-sprites-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1224-channels-mobile-ux-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1367-channels-chat-app-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1236-map-mobile-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1329-map-controls-accordion-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1273-qr-overlay-height-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1281-location-row-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1279-legend-p2-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1799-label-vocab-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-home-coverage-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-path-inspector-coverage-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1206-resize-observer-leak-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-nav-drawer-1064-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-audio-live-1297-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-audio-lab-1297-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node tests/e2e/test-channel-decrypt-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node tests/e2e/test-channel-qr-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node tests/e2e/test-channel-color-picker-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node tests/e2e/test-customize-theme-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node tests/e2e/test-customize-branding-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node tests/e2e/test-customize-display-e2e.js 2>&1 | tee -a e2e-output.txt
BASE_URL=http://localhost:13581 node tests/e2e/test-customize-export-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-drag-manager-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1567-corner-clears-drag-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1306-collisions-terminology-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1374-route-map-a11y-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-channels-list-render-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-channels-selection-flow-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-channels-add-modal-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-channels-share-color-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-channels-ws-batch-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-channels-ws-race-1498-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1487-byop-modal-layout-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1630-reach-mobile-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-node-reach-coverage-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 BASE_URL=http://localhost:13581 node tests/e2e/test-issue-1640-compare-discovery-e2e.js 2>&1 | tee -a e2e-output.txt
CHROMIUM_REQUIRE=1 node tests/e2e/test-neighbor-map-btn-clip-e2e.js 2>&1 | tee -a e2e-output.txt
# #1616: slide-over focus-restore flake-gate. Runs the slide-over
# E2E 20 consecutive times against the SAME backend instance so
@@ -594,7 +594,7 @@ jobs:
set -e
for i in $(seq 1 3); do
echo "--- slide-over E2E run $i/20 ---"
BASE_URL=http://localhost:13581 node test-slideover-1056-e2e.js 2>&1 | tee -a slideover-repeat-output.txt
BASE_URL=http://localhost:13581 node tests/e2e/test-slideover-1056-e2e.js 2>&1 | tee -a slideover-repeat-output.txt
done
echo "3 passed"
+6 -8
View File
@@ -10,16 +10,15 @@ Unit tests, Playwright E2E, coverage gates, and quality assurance for CoreScope.
## Responsibilities
- Unit tests: test-packet-filter.js, test-aging.js, test-decoder.js, test-decoder-spec.js, test-server-helpers.js, test-server-routes.js, test-packet-store.js, test-db.js, test-frontend-helpers.js, test-regional-filter.js, test-regional-integration.js, test-live-dedup.js
- Playwright E2E: test-e2e-playwright.js (8 browser tests, default localhost:3000)
- E2E tools: tools/e2e-test.js, tools/frontend-test.js
- Unit tests: `tests/unit/`, all listed in `test-all.sh` (e.g. test-packet-filter.js, test-aging.js, test-frontend-helpers.js); Go tests under `cmd/`
- Playwright E2E: `tests/e2e/`, classified in `scripts/non-unit-tests.json` (e.g. test-e2e-playwright.js, default localhost:3000)
- Coverage: Backend 85%+ (c8), Frontend 42%+ (Istanbul + nyc). Both only go up.
- Review authority: May approve or reject work from Hicks and Newt based on test results
## Boundaries
- Test the REAL code — import actual modules, don't copy-paste functions into test files
- Use vm.createContext for frontend helpers (see test-frontend-helpers.js pattern)
- Use vm.createContext for frontend helpers (see tests/unit/test-frontend-helpers.js pattern)
- Playwright tests default to localhost:3000 — NEVER run against prod
- Every bug fix gets a regression test
- Every new feature must add tests — test count only goes up
@@ -37,10 +36,9 @@ Unit tests, Playwright E2E, coverage gates, and quality assurance for CoreScope.
npm test # all backend tests + coverage summary
npm run test:unit # fast: unit tests only
npm run test:coverage # all tests + HTML coverage report
node test-packet-filter.js # filter engine
node test-decoder.js # packet decoder
node test-server-routes.js # API routes via supertest
node test-e2e-playwright.js # 8 Playwright browser tests
sh test-all.sh # every suite in tests/unit
node tests/unit/test-packet-filter.js # filter engine
node tests/e2e/test-e2e-playwright.js # Playwright browser tests
```
## Model
+1 -1
View File
@@ -24,7 +24,7 @@ Vanilla JS UI, Leaflet maps, live visualization, theming, and all public/ module
- Use shared helpers from roles.js (ROLE_COLORS, TYPE_COLORS, getNodeStatus, getHealthThresholds)
- Prefer `n.last_heard || n.last_seen` for display and status
- No per-packet API calls from frontend — fetch bulk, filter client-side
- Run `node test-packet-filter.js` and `node test-frontend-helpers.js` after filter/helper changes
- Run `node tests/unit/test-packet-filter.js` and `node tests/unit/test-frontend-helpers.js` after filter/helper changes
- Always bump cache busters in the SAME commit as code changes
## Key Files
+11 -19
View File
@@ -90,7 +90,7 @@ Every change must consider performance impact BEFORE implementation. This codeba
No proof = no merge.
### 1. No commit without tests
Every change that touches logic MUST have tests. For Go backend: `cd cmd/server && go test ./...` and `cd cmd/ingestor && go test ./...`, or `make test` for all 14 modules. For frontend: `node test-packet-filter.js && node test-aging.js && node test-frontend-helpers.js`. If you add new logic, add tests. No exceptions.
Every change that touches logic MUST have tests. For Go backend: `cd cmd/server && go test ./...` and `cd cmd/ingestor && go test ./...`, or `make test` for all 14 modules. For frontend: `node tests/unit/test-packet-filter.js && node tests/unit/test-aging.js && node tests/unit/test-frontend-helpers.js`. If you add new logic, add tests. No exceptions.
The SQLite driver (`github.com/mattn/go-sqlite3`) is cgo. **`CGO_ENABLED=0` still *builds*** — that is the trap. It links a stub, and the binary dies on the first query with `go-sqlite3 requires cgo to work. This is a stub`, so a green build proves nothing. A plain `GOOS=linux go build` likewise cannot cross-compile it. Use `make build` / `make crossbuild` — the latter needs [`zig`](https://ziglang.org/download/) as the cross C compiler and produces static musl binaries. Never re-add `CGO_ENABLED=0`.
@@ -202,7 +202,7 @@ All colors MUST use CSS variables. Never hardcode `#hex` values outside of `:roo
### Packet Filter (packet-filter.js)
Standalone module. No dependencies on app globals (copies what it needs). Testable in Node.js:
```bash
node test-packet-filter.js
node tests/unit/test-packet-filter.js
```
Uses firmware-standard type names (GRP_TXT, TXT_MSG, REQ) with aliases for convenience.
@@ -219,21 +219,13 @@ npm run test:full-coverage # backend + instrumented frontend coverage via Playw
### Test Files
```bash
# Backend (deterministic, run before every push)
node test-packet-filter.js # filter engine
node test-aging.js # node aging system
node test-regional-filter.js # regional observer filtering
node test-decoder.js # packet decoder
node test-decoder-spec.js # spec-driven + golden fixture tests
node test-server-helpers.js # extracted server functions
node test-server-routes.js # API route tests via supertest
node test-packet-store.js # in-memory packet store
node test-db.js # SQLite operations
node test-frontend-helpers.js # frontend logic (via vm.createContext)
node tools/e2e-test.js # E2E: temp server + synthetic packets
node tools/frontend-test.js # frontend smoke: HTML, JS refs, API shapes
sh test-all.sh # every suite in tests/unit
node tests/unit/test-packet-filter.js # filter engine
node tests/unit/test-aging.js # node aging system
node tests/unit/test-frontend-helpers.js # frontend logic (via vm.createContext)
# Frontend E2E (requires running server or Playwright)
node test-e2e-playwright.js # 8 Playwright browser tests (default: localhost:3000)
node tests/e2e/test-e2e-playwright.js # Playwright browser tests (default: localhost:3000)
```
### Rules
@@ -248,14 +240,14 @@ node test-e2e-playwright.js # 8 Playwright browser tests (default: localho
2. Write unit tests for the logic
3. Write/update Playwright tests if it's a UI change
4. Run `npm test` — all tests must pass
5. Run `node test-e2e-playwright.js` against a local server — E2E must pass
5. Run `node tests/e2e/test-e2e-playwright.js` against a local server — E2E must pass
6. THEN push to master
### Testing infrastructure
- **Backend coverage**: c8 tracks server-side code in-process
- **Frontend coverage**: Istanbul instruments `public/*.js` → Playwright exercises them → `window.__coverage__` extracted → nyc reports. Instrumented files are generated fresh each CI run, never checked in.
- **CI pipeline**: backend tests + coverage → instrument frontend → start local server → Playwright E2E + coverage collection → badges update → deploy (only if all pass)
- **Playwright tests default to localhost:3000** — NEVER run against prod. CI sets `BASE_URL=http://localhost:13581`. Running locally: start your server, then `node test-e2e-playwright.js`
- **Playwright tests default to localhost:3000** — NEVER run against prod. CI sets `BASE_URL=http://localhost:13581`. Running locally: start your server, then `node tests/e2e/test-e2e-playwright.js`
- **ARM machines**: Basic Playwright tests work with system chromium (`CHROMIUM_PATH=/usr/bin/chromium-browser`). Heavy coverage collection scripts may crash — use CI for those.
Tests that need live mesh data can use `https://analyzer.00id.net` — all API endpoints are public, no auth required.
@@ -290,7 +282,7 @@ If the same logic exists in two places, it MUST be extracted into a shared funct
### Testability
- **Write functions that are easy to test.** Pure functions (input → output, no side effects) are ideal. If a function reads from the DOM, the DB, and localStorage, it's untestable without mocking everything.
- **Dependency injection enables testing.** Pass the node list, the map reference, the API function as parameters. Tests can substitute fakes.
- **Test the real code, not copies.** Don't paste a function into a test file and test the copy. Import/require the actual module. If the module isn't importable (IIFE, browser-only), refactor it so it is — or use `vm.createContext` like `test-frontend-helpers.js` does.
- **Test the real code, not copies.** Don't paste a function into a test file and test the copy. Import/require the actual module. If the module isn't importable (IIFE, browser-only), refactor it so it is — or use `vm.createContext` like `tests/unit/test-frontend-helpers.js` does.
- **Every bug fix gets a regression test.** If it broke once, it'll break again. The test proves it stays fixed.
### Type Safety (without TypeScript)
@@ -372,7 +364,7 @@ One logical change per commit. Each commit is deployable. Each commit has its te
| Subagent timed out mid-work | 4 | Give clear scope, don't try to run slow pipelines locally |
## File Naming
- Tests: `test-{feature}.js` in repo root
- Tests: `test-{feature}.js` in `tests/unit/` (standalone, listed in `test-all.sh`) or `tests/e2e/` (browser, listed in `scripts/non-unit-tests.json`) — never in repo root
- No build step, no transpilation — write ES2020 for server, ES5/6 for frontend (broad browser support)
### Deep Linking
+3 -2
View File
@@ -228,7 +228,8 @@ corescope/
│ └── entrypoint-go.sh # Container entrypoint
├── Dockerfile # Multi-stage Go build + Alpine runtime
├── config.example.json # Example configuration
├── test-*.js # Node.js test suite (frontend + legacy)
├── tests/ # Node.js test suite: unit/ (test-all.sh) and e2e/ (Playwright)
├── test-all.sh # Runs every suite in tests/unit
└── tools/ # Generators, E2E tests, utilities
```
@@ -266,7 +267,7 @@ make test
npm test
# Playwright E2E (requires running server on localhost:3000)
node test-e2e-playwright.js
node tests/e2e/test-e2e-playwright.js
```
### Generate Test Data
+1 -1
View File
@@ -55,7 +55,7 @@ If the fix touches ANY frontend file (`public/*.js`, `public/*.css`, or HTML) AN
as a user-visible UX behavior (click/hover/navigation/rendering), the PR MUST include a
browser-level assertion that would have caught the original bug — NOT only unit tests.
- Look for an existing E2E harness first (e.g. `test-e2e-playwright.js`, `e2e/`, `tests/e2e/`,
- Look for an existing E2E harness first (e.g. `tests/e2e/test-e2e-playwright.js`, `e2e/`, `tests/e2e/`,
`playwright.config.*`, or whatever the repo uses). Add the assertion there.
- If no E2E harness exists, ADD a small one rather than skip. A 30-line Playwright fixture
hitting a public staging URL is acceptable.
+8 -4
View File
@@ -13,13 +13,17 @@ Windows, use Git Bash and ensure `python3` resolves to Python 3 rather than a
Microsoft Store alias; set `PYTHONUTF8=1` for the gate's Unicode output.
No server or browser is started by this runner.
When adding a root `test-*.js` file:
Tests live in `tests/unit/` (standalone Node, run by `test-all.sh`) and
`tests/e2e/` (needs a browser, a server or extra tooling). They run from the
repo root, and refer to it as `REPO_ROOT`. When adding a `test-*.js` file:
1. Add its `node test-name.js` command to `test-all.sh` if it runs standalone.
2. Otherwise add it to `scripts/non-unit-tests.json`, with a prerequisite or
1. If it runs standalone, put it in `tests/unit/` and add its
`node tests/unit/test-name.js` command to `test-all.sh`.
2. Otherwise put it in `tests/e2e/` and add it to `scripts/non-unit-tests.json`, with a prerequisite or
reason explaining why it belongs outside the unit runner. Browser suites
still need explicit selection in the E2E workflow to become CI gates.
3. Run `node test-test-inventory.js`. The guard rejects unclassified files,
3. Run `node tests/unit/test-test-inventory.js`. The guard rejects `test-*.js`
files in the repo root, unclassified files,
duplicate assignments, removed files left in a list, undocumented groups,
and local/CI entry points that bypass the unit runner.
+113 -113
View File
@@ -2,129 +2,129 @@
"browser": {
"reason": "Requires Playwright and Chromium; most suites also require a running local fixture server via BASE_URL. Existing E2E workflow steps retain their separate setup and selection. Never point these tests at production.",
"files": [
"test-1110-live-filter.js",
"test-a11y-axe-1668.js",
"test-analytics-fluid-charts.js",
"test-audio-lab-1297-e2e.js",
"test-audio-live-1297-e2e.js",
"test-bottom-nav-1061-e2e.js",
"test-channel-color-picker-e2e.js",
"test-channel-decrypt-e2e.js",
"test-channel-fluid-e2e.js",
"test-channel-issue-1087-e2e.js",
"test-channel-issue-1111-e2e.js",
"test-channel-modal-e2e.js",
"test-channel-qr-e2e.js",
"test-channels-add-modal-e2e.js",
"test-channels-list-render-e2e.js",
"test-channels-selection-flow-e2e.js",
"test-channels-share-color-e2e.js",
"test-channels-ws-batch-e2e.js",
"test-channels-ws-race-1498-e2e.js",
"test-charts-fluid-1058-e2e.js",
"test-customize-branding-e2e.js",
"test-customize-display-e2e.js",
"test-customize-export-e2e.js",
"test-customize-theme-e2e.js",
"test-drag-manager-e2e.js",
"test-e2e-1267-mobile-vcr.js",
"test-e2e-playwright.js",
"test-filter-ux-e2e.js",
"test-gesture-hints-1065-e2e.js",
"test-gestures-1062-e2e.js",
"test-gestures-1185-scroll-discriminator-e2e.js",
"test-home-coverage-e2e.js",
"test-issue-1109-hamburger-dropdown-visible-e2e.js",
"test-issue-1122-packets-filter-ux-e2e.js",
"test-issue-1128-multi-viewport-e2e.js",
"test-issue-1128-packets-layout-e2e.js",
"test-issue-1136-live-region-e2e.js",
"test-issue-1146-path-link-contrast-e2e.js",
"test-issue-1147-section-order-e2e.js",
"test-issue-1150-404-state-e2e.js",
"test-issue-1151-orphan-separators-e2e.js",
"test-issue-1204-live-panel-structure-e2e.js",
"test-issue-1205-live-controls-anchor-e2e.js",
"test-issue-1206-resize-observer-leak-e2e.js",
"test-issue-1206-vcr-overlap-e2e.js",
"test-issue-1224-channels-mobile-ux-e2e.js",
"test-issue-1234-live-chrome-pass2-e2e.js",
"test-issue-1236-map-mobile-e2e.js",
"test-issue-1244-live-vcr-row-hints-e2e.js",
"test-issue-1273-qr-overlay-height-e2e.js",
"test-issue-1274-legend-coverage-e2e.js",
"test-issue-1279-legend-p2-e2e.js",
"test-issue-1281-location-row-e2e.js",
"test-issue-1306-collisions-terminology-e2e.js",
"test-issue-1329-map-controls-accordion-e2e.js",
"test-issue-1367-channels-chat-app-e2e.js",
"test-issue-1374-route-map-a11y-e2e.js",
"test-issue-1400-nav-vertical-clip.js",
"test-issue-1413-nav-overlap-e2e.js",
"test-issue-1486-collapse-reopens-detail-e2e.js",
"test-issue-1487-byop-modal-layout-e2e.js",
"test-issue-1510-live-nav-pin-e2e.js",
"test-issue-1567-corner-clears-drag-e2e.js",
"test-issue-1599-replay-freeze-e2e.js",
"test-issue-1630-reach-mobile-e2e.js",
"test-issue-1639-observers-sort-e2e.js",
"test-issue-1640-compare-discovery-e2e.js",
"test-issue-1648-m1-icons-e2e.js",
"test-issue-1648-m2-icons-e2e.js",
"test-issue-1648-m3-icons-e2e.js",
"test-issue-1648-m4-icons-e2e.js",
"test-issue-1648-m5-icons-e2e.js",
"test-issue-1657-analytics-channels-group-sprites-e2e.js",
"test-issue-1692-packets-init-parallel-e2e.js",
"test-issue-1705-subpath-contrast-e2e.js",
"test-issue-1758-ng-filter-rerenders-e2e.js",
"test-issue-1799-label-vocab-e2e.js",
"test-live-dedup.js",
"test-live-fullscreen-1572-e2e.js",
"test-live-layout-1178-1179-e2e.js",
"test-live-mql-leak-1180-e2e.js",
"test-live-multibyte-only-e2e.js",
"test-logo-default-sage-teal-e2e.js",
"test-logo-pulse-1173-e2e.js",
"test-logo-rebrand-e2e.js",
"test-logo-theme-e2e.js",
"test-map-modal-fluid-e2e.js",
"test-map-nodes-pagination-e2e.js",
"test-nav-drawer-1064-e2e.js",
"test-nav-fluid-1055-e2e.js",
"test-nav-more-floor-1139-e2e.js",
"test-nav-priority-1102-e2e.js",
"test-nav-priority-1311-e2e.js",
"test-nav-priority-1391-e2e.js",
"test-neighbor-map-btn-clip-e2e.js",
"test-node-reach-coverage-e2e.js",
"test-node-reach-e2e.js",
"test-nodes-export-e2e.js",
"test-observer-iata-1188-e2e.js",
"test-packets-scope-column.js",
"test-path-inspector-coverage-e2e.js",
"test-rx-coverage-mobile-nav-e2e.js",
"test-show-neighbors.js",
"test-slideover-1056-e2e.js",
"test-slideover-1168-munger-e2e.js",
"test-table-fluid-e2e.js",
"test-touch-gestures-coverage-e2e.js",
"test-touch-targets.js"
"tests/e2e/test-1110-live-filter.js",
"tests/e2e/test-a11y-axe-1668.js",
"tests/e2e/test-analytics-fluid-charts.js",
"tests/e2e/test-audio-lab-1297-e2e.js",
"tests/e2e/test-audio-live-1297-e2e.js",
"tests/e2e/test-bottom-nav-1061-e2e.js",
"tests/e2e/test-channel-color-picker-e2e.js",
"tests/e2e/test-channel-decrypt-e2e.js",
"tests/e2e/test-channel-fluid-e2e.js",
"tests/e2e/test-channel-issue-1087-e2e.js",
"tests/e2e/test-channel-issue-1111-e2e.js",
"tests/e2e/test-channel-modal-e2e.js",
"tests/e2e/test-channel-qr-e2e.js",
"tests/e2e/test-channels-add-modal-e2e.js",
"tests/e2e/test-channels-list-render-e2e.js",
"tests/e2e/test-channels-selection-flow-e2e.js",
"tests/e2e/test-channels-share-color-e2e.js",
"tests/e2e/test-channels-ws-batch-e2e.js",
"tests/e2e/test-channels-ws-race-1498-e2e.js",
"tests/e2e/test-charts-fluid-1058-e2e.js",
"tests/e2e/test-customize-branding-e2e.js",
"tests/e2e/test-customize-display-e2e.js",
"tests/e2e/test-customize-export-e2e.js",
"tests/e2e/test-customize-theme-e2e.js",
"tests/e2e/test-drag-manager-e2e.js",
"tests/e2e/test-e2e-1267-mobile-vcr.js",
"tests/e2e/test-e2e-playwright.js",
"tests/e2e/test-filter-ux-e2e.js",
"tests/e2e/test-gesture-hints-1065-e2e.js",
"tests/e2e/test-gestures-1062-e2e.js",
"tests/e2e/test-gestures-1185-scroll-discriminator-e2e.js",
"tests/e2e/test-home-coverage-e2e.js",
"tests/e2e/test-issue-1109-hamburger-dropdown-visible-e2e.js",
"tests/e2e/test-issue-1122-packets-filter-ux-e2e.js",
"tests/e2e/test-issue-1128-multi-viewport-e2e.js",
"tests/e2e/test-issue-1128-packets-layout-e2e.js",
"tests/e2e/test-issue-1136-live-region-e2e.js",
"tests/e2e/test-issue-1146-path-link-contrast-e2e.js",
"tests/e2e/test-issue-1147-section-order-e2e.js",
"tests/e2e/test-issue-1150-404-state-e2e.js",
"tests/e2e/test-issue-1151-orphan-separators-e2e.js",
"tests/e2e/test-issue-1204-live-panel-structure-e2e.js",
"tests/e2e/test-issue-1205-live-controls-anchor-e2e.js",
"tests/e2e/test-issue-1206-resize-observer-leak-e2e.js",
"tests/e2e/test-issue-1206-vcr-overlap-e2e.js",
"tests/e2e/test-issue-1224-channels-mobile-ux-e2e.js",
"tests/e2e/test-issue-1234-live-chrome-pass2-e2e.js",
"tests/e2e/test-issue-1236-map-mobile-e2e.js",
"tests/e2e/test-issue-1244-live-vcr-row-hints-e2e.js",
"tests/e2e/test-issue-1273-qr-overlay-height-e2e.js",
"tests/e2e/test-issue-1274-legend-coverage-e2e.js",
"tests/e2e/test-issue-1279-legend-p2-e2e.js",
"tests/e2e/test-issue-1281-location-row-e2e.js",
"tests/e2e/test-issue-1306-collisions-terminology-e2e.js",
"tests/e2e/test-issue-1329-map-controls-accordion-e2e.js",
"tests/e2e/test-issue-1367-channels-chat-app-e2e.js",
"tests/e2e/test-issue-1374-route-map-a11y-e2e.js",
"tests/e2e/test-issue-1400-nav-vertical-clip.js",
"tests/e2e/test-issue-1413-nav-overlap-e2e.js",
"tests/e2e/test-issue-1486-collapse-reopens-detail-e2e.js",
"tests/e2e/test-issue-1487-byop-modal-layout-e2e.js",
"tests/e2e/test-issue-1510-live-nav-pin-e2e.js",
"tests/e2e/test-issue-1567-corner-clears-drag-e2e.js",
"tests/e2e/test-issue-1599-replay-freeze-e2e.js",
"tests/e2e/test-issue-1630-reach-mobile-e2e.js",
"tests/e2e/test-issue-1639-observers-sort-e2e.js",
"tests/e2e/test-issue-1640-compare-discovery-e2e.js",
"tests/e2e/test-issue-1648-m1-icons-e2e.js",
"tests/e2e/test-issue-1648-m2-icons-e2e.js",
"tests/e2e/test-issue-1648-m3-icons-e2e.js",
"tests/e2e/test-issue-1648-m4-icons-e2e.js",
"tests/e2e/test-issue-1648-m5-icons-e2e.js",
"tests/e2e/test-issue-1657-analytics-channels-group-sprites-e2e.js",
"tests/e2e/test-issue-1692-packets-init-parallel-e2e.js",
"tests/e2e/test-issue-1705-subpath-contrast-e2e.js",
"tests/e2e/test-issue-1758-ng-filter-rerenders-e2e.js",
"tests/e2e/test-issue-1799-label-vocab-e2e.js",
"tests/e2e/test-live-dedup.js",
"tests/e2e/test-live-fullscreen-1572-e2e.js",
"tests/e2e/test-live-layout-1178-1179-e2e.js",
"tests/e2e/test-live-mql-leak-1180-e2e.js",
"tests/e2e/test-live-multibyte-only-e2e.js",
"tests/e2e/test-logo-default-sage-teal-e2e.js",
"tests/e2e/test-logo-pulse-1173-e2e.js",
"tests/e2e/test-logo-rebrand-e2e.js",
"tests/e2e/test-logo-theme-e2e.js",
"tests/e2e/test-map-modal-fluid-e2e.js",
"tests/e2e/test-map-nodes-pagination-e2e.js",
"tests/e2e/test-nav-drawer-1064-e2e.js",
"tests/e2e/test-nav-fluid-1055-e2e.js",
"tests/e2e/test-nav-more-floor-1139-e2e.js",
"tests/e2e/test-nav-priority-1102-e2e.js",
"tests/e2e/test-nav-priority-1311-e2e.js",
"tests/e2e/test-nav-priority-1391-e2e.js",
"tests/e2e/test-neighbor-map-btn-clip-e2e.js",
"tests/e2e/test-node-reach-coverage-e2e.js",
"tests/e2e/test-node-reach-e2e.js",
"tests/e2e/test-nodes-export-e2e.js",
"tests/e2e/test-observer-iata-1188-e2e.js",
"tests/e2e/test-packets-scope-column.js",
"tests/e2e/test-path-inspector-coverage-e2e.js",
"tests/e2e/test-rx-coverage-mobile-nav-e2e.js",
"tests/e2e/test-show-neighbors.js",
"tests/e2e/test-slideover-1056-e2e.js",
"tests/e2e/test-slideover-1168-munger-e2e.js",
"tests/e2e/test-table-fluid-e2e.js",
"tests/e2e/test-touch-gestures-coverage-e2e.js",
"tests/e2e/test-touch-targets.js"
]
},
"playwrightRunner": {
"reason": "Requires the @playwright/test runner (not plain node), its configuration, Chromium, and a local server. @playwright/test is not currently declared in package.json; these suites are inventoried but not part of the standalone unit gate.",
"files": [
"test-issue-1522-trace-url-sync-e2e.js",
"test-marker-outline-weight.js",
"test-path-inspector-e2e.js",
"test-pr-1490-live-map-gpu-animations-e2e.js"
"tests/e2e/test-issue-1522-trace-url-sync-e2e.js",
"tests/e2e/test-marker-outline-weight.js",
"tests/e2e/test-path-inspector-e2e.js",
"tests/e2e/test-pr-1490-live-map-gpu-animations-e2e.js"
]
},
"domIntegration": {
"reason": "Requires jsdom, which is not currently declared in package.json. This DOM integration suite is inventoried separately; no new dependency is installed by the unit gate.",
"files": [
"test-table-sort.js"
"tests/e2e/test-table-sort.js"
]
}
}
+179 -178
View File
@@ -1,185 +1,186 @@
#!/bin/sh
# Authoritative standalone frontend test list for local runs and CI.
# Every root test is listed here or classified in scripts/non-unit-tests.json.
# Every suite in tests/unit is listed here; every suite in tests/e2e is classified
# in scripts/non-unit-tests.json.
set -e
cd "$(dirname "$0")"
node test-test-inventory.js
node test-1108-region-hide-nodes.js
node test-1659-analytics-warmup.js
node test-a11y-1705-subpath-hop-prefix-e2e.js
node test-a11y-1715-dark-role-swatches.js
node test-a11y-1716-rf-range-btn-active.js
node test-a11y-1719-contrast-root-causes-e2e.js
node test-a11y-axe-1668-selftest.js
node test-a11y-axe-routes-coverage.js
node test-aging.js
node test-analytics-channels-integration.js
node test-anl1-tooltip-render.js
node test-area-filter.js
node test-channel-color-picker.js
node test-channel-colors.js
node test-channel-decrypt-ecb.js
node test-channel-decrypt-insecure-context.js
node test-channel-decrypt-m345.js
node test-channel-fluid-layout.js
node test-channel-issue-1087.js
node test-channel-issue-1101.js
node test-channel-live-decrypt-userprefix.js
node test-channel-live-decrypt.js
node test-channel-modal-ux.js
node test-channel-psk-ux.js
node test-channel-qr-wiring.js
node test-channel-qr.js
node test-channel-sidebar-layout.js
node test-channel-ux-followup.js
node test-channel-ux-round2.js
node test-channels-merge-1498-unit.js
node test-clear-filters.js
node test-color-picker-ux.js
node test-compare-flood-filter.js
node test-compare-overlap.js
node test-confidence-indicator.js
node test-coverage-gate.js
node test-customizer-v2.js
node test-drag-manager.js
node test-embed-mode-1369.js
node test-fetch-all-nodes-pagination.js
node test-fluid-scaffolding.js
node test-frontend-helpers.js
node test-geofilter-draft.js
node test-hash-color.js
node test-hop-resolver-affinity.js
node test-issue-1065-gesture-hints-gates.js
node test-issue-1107-live-layout.js
node test-issue-1136-observer-iata-map.js
node test-issue-1166-first-seen-column.js
node test-issue-1189-composed-cell.js
node test-issue-1189-live-iata-badge.js
node test-issue-1279-p2-code-filter.js
node test-issue-1293-marker-shapes.js
node test-issue-1356-map-a11y.js
node test-issue-1360-pill-letter-count.js
node test-issue-1361-cb-presets.js
node test-issue-1364-pill-no-clamp.js
node test-issue-1375-scope-stats-fetch.js
node test-issue-1380-cb-reset-button.js
node test-issue-1380-cb-sim-overlay.js
node test-issue-1407-cb-preset-propagation.js
node test-issue-1409-no-encrypted-flood.js
node test-issue-1412-customizer-no-override.js
node test-issue-1415-packets-layout.js
node test-issue-1418-cb-preset-ramp.js
node test-issue-1418-deeplink-hops-channels.js
node test-issue-1418-edge-weights.js
node test-issue-1418-polish-review.js
node test-issue-1418-raw-hex-extraction.js
node test-issue-1418-spider-fan.js
node test-issue-1420-tile-providers.js
node test-issue-1438-customizer-mcrole.js
node test-issue-1438-marker-css-vars.js
node test-issue-1446-cb-preset-cascade.js
node test-issue-1450-logo-aspect.js
node test-issue-1454-channels-toggle.js
node test-issue-1456-score-labels.js
node test-issue-1461-mobile-page-actions.js
node test-issue-1470-card-bg-contrast.js
node test-issue-1470-node-tile-helper.js
node test-issue-1473-prefix-generator.js
node test-issue-1473-reserved-prefixes.js
node test-issue-1485-live-anim-z.js
node test-issue-1488-marker-stroke-vars.js
node test-issue-1496-reset-all-complete.js
node test-issue-1509-detect-preset.js
node test-issue-1509-nav-active-bg.js
node test-issue-1518-home-url.js
node test-issue-1532-live-fullscreen.js
node test-issue-1562-observers-summary.js
node test-issue-1563-aggregate-and-inflight.js
node test-issue-1574-live-map-max-nodes.js
node test-issue-1606-pagination.js
node test-issue-1614-tile-url-function.js
node test-issue-1619-feed-detail-card-draggable.js
node test-issue-1633-hide-1byte-hops.js
node test-issue-1644-redesign.js
node test-issue-1646-compare-polish.js
node test-issue-1648-followup-phosphor-leaks.js
node test-issue-1648-m1-emoji-scan.js
node test-issue-1648-m2-emoji-scan.js
node test-issue-1648-m3-emoji-scan.js
node test-issue-1648-m4-emoji-scan.js
node test-issue-1648-m5-emoji-scan.js
node test-issue-1648-m6-final-sweep.js
node test-issue-1648-m6-lint-self.js
node test-issue-1668-m2-contrast.js
node test-issue-1668-m3-typography.js
node test-issue-1668-m4-per-route.js
node test-issue-1697-mqtt-mobile-e2e.js
node test-issue-1699-retransmission-chart.js
node test-issue-1705-subpath-contrast.js
node test-issue-1753-copy-url-slash.js
node test-issue-1770-mobile-row-clamp.js
node test-issue-1789-observer-firmware-cols.js
node test-issue-1825-observer-node-cross-links.js
node test-issue-1833-legend-toggle-vcr-offset.js
node test-issue-1836-crossnav-case-normalization.js
node test-issue-1843-node-qr-quiet-zone.js
node test-issue-1846-observers-width.js
node test-issue-1849-trace-hashbytes.js
node test-issue-1851-channel-message-scope.js
node test-issue-1862-map-region-filter.js
node test-issue-1868-control-decode.js
node test-issue-1890-og-url.js
node test-issue-1956-release-routing.js
node test-issue-1979-scope-adverts-by-role.js
node test-issue-2001-map-scope-state.js
node test-issue-2012-clear-filters-selection.js
node test-live-anims.js
node test-live-dt-cap-1524.js
node test-live-legend-helper.js
node test-live-multibyte-filter.js
node test-live-region-filter.js
node test-live.js
node test-map-clustering.js
node test-mqtt-status-panel.js
node test-my-repeaters-dashboard.js
node test-naive-banner-tone.js
node test-node-hop-analytics.js
node test-node-reach-coverage-debounce.js
node test-node-reach-coverage.js
node test-nodes-export-wiring.js
node test-nodes-export.js
node test-observer-iata-1188.js
node test-observer-menu-interactions.js
node test-observer-naive-clock-1478.js
node test-observer-search-filter.js
node test-observers-headings.js
node test-packet-filter-time.js
node test-packet-filter-ux.js
node test-packet-filter.js
node test-packets-local-channels.js
node test-packets.js
node test-panel-corner.js
node test-path-inspector.js
node test-payload-labels-content.js
node test-payload-labels-namespace.js
node test-perf-anomaly.js
node test-perf-disk-io-1120.js
node test-perf-go-runtime.js
node test-perf-render-1258.js
node test-preflight-xss-gate.js
node test-pull-to-reconnect-1091.js
node test-pull-to-reconnect.js
node test-repeater-metric-scatter.js
node test-rx-coverage-config-race.js
node test-rx-coverage-escape.js
node test-scope-audit-styles-linked.js
node test-slideover-1056-rowsel-strict.js
node test-top-routes-overlay.js
node test-traces.js
node test-url-state.js
node test-warmup-banner.js
node test-ws-stale-watchdog-1074.js
node test-xss-escape-sinks.js
node tests/unit/test-test-inventory.js
node tests/unit/test-1108-region-hide-nodes.js
node tests/unit/test-1659-analytics-warmup.js
node tests/unit/test-a11y-1705-subpath-hop-prefix-e2e.js
node tests/unit/test-a11y-1715-dark-role-swatches.js
node tests/unit/test-a11y-1716-rf-range-btn-active.js
node tests/unit/test-a11y-1719-contrast-root-causes-e2e.js
node tests/unit/test-a11y-axe-1668-selftest.js
node tests/unit/test-a11y-axe-routes-coverage.js
node tests/unit/test-aging.js
node tests/unit/test-analytics-channels-integration.js
node tests/unit/test-anl1-tooltip-render.js
node tests/unit/test-area-filter.js
node tests/unit/test-channel-color-picker.js
node tests/unit/test-channel-colors.js
node tests/unit/test-channel-decrypt-ecb.js
node tests/unit/test-channel-decrypt-insecure-context.js
node tests/unit/test-channel-decrypt-m345.js
node tests/unit/test-channel-fluid-layout.js
node tests/unit/test-channel-issue-1087.js
node tests/unit/test-channel-issue-1101.js
node tests/unit/test-channel-live-decrypt-userprefix.js
node tests/unit/test-channel-live-decrypt.js
node tests/unit/test-channel-modal-ux.js
node tests/unit/test-channel-psk-ux.js
node tests/unit/test-channel-qr-wiring.js
node tests/unit/test-channel-qr.js
node tests/unit/test-channel-sidebar-layout.js
node tests/unit/test-channel-ux-followup.js
node tests/unit/test-channel-ux-round2.js
node tests/unit/test-channels-merge-1498-unit.js
node tests/unit/test-clear-filters.js
node tests/unit/test-color-picker-ux.js
node tests/unit/test-compare-flood-filter.js
node tests/unit/test-compare-overlap.js
node tests/unit/test-confidence-indicator.js
node tests/unit/test-coverage-gate.js
node tests/unit/test-customizer-v2.js
node tests/unit/test-drag-manager.js
node tests/unit/test-embed-mode-1369.js
node tests/unit/test-fetch-all-nodes-pagination.js
node tests/unit/test-fluid-scaffolding.js
node tests/unit/test-frontend-helpers.js
node tests/unit/test-geofilter-draft.js
node tests/unit/test-hash-color.js
node tests/unit/test-hop-resolver-affinity.js
node tests/unit/test-issue-1065-gesture-hints-gates.js
node tests/unit/test-issue-1107-live-layout.js
node tests/unit/test-issue-1136-observer-iata-map.js
node tests/unit/test-issue-1166-first-seen-column.js
node tests/unit/test-issue-1189-composed-cell.js
node tests/unit/test-issue-1189-live-iata-badge.js
node tests/unit/test-issue-1279-p2-code-filter.js
node tests/unit/test-issue-1293-marker-shapes.js
node tests/unit/test-issue-1356-map-a11y.js
node tests/unit/test-issue-1360-pill-letter-count.js
node tests/unit/test-issue-1361-cb-presets.js
node tests/unit/test-issue-1364-pill-no-clamp.js
node tests/unit/test-issue-1375-scope-stats-fetch.js
node tests/unit/test-issue-1380-cb-reset-button.js
node tests/unit/test-issue-1380-cb-sim-overlay.js
node tests/unit/test-issue-1407-cb-preset-propagation.js
node tests/unit/test-issue-1409-no-encrypted-flood.js
node tests/unit/test-issue-1412-customizer-no-override.js
node tests/unit/test-issue-1415-packets-layout.js
node tests/unit/test-issue-1418-cb-preset-ramp.js
node tests/unit/test-issue-1418-deeplink-hops-channels.js
node tests/unit/test-issue-1418-edge-weights.js
node tests/unit/test-issue-1418-polish-review.js
node tests/unit/test-issue-1418-raw-hex-extraction.js
node tests/unit/test-issue-1418-spider-fan.js
node tests/unit/test-issue-1420-tile-providers.js
node tests/unit/test-issue-1438-customizer-mcrole.js
node tests/unit/test-issue-1438-marker-css-vars.js
node tests/unit/test-issue-1446-cb-preset-cascade.js
node tests/unit/test-issue-1450-logo-aspect.js
node tests/unit/test-issue-1454-channels-toggle.js
node tests/unit/test-issue-1456-score-labels.js
node tests/unit/test-issue-1461-mobile-page-actions.js
node tests/unit/test-issue-1470-card-bg-contrast.js
node tests/unit/test-issue-1470-node-tile-helper.js
node tests/unit/test-issue-1473-prefix-generator.js
node tests/unit/test-issue-1473-reserved-prefixes.js
node tests/unit/test-issue-1485-live-anim-z.js
node tests/unit/test-issue-1488-marker-stroke-vars.js
node tests/unit/test-issue-1496-reset-all-complete.js
node tests/unit/test-issue-1509-detect-preset.js
node tests/unit/test-issue-1509-nav-active-bg.js
node tests/unit/test-issue-1518-home-url.js
node tests/unit/test-issue-1532-live-fullscreen.js
node tests/unit/test-issue-1562-observers-summary.js
node tests/unit/test-issue-1563-aggregate-and-inflight.js
node tests/unit/test-issue-1574-live-map-max-nodes.js
node tests/unit/test-issue-1606-pagination.js
node tests/unit/test-issue-1614-tile-url-function.js
node tests/unit/test-issue-1619-feed-detail-card-draggable.js
node tests/unit/test-issue-1633-hide-1byte-hops.js
node tests/unit/test-issue-1644-redesign.js
node tests/unit/test-issue-1646-compare-polish.js
node tests/unit/test-issue-1648-followup-phosphor-leaks.js
node tests/unit/test-issue-1648-m1-emoji-scan.js
node tests/unit/test-issue-1648-m2-emoji-scan.js
node tests/unit/test-issue-1648-m3-emoji-scan.js
node tests/unit/test-issue-1648-m4-emoji-scan.js
node tests/unit/test-issue-1648-m5-emoji-scan.js
node tests/unit/test-issue-1648-m6-final-sweep.js
node tests/unit/test-issue-1648-m6-lint-self.js
node tests/unit/test-issue-1668-m2-contrast.js
node tests/unit/test-issue-1668-m3-typography.js
node tests/unit/test-issue-1668-m4-per-route.js
node tests/unit/test-issue-1697-mqtt-mobile-e2e.js
node tests/unit/test-issue-1699-retransmission-chart.js
node tests/unit/test-issue-1705-subpath-contrast.js
node tests/unit/test-issue-1753-copy-url-slash.js
node tests/unit/test-issue-1770-mobile-row-clamp.js
node tests/unit/test-issue-1789-observer-firmware-cols.js
node tests/unit/test-issue-1825-observer-node-cross-links.js
node tests/unit/test-issue-1833-legend-toggle-vcr-offset.js
node tests/unit/test-issue-1836-crossnav-case-normalization.js
node tests/unit/test-issue-1843-node-qr-quiet-zone.js
node tests/unit/test-issue-1846-observers-width.js
node tests/unit/test-issue-1849-trace-hashbytes.js
node tests/unit/test-issue-1851-channel-message-scope.js
node tests/unit/test-issue-1862-map-region-filter.js
node tests/unit/test-issue-1868-control-decode.js
node tests/unit/test-issue-1890-og-url.js
node tests/unit/test-issue-1956-release-routing.js
node tests/unit/test-issue-1979-scope-adverts-by-role.js
node tests/unit/test-issue-2001-map-scope-state.js
node tests/unit/test-issue-2012-clear-filters-selection.js
node tests/unit/test-live-anims.js
node tests/unit/test-live-dt-cap-1524.js
node tests/unit/test-live-legend-helper.js
node tests/unit/test-live-multibyte-filter.js
node tests/unit/test-live-region-filter.js
node tests/unit/test-live.js
node tests/unit/test-map-clustering.js
node tests/unit/test-mqtt-status-panel.js
node tests/unit/test-my-repeaters-dashboard.js
node tests/unit/test-naive-banner-tone.js
node tests/unit/test-node-hop-analytics.js
node tests/unit/test-node-reach-coverage-debounce.js
node tests/unit/test-node-reach-coverage.js
node tests/unit/test-nodes-export-wiring.js
node tests/unit/test-nodes-export.js
node tests/unit/test-observer-iata-1188.js
node tests/unit/test-observer-menu-interactions.js
node tests/unit/test-observer-naive-clock-1478.js
node tests/unit/test-observer-search-filter.js
node tests/unit/test-observers-headings.js
node tests/unit/test-packet-filter-time.js
node tests/unit/test-packet-filter-ux.js
node tests/unit/test-packet-filter.js
node tests/unit/test-packets-local-channels.js
node tests/unit/test-packets.js
node tests/unit/test-panel-corner.js
node tests/unit/test-path-inspector.js
node tests/unit/test-payload-labels-content.js
node tests/unit/test-payload-labels-namespace.js
node tests/unit/test-perf-anomaly.js
node tests/unit/test-perf-disk-io-1120.js
node tests/unit/test-perf-go-runtime.js
node tests/unit/test-perf-render-1258.js
node tests/unit/test-preflight-xss-gate.js
node tests/unit/test-pull-to-reconnect-1091.js
node tests/unit/test-pull-to-reconnect.js
node tests/unit/test-repeater-metric-scatter.js
node tests/unit/test-rx-coverage-config-race.js
node tests/unit/test-rx-coverage-escape.js
node tests/unit/test-scope-audit-styles-linked.js
node tests/unit/test-slideover-1056-rowsel-strict.js
node tests/unit/test-top-routes-overlay.js
node tests/unit/test-traces.js
node tests/unit/test-url-state.js
node tests/unit/test-warmup-banner.js
node tests/unit/test-ws-stale-watchdog-1074.js
node tests/unit/test-xss-escape-sinks.js
echo "All standalone frontend suites passed"
@@ -31,6 +31,7 @@
*/
'use strict';
const REPO_ROOT = require('path').resolve(__dirname, '..', '..');
const fs = require('fs');
const path = require('path');
@@ -41,7 +42,7 @@ const path = require('path');
const BASE = process.env.BASE_URL || 'http://localhost:13581';
const ROUTES_FILTER = (process.env.AXE_ROUTES_ONLY || '').split(',').filter(Boolean);
const SHOT_DIR = process.env.AXE_SCREENSHOT_DIR || '/tmp/axe-1668';
const ALLOWLIST_PATH = path.join(__dirname, 'tests', 'a11y-allowlist.yaml');
const ALLOWLIST_PATH = path.join(REPO_ROOT, 'tests', 'a11y-allowlist.yaml');
// Routes: M1 audit baseline (already proven coverage).
// Hash routes — CoreScope is a SPA, server returns the same shell for any path.
@@ -19,12 +19,13 @@
* Usage: node test-analytics-fluid-charts.js
*/
'use strict';
const REPO_ROOT = require('path').resolve(__dirname, '..', '..');
const { chromium } = require('playwright');
const fs = require('fs');
const path = require('path');
const os = require('os');
const CSS_PATH = path.join(__dirname, 'public', 'style.css');
const CSS_PATH = path.join(REPO_ROOT, 'public', 'style.css');
const cssHref = 'file://' + CSS_PATH;
// Minimal harness: a sized wrapper that defines the available width
@@ -1,3 +1,4 @@
const REPO_ROOT = require('path').resolve(__dirname, '..', '..');
/**
* Playwright E2E tests — proof of concept
* Runs against prod (analyzer.00id.net), read-only.
@@ -2313,7 +2314,7 @@ async function run() {
if (coverage) {
const fs = require('fs');
const path = require('path');
const outDir = path.join(__dirname, '.nyc_output');
const outDir = path.join(REPO_ROOT, '.nyc_output');
if (!fs.existsSync(outDir)) fs.mkdirSync(outDir, { recursive: true });
fs.writeFileSync(path.join(outDir, 'e2e-coverage.json'), JSON.stringify(coverage));
console.log(`Frontend coverage from E2E: ${Object.keys(coverage).length} files`);
@@ -30,12 +30,13 @@
* to convert SKIP -> FAIL.
*/
'use strict';
const REPO_ROOT = require('path').resolve(__dirname, '..', '..');
const fs = require('fs');
const path = require('path');
const { chromium } = require('playwright');
const CSS_PATH = path.resolve(__dirname, 'public', 'style.css');
const CSS_PATH = path.resolve(REPO_ROOT, 'public', 'style.css');
function fail(msg) {
console.error(`test-issue-1705-subpath-contrast-e2e.js: FAIL — ${msg}`);

Some files were not shown because too many files have changed in this diff Show More