Repository navigation
feat: bounty lifecycle for plugin requests - #29
Merged
Merged
Conversation
…nties Requests now go through pending -> approved/rejected -> fulfilled and carry bounty board metadata. Claims stay non-exclusive and can record the repository scaffolded for them with @tabularis/create-plugin. A request ships when the plugin with its slug is approved and has an ingested manifest, instead of being deleted at submit. Every transition emits a request.* webhook, and a deploy-hook preset rebuilds static sites that bake the data in. Also adds GET /auth/return so an already signed-in user is sent back to a trusted origin, the optional GitHub workflow scope, and a one-off importer for the tabularis.dev bounty list. Refs #28
…affolding /admin/requests reviews pending requests and edits their bounty details. /requests shows review, in-progress and shipped states, claimers with their repositories, the viewer's votes, and a Start building dialog that creates the scaffolded repository. /login follows a trusted absolute return_to when already signed in, and /submit preselects ?repo=. Refs #28
|
The latest updates on your projects. Learn more about Vercel for GitHub. 2 Skipped Deployments
|
get_request, toggle_upvote, toggle_request_claim and scaffold_request run as the delegated user (votedByMe/claimedByMe, workflow-scope answer), and admin_update_request reviews pending requests as the admin, audited. Refs #28
Contributor
Author
|
Added MCP coverage ( |
German, Spanish, French and Simplified Chinese for the request lifecycle, admin review and Start building dialog. Refs #28
This branch was previously deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #28. Website counterpart: TabularisDB/website#34.
What changes
Plugin requests become the backend of the tabularis.dev Bounty Board.
pendingapproved/admin/requests, with bounty metadatarejectedfulfilledA claim never closes a request: an approved request with claims shows as in progress until the plugin is in the catalog. Claims stay non-exclusive.
API
plugin_requestsgetsstatus, review fields,fulfilled_plugin_id/fulfilled_at,bounty(JSON) andupdated_at.plugin_request_claimsgetsrepo_url/scaffolded_at.approved.GET /api/requests:statusfilter. The default isapproved,fulfilled;pendingandrejectedare returned only to admins and to the requester.bounty,claimers(with GitHub avatar and repo),votedByMeandfulfilledPlugin.GET /api/requests/:idOrSlugis new.PATCH /api/admin/requests/:id(adminUpdateRequest) approves, rejects, reopens or fulfills a request and edits its bounty metadata.approvedrequests. Releasing a claim always works.fulfillRequestForPluginruns:POST /api/requests/:id/scaffold(scaffoldRequest):@tabularis/create-plugin@0.4.1CLIs (driver or theme) in a temp dir, withname = request slug.workflowscope to push CI files. When it's missing, the endpoint returns 403 with areauthUrl. That URL calls/auth/:instance?scope=workflow, which adds the scope only on demand.request.approved,request.rejected,request.claimed,request.unclaimed,request.scaffolded,request.fulfilled. There is also a Static site rebuild preset (deploy hook).GET /auth/return?to=sends an already signed-in user back to anALLOWED_ORIGINSURL.safeReturnTomoved tolib/return-to.ts.bun run import:bounties [file-or-url] [--map a=b] [--dry-run]imports the 31 curated bounties from the website. It is idempotent per slug: shipped entries are linked to their plugin, and entries built into the app stay unlinked.*.mdprune.Frontend
/admin/requests: a review queue with Pending, Approved, Shipped and Rejected tabs, plus an editor for the bounty details. A badge on the nav shows how many requests are pending./requests:npm create @tabularis/plugin@latest <slug>)./login: if you're already signed in, it now follows a trusted absolutereturn_to(through/auth/return) instead of sending you to/./submit?repo=<url>preselects the repository.Deploy notes
bun run import:bountiesagainst production once. Check it first with--dry-run.request.approved,request.rejected,request.claimed,request.unclaimedandrequest.fulfilled, pointing at the tabularis.dev Vercel deploy hook.packages/tabularium-rs/openapi.jsonis left for the next SDK release refresh, as usual.Testing
bun test(api): 630 pass. New suites:request-lifecycle.test.tsandrequest-scaffold.test.ts(with GitHub mocked; the real CLI runs). The/auth/returntest is insafe-return-to.test.ts.bun run check(frontend): 0 errors, 0 warnings.bun test tests(frontend): 35 pass.workflowre-authorization.