Review: Dedicated Tailscale funnel for svelte-playground

review-376-2026-03-25 Review

review needs-refinement

Verdict: NEEDS_REFINEMENT

Template Completeness

  • [x] Lineage
  • [x] Repo
  • [x] User Story
  • [x] Context
  • [x] File Targets
  • [x] Acceptance Criteria
  • [x] Test Expectations
  • [x] Constraints
  • [x] Checklist
  • [x] Related
All required template sections present. Well-written context with SOP reference.

File Targets

pal-e-deployments (files to modify):
  • [x] overlays/playground/prod/deployment.yaml — verified: svelte-playground volume at lines 35-37, hostPath volume at lines 95-98
  • [x] overlays/playground/prod/configmap.yaml — verified: /svelte/ location block at lines 47-52
pal-e-deployments (files to create):
  • [x] overlays/svelte-playground/prod/ directory does not exist yet — confirmed creation target is valid
svelte-playground (files to modify):
  • [x] vite.config.js — verified: base: '/svelte/' at line 5
  • [x] index.html — verified: 3 occurrences of /svelte/ prefix (nav brand href, two card hrefs)
  • [ ] westside/staff.html — MISSING from File Targets: 16 occurrences of /svelte/ (nav links, image srcs, og:image meta tags)
  • [ ] westside/success.html — MISSING from File Targets: 12 occurrences of /svelte/
  • [ ] westside/sponsors.html — MISSING from File Targets: 13 occurrences of /svelte/
  • [ ] westside/index.html — MISSING from File Targets: 5 occurrences of /svelte/
  • [ ] westside/App.svelte — MISSING from File Targets: 1 occurrence of /svelte/
  • [ ] westside/Nav.svelte — MISSING from File Targets: 7 occurrences of /svelte/
Total undocumented scope: 54 additional /svelte/ path references across 6 files not listed in the ticket. An agent following only the listed File Targets would leave broken links in every westside page.

Repo Placement

OK. Two repos correctly identified: forgejo_admin/pal-e-deployments (k8s manifests) and forgejo_admin/svelte-playground (base path revert). Issue is filed on svelte-playground which is appropriate as the primary code change repo. Checklist correctly notes PRs needed on both repos.

Dependencies

  • Board item #321 ("Deploy with Tailscale funnel") is in done — this is the shared deploy being replaced. No conflict.
  • No items in in_progress that would conflict.
  • The pal-e-deployments PR must be applied before the svelte-playground base path revert, or the build will break on the shared playground. Order-of-operations not documented in ticket.

Acceptance Criteria

Mostly testable. Two issues:
  • Criterion "Westside prototype accessible at {hostname}.tail5b443a.ts.net/westside/" is correct — dist/westside/ exists and would be served at /westside/ from root. However, an agent needs to know this refers to the NEW hostname, not the shared playground.
  • Missing criterion: all /svelte/-prefixed internal links in westside HTML pages resolve correctly after rewrite. This is the most likely regression vector.

Blast Radius

  • Other playgrounds (westside-playground, mcd-tracker-playground) do NOT use Vite base paths — no similar bug exists elsewhere.
  • Removing the svelte-playground volume and location block from the shared playground nginx config is clean — no other location blocks reference /srv/svelte-playground.
  • The shared playground's other routes (/, /westside/, /mcd-tracker/, /mcp-cover-letter/, /guide/, /upload/) are unaffected by removing only the /svelte/ block and volume.
  • No downstream consumers beyond browser access.

Recommendation

Before moving to next_up, update the File Targets section:
  • Add 6 missing files to the "Files to modify (svelte-playground)" list: westside/staff.html, westside/success.html, westside/sponsors.html, westside/index.html, westside/App.svelte, westside/Nav.svelte. Each needs all /svelte/ prefixes removed (54 occurrences total).
  • Add deployment ordering note to Constraints: the pal-e-deployments PR (new namespace + shared playground cleanup) must be applied before the svelte-playground base path revert PR.
  • Add acceptance criterion: "All internal links in westside HTML pages (staff, sponsors, success) resolve correctly without /svelte/ prefix."