TAVERN-REGEN (M-ALIGN wave-2): extent-contract + additions-lock tavern — HONEST NEGATIVE (6.0 vs 7.0 incumbent)#1557
TAVERN-REGEN (M-ALIGN wave-2): extent-contract + additions-lock tavern — HONEST NEGATIVE (6.0 vs 7.0 incumbent)#1557100yenadmin wants to merge 2 commits into
Conversation
…n — HONEST NEGATIVE (6.0 vs 7.0 incumbent) Regenerate the tavern under the fully amended pipeline (extent-contract camera-fit + continuous wall bands split at the door; single Gemini style pass with STRUCTURE-LOCK + ADDITIONS-LOCK; no --layered populate). Result is coherence-correct by construction (paint==grid, door at authored (8,0), 0 invented-furniture flags) but panel-caps at median 6.0 vs the 7.0/8.0 incumbent and 9.0 real-art control (delta -3.0, below promote.py's -2.5 adopt floor -> machine REJECT). FINDING: ADDITIONS-LOCK caps painterly score on a sparse greybox — the incumbent buys its 7.0 from invented walk-through furniture (stools/benches/chandelier/wall-lanterns) with no collision cells, the exact paint!=world defect M-ALIGN eliminates. Both a bright (v1) and tenebrist (v2) style pass plateau at 6.0, so the cap is furniture density, not lighting. Durable fix per the RICHNESS PRINCIPLE = a denser tavern GREYBOX (real collision props), not more style iteration. Base flux.1-dev depth-CN edge-recall 0.9554 (>=0.95 masonry gate). Evidence + galleries + before/after + both 5-scorer panels + promote dry-run under qa/evidence/tavern-regen/. No adoption -> plates_manifest/room_recipes/library untouched; no box deploy.
|
Warning Review limit reachedYou’ve reached a temporary PR review limit under our Fair Usage Limits Policy. Next review available in: 37 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the 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 configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Pro Plus Run ID: 📒 Files selected for processing (1)
📝 WalkthroughWalkthroughAdds a 12×10 tavern geometry and manifest, a Gemini single-image style-pass runner, blind-panel evaluation contracts, pre-gate results, gallery pages, verdict records, and a nomination entry for tavern regeneration evidence. ChangesTavern regeneration evidence
Estimated code review effort: 3 (Moderate) | ~25 minutes Possibly related issues
🚥 Pre-merge checks | ✅ 3 | ❌ 2❌ Failed checks (2 warnings)
✅ Passed checks (3 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
evaOS review status: completedPR: #1557 - TAVERN-REGEN (M-ALIGN wave-2): extent-contract + additions-lock tavern — HONEST NEGATIVE (6.0 vs 7.0 incumbent) evaOS review completed for this PR head. Automation note: agents should wait for this comment to reach PR URL: #1557 Review URL: #1557 (review) |
|
Architect ruling: honest negative ACCEPTED as evidence — merge as evidence-only; incumbent stays. And the path forward is now precisely determined. Three measurements (crypt-replicate 7.1, crypt-rich 6.5×2, tavern-regen 6.0) all show the same law: panels reward painted DENSITY, and truth-constrained rooms lose exactly the density the incumbents faked (invented furniture / drift-baked detail). The fix is not more style passes and not looser locks — it's authoring the richness: TAVERN_FIT v2 adds the furniture the panel liked (benches flanking each table, stools at the bar, shelf clutter, hearth-side woodpile) as REAL props with cells + occlusion, at the density the incumbent PAINTED (~12-14 props vs 6). Geometry→paint content transfer is proven (#1538); the extent contract + additions-lock keep it honest. Sequencing: TAVERN_FIT-V2 regen waits for the #1556 style-pass bake-off (running) so it stacks the density fix WITH the winning style-pass model in one regen. The wave-2 CLEAN%≥95 target routes through that regen. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 00c93799df
ℹ️ 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".
| }, | ||
| "camera": { | ||
| "recipe": "greybox_render_headless (verified vs Unity Quaternion.Euler(30,45,0) <1e-3)", | ||
| "ortho_size": 13.0, |
There was a problem hiding this comment.
Regenerate manifest with camera-fit projection
For this tavern_fit plate the source geometry opts into camera_fit, and greybox_render_headless.render uses a fitted ortho size for that flag, but this manifest still records the fixed ortho_size 13.0 and its screen_bbox values are generated under that fixed projection. Any drift/coherence validation that uses this manifest against the camera-fit tavern image samples the wrong screen regions, so the reported paint==grid / ADDITIONS evidence can be falsely clean; regenerate the manifest with the fitted projection or carry the camera-fit camera through the consumers.
Useful? React with 👍 / 👎.
| @@ -0,0 +1 @@ | |||
| {"artifact_id": "room_tavern_regen_v2_s1000_20260711", "class": "room", "room": "tavern_fit", "source_path": "/Users/lume/WorldOS-worktrees/wt-tavern-regen/qa/evidence/tavern-regen/tavern_regen_visual_gate_panel.json", "note": "TAVERN-REGEN M-ALIGN capstone candidate — extent-contract + additions-lock"} | |||
There was a problem hiding this comment.
Make the nomination source path repo-relative
When tools/library/promote.py --batch --nominations qa/evidence/tavern-regen/nomination.jsonl is run anywhere other than this exact /Users/lume/... worktree, load_visual_panel() treats this absolute path as authoritative and tries to open it directly, so the nomination becomes score-failed even though the panel JSON is committed in this repo. Use the repo-relative qa/evidence/tavern-regen/tavern_regen_visual_gate_panel.json so the dry-run rejection evidence is reproducible in CI/VM/Linux checkouts.
Useful? React with 👍 / 👎.
| "manifest_version": 1, | ||
| "room": "tavern_fit", | ||
| "recipe_key": "tavern", | ||
| "derivation": "derived", |
There was a problem hiding this comment.
Avoid shadowing the live tavern manifest
Because this derived manifest also declares recipe_key: "tavern", the repo-wide drift/coherence gates that pick the first sorted manifest for a recipe now resolve the current tavern plate to tavern_fit.cells.json instead of the existing tavern_truegrey.cells.json (checked _find_manifest_for_recipe in both qa/check_plate_drift.py and qa/check_grid_paint_coherence.py). Until this candidate is adopted, that makes validation of the deployed tavern compare against the unadopted 8,0-door geometry, so remove/rename the recipe key or keep the experiment manifest out of the canonical manifest directory.
Useful? React with 👍 / 👎.
| "protocol": "control-anchored 5-scorer blind panel (fast-worker sonnet, independent). Candidate=TAVERN-REGEN v2 (tavern_fit extent-contract greybox -> flux.1-dev depth-CN base seed222 recall 0.9554 -> single Gemini instruction-edit style pass with STRUCTURE-LOCK+ADDITIONS-LOCK, no external referenceImages, tenebrist best-of-3 seed1000). Blind A=candidate B=incumbent(tavern_truegrey_v1, the deployed 7.0) C=disguised real-art control (PoE2).", | ||
| "scale": "0-10 visual-critic delta-anchored (absolute number is NOT a quality verdict)", | ||
| "candidate_image": "qa/evidence/tavern-regen/gen_style_v2/candidate_s1000.png", |
There was a problem hiding this comment.
Record the model chain in the nominated panel
This panel is the JSON that the nomination points promote.py at, but it only describes the Scenario models in prose and has no model_chain object; _model_registry_gate() reads model_chain only from the nomination or panel JSON, so the #1553 registry hard floor becomes a no-op for this candidate. If this or a follow-up tavern candidate clears the visual score, promotion can proceed without the machine-checked provenance gate the evidence claims passed; add the same structured model_chain block from the plate-loop contract or the nomination.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Actionable comments posted: 12
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@qa/evidence/tavern-regen/findings.json`:
- Around line 27-31: The panel mapping conflates the deployed incumbent with the
house-best anchor, producing misleading incumbent medians and verdict labels. In
the evaluation records and generation logic for the v1_bright and v2_tenebrist
entries, either map B to the canonical deployed 7.0 incumbent and rerun affected
evaluations, or rename B to house_best while recording the canonical 7.0
incumbent separately; update related metadata and downstream verdict labels
consistently.
In `@qa/evidence/tavern-regen/gallery.html.rows.json`:
- Around line 14-18: Drift validation incorrectly reports pass when no
properties were checked. Update the drift result generation and consumers to
emit SKIPPED or INCONCLUSIVE when checked is zero or baseline/fingerprints are
absent, and only set passed to true when at least one property was checked and
all checks passed; apply the same logic to the additional referenced occurrence.
- Around line 8-9: The candidate reference uses an absolute machine-specific
path that fails outside the author’s checkout. Replace the candidate value in
the gallery rows generation output with a repository-relative artifact path, and
update the gallery generation/validation logic to reject absolute paths and
verify referenced artifacts exist before writing the JSON.
In `@qa/evidence/tavern-regen/loop_v2/panel/contract.json`:
- Line 5: Replace the machine-specific absolute path in the contract’s candidate
references with a committed repository-relative path or stable artifact URI,
including the corresponding incumbent reference. Ensure both paths resolve
consistently for any checkout and point to committed QA evidence artifacts.
- Around line 12-16: The drift gate record incorrectly marks an unevaluated
check as passed when checked is 0 and skipped is 11. Update the drift status in
the relevant contract records to an explicit skipped/unknown state, or ensure
drift.passed is only true when baseline fingerprints are available and at least
one property is evaluated.
In `@qa/evidence/tavern-regen/loop_v2/panel/prompts.json`:
- Line 3: The v2 blind rubric and house-style question use the hidden-slot label
“CANDIDATE” despite requesting evaluations for every image. Update the rubric
and related per-image questions in the prompts configuration to use each
`image_N` explicitly, or separate candidate-only scoring from the blind
per-image evaluation so no image’s identity is assumed.
- Line 35: The instructions in the prompt conflict with the defect schema by
requesting YES/NO while requiring booleans. Update the instructions string to
explicitly require JSON boolean true/false values for every defect flag, or
normalize any textual YES/NO responses to booleans before aggregation.
In `@qa/evidence/tavern-regen/loop/panel/contract.json`:
- Line 5: Replace the machine-local absolute paths in the contract’s candidate
fields with committed repository-relative asset paths, including the
corresponding candidate value at the additionally affected location; ensure the
referenced source images are committed and resolvable from any checkout or CI
environment.
- Around line 12-16: The drift result must not report passed when no comparison
was evaluated: update the drift evaluation and serialized contract output to
represent this case as SKIPPED/not_evaluated, or only set passed=true when a
baseline/reference fingerprint exists and at least one check was performed.
Apply the same correction to the corresponding drift fields in both referenced
sections.
In `@qa/evidence/tavern-regen/loop/panel/prompts.json`:
- Line 35: Update the prompt string in the scoring instructions to require
boolean true/false values for every factual defect flag, replacing the
conflicting “plain YES/NO” wording; ensure it matches the JSON contract used by
the defect aggregation harness.
- Line 3: The rubric and house-style questions currently refer only to “the
CANDIDATE,” despite requiring per-image results while slot_to_label is hidden.
Update the prompt entries in the rubric configuration and the corresponding
questions to explicitly evaluate every image_N independently, or add a
post-mapping evaluation that targets the candidate only; ensure scoring and
house_style outputs remain valid for each image.
In `@qa/evidence/tavern-regen/nomination.jsonl`:
- Line 1: Replace the developer-specific absolute source_path in the nomination
artifact with the repo-relative path
qa/evidence/tavern-regen/tavern_regen_visual_gate_panel.json (or a stable
artifact URI), and ensure the referenced file is committed.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: fdc295c6-4349-4b86-9c7f-9a638bb5a671
⛔ Files ignored due to path filters (20)
qa/evidence/tavern-regen/before_after.pngis excluded by!**/*.pngqa/evidence/tavern-regen/gen_base95_s222/room_tavern.pngis excluded by!**/*.pngqa/evidence/tavern-regen/gen_style/candidate_s1000.pngis excluded by!**/*.pngqa/evidence/tavern-regen/gen_style/candidate_s1111.pngis excluded by!**/*.pngqa/evidence/tavern-regen/gen_style/candidate_s1222.pngis excluded by!**/*.pngqa/evidence/tavern-regen/gen_style_v2/candidate_s1000.pngis excluded by!**/*.pngqa/evidence/tavern-regen/gen_style_v2/candidate_s1111.pngis excluded by!**/*.pngqa/evidence/tavern-regen/gen_style_v2/candidate_s1222.pngis excluded by!**/*.pngqa/evidence/tavern-regen/loop/panel/house_best.pngis excluded by!**/*.pngqa/evidence/tavern-regen/loop/panel/image_1.pngis excluded by!**/*.pngqa/evidence/tavern-regen/loop/panel/image_2.jpgis excluded by!**/*.jpgqa/evidence/tavern-regen/loop/panel/image_3.pngis excluded by!**/*.pngqa/evidence/tavern-regen/loop_v2/panel/house_best.pngis excluded by!**/*.pngqa/evidence/tavern-regen/loop_v2/panel/image_1.pngis excluded by!**/*.pngqa/evidence/tavern-regen/loop_v2/panel/image_2.pngis excluded by!**/*.pngqa/evidence/tavern-regen/loop_v2/panel/image_3.jpgis excluded by!**/*.jpgqa/evidence/tavern-regen/tavern_fit_depth.pngis excluded by!**/*.pngqa/evidence/tavern-regen/tavern_fit_greybox.pngis excluded by!**/*.pngqa/evidence/tavern-regen/tavern_fit_normal.pngis excluded by!**/*.pngqa/scores.dbis excluded by!**/*.db
📒 Files selected for processing (24)
qa/evidence/tavern-regen/candidate_pregate.jsonqa/evidence/tavern-regen/findings.jsonqa/evidence/tavern-regen/gallery.htmlqa/evidence/tavern-regen/gallery.html.rows.jsonqa/evidence/tavern-regen/gallery_v2.htmlqa/evidence/tavern-regen/gallery_v2.html.rows.jsonqa/evidence/tavern-regen/gemini_style_pass.pyqa/evidence/tavern-regen/gen_base95_s222/scenario_meta.jsonqa/evidence/tavern-regen/loop/panel/contract.jsonqa/evidence/tavern-regen/loop/panel/prompts.jsonqa/evidence/tavern-regen/loop/panel_mapping.jsonqa/evidence/tavern-regen/loop_v2/panel/contract.jsonqa/evidence/tavern-regen/loop_v2/panel/prompts.jsonqa/evidence/tavern-regen/loop_v2/panel_mapping.jsonqa/evidence/tavern-regen/nomination.jsonlqa/evidence/tavern-regen/plateloop_tavern_fit.jsonqa/evidence/tavern-regen/plateloop_tavern_fit_v2.jsonqa/evidence/tavern-regen/style_pass_prompt.txtqa/evidence/tavern-regen/style_pass_prompt_v2.txtqa/evidence/tavern-regen/tavern_fit_geometry.jsonqa/evidence/tavern-regen/tavern_regen_visual_gate_panel.jsonqa/evidence/tavern-regen/verdict_v1.jsonqa/evidence/tavern-regen/verdict_v2.jsonqa/room_manifests/tavern_fit.cells.json
📜 Review details
⏰ Context from checks skipped due to timeout. (8)
- GitHub Check: CodeRabbit
- GitHub Check: Analyze (python)
- GitHub Check: test
- GitHub Check: viewer-tests
- GitHub Check: Analyze (csharp)
- GitHub Check: Analyze (python)
- GitHub Check: viewer-tests
- GitHub Check: test
🧰 Additional context used
📓 Path-based instructions (1)
**/*
📄 CodeRabbit inference engine (AGENTS.md)
**/*: Treat/Users/lume/WorldOSas the canonical local Mac app/private-art checkout for WorldOS GUI and native-app testing.
Use/Volumes/LEXAR/Codexfor Codex artifacts, scratch files, screenshots, reports, and downloaded CI/VM artifacts.
Before install, build, or test commands, verifypwd; GUI/native app runs must use/Users/lume/WorldOSor an approved same-disk worktree configuration.
Use thecodex/prefix for new branches unless instructed otherwise.
Files:
qa/evidence/tavern-regen/loop_v2/panel_mapping.jsonqa/evidence/tavern-regen/tavern_fit_geometry.jsonqa/evidence/tavern-regen/loop/panel_mapping.jsonqa/evidence/tavern-regen/candidate_pregate.jsonqa/evidence/tavern-regen/loop/panel/prompts.jsonqa/evidence/tavern-regen/nomination.jsonlqa/evidence/tavern-regen/verdict_v2.jsonqa/evidence/tavern-regen/style_pass_prompt_v2.txtqa/evidence/tavern-regen/tavern_regen_visual_gate_panel.jsonqa/evidence/tavern-regen/plateloop_tavern_fit_v2.jsonqa/evidence/tavern-regen/style_pass_prompt.txtqa/evidence/tavern-regen/findings.jsonqa/evidence/tavern-regen/verdict_v1.jsonqa/evidence/tavern-regen/gallery.htmlqa/evidence/tavern-regen/gallery.html.rows.jsonqa/evidence/tavern-regen/gen_base95_s222/scenario_meta.jsonqa/evidence/tavern-regen/loop_v2/panel/prompts.jsonqa/evidence/tavern-regen/gallery_v2.htmlqa/evidence/tavern-regen/plateloop_tavern_fit.jsonqa/evidence/tavern-regen/gemini_style_pass.pyqa/evidence/tavern-regen/loop/panel/contract.jsonqa/evidence/tavern-regen/loop_v2/panel/contract.jsonqa/evidence/tavern-regen/gallery_v2.html.rows.jsonqa/room_manifests/tavern_fit.cells.json
🧠 Learnings (1)
📚 Learning: 2026-07-10T08:23:11.857Z
Learnt from: 100yenadmin
Repo: electricsheephq/WorldOS PR: 1489
File: qa/evidence/plate-sprint/adopt-crypt/crypt_armb_iter3_visual_gate_panel.json:0-0
Timestamp: 2026-07-10T08:23:11.857Z
Learning: In the WorldOS qa evidence JSONs, do not flag `control_image` and `reference_frame` values that intentionally use absolute paths under `/Volumes/LEXAR/WorldOS-Unity-spike/refs/...` (e.g., referencing registered visual controls like `control:visual:...`) as violations of any `/Volumes/LEXAR/Codex` scratch-path guidance—this is the established convention.
Conversely, `candidate_image` and `incumbent_image` must not point at session-scratch locations (e.g., `/Users/lume/worldos-session-notes/...`). Instead, create/commit repo-relative copies under the corresponding `qa/evidence/.../source-plates/` directory for the plate, and update `candidate_image`/`incumbent_image` to reference those committed copies (rather than moving them to `/Volumes/LEXAR/Codex`).
Applied to files:
qa/evidence/tavern-regen/tavern_regen_visual_gate_panel.json
🪛 LanguageTool
qa/evidence/tavern-regen/style_pass_prompt_v2.txt
[style] ~9-~9: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...abels, UI elements, frames, or borders. Do NOT add any characters, people, figures...
(ENGLISH_WORD_REPEAT_BEGINNING_RULE)
qa/evidence/tavern-regen/style_pass_prompt.txt
[style] ~7-~7: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...nsets, UI elements, frames, or borders. Do NOT add any characters, people, figures...
(ENGLISH_WORD_REPEAT_BEGINNING_RULE)
🔇 Additional comments (19)
qa/evidence/tavern-regen/loop/panel_mapping.json (1)
1-17: LGTM!qa/evidence/tavern-regen/loop_v2/panel_mapping.json (1)
1-17: LGTM!qa/evidence/tavern-regen/tavern_regen_visual_gate_panel.json (2)
4-4: 🗄️ Data Integrity & IntegrationDisambiguate the 0.9554 and 0.8555 recall values.
This record describes the v2 candidate as having recall
0.9554, whileloop_v2/panel/contract.jsonrecordsregistration.recall: 0.8555andrecall_pass: false. If 0.9554 is pre-style/base recall and 0.8555 is post-style registration, store both under explicit names; otherwise regenerate the inconsistent evidence.Confidence: 96%.
11-16: 🗄️ Data Integrity & IntegrationDo not treat G6 as a promotion blocker.
tools/library/promote.pyonly gates on_VISUAL_HARD_FLOOR_GATES;G6_luma_staging_lawis a separate stylistic pre-gate, andpregate.blockingis just the recordedrun_pregates()output. This JSON does not make the candidate release-blocking. Confidence: 99%.> Likely an incorrect or invalid review comment.qa/evidence/tavern-regen/gallery.html (1)
28-30: Duplicate of the panel-slot labeling issue infindings.json.This gallery repeats B as the incumbent even though the recorded run says the slot was actually
house_best; regenerate it after correcting the panel mapping.Also applies to: 39-41
qa/evidence/tavern-regen/gallery_v2.html (1)
28-30: Duplicate of the panel-slot labeling issue infindings.json.This gallery repeats B as the incumbent even though the recorded run says the slot was actually
house_best; regenerate it after correcting the panel mapping.Also applies to: 39-41
qa/evidence/tavern-regen/gallery_v2.html.rows.json (2)
8-9: Duplicate of the non-portable artifact-path issue ingallery.html.rows.json.Use a repository-relative candidate path so this evidence remains usable outside the author’s local worktree.
14-18: Duplicate of the vacuous drift-pass issue ingallery.html.rows.json.A drift result with zero checked props must be skipped or inconclusive, never passed.
Also applies to: 75-80
qa/evidence/tavern-regen/verdict_v1.json (1)
1-4: Duplicate of the incumbent-slot labeling issue infindings.json.The recorded B median is not a trustworthy canonical-incumbent score while
house_anchoris reused for that slot.qa/evidence/tavern-regen/verdict_v2.json (1)
1-4: Duplicate of the incumbent-slot labeling issue infindings.json.The recorded B median is not a trustworthy canonical-incumbent score while
house_anchoris reused for that slot.qa/evidence/tavern-regen/candidate_pregate.json (1)
1-74: LGTM!qa/evidence/tavern-regen/plateloop_tavern_fit_v2.json (1)
12-16: 📐 Maintainability & Code Quality | ⚡ Quick winSame control-image path concern as
plateloop_tavern_fit.json.
panel.controlhere is identical to the v1 file and has the same sanctioned-location gap.Source: Coding guidelines
qa/evidence/tavern-regen/tavern_fit_geometry.json (1)
1-1: LGTM!qa/room_manifests/tavern_fit.cells.json (1)
1-2049: LGTM!qa/evidence/tavern-regen/gen_base95_s222/scenario_meta.json (1)
11-11: 🗄️ Data Integrity & Integration | ⚡ Quick winBase-gen prompt requests an unauthored prop (lanterns) — confirm it's exempt from ADDITIONS-LOCK/invented-furniture checks.
Confidence: 55%. This prompt asks the base controlnet pass to paint
"hanging iron lanterns"as part of the scene's key light, buttavern_fit_geometry.json'spropslist has no lantern entry — onlyhearth,bar_counter, 3tables, andbarrels.gemini_style_pass.py's own style-pass prompts (style_pass_prompt.txt/_v2.txt) explicitly forbid adding new lanterns as part of ADDITIONS-LOCK, implying lanterns that already exist from this base-gen step are tolerated as "already present" rather than flagged as invented. If the coherence/invented-furniture check only scans floor-level collision cells, ceiling lanterns are likely exempt and this is fine. But if the check is broader (any unauthored visual object), this base-gen prompt is seeding an object the geometry contract never sanctioned, which is the exact defect class this regen effort is trying to eliminate.Worth a quick sanity check against the coherence/invented-furniture detector's actual scope (does it check ceiling fixtures at all?) before relying on lanterns being silently exempt.
qa/evidence/tavern-regen/plateloop_tavern_fit.json (1)
4-10: 📐 Maintainability & Code Quality | ⚡ Quick winControl-image path lives outside both sanctioned locations.
Confidence: 70%.
panel.control(/Users/lume/worldos-session-notes/plate-sprint/armB/poe2_control.jpg) is neither under the canonical/Users/lume/WorldOScheckout nor/Volumes/LEXAR/Codexartifacts. As per coding guidelines: "Treat/Users/lume/WorldOSas the canonical local Mac app/private-art checkout for WorldOS GUI and native-app testing." and "Use/Volumes/LEXAR/Codexfor Codex artifacts, scratch files, screenshots, reports, and downloaded CI/VM artifacts." This real-art control reference used to score the panel (the 9.0 anchor in the PR's findings) is the one input that can't be reproduced if that ad-hoc notes folder is moved or cleaned up, unlike the worktree-relative candidate/greybox/manifest paths which at least map back to a checkout.Source: Coding guidelines
qa/evidence/tavern-regen/style_pass_prompt.txt (1)
1-8: LGTM!qa/evidence/tavern-regen/style_pass_prompt_v2.txt (1)
1-9: LGTM!qa/evidence/tavern-regen/gemini_style_pass.py (1)
57-65: 🗄️ Data Integrity & IntegrationNo issue:
/generate/custom/{model_id}is the generic Scenario custom-model endpoint. The Gemini edit payload is model-specific, so it does not need the ControlNet fields. Confidence 94%> Likely an incorrect or invalid review comment.
| "protocol": "control-anchored 5-scorer blind panel (fast-worker sonnet, independent). A=candidate B=incumbent(tavern_truegrey_v1, deployed 7.0) C=disguised real-art PoE2 control [6.8,9.2].", | ||
| "v1_bright": {"candidate_median": 6.0, "incumbent_median": 9.0, "control_median": 9.0, "delta_vs_control": -3.0}, | ||
| "v2_tenebrist": {"candidate_median": 6.0, "incumbent_median": 8.0, "control_median": 9.0, "delta_vs_control": -3.0}, | ||
| "control_valid": true, | ||
| "read": "Candidate CAPPED at 6.0 across BOTH lighting variants — the cap is furniture SPARSENESS, not lighting. Every scorer cited missing seating/tableware/hanging-lanterns/clutter." |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift
Separate house_best from the incumbent panel slot.
The record calls B the deployed 7.0 incumbent, but records B medians of 9.0/8.0 and explicitly says house_anchor was reused as the incumbent, inflating the score. This makes the incumbent comparison and downstream verdict labels misleading, even though the control delta remains −3.0. Fix the panel mapping and rerun affected evaluations, or label B as house_best and record the canonical 7.0 separately.
Confidence: 99%.
Also applies to: 44-44
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@qa/evidence/tavern-regen/findings.json` around lines 27 - 31, The panel
mapping conflates the deployed incumbent with the house-best anchor, producing
misleading incumbent medians and verdict labels. In the evaluation records and
generation logic for the v1_bright and v2_tenebrist entries, either map B to the
canonical deployed 7.0 incumbent and rerun affected evaluations, or rename B to
house_best while recording the canonical 7.0 incumbent separately; update
related metadata and downstream verdict labels consistently.
| "candidate": "/Users/lume/WorldOS-worktrees/wt-tavern-regen/qa/evidence/tavern-regen/gen_style/candidate_s1222.png", | ||
| "thumbnail": "data:image/jpeg;base64,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", |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win
Store the candidate reference as a repository-relative path.
The committed candidate value points to /Users/lume/WorldOS-worktrees/..., which cannot be resolved from CI or another checkout. The embedded thumbnail hides this problem in the HTML, but JSON consumers and reruns will still fail. Use a repository-relative artifact path and validate it when generating the gallery.
Confidence: 98%.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@qa/evidence/tavern-regen/gallery.html.rows.json` around lines 8 - 9, The
candidate reference uses an absolute machine-specific path that fails outside
the author’s checkout. Replace the candidate value in the gallery rows
generation output with a repository-relative artifact path, and update the
gallery generation/validation logic to reject absolute paths and verify
referenced artifacts exist before writing the JSON.
| "drift": { | ||
| "passed": true, | ||
| "room": "tavern_fit", | ||
| "checked": 0, | ||
| "skipped": 11, |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win
Do not report a skipped drift check as passed.
drift.passed is true despite checked: 0, skipped: 11, and no baseline or fingerprints. Any consumer gating on this field can treat an entirely unvalidated candidate as verified. Emit an explicit SKIPPED/INCONCLUSIVE status and require at least one checked prop before returning pass.
Confidence: 99%.
Also applies to: 75-80
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@qa/evidence/tavern-regen/gallery.html.rows.json` around lines 14 - 18, Drift
validation incorrectly reports pass when no properties were checked. Update the
drift result generation and consumers to emit SKIPPED or INCONCLUSIVE when
checked is zero or baseline/fingerprints are absent, and only set passed to true
when at least one property was checked and all checks passed; apply the same
logic to the additional referenced occurrence.
| "run_id": "tavern-regen-v2-tenebrist-additionslock-s1000", | ||
| "config_name": "tavern-regen-v2-tenebrist-additionslock-s1000", | ||
| "room": "tavern_fit", | ||
| "candidate": "/Users/lume/WorldOS-worktrees/wt-tavern-regen/qa/evidence/tavern-regen/gen_style_v2/candidate_s1000.png", |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win
Replace machine-local candidate paths with committed repo-relative paths.
The contract embeds /Users/lume/WorldOS-worktrees/wt-tavern-regen/..., which will not resolve outside the author’s checkout. Store a committed repo-relative path or a stable artifact URI instead.
Based on learnings, QA evidence candidate/incumbent references should resolve to committed repo-relative copies rather than machine-local paths.
Confidence: 99%.
Also applies to: 135-135
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@qa/evidence/tavern-regen/loop_v2/panel/contract.json` at line 5, Replace the
machine-specific absolute path in the contract’s candidate references with a
committed repository-relative path or stable artifact URI, including the
corresponding incumbent reference. Ensure both paths resolve consistently for
any checkout and point to committed QA evidence artifacts.
Source: Learnings
| "drift": { | ||
| "passed": true, | ||
| "room": "tavern_fit", | ||
| "checked": 0, | ||
| "skipped": 11, |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win
Represent the skipped drift gate as unevaluated, not passed.
This record says checked: 0, skipped: 11, and “no fingerprintable props”, but still sets drift.passed to true. That creates a false validation signal for downstream consumers. Emit an explicit skipped/unknown state or require baseline fingerprints before passing.
Confidence: 98%.
Also applies to: 74-79
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@qa/evidence/tavern-regen/loop_v2/panel/contract.json` around lines 12 - 16,
The drift gate record incorrectly marks an unevaluated check as passed when
checked is 0 and skipped is 11. Update the drift status in the relevant contract
records to an explicit skipped/unknown state, or ensure drift.passed is only
true when baseline fingerprints are available and at least one property is
evaluated.
| "run_id": "tavern-regen-extentcontract-additionslock-seed1222", | ||
| "config_name": "tavern-regen-extentcontract-additionslock-seed1222", | ||
| "room": "tavern_fit", | ||
| "candidate": "/Users/lume/WorldOS-worktrees/wt-tavern-regen/qa/evidence/tavern-regen/gen_style/candidate_s1222.png", |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win
Replace machine-local candidate paths with committed repo-relative paths.
Both candidate values point into /Users/lume/WorldOS-worktrees/wt-tavern-regen, so this committed contract cannot be resolved in another checkout or CI. Use a committed repo-relative asset path (or add the required source-plate copy and reference it).
Based on learnings, QA evidence candidate/incumbent references should resolve to committed repo-relative copies rather than machine-local paths.
Confidence: 99%.
Also applies to: 135-135
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@qa/evidence/tavern-regen/loop/panel/contract.json` at line 5, Replace the
machine-local absolute paths in the contract’s candidate fields with committed
repository-relative asset paths, including the corresponding candidate value at
the additionally affected location; ensure the referenced source images are
committed and resolvable from any checkout or CI environment.
Source: Learnings
| "drift": { | ||
| "passed": true, | ||
| "room": "tavern_fit", | ||
| "checked": 0, | ||
| "skipped": 11, |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win
Do not mark an unevaluated drift gate as passed.
checked is 0, all 11 props are skipped, and the reason says no fingerprint comparison ran, yet drift.passed is true. A consumer checking this field will treat an unvalidated room as clean. Record an explicit SKIPPED/not_evaluated state, or require a baseline/ref fingerprint before asserting pass.
Confidence: 98%.
Also applies to: 74-79
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@qa/evidence/tavern-regen/loop/panel/contract.json` around lines 12 - 16, The
drift result must not report passed when no comparison was evaluated: update the
drift evaluation and serialized contract output to represent this case as
SKIPPED/not_evaluated, or only set passed=true when a baseline/reference
fingerprint exists and at least one check was performed. Apply the same
correction to the corresponding drift fields in both referenced sections.
| @@ -0,0 +1,36 @@ | |||
| { | |||
| "task": "blind painterly-plate panel \u2014 answer the factual defect checklist, THEN score each image", | |||
| "rubric": "Score the CANDIDATE plate's painterly quality + character-in-scene readiness as the GAP to the reference bar (Pillars of Eternity II: Deadfire). Score what you SEE \u2014 judge the image on its craft, NOT on assumptions about how it was made. Do NOT apply any 'AI-made deserves less' prior; harshness belongs in flaw-finding, not in a scale-suppressing prior. 0-10: 9-10 indistinguishable from the reference bar; 7-8 clearly the same world, minor tells; 5-6 reads as a game but visibly below the bar; 3-4 the illusion is breaking; 0-2 broken. Within-panel comparisons only.", | |||
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
Make the blind rubric and house-style question per-image.
The prompt requires scores and house_style values for every image_N, but both questions address only “the CANDIDATE”. Because slot_to_label is intentionally hidden from scorers, this can skew or invalidate candidate/control medians. Generalize these fields to every image_N, or run a separate post-mapping candidate-only evaluation.
Confidence: 98%.
Also applies to: 26-26, 35-35
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@qa/evidence/tavern-regen/loop/panel/prompts.json` at line 3, The rubric and
house-style questions currently refer only to “the CANDIDATE,” despite requiring
per-image results while slot_to_label is hidden. Update the prompt entries in
the rubric configuration and the corresponding questions to explicitly evaluate
every image_N independently, or add a post-mapping evaluation that targets the
candidate only; ensure scoring and house_style outputs remain valid for each
image.
| ], | ||
| "n_scorers": 5, | ||
| "control_band": 1.2, | ||
| "instructions": "FIRST, for EVERY image_N, answer the factual_defect_checklist \u2014 a plain YES/NO per flag on what you literally SEE, before any aesthetic judgement. THEN independently score every image_N 0-10 on the rubric. Return TEXT-ONLY JSON: {\"defects\": {\"image_1\": {\"on_prop\": true|false, \"t_pose\": ..., \"floating\": ..., \"duplicate\": ..., \"missing\": ...}, ...}, \"scores\": {\"image_1\": N, ...}, \"ranking\": [...best->worst...], \"house_style\": {\"image_N\": \"same-hand|lesser\", ...}, \"notes\": \"...\"}. Any defect flagged true is a FACT the harness surfaces regardless of the aesthetic score. Run 5 independent scorers; the harness takes the per-image MEDIAN. The real-art control's median sets the bar \u2014 a candidate at/above it (within the \u00b11.2 panel noise band) meets the bar." |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
Use one defect-value type consistently.
The instructions say “plain YES/NO”, while the JSON contract requires boolean true|false. A scorer returning "YES"/"NO" can break boolean parsing and defect aggregation. Say “boolean true/false” or explicitly normalize strings in the harness.
Confidence: 95%.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@qa/evidence/tavern-regen/loop/panel/prompts.json` at line 35, Update the
prompt string in the scoring instructions to require boolean true/false values
for every factual defect flag, replacing the conflicting “plain YES/NO” wording;
ensure it matches the JSON contract used by the defect aggregation harness.
| @@ -0,0 +1 @@ | |||
| {"artifact_id": "room_tavern_regen_v2_s1000_20260711", "class": "room", "room": "tavern_fit", "source_path": "/Users/lume/WorldOS-worktrees/wt-tavern-regen/qa/evidence/tavern-regen/tavern_regen_visual_gate_panel.json", "note": "TAVERN-REGEN M-ALIGN capstone candidate — extent-contract + additions-lock"} | |||
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win
Make the nominated source path checkout-independent.
source_path points to a developer-specific absolute worktree, so the nomination cannot be resolved in CI or another checkout. Use the repo-relative path qa/evidence/tavern-regen/tavern_regen_visual_gate_panel.json or a stable artifact URI, and ensure the referenced file is committed.
Confidence: 99%.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@qa/evidence/tavern-regen/nomination.jsonl` at line 1, Replace the
developer-specific absolute source_path in the nomination artifact with the
repo-relative path qa/evidence/tavern-regen/tavern_regen_visual_gate_panel.json
(or a stable artifact URI), and ensure the referenced file is committed.
There was a problem hiding this comment.
Walkthrough
PR: #1557 - TAVERN-REGEN (M-ALIGN wave-2): extent-contract + additions-lock tavern — HONEST NEGATIVE (6.0 vs 7.0 incumbent)
Head: 00c93799df78b660e7316d3164f78dadd8075e96 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/tavern-regen/before_after.png |
added | +0/-0 | Changed file | Low |
qa/evidence/tavern-regen/candidate_pregate.json |
added | +74/-0 | Changed file | Low |
qa/evidence/tavern-regen/findings.json |
added | +58/-0 | Changed file | Low |
qa/evidence/tavern-regen/gallery.html |
added | +46/-0 | Changed file | Low |
qa/evidence/tavern-regen/gallery.html.rows.json |
added | +119/-0 | Changed file | Low |
qa/evidence/tavern-regen/gallery_v2.html |
added | +46/-0 | Changed file | Low |
qa/evidence/tavern-regen/gallery_v2.html.rows.json |
added | +119/-0 | Changed file | Low |
qa/evidence/tavern-regen/gemini_style_pass.py |
added | +80/-0 | Changed file | Low |
qa/evidence/tavern-regen/gen_base95_s222/room_tavern.png |
added | +0/-0 | Changed file | Low |
qa/evidence/tavern-regen/gen_base95_s222/scenario_meta.json |
added | +29/-0 | Changed file | Low |
qa/evidence/tavern-regen/gen_style/candidate_s1000.png |
added | +0/-0 | Changed file | Low |
qa/evidence/tavern-regen/gen_style/candidate_s1111.png |
added | +0/-0 | Changed file | Low |
qa/evidence/tavern-regen/gen_style/candidate_s1222.png |
added | +0/-0 | Changed file | Low |
qa/evidence/tavern-regen/gen_style_v2/candidate_s1000.png |
added | +0/-0 | Changed file | Low |
qa/evidence/tavern-regen/gen_style_v2/candidate_s1111.png |
added | +0/-0 | Changed file | Low |
qa/evidence/tavern-regen/gen_style_v2/candidate_s1222.png |
added | +0/-0 | Changed file | Low |
qa/evidence/tavern-regen/loop/panel/contract.json |
added | +234/-0 | Changed file | Moderate: validated P3 finding |
qa/evidence/tavern-regen/loop/panel/house_best.png |
added | +0/-0 | Changed file | Low |
qa/evidence/tavern-regen/loop/panel/image_1.png |
added | +0/-0 | Changed file | Low |
qa/evidence/tavern-regen/loop/panel/image_2.jpg |
added | +0/-0 | Changed file | Low |
qa/evidence/tavern-regen/loop/panel/image_3.png |
added | +0/-0 | Changed file | Low |
qa/evidence/tavern-regen/loop/panel/prompts.json |
added | +36/-0 | Changed file | Low |
qa/evidence/tavern-regen/loop/panel_mapping.json |
added | +17/-0 | Changed file | Low |
qa/evidence/tavern-regen/loop_v2/panel/contract.json |
added | +234/-0 | Changed file | Elevated: large change |
qa/evidence/tavern-regen/loop_v2/panel/house_best.png |
added | +0/-0 | Changed file | Low |
19 additional changed files omitted from this walkthrough.
Review Signal
Validated inline findings: 1 (P0: 0, P1: 0, P2: 0, P3: 1).
Dropped findings before posting: 1. High-severity findings: 0.
Risk Taxonomy
- API compatibility: 1
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: #1534, #1542.
Suggested labels: none.
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.
| "run_id": "tavern-regen-extentcontract-additionslock-seed1222", | ||
| "config_name": "tavern-regen-extentcontract-additionslock-seed1222", | ||
| "room": "tavern_fit", | ||
| "candidate": "/Users/lume/WorldOS-worktrees/wt-tavern-regen/qa/evidence/tavern-regen/gen_style/candidate_s1222.png", |
There was a problem hiding this comment.
P3: Machine-local absolute paths baked into committed evidence
contract.json (and gallery.html.rows.json) embed '/Users/lume/WorldOS-worktrees/wt-tavern-regen/...' absolute paths in the 'candidate' field. These are non-portable and will be stale on any other machine/checkout. Since this lane is an honest-negative evidence record (no adoption), it's only a reproducibility/readability wart, not a functional defect. Consider stripping/rebasing these to repo-relative paths in the evidence emitter.
Category: API compatibility
Why this matters: Hardcoded /Users/... paths in tracked evidence make the artifacts non-reproducible on CI or any other checkout and leak internal directory structure.
…anel gap Full pipeline (density-law): 14-prop tavern_fit2 greybox -> flux.1-dev depth-CN base (recall 0.98) -> Gemini 3.1 style best-of-3 (STRUCTURE+ADDITIONS-LOCK, density-aware grounding) -> two blind 5-scorer panels -> promote gate. Result: BOTH flat-lit (s1111) and deep-tenebrist (s1000) variants plateau at panel median 6.0 vs incumbent 9.0 (7.0 canon) / control 9.0 -> delta -3.0 < -2.5 adopt bar. promote.py --dry-run: rejected / passed=false / tier=null. Capstone finding: authoring the furniture the #1557 panel LIKED as 14 REAL collision props did NOT move the score (6.0 == #1557's faked-sparse 6.0 == both lighting variants). Density is CLOSED (no sparse/missing flags); the residual gap is (1) house-style anchoring (house_best == incumbent) and (2) the single additions-locked Gemini pass's brushwork ceiling vs the incumbent's layered pipeline. Evidence-only; no adoption; plates_manifest/recipes untouched; no box. Walkslice reconciliation reported (report-only, not changed): door [0,0]->[8,0], +8 props/16 cells, walkable 59->43, spawns unchanged, validate_scene_grid passes.
…n-regen findings (review catch)
|
@coderabbitai review — caveat added to findings.json: slot B was the incumbent reused as house_anchor (the #1560 circularity, which your review independently caught); the candidate verdict stands on the anchor-independent control delta. |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "=== findings.json ==="
cat qa/evidence/tavern-regen/findings.json 2>/dev/null || echo "NOT FOUND"
echo "=== panel_mapping.json (loop_v2) ==="
cat qa/evidence/tavern-regen/loop_v2/panel_mapping.json 2>/dev/null
echo "=== verdict_v2.json ==="
cat qa/evidence/tavern-regen/verdict_v2.json 2>/dev/null
echo "=== tavern_regen_visual_gate_panel.json ==="
cat qa/evidence/tavern-regen/tavern_regen_visual_gate_panel.json 2>/dev/null
echo "=== contract.json loop_v2 panel ==="
cat qa/evidence/tavern-regen/loop_v2/panel/contract.json 2>/dev/nullLength of output: 43384
One nuance worth flagging for The claim "the candidate verdict stands on the anchor-independent control delta" is slightly stronger than the data supports. Looking at There's also a secondary, related risk not mentioned in the caveat: exposing Neither point changes the bottom line — this is already an HONEST NEGATIVE, no adoption/manifest/deploy changes were made, and the −3.0 delta vs. control is well below the −2.5 floor by a comfortable margin, so the verdict direction is robust either way. I'd suggest the [resolve] |
evaOS review status: completedPR: #1557 - TAVERN-REGEN (M-ALIGN wave-2): extent-contract + additions-lock tavern — HONEST NEGATIVE (6.0 vs 7.0 incumbent) evaOS review completed for this PR head. Automation note: agents should wait for this comment to reach PR URL: #1557 Review URL: #1557 (review) |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 0a09424ac4
ℹ️ 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_regen_v2_s1000_20260711", "class": "room", "room": "tavern_fit", "source_path": "/Users/lume/WorldOS-worktrees/wt-tavern-regen/qa/evidence/tavern-regen/tavern_regen_visual_gate_panel.json", "note": "TAVERN-REGEN M-ALIGN capstone candidate — extent-contract + additions-lock"} | |||
There was a problem hiding this comment.
Add the room promotion metadata
When this visual room ever clears the delta floor, promote.py will receive no candidate_plate and no room_ref: _paint_drift_gate() takes its no-op branch without checking the plate, and build_entry() only attaches room_ref when that field is present, producing a room entry that tools/library/library_lint.py rejects. Add repo-relative candidate_plate plus room_ref (recipe key/asset ids) to the nomination so a passing rerun can't bypass the paint-drift hard floor or write an invalid room library entry.
Useful? React with 👍 / 👎.
| "passed": true, | ||
| "room": "tavern_fit", | ||
| "checked": 0, | ||
| "skipped": 11, |
There was a problem hiding this comment.
Seed fingerprints before relying on drift pass
This records the drift gate as passed even though it checked zero props and skipped all 11 because the manifest has no ref_fp and no baseline was supplied. In the promotion path, _paint_drift_gate() calls check_plate_drift() without a baseline, so even after adding candidate_plate a future passing tavern nomination would still clear the paint-drift hard floor without validating any painted prop; seed fingerprints in the manifest or provide a baseline_plate so checked is nonzero.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
Walkthrough
PR: #1557 - TAVERN-REGEN (M-ALIGN wave-2): extent-contract + additions-lock tavern — HONEST NEGATIVE (6.0 vs 7.0 incumbent)
Head: 0a09424ac4767907ca691baf3a2f8f16f79f5f0a 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/tavern-regen/before_after.png |
added | +0/-0 | Changed file | Low |
qa/evidence/tavern-regen/candidate_pregate.json |
added | +74/-0 | Changed file | Low |
qa/evidence/tavern-regen/findings.json |
added | +92/-0 | Changed file | Moderate: validated P2 finding |
qa/evidence/tavern-regen/gallery.html |
added | +46/-0 | Changed file | Low |
qa/evidence/tavern-regen/gallery.html.rows.json |
added | +119/-0 | Changed file | Low |
qa/evidence/tavern-regen/gallery_v2.html |
added | +46/-0 | Changed file | Low |
qa/evidence/tavern-regen/gallery_v2.html.rows.json |
added | +119/-0 | Changed file | Low |
qa/evidence/tavern-regen/gemini_style_pass.py |
added | +80/-0 | Changed file | Low |
qa/evidence/tavern-regen/gen_base95_s222/room_tavern.png |
added | +0/-0 | Changed file | Low |
qa/evidence/tavern-regen/gen_base95_s222/scenario_meta.json |
added | +29/-0 | Changed file | Low |
qa/evidence/tavern-regen/gen_style/candidate_s1000.png |
added | +0/-0 | Changed file | Low |
qa/evidence/tavern-regen/gen_style/candidate_s1111.png |
added | +0/-0 | Changed file | Low |
qa/evidence/tavern-regen/gen_style/candidate_s1222.png |
added | +0/-0 | Changed file | Low |
qa/evidence/tavern-regen/gen_style_v2/candidate_s1000.png |
added | +0/-0 | Changed file | Low |
qa/evidence/tavern-regen/gen_style_v2/candidate_s1111.png |
added | +0/-0 | Changed file | Low |
qa/evidence/tavern-regen/gen_style_v2/candidate_s1222.png |
added | +0/-0 | Changed file | Low |
qa/evidence/tavern-regen/loop/panel/contract.json |
added | +234/-0 | Changed file | Elevated: large change |
qa/evidence/tavern-regen/loop/panel/house_best.png |
added | +0/-0 | Changed file | Low |
qa/evidence/tavern-regen/loop/panel/image_1.png |
added | +0/-0 | Changed file | Low |
qa/evidence/tavern-regen/loop/panel/image_2.jpg |
added | +0/-0 | Changed file | Low |
qa/evidence/tavern-regen/loop/panel/image_3.png |
added | +0/-0 | Changed file | Low |
qa/evidence/tavern-regen/loop/panel/prompts.json |
added | +36/-0 | Changed file | Low |
qa/evidence/tavern-regen/loop/panel_mapping.json |
added | +17/-0 | Changed file | Low |
qa/evidence/tavern-regen/loop_v2/panel/contract.json |
added | +234/-0 | Changed file | Elevated: large change |
qa/evidence/tavern-regen/loop_v2/panel/house_best.png |
added | +0/-0 | Changed file | Low |
19 additional changed files omitted from this walkthrough.
Review Signal
Validated inline findings: 2 (P0: 0, P1: 0, P2: 1, P3: 1).
Dropped findings before posting: 0. High-severity findings: 0.
Risk Taxonomy
- Docs only: 1
- Proof gap: 1
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: #1534, #1542.
Suggested labels: none.
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.
| "1_geometry": "tools/author_room_geometry.py tavern_fit -> tavern_fit_geometry.json (12x10, camera_fit=true, door_cells=[[8,0]], 6 interior props + 5 continuous wall_run segments split at the door; no crenellation).", | ||
| "2_manifest": "tools/derive_room_manifest.py -> qa/room_manifests/tavern_fit.cells.json (derived, 11 props, 59 walkable).", | ||
| "3_greybox": "qa/greybox_render_headless.py --camera-fit --wall-height 5 -> tavern_fit_greybox.png (camera-fit ortho=9.26, 1344x768) + depth/normal sidecars. G1_frame_lit PASS (mean-lum 0.223).", | ||
| "4_registered_base": "flux.1-dev + depth-ControlNet (model_bfl-flux-1-dev), NO LoRA. Best-of-N base seeds at controlStrength 0.85/0.92/0.95; seed222@cs0.95 -> edge-recall 0.9554 CLEARS the >=0.95 masonry gate. gen_base95_s222/room_tavern.png.", |
There was a problem hiding this comment.
P2: Registered-base provenance contradicts its own scenario_meta sidecar (NO LoRA claim vs recorded LoRA @ 0.78)
findings.json line 8 states the registered base was produced with 'flux.1-dev + depth-ControlNet (model_bfl-flux-1-dev), NO LoRA' and attributes the 0.9554 edge-recall plate to gen_base95_s222/room_tavern.png. The provenance sidecar for that exact artifact, qa/evidence/tavern-regen/gen_base95_s222/scenario_meta.json (lines 9-10), records "lora": "model_MB22WaRCBLtfhi5R2CRpHoEL" and "lora_scale": 0.78. The model_chain block in findings.json (lines 10-14) also omits this LoRA id. Either the sidecar records a stale/different run (in which case the adopted base artifact and its scenario_meta are mismatched and the edge-recall claim is mis-attributed), or the NO-LoRA narrative is wrong and the provenance gate's model_chain declaration is incomplete. Reconcile the two: if the LoRA was active, update findings.json + the model_chain block and re-run the promote provenance-gate reasoning; if it was not, the committed scenario_meta.json is the wrong sidecar for room_tavern.png and should be replaced. This matters because the entire lane's credibility rests on paint==world provenance and the RRI/provenance gate treats model_chain as authoritative.
Category: Proof gap
Why this matters: This is a negative (do-not-adopt) result, so there is no shipped-product regression, but the evidence record is the deliverable. A provenance contradiction on the base plate undercuts both the edge-recall attribution (0.9554 clearing the masonry gate) and the ADDITIONS-LOCK narrative, and would resurface as a silent defect if a future lane reuses this base or its scenario_meta as a reference.
| @@ -0,0 +1,92 @@ | |||
| { | |||
| "lane": "TAVERN-REGEN (M-ALIGN wave-2 capstone) \u2014 regenerate the tavern under the fully amended pipeline so paint == world by construction", | |||
| "verdict": "HONEST NEGATIVE \u2014 do NOT adopt. The extent-contract + additions-lock tavern is coherence-correct (paint==grid, 0 invented furniture, door at authored (8,0)) but panel median 6.0 < incumbent (7.0 canonical / 8.0 this-panel) and < real-art control 9.0; delta_candidate_minus_control = -3.0, below promote.py's -2.5 adopt floor. promote.py --dry-run machine verdict: rejected / passed=false / tier=null / 'delta -3.0 < -2.5 adoption bar'.", | |||
There was a problem hiding this comment.
P3: Incumbent panel medians conflict with the anchor-circularity caveat and the stated canonical 7.0
The headline verdict cites 'incumbent (7.0 canonical / 8.0 this-panel)'. verdict_v1.json records incumbent median 9.0 (B=[9,9,9,8,9]) while verdict_v2.json records 8.0 (B=[8,10,8,8,8]) — a 1.0 spread across the two style variants for the same incumbent image reused as house_anchor. The findings' own panel_anchor_caveat (end of file) correctly flags that slot B was the deployed incumbent reused as house_anchor and is inflated. The number is internally consistent with the caveat, but the verdict line quotes three different incumbent values (7.0 canonical, 8.0 this-panel, 9.0 v1) in one sentence without labeling which variant each comes from, which makes the evidence record hard to audit. Consider explicitly tagging each incumbent number with its source (canonical adoption / v1 panel / v2 panel) so the anchor-bias caveat is machine-checkable rather than narrative.
Category: Docs only
Why this matters: Evidence-record auditability. The delta-vs-control (-3.0) verdict is anchor-independent and stands, but anyone re-reading this record (or a future reviewer of #1560) needs to disambiguate the incumbent numbers at a glance.
TAVERN-REGEN (M-ALIGN wave-2 capstone) — HONEST NEGATIVE
Regenerate the tavern under the fully amended pipeline so paint == world by construction (EXTENT CONTRACT §3a + ADDITIONS-LOCK). The regenerated plate is coherence-correct by construction but does not clear the promotion bar, so this PR is an evidence-only honest negative — no adoption,
plates_manifest.json/room_recipes/libraryuntouched, no box deploy.Before / after (vs the current tavern plate)
Left: deployed incumbent (7.0) — rich, but its density is largely invented walk-through furniture (stools, benches, a hanging chandelier, wall lanterns, shelf clutter) with no collision cells. Right: TAVERN-REGEN v2 — every solid object maps to an authored cell; door painted at the authored (8,0).
Verdict
promote.py --dry-runCapstone finding
ADDITIONS-LOCK caps painterly panel score on a sparse greybox. The incumbent buys its score from invented walk-through furniture — the exact paint ≠ world defect M-ALIGN exists to eliminate. An additions-locked plate from the 6-prop
tavern_fitgeometry is coherence-correct but inherently sparser, and both a bright (v1) and tenebrist (v2) style pass plateau at 6.0 → the cap is furniture density, not lighting. Per the RICHNESS PRINCIPLE, the durable fix is a denser tavern greybox (author stools/benches/bar-shelving as real collision props), not more style iteration.Pipeline (all steps ran)
author_room_geometry.py tavern_fit→ camera-fit geometry, door (8,0), continuouswall_runbands split at the door (no crenellation).derive_room_manifest.py→qa/room_manifests/tavern_fit.cells.json.greybox_render_headless.py --camera-fit --wall-height 5(+ depth/normal sidecars). G1_frame_lit PASS.model_bfl-flux-1-dev) — best-of-N seeds, seed222@cs0.95 → recall 0.9554.model_google-gemini-3-1-flash), STRUCTURE-LOCK + ADDITIONS-LOCK verbatim, no externalreferenceImages. Not--layered(its populate pass invents furniture). Best-of-3 × 2 iterations.Model chain
[model_bfl-flux-1-dev, model_google-gemini-3-1-flash]— both registry-approved, provenance gate PASS.Galleries / evidence
qa/evidence/tavern-regen/gallery_v2.html(primary),gallery.html(v1)qa/evidence/tavern-regen/findings.json— full write-up incl. runbook gaps and the walkslice reconciliation (below)Walkslice reconciliation (report-only, per packet — NOT changed here)
tavern_fitauthors the door at (8,0);qa/seed_gfx_walkslice.py:113 TAVERN_BACK_DOOR = [0, 0]is a #1534 workaround (incumbent painted the door on the left wall, outside the grid). IF atavern_fit-based plate is ever adopted, change line 113 to[8, 0]and update the 107-112 comment (the #1534 durable fix lands). Not changed in this lane (honest negative → incumbent plate + its left-wall door remain).Runbook gaps hit
tavern_fit"merged today"; on cold checkout ADDITIONS-LOCK (Style pass invents props with no cells (tavern benches) — recipe clause + inverse gate #1542) is on the unmergedorigin/additions-lockbranch, not the main runbook — its verbatim clause had to be pulled from that branch.wall_runhulls blanket all 120 cells (§2 long-run anti-pattern).qa/evidence/tavern-regen/gemini_style_pass.pywas written — worth promoting totools/.🤖 evidence-only; auto-merge NOT armed (armed only on ADOPT).