From 362a6155ba3f484b3f8ada44350f0d1630242cae Mon Sep 17 00:00:00 2001 From: JSONbored <49853598+JSONbored@users.noreply.github.com> Date: Wed, 15 Jul 2026 05:12:01 -0700 Subject: [PATCH] review: unwind the retired unifiedComment feature key (#6103 follow-up) The unified-comment bridge became the sole PR-comment renderer in #6128, which left the unifiedComment ConvergedFeatureKey and its LOOPOVER_REVIEW_UNIFIED_COMMENT env flag declared but functionally inert. Since the drift-check gate requires every declared LOOPOVER_REVIEW_* flag to be documented, and there was no working precedent for a retired-but-still-required flag, this fully removes the key/flag from the resolver, config-as-code examples, self-hosting docs, and env declarations (regenerating worker-configuration.d.ts via cf-typegen) rather than leaving stale references. Also fixes the "signal table" description in docs.how-reviews-work.tsx, left over from the earlier decision-drivers redesign (#6083), and a timing-flaky GraphQL single-flight test unrelated to this change but caught by the same full-suite run (crypto.subtle.digest is backed by a real OS thread pool, so two concurrent callers with identical inputs can complete in either order under load; stubbed with a deterministic pure-microtask digest for the one test that exercises the race). --- .env.example | 7 +--- .env.selfhost.example | 2 - .loopover.yml.example | 6 +-- CONVERGENCE_RUNBOOK.md | 3 +- .../src/routes/docs.github-app.tsx | 9 +---- .../src/routes/docs.how-reviews-work.tsx | 22 +++++----- .../src/routes/docs.privacy-security.tsx | 1 - .../docs.self-hosting-configuration.tsx | 12 +++--- apps/loopover-ui/src/routes/docs.tuning.tsx | 5 --- config/examples/loopover.full.yml | 6 +-- .../loopover-engine/src/focus-manifest.ts | 19 +++++---- src/env.d.ts | 5 --- src/queue/ci-resolution.ts | 4 +- src/review/cutover-gate.ts | 2 +- src/review/feature-activation.ts | 6 +-- src/review/inline-comments.ts | 4 +- src/review/safety.ts | 2 +- src/review/unified-comment-bridge.ts | 7 ---- src/review/unified-comment.ts | 3 +- src/review/visual-wire.ts | 2 +- test/unit/feature-activation.test.ts | 4 +- test/unit/focus-manifest.test.ts | 9 ++--- test/unit/github-graphql-cache.test.ts | 40 +++++++++++++++---- .../linked-issue-satisfaction-run.test.ts | 2 - test/unit/queue-3.test.ts | 2 - test/unit/queue-4.test.ts | 40 ++++++++----------- test/unit/queue-5.test.ts | 2 +- test/unit/reputation-wiring.test.ts | 3 +- test/unit/unified-comment-bridge.test.ts | 20 ---------- test/unit/visual-wire.test.ts | 2 +- worker-configuration.d.ts | 4 +- wrangler.jsonc | 1 - 32 files changed, 103 insertions(+), 153 deletions(-) diff --git a/.env.example b/.env.example index 424be8605c..72095bc8da 100644 --- a/.env.example +++ b/.env.example @@ -19,7 +19,7 @@ # --- Scope (per-repo cutover allowlist) ------------------------------------- # Comma-separated owner/repo names allowed to run the per-PR review features -# (SAFETY, GROUNDING, RAG, REPUTATION, UNIFIED_COMMENT). A per-PR feature runs on +# (SAFETY, GROUNDING, RAG, REPUTATION). A per-PR feature runs on # a repo only if its own flag is ON *and* the repo is listed here. Empty = no # repos, so every per-PR feature stays dormant regardless of the flags below. # Case-insensitive, trimmed; stray commas ignored. @@ -107,11 +107,6 @@ LOOPOVER_REVIEW_ENRICHMENT=false LOOPOVER_REVIEW_REPUTATION=false # GITTENSORY_REVIEW_REPUTATION=false # no longer read (removed by #4777) -# Renders the public PR comment as one in-place unified comment instead of the -# legacy multi-panel comment. OFF keeps the legacy comment byte-identical. -LOOPOVER_REVIEW_UNIFIED_COMMENT=false -# GITTENSORY_REVIEW_UNIFIED_COMMENT=false # no longer read (removed by #4777) - # --- Global capabilities (NOT scoped by LOOPOVER_REVIEW_REPOS) ------------- # Observability (read-only): cron anomaly scan over the gate-block ledger emits diff --git a/.env.selfhost.example b/.env.selfhost.example index 2636d54870..2c15a6a7a5 100644 --- a/.env.selfhost.example +++ b/.env.selfhost.example @@ -71,8 +71,6 @@ REDIS_URL=redis://redis:6379 SELFHOST_DEPLOYMENT_MODE=dry-run LOOPOVER_REVIEW_REPOS=owner/repo # GITTENSORY_REVIEW_REPOS=owner/repo # no longer read (removed by #4777) -LOOPOVER_REVIEW_UNIFIED_COMMENT=true -# GITTENSORY_REVIEW_UNIFIED_COMMENT=true # no longer read (removed by #4777) LOOPOVER_REVIEW_SAFETY=true # GITTENSORY_REVIEW_SAFETY=true # no longer read (removed by #4777) LOOPOVER_REVIEW_GROUNDING=true diff --git a/.loopover.yml.example b/.loopover.yml.example index 0279f4e4fb..722c5068f4 100644 --- a/.loopover.yml.example +++ b/.loopover.yml.example @@ -483,7 +483,6 @@ review: # max_files: 25 # Unified-comment display toggles (#1957 / #1955 / #2069). Bool | null. Default: null/false — byte-identical. - # Only take effect when the `features.unifiedComment` feature is enabled. # changed_files_summary: false # When true, the unified review comment gains a deterministic "Changed files" summary table. # effort_score: false @@ -1120,7 +1119,7 @@ settings: # intentRouting: false # Closed-set intent classifier for unrecognized @loopover mentions -> existing Q&A commands only. Ollama-ONLY, same as chatQa (never uses chatQaFrontierFallback). Co-requisite: commandRateLimitPolicy: hold. Default: false. # Per-repo activation overrides for the converged review features that ship behind a deployment-wide -# LOOPOVER_REVIEW_* env kill-switch (rag/reputation/unifiedComment/safety/grounding/e2eTests/screenshots/ +# LOOPOVER_REVIEW_* env kill-switch (rag/reputation/safety/grounding/e2eTests/screenshots/ # improvementSignal). Each key is `true` (force on for this repo, subject to the env flag still being # enabled), `false` (force off), or omitted (falls back to the LOOPOVER_REVIEW_REPOS allowlist default -- # an operator who sets nothing keeps today's behavior). Exception: `safety` is force-on-only -- an untrusted @@ -1134,14 +1133,13 @@ settings: # `review.visual.enabled: false` as an always-available additional force-off); this key only answers "does # capture run for this repo at all," the same question its siblings answer for their own feature. # `e2eTests` (#4190) and `improvementSignal` (#4738, foundation phase of the #4737 PR-improvement-signal -# epic) remain plain symmetric overrides like rag/reputation/unifiedComment -- neither carries a +# epic) remain plain symmetric overrides like rag/reputation -- neither carries a # security-hardening or full-file-fetch rationale that would justify a force-on/force-off asymmetry. # `improvementSignal` is activation wiring only for now -- no tier reads the resolved # value yet. # features: # rag: true # reputation: false -# unifiedComment: true # safety: true # grounding: true # e2eTests: false diff --git a/CONVERGENCE_RUNBOOK.md b/CONVERGENCE_RUNBOOK.md index 65fbb62f54..a855a806e7 100644 --- a/CONVERGENCE_RUNBOOK.md +++ b/CONVERGENCE_RUNBOOK.md @@ -21,7 +21,7 @@ The old vendor/embed plan is obsolete. The review system now lives in **gittenso - **Single project:** gittensory is the only source repo for the converged review system. - **Native port:** review features live under `src/review/**`, `src/queue/processors.ts`, and related first-party modules. -- **Public comment path:** the unified in-place PR comment is driven by the native bridge and the `LOOPOVER_REVIEW_UNIFIED_COMMENT` flag. +- **Public comment path:** the unified in-place PR comment is rendered unconditionally by the native bridge — it is the only comment-rendering path (the legacy multi-panel renderer and its `LOOPOVER_REVIEW_UNIFIED_COMMENT` flag were retired). - **Infra model:** D1 / Queue / AI / optional Vectorize / optional R2 / optional Browser bindings are declared directly in gittensory. - **Config model:** rollout is controlled by `LOOPOVER_REVIEW_*` flags plus the per-repo allowlist `LOOPOVER_REVIEW_REPOS`. - **Parity model:** parity is measured as a shadow/deploy-time comparison against authoritative legacy audit rows; local checkout validation proves structure and safety, not historical decision identity. @@ -48,7 +48,6 @@ Those are operator actions. This repo should document them clearly and avoid imp Primary native review flags and surfaces: -- `LOOPOVER_REVIEW_UNIFIED_COMMENT` — single public PR comment - `LOOPOVER_REVIEW_SAFETY` — prompt-injection defang + secret scan - `LOOPOVER_REVIEW_GROUNDING` — CI + full-file grounding - `LOOPOVER_REVIEW_RAG` — retrieval-augmented context diff --git a/apps/loopover-ui/src/routes/docs.github-app.tsx b/apps/loopover-ui/src/routes/docs.github-app.tsx index e90b6814e9..e848ce169d 100644 --- a/apps/loopover-ui/src/routes/docs.github-app.tsx +++ b/apps/loopover-ui/src/routes/docs.github-app.tsx @@ -306,11 +306,6 @@ review: new / burst / low-reputation submitter to a deterministic-only review. Internal-only, never surfaced publicly. Per-PR. -
  • - LOOPOVER_REVIEW_UNIFIED_COMMENT — renders the public PR comment as one - in-place unified comment instead of the legacy multi-panel comment. Per-PR; flag-off keeps - the legacy comment byte-identical. -
  • LOOPOVER_REVIEW_OPS — read-only observability: a cron anomaly scan over your own review-outcome data plus a bearer-gated stats aggregate. Global (not scoped by the @@ -338,9 +333,9 @@ review:

    diff --git a/apps/loopover-ui/src/routes/docs.how-reviews-work.tsx b/apps/loopover-ui/src/routes/docs.how-reviews-work.tsx index 349f976f6d..aab9b0ac8e 100644 --- a/apps/loopover-ui/src/routes/docs.how-reviews-work.tsx +++ b/apps/loopover-ui/src/routes/docs.how-reviews-work.tsx @@ -230,8 +230,7 @@ function HowReviewsWork() {

    3. The unified review comment

    The result is rendered as one in-place comment on the PR — updated in place - on each push rather than stacked — when LOOPOVER_REVIEW_UNIFIED_COMMENT is on - for the repo. It has three parts, top to bottom: + on each push rather than stacked. It has three parts, top to bottom:

    @@ -265,7 +266,10 @@ function HowReviewsWork() {

    4. The signals behind a verdict

    -

    Each row in the signal table comes from a named finding. The common ones you will see:

    +

    + Each row in the advisory signals table comes from a named finding. The common ones you will + see: +