Review: Service onboarding -- namespace, Harbor, ArgoCD, Tailscale funnel
Verdict: NEEDS_REFINEMENT
Template Completeness
- [x] Type -- Feature
- [x] Lineage -- Standalone
- [x] Repo -- ldraney/pal-e-services
- [x] User Story -- present, well-formed
- [x] Context -- present, describes foundational nature
- [x] File Targets -- present, with both modify and do-not-touch sections
- [x] Feature Flag -- none (appropriate for infra ticket)
- [x] Acceptance Criteria -- 5 items
- [x] Test Expectations -- present with run command
- [x] Constraints -- present, references landscaping-assistant pattern
- [x] Checklist -- present
- [x] Related -- present
Traceability
- [x] story:platform-setup label -- Platform Setup
- [x] story note verified -- story-kalshi-assistant-platform-setup exists in pal-e-docs, listed in project-kalshi-assistant user-stories section
- [x] arch:iac label -- Infrastructure as Code
- [ ] arch note MISSING -- [SCOPE] Create architecture note arch-iac for component iac
- [x] arch:k8s-deploy label -- Kubernetes Deployment
- [ ] arch note MISSING -- [SCOPE] Create architecture note arch-k8s-deploy for component k8s-deploy
- [x] Forgejo issue -- https://forgejo.tail5b443a.ts.net/ldraney/kalshi-assistant/issues/7, open
File Targets
- [x]
terraform/k3s.tfvars-- verified: file exists (symlink to ~/secrets/pal-e-services/k3s.tfvars),servicesmap starts at line 193, landscaping-assistant pattern confirmed at lines 203-210 with matching structure (forgejo_repo, image_repo, port 3000, funnel true, source_repo, source_path). No existing kalshi-assistant entry -- clean for addition.
Repo Placement
Issue filed on
ldraney/kalshi-assistant but ### Repo section explicitly declares work is in ldraney/pal-e-services. This is an acceptable pattern: project-specific infrastructure tickets are filed on the project repo, with the shared infrastructure repo declared as the target. Work touches only one repo (pal-e-services). No multi-repo issue needed.Dependencies
This ticket is correctly identified as foundational in Context: "nothing else deploys until this is done." Board analysis confirms downstream dependencies:
- #1686 Rails app scaffold (sprint:1) -- blocked by this ticket (needs namespace)
- #1692 DNS + reverse proxy (sprint:1) -- depends on namespace/funnel existing
- #1693 Keycloak realm (sprint:1) -- depends on namespace existing
- #1695 Kustomize overlays (sprint:2) -- depends on ArgoCD app existing
- #1696 CI/CD pipeline (sprint:2) -- depends on Harbor project existing
Dependencies are documented implicitly in Context but not explicitly enumerated. Acceptable for a clearly foundational ticket.
Acceptance Criteria
All 5 criteria are verifiable by an agent:
tofu plan-- exits 0 with expected resources (testable)tofu apply-- succeeds (testable, creates real resources)- Namespace check --
kubectl get ns kalshi-assistant(testable) - Harbor project check -- Harbor API or UI (testable)
- ArgoCD app check --
argocd app get kalshi-assistant(testable)
Test Expectations section includes a run command:
cd ~/pal-e-services && tofu plan -var-file=terraform/k3s.tfvars. Good.Blast Radius
Low. Adds a new entry to a shared tfvars file without modifying existing entries. The pattern is well-established with multiple existing service entries (landscaping-assistant, believers-elite, mdview, gcal-scheduler, etc.). No downstream consumers affected by addition.
Decomposition Assessment
No decomposition needed:
- 1 file target in 1 repo
- 5 acceptance criteria (at threshold, not over)
- Estimated agent work: under 2 minutes (single block addition following a clear pattern)
Recommendation
- [SCOPE] Create architecture note
arch-iacdocumenting the IaC patterns (Terraform/OpenTofu modules, tfvars structure, service map convention) - [SCOPE] Create architecture note
arch-k8s-deploydocumenting the k8s deployment pipeline (ArgoCD, Image Updater, namespace provisioning, Tailscale funnel)
These are platform-level architecture notes that would serve all projects using the pal-e-platform infrastructure, not just kalshi-assistant. The ticket scope itself is solid -- clear target, verified pattern, testable criteria. The missing arch notes are a documentation gap, not a scope problem.