spaxel/dashboard
jedarden 7e0bf66ddd fix(bf-56uk): make blob-identity TypeScript verification compile-clean
Add the TypeScript tooling and compile-time check that verifies the blob
identity fields (personName/assignedColor/identityResolved + deprecated
aliases) declared on the Blob interface are TypeScript-compliant:

  - dashboard/tsconfig.json: strict tsc config, noEmit, includes types/**
  - dashboard/package.json: add `typescript` devDep and `npm run typecheck`
  - dashboard/types/blob-identity.check.ts: pure compile-time assertions

The check file is the TypeScript mirror of the Go identity-field
serialization suites (bf-5151/bf-2ibc/bf-5v3q/bf-3wkz/bf-4qto): a zero-value
blob (no identity set), a resolved-identity blob (camelCase keys the Go
dashboard projection emits), and the identityResolved tri-state must all
satisfy the Blob interface with no missing-field or type-mismatch errors.

Fix the one compilation error the check surfaced: the HasField helper used
`NonNullable<T[K]> extends NonNullable<V>`, which TypeScript does not
reliably evaluate for an indexed type parameter inside a nested conditional —
it produced a spurious TS2344 `false` for the optional `boolean`
identityResolved field. Rewrite it as `V extends T[K]` (concrete V on the
left, indexed T[K] on the right), which resolves correctly in every case and
still catches missing keys and type mismatches.

Verified: `npm run typecheck` exits 0; `go vet`/`go build`/`go test ./...`
on mothership all pass (no Go touched).

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-06 19:32:31 -04:00
..
css Implement fleet status page with full table view, bulk actions, and camera fly-to 2026-05-06 07:34:01 -04:00
js feat(bf-2y6u): implement coverage degradation overlay for self-healing events 2026-07-06 02:29:06 -04:00
static Implement fleet status page with full table view and bulk actions 2026-05-06 07:47:34 -04:00
test-results feat(feedback): enhance false positive explanations with diagnostic context 2026-04-25 12:35:04 -04:00
tests feat(bf-5rre): add accessibility tests for onboarding flow 2026-07-06 00:29:42 -04:00
types fix(bf-56uk): make blob-identity TypeScript verification compile-clean 2026-07-06 19:32:31 -04:00
ambient.html Implement Component 31: Ambient Dashboard Mode 2026-05-06 03:59:12 -04:00
fleet.html Implement fleet status page with full table view, bulk actions, and camera fly-to 2026-05-06 07:34:01 -04:00
help_articles.json feat(dashboard): polish tap-to-jump UX and remove expert-mode gating 2026-04-24 23:16:56 -04:00
index.html Implement simple mode (progressive disclosure) for household members 2026-05-06 01:57:28 -04:00
integrations.html feat(explainability): detection explainability overlay with per-link contributions, Fresnel zones, and BLE identity 2026-04-24 19:23:55 -04:00
jest.config.js feat: implement spatial quick actions context menu for 3D scene 2026-04-10 22:56:17 -04:00
live.html Implement mobile-responsive expert mode for Spaxel dashboard 2026-05-06 07:04:24 -04:00
package-lock.json fix(bf-56uk): make blob-identity TypeScript verification compile-clean 2026-07-06 19:32:31 -04:00
package.json fix(bf-56uk): make blob-identity TypeScript verification compile-clean 2026-07-06 19:32:31 -04:00
playwright.config.js feat(dashboard): add axe-core accessibility CI gate for all dashboard pages 2026-04-24 18:31:17 -04:00
README.md feat(dashboard): add axe-core accessibility CI gate for all dashboard pages 2026-04-24 18:31:17 -04:00
setup.html feat(explainability): detection explainability overlay with per-link contributions, Fresnel zones, and BLE identity 2026-04-24 19:23:55 -04:00
simple.html Implement simple mode (progressive disclosure) for household members 2026-05-06 01:57:28 -04:00
simulator.html simulator: fix GDOP overlay and shopping list JSON output 2026-05-05 23:34:43 -04:00
test-transformcontrols.html docs(bf-1oj7): verify TransformControls already implemented for live nodes 2026-07-05 23:48:18 -04:00
tsconfig.json fix(bf-56uk): make blob-identity TypeScript verification compile-clean 2026-07-06 19:32:31 -04:00

Spaxel Dashboard

Running Tests

Unit Tests (Jest)

npm test

Accessibility Tests (axe-core + Playwright)

# First-time setup: install browsers
npx playwright install --with-deps chromium

# Run accessibility gate
npm run test:a11y

The accessibility test loads each dashboard page (index, live, fleet, setup, integrations) via a local static server and asserts zero WCAG 2A/2AA violations using @axe-core/playwright. CI fails the build if any violation is introduced.

CI Integration (Argo Workflows)

Add the following step to the spaxel-build WorkflowTemplate before the container build:

- name: a11y-gate
  container:
    image: node:20-bookworm-slim
    command: [sh, -c]
    args:
      - |
        cd dashboard
        npm ci
        npx playwright install --with-deps chromium
        npm run test:a11y
    resources:
      limits:
        memory: 512Mi
        cpu: "1"