From b5b0f16d1ef4e492d4e987cfdc2d71fa8ea5e069 Mon Sep 17 00:00:00 2001 From: JSONbored <49853598+JSONbored@users.noreply.github.com> Date: Tue, 14 Jul 2026 14:44:43 -0700 Subject: [PATCH 1/3] docs(engine): rename gittensory prose to loopover in packages/loopover-engine (batch A) Rebrand cutover cleanup: update brand-name prose in comments across 19 packages/loopover-engine/src/**/*.ts files (advisory, duplicate detection, focus-manifest, index, issue-rag-query, local-scorer, miner-prediction-metrics, the miner subsystem, prompt-packet, and review content-lane/guardrail modules). Comment-only, except the 'gittensory-deterministic' activeModel value in local-scorer.ts (no external consumer -- test/local-scorer.test.ts updated in the same commit). --- .../src/advisory/gate-advisory.ts | 4 ++-- .../loopover-engine/src/duplicate-winner.ts | 2 +- .../loopover-engine/src/focus-manifest.ts | 24 +++++++++---------- .../src/focus-manifest/guidance.ts | 2 +- packages/loopover-engine/src/index.ts | 6 ++--- .../loopover-engine/src/issue-rag-query.ts | 2 +- packages/loopover-engine/src/local-scorer.ts | 4 ++-- .../src/miner-prediction-metrics.ts | 4 ++-- .../src/miner/acceptance-criteria.ts | 2 +- .../loopover-engine/src/miner/attempt-log.ts | 2 +- .../src/miner/cli-subprocess-driver.ts | 2 +- .../src/miner/iterate-policy.ts | 2 +- .../src/miner/local-write-tools.ts | 8 +++---- .../src/miner/worktree-pool.ts | 2 +- packages/loopover-engine/src/prompt-packet.ts | 2 +- .../review/content-lane/content-repo-spec.ts | 2 +- .../src/review/content-lane/flag.ts | 6 ++--- .../loopover-engine/src/review/safe-url.ts | 2 +- .../loopover-engine/test/local-scorer.test.ts | 2 +- 19 files changed, 40 insertions(+), 40 deletions(-) diff --git a/packages/loopover-engine/src/advisory/gate-advisory.ts b/packages/loopover-engine/src/advisory/gate-advisory.ts index 2f956cf60a..aac5148f64 100644 --- a/packages/loopover-engine/src/advisory/gate-advisory.ts +++ b/packages/loopover-engine/src/advisory/gate-advisory.ts @@ -442,7 +442,7 @@ export function evaluateGateCheck(advisoryResult: Advisory, policy: GateCheckPol function evaluateGateCheckCore(advisoryResult: Advisory, policy: GateCheckPolicy = {}): GateCheckEvaluation { const warnings = advisoryResult.findings.filter((finding) => finding.severity === "warning"); - // App/infra state (repo not synced yet, PR not cached): gittensory cannot evaluate this PR yet, so the + // App/infra state (repo not synced yet, PR not cached): loopover cannot evaluate this PR yet, so the // gate is NEUTRAL (non-blocking) and re-evaluates automatically on the next sync/webhook. Never block a // contributor on the app's OWN state. if (advisoryResult.findings.some((finding) => isEvaluationBlocker(finding.code, policy))) { @@ -530,7 +530,7 @@ function evaluateGateCheckCore(advisoryResult: Advisory, policy: GateCheckPolicy function isEvaluationBlocker(code: string, policy: GateCheckPolicy): boolean { // pre_merge_check_unresolved: an enforced path-gated pre-merge check whose changed-file set could not be - // resolved — gittensory cannot evaluate it yet, so the gate is NEUTRAL (held) and re-evaluates on the next + // resolved — loopover cannot evaluate it yet, so the gate is NEUTRAL (held) and re-evaluates on the next // sync, rather than auto-merging past the unverified requirement or hard-closing on a transient miss. (#review-audit) if (code === "repo_not_registered" || code === "repo_not_seen" || code === "pr_not_cached" || code === "pre_merge_check_unresolved") return true; // cla_check_unresolved (#2564): the CLA-bot check-run's conclusion could not be resolved. Unlike the codes diff --git a/packages/loopover-engine/src/duplicate-winner.ts b/packages/loopover-engine/src/duplicate-winner.ts index c853c7fed3..e135e36a73 100644 --- a/packages/loopover-engine/src/duplicate-winner.ts +++ b/packages/loopover-engine/src/duplicate-winner.ts @@ -11,7 +11,7 @@ * caller can compute the winner ONCE per review run and thread the result boolean consistently into every * surface (advisory finding, close reason, slop, panels), so they agree by construction. * - * ELECTION ORDER: compare `linkedIssueClaimedAt`, the time gittensory first observed the PR claiming + * ELECTION ORDER: compare `linkedIssueClaimedAt`, the time loopover first observed the PR claiming * the issue. GitHub `pull_request.created_at` is intentionally not an ordering signal here: contributors can * edit an old placeholder PR to add a linked issue later, so creation time would let backdated claims steal * duplicate-winner credit from the PR that actually claimed the issue first. Sparse legacy rows that lack diff --git a/packages/loopover-engine/src/focus-manifest.ts b/packages/loopover-engine/src/focus-manifest.ts index 8f5e14e78d..7e68c35218 100644 --- a/packages/loopover-engine/src/focus-manifest.ts +++ b/packages/loopover-engine/src/focus-manifest.ts @@ -259,12 +259,12 @@ export type ConvergedFeatureKey = (typeof CONVERGED_FEATURE_KEYS)[number]; * `LOOPOVER_REVIEW_REPOS` allowlist default, so an operator who sets nothing keeps today's behavior. */ export type FocusManifestFeaturesConfig = { present: boolean } & Record; -/** Optional ecosystem/network integrations under the `experimental:` block — plugins that couple gittensory to +/** Optional ecosystem/network integrations under the `experimental:` block — plugins that couple loopover to * an external system rather than core review behavior. Starts with `gittensor` (the subnet mining-registry/ - * scoring integration gittensory originally shipped with); future plugins land in this same array as the + * scoring integration loopover originally shipped with); future plugins land in this same array as the * product broadens beyond gittensor. Deliberately a SEPARATE block from `features:` (converged review * capabilities) — an operator (especially self-host) should be able to see at a glance which toggles are "how - * gittensory reviews PRs" vs "which external network/ecosystem this instance opts into." */ + * loopover reviews PRs" vs "which external network/ecosystem this instance opts into." */ export const EXPERIMENTAL_PLUGIN_KEYS = ["gittensor"] as const; export type ExperimentalPluginKey = (typeof EXPERIMENTAL_PLUGIN_KEYS)[number]; @@ -277,7 +277,7 @@ export type FocusManifestExperimentalConfig = { present: boolean } & Record JSON.stringify(event)).join("\n"); } -/** In-memory appender for tests and local tooling — production persistence uses `gittensory-miner/lib/attempt-log.js`. */ +/** In-memory appender for tests and local tooling — production persistence uses `loopover-miner/lib/attempt-log.js`. */ export function createAttemptLogBuffer(): { append: (event: AttemptLogEvent) => NormalizedAttemptLogEvent; events: () => readonly NormalizedAttemptLogEvent[]; diff --git a/packages/loopover-engine/src/miner/cli-subprocess-driver.ts b/packages/loopover-engine/src/miner/cli-subprocess-driver.ts index 36d6cb907a..b8c66ee659 100644 --- a/packages/loopover-engine/src/miner/cli-subprocess-driver.ts +++ b/packages/loopover-engine/src/miner/cli-subprocess-driver.ts @@ -7,7 +7,7 @@ import { buildAllowlistedEnv, redactSecrets } from "../subprocess-env.js"; // CLI-subprocess CodingAgentDriver (#4266). Implements the CodingAgentDriver seam (#4262) by running the coding // agent (`claude`/`codex`) as a subprocess in the attempt's scoped working directory. The spawn primitive is -// INJECTED (a generalized version of src/selfhost/ai.ts's SpawnFn, redeclared here so gittensory-engine stays +// INJECTED (a generalized version of src/selfhost/ai.ts's SpawnFn, redeclared here so loopover-engine stays // standalone and doesn't import from src/), so the driver is fully testable without a real child process. Two // safety primitives are reused from subprocess-env.ts (#4284) rather than re-implemented: the child gets a STRICT // allowlisted env (never the full host env — a coding-agent subprocess is prompt-injectable), and any subprocess diff --git a/packages/loopover-engine/src/miner/iterate-policy.ts b/packages/loopover-engine/src/miner/iterate-policy.ts index 4d1ee4dcbf..e1aff55917 100644 --- a/packages/loopover-engine/src/miner/iterate-policy.ts +++ b/packages/loopover-engine/src/miner/iterate-policy.ts @@ -3,7 +3,7 @@ // from the loop MECHANICS (#2333) so the actual thresholds/rules are one small, individually-reviewable, pure // artifact -- `decideNextAction` needs no driver, no worktree, no IO to test. // -// STRATEGIC CONSTRAINTS this policy encodes (gittensory-miner-autonomy-roadmap): +// STRATEGIC CONSTRAINTS this policy encodes (loopover-miner-autonomy-roadmap): // - "never auto-submit (P4) before governor+caps (P5)" -- a mandatory clean predicted-gate PASS is the ONLY // path to `"handoff"`; an ambiguous or errored self-review downgrades to abandon, never optimistically // hands off. diff --git a/packages/loopover-engine/src/miner/local-write-tools.ts b/packages/loopover-engine/src/miner/local-write-tools.ts index 55ffe2ecf4..c9f4fdee8a 100644 --- a/packages/loopover-engine/src/miner/local-write-tools.ts +++ b/packages/loopover-engine/src/miner/local-write-tools.ts @@ -1,4 +1,4 @@ -// #780 miner write-tools. These build ACTION SPECS — gittensory supplies the content; the miner's OWN local +// #780 miner write-tools. These build ACTION SPECS — loopover supplies the content; the miner's OWN local // harness runs the command with its OWN GitHub credentials. LoopOver NEVER performs the write, so source code // and the write both stay on the miner's machine: the no-cloud-write boundary holds. Pure + deterministic: every // builder returns a self-contained, shell-safe spec and touches nothing. @@ -6,7 +6,7 @@ // MOVED HERE FROM src/mcp/local-write-tools.ts (#2337): this module has zero root-specific dependencies (it only // ever needed a generic JSON-value type), so it belongs in the shared "brain" layer alongside the rest of the // portable engine, not root-only. This is what lets packages/loopover-miner's own real driving-loop entrypoint -// construct the EXACT SAME open_pr command gittensory's MCP server would return, with zero network round-trip +// construct the EXACT SAME open_pr command loopover's MCP server would return, with zero network round-trip // and zero duplicated/drifting logic: both consumers import the same functions from this one place. Root's // src/mcp/local-write-tools.ts is now a thin re-export preserving every existing import path unchanged. @@ -37,7 +37,7 @@ function spec(action: string, description: string, inputs: Record Date: Tue, 14 Jul 2026 15:27:18 -0700 Subject: [PATCH 2/3] fix(engine): also rename src/rules/advisory.ts's shared marker-pair prose Completes the gittensory->loopover rename for the deliberately- divergent gate-decision twin (packages/loopover-engine/src/advisory/ gate-advisory.ts, already renamed) -- scripts/check-engine-parity.ts requires both sides of this pair change together in one PR. --- src/rules/advisory.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rules/advisory.ts b/src/rules/advisory.ts index 380a68d3e3..a4ae3d15b9 100644 --- a/src/rules/advisory.ts +++ b/src/rules/advisory.ts @@ -910,7 +910,7 @@ function conclusionForSeverity(severity: AdvisorySeverity, findings: AdvisoryFin function isEvaluationBlocker(code: string, policy: GateCheckPolicy): boolean { // pre_merge_check_unresolved: an enforced path-gated pre-merge check whose changed-file set could not be - // resolved — gittensory cannot evaluate it yet, so the gate is NEUTRAL (held) and re-evaluates on the next + // resolved — loopover cannot evaluate it yet, so the gate is NEUTRAL (held) and re-evaluates on the next // sync, rather than auto-merging past the unverified requirement or hard-closing on a transient miss. (#review-audit) if (code === "repo_not_registered" || code === "repo_not_seen" || code === "pr_not_cached" || code === "pre_merge_check_unresolved") return true; // cla_check_unresolved (#2564): the CLA-bot check-run's conclusion could not be resolved. Unlike the codes From 16d09f4291ea307ab01cd34edb0a33b03dd8a2cc Mon Sep 17 00:00:00 2001 From: JSONbored <49853598+JSONbored@users.noreply.github.com> Date: Tue, 14 Jul 2026 16:59:00 -0700 Subject: [PATCH 3/3] fix(engine): fix third stale activeModel fixture in test/unit/local-scorer.test.ts src/signals/local-scorer.ts is a thin re-export shim over packages/loopover-engine/src/local-scorer.ts (renamed in this batch), so this root-level test's hardcoded 'gittensory-deterministic' expectation broke at runtime even though it never imports the engine package directly. Missed earlier because it's a different file from packages/loopover-engine/test/local-scorer.test.ts, already fixed. --- test/unit/local-scorer.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/unit/local-scorer.test.ts b/test/unit/local-scorer.test.ts index 0ff8830900..2e80ffadef 100644 --- a/test/unit/local-scorer.test.ts +++ b/test/unit/local-scorer.test.ts @@ -12,7 +12,7 @@ describe("computeLocalScorerTokens (#782)", () => { }); expect(scorer).toMatchObject({ mode: "external_command", - activeModel: "gittensory-deterministic", + activeModel: "loopover-deterministic", sourceTokenScore: 12, testTokenScore: 8, nonCodeTokenScore: 6,