Fix docs that still describe membership as edition-scoped - #333
Conversation
W1 changed `member` from unique(user_id, hackathon_id) to unique(user_id), but two pieces of documentation still described the old shape — and one of them contradicted the code directly beneath it. - README said `member` is scoped to a hackathon and that "a paid year still hangs off an edition, so membership resolves the current hackathon". That is the bug W1 fixed: the day the next edition opened, every paying member read as a non-member. It now says what is true, including that the club half works with no hackathon in the database at all. - `requireActiveMember`'s docblock claimed it resolves the current edition. The function body does not, and an inner comment said the opposite — a reader had to work out which half to believe. Documentation only; no behaviour change.
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_3df403e3-777a-4663-8d75-634a04565ff5) |
Dependency Review✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.Scanned FilesNone |
|
Visit the preview URL for this PR (updated for commit 2db25c9): https://hacklytics2027--pr-333-urq7fm2q.web.app (expires Sun, 16 Aug 2026 05:07:57 GMT) 🔥 via Firebase Hosting GitHub Action 🌎 Sign: c48ba34db61581e25fe2978355160b5eefe0e83f |
|
| Filename | Overview |
|---|---|
| README.md | Updates the data-model overview to describe membership and other club entities as independent of hackathon editions; no actionable issue found. |
| packages/api/src/routers/initiative.ts | Replaces a contradictory membership docblock with wording consistent with the unchanged user-scoped query; no actionable issue found. |
Reviews (1): Last reviewed commit: "docs: membership is no longer scoped to ..." | Re-trigger Greptile
Found while auditing the product against MVP.
W1 (#316) changed
memberfromunique(user_id, hackathon_id)tounique(user_id). Two pieces of documentation still describe the old shape, and one contradicts the code directly beneath it:memberis scoped to a hackathon, and that "a paid year still hangs off an edition, so membership resolves the current hackathon". That is precisely the bug W1 fixed — the day the next edition opened, every paying member read as a non-member. This is the repo's front page, so it is the first thing a new contributor would believe.requireActiveMembercarried a docblock saying it resolves the current edition. The body does not, and an inner comment said the opposite, leaving a reader to guess which half was current.Documentation only, no behaviour change. typecheck · 426 tests · lint clean.
Note
Low Risk
Documentation and comment-only changes; no runtime or API behavior changes.
Overview
Updates documentation so it matches W1’s model:
memberisunique(user_id), not edition-scoped.The README no longer lists
memberunder hackathon cascades or says a paid year “hangs off an edition.” The club half now explicitly includesmember,membership_history,event, andevent_check_in, and explains that memberships are defined by their own dates and the club side can work with nohackathonrow.In
initiative.ts, therequireActiveMemberdocblock no longer claims it resolves a “current edition”; it states membership is keyed on the person alone and notes the old between-hackathons refusal behavior. A redundant inner comment was removed so the comment matches the existingeq(members.userId, userId)lookup.Reviewed by Cursor Bugbot for commit 2db25c9. Bugbot is set up for automated code reviews on this repo. Configure here.