feat(control-panel): add authenticated maintainer settings update - #426
feat(control-panel): add authenticated maintainer settings update#426enjoyandlove wants to merge 14 commits into
Conversation
Signed-off-by: Chan <101856681+enjoyandlove@users.noreply.github.com>
|
Note Gittensory Gate skippedPR closed before full evaluation. No late first comment was created.
Checked by Gittensory, a quiet PR intelligence layer for OSS maintainers. |
Signed-off-by: Chan <101856681+enjoyandlove@users.noreply.github.com>
…, and queue-level low branch
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: Chan <101856681+enjoyandlove@users.noreply.github.com>
JSONbored
left a comment
There was a problem hiding this comment.
Requesting changes. CI is green, but the new settings update route only forwards part of the parsed settings schema, which would reset existing gate/policy settings to defaults. No merge action taken.
JSONbored
left a comment
There was a problem hiding this comment.
One additional line-level issue from the updated hardening pass. The existing requested-changes review still applies; no merge action taken.
…in settings update route
JSONbored
left a comment
There was a problem hiding this comment.
@enjoyandlove the main route behavior is improved now.
A few notes:
- The settings update now forwards the parsed policy/gate fields and rejects malformed JSON instead of writing defaults.
- The remaining blockers are branch hygiene and issue integrity.
apps/gittensory-ui/public/downloads/gittensory-extension.zipis unrelated to this backend API endpoint and should not be committed here.- #130 is the broader maintainer control-panel issue; this endpoint is one slice of it, not a full close.
Required changes:
- Remove the committed extension zip from the branch.
- Retitle the PR to
feat(control-panel): add maintainer settings update endpoint. - Change the closing reference so this does not claim to fully close #130 unless the actual control-panel surface is complete.
Validation expected:
- Rerun the maintainer settings integration tests, OpenAPI check, and the standard backend validation.
JSONbored
left a comment
There was a problem hiding this comment.
@enjoyandlove the authenticated settings endpoint is the right product direction, but this branch still mixes in unrelated artifacts.
A few notes:
- The route/auth/audit/OpenAPI work is close to the issue surface.
- The committed apps/gittensory-ui/public/downloads/gittensory-extension.zip does not belong in a maintainer settings endpoint PR.
- The extension queue-level tests are also unrelated to the settings update endpoint and make the branch harder to review safely.
Required changes:
- Remove apps/gittensory-ui/public/downloads/gittensory-extension.zip from the PR.
- Remove unrelated extension queue-level test changes unless they are split into their own issue-specific PR.
- Keep this branch scoped to the settings update endpoint, auth/repo access, audit behavior, OpenAPI, and matching tests.
- Rebase after the current API/OpenAPI queue is settled and refresh generated artifacts.
Validation expected:
- focused maintainer settings route/integration tests
- ui:openapi:check
- full validate
The mcp-release-watch workflow failed with 410 when trying to open a tracking issue in a repo that has Issues turned off. Now the script checks has_issues via the repo API before attempting to create or update any issue, and emits a warning instead of exiting non-zero. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
P2: Unreviewable binary zip added to public downloads in a claimed backend-only PR Binary zip added that reviewers cannot inspect in diffs. Verify binary contents reproducibly or remove from backend-only PR. AI prompt |
The recordAuditEvent call in the settings update route was silently swallowed via .catch(() => undefined), allowing the mutation to succeed with no audit trail if the DB write failed. Removed the suppression to match every other audit call site. Added a test that confirms a failing audit write surfaces as a 500 rather than a silent success. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
@enjoyandlove the authenticated settings endpoint is the right product direction, but this branch should be restarted from a clean endpoint-only branch. A few notes:
A replacement PR should:
|
Summary
POST /v1/app/repos/:owner/:repo/settings— an authenticated maintainer-facing endpoint for updating repository automation settings (public surface mode, label name, check mode, linked issue policy, maintainer-author inclusion, etc.).maintainer,owner, oroperatorrole; session users are additionally scoped to repos they have evidence for (requireSessionRepoAccess).settings.updatedaudit event on every successful change (actor, target repo, key fields changed).RepositorySettingstype — no private scoring context, wallet, hotkey, or compensation language.Scope
CONTRIBUTING.mdand does not reintroduce GitHub Pages, VitePress,site/, orCNAME.Closes #130.
Validation
git diff --checknpm run actionlintnpm run typechecknpm run test:coveragelocally; global coverage stays at or above 97% for lines, statements, functions, and branches (aim for 98%+ branch coverage locally so CI variance does not fail near the threshold)npm run test:workersnpm run build:mcpnpm run test:mcp-packnpm run ui:openapi:checknpm run ui:lintnpm run ui:typechecknpm run ui:buildnpm audit --audit-level=moderateIf any required check was skipped, explain why:
test:workers,build:mcp,test:mcp-pack,ui:lint,ui:typecheck,ui:build,npm audit— not run locally; no MCP, worker, or UI code was changed.Safety
UI and docs checkboxes are not applicable — this is a backend-only change.
Notes
/v1/app/so browser sessions can reach it (the general auth middleware only allows sessions on/v1/app/*paths)./v1/app/*operator routes.insufficient_role, out-of-scope repo →forbidden_repo, unauthenticated → 401, invalid body → 400, private-language boundary, owner-installation session.