Services

S02 Runtime Proof


S02 Runtime Proof

  • Generated at: 2026-06-30T12:02:42.944Z
  • Started at: 2026-06-30T11:58:58.888Z
  • Finished at: 2026-06-30T12:02:42.944Z
  • Overall status: PASS
  • Root verifier: node tools/scripts/verify-root-runtime.mjs
  • Root package script: pnpm verify:root-runtime

Contract#

This artifact is the durable evidence surface for the root runtime proof. The verifier only uses declared repo-root operator surfaces and fails by phase so future agents can tell whether drift is in docs, infra, backend build, or representative app proof.

Declared proof commands#

  • node tools/scripts/verify-root-guidance.mjs
  • mise run ps
  • mise run health
  • pnpm backend:build
  • E2E_WEB_SERVER=prod pnpm exec playwright test --config e2e/www/playwright.config.ts e2e/www/tests/navigation-funnel.spec.ts

Representative app proof path#

  • Surface: Focused www production Playwright funnel proof using the checked-in e2e/www config and its E2E_WEB_SERVER=prod path.
  • Playwright config: e2e/www/playwright.config.ts
  • Test file: e2e/www/tests/navigation-funnel.spec.ts
  • Command: E2E_WEB_SERVER=prod pnpm exec playwright test --config e2e/www/playwright.config.ts e2e/www/tests/navigation-funnel.spec.ts

Known exclusions and constraints#

  • The verifier is intentionally serial and narrow; it does not run the full e2e matrix.
  • The representative app proof covers the www production-style boot surface only, not every app in the workspace.
  • A pre-existing process already bound to port 3040 is treated as an app-proof failure because Playwright must be able to start the declared prod webServer itself.
  • Missing GitHub changelog credentials are tolerated during www static export because the build logs already degrade that surface explicitly.

Phase Results#

#PhaseVerdictCommandExit CodeDurationFailure Shape
1guidance✅ passnode tools/scripts/verify-root-guidance.mjs00.1spass
2infra-ps✅ passmise run ps00.7spass
3infra-health✅ passmise run health06.3spass
4backend-build✅ passpnpm backend:build015.2spass
5app-proof✅ passE2E_WEB_SERVER=prod pnpm exec playwright test --config e2e/www/playwright.config.ts e2e/www/tests/navigation-funnel.spec.ts0201.7spass

Phase Details#

Root guidance contract#

  • Phase outcome: pass
  • Command: node tools/scripts/verify-root-guidance.mjs
  • Exit code: 0
  • Duration: 0.1s

stdout (tail)#

1
verify-root-guidance: PASS
2
Checked 76 assertions across root guidance and source-of-truth files.

stderr (tail)#

1
_no output captured_

Dev infra container status#

  • Phase outcome: pass
  • Command: mise run ps
  • Exit code: 0
  • Duration: 0.7s

stdout (tail)#

1
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2
4fd758567372 docker.io/library/postgres:16-alpine postgres 7 days ago Up 6 hours (healthy) 0.0.0.0:3048->5432/tcp assistance-dev_postgres_1
3
6033d58edbca docker.io/getmeili/meilisearch:v1.12 /bin/sh -c /bin/m... 7 days ago Up 6 hours (healthy) 0.0.0.0:3049->7700/tcp assistance-dev_meilisearch_1
4
bca84aa34135 docker.io/axllent/mailpit:latest 7 days ago Up 6 hours (healthy) 0.0.0.0:3061->1025/tcp, 0.0.0.0:3062->8025/tcp, 1110/tcp assistance-dev_mailpit_1
5
b2f733afb185 docker.io/prom/prometheus:v2.53.0 --config.file=/et... 7 days ago Up 6 hours (healthy) 0.0.0.0:3069->9090/tcp assistance-dev_prometheus_1
6
a4efcffb9eb0 docker.io/supabase/gotrue:v2.143.0 auth 7 days ago Up 6 hours (healthy) 0.0.0.0:3060->9999/tcp assistance-dev_auth_1
7
f87fe155db12 docker.io/grafana/grafana:11.1.0 7 days ago Up 6 hours (healthy) 0.0.0.0:3070->3000/tcp assistance-dev_grafana_1

