Wire #81 nav-harness into CI blocking gate (browser-capable runner + workflow integration) #83

Closed
opened 2026-06-22 12:10:52 +02:00 by bosun · 1 comment
Owner

STATUS: ACTIVE — IN-SPRINT (2026-06-22 pivot)

Originally filed as deferred-v2-follow-up under sprint shape (a). Operator pivoted to (b) directly per the future-game-jam-substrate-readiness reasoning + bounded-pivot-cost (Shipwright ~5 min into build, harness logic transfers cleanly). #83 promoted from deferred → active in-sprint slice.

Lane split:

  • Shipwright (cellblock client + workflow): @playwright/test devDeps + nav-harness using its API + workflow extension
  • QM (alcatraz-infra runner config): runner-shape for browser-capable CI (image swap OR separate runner OR install-deps step; QM picks)

Coordination seam: synchronize on Playwright version + browser-binary path conventions.


Background

Filed 2026-06-22 during the #81 keyboard navigation-tree harness sprint, when Shipwright surfaced an infra fork: cellblock CI client job (.forgejo/workflows/test.yml) runs only npm ci && npm test (=tsc) on the go-runner (python:3.13-slim, no browsers). A browser-based Playwright suite can't join the blocking CI gate without infra work.

Context

#81 harness shipped under Option (a) shape: runnable script + npm run test:nav against host /srv/playwright (env-configurable path), runs locally / by-operator / pre-PR. Delivers full TDD value + anti-decay-via-completeness-meta-check when run, but NOT auto-gated by CI.

The failure mode (a) carries: future PR-authors must remember to run the harness. Slow-decay, bounded by Shipwright + operator manual verification but not eliminated.

Proposed scope

Wire #81's nav-harness into the blocking CI gate by:

  1. Runner-side: either swap the existing python:3.13-slim image for one with browser deps (or add a playwright-install-deps step), OR add a separate browser-capable runner labeled for client tests
  2. Client devDeps: add @playwright/test (or the runtime-only playwright package) to client/package.json — risk: browser-download postinstall could slow/break existing npm ci. Mitigations: cache the browser binaries in the runner, OR use playwright install as an explicit step gated on the package being needed
  3. Workflow: extend .forgejo/workflows/test.yml client-job to run npm run test:nav (or equivalent) as a blocking step
  4. Smoke test: ensure existing npm ci && npm test (tsc) remains fast + green after the additions

Trigger to promote from deferred → active

  • Infra capacity opens up (operator/QM bandwidth for the runner image work)
  • OR empirical signal: a regression that the local-only harness would have caught lands in prod (suggests the slow-decay failure-mode of (a) is real)
  • OR public-launch readiness (jam audience, public competition) where the anti-decay teeth become load-bearing

Lane + size

QM lane primary for the runner-image / runner-config infra change. Shipwright lane for the workflow + npm script integration. Coordination at the seam.

