docs(work): close walking-skeleton story 04 (runner clone/install)

This commit is contained in:
2026-07-12 22:55:17 +02:00
parent ec7bf948af
commit 882c47b014
2 changed files with 17 additions and 25 deletions

View File

@@ -1,5 +1,5 @@
{ {
"updated_at": "2026-07-12T20:37:41.771Z", "updated_at": "2026-07-12T20:55:19.905Z",
"epics": { "epics": {
"platform-retrofit": { "platform-retrofit": {
"status": "done", "status": "done",
@@ -139,10 +139,10 @@
"blocks": [] "blocks": []
}, },
"04-runner-app-protocol-clone-install": { "04-runner-app-protocol-clone-install": {
"status": "todo", "status": "done",
"title": "runner app — protocol server, clone stage, install stage", "title": "runner app — protocol server, clone stage, install stage",
"ac_total": 3, "ac_total": 3,
"ac_completed": 0, "ac_completed": 3,
"depends_on": [ "depends_on": [
"01-vite-kitchen-fixture", "01-vite-kitchen-fixture",
"02-core-runner-protocol" "02-core-runner-protocol"
@@ -238,8 +238,13 @@
"ready": [ "ready": [
{ {
"epic": "walking-skeleton", "epic": "walking-skeleton",
"story": "04-runner-app-protocol-clone-install", "story": "05-runner-scan-and-preview-adapter",
"title": "runner app — protocol server, clone stage, install stage" "title": "runner scan stage + embedded-Vite preview adapter + canvas agent v0"
},
{
"epic": "walking-skeleton",
"story": "06-runner-provisioner-port",
"title": "IRunnerProvisioner port + local-process and single-host Docker implementations"
}, },
{ {
"epic": "walking-skeleton", "epic": "walking-skeleton",
@@ -253,22 +258,6 @@
} }
], ],
"blocked": [ "blocked": [
{
"epic": "walking-skeleton",
"story": "05-runner-scan-and-preview-adapter",
"title": "runner scan stage + embedded-Vite preview adapter + canvas agent v0",
"waiting_on": [
"walking-skeleton/04-runner-app-protocol-clone-install"
]
},
{
"epic": "walking-skeleton",
"story": "06-runner-provisioner-port",
"title": "IRunnerProvisioner port + local-process and single-host Docker implementations",
"waiting_on": [
"walking-skeleton/04-runner-app-protocol-clone-install"
]
},
{ {
"epic": "walking-skeleton", "epic": "walking-skeleton",
"story": "08-discovery-feature", "story": "08-discovery-feature",

View File

@@ -3,11 +3,12 @@ id: 04-runner-app-protocol-clone-install
epic: walking-skeleton epic: walking-skeleton
title: runner app — protocol server, clone stage, install stage title: runner app — protocol server, clone stage, install stage
type: technical-story type: technical-story
status: todo status: done
feature: runner feature: runner
depends-on: [01-vite-kitchen-fixture, 02-core-runner-protocol] depends-on: [01-vite-kitchen-fixture, 02-core-runner-protocol]
blocks: [05-runner-scan-and-preview-adapter, 06-runner-provisioner-port] blocks: [05-runner-scan-and-preview-adapter, 06-runner-provisioner-port]
created: 2026-07-12T10:24:14Z created: 2026-07-12T10:24:14Z
updated: 2026-07-12T20:55:19.369Z
--- ---
## Goal ## Goal
@@ -44,6 +45,8 @@ The runner ↔ repo-toolchain seam is one of the three risks this epic exists to
## Tasks ## Tasks
- [ ] Scaffold `apps/runner`: WS server speaking `@repo/core-runner-protocol` (every message zod-parsed), hello/ready handshake gated on the workspace-scoped auth token, status/error event emission; integration test spawns the real runner and completes the handshake over real WS. - [x] Scaffold `apps/runner`: WS server speaking `@repo/core-runner-protocol` (every message zod-parsed), hello/ready handshake gated on the workspace-scoped auth token, status/error event emission; integration test spawns the real runner and completes the handshake over real WS.
- [ ] Add the clone stage: git clone of the requested repo with the PAT delivered via an ephemeral credential helper (spec §6 verbatim — never in URLs, argv, logs, or `.git/config`), staged progress events; integration test clones the `git daemon`-served `vite-kitchen`, asserts credential-leak absence (grep argv/logs/`.git/config`), and asserts named failure events for bad URL / bad token. - [x] Add the clone stage: git clone of the requested repo with the PAT delivered via an ephemeral credential helper (spec §6 verbatim — never in URLs, argv, logs, or `.git/config`), staged progress events; integration test clones the `git daemon`-served `vite-kitchen`, asserts credential-leak absence (grep argv/logs/`.git/config`), and asserts named failure events for bad URL / bad token.
- [ ] Add the install stage: package-manager detection + install with staged progress events; integration test asserts install completes on the fixture and a named failure event is emitted on install error. - [x] Add the install stage: package-manager detection + install with staged progress events; integration test asserts install completes on the fixture and a named failure event is emitted on install error.
_Landed: b090e26 + 750ab44 + ec7bf94 (cherry-picks), two independent adversarial reviews approved — credential-leak surface airtight (blank-then-veect helper, PAT via child env only, proven by unit builder + integration grep of logs/.git/config/.git surface + spawn-suite whole-child-output grep). Auth proven via a Basic-auth dumb-HTTP git fixture (real 401→helper→retry, asserts exact x-access-token:PAT). 98 tests, 96.6% coverage. Honest boundary: real smart-HTTP/GitHub deferred to later PRDs (documented in apps/runner/AGENTS.md)._