Ruview/.github/workflows
rUv a70ca90525
Some checks are pending
Continuous Integration / Code Quality & Security (push) Waiting to run
Continuous Integration / Rust Workspace Tests (push) Waiting to run
Continuous Integration / UI JavaScript Tests (push) Waiting to run
Continuous Integration / Tests (push) Waiting to run
Continuous Integration / Tests-1 (push) Waiting to run
Continuous Integration / Tests-2 (push) Waiting to run
Continuous Integration / Performance Tests (push) Blocked by required conditions
Continuous Integration / Docker Build & Test (push) Blocked by required conditions
Continuous Integration / API Documentation (push) Blocked by required conditions
Continuous Integration / Notify (push) Blocked by required conditions
Fix-Marker Regression Guard / Verify fix markers (push) Waiting to run
Security Scanning / Static Application Security Testing (push) Waiting to run
Security Scanning / Dependency Vulnerability Scan (push) Waiting to run
Security Scanning / Container Security Scan (push) Waiting to run
Security Scanning / Infrastructure Security Scan (push) Waiting to run
Security Scanning / Secret Scanning (push) Waiting to run
Security Scanning / License Compliance Scan (push) Waiting to run
Security Scanning / Security Policy Compliance (push) Waiting to run
Security Scanning / Security Report (push) Blocked by required conditions
wifi-densepose sensing-server → Docker Hub + ghcr.io / build · push · smoke-test (push) Waiting to run
fix(ui): pose stream WebSocket 401s when RUVIEW_API_TOKEN is set (#1461) (#1462)
websocket.service.js (used by the pose/event streams) opened a bare
`new WebSocket(url)` with no ADR-272 ticket exchange, unlike
sensing.service.js which already mints a ticket per connect. Since a
browser cannot set an Authorization header on a WebSocket upgrade, and
the server rejects a long-lived bearer passed as a query string
(CWE-598), the pose stream 401'd whenever auth was on — visible in the
Live Demo tab as "Failed to create WebSocket connection".

Fix: createWebSocketWithTimeout() now strips any `token` query param a
caller put on the URL (pose.service.js does this) and exchanges the
stored bearer for a single-use `?ticket=` via withWsTicket(), done at
this one choke point so every consumer (pose, events, training) and
every reconnect attempt gets a fresh ticket.

Second, smaller bug: pose-fusion/js/main.js auto-connected to a
hardcoded `ws://localhost:8765/ws/sensing`, but the Docker image serves
the sensing WebSocket on :3001 (the same 3000->3001 mapping
sensing.service.js already encodes) — the auto-connect dialed a port
nothing listens on. Reuses that port mapping and tickets both the
auto-connect and the manual "Connect" button.

Bumped the pose-fusion.html cache-buster (v=13 -> v=14) so browsers
actually fetch the updated main.js.

Adds ui/services/websocket.service.test.mjs (4 executed Node tests,
stubbed WebSocket/fetch/localStorage) covering: no-auth passthrough,
ticket exchange + bearer-never-in-URL, stray ?token= stripping, and the
pre-ADR-272 404 fallback. Wired into the CI "Run UI unit tests" step.

Reported with a verified fix in #1461 by wsc7r4zcj4-collab; this PR
implements the same fix against current main with an added regression
test.

Closes #1461
2026-07-28 10:59:00 -04:00
..
aether-arena-harness.yml feat(ADR-262 P3): live /api/field + /ws/field — RuView sensing speaks RuField (fail-closed egress) (#1071) 2026-06-14 13:55:41 -04:00
bench-regression.yml ci(bench): compile-verify regression gate for v2 criterion benches + ADR-174 (#1094) 2026-06-15 08:26:38 -04:00
bfld-mqtt-integration.yml feat(ADR-262 P3): live /api/field + /ws/field — RuView sensing speaks RuField (fail-closed egress) (#1071) 2026-06-14 13:55:41 -04:00
cd.yml fix release publishing pipelines (#1417) 2026-07-24 08:57:36 -07:00
ci.yml fix(ui): pose stream WebSocket 401s when RUVIEW_API_TOKEN is set (#1461) (#1462) 2026-07-28 10:59:00 -04:00
clone-tracking.yml feat(ADR-262 P3): live /api/field + /ws/field — RuView sensing speaks RuField (fail-closed egress) (#1071) 2026-06-14 13:55:41 -04:00
cog-ha-matter-release.yml feat(ADR-262 P3): live /api/field + /ws/field — RuView sensing speaks RuField (fail-closed egress) (#1071) 2026-06-14 13:55:41 -04:00
dashboard-a11y.yml feat(ADR-262 P3): live /api/field + /ws/field — RuView sensing speaks RuField (fail-closed egress) (#1071) 2026-06-14 13:55:41 -04:00
dashboard-pages.yml feat(ADR-262 P3): live /api/field + /ws/field — RuView sensing speaks RuField (fail-closed egress) (#1071) 2026-06-14 13:55:41 -04:00
desktop-release.yml feat(ADR-262 P3): live /api/field + /ws/field — RuView sensing speaks RuField (fail-closed egress) (#1071) 2026-06-14 13:55:41 -04:00
firmware-ci.yml fix open issue release blockers 2026-07-18 18:01:23 -04:00
firmware-qemu.yml feat(ADR-262 P3): live /api/field + /ws/field — RuView sensing speaks RuField (fail-closed egress) (#1071) 2026-06-14 13:55:41 -04:00
fix-regression-guard.yml feat(ADR-262 P3): live /api/field + /ws/field — RuView sensing speaks RuField (fail-closed egress) (#1071) 2026-06-14 13:55:41 -04:00
mqtt-integration.yml feat(ADR-262 P3): live /api/field + /ws/field — RuView sensing speaks RuField (fail-closed egress) (#1071) 2026-06-14 13:55:41 -04:00
npm-packages.yml docs(adr): deep review of the RuView npm surface — ADR-263/264/265 optimization strategies (#1229) 2026-07-02 13:11:15 -04:00
nvsim-server-docker.yml feat(ADR-262 P3): live /api/field + /ws/field — RuView sensing speaks RuField (fail-closed egress) (#1071) 2026-06-14 13:55:41 -04:00
pip-release.yml fix release publishing pipelines (#1417) 2026-07-24 08:57:36 -07:00
pointcloud-pages.yml feat(ADR-262 P3): live /api/field + /ws/field — RuView sensing speaks RuField (fail-closed egress) (#1071) 2026-06-14 13:55:41 -04:00
python-ci.yml ci(python): gate python/ package in main CI + add fix-marker guards for filename-collision and wheel-budget regressions 2026-07-21 22:03:59 -07:00
ruview-npm-release.yml docs(adr): deep review of the RuView npm surface — ADR-263/264/265 optimization strategies (#1229) 2026-07-02 13:11:15 -04:00
ruview-swarm-ci.yml ci(ruview-swarm): drop removed itar-unrestricted feature from test matrix 2026-06-16 16:34:06 -04:00
security-scan.yml feat(ADR-262 P3): live /api/field + /ws/field — RuView sensing speaks RuField (fail-closed egress) (#1071) 2026-06-14 13:55:41 -04:00
sensing-server-docker.yml fix(ci): bypass hardened entrypoint for asset inspection (#1364) 2026-07-19 02:50:47 -04:00
threejs-pages.yml feat(ADR-262 P3): live /api/field + /ws/field — RuView sensing speaks RuField (fail-closed egress) (#1071) 2026-06-14 13:55:41 -04:00
update-submodules.yml ci: fix "Update vendor submodules" workflow (identity + drop --merge) 2026-05-11 12:33:40 -04:00
verify-pipeline.yml feat(ADR-262 P3): live /api/field + /ws/field — RuView sensing speaks RuField (fail-closed egress) (#1071) 2026-06-14 13:55:41 -04:00