Dev portal 4/4: feature-request intake with admin convert-to-GitHub-issue#234
Open
dmccoystephenson wants to merge 1 commit into
Open
Dev portal 4/4: feature-request intake with admin convert-to-GitHub-issue#234dmccoystephenson wants to merge 1 commit into
dmccoystephenson wants to merge 1 commit into
Conversation
…-issue Adds FeatureRequest — a community-submitted plugin idea scoped to a repo, upvoted via the existing like mechanism (targetType "feature_request", no new voting table) — plus an admin-only conversion into a real GitHub issue via a new write-side GitHubIssueClient. Conversion is idempotent (repeat calls don't create duplicate issues) and gated by a configured username allowlist (dpc.admin.usernames), not a broader roles system, since there's exactly one admin action today. New ideas enter the same backlog everything else lives in — this is intake, not a second, parallel tracker. Also extends ApiKeyAuthFilter's exempt-prefix list for the new bearer-token writes, same as the #233 fix for /api/v1/claims. Fourth and final phase of the dev-portal stack (builds on #233).
4 tasks
dmccoystephenson
added a commit
that referenced
this pull request
Jul 4, 2026
Replaces the single "Sort by" dropdown (which only covered the item list's date/interest ordering) with proper clickable column-header sorting on both tables: - By repository: Repo, Issues, PRs, Oldest open item, Signal (severity — Stale sorts above Active). - Open items: Item, Type, Opened, Interested. First click sorts in whichever direction is usually useful for that column (e.g. Oldest ascending puts the oldest item on top, Interested descending puts the most-wanted on top); a second click on the same column flips it. With no column selected, both tables keep their original order (largest backlog first for repos, oldest-first for items) exactly as before. Stacked on #234, alongside #235 (this supersedes its "Sort by" dropdown).
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.
Summary
Stacked on #233. Fourth and final phase of the dev-portal plan.
FeatureRequest— a community-submitted idea scoped to a repo, not yet a GitHub issue.targetType: 'feature_request', keyed by the request's id) — third reuse of the same primitive, no new voting table.POST /api/v1/feature-requests(auth) to submit,GET /api/v1/feature-requests(public) to browse.POST /api/v1/feature-requests/{id}/convert— admin-only (dpc.admin.usernamesallowlist, empty by default so nobody can convert until it's set), calls a new write-sideGitHubIssueClientto create the real issue. Idempotent: converting an already-converted request just returns it rather than creating a duplicate issue./devgets a "Feature requests" section: a submission form plus a list with upvotes and (for signed-in users — the actual admin check is server-side, so the client never needs to know who's an admin) a "Convert to GitHub issue" button that a non-admin will just get a clear 403 from.Why
This is the "surface feature requests" half of the original ask, and it's designed so an idea's endpoint is always a real GitHub issue — this is intake, not a second, parallel backlog living forever in dpc-api.
Test plan
./mvnw test— 153 tests, 0 failures (1 skip, same asmain)npm run lint— cleannpm test— 103 tests, 0 failuresnpm run build— compiles;/devrenders the feature-request sectionGitHubIssueClient— no live network call was made to actually create an issue anywhere.🤖 Generated with Claude Code