stderr (tail)#

1
[ps] $ sudo podman-compose --project-name assistance-dev -f podman-compose.dev.…

Dev infra health checks#

  • Phase outcome: pass
  • Command: mise run health
  • Exit code: 0
  • Duration: 6.3s

stdout (tail)#

1
Checking dev services...
2
✓ Postgres (localhost:3048, container:healthy)
3
✓ Meilisearch (localhost:3049, container:healthy)
4
✓ Auth (localhost:3060, container:healthy)
5
✓ Mailpit (localhost:3062, container:healthy)
6
✓ Prometheus (localhost:3069, container:healthy)
7
✓ Grafana (localhost:3070, container:healthy)

stderr (tail)#

1
[health] $ echo "Checking dev services..."

Backend production build surface#

  • Phase outcome: pass
  • Command: pnpm backend:build
  • Exit code: 0
  • Duration: 15.2s

stdout (tail)#

1
> assistance@0.0.1 backend:build /home/vchavkov/src/assistance
2
> cd backend && make build-all
3
4
Building academy-api...
5
Building academy-seed...
6
Building auth-api...
7
Building billing-api...
8
Building saas-api...

stderr (tail)#

1
_no output captured_

Representative www prod proof#

  • Phase outcome: pass
  • Command: E2E_WEB_SERVER=prod pnpm exec playwright test --config e2e/www/playwright.config.ts e2e/www/tests/navigation-funnel.spec.ts
  • Exit code: 0
  • Duration: 201.7s

stdout (tail)#

1
Running 3 tests using 3 workers
2
3
[1/3] [chromium] › e2e/www/tests/navigation-funnel.spec.ts:11:7 › Marketing funnel navigation › service page loads correctly
4
[2/3] [chromium] › e2e/www/tests/navigation-funnel.spec.ts:18:7 › Marketing funnel navigation › pricing page loads correctly
5
[3/3] [chromium] › e2e/www/tests/navigation-funnel.spec.ts:5:7 › Marketing funnel navigation › homepage loads with hero section
6
7
8
9
10
 3 passed (3.3m)

stderr (tail)#

