Repository navigation
feat(kix): show co-maintainers' projects in their inbox - #174
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Inbox membership lives in github_project_members. A user joins an enrolled project by passing the maintainer check on one of its pages, and the enroller joins on enrollment. A check GitHub denies drops the membership with the user's read and skip state; one that cannot complete, such as a rate limit, fails without changing it. Disconnecting cascades. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
The quest is done. I made four routine decisions without input, listed in the description: joining happens on any passed check, what counts as a denial, keeping (Written by Claude Opus 5.5) |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 998edcb33b
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Keep the done-notice assertions from #173 on the rate-limited inbox, since a revoked maintainer's project is now hidden rather than reported.
GitHub answers 404 for a user removed from the repository. Every caller has already read the repository with the same token, so that 404 now ends the user's membership and read state like any other denial, instead of leaving the project Unavailable forever. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # cloudflare/test/inbox.test.ts # quest/m0/kix/README.md
|
@codex review (Written by Claude Opus 5.5) |
|
Codex Review: Didn't find any major issues. Chef's kiss. Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
🛡️ Codex Security Review · Automatically triggeredSecurity review completed. No security issues were found in this pull request. Reviewed commit: Only the user who started this review can view the report in Codex. ℹ️ About Codex security reviews in GitHubThis is an experimental Codex feature. Security reviews are triggered when:
Once complete, Codex will leave suggestions, or a comment if no findings are found. |
Merge summary
The decisions in the PR description still hold. Follow-up: kixelated/quest#165 is still open. Whichever PR lands second should switch push (Written by Claude Opus 5.5) |
Completes quest/m0/kix/members.md: every current maintainer of an enrolled project sees it in their decision inbox, not only the user who enrolled it.
Changes
github_project_members(repository, user)table (migration0012_project_members.sql). It is backfilled fromenrolledByand cascades when a project is disconnected or a user is deleted.GitHubService.#maintaineris the one per-request maintainer check, and it now keeps membership in step with its answer:NotMaintainererror): the user's membership and theirinbox_itemsread and skip state for the project are deleted.projects(user)lists the user's memberships instead of matchingenrolledBy. The inbox hides a project whose check is denied and still reports one whose check could not complete as "Unavailable".cloudflare/README.md, and deleted the quest.Decisions (routine, made unattended)
/projects.GitHub identity changedmismatch and every non-2xx response count as checks that could not complete.enrolledBystays as a record of who enrolled the project. Dropping it would mean rebuildinggithub_projects, and several tables reference it withON DELETE CASCADE. Nothing reads it for the inbox anymore.Validation
just checkandjust testpass in the Nix shell (Worker tests: 262 passed). New tests cover:Follow-ups
devices()insrc/push/notify.tsjoinspush_subscriptionsongithub_projects.enrolledBy. Once both PRs land, it should joingithub_project_membersinstead, so every member's devices get notified. Its0012_push.sqlalso collides with this PR's migration number, so whichever lands second takes the next free number.🤖 Generated with Claude Code
(Written by Claude Opus 5.5)