Review: Provision k8s secrets for notion-mcp-remote (re-review)
Verdict: APPROVED
Re-review of board item #1047 / Forgejo issue forgejo_admin/notion-mcp-remote#7 after refinement. Prior verdict:
review-1047-2026-04-21 NEEDS_REFINEMENT. All flagged gaps have been resolved. Type: Feature. Points: 2.Refinement Gaps Closed
The prior review flagged a
[BODY] gap: the AC secret name/shape did not match the deployment manifest on main. Verified against /home/ldraney/notion-mcp-remote/k8s/deployment.yaml:- [x] Secret name corrected to
notion-mcp-secrets(matches manifest line 41, 46, 51, 56, 61) - [x] Keys rewritten in kebab-case:
base-url,oauth-client-id,oauth-client-secret,session-secret,onboard-secret(matches manifest lines 42, 47, 52, 57, 62 exactly) - [x] Wiring model changed to
valueFrom: secretKeyRef;envFromlanguage removed from Context - [x] Mapping table added: secret key → env var → consumer (matches manifest env block lines 38-62)
- [x] AC strengthened: now requires
kubectl rollout status,kubectl exec envverification of all 5 env vars inside the container, and a/health200 probe - [x] Explicit constraint added: "Do not normalise to UPPER_SNAKE_CASE;
secretKeyRef.keylookups are case-sensitive"
Template Completeness
- [x] Type (Feature)
- [x] Lineage
- [x] Repo
- [x] User Story (role / want / so-that)
- [x] Context (now internally consistent with the deployment)
- [x] File Targets (correctly "no repo file changes")
- [x] Acceptance Criteria (7 items, each verifiable)
- [x] Test Expectations (runnable kubectl commands)
- [x] Constraints (4 guardrails including the new case-sensitivity callout)
- [x] Checklist (5 items)
- [x] Related (project, story, SOP, arch note)
Traceability
- [x]
story:ops-deploy-gitopslabel — GitOps Deploy via pal-e Platform - [x] story note verified —
story-notion-mcp-remote-ops-deploy-gitopsexists; AC row "Secrets provisioned viakubectl create secret genericbefore first ArgoCD sync" maps 1:1 - [x]
arch:k8s-secretlabel — architectural coverage present inarch-deployment-notion-mcp-remoteandarch-secrets-pipeline. Prior review's optional[LABEL]suggestion was not actioned, but it was optional ("interpretable but inconsistent") — not a blocker. - [x] Forgejo issue — URL valid, #7 open, body well-formed
File Targets
No repo file changes — this is a
kubectl operation. Cross-checked manifest for shape alignment:- [x]
k8s/deployment.yamllines 38-62 — verified all 5 env blocks usevalueFrom.secretKeyRef.name: notion-mcp-secretswith the exact kebab-case keys the AC now lists. Env var names matchserver.pyconsumers.
Repo Placement
OK. Issue on
forgejo_admin/notion-mcp-remote; downstream kustomize work on pal-e-deployments (#1044); namespace on pal-e-platform (#1045). Correctly scoped.Dependencies
Unchanged from prior review and still adequately documented: blocks on #1046 (OAuth integration) for real client id/secret, and on #1045 (tofu apply) for the namespace. Blocks downstream #1044 (kustomize overlay) and #1043 (ArgoCD Application) per SOP.
Acceptance Criteria
Strengthened materially. Previously testable-but-shallow (jsonpath key check + secret presence). Now forces the pod to actually come up with the bound values: rollout status, in-container
env verification, and /health 200. Because server.py fails loudly on missing required env, a green pod proves the secret shape matches the manifest — this is exactly the right end-to-end assertion for this ticket.Blast Radius
Unchanged. First-time bootstrap — no token encryption collateral. No sibling services consume
notion-mcp-secrets. Prior reviewer's optional nit about SESSION_SECRET rotation impact was not added to the body — not a blocker for first-time provisioning, but worth a follow-up doc note if this ticket triggers future rotation runbooks.Decomposition Assessment
1 repo, 0 file targets, 7 AC items (still a single
kubectl create + verification loop), <5 minutes of operator time. No decomposition needed.Recommendation
No action needed. Ticket is ready to advance from
backlog to todo.Summary
All
[BODY] gaps from the prior review are closed. Secret name, key casing, wiring model, and env-var mapping now exactly match k8s/deployment.yaml on main. The acceptance criteria have been hardened to verify actual pod startup rather than just secret existence, which is the correct bar for this ticket. Verdict: APPROVED.