Skip to content

Layered-on-registered (M-ALIGN w2): HONEST NEGATIVE — registration breaks at relight; #1560 anchor-fix moves fit2 6.0→7.0#1561

Open
100yenadmin wants to merge 3 commits into
mainfrom
layered-registered
Open

Layered-on-registered (M-ALIGN w2): HONEST NEGATIVE — registration breaks at relight; #1560 anchor-fix moves fit2 6.0→7.0#1561
100yenadmin wants to merge 3 commits into
mainfrom
layered-registered

Conversation

@100yenadmin

Copy link
Copy Markdown
Member

LAYERED-ON-REGISTERED (M-ALIGN wave-2) — HONEST NEGATIVE

The precisely-determined next lever after #1559: the layered multi-pass style treatment (base → sequential DETAIL passes → staging-last, the July-2 breakthrough that produced the incumbent) had never been combined with the registered true-greybox path. Hypothesis: sequential detail passes on the dense fit2 base recover the incumbent's LAYERED brushwork while keeping registration. Base REUSED from #1559 (recall 0.98) — not regenerated.

Verdict: HONEST NEGATIVE — do NOT adopt. The layered treatment recovers brushwork richness but cannot keep registration: the second heavy Gemini relight edit breaks the dimetric camera. Evidence-only; room_recipes/plates_manifest/library untouched, no box deploy. Auto-merge NOT armed.

Per-pass progression (base → p1 material → p2 lighting → p3 scatter)

progression

Per-pass recall trail

pass prompt recall vs base recall vs greybox outcome
BASE (reused fit2) 1.000 0.98 registration floor
p1 material/brushwork STRUCTURE+ADDITIONS-LOCK 0.9348 0.9173 SWEET SPOT — composition locked, richer paint
p2 lighting/chiaroscuro STRUCTURE+ADDITIONS-LOCK 0.6272 0.6242 camera BROKE (recomposed to front-on view, invented wall lanterns)
p2b lighting (camera-lock retry) + hard dimetric-lock 0.7354 0.7362 ⚠️ held camera but relocated the hearth
p3 staging scatter ADDITIONS-LOCK small-scatter 0.7941 0.805 richest paint, inherits p2 camera break, +1 net-new IC flag

