Review: Apply ruff standard to gmail-mcp (re-review)
Verdict: APPROVED
Re-review after refinement. Previous review (review-640-2026-03-28) returned NEEDS_REFINEMENT with 2 body fixes. Both applied and independently verified in this pass.
Template Completeness
- [x] Type — Feature
- [x] Lineage — board, story, arch, discovered-from all present
- [x] Repo — forgejo_admin/gmail-mcp (clarified: code targets gmail-mcp, tracked on pal-e-platform for board alignment)
- [x] User Story — clear as-a/I-want/so-that
- [x] Context — explains #29 rollout gap, current config drift (line-length=120, py310)
- [x] File Targets — 2 targets with specific config values
- [x] Acceptance Criteria — 4 items, all verifiable
- [x] Test Expectations — ruff check + ruff format commands
- [x] Constraints — references convention note, notes reformatting need
- [x] Checklist — 5 items including explicit ruff format step (fix from previous review)
- [x] Related — parent issue #29 + convention note referenced
Traceability
- [x] story:superuser-deploy — platform operator deploying consistent standards
- [x] arch:ci-pipeline — CI linting infrastructure
- [x] Forgejo issue — forgejo_admin/pal-e-platform#244, open
File Targets
- [x]
~/gmail-mcp/pyproject.toml— verified: exists, current config is line-length=120, target-version="py310", select=["E","F","W","I"]. Issue body accurately describes the drift. - [x]
~/gmail-mcp/.pre-commit-config.yaml— verified: does not exist yet, parent directory exists. Creation is the correct action. - [x]
convention-python-ruff-standard— verified: note exists in pal-e-docs with exact pyproject.toml template (py312, line-length=88, E/F/I/W) and .pre-commit-config.yaml template (ruff-pre-commit v0.15.2). - [x]
~/gmail-mcp/.woodpecker.yml— verified: ruff lint step present (lines 5-10) with bothruff checkandruff format --check. AC4 pre-satisfied confirmed.
Repo Placement
Issue filed on
forgejo_admin/pal-e-platform with code changes targeting forgejo_admin/gmail-mcp. Cross-repo tracking is now explicitly documented in the Repo section. Acceptable.Dependencies
- [x] Parent issue pal-e-platform#29 — open but 5/6 repos complete. Not a blocker.
- [x] Convention note
convention-python-ruff-standard— active, provides exact templates. - [x] Woodpecker CI pipeline — already has ruff lint step. No CI changes needed.
- [x] No blockers found in in_progress column (only phase-postgres items, unrelated).
Acceptance Criteria
All 4 AC are machine-verifiable:
- AC1: pyproject.toml ruff config matches convention — agent can diff against template. Testable.
- AC2: .pre-commit-config.yaml exists with ruff hook — file existence check. Testable.
- AC3:
ruff check .passes clean — direct command. Testable. - AC4: CI pipeline includes ruff step — pre-satisfied, already in .woodpecker.yml. Testable.
Blast Radius
- gmail-mcp not in convention table:
convention-python-ruff-standard"Repos In Scope" table does not list gmail-mcp. Post-completion housekeeping, not a blocker. - Convention table stale: minio-api and pal-e-mcp may have been updated since the table was written. Separate housekeeping.
- No downstream consumers affected — gmail-mcp is a standalone MCP server.
Decomposition Assessment
- 2 file targets in 1 repo — under the 3-file threshold.
- 4 acceptance criteria — under the 5-AC threshold.
- Estimated agent time: <3 minutes (config update + format + fix violations + create .pre-commit-config.yaml).
No decomposition needed.
Refinement Delta
Changes verified since previous NEEDS_REFINEMENT review:
[BODY]Repo clarification — confirmed applied. Repo section now reads: "code changes target this repo; issue tracked on pal-e-platform for board alignment."[BODY]Addedruff format .checklist item — confirmed applied. Checklist item #2 reads: "Run ruff format . to reformat for new line-length."
Recommendation
No action needed. Ticket is approved for dispatch.