Review: Automate Gmail OAuth re-auth lifecycle (7-day token expiry) v2
Verdict: BLOCK
Template Completeness
- [ ] Type -- MISSING (issue body is literal
$NEW_BODY) - [ ] Lineage -- MISSING
- [ ] Repo -- MISSING
- [ ] User Story -- MISSING
- [ ] Context -- MISSING
- [ ] File Targets -- MISSING
- [ ] Acceptance Criteria -- MISSING
- [ ] Test Expectations -- MISSING
- [ ] Constraints -- MISSING
- [ ] Checklist -- MISSING
- [ ] Related -- MISSING
The Forgejo issue body is the literal string
$NEW_BODY -- a shell variable that was never interpolated. A comment on 2026-03-27T22:14:04Z claims "Issue body updated per scope review corrections" but the body was not actually updated. The entire issue spec has been lost or was never written.Traceability
- [ ] story:X label -- MISSING. Board item has
arch:google-oauth,type:feature,scope:discoveredbut no story label. Prior review recommendedstory:platform-reliability. - [x] arch:google-oauth label -- present on board item #359.
- [x] Forgejo issue --
forgejo_admin/pal-e-platform#162, confirmed open. But body is empty/broken.
File Targets
Cannot evaluate -- issue body is empty. Based on prior review (
review-359-2026-03-27) and independent verification:- [x]
salt/pillar/secrets_registry.sls-- verified exists. No Gmail OAuth entry present. Adding one is straightforward. - [x]
scripts/directory -- exists with 3 scripts (update-kustomize-tag.sh,woodpecker-update-tag-step.yaml,test-update-kustomize-tag.sh). A newgmail-reauth.shwould be consistent. - [x]
~/gmail-sdk/src/gmail_sdk/auth.py-- verified exists. Should be scoped as "do not touch." - [x]
~/gmail-mcp/-- verified exists. Should be scoped as "do not touch." - [ ] Alerting/cron mechanism -- TBD. Prior review flagged this as unresolved.
Repo Placement
Cannot evaluate from issue body. Prior review confirmed pal-e-platform is the correct repo for core work (secrets_registry.sls, re-auth script). gmail-mcp#6 dependency is satisfied (board item #361, done).
Dependencies
- Board item #361 (gmail-mcp SSH reauth,
forgejo_admin/gmail-mcp#6) -- indonecolumn. Prerequisite satisfied. - No blockers in
in_progressornext_upthat conflict. - Undocumented (from prior review): pal-e-mail uses a PVC (
gmail-oauth, mounted at/secrets/gmail), not a k8s secret. The re-auth script must handle this or explicitly scope it out. Confirmed:pal-e-deployments/overlays/pal-e-mail/prod/deployment-patch.yamlmounts PVCgmail-oauthas a volume. - Two k8s secrets in basketball-api namespace:
gmail-oauth-token(18 days old) andgmail-oauth-westsidebasketball(9 days old). Unclear if both are active.
Acceptance Criteria
Cannot evaluate -- issue body is empty. Prior review found 5 ACs with 2 ambiguous (day-6 alerting mechanism unspecified, pal-e-mail PVC vs secret unclear).
Blast Radius
- Token file naming mismatch: Local file is
~/secrets/google-oauth/gmail-westsidebasktball.json(typo: missing 'e' in basketball). K8s secret isgmail-oauth-westsidebasketball(correct spelling). Any sync script must bridge this naming gap. - pal-e-mail PVC pattern: pal-e-mail reads from
/secrets/gmailvia PVC, not a k8s secret. Re-auth sync must account for this or create a separate ticket. - gmail-mcp also consumes the token file -- re-auth script needs to ensure gmail-mcp picks up the refreshed token.
Decomposition
Cannot fully assess without the spec. Prior review did not flag decomposition as needed (estimated 2-3 file targets in 1 repo, 5 ACs). If the alerting mechanism is specified, this likely fits in a single agent pass.
Recommendation
This is a BLOCK because the issue body is completely empty -- no agent can work from
$NEW_BODY. Additionally, 4 issues from the prior NEEDS_REFINEMENT review remain unresolved:[BODY]CRITICAL: Rewrite the entire issue body -- the current body is the literal string$NEW_BODY. The spec must be recreated from scratch usingtemplate-issue-feature. The prior review (review-359-2026-03-27) documents what the original content covered.[LABEL]Addstory:platform-reliabilitylabel to board item #359.[BODY]Specify the day-6 alerting mechanism -- pick Prometheus alert rule, k8s CronJob, or Salt scheduled job. Add the specific file target path.[BODY]Clarify pal-e-mail sync path -- PVCgmail-oauthis not a k8s secret. Either add PVC update to scope, explicitly exclude it, or create a separate ticket.[BODY]Document thegmail-westsidebasktball.jsontypo vsgmail-oauth-westsidebasketballcorrect-spelling mapping in Constraints section.[SCOPE]Clarify whether both k8s secrets in basketball-api namespace (gmail-oauth-tokenandgmail-oauth-westsidebasketball) are active, or if one is stale.