feat(selfhost): per-repo opt-out for the active-review reconciliation sweep - #7880
Merged
Merged
Conversation
… sweep Add review.activeReviewReconciliation: false as an explicit per-repo FORCE-OFF, mirroring review.prReconciliation/review.sweepWatchdog exactly -- config-as-code for this class of fleet-wide sweep is meant to be both globally toggleable AND fine-tunable per repo, which the initial cut missed. Wire the opt-out into runActiveReviewReconciliation so a repo's stale rows are skipped before any GitHub call is spent, failing open on a manifest-load error like every sibling check. Also fixes a pre-existing bug in the engine package's own test script found while re-verifying this change: `rm -rf dist-test` deleted the compiled test output but left `.test.tsbuildinfo` behind, so a second `npm run test` invocation could see the stale incremental cache, skip re-emitting entirely, and `node --test` would then report 0 tests found as a trivial success -- silently no-op-ing the engine's whole test suite while the gate still passed. Clearing both together forces a real recompile every run. And fixes a flaky timestamp-inequality assertion in the out-of-order-webhook regression test added in the prior commit (two upserts can land in the same test millisecond), matching the same caveat already documented on the sibling review-latency-metric tests in this file.
Contributor
|
Superagent didn't find any vulnerabilities or security issues in this PR. |
Deploying with
|
| Status | Name | Latest Commit | Preview URL | Updated (UTC) |
|---|---|---|---|---|
| ✅ Deployment successful! View logs |
loopover-ui | c70e811 | Commit Preview URL Branch Preview URL |
Jul 21 2026, 03:56 PM |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #7880 +/- ##
==========================================
- Coverage 91.40% 91.39% -0.01%
==========================================
Files 730 730
Lines 74763 74767 +4
Branches 22815 22817 +2
==========================================
Hits 68335 68335
Misses 5385 5385
- Partials 1043 1047 +4
Flags with carried forward coverage won't be shown. Click here to find out more.
|
This was referenced Jul 23, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
review.activeReviewReconciliation: falseas an explicit per-repo FORCE-OFF for the active-review-tracking reconciliation sweep, mirroringreview.prReconciliation/review.sweepWatchdogexactly (same shape, same deliberately FORCE-OFF-ONLY semantics, same fail-open-on-manifest-error behavior). The sweep's fleet-wide enable already supported config-as-code (fix(selfhost): stop delayed webhooks from resurrecting closed PRs' review tracking #7839); this closes the other half — per-repo fine-tuning — which the initial cut missed.runActiveReviewReconciliation: a row's own repo manifest is checked before any GitHub API call is spent, so an opted-out repo's stale rows are skipped cheaply.packages/loopover-engine's owntestscript found while re-verifying this change:rm -rf dist-testdeleted the compiled test output but left.test.tsbuildinfobehind, so a second invocation could see a stale incremental cache, skip re-emitting entirely, andnode --testwould report "0 tests found" as a trivial success — silently no-op-ing the engine package's whole 594-test suite whiletest:cistill reported green. Clearing both together (rm -rf dist-test .test.tsbuildinfo) forces a genuine recompile every run.Scope
type(scope): short summaryConventional Commit format.CONTRIBUTING.mdand does not reintroduce GitHub Pages, VitePress,site/, orCNAME.Validation
git diff --checknpm run actionlintnpm run typechecknpm run test:coveragelocally — full unsharded run, 19,865 tests, 0 failuresnpm run test:workersnpm run build:mcp(build:mcp:checkin the full gate)npm run test:mcp-packnpm run ui:openapi:checknpm run ui:lintnpm run ui:typechecknpm run ui:buildnpm audit --audit-level=moderate— 0 vulnerabilitiesreview.activeReviewReconciliationfieldRan the full
npm run test:cigate twice while iterating this PR (once surfaced the flaky timestamp assertion above, fixed and re-ran clean).Safety
UI Evidencesection. (N/A — no UI changes.)config/examples/loopover.full.ymland.loopover.yml.exampledocument the new per-repoactiveReviewReconciliation: falseknob;CHANGELOG.mditself is intentionally untouched (not a release-prep PR).UI Evidence
N/A — no UI, frontend, docs-site, or extension changes.
Notes
review.activeReviewReconciliationfield lives in the existing.loopover.ymlmanifest layer, not a DB column).