feat: add GitHub project rooms - #131
Conversation
|
Codex review: needs maintainer review before merge. Reviewed July 27, 2026, 1:26 PM ET / 17:26 UTC. ClawSweeper reviewWhat this changesAdds GitHub-linked project rooms with workspace UI and APIs, SQLite/Postgres project storage, and signed GitHub webhooks that group repository activity into ClickClack channel threads. Merge readinessKeep this PR open for maintainer product review. The patch is a substantial, coherent new ClickClack capability with real runtime evidence and no remaining discrete correctness finding, but it introduces a durable project data model, public project APIs, and webhook-driven message delivery that need explicit long-term ownership and upgrade support approval before merge. Priority: P2 Review scores
Verification
How this fits togetherProject rooms extend ClickClack workspaces by linking repositories and participants to an automatically created collaboration channel. GitHub webhook events enter through a signed endpoint, are deduplicated and retried in persistent storage, and become thread roots or replies in that channel. flowchart LR
Managers[Workspace managers] --> Project[GitHub project room]
Project --> Database[Project and delivery storage]
Project --> Channel[Collaboration channel]
GitHub[GitHub webhook delivery] --> Verify[Signature and retry check]
Verify --> Routing[Issue and PR thread routing]
Routing --> Channel
Decision needed
Why: The implementation is broad and proof-backed, but deciding whether these durable APIs, migrations, and GitHub integration semantics belong in the supported core cannot be resolved from patch correctness alone. Before merge
Agent review detailsSecurityNone. Review metrics
Merge-risk optionsMaintainer options:
Technical reviewBest possible solution: If maintainers want GitHub project rooms as a supported core capability, accept the project API and migration contract explicitly, then merge this implementation with ongoing ownership for webhook compatibility and delivery semantics. Do we have a high-confidence way to reproduce the issue? Not applicable as a feature request rather than a report of broken current behavior. The contributor nevertheless supplied high-confidence live evidence for the new UI, signed webhook handling, upgrade, retry, and duplicate-suppression paths. Is this the best way to solve the issue? Unclear. The patch is internally coherent and evidence-backed, but its broad durable API and storage contract needs maintainer product acceptance before it can be called the best long-term solution. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against f59e3aa96064. LabelsLabel changes:
Label justifications:
EvidenceWhat I checked:
Likely related people:
Rank-up movesOptional improvements that raise the rating; they are not merge blockers.
Rating scale
Overall follows the weaker of proof and patch quality. Workflow
HistoryReview history (5 earlier review cycles)
|
|
@clawsweeper re-review Added the requested webhook and upgrade evidence at docs/proof/github-project-rooms/webhook-runtime-proof.md, and linked it from the PR body. The redacted live proof now covers:
Automated coverage at head |
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
|
This is excellent and overlaps strongly with #126 and #129. I think this may be the faster route: use this PR’s native project configuration, webhook handling and delivery machinery, then add dedicated work-item rooms as a focused follow-up. GitHub should be the first connector, but the underlying pattern is broader:
Examples include one channel per pull request, security incident, deployment, support escalation or Jira/Linear issue. The external system remains authoritative; ClickClack owns the durable collaboration record. The main presentation difference is that this PR creates one project channel with a thread per PR or issue, while #129 proposes one managed channel per work item. Could we treat that as a configurable strategy—current That follow-up could reuse this PR’s project and delivery plumbing while:
I am not suggesting turning this PR into a general connector framework. It would be useful, however, to preserve an extension seam so the core project model and target-routing concept do not become unnecessarily GitHub-specific. GitHub-specific payloads, credentials and delivery tables can remain inside the GitHub connector. One point that may need resolving now: project channels appear to be hard-coded as If this direction fits, I’m happy to reshape #129 into the focused reusable work-item-room follow-up and narrow or retire overlapping parts of #126 rather than maintain a competing architecture. |
|
One concrete extension seam may preserve both this PR’s approach and future connectors. The current durable mapping—
This need not turn #131 into a connector framework. GitHub can remain the only implementation and Two related details seem worth preserving now:
#126 and #128 contain reconciliation, migration and canonical-link tests that may be reusable rather than reimplemented. I’m happy to contribute a focused follow-up once the preferred boundary is clear. |
What Problem This Solves
ClickClack workspaces have channels and integrations, but no durable project boundary that links repositories, collaborators, and GitHub activity. Teams must manually reconstruct project context across GitHub and chat, while pull requests, issues, reviews, comments, and checks do not form shared collaboration threads.
Why This Change Was Made
This adds GitHub-linked project rooms: workspace managers can group one or more repositories and participants into a project, with a public collaboration channel created automatically. Signed GitHub webhooks turn pull requests and issues into channel threads, then route reviews, comments, updates, and checks into replies with delivery deduplication and retry-safe processing.
The project context API is intentionally read-only. This is a communications and context layer, not an agent harness, and it does not write back to GitHub.
User Impact
Evidence
These are unannotated runtime screenshots from the live ClickClack deployment.
Pull request activity grouped into one collaboration thread
Project list with linked repositories and participants
Project creation with multiple repositories and human or bot participants
Live validation used real GitHub webhook deliveries. ClickClack created the rich PR root and added review and CI activity as thread replies. After deploying the issue handler, redelivering issue #2 returned
202 Acceptedwithupdates: 1and created a rich issue root in the project channel. Issue comments and delivery idempotency are covered by the same end-to-end webhook test.Checks run:
go test ./apps/api/internal/store ./apps/api/internal/store/sqlite ./apps/api/internal/store/postgres ./apps/api/internal/httpapigo test ./apps/api/internal/... -coverprofile=coverage.outwith the repository coverage filter (85.1%)pnpm --filter @clickclack/web typecheckpnpm --filter @clickclack/sdk-ts typecheckpnpm --filter @clickclack/web testpnpm lintWebhook failure and redelivery proof
Inspect the redacted runtime evidence for existing-database migration, invalid-signature rejection, explicit failed-delivery recovery, duplicate suppression, and single-thread preservation on the live deployment.
Retry coverage includes SQLite and Postgres lifecycle and upgrade tests, stale-processing lease reclaim in both backends, and an HTTP handler test that injects a failure after claim and successfully processes the same delivery ID on redelivery.