HOMELAB-2522: fix(forgejo): supersede duplicate untagged formal verdicts #80

Merged
aaron merged 3 commits from plane/HOMELAB-2522-formal-supersession into main 2026-11-03 05:26:19 +00:00
Owner

Closes HOMELAB-2522 (epic HOMELAB-2518, split from HOMELAB-2502 / GITS-433).

Problem

supersedeUntaggedVerdicts only looked FORWARD. Homelab/ghostty-in-the-shell#115 (GITS-430)
recorded the shape it misses: comment #19269 carries model: omniroute/kimi-pool (premium,
exact head 3bab7f7) and 18 s later formal review #1601 restated it in prose —

APPROVED (premium, omniroute/kimi-pool) at exact head 3bab7f… Details in general verdict comment #19269.

— with no ## Verdict: block and no model: line. Read as a second, untagged verdict it kept its
own key (ld-reviewer/unstated) and refused a complete two-model/one-premium panel for a model its
own author had already declared. Nothing an agent may do could cure it: comments cannot be edited,
and posting a verdict on a reviewer's behalf is forbidden.

Contract implemented (from the ticket)

An untagged verdict now yields also to a model-tagged exact-head verdict it NAMES
(comment #N, review N, bare #N) — independent of order, because the citation decides, not
recency. Rails, unchanged:

  • hold is never dropped, cited or not;
  • premium evidence is never traded away (an untagged tier: premium row survives unless its
    counterpart is premium);
  • the named source must be a real duplicate: same author, same head, same stance (a caution
    never yields to the approval it cites), same id namespace (a review id and a comment id are
    different records), model-tagged, and not this row itself;
  • an untagged verdict with no tagged duplicate still refuses. A pure "any earlier tagged verdict
    from the same author supersedes" rule would violate the existing HOMELAB-2411 test
    the latest verdict of a key without a model still refuses (no fail-open) — there, tagged #17450
    followed by uncited untagged #17460 is the reviewer's latest word. Existing supersession tests are
    unchanged.
  • the dangerous panel rule is untouched; every PR #74 blocker change is untouched.

The collapse is reported in the leg-3 refusal and in the passing landing note
(formal review #1601 declares no model but is superseded by the same author's named, earlier comment #19269 (model: omniroute/kimi-pool) at this head — one record, not two), so a passing panel names the
row that yielded.

Red first (fresh origin/main fe7058b)

vitest run tests/landing-model-supersede.test.ts tests/landing-record.test.ts → 4 failed |
47 passed
, both positives per test file red for the recorded reason:

Refusing to merge Homelab/… (head c7a74c7): dangerous-class change with an incomplete review panel.
  verdict comment(s) #1601 do not declare `model: <id>`, so the second-reviewer rule cannot be checked

Negative cases added and green before the change: hold that names its tagged source; untagged review
naming no duplicate; citation to a remark; citation to another author's verdict; citation to a
verdict on another head; concern citing an approval; untagged tier: premium shadow citing a
worker-tier verdict.

Green

  • vitest run (full forgejo suite): 13 files / 362 tests passed.
  • tsc --noEmit: clean.
  • New end-to-end cases in landing-record.test.ts assert the tool outcome: forgejo_merge_pr passes
    with the two declared models and one merge POST, and forgejo_landing_census reports
    verdicts: ["#19267 omniroute/deepseek-flash", "#19269 omniroute/kimi-pool (premium)"] with
    #1601 collapsed (not a third verdict, not an ignored identity).

Real-data replay (read-only GETs against Homelab/ghostty-in-the-shell#115)

Evaluated the LIVE stream through evaluateLandingLock:

  • origin/main code, refusal-time stream (comments 19267/19269, reviews 1600/1601) → ok: false,
    verdict comment(s) #1601 do not declare model: <id> — the recorded #115 refusal reproduced.
  • this branch, same stream → ok: true, approvals #1600 omniroute/deepseek-flash +
    #19269 omniroute/kimi-pool (premium), with the #1601 collapse reported.
  • this branch, live final stream (also comment 19277) → ok: true, unchanged panel; #1601 then
    yields forward to #19277 exactly as HOMELAB-2411 intends.

Files

forgejo/landing.ts, forgejo/tests/landing-model-supersede.test.ts,
forgejo/tests/landing-record.test.ts only.

docs/forgejo.md deliberately untouched: open PR #78 changes that file. The ticket's
documentation row ("formal reviews should still repeat the verdict/model/head grammar; no comment
edits, no proxy verdicts") is written into the supersedeUntaggedVerdicts / citedTaggedVerdict
docstrings here and needs a doc sentence once #78 lands. Collision pre-check: #78
(docs/forgejo.md, forgejo/api.ts, forgejo/index.ts, forgejo/tests/comment-identity-hardening.test.ts,
forgejo/verdict-cli.ts), #79 (plane/**), #68 (pi-swarm-suite/**) — no overlap with this diff.

No self-review, no verdicts, no merge, no Done: the panel reviews this head normally.

Closes HOMELAB-2522 (epic HOMELAB-2518, split from HOMELAB-2502 / GITS-433). ## Problem `supersedeUntaggedVerdicts` only looked FORWARD. Homelab/ghostty-in-the-shell#115 (GITS-430) recorded the shape it misses: comment **#19269** carries `model: omniroute/kimi-pool` (premium, exact head `3bab7f7`) and **18 s later** formal review **#1601** restated it in prose — APPROVED (premium, omniroute/kimi-pool) at exact head 3bab7f… Details in general verdict comment #19269. — with no `## Verdict:` block and no `model:` line. Read as a second, untagged verdict it kept its own key (`ld-reviewer/unstated`) and refused a complete two-model/one-premium panel for a model its own author had already declared. Nothing an agent may do could cure it: comments cannot be edited, and posting a verdict on a reviewer's behalf is forbidden. ## Contract implemented (from the ticket) An untagged verdict now yields **also** to a model-tagged exact-head verdict it NAMES (`comment #N`, `review N`, bare `#N`) — independent of order, because the citation decides, not recency. Rails, unchanged: - **hold is never dropped**, cited or not; - **premium evidence is never traded away** (an untagged `tier: premium` row survives unless its counterpart is premium); - the named source must be a **real duplicate**: same author, same head, **same stance** (a caution never yields to the approval it cites), same id namespace (a review id and a comment id are different records), model-tagged, and not this row itself; - **an untagged verdict with no tagged duplicate still refuses.** A pure "any earlier tagged verdict from the same author supersedes" rule would violate the existing HOMELAB-2411 test `the latest verdict of a key without a model still refuses (no fail-open)` — there, tagged #17450 followed by uncited untagged #17460 is the reviewer's latest word. Existing supersession tests are unchanged. - the dangerous panel rule is untouched; every PR #74 blocker change is untouched. The collapse is **reported** in the leg-3 refusal and in the passing landing note (`formal review #1601 declares no model but is superseded by the same author's named, earlier comment #19269 (model: omniroute/kimi-pool) at this head — one record, not two`), so a passing panel names the row that yielded. ## Red first (fresh `origin/main` fe7058b) `vitest run tests/landing-model-supersede.test.ts tests/landing-record.test.ts` → **4 failed | 47 passed**, both positives per test file red for the recorded reason: Refusing to merge Homelab/… (head c7a74c7): dangerous-class change with an incomplete review panel. verdict comment(s) #1601 do not declare `model: <id>`, so the second-reviewer rule cannot be checked Negative cases added and green before the change: hold that names its tagged source; untagged review naming no duplicate; citation to a remark; citation to another author's verdict; citation to a verdict on another head; concern citing an approval; untagged `tier: premium` shadow citing a worker-tier verdict. ## Green - `vitest run` (full forgejo suite): **13 files / 362 tests passed**. - `tsc --noEmit`: clean. - New end-to-end cases in `landing-record.test.ts` assert the tool outcome: `forgejo_merge_pr` passes with the two declared models and one merge POST, and `forgejo_landing_census` reports `verdicts: ["#19267 omniroute/deepseek-flash", "#19269 omniroute/kimi-pool (premium)"]` with `#1601` collapsed (not a third verdict, not an ignored identity). ## Real-data replay (read-only GETs against Homelab/ghostty-in-the-shell#115) Evaluated the LIVE stream through `evaluateLandingLock`: - **origin/main code, refusal-time stream** (comments 19267/19269, reviews 1600/1601) → `ok: false`, `verdict comment(s) #1601 do not declare model: <id>` — the recorded #115 refusal reproduced. - **this branch, same stream** → `ok: true`, approvals `#1600 omniroute/deepseek-flash` + `#19269 omniroute/kimi-pool (premium)`, with the #1601 collapse reported. - **this branch, live final stream** (also comment 19277) → `ok: true`, unchanged panel; #1601 then yields forward to #19277 exactly as HOMELAB-2411 intends. ## Files `forgejo/landing.ts`, `forgejo/tests/landing-model-supersede.test.ts`, `forgejo/tests/landing-record.test.ts` only. **`docs/forgejo.md` deliberately untouched**: open PR #78 changes that file. The ticket's documentation row ("formal reviews should still repeat the verdict/model/head grammar; no comment edits, no proxy verdicts") is written into the `supersedeUntaggedVerdicts` / `citedTaggedVerdict` docstrings here and needs a doc sentence once #78 lands. Collision pre-check: #78 (`docs/forgejo.md`, `forgejo/api.ts`, `forgejo/index.ts`, `forgejo/tests/comment-identity-hardening.test.ts`, `forgejo/verdict-cli.ts`), #79 (`plane/**`), #68 (`pi-swarm-suite/**`) — no overlap with this diff. No self-review, no verdicts, no merge, no Done: the panel reviews this head normally.
HOMELAB-2522: fix(forgejo): supersede duplicate untagged formal verdicts
All checks were successful
CI / pr-title (pull_request) Successful in 0s
CI / pi-otel-telemetry (pull_request) Successful in 56s
CI / forgejo-ci (pull_request) Successful in 56s
CI / plane (pull_request) Successful in 1m13s
CI / nats-intercom (pull_request) Successful in 21s
CI / mcp-bridge (pull_request) Successful in 23s
CI / refocus (pull_request) Successful in 44s
CI / skill-args (pull_request) Successful in 46s
CI / todo (pull_request) Successful in 46s
CI / ask-user-question (pull_request) Successful in 49s
CI / redact (pull_request) Successful in 28s
CI / pi-friction (pull_request) Successful in 49s
CI / forgejo (pull_request) Successful in 1m10s
CI / pi-swarm-suite (pull_request) Successful in 3m52s
7e87ca8a01
A model-tagged exact-head verdict and a prose-only formal review that
restates it are one record, not two, whichever was posted first.
Homelab/ghostty-in-the-shell#115 shows the shape: comment #19269 declares
`model: omniroute/kimi-pool` (premium) and 18 s later formal review #1601
says "APPROVED (premium, omniroute/kimi-pool) at exact head 3bab7f…
Details in general verdict comment #19269" — no heading, no model line.
Supersession only looked forward, so the shadow kept its own key
(ld-reviewer/unstated) and refused a complete two-model/one-premium panel
for a model its own author had declared. No agent action could cure it.

An untagged verdict now also yields to a model-tagged exact-head verdict it
NAMES (comment #N / review N / bare #N), with the rails unchanged: same
author, same head, same stance, same id namespace, premium never traded
away, and holds never dropped. An untagged verdict that names no tagged
duplicate still refuses — an uncited untagged verdict is the reviewer's own
word, which is the polarity HOMELAB-2411's tests pin.

The collapse is reported in the refusal and in the passing landing note,
so the panel is auditable instead of silently counting one verdict extra.
ld-reviewer approved these changes 2026-11-03 04:24:20 +00:00
Dismissed
ld-reviewer left a comment
Collaborator

Verdict: APPROVED

model: omniroute/deepseek-flash
head: 7e87ca8a01

Fresh independent general review of the exact head (re-fetched immediately before submitting: PR #80 head.sha = 7e87ca8a01a18173971a867cab00e790d581cb2d, branch tip unchanged by fetch, mergeable: true). Base note: origin/main advanced fe7058b8 -> 4be7c075 (HOMELAB-2554 / #79, plane/** + docs/plane.md). No rebase needed: git diff fe7058b8 4be7c075 -- forgejo/ is empty, so the PR diff is the intended 3 files with no revert of #79 in the merge.

Scope (enumerated, not assumed)

Exactly 3 files, +462/-23: forgejo/landing.ts, forgejo/tests/landing-model-supersede.test.ts, forgejo/tests/landing-record.test.ts. Nothing else; no debug leftovers, no skipped/only tests.

What I re-ran myself (not the worker's logs)

  • PR worktree, targeted: vitest run tests/landing-model-supersede.test.ts tests/landing-record.test.ts -> 2 files / 51 tests passed, exit 0.
  • PR worktree, full: vitest run -> 13 files / 362 tests passed, exit 0; tsc --noEmit -> exit 0. PR #74 blocker-fix regressions (H2521-C1..C10, K1..K6, R1..R5 in tests/landing-blockers.test.ts) are inside those 362 and the file is not in the change set.
  • Red-first, independently: copied the head forgejo/ tree to /tmp, overwrote landing.ts with git show fe7058b8:forgejo/landing.ts, reran the PR's two test files against MAIN's implementation -> 4 failed | 47 passed (51), exit 1, and the exact recorded #115 refusal: verdict comment(s) #1601 do not declare model: <id>, so the second-reviewer rule cannot be checked. All seven negative cases stay green on main.
  • Exact-head CI via API on 7e87ca8a01: run #184, 14/14 jobs success.

Contract legs verified (probes of my own against the head)

  • #115 shape cures: tagged comment #19269 + prose-only review #1601 (verbatim body, and the **APPROVED — head …** grammar) -> panel passes on #19267 deepseek-flash + #19269 kimi-pool (premium), collapse named in the note.
  • Order-insensitive: the citation decides, not recency.
  • Hold never dropped: an untagged REQUEST_CHANGES naming its tagged source still refuses on hold(s) are open (early return v.polarity === "hold" untouched).
  • Premium never traded: an untagged tier: premium shadow citing a worker-tier verdict survives; premium->premium collapse leaves the premium leg standing.
  • Unmatched untagged still refuses: no citation, a citation to a remark, to another author, to a non-exact-head verdict, to an anonymous author, or to itself -> all inert, #1601 keeps its key and keeps refusing.
  • Collapse cannot move a panel number: an untagged row contributes no model and no reviewer key, so its collapse can only resolve the missingModel taint. Probed: one tagged model + collapsed shadow still refuses "needs two reviewers on different models"; no premium + collapsed shadow still refuses "no exact-head verdict came from a premium model". models.length < 2 / premium.length === 0 are byte-identical to main.
  • No finding is hidden: an ### Blocker — X / BLOCKER OPEN: X inside a collapsed row still refuses at leg 4 — findOpenBlockers reads input.items, not the ledger.
  • Collapse is reported, never silent: supersessionLines() feeds BOTH the leg-3 refusal and the passing note.

Findings (non-blocking)

H2522-D1 (non-blocker, precision/claim drift). The documented "same id namespace" rail is not enforced. citedVerdictIds pushes a kind-qualified entry and then a second bare {id} from the fallback regex, whose [^\w#&] matches the space before #1600; so !c.kind || c.kind === u.itemKind can never reject, and the kind field is dead weight. Probe: a review whose body says comment #1600, where 1600 is a review (tagged, same author/head/stance), collapses onto it. Not a fail-open for the reasons above — a real model-tagged same-author/same-head/same-stance/premium-safe verdict is still required and no panel number moves — but the PR body's and citedTaggedVerdict's docstring's claim that "a review id and a comment id are different records" is not what the code does. Fix: skip the bare match when the # follows comment(s)/review(s), or delete the qualifier extraction and document the bare-# rule as the real contract.

H2522-D2 (non-blocker, audit surface). forgejo_merge_pr's passing note and the leg-3 refusal name the yielded row, but forgejo_landing_census exposes only verdicts / ignored / collapsed, so an operator scanning the census cannot see that #1601 yielded.

H2522-D3 (informational, owner follow-up). Ticket scope row 4 (docs/forgejo.md grammar sentence) is delivered as landing.ts docstrings only. I verified the stated reason live: open PR #78's branch does change docs/forgejo.md, so the collision is real and the deferral is justified — it needs a follow-up doc PR, which should state D1's actual behaviour. Owner note, not this PR's defect: #78's own description claims it does not touch that file; that text is stale.

No open blocker findings. The dangerous-class panel still needs a second verdict on a different model with one premium — that second verdict is not mine to give and I have not touched any prior verdict. No comment edited, no verdict posted on anyone's behalf, no merge.

## Verdict: APPROVED model: omniroute/deepseek-flash head: 7e87ca8a01a18173971a867cab00e790d581cb2d Fresh independent general review of the exact head (re-fetched immediately before submitting: PR #80 `head.sha` = `7e87ca8a01a18173971a867cab00e790d581cb2d`, branch tip unchanged by fetch, `mergeable: true`). Base note: `origin/main` advanced `fe7058b8` -> `4be7c075` (HOMELAB-2554 / #79, `plane/**` + `docs/plane.md`). **No rebase needed**: `git diff fe7058b8 4be7c075 -- forgejo/` is empty, so the PR diff is the intended 3 files with no revert of #79 in the merge. ### Scope (enumerated, not assumed) Exactly 3 files, +462/-23: `forgejo/landing.ts`, `forgejo/tests/landing-model-supersede.test.ts`, `forgejo/tests/landing-record.test.ts`. Nothing else; no debug leftovers, no skipped/only tests. ### What I re-ran myself (not the worker's logs) - PR worktree, targeted: `vitest run tests/landing-model-supersede.test.ts tests/landing-record.test.ts` -> **2 files / 51 tests passed, exit 0**. - PR worktree, full: `vitest run` -> **13 files / 362 tests passed, exit 0**; `tsc --noEmit` -> **exit 0**. PR #74 blocker-fix regressions (H2521-C1..C10, K1..K6, R1..R5 in `tests/landing-blockers.test.ts`) are inside those 362 and the file is not in the change set. - Red-first, independently: copied the head `forgejo/` tree to `/tmp`, overwrote `landing.ts` with `git show fe7058b8:forgejo/landing.ts`, reran the PR's two test files against MAIN's implementation -> **4 failed | 47 passed (51), exit 1**, and the exact recorded #115 refusal: `verdict comment(s) #1601 do not declare model: <id>, so the second-reviewer rule cannot be checked`. All seven negative cases stay green on main. - Exact-head CI via API on `7e87ca8a01`: run **#184**, **14/14 jobs success**. ### Contract legs verified (probes of my own against the head) - #115 shape cures: tagged comment #19269 + prose-only review #1601 (verbatim body, and the `**APPROVED — head …**` grammar) -> panel passes on `#19267 deepseek-flash` + `#19269 kimi-pool (premium)`, collapse named in the note. - Order-insensitive: the citation decides, not recency. - **Hold never dropped**: an untagged `REQUEST_CHANGES` naming its tagged source still refuses on `hold(s) are open` (early return `v.polarity === "hold"` untouched). - **Premium never traded**: an untagged `tier: premium` shadow citing a worker-tier verdict survives; premium->premium collapse leaves the premium leg standing. - **Unmatched untagged still refuses**: no citation, a citation to a remark, to another author, to a non-exact-head verdict, to an anonymous author, or to itself -> all inert, `#1601` keeps its key and keeps refusing. - **Collapse cannot move a panel number**: an untagged row contributes no `model` and no reviewer key, so its collapse can only resolve the `missingModel` taint. Probed: one tagged model + collapsed shadow still refuses "needs two reviewers on different models"; no premium + collapsed shadow still refuses "no exact-head verdict came from a premium model". `models.length < 2` / `premium.length === 0` are byte-identical to main. - **No finding is hidden**: an `### Blocker — X` / `BLOCKER OPEN: X` inside a collapsed row still refuses at leg 4 — `findOpenBlockers` reads `input.items`, not the ledger. - Collapse is reported, never silent: `supersessionLines()` feeds BOTH the leg-3 refusal and the passing note. ### Findings (non-blocking) **H2522-D1 (non-blocker, precision/claim drift).** The documented "same id namespace" rail is not enforced. `citedVerdictIds` pushes a kind-qualified entry and then a second bare `{id}` from the fallback regex, whose `[^\w#&]` matches the space before `#1600`; so `!c.kind || c.kind === u.itemKind` can never reject, and the `kind` field is dead weight. Probe: a review whose body says `comment #1600`, where 1600 is a *review* (tagged, same author/head/stance), collapses onto it. Not a fail-open for the reasons above — a real model-tagged same-author/same-head/same-stance/premium-safe verdict is still required and no panel number moves — but the PR body's and `citedTaggedVerdict`'s docstring's claim that "a review id and a comment id are different records" is not what the code does. Fix: skip the bare match when the `#` follows `comment(s)`/`review(s)`, or delete the qualifier extraction and document the bare-`#` rule as the real contract. **H2522-D2 (non-blocker, audit surface).** `forgejo_merge_pr`'s passing note and the leg-3 refusal name the yielded row, but `forgejo_landing_census` exposes only `verdicts` / `ignored` / `collapsed`, so an operator scanning the census cannot see that #1601 yielded. **H2522-D3 (informational, owner follow-up).** Ticket scope row 4 (`docs/forgejo.md` grammar sentence) is delivered as `landing.ts` docstrings only. I verified the stated reason live: open PR #78's branch does change `docs/forgejo.md`, so the collision is real and the deferral is justified — it needs a follow-up doc PR, which should state D1's actual behaviour. Owner note, not this PR's defect: #78's own description claims it does not touch that file; that text is stale. No open blocker findings. The dangerous-class panel still needs a second verdict on a different model with one premium — that second verdict is not mine to give and I have not touched any prior verdict. No comment edited, no verdict posted on anyone's behalf, no merge.
aaron force-pushed plane/HOMELAB-2522-formal-supersession from 7e87ca8a01
All checks were successful
CI / pr-title (pull_request) Successful in 0s
CI / pi-otel-telemetry (pull_request) Successful in 56s
CI / forgejo-ci (pull_request) Successful in 56s
CI / plane (pull_request) Successful in 1m13s
CI / nats-intercom (pull_request) Successful in 21s
CI / mcp-bridge (pull_request) Successful in 23s
CI / refocus (pull_request) Successful in 44s
CI / skill-args (pull_request) Successful in 46s
CI / todo (pull_request) Successful in 46s
CI / ask-user-question (pull_request) Successful in 49s
CI / redact (pull_request) Successful in 28s
CI / pi-friction (pull_request) Successful in 49s
CI / forgejo (pull_request) Successful in 1m10s
CI / pi-swarm-suite (pull_request) Successful in 3m52s
to 1d2f7bc794
Some checks are pending
CI / pi-swarm-suite (pull_request) Has started running
CI / pr-title (pull_request) Successful in 1s
CI / skill-args (pull_request) Successful in 42s
CI / forgejo-ci (pull_request) Successful in 45s
CI / pi-otel-telemetry (pull_request) Successful in 58s
CI / mcp-bridge (pull_request) Successful in 20s
CI / plane (pull_request) Successful in 1m22s
CI / forgejo (pull_request) Successful in 1m31s
CI / nats-intercom (pull_request) Successful in 18s
CI / ask-user-question (pull_request) Successful in 51s
CI / refocus (pull_request) Successful in 43s
CI / todo (pull_request) Successful in 55s
CI / redact (pull_request) Successful in 44s
CI / pi-friction (pull_request) Successful in 50s
2026-11-03 04:34:21 +00:00
Compare
Author
Owner

Rebase onto current origin/main — new head 1d2f7bc794bd394c4531e40c7e75390051387241

Not a verdict. No review state, no hold, no approval. Posted by the rebase worker so formal reviews re-pin to the current head.

Rebase

  • Base: origin/main = 9747346db937a0f27ff2717f80daaead74fef8b6 (merge of #78).
  • Previous head 7e87ca8 → new head 1d2f7bc794bd394c4531e40c7e75390051387241, single commit, parent is 9747346d.
  • Clean rebase, zero conflicts. Expected: #78 touched docs/forgejo.md, forgejo/api.ts, forgejo/index.ts, forgejo/tests/comment-identity-hardening.test.ts, forgejo/verdict-cli.ts; #79 touched plane/**; this diff touches none of them.
  • Pushed with lease (--force-with-lease=…:7e87ca8a01a18173971a867cab00e790d581cb2d); result + 7e87ca8...1d2f7bc (forced update).

Diff unchanged in shape — still exactly three files

 forgejo/landing.ts                            | 141 +++++++++++++++---
 forgejo/tests/landing-model-supersede.test.ts | 207 ++++++++++++++++++++++++++
 forgejo/tests/landing-record.test.ts          | 137 +++++++++++++++++
 3 files changed, 462 insertions(+), 23 deletions(-)

docs/forgejo.md still untouched, so the follow-up doc sentence noted in the description remains a separate step after #78 lands.

Verification on the new head (in worktree /home/aaron/repos/pi-extensions-2522)

  • Targeted: vitest run tests/landing-model-supersede.test.ts tests/landing-record.test.ts → 2 files / 51 tests passed (20 + 31).
  • Full forgejo suite: vitest run → 14 files / 385 tests passed. (Description's "13 files / 362 tests" was pre-rebase; the extra file is #78's comment-identity-hardening.test.ts now on main.)
  • tsc --noEmit → clean (exit 0).
  • CI run #187 on 1d2f7bc: green.

Branch left stable and untouched for fresh formal reviews.

## Rebase onto current `origin/main` — new head `1d2f7bc794bd394c4531e40c7e75390051387241` Not a verdict. No review state, no hold, no approval. Posted by the rebase worker so formal reviews re-pin to the current head. **Rebase** - Base: `origin/main` = `9747346db937a0f27ff2717f80daaead74fef8b6` (merge of #78). - Previous head `7e87ca8` → new head **`1d2f7bc794bd394c4531e40c7e75390051387241`**, single commit, parent is `9747346d`. - **Clean rebase, zero conflicts.** Expected: #78 touched `docs/forgejo.md`, `forgejo/api.ts`, `forgejo/index.ts`, `forgejo/tests/comment-identity-hardening.test.ts`, `forgejo/verdict-cli.ts`; #79 touched `plane/**`; this diff touches none of them. - Pushed with lease (`--force-with-lease=…:7e87ca8a01a18173971a867cab00e790d581cb2d`); result `+ 7e87ca8...1d2f7bc (forced update)`. **Diff unchanged in shape — still exactly three files** ``` forgejo/landing.ts | 141 +++++++++++++++--- forgejo/tests/landing-model-supersede.test.ts | 207 ++++++++++++++++++++++++++ forgejo/tests/landing-record.test.ts | 137 +++++++++++++++++ 3 files changed, 462 insertions(+), 23 deletions(-) ``` `docs/forgejo.md` still untouched, so the follow-up doc sentence noted in the description remains a separate step after #78 lands. **Verification on the new head (in worktree `/home/aaron/repos/pi-extensions-2522`)** - Targeted: `vitest run tests/landing-model-supersede.test.ts tests/landing-record.test.ts` → **2 files / 51 tests passed** (20 + 31). - Full forgejo suite: `vitest run` → **14 files / 385 tests passed**. (Description's "13 files / 362 tests" was pre-rebase; the extra file is #78's `comment-identity-hardening.test.ts` now on `main`.) - `tsc --noEmit` → **clean** (exit 0). - CI run #187 on `1d2f7bc`: green. Branch left stable and untouched for fresh formal reviews.
HOMELAB-2522: fix(forgejo): a citation qualifier binds the id namespace
All checks were successful
CI / pr-title (pull_request) Successful in 0s
CI / nats-intercom (pull_request) Successful in 28s
CI / redact (pull_request) Successful in 29s
CI / mcp-bridge (pull_request) Successful in 31s
CI / pi-friction (pull_request) Successful in 38s
CI / skill-args (pull_request) Successful in 52s
CI / forgejo-ci (pull_request) Successful in 56s
CI / todo (pull_request) Successful in 58s
CI / pi-otel-telemetry (pull_request) Successful in 1m2s
CI / ask-user-question (pull_request) Successful in 1m5s
CI / refocus (pull_request) Successful in 1m15s
CI / plane (pull_request) Successful in 1m29s
CI / forgejo (pull_request) Successful in 1m39s
CI / pi-swarm-suite (pull_request) Successful in 4m30s
65fe570c11
citedVerdictIds emitted a kind-qualified entry AND a bare namespace-agnostic
fallback for the same `#N`, so `!c.kind || c.kind === u.itemKind` could never
reject anything: an untagged review whose body says "comment #1600" collapsed
onto REVIEW 1600. The '\#' offsets a qualifier consumed are now excluded from
the bare pass; an unqualified `#19269` stays namespace-agnostic (#115 shape).

Tests (red-first, D1): cross-kind rejection, qualifier-matching-kind collapse,
bare-id acceptance.
Author
Owner

D1 fix round (review §7 D1) — NOT a verdict.

Head: 65fe570c11ad42382758bff225bd1c66021a66b4 (1d2f7bc..65fe570, one push, remote ref verified).

Scope: D1 only. Files: forgejo/landing.ts, forgejo/tests/landing-model-supersede.test.ts. D2 (census index) and docs untouched — HOMELAB-2566 is editing forgejo/index.ts and docs/forgejo.md.

Defect: citedVerdictIds emitted a kind-qualified entry AND a bare {id} fallback for the same #N, so !c.kind || c.kind === u.itemKind could never reject anything — an untagged review body saying comment #1600 collapsed onto review 1600.

Fix: the # offsets consumed by a comments?/reviews? qualifier are recorded and skipped in the bare #N pass. A qualifier binds its namespace; unqualified #19269 stays namespace-agnostic (recorded #115 shape). Author/head/stance/premium rails, holds, blockers and #115 replay unchanged.

Red-first (tests written before the fix):

❯ forgejo/tests/landing-model-supersede.test.ts (23 tests | 1 failed) 82ms
  ❯ HOMELAB-2522-D1 — a citation qualifier binds the id namespace (3)
    × does not collapse an untagged review onto a REVIEW it called `comment #1600`
AssertionError: expected [ { untagged: { …(13) }, …(1) } ] to deeply equal []
     Tests  1 failed | 22 passed (23)

Two sibling rails (qualified review #1600 collapse, bare #1600 acceptance) are green pre- and post-fix.

Green: targeted 23 passed; full forgejo suite 14 files / 388 passed exit 0; npx tsc --noEmit (forgejo/) exit 0.

Evidence: working-files/homelab-2518/HOMELAB-2522-d1-red.log, -d1-green-forgejo.log, -d1-green-full.log, -d1-typecheck.log, HOMELAB-2522-worker.md.

D1 fix round (review §7 D1) — **NOT a verdict**. Head: `65fe570c11ad42382758bff225bd1c66021a66b4` (`1d2f7bc..65fe570`, one push, remote ref verified). Scope: D1 only. Files: `forgejo/landing.ts`, `forgejo/tests/landing-model-supersede.test.ts`. D2 (census index) and docs untouched — HOMELAB-2566 is editing `forgejo/index.ts` and `docs/forgejo.md`. **Defect:** `citedVerdictIds` emitted a kind-qualified entry AND a bare `{id}` fallback for the same `#N`, so `!c.kind || c.kind === u.itemKind` could never reject anything — an untagged review body saying `comment #1600` collapsed onto **review** 1600. **Fix:** the `#` offsets consumed by a `comments?/reviews?` qualifier are recorded and skipped in the bare `#N` pass. A qualifier binds its namespace; unqualified `#19269` stays namespace-agnostic (recorded #115 shape). Author/head/stance/premium rails, holds, blockers and #115 replay unchanged. **Red-first** (tests written before the fix): ``` ❯ forgejo/tests/landing-model-supersede.test.ts (23 tests | 1 failed) 82ms ❯ HOMELAB-2522-D1 — a citation qualifier binds the id namespace (3) × does not collapse an untagged review onto a REVIEW it called `comment #1600` AssertionError: expected [ { untagged: { …(13) }, …(1) } ] to deeply equal [] Tests 1 failed | 22 passed (23) ``` Two sibling rails (qualified `review #1600` collapse, bare `#1600` acceptance) are green pre- and post-fix. **Green:** targeted 23 passed; full forgejo suite 14 files / **388 passed** exit 0; `npx tsc --noEmit` (forgejo/) exit 0. Evidence: `working-files/homelab-2518/HOMELAB-2522-d1-red.log`, `-d1-green-forgejo.log`, `-d1-green-full.log`, `-d1-typecheck.log`, `HOMELAB-2522-worker.md`.
HOMELAB-2522: fix(forgejo): carry the model-supersession collapse into the census
All checks were successful
CI / pr-title (pull_request) Successful in 1s
CI / mcp-bridge (pull_request) Successful in 23s
CI / forgejo-ci (pull_request) Successful in 31s
CI / nats-intercom (pull_request) Successful in 28s
CI / skill-args (pull_request) Successful in 54s
CI / todo (pull_request) Successful in 1m2s
CI / redact (pull_request) Successful in 54s
CI / ask-user-question (pull_request) Successful in 1m3s
CI / refocus (pull_request) Successful in 1m10s
CI / pi-friction (pull_request) Successful in 56s
CI / pi-otel-telemetry (pull_request) Successful in 1m19s
CI / plane (pull_request) Successful in 1m59s
CI / forgejo (pull_request) Successful in 2m15s
CI / pi-swarm-suite (pull_request) Successful in 6m19s
a9b2e5e487
D2 of the general review (HOMELAB-2522-review-deepseek §7): the passing note
and the leg-3 refusal name the untagged row that yielded to the same author's
model-tagged verdict (#115's #1601 -> #19269), but forgejo_landing_census
rendered verdicts/ignored/collapsed only, so the collapse was invisible in the
queue.

- landing.ts: LandingLockResult.record gains an optional modelSuperseded note
  (untagged id + kind + author + polarity, and the by id/kind/model), populated
  wherever the record is built. It is context, never evidence: approvals,
  holds, collapsed and the exact-head rule are untouched.
- index.ts: the census row carries it as structured data and the rendered line
  prints 'YIELDED review #1601 ld-reviewer -> comment #19269 <model>'.
- tests: red-first route-fake census coverage (row + rendered line, and the
  collapse still not counted as a verdict/ignored identity), plus a refusing
  record that carries the collapse while the hold still refuses.

Full forgejo suite 14 files / 390 passed, tsc --noEmit clean.
Author
Owner

D2 fix round (worker note, non-verdict) — head a9b2e5e48790d6c2e84c6ea1d8ed4d888cbb37d4

Scope: D2 of the general review (HOMELAB-2522-review-deepseek §7) only. No
review verdict, no self-review, no merge, no Done; D1 rail and D3 doc untouched.

Defect. supersedeUntaggedVerdicts computes ledger.modelSuperseded and both
the passing note and the leg-3 refusal name the yielded row, but
LandingLockResult.record never carried it — so forgejo_landing_census rendered
verdicts/ignored/collapsed only and the #115 #1601 collapse was invisible
in the queue.

Change (3 files, +145/−1, all in the allowed set).

  • forgejo/landing.ts: record gains optional modelSuperseded: ModelSupersessionNote[]
    — untagged id/kind/author/polarity and by {id,kind,model} — populated at
    all four record sites. Context, never evidence: approvals, holds, collapsed,
    untrusted and exact-head logic are unchanged.
  • forgejo/index.ts: the census row carries the structured notes and the rendered
    line prints YIELDED review #1601 ld-reviewer→comment #19269 omniroute/kimi-pool.
    The type is imported from ./landing.js, so api.ts needed no re-export.
  • forgejo/tests/landing-record.test.ts: red-first route-fake census test (row +
    rendered line, and the collapse is still not a verdict, not an ignored identity,
    not a reviewer-key collapse), plus a refusing record with an open hold that
    carries the collapse while the hold still refuses.

Evidence.

  • Red on 65fe570c: expected undefined to deeply equal [ { id: 1601, kind: 'review', … } ] — 1 failed / 31 skipped.
  • Green: landing-record.test.ts 33 passed; full forgejo suite 14 files / 390 passed (exit 0); npx tsc --noEmit exit 0.
  • CI run #190 on this head: pass (14/14 jobs; forgejo 2m15s, pi-swarm-suite 6m19s).

Logs: working-files/homelab-2518/HOMELAB-2522-d2-{red,green-forgejo,typecheck}.log.
Verdicts remain the reviewers' to post.

## D2 fix round (worker note, non-verdict) — head `a9b2e5e48790d6c2e84c6ea1d8ed4d888cbb37d4` Scope: D2 of the general review (`HOMELAB-2522-review-deepseek` §7) only. No review verdict, no self-review, no merge, no Done; D1 rail and D3 doc untouched. **Defect.** `supersedeUntaggedVerdicts` computes `ledger.modelSuperseded` and both the passing note and the leg-3 refusal name the yielded row, but `LandingLockResult.record` never carried it — so `forgejo_landing_census` rendered `verdicts`/`ignored`/`collapsed` only and the #115 `#1601` collapse was invisible in the queue. **Change (3 files, +145/−1, all in the allowed set).** - `forgejo/landing.ts`: record gains optional `modelSuperseded: ModelSupersessionNote[]` — untagged `id`/`kind`/`author`/`polarity` and `by {id,kind,model}` — populated at all four record sites. Context, never evidence: `approvals`, `holds`, `collapsed`, `untrusted` and exact-head logic are unchanged. - `forgejo/index.ts`: the census row carries the structured notes and the rendered line prints `YIELDED review #1601 ld-reviewer→comment #19269 omniroute/kimi-pool`. The type is imported from `./landing.js`, so `api.ts` needed no re-export. - `forgejo/tests/landing-record.test.ts`: red-first route-fake census test (row + rendered line, and the collapse is still not a verdict, not an ignored identity, not a reviewer-key collapse), plus a refusing record with an open hold that carries the collapse while the hold still refuses. **Evidence.** - Red on `65fe570c`: `expected undefined to deeply equal [ { id: 1601, kind: 'review', … } ]` — 1 failed / 31 skipped. - Green: `landing-record.test.ts` 33 passed; full forgejo suite 14 files / 390 passed (exit 0); `npx tsc --noEmit` exit 0. - CI run #190 on this head: **pass** (14/14 jobs; forgejo 2m15s, pi-swarm-suite 6m19s). Logs: `working-files/homelab-2518/HOMELAB-2522-d2-{red,green-forgejo,typecheck}.log`. Verdicts remain the reviewers' to post.
ld-reviewer approved these changes 2026-11-03 05:13:57 +00:00
Dismissed
ld-reviewer left a comment
Collaborator

Verdict: APPROVED

model: omniroute/deepseek-flash
head: a9b2e5e487

Fresh GENERAL review, dangerous class, entire diff against origin/main
9747346. This head is a new head since the earlier APPROVED (review 1657,
pinned to 7e87ca8a): it carries the rebase onto #78, the D1 namespace fix
(65fe570) and the D2 census fix (a9b2e5e), so all three are in scope here.

Head/base, re-fetched live. PR head = a9b2e5e48790d6c2e84c6ea1d8ed4d888cbb37d4
= dispatched head = worktree HEAD (clean). Base = 9747346… = current
origin/main — nothing to rebase. Mergeable true. Diff is exactly 4 files,
672+/24−: forgejo/landing.ts, forgejo/index.ts,
forgejo/tests/landing-model-supersede.test.ts, forgejo/tests/landing-record.test.ts.

Independent runs (PR worktree, read-only): targeted
landing-model-supersede + landing-record → 2 files / 56 tests passed;
full suite → 14 files / 390 passed; tsc --noEmit → exit 0. PR #74's
landing-blockers.test.ts (79 tests) and #78's
comment-identity-hardening.test.ts (23 tests) are inside those 390 and pass —
no blocker regression, no revert of the merge this branch sits on. CI on the
exact head, re-enumerated myself: run #190, 14/14 jobs success.

Red-first, re-verified by me (tarred forgejo/ to /tmp, swapped old
landing.ts in): against origin/main's landing.ts, HEAD's tests give
8 failed / 48 passed — the positives only, every negative inert. Against
pre-D1 1d2f7bc: exactly the one cross-kind test fails. Against pre-D2
65fe570: exactly the two census/record-carrying tests fail. Worker claims hold.

Contract legs, each checked with my own probes, not the PR's tests:

  • cross-kind rejected (D1): an untagged review saying comment #1600 no longer
    collapses onto REVIEW 1600; comment#1600 with no space is still bound, so the
    bare fallback does not leak.
  • bare #id stays namespace-agnostic (the recorded #115 shape) and still
    collapses; a qualifier that matches the kind still collapses.
  • holds never dropped: a REQUEST_CHANGES citing the tagged approval keeps its
    key and refuses.
  • unmatched / different author / other head / untagged source: all inert.
  • premium never traded: a tier: premium shadow citing a worker-tier source does
    not collapse and stays in approvals.
  • an OPEN blocker is not hidden: the row collapses and leg 4 still refuses by id.
  • a collapse cannot manufacture the second model: after the collapse the panel
    still refuses 1 declared model(s) … needs two reviewers on different models.
  • reported, never silent: the merge note names each yielded row (two shadows →
    both named); the census carries row.modelSuperseded plus
    YIELDED review #1601 ld-reviewer→comment #19269 omniroute/kimi-pool (D2),
    and my probes confirm the collapse rides the hold refusal and the
    incomplete-panel refusal too, while adding no approval, hold or model.

Structural invariant re-read in the code: an untagged row carries no model and
no reviewer key, so a collapse can only clear the missingModel taint — it
cannot add a model, cannot add premium (u.premium || !v.premium), cannot drop a
hold (early return), cannot hide a blocker (leg 4 reads input.items). Panel
arithmetic is byte-identical to main.

No blocker. Non-blocking findings:

H2522-D4 — the citedVerdictIds docstring lists `comments 19269` (no
#) as a supported form; the regex requires the literal #, so that shape
yields no citation at all (citedVerdictIds("details in comments 19269") === [])
and the row keeps refusing. Fail-closed, but this docstring is the only
documentation of the grammar now, so it should not advertise a dead form.

H2522-D5 — "a qualifier BINDS the id it introduces" is not absolute. The
binding needs whitespace between qualifier and #, so the natural
review: #1600 (colon) or a decorated **comment** #1600 falls back to the
namespace-agnostic bare id. Still fail-closed for evidence (the collapse needs a
same-author / same-head / same-stance / premium-safe tagged record and moves no
panel number), so this is a docstring-accuracy defect, not a fail-open: allow an
optional : / markdown emphasis in the qualified regex, or soften the sentence.

Observations, no action needed for this PR: modelSuperseded: sits at 8 spaces
inside a 4-space record literal in landing.ts (cosmetic); the
changedFiles === undefined refusal returns no record at all (pre-existing on
main, so the census cannot carry the collapse there — D2 is complete for every
record that exists); forgejo/index.ts is outside the ticket's
files_may_touch and was added by the D2 finding — I checked and no open PR
touches it now (#81 moved to docs/forgejo.md, verdict*.ts), so no collision.

H2522-D3 carried, still owner follow-up: the ticket's docs row lives only in
landing.ts docstrings. The original reason (#78 held docs/forgejo.md) has
merged away, but PR #81 / HOMELAB-2566 now holds that file, so the deferral
remains justified and must be re-checked after #81 lands; the follow-up sentence
should state D4/D5's actual behaviour.

Dangerous class: this is one of the two required verdicts. The panel still needs
a second exact-head verdict on a different declared model, one of them premium —
this review is omniroute/deepseek-flash and is not premium.

## Verdict: APPROVED model: omniroute/deepseek-flash head: a9b2e5e48790d6c2e84c6ea1d8ed4d888cbb37d4 Fresh GENERAL review, dangerous class, entire diff against `origin/main` `9747346`. This head is a new head since the earlier APPROVED (review `1657`, pinned to `7e87ca8a`): it carries the rebase onto #78, the D1 namespace fix (`65fe570`) and the D2 census fix (`a9b2e5e`), so all three are in scope here. **Head/base, re-fetched live.** PR head = `a9b2e5e48790d6c2e84c6ea1d8ed4d888cbb37d4` = dispatched head = worktree HEAD (clean). Base = `9747346…` = current `origin/main` — nothing to rebase. Mergeable true. Diff is exactly 4 files, 672+/24−: `forgejo/landing.ts`, `forgejo/index.ts`, `forgejo/tests/landing-model-supersede.test.ts`, `forgejo/tests/landing-record.test.ts`. **Independent runs** (PR worktree, read-only): targeted `landing-model-supersede` + `landing-record` → 2 files / 56 tests passed; full suite → 14 files / **390 passed**; `tsc --noEmit` → exit 0. PR #74's `landing-blockers.test.ts` (79 tests) and #78's `comment-identity-hardening.test.ts` (23 tests) are inside those 390 and pass — no blocker regression, no revert of the merge this branch sits on. CI on the exact head, re-enumerated myself: run **#190**, **14/14 jobs success**. **Red-first, re-verified by me** (tarred `forgejo/` to `/tmp`, swapped old `landing.ts` in): against `origin/main`'s `landing.ts`, HEAD's tests give **8 failed / 48 passed** — the positives only, every negative inert. Against pre-D1 `1d2f7bc`: exactly the one cross-kind test fails. Against pre-D2 `65fe570`: exactly the two census/record-carrying tests fail. Worker claims hold. **Contract legs, each checked with my own probes, not the PR's tests:** - cross-kind rejected (D1): an untagged review saying `comment #1600` no longer collapses onto REVIEW 1600; `comment#1600` with no space is still bound, so the bare fallback does not leak. - bare `#id` stays namespace-agnostic (the recorded #115 shape) and still collapses; a qualifier that matches the kind still collapses. - holds never dropped: a `REQUEST_CHANGES` citing the tagged approval keeps its key and refuses. - unmatched / different author / other head / untagged source: all inert. - premium never traded: a `tier: premium` shadow citing a worker-tier source does not collapse and stays in `approvals`. - an OPEN blocker is not hidden: the row collapses and leg 4 still refuses by id. - a collapse cannot manufacture the second model: after the collapse the panel still refuses `1 declared model(s) … needs two reviewers on different models`. - reported, never silent: the merge note names each yielded row (two shadows → both named); the census carries `row.modelSuperseded` plus `YIELDED review #1601 ld-reviewer→comment #19269 omniroute/kimi-pool` (D2), and my probes confirm the collapse rides the hold refusal and the incomplete-panel refusal too, while adding no approval, hold or model. Structural invariant re-read in the code: an untagged row carries no `model` and no reviewer key, so a collapse can only clear the `missingModel` taint — it cannot add a model, cannot add premium (`u.premium || !v.premium`), cannot drop a hold (early return), cannot hide a blocker (leg 4 reads `input.items`). Panel arithmetic is byte-identical to main. **No blocker.** Non-blocking findings: `H2522-D4` — the `citedVerdictIds` docstring lists `` `comments 19269` `` (no `#`) as a supported form; the regex requires the literal `#`, so that shape yields no citation at all (`citedVerdictIds("details in comments 19269") === []`) and the row keeps refusing. Fail-closed, but this docstring is the only documentation of the grammar now, so it should not advertise a dead form. `H2522-D5` — "a qualifier BINDS the id it introduces" is not absolute. The binding needs whitespace between qualifier and `#`, so the natural `review: #1600` (colon) or a decorated `**comment** #1600` falls back to the namespace-agnostic bare id. Still fail-closed for evidence (the collapse needs a same-author / same-head / same-stance / premium-safe tagged record and moves no panel number), so this is a docstring-accuracy defect, not a fail-open: allow an optional `:` / markdown emphasis in the qualified regex, or soften the sentence. Observations, no action needed for this PR: `modelSuperseded:` sits at 8 spaces inside a 4-space record literal in `landing.ts` (cosmetic); the `changedFiles === undefined` refusal returns no record at all (pre-existing on main, so the census cannot carry the collapse there — D2 is complete for every record that exists); `forgejo/index.ts` is outside the ticket's `files_may_touch` and was added by the D2 finding — I checked and no open PR touches it now (#81 moved to `docs/forgejo.md`, `verdict*.ts`), so no collision. `H2522-D3` carried, still owner follow-up: the ticket's docs row lives only in `landing.ts` docstrings. The original reason (#78 held `docs/forgejo.md`) has merged away, but **PR #81 / HOMELAB-2566 now holds that file**, so the deferral remains justified and must be re-checked after #81 lands; the follow-up sentence should state D4/D5's actual behaviour. Dangerous class: this is one of the two required verdicts. The panel still needs a second exact-head verdict on a different declared model, one of them premium — this review is `omniroute/deepseek-flash` and is not premium.
ld-reviewer left a comment
Collaborator

Verdict: APPROVED

model: omniroute/k3.1-pro
head: a9b2e5e487
tier: premium

Fresh independent premium review of the entire four-file diff against 9747346db937a0f27ff2717f80daaead74fef8b6 (+672/-24). Read HOMELAB-2522, the worker's final D1/D2 report, prior review findings, and PR comments. Live head was re-fetched before submission.

Independent verification on the exact head:

  • Targeted landing/model/census plus PR #74 blocker suites: 135/135 passed.
  • Full Forgejo suite: 14 files / 390 tests passed; tsc --noEmit clean.
  • CI run #190: 14/14 jobs pass on this exact head.
  • 13/13 adversarial probes passed: #115 replay and census context; qualified cross-kind rejection; bare-id acceptance; cited holds; unmatched/different-author/different-head refusal; premium-loss refusal; open blockers inside and outside collapsed rows; and no added model/premium evidence from collapse.

D1 now binds qualified citations to comment/review namespaces while bare ids remain agnostic. D2 exposes modelSuperseded in census rows and rendered output without promoting it to evidence. Holds, blockers, exact-head checks, two-model arithmetic, and premium rails remain fail-closed. No open blocker findings.

Non-blocking documentation nit: the docstring's comments 19269 and PR description's review N forms omit #, but the qualified parser requires comment #N / review #N. Direct probes confirm the no-# forms are inert (fail-closed); align wording or parser in follow-up.

No code edits, comment edits/deletions, proxy verdicts, or merge.

## Verdict: APPROVED model: omniroute/k3.1-pro head: a9b2e5e48790d6c2e84c6ea1d8ed4d888cbb37d4 tier: premium Fresh independent premium review of the entire four-file diff against `9747346db937a0f27ff2717f80daaead74fef8b6` (+672/-24). Read HOMELAB-2522, the worker's final D1/D2 report, prior review findings, and PR comments. Live head was re-fetched before submission. Independent verification on the exact head: - Targeted landing/model/census plus PR #74 blocker suites: **135/135 passed**. - Full Forgejo suite: **14 files / 390 tests passed**; `tsc --noEmit` clean. - CI run **#190**: **14/14 jobs pass** on this exact head. - **13/13 adversarial probes passed**: #115 replay and census context; qualified cross-kind rejection; bare-id acceptance; cited holds; unmatched/different-author/different-head refusal; premium-loss refusal; open blockers inside and outside collapsed rows; and no added model/premium evidence from collapse. D1 now binds qualified citations to comment/review namespaces while bare ids remain agnostic. D2 exposes `modelSuperseded` in census rows and rendered output without promoting it to evidence. Holds, blockers, exact-head checks, two-model arithmetic, and premium rails remain fail-closed. No open blocker findings. Non-blocking documentation nit: the docstring's `comments 19269` and PR description's `review N` forms omit `#`, but the qualified parser requires `comment #N` / `review #N`. Direct probes confirm the no-`#` forms are inert (fail-closed); align wording or parser in follow-up. No code edits, comment edits/deletions, proxy verdicts, or merge.
aaron merged commit e2b6f6e42b into main 2026-11-03 05:26:19 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Homelab/pi-extensions!80
No description provided.