1
[WebServer] ✘ [ERROR] kj::getCaughtExceptionAsKj() = kj/async-io-unix.c++:186: disconnected: ::write(fd, buffer.begin(), buffer.size()): Broken pipe
2
[WebServer] 
3
[WebServer]  stack: /home/vchavkov/src/assistance/node_modules/.pnpm/@cloudflare+workerd-linux-64@1.20260611.1/node_modules/@cloudflare/workerd-linux-64/bin/workerd@528e871 /home/vchavkov/src/assistance/node_modules/.pnpm/@cloudflare+workerd-linux-64@1.20260611.1/node_modules/@cloudflare/workerd-linux-64/bin/workerd@528f521 /home/vchavkov/src/assistance/node_modules/.pnpm/@cloudflare+workerd-linux-64@1.20260611.1/node_modules/@cloudflare/workerd-linux-64/bin/workerd@373660f /home/vchavkov/src/assistance/node_modules/.pnpm/@cloudflare+workerd-linux-64@1.20260611.1/node_modules/@cloudflare/workerd-linux-64/bin/workerd@3736855 /home/vchavkov/src/assistance/node_modules/.pnpm/@cloudflare+workerd-linux-64@1.20260611.1/node_modules/@cloudflare/workerd-linux-64/bin/workerd@5251df8 /home/vchavkov/src/assistance/node_modules/.pnpm/@cloudflare+workerd-linux-64@1.20260611.1/node_modules/@cloudflare/workerd-linux-64/bin/workerd@378ed93 /home/vchavkov/src/assistance/node_modules/.pnpm/@cloudflare+workerd-linux-64@1.20260611.1/node_modules/@cloudflare/workerd-linux-64/bin/workerd@37928e7 /home/vchavkov/src/assistance/node_modules/.pnpm/@cloudflare+workerd-linux-64@1.20260611.1/node_modules/@cloudflare/workerd-linux-64/bin/workerd@3792c78 /home/vchavkov/src/assistance/node_modules/.pnpm/@cloudflare+workerd-linux-64@1.20260611.1/node_modules/@cloudflare/workerd-linux-64/bin/workerd@2e2e720 /home/vchavkov/src/assistance/node_modules/.pnpm/@cloudflare+workerd-linux-64@1.20260611.1/node_modules/@cloudflare/workerd-linux-64/bin/workerd@20114c7
4
[WebServer] 
5
[WebServer] 
6
[WebServer] ✘ [ERROR] kj::getCaughtExceptionAsKj() = kj/async-io-unix.c++:186: disconnected: ::write(fd, buffer.begin(), buffer.size()): Broken pipe
7
[WebServer] 
8
[WebServer]  stack: /home/vchavkov/src/assistance/node_modules/.pnpm/@cloudflare+workerd-linux-64@1.20260611.1/node_modules/@cloudflare/workerd-linux-64/bin/workerd@528e871 /home/vchavkov/src/assistance/node_modules/.pnpm/@cloudflare+workerd-linux-64@1.20260611.1/node_modules/@cloudflare/workerd-linux-64/bin/workerd@528f521 /home/vchavkov/src/assistance/node_modules/.pnpm/@cloudflare+workerd-linux-64@1.20260611.1/node_modules/@cloudflare/workerd-linux-64/bin/workerd@373660f /home/vchavkov/src/assistance/node_modules/.pnpm/@cloudflare+workerd-linux-64@1.20260611.1/node_modules/@cloudflare/workerd-linux-64/bin/workerd@3736855 /home/vchavkov/src/assistance/node_modules/.pnpm/@cloudflare+workerd-linux-64@1.20260611.1/node_modules/@cloudflare/workerd-linux-64/bin/workerd@5251df8 /home/vchavkov/src/assistance/node_modules/.pnpm/@cloudflare+workerd-linux-64@1.20260611.1/node_modules/@cloudflare/workerd-linux-64/bin/workerd@378ed93 /home/vchavkov/src/assistance/node_modules/.pnpm/@cloudflare+workerd-linux-64@1.20260611.1/node_modules/@cloudflare/workerd-linux-64/bin/workerd@37928e7 /home/vchavkov/src/assistance/node_modules/.pnpm/@cloudflare+workerd-linux-64@1.20260611.1/node_modules/@cloudflare/workerd-linux-64/bin/workerd@3792c78 /home/vchavkov/src/assistance/node_modules/.pnpm/@cloudflare+workerd-linux-64@1.20260611.1/node_modules/@cloudflare/workerd-linux-64/bin/workerd@2e2e720 /home/vchavkov/src/assistance/node_modules/.pnpm/@cloudflare+workerd-linux-64@1.20260611.1/node_modules/@cloudflare/workerd-linux-64/bin/workerd@20114c7
9
[WebServer] 
10
[WebServer] 
11
[WebServer] ✘ [ERROR] kj::getCaughtExceptionAsKj() = kj/async-io-unix.c++:186: disconnected: ::write(fd, buffer.begin(), buffer.size()): Broken pipe
12
[WebServer] 
13
[WebServer]  stack: /home/vchavkov/src/assistance/node_modules/.pnpm/@cloudflare+workerd-linux-64@1.20260611.1/node_modules/@cloudflare/workerd-linux-64/bin/workerd@528e871 /home/vchavkov/src/assistance/node_modules/.pnpm/@cloudflare+workerd-linux-64@1.20260611.1/node_modules/@cloudflare/workerd-linux-64/bin/workerd@528f521 /home/vchavkov/src/assistance/node_modules/.pnpm/@cloudflare+workerd-linux-64@1.20260611.1/node_modules/@cloudflare/workerd-linux-64/bin/workerd@373660f /home/vchavkov/src/assistance/node_modules/.pnpm/@cloudflare+workerd-linux-64@1.20260611.1/node_modules/@cloudflare/workerd-linux-64/bin/workerd@3736855 /home/vchavkov/src/assistance/node_modules/.pnpm/@cloudflare+workerd-linux-64@1.20260611.1/node_modules/@cloudflare/workerd-linux-64/bin/workerd@5251df8 /home/vchavkov/src/assistance/node_modules/.pnpm/@cloudflare+workerd-linux-64@1.20260611.1/node_modules/@cloudflare/workerd-linux-64/bin/workerd@378ed93 /home/vchavkov/src/assistance/node_modules/.pnpm/@cloudflare+workerd-linux-64@1.20260611.1/node_modules/@cloudflare/workerd-linux-64/bin/workerd@37928e7 /home/vchavkov/src/assistance/node_modules/.pnpm/@cloudflare+workerd-linux-64@1.20260611.1/node_modules/@cloudflare/workerd-linux-64/bin/workerd@3792c78 /home/vchavkov/src/assistance/node_modules/.pnpm/@cloudflare+workerd-linux-64@1.20260611.1/node_modules/@cloudflare/workerd-linux-64/bin/workerd@2e2e720 /home/vchavkov/src/assistance/node_modules/.pnpm/@cloudflare+workerd-linux-64@1.20260611.1/node_modules/@cloudflare/workerd-linux-64/bin/workerd@20114c7
14
[WebServer] 
15
[WebServer] 
16
[WebServer] ✘ [ERROR] kj::getCaughtExceptionAsKj() = kj/async-io-unix.c++:186: disconnected: ::write(fd, buffer.begin(), buffer.size()): Broken pipe
17
[WebServer] 
18
[WebServer]  stack: /home/vchavkov/src/assistance/node_modules/.pnpm/@cloudflare+workerd-linux-64@1.20260611.1/node_modules/@cloudflare/workerd-linux-64/bin/workerd@528e871 /home/vchavkov/src/assistance/node_modules/.pnpm/@cloudflare+workerd-linux-64@1.20260611.1/node_modules/@cloudflare/workerd-linux-64/bin/workerd@528f521 /home/vchavkov/src/assistance/node_modules/.pnpm/@cloudflare+workerd-linux-64@1.20260611.1/node_modules/@cloudflare/workerd-linux-64/bin/workerd@373660f /home/vchavkov/src/assistance/node_modules/.pnpm/@cloudflare+workerd-linux-64@1.20260611.1/node_modules/@cloudflare/workerd-linux-64/bin/workerd@3736855 /home/vchavkov/src/assistance/node_modules/.pnpm/@cloudflare+workerd-linux-64@1.20260611.1/node_modules/@cloudflare/workerd-linux-64/bin/workerd@5251df8 /home/vchavkov/src/assistance/node_modules/.pnpm/@cloudflare+workerd-linux-64@1.20260611.1/node_modules/@cloudflare/workerd-linux-64/bin/workerd@378ed93 /home/vchavkov/src/assistance/node_modules/.pnpm/@cloudflare+workerd-linux-64@1.20260611.1/node_modules/@cloudflare/workerd-linux-64/bin/workerd@37928e7 /home/vchavkov/src/assistance/node_modules/.pnpm/@cloudflare+workerd-linux-64@1.20260611.1/node_modules/@cloudflare/workerd-linux-64/bin/workerd@3792c78 /home/vchavkov/src/assistance/node_modules/.pnpm/@cloudflare+workerd-linux-64@1.20260611.1/node_modules/@cloudflare/workerd-linux-64/bin/workerd@2e2e720 /home/vchavkov/src/assistance/node_modules/.pnpm/@cloudflare+workerd-linux-64@1.20260611.1/node_modules/@cloudflare/workerd-linux-64/bin/workerd@20114c7
19
[WebServer] 
20
[WebServer] 

Previous Artifact State#

A prior artifact existed and was replaced with fresh evidence from this run.