Skip to content

feat(ui): check-run details-page readiness table (#2216) - #4716

Merged
loopover-orb[bot] merged 2 commits into
JSONbored:mainfrom
andriypolanski:feat/ui-check-run-readiness-table-2216
Jul 10, 2026
Merged

feat(ui): check-run details-page readiness table (#2216)#4716
loopover-orb[bot] merged 2 commits into
JSONbored:mainfrom
andriypolanski:feat/ui-check-run-readiness-table-2216

Conversation

@andriypolanski

@andriypolanski andriypolanski commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

Summary

Adds a public-safe Context check readiness table to the maintainer details surface (the page linked from the GitHub App Context check details_url). The table consumes buildPublicReadinessScore output redacted to bands via buildExtensionPrStatus, and renders only when checkRunDetailLevel is standard or deep.

Also normalizes the legacy details link (/app?view=maintainer&repo=…) to /app/maintainer?repo=….

Closes #2216

Changes

Area Change
src/signals/settings-preview.ts buildSampleCheckRunReadiness + checkRunReadiness on settings-preview payload
src/openapi/schemas.ts checkRunReadiness schema on RepoSettingsPreview
apps/gittensory-ui/public/openapi.json Regenerated (npm run ui:openapi)
apps/gittensory-ui/src/components/site/check-run-readiness-model.ts Detail-level gate + public-safe row types
apps/gittensory-ui/src/components/site/check-run-readiness-table.tsx Scannable readiness table component
apps/gittensory-ui/src/components/site/app-panels/maintainer-panel.tsx Renders table in public-surface preview; optional initialRepoFullName
apps/gittensory-ui/src/routes/app.maintainer.tsx ?repo= search param for details deep-link
apps/gittensory-ui/src/routes/app.index.tsx Redirect legacy ?view=maintainer&repo=/app/maintainer
Tests check-run-readiness-table.test.tsx, settings-preview.test.ts (#2216 regressions)

UI Evidence

Required before opening the PR — upload screenshots via GitHub drag-and-drop (do not commit images):

Page / Feature Before After
/app/maintainer (settings preview, checkRunDetailLevel: standard) image image
/app/maintainer (checkRunDetailLevel: minimal) image image
Legacy /app?view=maintainer&repo=owner/repo image image

Test plan

  • shouldShowCheckRunReadinessTable — minimal hides, standard/deep shows
  • resolveCheckRunReadinessView — empty component set returns null (gate-off + gate-on fixtures)
  • CheckRunReadinessTable vitest — render/hide branches
  • buildSampleCheckRunReadiness + settings-preview schema parse
  • npm run ui:test (readiness table vitest)
  • npm run ui:typecheck
  • npm run test:ci (backend patch coverage on settings-preview.ts)
  • Manual: enable Context check at standard, run settings preview, confirm table bands (no raw scores)

Notes

  • Distinct from the collision-cluster table slice (separate issue under feat(github-app): check-run details-page tables (visual) #576).
  • Issue carries visual + gittensor:feature labels — expect owner hold on merge until activated.
  • Public-safe invariant: bands/labels only; raw readiness totals and forbidden terms never reach the UI payload.

@andriypolanski
andriypolanski marked this pull request as draft July 10, 2026 18:15
@superagent-security

Copy link
Copy Markdown
Contributor

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

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

loopover-orb Bot commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

Tip

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

✅ Gittensory review result - approve/merge recommended

Review updated: 2026-07-10 19:11:07 UTC

10 files · 1 AI reviewer · no blockers · readiness 100/100 · CI green · clean

✅ Suggested Action - Approve/Merge

  • safe to merge

Review summary
This PR adds a public-safe readiness table to the Context-check details page, sourced from buildPublicReadinessScore -> buildExtensionPrStatus (the same rubric used by the PR-panel surface), gated so it only renders at checkRunDetailLevel standard/deep and only when the component list is non-empty. It also fixes the legacy /app?view=maintainer&repo= deep link to redirect to /app/maintainer?repo=. The gating logic is duplicated defensively (once server-side in buildSampleCheckRunReadiness, once client-side in resolveCheckRunReadinessView) but both are reachable, real paths backed by non-fabricated tests, and the OpenAPI/zod schemas were updated together with a new required-but-nullable checkRunReadiness field. No correctness blockers are visible in the diff, and the PR closes the linked issue #2216 as required.

Nits — 5 non-blocking
  • apps/gittensory-ui/src/components/site/app-panels/maintainer-panel.tsx: `detailLevel={preview.checkRun.detailLevel as "minimal" | "standard" | "deep"}` casts a plain string (per the SettingsPreviewResponse type) without a runtime guard — if the API ever returns an unexpected value this silently mis-renders instead of failing loudly; prefer a small type-guard/lookup over the bare `as`.
  • src/signals/settings-preview.ts: `buildSampleCheckRunReadiness`'s `sample` param carries `minerStatus` but the function body never reads it when constructing `samplePr` — confirm it's intentional (vs. a copy-paste leftover from a sibling builder) or drop it from the signature.
  • CI shows `validate-code` and `validate` as FAILED on this commit — not a diff defect per se, but worth a comment from the contributor confirming these aren't masking a real typecheck/lint break before merge.
  • src/openapi/schemas.ts / public/openapi.json: `checkRunReadiness` was added as a required (nullable) field on RepoSettingsPreview — worth a one-line confirmation that no external consumer of this preview endpoint treats the response shape as fixed.
  • Add a small runtime guard (Set membership or zod parse) at the detailLevel cast site in maintainer-panel.tsx rather than the bare `as` cast.
Signal Result Evidence
Code review ✅ No blockers 1 reviewer
Linked issue ✅ Linked #2216
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: 141 registered-repo PR(s), 90 merged, 25 issue(s).
Contributor context ✅ Confirmed Gittensor contributor andriypolanski; Gittensor profile; 141 PR(s), 25 issue(s).
Gate result ✅ Passing No configured blocker found.
Review context
  • Author: andriypolanski
  • Role context: outside_contributor
  • Public audience mode: oss maintainer
  • Lane context: Repository is configured for direct PR review.
  • Public profile languages: Python, TypeScript, JavaScript, Rust, Cuda, Kotlin, MDX, Scala
  • Official Gittensor activity: 141 PR(s), 25 issue(s).
  • PR-specific overlap: none found.
Contributor next steps
  • Keep the PR focused and include validation evidence before maintainer review.
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.
Visual preview
Route Viewport Before (production) After (this PR's preview) Diff
/app desktop before /app after /app
/app mobile before /app (mobile) after /app (mobile)
/app/maintainer desktop before /app/maintainer after /app/maintainer
/app/maintainer mobile before /app/maintainer (mobile) after /app/maintainer (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 added gittensor:feature Gittensor-scored feature linked to a feature issue — scores a 0.25x multiplier. and removed gittensor:bug Gittensor-scored bug fix — scores a 0.05x multiplier. labels Jul 10, 2026
@codecov

codecov Bot commented Jul 10, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 94.14%. Comparing base (af90fa9) to head (6cc2dff).
⚠️ Report is 1 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main    #4716   +/-   ##
=======================================
  Coverage   94.14%   94.14%           
=======================================
  Files         437      437           
  Lines       38551    38561   +10     
  Branches    14055    14058    +3     
=======================================
+ Hits        36294    36304   +10     
  Misses       1599     1599           
  Partials      658      658           
Files with missing lines Coverage Δ
src/openapi/schemas.ts 100.00% <ø> (ø)
src/signals/settings-preview.ts 98.63% <100.00%> (+0.09%) ⬆️
🚀 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 left a comment

Copy link
Copy Markdown
Contributor

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 96c158f into JSONbored:main Jul 10, 2026
10 checks passed
@loopover-orb loopover-orb Bot added gittensor:bug Gittensor-scored bug fix — scores a 0.05x multiplier. and removed gittensor:feature Gittensor-scored feature linked to a feature issue — scores a 0.25x multiplier. labels Jul 10, 2026
JSONbored added a commit that referenced this pull request Jul 11, 2026
… a propagated label (#4816)

* fix(review): never let an inconclusive linked-issue recheck downgrade a propagated label

A merge-time (or later sweep/webhook) recheck of a PR's linked-issue label
propagation could not distinguish "the recheck genuinely couldn't be
verified this pass" (a transient GitHub fetch/rate-limit failure) from "the
issue confirms no propagation applies" -- both fell through to the blunt
title heuristic and silently overwrote whatever correct label a prior pass
had already applied. Confirmed live: 118 PRs mislabeled across gittensory
and metagraphed in a 2-day sample, including contributor-reported PRs #4716
and #4783.

- linked-issue-label-propagation-fetch.ts: fetchLinkedIssueLabelsForPropagation
  now returns {labels, inconclusive} instead of a bare label list;
  isRepoMaintainerLogin distinguishes a confirmed permission result from an
  errored (inconclusive) one, and logs the error instead of swallowing it.
- processors.ts: the type-label block skips the mutation entirely (leaving
  existing labels untouched) when the recheck was inconclusive rather than
  confirmed-negative, and now claims the existing per-PR actuation lock so
  two concurrent passes for the same PR can no longer race each other here.
- client.ts: excludes the two trust-deciding endpoints (linked-issue reads,
  collaborator-permission checks) from cross-caller request coalescing, so
  one caller's transient failure can no longer become a different
  concurrent caller's answer.
- public.ts / rag-index.ts / grounding-wire.ts: three GitHub callers were
  computing their rate-limit admission key before a token fallback was
  applied (or never attributing one at all for a high-volume caller),
  which is what buried the live incident in an unattributed metric bucket.

Full regression coverage added, including an end-to-end reproduction of
the exact PR #4716/#4783 race in queue.test.ts.

* fix(review): follow the reviewCheckMode migration in the new type-label tests

Rebased onto main's gateCheckMode-deprecation migration (#4618); the two new
regression tests added alongside it still need reviewCheckMode set directly,
matching every sibling test in the same describe block.
@JSONbored JSONbored added gittensor:feature Gittensor-scored feature linked to a feature issue — scores a 0.25x multiplier. and removed gittensor:bug Gittensor-scored bug fix — scores a 0.05x multiplier. labels Jul 11, 2026
@andriypolanski
andriypolanski deleted the feat/ui-check-run-readiness-table-2216 branch July 16, 2026 15:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

gittensor:feature Gittensor-scored feature linked to a feature issue — scores a 0.25x multiplier.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(ui): check-run details-page readiness table (visual)

2 participants