feat(runner): WS protocol server with handshake

apps/runner scaffold (app-tier, walking-skeleton story 04): WS server
speaking @repo/core-runner-protocol. Every inbound/outbound frame is
envelope-wrapped and zod-parsed; hello/ready handshake gates on the
workspace-scoped token (constant-time compare, redacted token on
rejection replies); named error events for version/schema/auth
rejections. Config via env only (token never argv); port announced on
stdout for the story-06 provisioner. Runtime deps: ws (the standard
Node WS server; ADR-022 traces do not apply to app-tier) and zod.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016j8z4VHjedXDTjEDNg7qHK
This commit is contained in:
2026-07-12 22:29:24 +02:00
parent 11e5012572
commit b090e26701
19 changed files with 1331 additions and 11 deletions

View File

@@ -52,11 +52,12 @@ See `docs/guides/runbook.md` for the full workflow.
Apps:
| App | Port | Purpose |
| ---------------- | ---- | ---------------------------------------------------------------------------------------------- |
| `apps/web-next` | 3000 | Next.js the hosted editor shell + landing page; custom `server.ts` hosts Next.js + Socket.IO |
| `apps/cms` | 3001 | Payload admin |
| `apps/storybook` | 6006 | Storybook component workshop for `core-ui` + feature UI |
| App | Port | Purpose |
| ---------------- | --------- | ---------------------------------------------------------------------------------------------- |
| `apps/web-next` | 3000 | Next.js the hosted editor shell + landing page; custom `server.ts` hosts Next.js + Socket.IO |
| `apps/cms` | 3001 | Payload admin |
| `apps/storybook` | 6006 | Storybook component workshop for `core-ui` + feature UI |
| `apps/runner` | ephemeral | Workspace runner (ADR-027) WS runner-protocol server; clone/install/scan/preview stages |
`auth` and `editor` are the feature packages today (`editor` is UI-only empty `useCases`, no binders). The remaining Veect control-plane features (workspaces, projects, discovery, design-doc, …) land as sibling packages under `packages/` following the same shape. Per ADR-029, `packages/editor` is rebuilt under template conventions the prototype codebase under `docs/product/reference/` is reference material, never vendored.
@@ -66,7 +67,7 @@ Apps:
### Five tags
- **app** (3 packages) `apps/web-next`, `apps/cms`, `apps/storybook`
- **app** (4 packages) `apps/web-next`, `apps/cms`, `apps/storybook`, `apps/runner`
- **core-composition** (3 packages) `packages/core-api`, `core-cms` (must-have); `core-trpc` (optional, scaffolded)
- **core** (9 packages) `packages/core-shared` (must-have); `core-ui`, `core-events`, `core-realtime`, `core-audit`, `core-analytics`, `core-consent`, `core-dsr` (optional cores, all currently scaffolded new ones via `pnpm turbo gen core-package <name>`); `core-runner-protocol` (hand-scaffolded outside the generator's snapshot set)
- **feature** (1 package) `packages/auth`