Skip to content

fix(ui): disclose the inert firstTimeContributorGrace dashboard toggle#5321

Merged
loopover-orb[bot] merged 1 commit into
mainfrom
docs/retire-first-time-contributor-grace-dashboard
Jul 12, 2026
Merged

fix(ui): disclose the inert firstTimeContributorGrace dashboard toggle#5321
loopover-orb[bot] merged 1 commit into
mainfrom
docs/retire-first-time-contributor-grace-dashboard

Conversation

@JSONbored

Copy link
Copy Markdown
Owner

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

  • `npm run typecheck` — clean
  • `npm run ui:typecheck` / `npm run ui:lint` — clean (0 errors)
  • `npm run ui:openapi:check` / `npm run ui:openapi:settings-parity` — clean
  • `npm run docs:drift-check` — clean

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

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-security

Copy link
Copy Markdown
Contributor

Superagent didn't find any vulnerabilities or security issues in this PR.

@cloudflare-workers-and-pages

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

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

codecov Bot commented Jul 12, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 94.37%. Comparing base (dc6fa7a) to head (a492d61).
⚠️ Report is 10 commits behind head on main.
✅ All tests successful. No failed tests found.

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           
Flag Coverage Δ
shard-1 46.28% <ø> (-0.28%) ⬇️
shard-2 34.74% <ø> (+0.06%) ⬆️
shard-3 32.17% <ø> (+0.07%) ⬆️
shard-4 32.09% <ø> (-0.15%) ⬇️
shard-5 33.38% <ø> (-0.11%) ⬇️
shard-6 45.14% <ø> (+0.30%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
src/api/routes.ts 94.30% <ø> (ø)
src/openapi/schemas.ts 100.00% <ø> (ø)
🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@loopover-orb loopover-orb Bot added the gittensor:bug Gittensor-scored bug fix — scores a 0.05x multiplier. label Jul 12, 2026
@loopover-orb

loopover-orb Bot commented Jul 12, 2026

Copy link
Copy Markdown

Tip

🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩🟩

✅ Gittensory review result - approve/merge recommended

Review updated: 2026-07-12 14:11:51 UTC

4 files · 2 AI reviewers · no blockers · readiness 100/100 · CI green · clean

✅ Suggested Action - Approve/Merge

  • safe to merge

Review summary
This PR disclosure-fixes the confirmed-inert `firstTimeContributorGrace` dashboard toggle by rendering it disabled with a hint pointing to #2266, and adds matching `.describe()` annotations to the three zod schema occurrences plus the regenerated openapi.json. The change is narrow, well-targeted, matches its stated intent, and directly closes #5292; the diff is internally consistent (new `disabled` prop threaded through `ToggleFieldDef` → `FieldGroup` → `ToggleControl`, opacity + `disabled` attribute applied together) with no logic errors visible.

Nits — 7 non-blocking
  • No test coverage was added for the new `disabled` rendering path in `ToggleControl` (maintainer-settings.tsx:688-707) — a snapshot/RTL test asserting the checkbox is disabled and styled when `disabled: true` would guard against regression.
  • maintainer-settings.tsx:700 hardcodes `opacity-60` inline; consider a shared `disabled:opacity-60` Tailwind variant or a named constant if this pattern recurs elsewhere in the file.
  • The `.describe()` text is duplicated verbatim across three schema files (routes.ts, schemas.ts x2) — consider a shared constant string to avoid drift if the reserved-field wording changes later.
  • Add a lightweight RTL test for `ToggleControl`/`FieldGroup` verifying the disabled toggle renders non-interactive and shows the hint text, since this is the actual user-facing fix being claimed.
  • Factor the repeated 'Reserved (fix(review): gate.firstTimeContributorGrace is documented as softening blockers but is dead/inert #2266) -- the gate evaluator never reads this field...' string into a shared constant imported by both api/routes.ts and openapi/schemas.ts.
  • PR author also opened the linked issue — Link an issue that was opened by a different contributor, or provide a rationale for why this self-authored issue represents genuine discovery work.
  • Code changes lack test evidence — Add focused regression tests or explain why existing coverage is sufficient.
Signal Result Evidence
Code review ✅ No blockers 2 reviewers, synthesized
Linked issue ✅ Linked #5292
Related work ✅ No active overlap found No same-issue or scoped active PR overlap found.
Change scope ✅ 20/20 Low review scope from cached public metadata (1 linked issue).
Validation posture ✅ 25/25 PR body includes validation/test evidence.
Contributor workload ✅ 10/10 Author activity: 44 registered-repo PR(s), 36 merged, 476 issue(s).
Contributor context ✅ Confirmed Gittensor contributor JSONbored; Gittensor profile; 44 PR(s), 476 issue(s).
Gate result ✅ Passing No configured blocker found.
Improvement ⚠️ ℹ️ None detected risk: low · value: none — No structural-improvement signals were detected for this PR. LLM value judgment: minor — The change is a well-scoped, low-risk disclosure-only fix (adding a disabled state and describe() strings) that closes a real inconsistency between the yml and dashboard surfaces, but it's cosmetic/documentation-only rather than a functional improvement to the gate engine itself.
Linked issue satisfaction

Addressed
The PR directly implements the issue's minimal deliverable by disabling/greying out the dashboard toggle with a 'Reserved — currently has no effect (#2266)' hint and adding matching .describe() disclosures to all three schema sites (routes.ts, openapi/schemas.ts x2), explicitly citing #2411 as the template as requested. It deliberately opts for disable+disclose over field removal (a reasonable, ju

Review context
  • Author: JSONbored
  • Role context: owner (maintainer lane)
  • Public audience mode: oss maintainer
  • Lane context: Repository is configured for direct PR review.
  • Public profile languages: not available
  • Official Gittensor activity: 44 PR(s), 476 issue(s).
  • PR-specific overlap: none found.
Contributor next steps
  • Treat this as maintainer-lane context rather than normal contributor-lane activity.
Signal definitions
  • Related work = same linked issue, overlapping active PRs, or title/path similarity.
  • Change scope = cached public metadata such as size labels, draft state, and review-burden hints.
  • Validation posture = whether the PR provides enough public validation/test evidence for maintainer review.
  • Contributor workload = public contributor activity and cleanup pressure, not a repo-wide quality failure.
  • Contributor context = public GitHub/Gittensor identity context; non-Gittensor status is not a blocker.
[BETA] Chat with Gittensory

Ask 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.

  • @gittensory ask &lt;question&gt; answers contribution-quality Q&A with source citations and freshness.
  • @gittensory chat &lt;question&gt; answers in natural prose from cached decision-pack facts via local inference (maintainer/collaborator; read-only).
  • A plain-language @gittensory mention with a real question is routed to the closest matching read-only command automatically -- no exact syntax required.

Full command reference: https://gittensory.aethereal.dev/docs/gittensory-commands

Visual preview
Route Viewport Before (production) After (this PR's preview) Diff
/ desktop before / after /
/ mobile before / (mobile) after / (mobile)

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.

  • Re-run Gittensory review

@loopover-orb loopover-orb Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Gittensory approves — the gate is satisfied and CI is green.

@loopover-orb
loopover-orb Bot merged commit 5f62463 into main Jul 12, 2026
20 checks passed
@loopover-orb
loopover-orb Bot deleted the docs/retire-first-time-contributor-grace-dashboard branch July 12, 2026 14:11
loopover-orb Bot pushed a commit that referenced this pull request Jul 16, 2026
…-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).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

gittensor:bug Gittensor-scored bug fix — scores a 0.05x multiplier.

Development

Successfully merging this pull request may close these issues.

Retire or correctly disclose the inert firstTimeContributorGrace dashboard toggle

1 participant