Review: S1 — pal-e-services: add westside-streamlit to var.services (round 2)
Verdict: APPROVED
Board item
#1069 · Forgejo issue forgejo_admin/pal-e-services#60 · Reviewer: Dottie · Date: 2026-04-25 · Round: 2 (re-review of review-1069-2026-04-22)Round 1 Findings Resolution
The prior review (id 1603) returned
NEEDS_REFINEMENT with three [BODY] findings and one [SCOPE] finding. All three body findings are now resolved in the issue body:- [x] Reference services fixed — body now references
westsidekingsandqueens(k3s.tfvars line ~225, the livefunnel = falseprecedent) andbasketball-api(k3s.tfvars line ~209, alternate shape) with explicit warning "do NOT copy that field from here" for basketball-api'sfunnel = true. The non-existentwestside-contractsandpal-e-dora-exporterreferences are gone. - [x]
funnel = falseAC pinned — AC bullet 3 now reads: "funnel = false— the overlay'singress.yamlalready provides the Tailscale ingress; settingfunnel = truewould create a duplicatekubernetes_ingress_v1.service_funnel(dead-address class warned atservices.tf:171-175) AND violatefeedback_funnel_requires_auth." AC bullet 6 verifiestofu plandoes NOT show creation ofkubernetes_ingress_v1.service_funnel["westside-streamlit"]. - [x]
forgejo_repoAC pinned — AC bullet 4 now reads: "forgejo_repo = "forgejo_admin/westside-streamlit"— the schema requires this field with no default (variables.tf:168); copy-from-westsidekingsandqueens MUST override this (that points atforgejo_admin/westside-app)." - [ ] [SCOPE] arch-services-tf note still missing — search returned no results for
arch-services-tfin pal-e-docs. Body's Related section now explicitly calls out this discovered scope: "createarch-services-tfnote documenting thevar.servicesfan-out pattern at platform scope." Per skill-review-ticket guidance, missing backing notes are[SCOPE]recommendations and do NOT block advance. Prior review explicitly concluded: "After the three [BODY] fixes land via skill-refine-ticket, this ticket is APPROVED for advance to todo." Carry-forward as a separate ticket.
Template Completeness
- [x] Type — Feature
- [x] Lineage — explicit (audit-discovered, links siblings + supersession)
- [x] Repo —
forgejo_admin/pal-e-services - [x] User Story — well-formed As/I want/So that
- [x] Context — substrate audit summary, schema verified, hostname declared, funnel-collision risk callout added
- [x] File Targets — files to modify (with corrected reference services) and files NOT to touch
- [x] Acceptance Criteria — 9 items (was 7, added
funnel = false+forgejo_repo+ plan-output-no-funnel-create) - [x] Test Expectations — fmt/validate/plan with explicit run commands
- [x] Constraints — present, includes
-lock=falseand no-funnel reminders - [x] Checklist — present
- [x] Related — present, includes new
feedback_funnel_requires_auth+incident-2026-04-10-pal-e-streamlit-public-funnelreferences
Traceability
- [x]
story:reachablelabel — Dashboard Reachable from Phone - [x] story note verified —
story-westside-streamlit-reachableexists (id 1401, confirmed in round 1) - [x]
arch:services-tflabel present - [ ] arch note MISSING —
arch-services-tfstill not in pal-e-docs (search returned no results). [SCOPE] Carry forward as separate ticket; body already documents this as discovered scope. - [x] Forgejo issue — #60 open, body well-structured
File Targets
- [x]
~/pal-e-services/terraform/k3s.tfvars— verified, exists.grep westside-streamlitreturns zero hits, so the additive change is correctly scoped. - [x] Reference services verified live in k3s.tfvars:
- [x]
~/pal-e-services/terraform/variables.tflines 165-177 — schema verified, supportssource_repo+source_pathas optional fields.forgejo_reporequired with no default (line 168). Body's "no schema extension needed" claim is accurate. - [x]
~/pal-e-services/terraform/services.tflines 168-180 — funnel resource gatedfor_each = { for k, v in var.services : k => v if v.funnel }. Comment block at 171-175 explicitly warns about the dead-address pattern. AC plan-output check matches resource namekubernetes_ingress_v1.service_funnel["westside-streamlit"]. - [x] Overlay path
~/pal-e-deployments/overlays/westside-streamlit/prod/verified — 6 files (deployment-patch, harbor-creds.enc, ingress, kustomization, namespace, secret.enc). Body's claim that the overlay already provides the Tailscale ingress is correct.
Repo Placement
OK. Issue is correctly filed on
forgejo_admin/pal-e-services. Single-repo change.Dependencies
Unchanged from round 1. Documented:
- Lineage block calls out sibling
pal-e-services#61(Keycloak client) and noteswestside-streamlit#3/#6are blocked by this ticket. - Lineage notes that
westside-streamlit#10was closed-but-incomplete and is superseded by sibling #61. - No board blockers — this ticket can advance to
todoimmediately on approval.
Acceptance Criteria
9 criteria, all individually verifiable:
- AC1 (key =
westside-streamlit) — verifiable via grep - AC2 (
image_repoprefix matches key perfeedback_harbor_project_naming) — verifiable via diff - AC3 (new)
funnel = falsewith cited reasons — exact match to round 1 [BODY] recommendation - AC4 (new)
forgejo_repo = "forgejo_admin/westside-streamlit"with override-on-copy warning — exact match to round 1 [BODY] recommendation - AC5
source_path = "overlays/westside-streamlit/prod"with pre-flight directory check — pre-verified, directory exists - AC6 (5 specific resource creates) — exact match to
services.tfresource names - AC7 (new)
tofu plandoes NOT show creation of funnel ingress — provesfunnel = falseis set - AC8 (ArgoCD targets namespace
westside-streamlit) — guaranteed by services.tf line 155 - AC9 (namespace creates cleanly or no-ops) — handles pre-existing-namespace edge case
- AC10 (no
tofu applyin PR) — explicit Lucas-applies gate
All ACs verifiable post-implementation.
Blast Radius
All round-1 risks now mitigated by explicit ACs:
- Funnel collision risk — AC3 + AC7 pin
funnel = falseAND verify the funnel resource is NOT created in plan output. Theservices.tf:171-175warning is now cited in the AC. Resolved. forgejo_repofield — AC4 pins the value with the explicit override-on-copy warning. Resolved.portfield — body Constraints section cites thewestsidekingsandqueensshape (which usesport = 80). Withfunnel = falsethe port is short-circuited; defensible.- Harbor naming bug — AC2 enforces image_repo prefix match per
feedback_harbor_project_naming. Carry-forward from round 1.
Decomposition Assessment
5-minute rule: 1 file, 1 repo, ~10 lines added to k3s.tfvars, 9 ACs (10 if counting the no-apply gate). Well within a single agent pass. No decomposition needed.
Recommendation
All three round-1
[BODY] fixes are present and accurate. The body now correctly references services that exist in k3s.tfvars, pins funnel = false with both the configuration AC and a plan-output verification AC, and pins forgejo_repo with the verbatim-copy override warning.The single remaining finding (
arch-services-tf note missing) is a [SCOPE] recommendation that the body already calls out as discovered scope. Per the skill-review-ticket guidance and the round-1 review's own conclusion, it does not block advance.APPROVED for advance to
todo. No further refinement required.Carry-forward (separate ticket):
- [SCOPE] Create
arch-services-tfarchitecture note at platform scope documenting thevar.servicesfan-out pattern (Harbor project + robot accounts + Harbor creds + namespace + ArgoCD app + optional funnel). Already cited in body's Related → Discovered scope.