Edge-recall is advisory for painterly plates (#1491) and under-reports the break — p3 "0.805 vs greybox" is a fully-recomposed wrong-camera plate. Visual inspection (the strip above) is ground truth.

Why registration breaks: the incumbent's layered pipeline pins the camera with a low-strength z-image img2img base pass (strength 0.5–0.6) before the Gemini detail passes. An all-Gemini instruction-edit chain accumulates composition drift on the 2nd heavy edit — camera flip (p2) or prop relocation (p2b). Only the p1 material-only pass holds registration (0.93), but by the layered order-law it keeps lighting flat and so lacks the incumbent's dramatic staging.

Inverse-coherence (ADDITIONS-LOCK, #1540 detector)

Net-new flags vs base: base/single-pass/p1/p2 = 0, p3 = 1 (s3000→(9,1), s3111→(1,3) — the staging-scatter pass reliably costs one flag). Caveat: p2's "0" is misleading — once the camera drifts off the contract projection the detector measures the wrong cells.

Blind 5-scorer panel — CORRECTED anchoring (issue #1560)

Neutral anchors: disguised PoE2 real-art control (band [6.8,9.2]) + disclosed CAMP house-ref (non-competing room). Incumbent = disclosed comparison, not house_best.

panel

slot median Δ vs control note
control (PoE2, disguised) 8.0 0.0 in-band ✅ panel valid
incumbent (disclosed) 7.5 −0.5
fit2 single-pass (re-scored) 7.0 −1.0
layered p1 (material, registration-safe) 6.0 −2.0 flat lighting
layered p3 (full 3-pass) 5.0 −3.0 2/5 flagged camera_break/incoherent → REJECT

promote.py --batch --dry-run: passed=false · tier=null · control_valid=true (layered_p3 Δ−3.0 < −2.5 adopt floor).

★ Did the anchor fix move the fit2 re-score? YES.

Under #1559's incumbent-as-house_best anchoring the fit2 single-pass was 6.0 / Δ−3.0. Under corrected neutral anchoring it is 7.0 / Δ−1.0 — a +1.0 score and +2.0 delta gain. The incumbent itself scored only 7.5 (Δ−0.5). Issue #1560 is confirmed: the circularity was suppressing challenger deltas by ~2 points, and the #1559 honest-negative was substantially an anchor artifact — the fit2 single-pass sits only 0.5 below the incumbent and, at Δ−1.0, is at statistical parity with real PoE2 art (≥−1.2) under neutral anchoring.

Remaining levers

  • Layered lever REFUTED for the all-Gemini path → trained paint fidelity (Crypt cutover: replace the legacy drift plate with a registered true-greybox crypt (playability-first) #1546) is the sole remaining lever to beat the incumbent's brushwork while keeping registration.
  • But the corrected re-score reframes M-ALIGN wave-2: the "gap to the incumbent" was largely an anchor artifact, not a craft deficit.
  • A non-refuted intermediate lever surfaced: reproduce the incumbent's OWN recipe on the registered path — a low-strength img2img (z-image+LoRA) base pass (camera-pinned) instead of an all-Gemini chain — the exact mechanism that lets the incumbent be layered AND registered.

Spend

Base reused (0 CU) + 8 Gemini-3.1-flash 2K instruction-edits (chain best-of-2 ×3 + camera-lock retry ×2), no training. Well under the 80 CU cap.

Evidence

qa/evidence/layered-reg/findings.json, passes/recall_trail.json, inverse_coherence_netnew.json, panel_verdict.json, layered_visual_gate_panel.json, prompts, progression/panel strips.

🤖 evidence-only; auto-merge NOT armed (armed only on ADOPT).

@coderabbitai

coderabbitai Bot commented Jul 11, 2026

Copy link
Copy Markdown

Warning

Review limit reached

You’ve reached a temporary PR review limit under our Fair Usage Limits Policy.

Your recent review volume is higher than typical usage, so adaptive limits are currently applied.

Next review available in: 29 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: d664ca36-086e-4a2d-ae0a-3c2e5dbef760

📥 Commits

Reviewing files that changed from the base of the PR and between 1385c83 and 1db5682.

⛔ Files ignored due to path filters (23)
  • qa/evidence/layered-reg/chain.log is excluded by !**/*.log
  • qa/evidence/layered-reg/gen_base/base_fit2.png is excluded by !**/*.png
  • qa/evidence/layered-reg/gen_base/fit2_singlepass_s1000.png is excluded by !**/*.png
  • qa/evidence/layered-reg/gen_base/fit2_singlepass_s1111.png is excluded by !**/*.png
  • qa/evidence/layered-reg/p2b.log is excluded by !**/*.log
  • qa/evidence/layered-reg/panel/A.png is excluded by !**/*.png
  • qa/evidence/layered-reg/panel/B.png is excluded by !**/*.png
  • qa/evidence/layered-reg/panel/C.jpg is excluded by !**/*.jpg
  • qa/evidence/layered-reg/panel/D.png is excluded by !**/*.png
  • qa/evidence/layered-reg/panel/HOUSE_REF_camp.png is excluded by !**/*.png
  • qa/evidence/layered-reg/panel/INCUMBENT_tavern.png is excluded by !**/*.png
  • qa/evidence/layered-reg/panel_strip.png is excluded by !**/*.png
  • qa/evidence/layered-reg/passes/p1_material_s1000.png is excluded by !**/*.png
  • qa/evidence/layered-reg/passes/p1_material_s1111.png is excluded by !**/*.png
  • qa/evidence/layered-reg/passes/p2_lighting_s2000.png is excluded by !**/*.png
  • qa/evidence/layered-reg/passes/p2_lighting_s2111.png is excluded by !**/*.png
  • qa/evidence/layered-reg/passes/p3_scatter_s3000.png is excluded by !**/*.png
  • qa/evidence/layered-reg/passes/p3_scatter_s3111.png is excluded by !**/*.png
  • qa/evidence/layered-reg/passes_v2/candidate_s1000.png is excluded by !**/*.png
  • qa/evidence/layered-reg/passes_v2/candidate_s1111.png is excluded by !**/*.png
  • qa/evidence/layered-reg/progression_strip.png is excluded by !**/*.png
  • qa/evidence/layered-reg/tavern_fit2_depth.png is excluded by !**/*.png
  • qa/evidence/layered-reg/tavern_fit2_greybox.png is excluded by !**/*.png
📒 Files selected for processing (19)
  • qa/evidence/layered-reg/chain_layered.py
  • qa/evidence/layered-reg/findings.json
  • qa/evidence/layered-reg/gemini_style_pass.py
  • qa/evidence/layered-reg/gen_base/scenario_meta.json
  • qa/evidence/layered-reg/inverse_coherence_netnew.json
  • qa/evidence/layered-reg/inverse_coherence_netnew.py
  • qa/evidence/layered-reg/layered_visual_gate_panel.json
  • qa/evidence/layered-reg/make_strips.py
  • qa/evidence/layered-reg/nomination.jsonl
  • qa/evidence/layered-reg/panel_mapping.json
  • qa/evidence/layered-reg/panel_verdict.json
  • qa/evidence/layered-reg/pass1_material.txt
  • qa/evidence/layered-reg/pass2_lighting.txt
  • qa/evidence/layered-reg/pass2b_lighting_camlock.txt
  • qa/evidence/layered-reg/pass3_scatter.txt
  • qa/evidence/layered-reg/passes/recall_trail.json
  • qa/evidence/layered-reg/scorer_prompt.md
  • qa/evidence/layered-reg/single_pass_prompt.txt
  • qa/evidence/layered-reg/tavern_fit2.cells.json
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch layered-registered

Comment @coderabbitai help to get the list of available commands.

@100yenadmin 100yenadmin enabled auto-merge (squash) July 11, 2026 07:13
from journey_visual_sweep import inverse_coherence_flags, load_plate_edges # noqa: E402

LR = Path("qa/evidence/layered-reg")
manifest = json.load(open(LR / "tavern_fit2.cells.json"))
@evaos-code-review-bot

evaos-code-review-bot Bot commented Jul 11, 2026

Copy link
Copy Markdown

evaOS review status: completed

PR: #1561 - Layered-on-registered (M-ALIGN w2): HONEST NEGATIVE — registration breaks at relight; #1560 anchor-fix moves fit2 6.0→7.0
Head: 1db56825bf60afb6294313543cc3e6f6f0567c5b
Updated: 2026-07-11T07:32:21.136Z

evaOS review completed for this PR head.

Automation note: agents should wait for this comment to reach completed, stale_head, closed_or_merged_before_review, skipped, or failed before treating evaOS review as settled for this head. provider_deferred means evaOS still intends to retry.

PR URL: #1561

Review URL: #1561 (review)

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 1db56825bf

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@@ -0,0 +1 @@
{"artifact_id": "room_tavern_layered_reg_p3_20260711", "class": "room", "room": "tavern_layered_reg", "source_path": "/Users/lume/WorldOS-worktrees/wt-layered-reg/qa/evidence/layered-reg/layered_visual_gate_panel.json", "note": "LAYERED-ON-REGISTERED — 3-pass layered treatment on the reused fit2 registered base; registration broke at the relight pass"}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Use a portable panel path in the nomination

When this committed nomination is passed to tools/library/promote.py --batch --dry-run, the visual gate reads source_path directly; because it points at the author's Mac worktree under /Users/lume/WorldOS-worktrees/..., any checkout that doesn't have that exact path skips the nomination as score-failed instead of reproducing the recorded passed=false / control_valid=true verdict. The panel JSON is committed beside this file, so this should use a repo-relative path like qa/evidence/layered-reg/layered_visual_gate_panel.json.

Useful? React with 👍 / 👎.

"singlepass_s1000": LR / "gen_base/fit2_singlepass_s1000.png",
"layered_p1_material": LR / "passes/p1_material_s1111.png",
"layered_p2_lighting": LR / "passes/p2_lighting_s2111.png",
"layered_p3_final": LR / "passes/p3_scatter_s3000.png",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Include all p3 seeds in inverse-coherence evidence

The findings claim the staging-scatter pass reliably costs one inverse-coherence flag for both p3 seeds (s3000 and s3111), but this reproducibility script only evaluates p3_scatter_s3000.png. Rerunning the committed evidence therefore cannot reproduce or audit the s3111 -> (1,3) claim, so the “both seeds” reliability conclusion can be stale or wrong unless the second p3 sample is added to targets.

Useful? React with 👍 / 👎.


Take this already-detailed painterly tavern plate and deepen its LIGHTING into dramatic Pillars of Eternity II: Deadfire tenebrism, WITHOUT losing or smoothing any of the hand-painted surface detail and brushwork already present — preserve every wood-grain, stone, plank-wear, tarnish, and soot stroke; only the light and shadow change.

The scene is lit by a SINGLE warm source — the hearth fire at the back — with faint secondary glow from small hanging iron lanterns. Build the chiaroscuro: a concentrated HOT AMBER light pool spilling across the plank floor and near walls immediately around the hearth, warm amber rim-light on the edges of tables, benches, barrels and stone facing the flame, and cool blue-violet BOUNCE on the shadow sides. Push the falloff HARD: the far corners, the side walls, and the near-wall interiors should sink into deep, saturated blue-violet shadow reading as near-black, with only faint low-contrast value steps that still let you trace the layout in the dark, exactly like a real oil-painted tenebrism reference. Throw strong directional CAST SHADOWS from the hearth across the floor and from every table, bench, barrel, and the bar counter. This is NOT an evenly-lit room — it is a dark, crowded tavern hall with one fire. Keep the doorway to the right of the hearth reading as a dark recessed OPEN opening.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Remove lanterns from locked relight prompt

This pass is supposed to test whether a STRUCTURE+ADDITIONS-LOCK relight drifts, and the findings later cite invented lanterns as part of the failure. However this line explicitly asks for secondary glow from small hanging iron lanterns, which are not in the authored object list and contradict the additions-lock below; in runs where lanterns appear, the result is prompt-contaminated rather than a clean lock failure.

Useful? React with 👍 / 👎.

@evaos-code-review-bot evaos-code-review-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Walkthrough

PR: #1561 - Layered-on-registered (M-ALIGN w2): HONEST NEGATIVE — registration breaks at relight; #1560 anchor-fix moves fit2 6.0→7.0
Head: 1db56825bf60afb6294313543cc3e6f6f0567c5b into main. Review event: COMMENT.
Provider: GLM/Z.ai through ZCode (zcode-glm, zcode, model GLM-5.2).

Estimated review effort: 5/5 (~70 min)

Changed Files

File Status Churn Purpose Risk
qa/evidence/layered-reg/chain.log added +120/-0 Changed file Low
qa/evidence/layered-reg/chain_layered.py added +117/-0 Changed file Low
qa/evidence/layered-reg/findings.json added +45/-0 Changed file Moderate: validated P3 finding
qa/evidence/layered-reg/gemini_style_pass.py added +80/-0 Changed file Low
qa/evidence/layered-reg/gen_base/base_fit2.png added +0/-0 Changed file Low
qa/evidence/layered-reg/gen_base/fit2_singlepass_s1000.png added +0/-0 Changed file Low
qa/evidence/layered-reg/gen_base/fit2_singlepass_s1111.png added +0/-0 Changed file Low
qa/evidence/layered-reg/gen_base/scenario_meta.json added +29/-0 Changed file Low
qa/evidence/layered-reg/inverse_coherence_netnew.json added +64/-0 Changed file Low
qa/evidence/layered-reg/inverse_coherence_netnew.py added +50/-0 Changed file Low
qa/evidence/layered-reg/layered_visual_gate_panel.json added +19/-0 Changed file Low
qa/evidence/layered-reg/make_strips.py added +53/-0 Changed file Low
qa/evidence/layered-reg/nomination.jsonl added +1/-0 Changed file Low
qa/evidence/layered-reg/p2b.log added +15/-0 Changed file Low
qa/evidence/layered-reg/panel/A.png added +0/-0 Changed file Low
qa/evidence/layered-reg/panel/B.png added +0/-0 Changed file Low
qa/evidence/layered-reg/panel/C.jpg added +0/-0 Changed file Low
qa/evidence/layered-reg/panel/D.png added +0/-0 Changed file Low
qa/evidence/layered-reg/panel/HOUSE_REF_camp.png added +0/-0 Changed file Low
qa/evidence/layered-reg/panel/INCUMBENT_tavern.png added +0/-0 Changed file Low
qa/evidence/layered-reg/panel_mapping.json added +13/-0 Changed file Low
qa/evidence/layered-reg/panel_strip.png added +0/-0 Changed file Low
qa/evidence/layered-reg/panel_verdict.json added +71/-0 Changed file Low
qa/evidence/layered-reg/pass1_material.txt added +21/-0 Changed file Low
qa/evidence/layered-reg/pass2_lighting.txt added +18/-0 Changed file Low

17 additional changed files omitted from this walkthrough.

Review Signal

Validated inline findings: 2 (P0: 0, P1: 0, P2: 0, P3: 2).
Dropped findings before posting: 0. High-severity findings: 0.

Risk Taxonomy

  • Proof gap: 2

Validation and Proof

1 required validation/proof recommendation(s) selected from changed files.

  • required: Unity editor or Play Mode smoke - WorldOS repo profile implies Unity runtime risk. Proof: Unity editor smoke; Play Mode log; scene/prefab screenshot or recording.
    Proof status: missing - 1 required validation/proof recommendation(s) missing from PR metadata.
    Profile validation hints: Prefer correctness, persistence, CI, release, and regression findings over style-only feedback.
    Profile proof expectations: Look for Unity editor, play-mode, fixture, or focused smoke evidence when runtime behavior changes.

Related Context

Related issues/PRs: #1560, #1559, #1491, #1540, #1546.
Suggested labels: docs.
Suggested reviewers: none from current metadata.

Review Settings Preview

  • Profile: assertive
  • Enabled sections: Review summary (inline_review); Walkthrough (inline_review); Changed-files table (walkthrough); Effort estimate (walkthrough); Related issues/PRs (walkthrough); Suggested labels (suggestion_only); Review status comment (sticky_status)
  • Path instructions: Assets/** - Prioritize scene, prefab, save-state, asset-reference, and gameplay regressions.
  • Path instructions: ProjectSettings/** - Treat build, platform, input, graphics, and release behavior changes as high risk.
  • Label suggestions: unity, gameplay, regression-hardening
  • Reviewer suggestions: none
  • Suggestion behavior: suggestions only; labels and reviewers are not auto-applied.
  • Roadmap-only settings: auto-apply labels; auto-request reviewers; required status checks

Pre-merge checklist

  • Inline comments target current RIGHT-side diff lines.
  • No secret-like content survived into posted inline comments.
  • REQUEST_CHANGES is only used when eligible P0/P1 findings survive validation.
  • Required behavior proof is present or not applicable.
  • Labels and reviewers are suggestions only; the bot did not auto-apply them.

"medians": {"layered_p3": 5.0, "layered_p1": 6.0, "fit2_singlepass": 7.0, "incumbent": 7.5, "control": 8.0},
"deltas_vs_control": {"layered_p3": -3.0, "layered_p1": -2.0, "fit2_singlepass": -1.0, "incumbent": -0.5},
"control_valid": true,
"camera_break_or_incoherent_flags": {"layered_p3": "2/5 scorers flagged camera_break/structure_incoherent", "others": 0}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P3: Camera-break flag count not reconcilable with raw panel_verdict.json

findings.json (line 29) and layered_visual_gate_panel.json (line 18) both state "2/5 scorers flagged camera_break/structure_incoherent" for layered_p3. But panel_verdict.json records camera_break_flags.A_layered_p3 = 1 and structure_incoherent_flags.A_layered_p3 = 1 as two independent per-defect-type counts, with no per-scorer linkage. That raw data only proves '1 scorer flagged camera_break and 1 (possibly the same) scorer flagged structure_incoherent' — it does not by itself establish '2 distinct scorers' or '2/5'. Add a per-scorer defect matrix (scorer_id -> {camera_break, structure_incoherent, ...}) so the 2/5 summary is auditable from the raw evidence rather than asserted. Low impact here because the verdict is REJECT regardless, but the same pattern on an ADOPT panel would be a real proof gap.

Category: Proof gap

Why this matters: The camera-break flag is the load-bearing defect that justifies the negative verdict and the 'registration broke at relight' conclusion. If the raw per-scorer matrix were committed, a reviewer could verify the 2/5 claim directly; without it the strongest evidence in the PR rests on an unverifiable aggregate.

"p2b_lighting_camera_locked_retry": {"prompt": "pass2b_lighting_camlock.txt", "winner": "passes_v2/candidate_s1000.png", "recall_vs_base": 0.7354, "recall_vs_greybox": 0.7362, "note": "packet-sanctioned retry-once with a HARD dimetric camera-lock: HELD the top-down dimetric camera but RELOCATED the hearth (back-center -> right) and round->rectangular tables. Milder break, still a break."},
"p3_scatter": {"prompt": "pass3_scatter.txt", "winner": "passes/p3_scatter_s3000.png", "recall_vs_base": 0.7941, "recall_vs_greybox": 0.805, "note": "richest brushwork of the set (real stone masonry, deep hearth-pool tenebrism, tabletop mugs/bottles) BUT built on the camera-broken p2 -> inherits the camera break; +1 net-new inverse-coherence flag (invented micro-object on authored-clear floor)."}
},
"recall_trail_note": "edge-recall vs base is ADVISORY for soft-edge painterly plates (#1491) — a painterly Gemini pass structurally scores ~0.75-0.81 (measured: single-pass s1111=0.81, s1000=0.75 vs base). The literal packet gate 'abort below 0.95 vs base' would abort EVERY paint pass by construction; the 0.95 masonry gate is on the BASE (met at 0.98). Per-pass styled recall tracked as advisory + relative no-drift; the real per-pass structural gate is inverse-coherence net-new==0. IMPORTANT: edge-recall UNDER-reports the camera break (p3 '0.805 vs greybox' is a fully-recomposed wrong-camera plate) because it is brightness-robust + tolerance-based and inflated by plate busy-ness. Visual inspection is ground truth.",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P3: Advisory-recall framing lowers but does not remove the registration-gate ambiguity

findings.json:16 correctly discloses that edge-recall vs base is advisory and that the p3 winner's 0.805-vs-greybox number masks a full camera recomposition. However the recall_trail.json winner-selection logic (chain_layered.py:102) still picks the MAX recall_vs_base as the pass winner, which is exactly the metric the PR itself says is unreliable for painterly/relit plates. p3_scatter_s3000 won on recall_vs_base=0.7941 vs s3111's 0.5405, yet both are below the 0.95 base floor and both carry the inherited camera break. The winner-selection is therefore not what drove the negative verdict (visual inspection did), but committing a one-line note in recall_trail.json that the 'winner' label is advisory and not a registration pass would prevent a future reader from misreading the trail as a quality ladder. No code/runtime impact.

Category: Proof gap

Why this matters: This PR will be read by future M-ALIGN waves as the record of why the all-Gemini layered chain was rejected. A reader who skips the caveat and trusts recall_trail.json's winner field could re-derive a false positive ('p3 recalled 0.80, almost there').

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant