fix(ui): disclose the inert firstTimeContributorGrace dashboard toggle#5321
Conversation
firstTimeContributorGrace is explicitly RESERVED/inert (#2266) -- the gate evaluator never reads it. #2411 already fixed the config-as-code half of this exact problem: a parse-time warning plus a rewritten .gittensory.yml.example correctly disclose inertness. But #2411 never touched the dashboard/API surface -- the live maintainer-dashboard toggle still read "Soften a newcomer's block to advisory" with zero disclosure, the one surface a non-technical maintainer is most likely to actually use. Applies the same disclose-don't-remove treatment #2411 gave the yml surface: the toggle now renders greyed-out and non-interactive with a "Reserved -- currently has no effect (#2266)" hint (new `disabled` prop on ToggleControl/ToggleFieldDef), and the same disclosure is added as a .describe() on all 3 API/openapi occurrences. Kept the field itself in the schema (not removed) to match the #2411 precedent and avoid an API-breaking change for a field that is genuinely harmless to still accept. Regenerated openapi.json. Refs #5292
|
Superagent didn't find any vulnerabilities or security issues in this PR. |
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
gittensory-ui | a492d61 | Commit Preview URL Branch Preview URL |
Jul 12 2026, 01:55 PM |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #5321 +/- ##
=======================================
Coverage 94.37% 94.37%
=======================================
Files 474 474
Lines 40128 40128
Branches 14631 14631
=======================================
Hits 37871 37871
Misses 1582 1582
Partials 675 675
Flags with carried forward coverage won't be shown. Click here to find out more.
🚀 New features to boost your workflow:
|
|
Tip 🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩 ✅ Gittensory review result - approve/merge recommendedReview updated: 2026-07-12 14:11:51 UTC
✅ Suggested Action - Approve/Merge
Review summary Nits — 7 non-blocking
Linked issue satisfactionAddressed Review context
Contributor next steps
Signal definitions
[BETA] Chat with GittensoryAsk Gittensory a question about this PR directly in a comment — grounded only in the same cached, public-safe facts shown above, never a new claim.
Full command reference: https://gittensory.aethereal.dev/docs/gittensory-commands Visual preview
Click any thumbnail to open the full-size screenshot. Before = production · After = this PR's preview deploy. 🟩 Safe / merged · 🟦 Advisory · 🟨 Held for review · 🟥 Blocked / closed 💰 Earn for open-source contributions like this. Gittensor lets GitHub contributors earn for the work they already do — register to start earning →. Checked by Gittensory, a quiet PR intelligence layer for OSS maintainers.
|
…-to-end (#6714) Confirmed via #6446's two decisions: (1) the 7 gate:-only fields (gatePack, slopGateMode/slopGateMinScore/slopAiAdvisory, mergeReadinessGateMode, manifestPolicyGateMode, linkedIssueSatisfactionGateMode, requireFreshRebaseWindowMinutes, aiReviewLowConfidenceDisposition) are already correctly wired through applyGateConfigOverrides and already have DB columns + dashboard UI, so no new settings.* twins are added -- gate: stays canonical, matching #6444's decision. (2) firstTimeContributorGrace has been RESERVED/INERT since #2411 deliberately stopped evaluateGateCheckCore from reading it (blocker findings must remain closure/rejection outcomes, not softened for a newcomer) -- rather than wiring it in against that settled design, this deletes the dead surface entirely: the DB column (migration 0161), the manifest gate.firstTimeContributorGrace parsing in both the app and engine copies of focus-manifest.ts, the predicted-gate engine mirror, the dashboard's disabled disclosure toggle (#5321), and every doc/example mention. Closes #6446, closes epic #6440 (all four config-as-code batches now shipped).
Summary
`firstTimeContributorGrace` is explicitly RESERVED/inert (#2266) — the gate evaluator never reads it. #2411 already fixed the config-as-code half of this exact problem (a parse-time warning + a rewritten `.gittensory.yml.example` correctly disclose inertness). But #2411 never touched the dashboard/API surface — the live maintainer-dashboard toggle still read "Soften a newcomer's block to advisory" with zero disclosure, the one surface a non-technical maintainer is most likely to actually use.
Approach
Applied the same disclose-don't-remove treatment #2411 gave the yml surface, rather than removing the field from the schema (which would be a real API-breaking change for a field that's genuinely harmless to still accept):
Scope
`maintainer-settings.tsx`, `src/api/routes.ts`, `src/openapi/schemas.ts`, regenerated `openapi.json`.
Validation
Not in this PR
The heavier alternative (wire it into `evaluateGateCheckCore` as originally intended in #552) is a real behavior change and out of scope for this disclosure-only fix.
Closes #5292