Skip to content

refactor(settings): drop Batch A's 9 config-as-code-only DB columns - #6557

Merged
JSONbored merged 3 commits into
mainfrom
refactor/batch-a-phase2-drop-db-columns
Jul 16, 2026
Merged

refactor(settings): drop Batch A's 9 config-as-code-only DB columns#6557
JSONbored merged 3 commits into
mainfrom
refactor/batch-a-phase2-drop-db-columns

Conversation

@JSONbored

Copy link
Copy Markdown
Owner

Summary

Batch A Phase 2 (#6442, epic #6440): drops the 9 fields confirmed safe to migrate off repository_settings entirely -- commentMode, publicAudienceMode, publicSignalLevel, checkRunMode, checkRunDetailLevel, regateSweepOrderMode, publicSurface, includeMaintainerAuthors, backfillEnabled (migration 0158).

resolveEffectiveSettings needed zero changes: its existing {...dbSettings, ...manifestSettings} spread already overlays manifest over DB unconditionally. Once dbSettings itself just returns the same built-in default for these fields (no real column to read), the merge collapses to "manifest override, else built-in default" -- genuine config-as-code, no dual-source ambiguity.

Deliberately excluded, stay DB-only forever: badgeEnabled/publicQualityMetrics. loadPublicRepoBadge/loadPublicRepoQualityMetrics (src/api/routes.ts) read them via a direct getRepositorySettings call that bypasses the manifest overlay entirely -- a documented perf tradeoff for two unauthenticated, high-frequency public routes (no manifest-cache lookup, no possible cold-cache GitHub fetch, on every image/API load).

Changes

  • Drops the 9 columns from src/db/schema.ts + a real migration; removes their read/write/default-fill logic from src/db/repositories.ts and the now-dead parseX helpers.
  • Removes the 9 fields from repositorySettingsSchema/maintainerSettingsSchema and the internal/maintainer settings write paths (a caller-supplied value is now a silent no-op, since there's nothing left to persist it to).
  • Switches GET /v1/repos/:owner/:repo/settings to resolveRepositorySettings (was the raw DB row, which would otherwise always show the hardcoded default regardless of a repo's real .loopover.yml).
  • Overlays the true effective value for just these 9 fields onto the registration-readiness / gittensor-config-recommendation "DB vs yml" advisory builders, preserving their fix(config): route all repository-settings reads through the resolver, not the raw DB accessor #2912 comparison intent for every other still-DB-backed field.
  • Drops checkRunMode from the one-click "enable advisory mode" activation patch (writing it is now a no-op), with a comment explaining why.
  • Updates the maintainer dashboard UI (removes 7 dead form fields/editable keys) and every affected test (converted to manifest-based fixture setup where the field's own behavior was under test; swapped to a still-real marker field where it was only probing unrelated DB-identity mechanics).

Scope

  • Stayed within wantedPaths
  • No secrets/wallets/hotkeys/trust scores/reward values
  • Regenerated apps/loopover-ui/public/openapi.json
  • New migration 0158_drop_batch_a_config_as_code_columns.sql, next contiguous number

Validation

  • npm run test:ci (full local gate, green)
  • npm run typecheck (backend + UI, clean)
  • npm run ui:test (292/292 passed)
  • npm audit --audit-level=moderate (0 vulnerabilities)
  • Patch coverage verified CLEAN on every changed line/branch in src/api/routes.ts, src/db/repositories.ts, src/db/schema.ts, src/services/maintainer-activation.ts (cross-referenced coverage/lcov.info against the diff)

Removes commentMode, publicAudienceMode, publicSignalLevel, checkRunMode,
checkRunDetailLevel, regateSweepOrderMode, publicSurface,
includeMaintainerAuthors, and backfillEnabled from repository_settings
entirely (migration 0158) -- resolveEffectiveSettings's existing
manifest-over-DB spread needed zero changes, since dbSettings itself now
just returns the same built-in default for these fields unconditionally,
collapsing the merge to "manifest override, else built-in default": pure
config-as-code, no dual-source ambiguity.

badgeEnabled/publicQualityMetrics are deliberately excluded and stay
DB-only forever: loadPublicRepoBadge/loadPublicRepoQualityMetrics
(src/api/routes.ts) read them via a direct getRepositorySettings call that
bypasses the manifest overlay entirely, a documented perf tradeoff for two
unauthenticated, high-frequency public routes.

Also:
- Removes the 9 fields from repositorySettingsSchema/maintainerSettingsSchema
  and the internal/maintainer settings write paths (silent no-op on input).
- Switches GET /v1/repos/:owner/:repo/settings to resolveRepositorySettings
  (was the raw DB row, which would otherwise always show the hardcoded
  default regardless of a repo's real .loopover.yml).
- Overlays the true effective value for just these 9 fields onto the
  registration-readiness / gittensor-config-recommendation "DB vs yml"
  advisory builders, preserving their #2912 comparison intent for every
  other still-DB-backed field.
- Drops checkRunMode from the one-click "enable advisory mode" activation
  patch (writing it is now a no-op) with a comment on why.
- Updates the maintainer dashboard UI (removes 7 dead form fields/editable
  keys) and the affected tests.

Part of #6440, part of #6442
@codecov

codecov Bot commented Jul 16, 2026

Copy link
Copy Markdown

Bundle Report

Changes will decrease total bundle size by 4.15kB (-0.06%) ⬇️. This is within the configured threshold ✅

Detailed changes
Bundle name Size Change
loopover-ui 7.5MB -4.15kB (-0.06%) ⬇️

Affected Assets, Files, and Routes:

view changes for bundle: loopover-ui

Assets Changed:

Asset Name Size Change Total Size Change (%)
assets/add-scalar-classes-UBvC4D_l.js (New) 2.17MB 2.17MB 100.0% 🚀
assets/tanstack-vendor-BPB1GJsS.js (New) 697.74kB 697.74kB 100.0% 🚀
openapi.json -2.02kB 496.31kB -0.41%
assets/docs.fumadocs-spike-api-reference-Cw_BsJ7D.js (New) 442.94kB 442.94kB 100.0% 🚀
assets/AgentScalarChatInterface.vue-BlfkBsqq.js (New) 201.71kB 201.71kB 100.0% 🚀
assets/modal-BC-v2lnf.js (New) 184.28kB 184.28kB 100.0% 🚀
assets/client-BnIWgoyr.js (New) 146.06kB 146.06kB 100.0% 🚀
assets/maintainer-panel-Cjf5Y2iG.js (New) 77.57kB 77.57kB 100.0% 🚀
assets/ui-vendor-CtNTe0JX.js (New) 65.93kB 65.93kB 100.0% 🚀
assets/app.analytics-DlbehESd.js (New) 34.92kB 34.92kB 100.0% 🚀
assets/routes-CzSz1FWD.js (New) 34.04kB 34.04kB 100.0% 🚀
assets/app.runs-C6HMWhWX.js (New) 27.14kB 27.14kB 100.0% 🚀
assets/owner-panel-DPhyogis.js (New) 26.92kB 26.92kB 100.0% 🚀
assets/app.operator-1YnlwkYe.js (New) 26.03kB 26.03kB 100.0% 🚀
assets/app-BgkTkFsd.js (New) 25.84kB 25.84kB 100.0% 🚀
assets/miner-panel-BujTBg9s.js (New) 20.49kB 20.49kB 100.0% 🚀
assets/docs-source-C_E-9Eku.js (New) 19.2kB 19.2kB 100.0% 🚀
assets/api._op-CIYRtZ7V.js (New) 17.89kB 17.89kB 100.0% 🚀
assets/self-hosting-docs-audit-DlDZHbTh.js (New) 16.73kB 16.73kB 100.0% 🚀
assets/app.index-DceLgg_L.js (New) 16.19kB 16.19kB 100.0% 🚀
assets/playground-panel-0Fq6dAnX.js (New) 14.43kB 14.43kB 100.0% 🚀
assets/app.audit-DAT7XNN2.js (New) 9.62kB 9.62kB 100.0% 🚀
assets/extension-KWNnW6cu.js (New) 9.21kB 9.21kB 100.0% 🚀
assets/app.config-generator-D7pbf8pI.js (New) 9.19kB 9.19kB 100.0% 🚀
assets/maintainers-KIMdCTyL.js (New) 8.06kB 8.06kB 100.0% 🚀
assets/miners-IpxMH0dy.js (New) 7.89kB 7.89kB 100.0% 🚀
assets/agents-WAAVLsD7.js (New) 7.76kB 7.76kB 100.0% 🚀
assets/commands-panel-zU02IK5d.js (New) 6.72kB 6.72kB 100.0% 🚀
assets/digest-panel-gfnEUG3G.js (New) 6.34kB 6.34kB 100.0% 🚀
assets/roadmap-TgCE8h7Z.js (New) 6.33kB 6.33kB 100.0% 🚀
assets/docs.index-D7zfJSl6.js (New) 5.34kB 5.34kB 100.0% 🚀
assets/repos._owner._repo.quality-Dol3Y1LX.js (New) 5.09kB 5.09kB 100.0% 🚀
assets/api.index-DIEaeIGE.js (New) 4.78kB 4.78kB 100.0% 🚀
assets/changelog-BkuKjw8_.js (New) 4.67kB 4.67kB 100.0% 🚀
assets/control-primitives-CJyVG2N_.js (New) 3.75kB 3.75kB 100.0% 🚀
assets/api-Cwf1nPuV.js (New) 2.73kB 2.73kB 100.0% 🚀
assets/docs-jhg596qc.js (New) 2.67kB 2.67kB 100.0% 🚀
assets/alert-dialog-DWf9ZcvF.js (New) 2.07kB 2.07kB 100.0% 🚀
assets/button-BpOQsNu3.js (New) 1.74kB 1.74kB 100.0% 🚀
assets/app.workbench-XEDobVqe.js (New) 1.63kB 1.63kB 100.0% 🚀
assets/tooltip-CtaDxFIV.js (New) 1.45kB 1.45kB 100.0% 🚀
assets/session-C1c9PCnN.js (New) 1.44kB 1.44kB 100.0% 🚀
assets/tabs-BrcBkzS-.js (New) 1.39kB 1.39kB 100.0% 🚀
assets/trend-chart-V9suYH8x.js (New) 1.22kB 1.22kB 100.0% 🚀
assets/app.repos-etwxQqxQ.js (New) 1.07kB 1.07kB 100.0% 🚀
assets/analytics-card-shell-CNB8KOIo.js (New) 987 bytes 987 bytes 100.0% 🚀
assets/switch-DhbBqE_o.js (New) 982 bytes 982 bytes 100.0% 🚀
assets/use-api-resource-B8jgdBjw.js (New) 934 bytes 934 bytes 100.0% 🚀
assets/refresh-meta-KxK3vK2n.js (New) 797 bytes 797 bytes 100.0% 🚀
assets/input-yTnf7VPn.js (New) 796 bytes 796 bytes 100.0% 🚀
assets/file-cog-DQnd1elr.js (New) 758 bytes 758 bytes 100.0% 🚀
assets/docs.ai-summaries-D2wBKpkU.js (New) 568 bytes 568 bytes 100.0% 🚀
assets/docs.scoreability-C2xD-UWp.js (New) 562 bytes 562 bytes 100.0% 🚀
assets/docs.upstream-drift-On0YiSQs.js (New) 562 bytes 562 bytes 100.0% 🚀
assets/docs.branch-analysis-BeoFT8Vz.js (New) 561 bytes 561 bytes 100.0% 🚀
assets/docs.self-hosting-ai-providers-BxIYWMt-.js (New) 561 bytes 561 bytes 100.0% 🚀
assets/docs.self-hosting-backup-scaling-BIZkBFry.js (New) 561 bytes 561 bytes 100.0% 🚀
assets/docs.self-hosting-configuration-DMp7gSFu.js (New) 561 bytes 561 bytes 100.0% 🚀
assets/docs.self-hosting-docs-audit-BaA53TGb.js (New) 561 bytes 561 bytes 100.0% 🚀
assets/docs.self-hosting-github-app-MFyz8sVM.js (New) 561 bytes 561 bytes 100.0% 🚀
assets/docs.self-hosting-quickstart-D23Tbbzz.js (New) 561 bytes 561 bytes 100.0% 🚀
assets/docs.self-hosting-rag-DjEBpRpJ.js (New) 561 bytes 561 bytes 100.0% 🚀
assets/docs.self-hosting-rees-CmtQYb_9.js (New) 561 bytes 561 bytes 100.0% 🚀
assets/docs.self-hosting-rees-analyzers-BWQu-y7j.js (New) 561 bytes 561 bytes 100.0% 🚀
assets/docs.self-hosting-release-checklist-BlyB_FSV.js (New) 561 bytes 561 bytes 100.0% 🚀
assets/docs.self-hosting-releases-B_Pj9QuN.js (New) 561 bytes 561 bytes 100.0% 🚀
assets/docs.self-hosting-security-CQcHPYP2.js (New) 561 bytes 561 bytes 100.0% 🚀
assets/docs.self-hosting-troubleshooting-BTGUpOZh.js (New) 561 bytes 561 bytes 100.0% 🚀
assets/docs.self-hosting-unified-ams-orb-i7ezqDkI.js (New) 561 bytes 561 bytes 100.0% 🚀
assets/docs.maintainer-install-trust-BQcgrrJ3.js (New) 560 bytes 560 bytes 100.0% 🚀
assets/docs.mcp-clients-DnBLUle-.js (New) 560 bytes 560 bytes 100.0% 🚀
assets/docs.owner-checklist-BwMxrSq0.js (New) 560 bytes 560 bytes 100.0% 🚀
assets/docs.quickstart-BHYyRqa-.js (New) 560 bytes 560 bytes 100.0% 🚀
assets/docs.ams-config-precedence-ktXTKj0r.js (New) 559 bytes 559 bytes 100.0% 🚀
assets/docs.ams-deployment-DD5-RuT7.js (New) 559 bytes 559 bytes 100.0% 🚀
assets/docs.ams-discovery-plane-BysdMx-8.js (New) 559 bytes 559 bytes 100.0% 🚀
assets/docs.ams-env-reference-ByqhNN9t.js (New) 559 bytes 559 bytes 100.0% 🚀
assets/docs.ams-fleet-manifest-D0sbW4Db.js (New) 559 bytes 559 bytes 100.0% 🚀
assets/docs.ams-goal-spec-C3f_Edwp.js (New) 559 bytes 559 bytes 100.0% 🚀
assets/docs.ams-observability-DyGAhkKI.js (New) 559 bytes 559 bytes 100.0% 🚀
assets/docs.ams-operations-runbook-DaVytx6T.js (New) 559 bytes 559 bytes 100.0% 🚀
assets/docs.ams-sizing-BHqRAldK.js (New) 559 bytes 559 bytes 100.0% 🚀
assets/docs.ams-unattended-scheduling-BERI_7RM.js (New) 559 bytes 559 bytes 100.0% 🚀
assets/docs.beta-onboarding-xr0S84Wl.js (New) 559 bytes 559 bytes 100.0% 🚀
assets/docs.maintainer-self-hosting-B5uxKmn0.js (New) 559 bytes 559 bytes 100.0% 🚀
assets/docs.privacy-security-C60gNePv.js (New) 558 bytes 558 bytes 100.0% 🚀
assets/docs.troubleshooting-DUL1sxip.js (New) 558 bytes 558 bytes 100.0% 🚀
assets/docs.tuning-CDq8d3lr.js (New) 558 bytes 558 bytes 100.0% 🚀
assets/docs.github-app-DQfEcgGM.js (New) 557 bytes 557 bytes 100.0% 🚀
assets/docs.maintainer-workflow-BVsO2LJ9.js (New) 557 bytes 557 bytes 100.0% 🚀
assets/docs.loopover-commands-Dl0KU48I.js (New) 556 bytes 556 bytes 100.0% 🚀
assets/docs.how-reviews-work-CxyODDOd.js (New) 555 bytes 555 bytes 100.0% 🚀
assets/app.maintainer-BZDgb-Kw.js (New) 502 bytes 502 bytes 100.0% 🚀
assets/sparkles-VBgbqzRA.js (New) 494 bytes 494 bytes 100.0% 🚀
assets/app.owner-CL3m96QG.js (New) 474 bytes 474 bytes 100.0% 🚀
assets/app.commands-XwnC1_bM.js (New) 455 bytes 455 bytes 100.0% 🚀
assets/app.playground-BTBRA8Na.js (New) 442 bytes 442 bytes 100.0% 🚀
assets/reveal-YIhseDaq.js (New) 442 bytes 442 bytes 100.0% 🚀
assets/index-DCnsI5EA.js (New) 438 bytes 438 bytes 100.0% 🚀
assets/app.digest-C3rfzmo6.js (New) 430 bytes 430 bytes 100.0% 🚀
assets/eye-off-DIKfiegv.js (New) 430 bytes 430 bytes 100.0% 🚀
assets/app.miner-5aPkzVAi.js (New) 422 bytes 422 bytes 100.0% 🚀
assets/key-round-BR802wWP.js (New) 355 bytes 355 bytes 100.0% 🚀
assets/bot-DBwv_INd.js (New) 328 bytes 328 bytes 100.0% 🚀
assets/trash-2-toJE3pF0.js (New) 328 bytes 328 bytes 100.0% 🚀
assets/save-dIPqn2Py.js (New) 327 bytes 327 bytes 100.0% 🚀
assets/git-pull-request-arrow-Xbncs7GN.js (New) 321 bytes 321 bytes 100.0% 🚀
assets/shield-check-BoEEvt1c.js (New) 320 bytes 320 bytes 100.0% 🚀
assets/wrench-CAodj_ub.js (New) 303 bytes 303 bytes 100.0% 🚀
assets/bell-Blm7iLlq.js (New) 290 bytes 290 bytes 100.0% 🚀
assets/data-table-B-Vv91kV.js (New) 289 bytes 289 bytes 100.0% 🚀
assets/list-checks-O97Otu60.js (New) 279 bytes 279 bytes 100.0% 🚀
assets/shield-Bsg_lx7w.js (New) 272 bytes 272 bytes 100.0% 🚀
assets/workflow-sKVnnOST.js (New) 265 bytes 265 bytes 100.0% 🚀
assets/chart-column-DVs2qftd.js (New) 251 bytes 251 bytes 100.0% 🚀
assets/compass-BI7bvKSD.js (New) 251 bytes 251 bytes 100.0% 🚀
assets/skeleton-DxXQfK5y.js (New) 241 bytes 241 bytes 100.0% 🚀
assets/history-BvWd7ZKa.js (New) 237 bytes 237 bytes 100.0% 🚀
assets/activity-rqzMxMmC.js (New) 234 bytes 234 bytes 100.0% 🚀
assets/message-square-DIwxxX3k.js (New) 233 bytes 233 bytes 100.0% 🚀
assets/download-apVR4lPG.js (New) 232 bytes 232 bytes 100.0% 🚀
assets/chevron-right-CjO2XGXH.js (New) 207 bytes 207 bytes 100.0% 🚀
assets/lock-CmWXZUec.js (New) 206 bytes 206 bytes 100.0% 🚀
assets/rotate-cw-Cq5sR-zl.js (New) 201 bytes 201 bytes 100.0% 🚀
assets/play-Jy24sdLi.js (New) 190 bytes 190 bytes 100.0% 🚀
assets/circle-check-CeUyk-GC.js (New) 178 bytes 178 bytes 100.0% 🚀
assets/search-BMil6kLg.js (New) 174 bytes 174 bytes 100.0% 🚀
assets/self-hosting-docs-audit-BY5kl_V3.js (New) 141 bytes 141 bytes 100.0% 🚀
assets/circle-Bp_WRpGA.js (New) 130 bytes 130 bytes 100.0% 🚀
assets/modal-ySBlj4B2.js (New) 115 bytes 115 bytes 100.0% 🚀
assets/add-scalar-classes-_xRAOJXn.js (Deleted) -2.17MB 0 bytes -100.0% 🗑️
assets/tanstack-vendor-FH8euWpF.js (Deleted) -698.86kB 0 bytes -100.0% 🗑️
assets/docs.fumadocs-spike-api-reference-D0VsMPGL.js (Deleted) -442.94kB 0 bytes -100.0% 🗑️
assets/AgentScalarChatInterface.vue-CZdnjqtA.js (Deleted) -201.71kB 0 bytes -100.0% 🗑️
assets/modal-BWMiiCqo.js (Deleted) -184.28kB 0 bytes -100.0% 🗑️
assets/client-X8ekqesR.js (Deleted) -146.06kB 0 bytes -100.0% 🗑️
assets/maintainer-panel-wyeVg1ok.js (Deleted) -78.58kB 0 bytes -100.0% 🗑️
assets/ui-vendor-b5DXUBrZ.js (Deleted) -65.93kB 0 bytes -100.0% 🗑️
assets/app.analytics-FXmQjZmt.js (Deleted) -34.92kB 0 bytes -100.0% 🗑️
assets/routes-DNfhG63-.js (Deleted) -34.04kB 0 bytes -100.0% 🗑️
assets/app.runs-BUWKKlid.js (Deleted) -27.14kB 0 bytes -100.0% 🗑️
assets/owner-panel-DuKaCbuz.js (Deleted) -26.92kB 0 bytes -100.0% 🗑️
assets/app.operator-DoFvh8to.js (Deleted) -26.03kB 0 bytes -100.0% 🗑️
assets/app-DazIwV6N.js (Deleted) -25.84kB 0 bytes -100.0% 🗑️
assets/miner-panel-IZKJ1wYA.js (Deleted) -20.49kB 0 bytes -100.0% 🗑️
assets/docs-source-Dp8ax4qX.js (Deleted) -19.2kB 0 bytes -100.0% 🗑️
assets/api._op-DT5IyyQ4.js (Deleted) -17.89kB 0 bytes -100.0% 🗑️
assets/self-hosting-docs-audit-BavoJnlc.js (Deleted) -16.73kB 0 bytes -100.0% 🗑️
assets/app.index-CMNHvblt.js (Deleted) -16.19kB 0 bytes -100.0% 🗑️
assets/playground-panel-CCL2fcLV.js (Deleted) -14.43kB 0 bytes -100.0% 🗑️
assets/app.audit-B3VgFmFu.js (Deleted) -9.62kB 0 bytes -100.0% 🗑️
assets/extension-C9LWyFZT.js (Deleted) -9.21kB 0 bytes -100.0% 🗑️
assets/app.config-generator-WBeUXEeX.js (Deleted) -9.19kB 0 bytes -100.0% 🗑️
assets/maintainers-DhwdT1fT.js (Deleted) -8.06kB 0 bytes -100.0% 🗑️
assets/miners-_z1Er3yb.js (Deleted) -7.89kB 0 bytes -100.0% 🗑️
assets/agents-o-PEq3Kz.js (Deleted) -7.76kB 0 bytes -100.0% 🗑️
assets/commands-panel-D6mpemPh.js (Deleted) -6.72kB 0 bytes -100.0% 🗑️
assets/digest-panel-BGwiUj3Z.js (Deleted) -6.34kB 0 bytes -100.0% 🗑️
assets/roadmap-Bf7ulvQy.js (Deleted) -6.33kB 0 bytes -100.0% 🗑️
assets/docs.index-CJzTl0ql.js (Deleted) -5.34kB 0 bytes -100.0% 🗑️
assets/repos._owner._repo.quality-AlXlXqqv.js (Deleted) -5.09kB 0 bytes -100.0% 🗑️
assets/api.index-CDfrUonB.js (Deleted) -4.78kB 0 bytes -100.0% 🗑️
assets/changelog-DiRoNK6x.js (Deleted) -4.67kB 0 bytes -100.0% 🗑️
assets/control-primitives-Bz3wTjzs.js (Deleted) -3.75kB 0 bytes -100.0% 🗑️
assets/api-DNtk-MDn.js (Deleted) -2.73kB 0 bytes -100.0% 🗑️
assets/docs-DZgCyZCX.js (Deleted) -2.67kB 0 bytes -100.0% 🗑️
assets/alert-dialog-DrXrv3j2.js (Deleted) -2.07kB 0 bytes -100.0% 🗑️
assets/button-BosaLw5Q.js (Deleted) -1.74kB 0 bytes -100.0% 🗑️
assets/app.workbench-BmAGi_YS.js (Deleted) -1.63kB 0 bytes -100.0% 🗑️
assets/tooltip-CkE4gK-e.js (Deleted) -1.45kB 0 bytes -100.0% 🗑️
assets/session-DlHHZICT.js (Deleted) -1.44kB 0 bytes -100.0% 🗑️
assets/tabs-D8gGuXX8.js (Deleted) -1.39kB 0 bytes -100.0% 🗑️
assets/trend-chart-gy0U4JfY.js (Deleted) -1.22kB 0 bytes -100.0% 🗑️
assets/app.repos-wUiQc6Zx.js (Deleted) -1.07kB 0 bytes -100.0% 🗑️
assets/analytics-card-shell-CkxKOZwl.js (Deleted) -987 bytes 0 bytes -100.0% 🗑️
assets/switch-D0aNRuhG.js (Deleted) -982 bytes 0 bytes -100.0% 🗑️
assets/use-api-resource-3u9B7yBg.js (Deleted) -934 bytes 0 bytes -100.0% 🗑️
assets/refresh-meta-CHPiJ-KU.js (Deleted) -797 bytes 0 bytes -100.0% 🗑️
assets/input-BOe77V3x.js (Deleted) -796 bytes 0 bytes -100.0% 🗑️
assets/file-cog-DyZgbIZV.js (Deleted) -758 bytes 0 bytes -100.0% 🗑️
assets/docs.ai-summaries-CXhSmQkt.js (Deleted) -568 bytes 0 bytes -100.0% 🗑️
assets/docs.scoreability-D_FlyaJ4.js (Deleted) -562 bytes 0 bytes -100.0% 🗑️
assets/docs.upstream-drift-BBrvft0p.js (Deleted) -562 bytes 0 bytes -100.0% 🗑️
assets/docs.branch-analysis-4wkI5q5H.js (Deleted) -561 bytes 0 bytes -100.0% 🗑️
assets/docs.self-hosting-ai-providers-G3mu2Lai.js (Deleted) -561 bytes 0 bytes -100.0% 🗑️
assets/docs.self-hosting-backup-scaling-qZNx2Oht.js (Deleted) -561 bytes 0 bytes -100.0% 🗑️
assets/docs.self-hosting-configuration-Ddho4wbV.js (Deleted) -561 bytes 0 bytes -100.0% 🗑️
assets/docs.self-hosting-docs-audit-CM_Si3SJ.js (Deleted) -561 bytes 0 bytes -100.0% 🗑️
assets/docs.self-hosting-github-app-D5Ja22j4.js (Deleted) -561 bytes 0 bytes -100.0% 🗑️
assets/docs.self-hosting-quickstart-BvbWwBaW.js (Deleted) -561 bytes 0 bytes -100.0% 🗑️
assets/docs.self-hosting-rag-DlhZRKdU.js (Deleted) -561 bytes 0 bytes -100.0% 🗑️
assets/docs.self-hosting-rees-3-_Z59m-.js (Deleted) -561 bytes 0 bytes -100.0% 🗑️
assets/docs.self-hosting-rees-analyzers-Cdu4aAi-.js (Deleted) -561 bytes 0 bytes -100.0% 🗑️
assets/docs.self-hosting-release-checklist-vIIF0xWl.js (Deleted) -561 bytes 0 bytes -100.0% 🗑️
assets/docs.self-hosting-releases-Cr8Dd98a.js (Deleted) -561 bytes 0 bytes -100.0% 🗑️
assets/docs.self-hosting-security-DgCTdw7A.js (Deleted) -561 bytes 0 bytes -100.0% 🗑️
assets/docs.self-hosting-troubleshooting-BKg0Nl8o.js (Deleted) -561 bytes 0 bytes -100.0% 🗑️
assets/docs.self-hosting-unified-ams-orb-DMYJnl9x.js (Deleted) -561 bytes 0 bytes -100.0% 🗑️
assets/docs.maintainer-install-trust-C45RVxJE.js (Deleted) -560 bytes 0 bytes -100.0% 🗑️
assets/docs.mcp-clients-BNcRTlei.js (Deleted) -560 bytes 0 bytes -100.0% 🗑️
assets/docs.owner-checklist-r3BgAtAU.js (Deleted) -560 bytes 0 bytes -100.0% 🗑️
assets/docs.quickstart-WTbo_IW_.js (Deleted) -560 bytes 0 bytes -100.0% 🗑️
assets/docs.ams-config-precedence-B9vywQre.js (Deleted) -559 bytes 0 bytes -100.0% 🗑️
assets/docs.ams-deployment-*.js (Deleted) -559 bytes 0 bytes -100.0% 🗑️
assets/docs.ams-discovery-plane-BPMMYTwI.js (Deleted) -559 bytes 0 bytes -100.0% 🗑️
assets/docs.ams-env-reference-BeibTedk.js (Deleted) -559 bytes 0 bytes -100.0% 🗑️
assets/docs.ams-fleet-manifest-CVkGh9w7.js (Deleted) -559 bytes 0 bytes -100.0% 🗑️
assets/docs.ams-goal-spec-Cy6Wfwqs.js (Deleted) -559 bytes 0 bytes -100.0% 🗑️
assets/docs.ams-observability-Dox1k43s.js (Deleted) -559 bytes 0 bytes -100.0% 🗑️
assets/docs.ams-operations-runbook-BqchqIl1.js (Deleted) -559 bytes 0 bytes -100.0% 🗑️
assets/docs.ams-sizing-DUYx3_YV.js (Deleted) -559 bytes 0 bytes -100.0% 🗑️
assets/docs.ams-unattended-scheduling-ByuikDdj.js (Deleted) -559 bytes 0 bytes -100.0% 🗑️
assets/docs.beta-onboarding-Q7AKnPsD.js (Deleted) -559 bytes 0 bytes -100.0% 🗑️
assets/docs.maintainer-self-hosting-COEQfp_n.js (Deleted) -559 bytes 0 bytes -100.0% 🗑️
assets/docs.privacy-security-D4c8d1wu.js (Deleted) -558 bytes 0 bytes -100.0% 🗑️
assets/docs.troubleshooting-BcbKkwK0.js (Deleted) -558 bytes 0 bytes -100.0% 🗑️
assets/docs.tuning-CjEB6Gq6.js (Deleted) -558 bytes 0 bytes -100.0% 🗑️
assets/docs.github-app-DRH_f7FX.js (Deleted) -557 bytes 0 bytes -100.0% 🗑️
assets/docs.maintainer-workflow-ByqXhpPK.js (Deleted) -557 bytes 0 bytes -100.0% 🗑️
assets/docs.loopover-commands-BMw4ltYU.js (Deleted) -556 bytes 0 bytes -100.0% 🗑️
assets/docs.how-reviews-work-CFDCZJjD.js (Deleted) -555 bytes 0 bytes -100.0% 🗑️
assets/app.maintainer-CUDoW3Kq.js (Deleted) -502 bytes 0 bytes -100.0% 🗑️
assets/sparkles-DHOILb4N.js (Deleted) -494 bytes 0 bytes -100.0% 🗑️
assets/app.owner-DrbNxyT6.js (Deleted) -474 bytes 0 bytes -100.0% 🗑️
assets/app.commands-DfWIDDcB.js (Deleted) -455 bytes 0 bytes -100.0% 🗑️
assets/app.playground-Cm8OP5QO.js (Deleted) -442 bytes 0 bytes -100.0% 🗑️
assets/reveal-BGnsIQDI.js (Deleted) -442 bytes 0 bytes -100.0% 🗑️
assets/index-Cn_H0FgJ.js (Deleted) -438 bytes 0 bytes -100.0% 🗑️
assets/app.digest-CaBqagpQ.js (Deleted) -430 bytes 0 bytes -100.0% 🗑️
assets/eye-off-CNuQ-8T2.js (Deleted) -430 bytes 0 bytes -100.0% 🗑️
assets/app.miner-CO0tOqJ7.js (Deleted) -422 bytes 0 bytes -100.0% 🗑️
assets/key-round-HIIMyxvQ.js (Deleted) -355 bytes 0 bytes -100.0% 🗑️
assets/bot-wMs1qk5N.js (Deleted) -328 bytes 0 bytes -100.0% 🗑️
assets/trash-2-DbjuYbaY.js (Deleted) -328 bytes 0 bytes -100.0% 🗑️
assets/save-3aOD5L4-.js (Deleted) -327 bytes 0 bytes -100.0% 🗑️
assets/git-pull-request-arrow-CGnX-scp.js (Deleted) -321 bytes 0 bytes -100.0% 🗑️
assets/shield-check-Hg0mT_ZJ.js (Deleted) -320 bytes 0 bytes -100.0% 🗑️
assets/wrench-BDe-9ATt.js (Deleted) -303 bytes 0 bytes -100.0% 🗑️
assets/bell-DwDd1AQG.js (Deleted) -290 bytes 0 bytes -100.0% 🗑️
assets/data-table-BiYDGUxV.js (Deleted) -289 bytes 0 bytes -100.0% 🗑️
assets/list-checks-CDpOhJmg.js (Deleted) -279 bytes 0 bytes -100.0% 🗑️
assets/shield-_kOc2-ti.js (Deleted) -272 bytes 0 bytes -100.0% 🗑️
assets/workflow-DbI6Kcma.js (Deleted) -265 bytes 0 bytes -100.0% 🗑️
assets/chart-column-LvVOK6rR.js (Deleted) -251 bytes 0 bytes -100.0% 🗑️
assets/compass-DwSemW3d.js (Deleted) -251 bytes 0 bytes -100.0% 🗑️
assets/skeleton-B-cN7f8Q.js (Deleted) -241 bytes 0 bytes -100.0% 🗑️
assets/history-CiicuLVI.js (Deleted) -237 bytes 0 bytes -100.0% 🗑️
assets/activity-D-G8udN-.js (Deleted) -234 bytes 0 bytes -100.0% 🗑️
assets/message-square-fszJVyTn.js (Deleted) -233 bytes 0 bytes -100.0% 🗑️
assets/download-BVsg5Apq.js (Deleted) -232 bytes 0 bytes -100.0% 🗑️
assets/chevron-right-DC0weupq.js (Deleted) -207 bytes 0 bytes -100.0% 🗑️
assets/lock-BkxUnmUX.js (Deleted) -206 bytes 0 bytes -100.0% 🗑️
assets/rotate-cw-7XN-scrX.js (Deleted) -201 bytes 0 bytes -100.0% 🗑️
assets/play-BJelFhQL.js (Deleted) -190 bytes 0 bytes -100.0% 🗑️
assets/circle-check-DQ81wzey.js (Deleted) -178 bytes 0 bytes -100.0% 🗑️
assets/search-B5J1nrZv.js (Deleted) -174 bytes 0 bytes -100.0% 🗑️
assets/self-hosting-docs-audit-5NiCLHJ-.js (Deleted) -141 bytes 0 bytes -100.0% 🗑️
assets/circle-D5IfD1-Q.js (Deleted) -130 bytes 0 bytes -100.0% 🗑️
assets/modal-C2AOdHfF.js (Deleted) -115 bytes 0 bytes -100.0% 🗑️

@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 93.60%. Comparing base (eb92767) to head (3df011f).
⚠️ Report is 3 commits behind head on main.
✅ All tests successful. No failed tests found.

Additional details and impacted files
@@           Coverage Diff           @@
##             main    #6557   +/-   ##
=======================================
  Coverage   93.60%   93.60%           
=======================================
  Files         675      675           
  Lines       67742    67728   -14     
  Branches    18618    18602   -16     
=======================================
- Hits        63409    63397   -12     
  Misses       3360     3360           
+ Partials      973      971    -2     
Flag Coverage Δ
shard-1 44.02% <20.00%> (-0.02%) ⬇️
shard-2 36.79% <20.00%> (-0.02%) ⬇️
shard-3 32.41% <80.00%> (-0.02%) ⬇️
shard-4 34.90% <20.00%> (-0.01%) ⬇️
shard-5 31.12% <100.00%> (-0.01%) ⬇️
shard-6 45.59% <100.00%> (-0.01%) ⬇️

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.51% <100.00%> (+0.01%) ⬆️
src/db/repositories.ts 96.78% <ø> (+0.07%) ⬆️
src/db/schema.ts 72.97% <ø> (ø)
src/services/maintainer-activation.ts 100.00% <ø> (ø)

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

Its recommended-settings patch no longer sets checkRunMode (#6442), so
echoing updated.checkRunMode here would always report the hardcoded
default regardless of what the activation actually did.
@superagent-security

Copy link
Copy Markdown
Contributor

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

@loopover-orb

loopover-orb Bot commented Jul 16, 2026

Copy link
Copy Markdown
Contributor

Warning

⏸️ LoopOver review result - manual review recommended

Review updated: 2026-07-16 14:24:00 UTC

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

⏸️ Suggested Action - Manual Review

Review summary
This drops 9 now config-as-code-only columns from repository_settings, updates schema.ts + repositories.ts (getRepositorySettings/upsertRepositorySettings) to return unconditional built-in defaults for those fields, and threads resolveEffectiveSettings through the two DB-vs-yml advisory builders via a new applyConfigAsCodeOnlyFields helper so those comparisons still see the true effective value instead of a constant. The write-path, schema, and migration all drop the exact same 9 fields in lockstep, and the maintainer-activation/UI/test updates consistently remove or adapt to the same set with no stragglers found in the diff. The GET /settings route switch from getRepositorySettings to resolveRepositorySettings is a real behavioral improvement (previously always showed the hardcoded default for these fields regardless of yml).

Nits — 5 non-blocking
  • migrations/0158_drop_batch_a_config_as_code_columns.sql:12-20 uses bare `ALTER TABLE ... DROP COLUMN` statements — during a rolling multi-instance deploy, if any old worker instance briefly serves requests against the new schema before its own code update lands, reads/writes referencing the dropped columns could error; this matches cited precedent (0122/0146/0150) so it's likely an accepted pattern here rather than a new risk.
  • src/api/routes.ts CONFIG_AS_CODE_ONLY_FIELDS/applyConfigAsCodeOnlyFields duplicates the same 9-field list already implicit in getRepositorySettings' hardcoded defaults — worth a shared constant if this pattern needs to be touched again for a future Batch.
  • Confirm migration 0158 is numerically contiguous with the latest existing migration file (not visible in this diff) to avoid a duplicate-number collision.
  • Consider exporting CONFIG_AS_CODE_ONLY_FIELDS from a shared location if src/db/repositories.ts's hardcoded-default list ever needs to reference the same set, to keep the two lists from drifting apart during a future Batch B.
  • The comment on migrations/0158 documenting the badgeEnabled/publicQualityMetrics exclusion rationale is a nice touch — consider linking it explicitly to the epic/issue for anyone auditing migrations later.

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 ✅ No active overlap found No same-issue or scoped active PR overlap found.
Change scope ✅ 20/20 Low 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: 33 registered-repo PR(s), 26 merged, 311 issue(s).
Contributor context ✅ Confirmed Gittensor contributor JSONbored; Gittensor profile; 33 PR(s), 311 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: 33 PR(s), 311 issue(s).
  • PR-specific overlap: none found.
Contributor next steps
  • Start here: Treat this as maintainer-lane context rather than normal contributor-lane activity.
  • Then work through the remaining 2 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 &lt;question&gt; answers contribution-quality Q&A with source citations and freshness.
  • @loopover chat &lt;question&gt; 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 /
diff /
diff /
/ 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 · Diff highlights exactly what changed.

🟩 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

@loopover-orb loopover-orb Bot added the manual-review Gittensor contributor context label Jul 16, 2026
@JSONbored
JSONbored merged commit 08fa06d into main Jul 16, 2026
20 checks passed
@JSONbored
JSONbored deleted the refactor/batch-a-phase2-drop-db-columns branch July 16, 2026 14:33
andriypolanski pushed a commit to andriypolanski/gittensory that referenced this pull request Jul 16, 2026
Batch A (JSONbored#6442, merged as JSONbored#6557) deliberately excluded these two fields
because loadPublicRepoBadge/loadPublicRepoQualityMetrics read them via a raw
getRepositorySettings call that bypasses the manifest overlay -- a perf
tradeoff for two unauthenticated, high-frequency public routes. Per
maintainer direction, finish the migration instead: both routes now read
resolveRepositorySettings, accepting the manifest-cache lookup (and
occasional cold-cache GitHub fetch) so .loopover.yml is honored here like
every other settings.* field.

Drops the two columns (migration 0158), removes them from the dashboard/
internal write paths and the maintainer settings panel, and updates the
tests that seeded them via the DB to seed the focus manifest instead. Each
live repo's current effective value (false) was already backfilled into its
private .loopover.yml config before this drop.

Part of JSONbored#6442, epic JSONbored#6440.
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