Review: Validate step fails: build/index.html doesn't exist for adapter-node

review-1117-2026-04-30 Review

review ready

Verdict: APPROVED

Single-line bug fix with verified file targets, complete traceability, and intact backing notes. Ready to advance backlog -> todo.

Template Completeness

Issue body matches template-issue-bug:
  • [x] Type -- Bug
  • [x] Lineage -- explains pipeline #1 manual trigger as discovery vector; webhook installed ~5 min after #10/#11 merged so latent until manual run
  • [x] Repo -- forgejo_admin/westside-admin
  • [x] What Broke -- exact step (validate), exact assertion (test -f build/index.html), root cause (adapter mismatch)
  • [x] Repro Steps -- 3 numbered steps reproducible against main
  • [x] Expected Behavior -- canonical fix specified (test -f build/index.js)
  • [x] Environment -- repo + SHA + pipeline ID + adapter + build image
  • [x] Acceptance Criteria -- 3 testable checkboxes
  • [x] Related -- project, originating PR (#11), and explicit unrelated cross-link to pal-e-platform #321

Traceability

  • [x] story:admin-row-crud label -- admin row CRUD story
  • [x] story note verified -- story-westside-admin-admin-row-crud listed in project-westside-admin user-stories section (sole story for v1)
  • [x] arch:ci-pipeline label -- Woodpecker CI per convention-architecture-ids Deployment Components table
  • [x] arch note verified -- arch-ci-pipeline exists in pal-e-docs (project: pal-e-platform), describes the shared Woodpecker -> Harbor -> pal-e-deployments -> ArgoCD loop
  • [x] type:bug label -- correct (regression-style: validate step fails on the artifact actually produced; smoke check encoded the wrong adapter assumption)
  • [x] Forgejo issue -- https://forgejo.tail5b443a.ts.net/forgejo_admin/westside-admin/issues/12, open
  • Adjacent CI item #1094 (issue #8) used the same story/arch axes -- conventions already proven for this kind of work.

File Targets

  • [x] ~/westside-admin/.woodpecker.yaml -- verified at SHA 82ac5255a9. Line 33 reads exactly - test -f build/index.html inside the validate step (lines 27-35). Bug confirmed in the live tree.
  • [x] ~/westside-admin/svelte.config.js -- verified @sveltejs/adapter-node with out: 'build' (line 1, 8-10). Confirms build/index.html is never produced; build/index.js is the canonical Node entry.
  • [x] ~/westside-admin/package.json -- verified "start": "node build/index.js" (line 10). Production runtime already targets build/index.js; smoke check should mirror.

Repo Placement

OK. Single-file, single-repo change in forgejo_admin/westside-admin. No cross-repo coordination needed -- no sibling overlay/registry work, no upstream update-kustomize-tag.sh change required (the script reference in .woodpecker.yaml is unaffected).

Dependencies

None active. The originating commits (#10 Dockerfile, #11 .woodpecker.yaml) are merged. Sibling CI item #1094 is in qa already. No in_progress blockers; no items downstream gated on this fix in the listed board (the next-up coding stories #1, #2, #4 don't depend on green CI to be reviewed, but they will need this fix to actually deploy). Worth fast-tracking so subsequent feature merges have a working pipeline.

Acceptance Criteria

All three AC mechanically verifiable:
  • AC1 (assertion change) -- grep .woodpecker.yaml for build/index.js after merge
  • AC2 (pipeline reaches build-and-push) -- visible in Woodpecker UI on next push to main
  • AC3 (PR runs still gate Kaniko) -- the validate step still runs on pull_request per the when block (line 34-35), and Kaniko's when block already excludes pull_request via event: [push, manual] (line 53). No structural change required to preserve gating.
Optional: dev agent may add build/handler.js assertion as defense-in-depth (issue body explicitly allows this).

Blast Radius

Searched all sibling SvelteKit + API repos for the same smoke-check pattern:
  • westside-app: uses adapter-static -- test -f build/index.html is CORRECT. No change needed.
  • westside-contracts: uses adapter-node, no smoke check at all (separate scoping concern, not a regression).
  • pal-e-app, mcd-tracker-app: adapter-static, no smoke check in .woodpecker.yaml.
  • Non-SvelteKit repos (basketball-api, pal-e-docs, mcd-tracker-api): N/A.
Conclusion: westside-admin is the only repo with this bug. No fan-out fix required. No downstream consumers of build/index.html to break (it never existed for this repo).

Decomposition Assessment

1 file, 1 line change, 3 AC. Estimated agent work: under 1 minute (edit + commit + PR). No decomposition needed.

Recommendation

No action needed. Ready to advance backlog -> todo.
  • review-1094-2026-04-25-v2 -- adjacent CI ticket APPROVED with the same arch:ci-pipeline label and story:admin-row-crud axes
  • arch-ci-pipeline -- backing architecture note for this work
  • story-westside-admin-admin-row-crud -- sole user story for westside-admin v1
  • convention-architecture-ids -- confirms arch:ci-pipeline as canonical for Woodpecker CI
  • feedback_yaml_parse_validation -- dev agent should yaml.safe_load the file before commit; QA must verify