Commit Graph
2 Commits
Author SHA1 Message Date
Omar SobhandClaude Opus 4.8 f21bbdf31e feat(apess): wire real ZeroClaw nodes + live/sim mode + cloud→local fallback
Turn the workshop shell into a real on-device agent platform: APESS now
proxies each team's Arduino Uno Q (running ZeroClaw) and drives
generate → compile → flash from the UI, with a simulation fallback.

api — node backbone
- nodes.ts: team→node registry, a pure ZeroClaw /api/events → WsEvent
  mapper, per-node live SSE subscription fanned out to the collective hub
  AND per-team participant listeners, and a prompt proxy. Bearer tokens
  stay server-side; list()/broadcasts never expose them.
- routes: POST/GET/DELETE /nodes (register is admin-only), public
  POST /nodes/:teamId/prompt, and a participant-scoped SSE
  GET /nodes/:teamId/events.
- WsEvent gains node:status / node:activity.

front-end
- session store: mode 'live' | 'sim' (default sim); a 'local' provider
  and a harness.fallbackLocal toggle ("cloud first, on-board Qwen if it
  fails") reflected in the harness.toml preview.
- EnvSetup: Simulation / Live board toggle — sim runs a virtual board
  (self-test + Proceed with no hardware), live requires a registered node.
- BuildFlash panel (in Module 2): prompt the board, watch activity stream
  live (SSE) or a simulated generate→flash sequence.
- lib/api: sendPrompt + openTeamActivity (EventSource).

housekeeping
- better-sqlite3 → 12.11 (Node 26 support; the 11.x native build fails on
  Node 26's V8).
- vitest excludes the vendored Uno-QClaw/ tree.

Tests: front-end 172, api 29, typecheck clean, prod build passes.

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
2026-07-03 05:52:51 -07:00
Omar Sobh 3d433b9b1d Initial scaffold: React 19 + Vite + Tailwind + shadcn + Vitest
Scaffolds APESS 2026 workshop platform per PRD §4.1 with strict-TDD
infrastructure and the 1300-LOC ceiling enforced via ESLint.

- React 19.2 + Vite 8 + TypeScript 6 baseline
- Tailwind v3 + shadcn/ui (new-york style) configured (components.json)
- Path alias @/* -> src/*
- Zustand session store mirroring the prototype's shared.js shape
  (team, device, phases, harness, stats, add, submission) with
  sessionStorage persistence
- PhaseStrip component covering the five PRD-mandated phases, wired
  to react-router-dom v7 with active/done/pending data-state surfaces
  for snapshot-friendly testing
- Vitest + React Testing Library + jsdom green: 4/4 tests pass
- ESLint max-lines: 1300 enforced; largest file currently 106 LOC

Next: shadcn primitive install, landing page from prototype index.html,
workshop screens 1-5, /admin instructor dashboard, /judge review.
2026-06-09 18:30:34 -05:00