Review: Apply ruff standard to gmail-mcp (missed from #29 rollout)
Verdict: READY
Re-review after refinement. Previous review returned NEEDS_REFINEMENT with 2 body fixes. Both applied and verified.
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
- [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, line-length=120 (should be 88), target-version="py310" (should be py312), select=["E","F","W","I"]. Issue claim confirmed. - [x]
~/gmail-mcp/.pre-commit-config.yaml— verified: file does not exist, parent directory exists. Needs creation. Issue claim confirmed. - [x]
convention-python-ruff-standard— verified: note exists in pal-e-docs with exact pyproject.toml and .pre-commit-config.yaml templates. - [x]
~/gmail-mcp/.woodpecker.yml— verified: ruff lint step exists (lines 5-10), includes 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. Previous review flagged this as a mismatch. Refinement added explicit clarification in the Repo section: "code changes target this repo; issue tracked on pal-e-platform for board alignment." Acceptable — cross-repo tracking is documented.Dependencies
- [x] Parent issue pal-e-platform#29 — board item #55 in done column. Not a blocker.
- [x] Convention note
convention-python-ruff-standard— active and complete, provides exact templates. - [x] Woodpecker CI pipeline — already has ruff lint step. No CI changes needed.
- [x] No blockers found in in_progress column.
Acceptance Criteria
All 4 AC are machine-verifiable:
- AC1: pyproject.toml ruff config matches convention — agent can diff against convention template. Testable.
- AC2: .pre-commit-config.yaml exists with ruff hook — file existence check. Testable.
- AC3:
ruff check .passes — direct command. Testable. - AC4: CI pipeline includes ruff step — pre-satisfied, documented in issue body. Testable.
Checklist now includes explicit
ruff format . step (fix from previous review). All criteria complete.Blast Radius
- minio-sdk still non-conformant at line-length=120. Discovered scope from previous review — needs its own ticket. Not a blocker for this ticket.
- Convention note gap:
gmail-mcpnot listed inconvention-python-ruff-standardRepos In Scope table. Post-completion update needed — not a blocker. - Convention table also stale for minio-api and pal-e-mcp (both already at 88 but table says 120). Separate housekeeping.
Decomposition Assessment
- 2 file targets in 1 repo — under the 3-file threshold.
- 4 acceptance criteria — under the 5-AC threshold.
- Estimated agent time: <5 minutes (config update + format + fix violations).
No decomposition needed.
Refinement Delta
Changes since previous review (NEEDS_REFINEMENT):
[BODY]Repo clarification — applied. Repo section now documents cross-repo tracking.[BODY]Addedruff format .checklist item — applied. Checklist item #2 now reads "Run ruff format . to reformat for new line-length."[SCOPE]minio-sdk discovered scope — external, not a blocker. Tracked for follow-up.[SCOPE]Convention note update after remediation — post-completion work, not a blocker.
Recommendation
No action needed. Ticket is ready for dispatch.