Review: groupme-sdk: Python SDK wrapping GroupMe REST API
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 (verifiedminio_sdk/client.pyexists) - [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-westsidelineage - 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) andsrc/groupme_sdk/__init__.py(package init) - Add repo creation instruction: Either add "Step 0: create
forgejo_admin/groupme-sdkrepo on Forgejo" to the ticket body, or note that the agent should usemcp__forgejo__create_repobefore starting