---
id: walking-skeleton
prd: docs/work/prds/walking-skeleton.prd.md
title: Walking skeleton — one real component, end to end through the hosted spine
type: epic
status: in-progress
features:
  [workspaces, discovery, core-runner-protocol, editor, runner, web-next, core-testing]
created: 2026-07-12T10:24:14Z
---

## Goal

A signed-in user connects a fixture repo; a cloud runner clones and installs it; discovery finds one real component; the editor renders that component on the board through the repo's own Vite in an iframe; clicking it inside the iframe selects it in the editor. One thin, honest, end-to-end vertical through every seam that matters: control plane ↔ runner provisioning, runner ↔ repo toolchain, and editor ↔ iframe canvas across the origin boundary (ADR-027/028/029).

## Why

Every Veect risk that matters lives in the seams, not the parts. The original tech spec front-loaded exactly this with its M0 walking skeleton, but its acceptance criteria died with the Electron distribution (ADR-027). Nothing yet proves the hosted spine works at all, and every subsequent PRD (workspaces, discovery, design-doc, codegen, projects, ai) builds on these seams. If the spine is wrong, we must find out before nine PRDs are stacked on it.

**Sequencing note:** this epic builds on the sibling `platform-retrofit` epic (clean floor, ADR-022 traces, scaffolded optional cores incl. `core-events` + `core-realtime`, pre-approved editor deps). `platform-retrofit` must complete before this epic starts; cross-epic `depends-on` frontmatter is not supported, so this note (and story 01's Why) is the dependency record.

## Stories

- [ ] [01 — vite-kitchen fixture + git-serving test helpers](01-vite-kitchen-fixture/_story.md)
- [ ] [02 — core-runner-protocol package](02-core-runner-protocol/_story.md)
- [ ] [03 — workspaces feature core: connect, status, list + encrypted credentials](03-workspaces-feature-core/_story.md)
- [ ] [04 — runner app: protocol server, clone, install](04-runner-app-protocol-clone-install/_story.md)
- [ ] [05 — runner scan + preview adapter + canvas agent](05-runner-scan-and-preview-adapter/_story.md)
- [ ] [06 — IRunnerProvisioner port + process/Docker implementations](06-runner-provisioner-port/_story.md)
- [ ] [07 — runner lifecycle: events + realtime channel](07-runner-lifecycle-events-and-realtime/_story.md)
- [ ] [08 — discovery feature: registry + scan ingestion](08-discovery-feature/_story.md)
- [ ] [09 — editor package: board, frame, canvas-protocol client](09-editor-package/_story.md)
- [ ] [10 — web-next wiring: connect UX, staged progress, editor route](10-web-next-wiring/_story.md)
- [ ] [11 — flagship e2e: connect-to-selection](11-flagship-e2e/_story.md)