Likely size/M (single substantive feature touching runner + workflow + client devDeps; not L because the harness itself already exists from #81 — this is just wire-into-CI).

Acceptance criteria

  1. Browser-capable CI runner available (image swap OR separate runner)
  2. npm run test:nav runs as part of the client CI job
  3. Failing nav-harness assertions block PR merge (true blocking gate, not advisory)
  4. Existing npm ci && npm test (tsc) remains green + reasonably fast
  5. Cached browser binaries in runner (no full re-download per CI run)

Cross-refs

  • cellblock#81 — the harness this would gate
  • Shipwright's fork-surfacing 2c40 (2026-06-22)
  • Operator ratified bundle (M+S+S) with (a) implicit per Shipwright's lean
  • Per the just-banked discipline: implementer-surfaces-fork-with-reasoned-lean → proceed-with-scope-matching-option + file-v2-follow-up-for-the-deferred-shape

Anchor

2026-06-22 cellblock next-sprint build, surfaced by Shipwright during #81 implementation. Captures the deferred CI-gate-integration as separable infra lift respecting the original M-scope ratification.

## STATUS: ACTIVE — IN-SPRINT (2026-06-22 pivot) Originally filed as deferred-v2-follow-up under sprint shape (a). Operator pivoted to (b) directly per the future-game-jam-substrate-readiness reasoning + bounded-pivot-cost (Shipwright ~5 min into build, harness logic transfers cleanly). #83 promoted from deferred → active in-sprint slice. Lane split: - Shipwright (cellblock client + workflow): @playwright/test devDeps + nav-harness using its API + workflow extension - QM (alcatraz-infra runner config): runner-shape for browser-capable CI (image swap OR separate runner OR install-deps step; QM picks) Coordination seam: synchronize on Playwright version + browser-binary path conventions. --- ## Background Filed 2026-06-22 during the #81 keyboard navigation-tree harness sprint, when Shipwright surfaced an infra fork: cellblock CI client job (.forgejo/workflows/test.yml) runs only `npm ci && npm test` (=tsc) on the go-runner (python:3.13-slim, no browsers). A browser-based Playwright suite can't join the blocking CI gate without infra work. ## Context #81 harness shipped under Option (a) shape: runnable script + `npm run test:nav` against host /srv/playwright (env-configurable path), runs locally / by-operator / pre-PR. Delivers full TDD value + anti-decay-via-completeness-meta-check when run, but NOT auto-gated by CI. The failure mode (a) carries: future PR-authors must remember to run the harness. Slow-decay, bounded by Shipwright + operator manual verification but not eliminated. ## Proposed scope Wire #81's nav-harness into the blocking CI gate by: 1. **Runner-side**: either swap the existing python:3.13-slim image for one with browser deps (or add a playwright-install-deps step), OR add a separate browser-capable runner labeled for client tests 2. **Client devDeps**: add `@playwright/test` (or the runtime-only `playwright` package) to client/package.json — risk: browser-download postinstall could slow/break existing `npm ci`. Mitigations: cache the browser binaries in the runner, OR use `playwright install` as an explicit step gated on the package being needed 3. **Workflow**: extend .forgejo/workflows/test.yml client-job to run `npm run test:nav` (or equivalent) as a blocking step 4. **Smoke test**: ensure existing `npm ci && npm test` (tsc) remains fast + green after the additions ## Trigger to promote from deferred → active - Infra capacity opens up (operator/QM bandwidth for the runner image work) - OR empirical signal: a regression that the local-only harness would have caught lands in prod (suggests the slow-decay failure-mode of (a) is real) - OR public-launch readiness (jam audience, public competition) where the anti-decay teeth become load-bearing ## Lane + size QM lane primary for the runner-image / runner-config infra change. Shipwright lane for the workflow + npm script integration. Coordination at the seam. Likely size/M (single substantive feature touching runner + workflow + client devDeps; not L because the harness itself already exists from #81 — this is just wire-into-CI). ## Acceptance criteria 1. Browser-capable CI runner available (image swap OR separate runner) 2. `npm run test:nav` runs as part of the client CI job 3. Failing nav-harness assertions block PR merge (true blocking gate, not advisory) 4. Existing `npm ci && npm test` (tsc) remains green + reasonably fast 5. Cached browser binaries in runner (no full re-download per CI run) ## Cross-refs - cellblock#81 — the harness this would gate - Shipwright's fork-surfacing 2c40 (2026-06-22) - Operator ratified bundle (M+S+S) with (a) implicit per Shipwright's lean - Per the just-banked discipline: implementer-surfaces-fork-with-reasoned-lean → proceed-with-scope-matching-option + file-v2-follow-up-for-the-deferred-shape ## Anchor 2026-06-22 cellblock next-sprint build, surfaced by Shipwright during #81 implementation. Captures the deferred CI-gate-integration as separable infra lift respecting the original M-scope ratification.
bosun closed this issue 2026-06-22 12:55:49 +02:00
Author
Owner

AC-tick pass — completing slice landed via PR #84 @bd14396fe0 (workflow integration + client-nav job). Umbrella substantively complete; closing manually since the PR body marked Part-of-not-Closes per Shipwrights deferral to conductor on umbrella call; close-keyword in merge message did not fire automatically.

Slice attribution:

  • Runner-infra slice (QM): alcatraz-infra fd8b736 (ci-playwright image based on mcr.microsoft.com/playwright:v1.61.0-jammy) + 8d8a3f1 (ingress forgejo.conf body-size 512m→2g, substrate-care follow-up on HTTP 413). Runner advertises playwright label; /ms-playwright/ contains chromium-1228 + firefox-1532 + webkit-2311.
  • Workflow + harness slice (Shipwright): cellblock PR #84 (workflow extension to client-nav job targeting runs-on: playwright + @playwright/test@1.61.0 devDep + harness as .spec).
  1. Browser-capable CI runner available ✓ — separate playwright runner per QM Option-2 ratification (matches alcatraz role-label convention).
  2. npm run test:nav runs as part of client CI job ✓ — workflow client-nav step added in PR #84.
  3. Failing nav-harness assertions block PR merge (true blocking gate) ✓ — verified empirically: PR #84s OWN CI run validated the gate works end-to-end (server + client(tsc) + NEW client-nav all green).
  4. Existing npm ci && npm test (tsc) remains green + reasonably fast ✓ — confirmed CI green across all jobs.
  5. Cached browser binaries in runner (no full re-download per CI run) ✓ — binaries pre-installed in the image at /ms-playwright/ with PLAYWRIGHT_BROWSERS_PATH env set; @playwright/test postinstall skips download.

VERSION-PIN: @playwright/test@1.61.0 in client/package.json matches mcr.microsoft.com/playwright:v1.61.0-jammy image AND host /srv/playwright install (substrate-consistency: host smoke probes + CI tests + chamber-local-runs all use identical version).

DISCIPLINE-INSTANCE: end-to-end (b) integration empirically validated in ONE CI run — QMs runner-infra slice validated under first real workload by Shipwrights PR #84 CI execution. Same shape as Engineer #78 fail-closed-default activated by QMs wiring on #76 — separate slices that prove each other on first joint deploy.

Bonus substrate-care n=1 bus-resident (per promotion-threshold): container-image-registry pushes (especially upstream-fat-image-based-builds like Microsoft Playwright ~748MB browser layer) need nginx body-size headroom; 512m insufficient for playwright-base; 2g comfortable for most upstream-derived images.

**AC-tick pass** — completing slice landed via PR #84 @bd14396fe0a8 (workflow integration + client-nav job). Umbrella substantively complete; closing manually since the PR body marked Part-of-not-Closes per Shipwrights deferral to conductor on umbrella call; close-keyword in merge message did not fire automatically. Slice attribution: - **Runner-infra slice (QM)**: alcatraz-infra fd8b736 (ci-playwright image based on mcr.microsoft.com/playwright:v1.61.0-jammy) + 8d8a3f1 (ingress forgejo.conf body-size 512m→2g, substrate-care follow-up on HTTP 413). Runner advertises `playwright` label; /ms-playwright/ contains chromium-1228 + firefox-1532 + webkit-2311. - **Workflow + harness slice (Shipwright)**: cellblock PR #84 (workflow extension to client-nav job targeting runs-on: playwright + @playwright/test@1.61.0 devDep + harness as .spec). 1. **Browser-capable CI runner available** ✓ — separate playwright runner per QM Option-2 ratification (matches alcatraz role-label convention). 2. **`npm run test:nav` runs as part of client CI job** ✓ — workflow client-nav step added in PR #84. 3. **Failing nav-harness assertions block PR merge (true blocking gate)** ✓ — verified empirically: PR #84s OWN CI run validated the gate works end-to-end (server + client(tsc) + NEW client-nav all green). 4. **Existing `npm ci && npm test` (tsc) remains green + reasonably fast** ✓ — confirmed CI green across all jobs. 5. **Cached browser binaries in runner (no full re-download per CI run)** ✓ — binaries pre-installed in the image at /ms-playwright/ with PLAYWRIGHT_BROWSERS_PATH env set; @playwright/test postinstall skips download. VERSION-PIN: @playwright/test@1.61.0 in client/package.json matches mcr.microsoft.com/playwright:v1.61.0-jammy image AND host /srv/playwright install (substrate-consistency: host smoke probes + CI tests + chamber-local-runs all use identical version). DISCIPLINE-INSTANCE: end-to-end (b) integration empirically validated in ONE CI run — QMs runner-infra slice validated under first real workload by Shipwrights PR #84 CI execution. Same shape as Engineer #78 fail-closed-default activated by QMs wiring on #76 — separate slices that prove each other on first joint deploy. Bonus substrate-care n=1 bus-resident (per promotion-threshold): container-image-registry pushes (especially upstream-fat-image-based-builds like Microsoft Playwright ~748MB browser layer) need nginx body-size headroom; 512m insufficient for playwright-base; 2g comfortable for most upstream-derived images.
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
frankenbit/cellblock#83
No description provided.