Skip to content

feat(review): give LOOPOVER_REVIEW_PLANNER a per-repo config override#6321

Merged
JSONbored merged 1 commit into
mainfrom
feat/review-planner-config-override
Jul 16, 2026
Merged

feat(review): give LOOPOVER_REVIEW_PLANNER a per-repo config override#6321
JSONbored merged 1 commit into
mainfrom
feat/review-planner-config-override

Conversation

@JSONbored

Copy link
Copy Markdown
Owner

Summary

  • Adds a settings.plannerMode (inherit | off | enabled) per-repo override for the @loopover plan issue command, mirroring duplicateWinnerMode/openPrFileCollisionMode's existing inherit/off/enabled shape exactly (src/settings/duplicate-winner-mode.ts, src/settings/open-pr-file-collision-mode.ts).
  • New src/settings/planner-mode.ts carries resolvePlannerEnabled(globalDefault, mode); the existing isPlannerEnabled (env-var global default) stays in src/review/planner.ts unchanged.
  • Wires the new field through the full config-as-code surface: packages/loopover-engine/src/focus-manifest.ts (FocusManifestSettings + parseSettingsOverride), packages/loopover-engine/src/types/manifest-deps-types.ts and src/types.ts (RepositorySettings.plannerMode), src/openapi/schemas.ts (RepositorySettingsSchema), and both .loopover.yml.example / config/examples/loopover.full.yml (kept in sync, matching the header's "body synced with this file" convention). Regenerated apps/loopover-ui/public/openapi.json via npm run ui:openapi.
  • Rewires maybeProcessPlanCommand (src/queue/processors.ts): the cheap synchronous checks (isPlanCommand, the PR-vs-issue check) still run first with zero added I/O, then the per-repo override is resolved via loadRepoFocusManifest (the same loader other manifest-driven features use), wrapped in the same .catch(() => null) fail-safe convention, before falling through to the existing classifier. Byte-identical when nothing overrides plannerMode and the env var is unset.

Scope

  • The PR title follows type(scope): short summary Conventional Commit format.
  • This PR is focused and does not mix unrelated backend, UI, MCP, docs, dependency, and deploy changes.
  • This follows CONTRIBUTING.md and does not reintroduce GitHub Pages, VitePress, site/, or CNAME.
  • Part of epic: migrate fleet-wide feature-toggle env vars to .loopover.yml config-as-code #6275 (epic tracks migrating the remaining LOOPOVER_* feature-toggle env vars to config-as-code one at a time; this PR migrates LOOPOVER_REVIEW_PLANNER as one sub-item — the epic stays open for the rest).

Validation

  • git diff --check
  • npm run actionlint
  • npm run typecheck
  • npm run test:coverage locally (896 test files / 17k+ tests passed; new/changed lines and branches in src/settings/planner-mode.ts, src/review/planner.ts, and the touched region of src/queue/processors.ts are 100% line + branch covered per the local lcov report)
  • npm run test:workers
  • npm run build:mcp
  • npm run test:mcp-pack
  • npm run ui:openapi:check
  • npm run ui:lint
  • npm run ui:typecheck
  • npm run ui:build
  • npm audit --audit-level=moderate
  • New or changed behavior has unit/integration tests for new branches, fallback paths, and sanitizer boundaries: test/unit/planner-mode.test.ts (resolver, both directions of inherit/off/enabled) plus new end-to-end webhook tests in test/unit/queue-3.test.ts covering a per-repo enabled override turning the command ON with the fleet default off, a per-repo off override turning it OFF with the fleet default on, explicit inherit in both directions, a manifest-load-failure fail-safe (mocked rejection degrading to the fleet default, never throwing), and the no-repository-on-payload edge case (falls back to the fleet-only default without attempting a manifest load).

Also ran the full npm run test:ci gate locally end to end (green) and npm audit --audit-level=moderate (0 vulnerabilities).

Safety

  • No secrets, wallet details, hotkeys, coldkeys, user PATs, private keys, raw trust scores, private rankings, or private maintainer evidence are exposed.
  • Public GitHub text stays sanitized, low-noise, and does not imply compensation guarantees or optimization tactics.
  • Auth, cookie, CORS, GitHub App, Cloudflare, or session changes include negative-path tests. (N/A — no auth/CORS/session surface touched.)
  • API/OpenAPI/MCP behavior is updated and tested where needed.
  • UI changes use live API data or real empty/error/loading states, not production mock/demo fallbacks. (N/A — no UI change.)
  • Visible UI changes include a UI Evidence section. (N/A — this PR has no visible UI change; apps/loopover-ui/public/openapi.json is a regenerated schema artifact, not a UI change.)
  • Public docs/changelogs are updated where needed; changelogs are only edited for release-prep PRs. (.loopover.yml.example / config/examples/loopover.full.yml updated; CHANGELOG.md untouched.)

Notes

  • No DB migration needed — like duplicateWinnerMode/openPrFileCollisionMode, plannerMode is config-as-code only (no DB column).

@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 16, 2026
@loopover-orb

loopover-orb Bot commented Jul 16, 2026

Copy link
Copy Markdown

Warning

⏸️ LoopOver review result - manual review recommended

Review updated: 2026-07-16 06:04:33 UTC

13 files · 1 AI reviewer · 2 blockers · CI green · clean

⏸️ Suggested Action - Manual Review

Review summary
This adds a per-repo `settings.plannerMode` override for the `@​loopover plan` issue command, mirroring the existing `duplicateWinnerMode`/`openPrFileCollisionMode` inherit/off/enabled shape exactly, and wires it through every touchpoint (types, openapi schema+regenerated json, focus-manifest parser, both yml examples, resolver, and processor). The reordered gate in `maybeProcessPlanCommand` (src/queue/processors.ts) keeps the cheap `isPlanCommand`/PR-check short-circuits first and only pays for `loadRepoFocusManifest` after those pass, with the existing `.catch(() => null)` fail-safe convention so a manifest-load blip degrades to the fleet-only default rather than throwing. Tests cover both override directions, explicit `inherit`, the manifest-load failure fail-safe, and the no-`repository`-on-payload edge case, so the wiring is well exercised end-to-end.

Nits — 4 non-blocking
  • src/queue/processors.ts:maybeProcessPlanCommand — the manifest load (and thus a KV/DB read) now happens for every `@​loopover plan` issue comment before the maintainer-permission check inside `classifyPlanCommandRequest`, not just for maintainers; worth a comment noting this trade-off is accepted since it's fail-safe and cheap.
  • test/unit/queue-3.test.ts — the new test block is fairly long and duplicates a lot of webhook/fetch-stub boilerplate across five cases; consider factoring a shared helper for the common `access_tokens`/`permission`/`issues/.../comments` stub set.
  • Consider adding a one-line note in the `.loopover.yml.example`/`loopover.full.yml` comment block cross-referencing that `plannerMode` has no DB-backed equivalent (as already stated in `src/types.ts`), for parity with how `openPrFileCollisionMode`'s doc comment states the same.
  • Readiness score is below the configured threshold — Use the readiness panel as advisory maintainer context; the score does not block this PR.

Concerns raised — review before merging

  • No linked issue detected — If this PR is intended to solve an issue, link it explicitly in the PR body.
  • Maintainer requires a linked issue — Link the relevant issue (for example Closes #123) before opening the PR.
📋 Copy for AI agents — paste into your coding agent
Fix the following blocker(s) from this PR review:

1. No linked issue detected — If this PR is intended to solve an issue, link it explicitly in the PR body.

2. Maintainer requires a linked issue — Link the relevant issue (for example `Closes #123`) before opening the PR.

Decision drivers

  • ❌ Code review — 2 blockers (1 reviewer)
  • ❌ Gate result — Blocking (Repo-configured hard blocker found.)
Context & advisory signals — never blocks the verdict
Signal Result Evidence
Linked issue ⚠️ Missing No linked issue or no-issue rationale found.
Related work ⚠️ 2 scoped overlaps Top overlaps are listed below; lower-confidence bulk is hidden.
Change scope ❌ 8/20 High review scope from cached public metadata (no linked issue context).
Validation posture ✅ 25/25 PR body includes validation/test evidence.
Contributor workload ✅ 10/10 Author activity: 42 registered-repo PR(s), 34 merged, 374 issue(s).
Contributor context ✅ Confirmed Gittensor contributor JSONbored; Gittensor profile; 42 PR(s), 374 issue(s).
Improvement ✅ Minor risk: clean · value: minor
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: 42 PR(s), 374 issue(s).
  • Related work: Titles/paths share 10 meaningful terms. (PR #6373, PR #6372)
  • Related work: Titles/paths share 8 meaningful terms. (PR #6380, PR #6381)
Contributor next steps
  • Start here: Treat this as maintainer-lane context rather than normal contributor-lane activity.
  • Then work through the remaining 6 steps in the Signals table above.
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.
🧪 Chat with LoopOver

Ask LoopOver a question about this PR directly in a comment — grounded only in the same cached, public-safe facts shown above, never a new claim.

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

Full command reference: https://loopover.ai/docs/loopover-commands

🧪 Experimental — new and may change.

Visual preview
Route Viewport Before (production) After (this PR's preview) Diff
/ desktop before /
before /
after /
after /
/ mobile before / (mobile)
before / (mobile)
after / (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 LoopOver, a quiet PR intelligence layer for OSS maintainers.

  • Re-run LoopOver review

@codecov

codecov Bot commented Jul 16, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 95.60%. Comparing base (d280ce4) to head (73eb87d).
⚠️ Report is 25 commits behind head on main.
✅ All tests successful. No failed tests found.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #6321      +/-   ##
==========================================
- Coverage   95.60%   95.60%   -0.01%     
==========================================
  Files         599      600       +1     
  Lines       47221    47245      +24     
  Branches    15024    15035      +11     
==========================================
+ Hits        45147    45167      +20     
- Misses       1290     1291       +1     
- Partials      784      787       +3     
Flag Coverage Δ
shard-1 44.05% <12.50%> (-0.02%) ⬇️
shard-2 36.59% <12.50%> (-0.02%) ⬇️
shard-3 32.52% <50.00%> (-0.01%) ⬇️
shard-4 34.61% <12.50%> (+<0.01%) ⬆️
shard-5 31.58% <12.50%> (-0.02%) ⬇️
shard-6 44.90% <100.00%> (+0.02%) ⬆️

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

Files with missing lines Coverage Δ
packages/loopover-engine/src/focus-manifest.ts 98.86% <100.00%> (+<0.01%) ⬆️
src/openapi/schemas.ts 100.00% <ø> (ø)
src/queue/processors.ts 95.69% <100.00%> (+<0.01%) ⬆️
src/review/planner.ts 100.00% <ø> (ø)
src/settings/planner-mode.ts 100.00% <100.00%> (ø)
src/types.ts 100.00% <ø> (ø)

Adds settings.plannerMode (inherit | off | enabled) to .loopover.yml,
mirroring duplicateWinnerMode/openPrFileCollisionMode's shape, so a
repo can turn the @Loopover plan issue command on or off independent
of the fleet-wide LOOPOVER_REVIEW_PLANNER default. Wires the new
resolveDuplicateWinnerEnabled-style resolver (settings/planner-mode.ts)
into maybeProcessPlanCommand, reordering the cheap synchronous checks
ahead of the manifest load so an unrelated or PR-thread comment never
pays for it, and keeps the manifest-load-failure path fail-safe to the
fleet default. Tested end to end through the webhook path, including
the inherit branch, the manifest-load-failure fallback, and the
no-repository edge case.
@codecov

codecov Bot commented Jul 16, 2026

Copy link
Copy Markdown

Bundle Report

Changes will increase total bundle size by 81.43kB (1.11%) ⬆️. This is within the configured threshold ✅

Detailed changes
Bundle name Size Change
loopover-ui 7.43MB 81.43kB (1.11%) ⬆️

Affected Assets, Files, and Routes:

view changes for bundle: loopover-ui

Assets Changed:

Asset Name Size Change Total Size Change (%)
assets/add-scalar-classes-B3Z_VkOO.js (New) 2.17MB 2.17MB 100.0% 🚀
assets/tanstack-vendor-BmGbUge4.js (New) 690.1kB 690.1kB 100.0% 🚀
openapi.json 176 bytes 495.81kB 0.04%
assets/docs.fumadocs-spike-api-reference-DDNMSxsy.js (New) 442.94kB 442.94kB 100.0% 🚀
assets/AgentScalarChatInterface.vue-Dr9ybF-F.js (New) 201.71kB 201.71kB 100.0% 🚀
assets/modal-BaAvo90F.js (New) 184.28kB 184.28kB 100.0% 🚀
assets/client-ZjRyv94h.js (New) 146.06kB 146.06kB 100.0% 🚀
assets/maintainer-panel-Bxlz8aoP.js (New) 75.51kB 75.51kB 100.0% 🚀
assets/ui-vendor-COtIz00g.js (New) 65.93kB 65.93kB 100.0% 🚀
assets/app.analytics-CMWu0c8N.js (New) 36.27kB 36.27kB 100.0% 🚀
assets/routes-HasOH3Nl.js (New) 34.04kB 34.04kB 100.0% 🚀
assets/app.runs-DTnDE4Ld.js (New) 27.11kB 27.11kB 100.0% 🚀
assets/ams-deployment-DzyaaJHU.js (New) 26.98kB 26.98kB 100.0% 🚀
assets/owner-panel-BU7Ioo3G.js (New) 26.41kB 26.41kB 100.0% 🚀
assets/app-Dsi-6-hG.js (New) 25.84kB 25.84kB 100.0% 🚀
assets/app.operator-B9nvJCYA.js (New) 24.6kB 24.6kB 100.0% 🚀
assets/ams-config-precedence-CN3qMnc2.js (New) 24.27kB 24.27kB 100.0% 🚀
assets/ams-observability-CDwCXPfC.js (New) 20.11kB 20.11kB 100.0% 🚀
assets/miner-panel-BUShBxjm.js (New) 19.23kB 19.23kB 100.0% 🚀
assets/docs-source-DthfgGC2.js (New) 18.87kB 18.87kB 100.0% 🚀
assets/api._op-DmFxHxru.js (New) 17.89kB 17.89kB 100.0% 🚀
assets/self-hosting-docs-audit-DqgH2xCN.js (New) 16.73kB 16.73kB 100.0% 🚀
assets/app.index-CqWJVhEQ.js (New) 16.19kB 16.19kB 100.0% 🚀
assets/playground-panel-CxFKh2vW.js (New) 14.43kB 14.43kB 100.0% 🚀
assets/ams-sizing-CbkiQ8O6.js (New) 14.24kB 14.24kB 100.0% 🚀
assets/ams-unattended-scheduling-BEpKSvz5.js (New) 11.64kB 11.64kB 100.0% 🚀
assets/app.audit-Czn2f1Hc.js (New) 9.36kB 9.36kB 100.0% 🚀
assets/extension-DANDMZYT.js (New) 9.22kB 9.22kB 100.0% 🚀
assets/app.config-generator-C5A4bmwT.js (New) 9.19kB 9.19kB 100.0% 🚀
assets/maintainers-DEJHUeA3.js (New) 8.06kB 8.06kB 100.0% 🚀
assets/miners-CjXl2qgf.js (New) 7.89kB 7.89kB 100.0% 🚀
assets/agents-BddyjWHn.js (New) 7.76kB 7.76kB 100.0% 🚀
assets/commands-panel-C5VDOlIN.js (New) 6.65kB 6.65kB 100.0% 🚀
assets/roadmap-B9jVWJQG.js (New) 6.33kB 6.33kB 100.0% 🚀
assets/digest-panel-CkQzR0ZN.js (New) 6.04kB 6.04kB 100.0% 🚀
assets/docs.index-BLKSapfw.js (New) 5.11kB 5.11kB 100.0% 🚀
assets/repos._owner._repo.quality-Ce2uINkS.js (New) 4.88kB 4.88kB 100.0% 🚀
assets/api.index-nSePCJRr.js (New) 4.78kB 4.78kB 100.0% 🚀
assets/changelog-WdnMt0Fj.js (New) 4.67kB 4.67kB 100.0% 🚀
assets/control-primitives-BpvFhfB-.js (New) 3.75kB 3.75kB 100.0% 🚀
assets/api-TiJJftRb.js (New) 2.73kB 2.73kB 100.0% 🚀
assets/docs-DCugjtUw.js (New) 2.67kB 2.67kB 100.0% 🚀
assets/alert-dialog-Cb4ZezH-.js (New) 2.07kB 2.07kB 100.0% 🚀
assets/button-pgeie0nk.js (New) 1.74kB 1.74kB 100.0% 🚀
assets/app.workbench-CQn0ATba.js (New) 1.63kB 1.63kB 100.0% 🚀
assets/tooltip-635QCeAx.js (New) 1.45kB 1.45kB 100.0% 🚀
assets/session-Cf3wFSwf.js (New) 1.44kB 1.44kB 100.0% 🚀
assets/tabs-DcPzcr8g.js (New) 1.39kB 1.39kB 100.0% 🚀
assets/trend-chart-ZsxjjxRc.js (New) 1.22kB 1.22kB 100.0% 🚀
assets/app.repos-CMZqmIWo.js (New) 1.07kB 1.07kB 100.0% 🚀
assets/switch-BpfATfN5.js (New) 982 bytes 982 bytes 100.0% 🚀
assets/analytics-card-shell-Cwev0BJp.js (New) 973 bytes 973 bytes 100.0% 🚀
assets/use-api-resource-D0Am2r4N.js (New) 934 bytes 934 bytes 100.0% 🚀
assets/refresh-meta-BhRXg_AJ.js (New) 797 bytes 797 bytes 100.0% 🚀
assets/input-DorUmLIa.js (New) 796 bytes 796 bytes 100.0% 🚀
assets/file-cog-zvfZh6iW.js (New) 758 bytes 758 bytes 100.0% 🚀
assets/docs.ai-summaries-546Kud05.js (New) 568 bytes 568 bytes 100.0% 🚀
assets/docs.scoreability-9vCtFXQT.js (New) 562 bytes 562 bytes 100.0% 🚀
assets/docs.upstream-drift-S6H9AhAR.js (New) 562 bytes 562 bytes 100.0% 🚀
assets/docs.branch-analysis-CeiVjz8F.js (New) 561 bytes 561 bytes 100.0% 🚀
assets/docs.self-hosting-ai-providers-QZOJUp9m.js (New) 561 bytes 561 bytes 100.0% 🚀
assets/docs.self-hosting-backup-scaling-BsM4W2Y7.js (New) 561 bytes 561 bytes 100.0% 🚀
assets/docs.self-hosting-configuration-CK6gLN1k.js (New) 561 bytes 561 bytes 100.0% 🚀
assets/docs.self-hosting-docs-audit-B9X3gGvq.js (New) 561 bytes 561 bytes 100.0% 🚀
assets/docs.self-hosting-github-app-BlO7PWEU.js (New) 561 bytes 561 bytes 100.0% 🚀
assets/docs.self-hosting-quickstart-sPq5neVr.js (New) 561 bytes 561 bytes 100.0% 🚀
assets/docs.self-hosting-rag-B-v7DLCu.js (New) 561 bytes 561 bytes 100.0% 🚀
assets/docs.self-hosting-rees-WulmBJ99.js (New) 561 bytes 561 bytes 100.0% 🚀
assets/docs.self-hosting-rees-analyzers-BZxozSOz.js (New) 561 bytes 561 bytes 100.0% 🚀
assets/docs.self-hosting-release-checklist-BSpGqGnJ.js (New) 561 bytes 561 bytes 100.0% 🚀
assets/docs.self-hosting-releases-CKYTk9-c.js (New) 561 bytes 561 bytes 100.0% 🚀
assets/docs.self-hosting-security-3hR-kV7V.js (New) 561 bytes 561 bytes 100.0% 🚀
assets/docs.self-hosting-troubleshooting-BGaT3Abr.js (New) 561 bytes 561 bytes 100.0% 🚀
assets/docs.self-hosting-unified-ams-orb-BQmXdtkD.js (New) 561 bytes 561 bytes 100.0% 🚀
assets/docs.maintainer-install-trust-B7Spy-Pu.js (New) 560 bytes 560 bytes 100.0% 🚀
assets/docs.ams-config-precedence-B5TyQ_xY.js (New) 559 bytes 559 bytes 100.0% 🚀
assets/docs.ams-deployment-ujV0vw0N.js (New) 559 bytes 559 bytes 100.0% 🚀
assets/docs.ams-observability--hh7fZWo.js (New) 559 bytes 559 bytes 100.0% 🚀
assets/docs.ams-operations-runbook-DQGLCNRa.js (New) 559 bytes 559 bytes 100.0% 🚀
assets/docs.ams-sizing-DRVBf6Be.js (New) 559 bytes 559 bytes 100.0% 🚀
assets/docs.ams-unattended-scheduling-DhpeYXrY.js (New) 559 bytes 559 bytes 100.0% 🚀
assets/docs.beta-onboarding-DA4o0CYq.js (New) 559 bytes 559 bytes 100.0% 🚀
assets/docs.maintainer-self-hosting-CC6mpRxy.js (New) 559 bytes 559 bytes 100.0% 🚀
assets/docs.mcp-clients-Bp7L3mVc.js (New) 559 bytes 559 bytes 100.0% 🚀
assets/docs.owner-checklist-DRVLhiRI.js (New) 559 bytes 559 bytes 100.0% 🚀
assets/docs.quickstart-D6c42ero.js (New) 559 bytes 559 bytes 100.0% 🚀
assets/docs.troubleshooting-CV3siEAK.js (New) 558 bytes 558 bytes 100.0% 🚀
assets/docs.tuning-BOgminJv.js (New) 558 bytes 558 bytes 100.0% 🚀
assets/docs.github-app-37qebkP9.js (New) 557 bytes 557 bytes 100.0% 🚀
assets/docs.maintainer-workflow-DX4Fv8Jr.js (New) 557 bytes 557 bytes 100.0% 🚀
assets/docs.privacy-security-DMrjRhZv.js (New) 557 bytes 557 bytes 100.0% 🚀
assets/docs.loopover-commands-BHmvKo3a.js (New) 556 bytes 556 bytes 100.0% 🚀
assets/docs.how-reviews-work-CQyKNJ1M.js (New) 555 bytes 555 bytes 100.0% 🚀
assets/app.maintainer-Czte07id.js (New) 502 bytes 502 bytes 100.0% 🚀
assets/sparkles-Bi4rHuem.js (New) 494 bytes 494 bytes 100.0% 🚀
assets/app.owner-Cx-iq4lf.js (New) 474 bytes 474 bytes 100.0% 🚀
assets/app.commands-BL5ttTXJ.js (New) 455 bytes 455 bytes 100.0% 🚀
assets/app.playground-CeIVHCln.js (New) 442 bytes 442 bytes 100.0% 🚀
assets/reveal-Cy3vKrZ4.js (New) 442 bytes 442 bytes 100.0% 🚀
assets/index-Dug0vRE2.js (New) 438 bytes 438 bytes 100.0% 🚀
assets/app.digest-myEKdyJo.js (New) 430 bytes 430 bytes 100.0% 🚀
assets/eye-off-BBX4DtHt.js (New) 430 bytes 430 bytes 100.0% 🚀
assets/app.miner-DGsIp202.js (New) 422 bytes 422 bytes 100.0% 🚀
assets/key-round-CdI6bhWP.js (New) 355 bytes 355 bytes 100.0% 🚀
assets/bot-BrzGPRT8.js (New) 328 bytes 328 bytes 100.0% 🚀
assets/trash-2-CWqd-QOG.js (New) 328 bytes 328 bytes 100.0% 🚀
assets/save-DN5SEdyp.js (New) 327 bytes 327 bytes 100.0% 🚀
assets/git-pull-request-arrow-DE72jLEC.js (New) 321 bytes 321 bytes 100.0% 🚀
assets/shield-check-DuA0mab6.js (New) 320 bytes 320 bytes 100.0% 🚀
assets/wrench-D4EPTISl.js (New) 303 bytes 303 bytes 100.0% 🚀
assets/bell-DJiJCDYo.js (New) 290 bytes 290 bytes 100.0% 🚀
assets/list-checks-DniJ3UZ6.js (New) 279 bytes 279 bytes 100.0% 🚀
assets/shield-VdB6bqVL.js (New) 272 bytes 272 bytes 100.0% 🚀
assets/workflow-B1NhAsiy.js (New) 265 bytes 265 bytes 100.0% 🚀
assets/chart-column-Qu7FfCwt.js (New) 251 bytes 251 bytes 100.0% 🚀
assets/compass-DhTG8MU6.js (New) 251 bytes 251 bytes 100.0% 🚀
assets/skeleton-BpDbhs3C.js (New) 241 bytes 241 bytes 100.0% 🚀
assets/history-CpHWQLpF.js (New) 237 bytes 237 bytes 100.0% 🚀
assets/activity-KgnUwdxd.js (New) 234 bytes 234 bytes 100.0% 🚀
assets/message-square-DuJS4oXL.js (New) 233 bytes 233 bytes 100.0% 🚀
assets/download-BCU5t5C7.js (New) 232 bytes 232 bytes 100.0% 🚀
assets/chevron-right-rExXyjgw.js (New) 207 bytes 207 bytes 100.0% 🚀
assets/lock-6KPMudOg.js (New) 206 bytes 206 bytes 100.0% 🚀
assets/rotate-cw-D-IuMhS7.js (New) 201 bytes 201 bytes 100.0% 🚀
assets/play-4Yhfvmhi.js (New) 190 bytes 190 bytes 100.0% 🚀
assets/circle-check-DmiRTe1c.js (New) 178 bytes 178 bytes 100.0% 🚀
assets/search-XXGmMCyp.js (New) 174 bytes 174 bytes 100.0% 🚀
assets/ams-unattended-scheduling-CHwddcfh.js (New) 148 bytes 148 bytes 100.0% 🚀
assets/ams-config-precedence-D2AjQi0m.js (New) 144 bytes 144 bytes 100.0% 🚀
assets/self-hosting-docs-audit--JtkORIq.js (New) 141 bytes 141 bytes 100.0% 🚀
assets/ams-observability-DAYxG1nB.js (New) 140 bytes 140 bytes 100.0% 🚀
assets/ams-deployment-sVFPyker.js (New) 137 bytes 137 bytes 100.0% 🚀
assets/ams-sizing-jP-xtZMB.js (New) 133 bytes 133 bytes 100.0% 🚀
assets/circle-DYk5Kub8.js (New) 130 bytes 130 bytes 100.0% 🚀
assets/modal-WFWWgK9Z.js (New) 115 bytes 115 bytes 100.0% 🚀
assets/add-scalar-classes-B9PkYX02.js (Deleted) -2.17MB 0 bytes -100.0% 🗑️
assets/tanstack-vendor-CPNbOxmE.js (Deleted) -683.26kB 0 bytes -100.0% 🗑️
assets/docs.fumadocs-spike-api-reference-BE7gNH9_.js (Deleted) -442.94kB 0 bytes -100.0% 🗑️
assets/AgentScalarChatInterface.vue-CwmhGBEI.js (Deleted) -201.71kB 0 bytes -100.0% 🗑️
assets/modal-3NVoE0nu.js (Deleted) -184.28kB 0 bytes -100.0% 🗑️
assets/client-BoNa3wHi.js (Deleted) -146.06kB 0 bytes -100.0% 🗑️
assets/maintainer-panel-CLxat_tQ.js (Deleted) -75.51kB 0 bytes -100.0% 🗑️
assets/ui-vendor-DYHEiQ_E.js (Deleted) -65.93kB 0 bytes -100.0% 🗑️
assets/app.analytics-zWkIumjd.js (Deleted) -36.27kB 0 bytes -100.0% 🗑️
assets/routes-CdAS5UQv.js (Deleted) -34.04kB 0 bytes -100.0% 🗑️
assets/ams-deployment-BqVqP-CJ.js (Deleted) -27.27kB 0 bytes -100.0% 🗑️
assets/app.runs-BNV9pJy1.js (Deleted) -27.11kB 0 bytes -100.0% 🗑️
assets/owner-panel-CHlccRCf.js (Deleted) -26.41kB 0 bytes -100.0% 🗑️
assets/app-BeWEeS-h.js (Deleted) -25.84kB 0 bytes -100.0% 🗑️
assets/app.operator-EpuOnbpY.js (Deleted) -24.6kB 0 bytes -100.0% 🗑️
assets/miner-panel-mNr_SLUT.js (Deleted) -19.23kB 0 bytes -100.0% 🗑️
assets/docs-source-BaU5FXNu.js (Deleted) -18.53kB 0 bytes -100.0% 🗑️
assets/api._op-ohH0Y9Zi.js (Deleted) -17.89kB 0 bytes -100.0% 🗑️
assets/self-hosting-docs-audit-BnX43Z6h.js (Deleted) -16.73kB 0 bytes -100.0% 🗑️
assets/app.index-CKF9powL.js (Deleted) -16.19kB 0 bytes -100.0% 🗑️
assets/playground-panel-DC8ol4aK.js (Deleted) -14.43kB 0 bytes -100.0% 🗑️
assets/app.audit-CkCgA3Ev.js (Deleted) -9.36kB 0 bytes -100.0% 🗑️
assets/extension-3iZy7guC.js (Deleted) -9.22kB 0 bytes -100.0% 🗑️
assets/app.config-generator-D9FqlI-p.js (Deleted) -8.13kB 0 bytes -100.0% 🗑️
assets/maintainers-Cx2GznrM.js (Deleted) -8.06kB 0 bytes -100.0% 🗑️
assets/miners-f7pGmdnu.js (Deleted) -7.89kB 0 bytes -100.0% 🗑️
assets/agents-0bxXjBuP.js (Deleted) -7.76kB 0 bytes -100.0% 🗑️
assets/commands-panel-BeoYlSs7.js (Deleted) -6.65kB 0 bytes -100.0% 🗑️
assets/roadmap-d_2svX_l.js (Deleted) -6.33kB 0 bytes -100.0% 🗑️
assets/digest-panel-BVWm4wbX.js (Deleted) -6.04kB 0 bytes -100.0% 🗑️
assets/repos._owner._repo.quality-CkhbStRM.js (Deleted) -4.88kB 0 bytes -100.0% 🗑️
assets/docs.index-CBeNsYHF.js (Deleted) -4.87kB 0 bytes -100.0% 🗑️
assets/api.index-BqaFV6E7.js (Deleted) -4.78kB 0 bytes -100.0% 🗑️
assets/changelog-hp2pen52.js (Deleted) -4.67kB 0 bytes -100.0% 🗑️
assets/control-primitives-Pv-tGYHb.js (Deleted) -3.75kB 0 bytes -100.0% 🗑️
assets/api-CtLJ3SuW.js (Deleted) -2.74kB 0 bytes -100.0% 🗑️
assets/docs-DhQuSaVN.js (Deleted) -2.67kB 0 bytes -100.0% 🗑️
assets/alert-dialog-CetZttdL.js (Deleted) -2.07kB 0 bytes -100.0% 🗑️
assets/button-DAcS7JqK.js (Deleted) -1.74kB 0 bytes -100.0% 🗑️
assets/app.workbench-BMkK3723.js (Deleted) -1.63kB 0 bytes -100.0% 🗑️
assets/tooltip-Bi0CECHv.js (Deleted) -1.45kB 0 bytes -100.0% 🗑️
assets/session-DGslo9wu.js (Deleted) -1.44kB 0 bytes -100.0% 🗑️
assets/tabs-2IKK-doX.js (Deleted) -1.39kB 0 bytes -100.0% 🗑️
assets/trend-chart-C3_jJWZG.js (Deleted) -1.22kB 0 bytes -100.0% 🗑️
assets/app.repos-COS5TtBI.js (Deleted) -1.07kB 0 bytes -100.0% 🗑️
assets/switch-BFW5jbgB.js (Deleted) -982 bytes 0 bytes -100.0% 🗑️
assets/analytics-card-shell-DhTz9fIv.js (Deleted) -973 bytes 0 bytes -100.0% 🗑️
assets/use-api-resource-Ehs7BS0s.js (Deleted) -934 bytes 0 bytes -100.0% 🗑️
assets/refresh-meta-BraWPg6I.js (Deleted) -797 bytes 0 bytes -100.0% 🗑️
assets/input-YCYDOZxN.js (Deleted) -796 bytes 0 bytes -100.0% 🗑️
assets/file-cog-FqelZbKB.js (Deleted) -758 bytes 0 bytes -100.0% 🗑️
assets/docs.ai-summaries-BZGYm0B2.js (Deleted) -568 bytes 0 bytes -100.0% 🗑️
assets/docs.upstream-drift-BAYZ8-GO.js (Deleted) -562 bytes 0 bytes -100.0% 🗑️
assets/docs.branch-analysis-DRp-tnCu.js (Deleted) -561 bytes 0 bytes -100.0% 🗑️
assets/docs.scoreability-Jsml5Gus.js (Deleted) -561 bytes 0 bytes -100.0% 🗑️
assets/docs.self-hosting-docs-audit-YT5caX_m.js (Deleted) -561 bytes 0 bytes -100.0% 🗑️
assets/docs.self-hosting-github-app-DEV7jnif.js (Deleted) -561 bytes 0 bytes -100.0% 🗑️
assets/docs.self-hosting-quickstart-Bd6yEWIx.js (Deleted) -561 bytes 0 bytes -100.0% 🗑️
assets/docs.self-hosting-rag-D4ectnQP.js (Deleted) -561 bytes 0 bytes -100.0% 🗑️
assets/docs.self-hosting-rees-BFgbI3yf.js (Deleted) -561 bytes 0 bytes -100.0% 🗑️
assets/docs.self-hosting-rees-analyzers-CP_u8hyq.js (Deleted) -561 bytes 0 bytes -100.0% 🗑️
assets/docs.self-hosting-release-checklist-D-SC11r0.js (Deleted) -561 bytes 0 bytes -100.0% 🗑️
assets/docs.self-hosting-releases-BMshHVPe.js (Deleted) -561 bytes 0 bytes -100.0% 🗑️
assets/docs.self-hosting-security-CgmOfW2k.js (Deleted) -561 bytes 0 bytes -100.0% 🗑️
assets/docs.self-hosting-troubleshooting-DSaBu_0b.js (Deleted) -561 bytes 0 bytes -100.0% 🗑️
assets/docs.self-hosting-unified-ams-orb-C8xP_0A7.js (Deleted) -561 bytes 0 bytes -100.0% 🗑️
assets/docs.maintainer-install-trust-DGKSjy0U.js (Deleted) -560 bytes 0 bytes -100.0% 🗑️
assets/docs.self-hosting-ai-providers-Hjortnl0.js (Deleted) -560 bytes 0 bytes -100.0% 🗑️
assets/docs.self-hosting-backup-scaling-CbYe--zj.js (Deleted) -560 bytes 0 bytes -100.0% 🗑️
assets/docs.self-hosting-configuration-BL-LL98O.js (Deleted) -560 bytes 0 bytes -100.0% 🗑️
assets/docs.ams-deployment-CuXqb83P.js (Deleted) -559 bytes 0 bytes -100.0% 🗑️
assets/docs.ams-operations-runbook-i5NCmR5K.js (Deleted) -559 bytes 0 bytes -100.0% 🗑️
assets/docs.beta-onboarding-C-H3us7b.js (Deleted) -559 bytes 0 bytes -100.0% 🗑️
assets/docs.maintainer-self-hosting-Bc6Oh0uR.js (Deleted) -559 bytes 0 bytes -100.0% 🗑️
assets/docs.mcp-clients-Cl0mGnYn.js (Deleted) -559 bytes 0 bytes -100.0% 🗑️
assets/docs.owner-checklist-vVeKqM0L.js (Deleted) -559 bytes 0 bytes -100.0% 🗑️
assets/docs.quickstart-Dt337H3y.js (Deleted) -559 bytes 0 bytes -100.0% 🗑️
assets/docs.troubleshooting-gai49DR9.js (Deleted) -558 bytes 0 bytes -100.0% 🗑️
assets/docs.tuning-BdyRlKKl.js (Deleted) -558 bytes 0 bytes -100.0% 🗑️
assets/docs.github-app-zJxNAHqI.js (Deleted) -557 bytes 0 bytes -100.0% 🗑️
assets/docs.maintainer-workflow-CK1Qv9YJ.js (Deleted) -557 bytes 0 bytes -100.0% 🗑️
assets/docs.privacy-security-DMv77_l5.js (Deleted) -557 bytes 0 bytes -100.0% 🗑️
assets/docs.loopover-commands-BKhiTBAV.js (Deleted) -556 bytes 0 bytes -100.0% 🗑️
assets/docs.how-reviews-work-Ds8ISEtx.js (Deleted) -555 bytes 0 bytes -100.0% 🗑️
assets/app.maintainer-CzHLjCi7.js (Deleted) -502 bytes 0 bytes -100.0% 🗑️
assets/sparkles-v2AGvd9Y.js (Deleted) -494 bytes 0 bytes -100.0% 🗑️
assets/app.owner-o6t7UXws.js (Deleted) -474 bytes 0 bytes -100.0% 🗑️
assets/app.commands-BH_fIgSS.js (Deleted) -455 bytes 0 bytes -100.0% 🗑️
assets/app.playground-Civ-4igL.js (Deleted) -442 bytes 0 bytes -100.0% 🗑️
assets/reveal-7hS0lVLI.js (Deleted) -442 bytes 0 bytes -100.0% 🗑️
assets/index-FbTXZQ0Q.js (Deleted) -438 bytes 0 bytes -100.0% 🗑️
assets/app.digest-Cw3W0mh_.js (Deleted) -430 bytes 0 bytes -100.0% 🗑️
assets/eye-off-C77ziDyU.js (Deleted) -430 bytes 0 bytes -100.0% 🗑️
assets/app.miner-BUWW5vQ5.js (Deleted) -422 bytes 0 bytes -100.0% 🗑️
assets/key-round-DXbSC9gz.js (Deleted) -355 bytes 0 bytes -100.0% 🗑️
assets/bot-D4pDAiOw.js (Deleted) -328 bytes 0 bytes -100.0% 🗑️
assets/trash-2-9mp_46B9.js (Deleted) -328 bytes 0 bytes -100.0% 🗑️
assets/save-DGZe7x23.js (Deleted) -327 bytes 0 bytes -100.0% 🗑️
assets/git-pull-request-arrow-CDgwFNq5.js (Deleted) -321 bytes 0 bytes -100.0% 🗑️
assets/shield-check-g0kPPCA2.js (Deleted) -320 bytes 0 bytes -100.0% 🗑️
assets/wrench-CjBsqA4T.js (Deleted) -303 bytes 0 bytes -100.0% 🗑️
assets/bell-acvwDCoB.js (Deleted) -290 bytes 0 bytes -100.0% 🗑️
assets/list-checks-CDb0Lb9F.js (Deleted) -279 bytes 0 bytes -100.0% 🗑️
assets/shield-QECGQM61.js (Deleted) -272 bytes 0 bytes -100.0% 🗑️
assets/workflow-DzzKbPHs.js (Deleted) -265 bytes 0 bytes -100.0% 🗑️
assets/chart-column-BmvpEIx8.js (Deleted) -251 bytes 0 bytes -100.0% 🗑️
assets/compass-CQEYvKZ_.js (Deleted) -251 bytes 0 bytes -100.0% 🗑️
assets/skeleton-DjMTwFCN.js (Deleted) -241 bytes 0 bytes -100.0% 🗑️
assets/history-FNsh5Klf.js (Deleted) -237 bytes 0 bytes -100.0% 🗑️
assets/activity-MsiAmGo4.js (Deleted) -234 bytes 0 bytes -100.0% 🗑️
assets/message-square-DHbX4Qoy.js (Deleted) -233 bytes 0 bytes -100.0% 🗑️
assets/download-CyzbpIzO.js (Deleted) -232 bytes 0 bytes -100.0% 🗑️
assets/chevron-right-DVIvrjtA.js (Deleted) -207 bytes 0 bytes -100.0% 🗑️
assets/lock-cueYUMBY.js (Deleted) -206 bytes 0 bytes -100.0% 🗑️
assets/rotate-cw-DjmiDqBb.js (Deleted) -201 bytes 0 bytes -100.0% 🗑️
assets/play-TeICZRGw.js (Deleted) -190 bytes 0 bytes -100.0% 🗑️
assets/circle-check-ofniUWaj.js (Deleted) -178 bytes 0 bytes -100.0% 🗑️
assets/search-BMC_cWWh.js (Deleted) -174 bytes 0 bytes -100.0% 🗑️
assets/self-hosting-docs-audit-CgmAD2hC.js (Deleted) -141 bytes 0 bytes -100.0% 🗑️
assets/ams-deployment-zbQVV0rk.js (Deleted) -137 bytes 0 bytes -100.0% 🗑️
assets/circle-23qrmq7W.js (Deleted) -130 bytes 0 bytes -100.0% 🗑️
assets/modal-CzS3cg1i.js (Deleted) -115 bytes 0 bytes -100.0% 🗑️

nghetienhiep pushed a commit to nghetienhiep/gittensory that referenced this pull request Jul 16, 2026
Each of the 6 backend test shards (validate-tests matrix in ci.yml) uploads
its own lcov.info to Codecov directly (flags: shard-N) -- additive by
design, but with no after_n_builds setting Codecov re-evaluates and
re-posts codecov/patch after EVERY individual upload instead of waiting
for all six. That produced a wildly wrong intermediate verdict (patch
coverage as low as ~20%) after only 1-2 shards had landed on PR JSONbored#6321,
before self-correcting once the rest arrived -- require_ci_to_pass only
checks the upstream GH Actions run's own conclusion, not upload
completeness.

Sets codecov.notify.after_n_builds: 6 so Codecov withholds any status
until all six coverage uploads for a commit are in. Validated the
resulting config against Codecov's public validator (codecov.io/validate).
@JSONbored JSONbored merged commit b429292 into main Jul 16, 2026
19 checks passed
@JSONbored JSONbored deleted the feat/review-planner-config-override branch July 16, 2026 06:08
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. manual-review Gittensor contributor context

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant