Review: groupme-sdk: Python SDK wrapping GroupMe REST API

review-303-2026-03-24 Review

review needs-refinement

Verdict: NEEDS_REFINEMENT

Template Completeness

  • [x] Type
  • [x] Lineage
  • [x] Repo
  • [x] User Story
  • [x] Context
  • [x] File Targets
  • [x] Acceptance Criteria
  • [x] Test Expectations
  • [x] Constraints
  • [x] Checklist
  • [x] Related
All required template sections present. Well-structured.

File Targets

  • [x] src/groupme_sdk/client.py — new file, pattern matches minio-sdk (verified minio_sdk/client.py exists)
  • [x] src/groupme_sdk/groups.py — new file, reasonable module split
  • [x] src/groupme_sdk/members.py — new file, reasonable module split
  • [x] src/groupme_sdk/messages.py — new file, reasonable module split
  • [x] tests/ — new directory
  • [x] pyproject.toml — new file, minio-sdk pattern verified (hatchling, ruff, pytest)
  • [ ] .woodpecker.yaml — MISSING: acceptance criteria require Forgejo PyPI publish + CI pipeline, but no CI config listed in file targets
  • [ ] src/groupme_sdk/__init__.py — MISSING: package init file not listed (minio-sdk has one)

Repo Placement

MISMATCH: Issue filed on forgejo_admin/basketball-api (#155) but work targets forgejo_admin/groupme-sdk (new repo, does not exist yet). This is pragmatically understandable since the target repo doesn't exist, but creates ambiguity for the agent:
  • Agent must create the Forgejo repo before starting work
  • PRs go to the new repo, not basketball-api
  • The issue should ideally be transferred to groupme-sdk after repo creation, or the ticket should explicitly instruct "Step 0: create Forgejo repo"
Same pattern exists for sibling ticket #157 (groupme-mcp). All three GroupMe tickets are filed on basketball-api.

Dependencies

  • This is Ticket 1 of 3 in the project-groupme-westside lineage
  • Board item #304 (basketball-api #156): GroupMe data model + auto-invite — explicitly depends on this SDK
  • Board item #305 (basketball-api #157): groupme-mcp server — explicitly depends on this SDK
  • No blockers identified — this ticket can proceed independently
  • GroupMe API token verified working (~/secrets/groupme/credentials.env): 1 existing group found ("WKQ Coaches & Staff")

Acceptance Criteria

  • [x] "SDK supports: create_group, list_groups, update_group, add_member, remove_member, list_members, send_message" — clear, testable
  • [x] "Unit tests pass (mocked HTTP)" — standard, testable via pytest tests/
  • [x] "Integration test passes against live GroupMe API" — token exists and verified working
  • [ ] "Forgejo repo exists with CI pipeline" — requires .woodpecker.yaml not listed in file targets
  • [ ] "Published to Forgejo PyPI" — requires CI publish step + pyproject.toml [project.urls] config
Integration test lifecycle (create group → add member → send message → cleanup) is well-specified but needs care: test must clean up created groups to avoid littering the real GroupMe account.

Blast Radius

  • No existing GroupMe code anywhere in basketball-api (grep confirmed zero matches)
  • Net-new repo — zero blast radius on existing services
  • Downstream consumers (basketball-api, groupme-mcp) are future tickets, not yet implemented
  • GroupMe API uses permanent token (no OAuth refresh) — simpler than minio-sdk's Sig V4, but token rotation story is unspecified

Recommendation

Two refinements needed before READY:
  • Add missing file targets: .woodpecker.yaml (CI pipeline for tests + Forgejo PyPI publish) and src/groupme_sdk/__init__.py (package init)
  • Add repo creation instruction: Either add "Step 0: create forgejo_admin/groupme-sdk repo on Forgejo" to the ticket body, or note that the agent should use mcp__forgejo__create_repo before starting