Skip to content

TAVERN_FIT-V2 (M-ALIGN capstone retry): density-law tavern (14 real props) — HONEST NEGATIVE (6.0, density refuted as the gap)#1559

Open
100yenadmin wants to merge 4 commits into
mainfrom
tavern-fit2
Open

TAVERN_FIT-V2 (M-ALIGN capstone retry): density-law tavern (14 real props) — HONEST NEGATIVE (6.0, density refuted as the gap)#1559
100yenadmin wants to merge 4 commits into
mainfrom
tavern-fit2

Conversation

@100yenadmin

Copy link
Copy Markdown
Member

TAVERN_FIT-V2 (M-ALIGN wave-2 capstone retry) — HONEST NEGATIVE

Apply the DENSITY LAW to the tavern: the #1557 regen was coherence-perfect but scored 6.0 vs the 7.0 incumbent because a truth-rooted 6-prop greybox is sparser than the incumbent, whose density is invented walk-through furniture (chandelier, lanterns, extra stools — no collision cells). The #1557 architect ruling: author the furniture the panel LIKED as REAL props. Done — the 6-prop tavern_fit interior grown to 14 authored collision props, then regenerated through the fully-amended pipeline.

Verdict: HONEST NEGATIVE — the density hypothesis is REFUTED as the binding gap. Evidence-only; no adoption, plates_manifest.json/room_recipes/library untouched, no box deploy.

Before / after (incumbent · #1557 v1 · v2 density-law ×3 seeds)

before-after

Left→right: deployed incumbent (7.0, faked density) · #1557 v1 (6-prop, 6.0 honest-negative) · TAVERN_FIT-V2 s1000/s1111/s1222 — every solid object now maps to an authored collision cell, and the room reads as dense as the incumbent.

Verdict table

metric value
panel median — s1111 (flat-lit) 6.0
panel median — s1000 (tenebrist) 6.0
incumbent median (these panels) 9.0 · canonical 7.0
real-art control median 9.0 (in-band [6.8,9.2], valid)
delta candidate − control −3.0 → below promote.py's −2.5 adopt floor
invented-furniture / factual-defect flags 0 (both panels, 5×3 images)
base edge-recall (flux depth-CN vs greybox) 0.98 (≥0.95 masonry gate PASS)
promote.py --dry-run rejected / passed=false / tier=null
interior props 14 (up from #1557's 6)
walkability 0 disconnected pockets · door zone clear · 43 clear-floor cells (≥12)
Scenario spend 1 flux base + 3 Gemini style jobs, no training (≪ 100 CU cap)

Capstone finding — density is NOT the binding gap

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 a bright (s1111) and a tenebrist (s1000) style pass. Density is closed (no scorer flagged sparseness/missing furniture). The 5 blind scorers repeatedly named two residual causes:

  1. House-style anchoring — the panel's house_best reference IS the incumbent (byte-identical), so scorers rate the incumbent "same-hand" 9 and any different-pipeline plate "lesser". The gate structurally defines quality as the incumbent's exact hand, so a new-pipeline plate rarely clears it regardless of craft.
  2. Style-pass brushwork ceiling — the single additions-locked Gemini pass reads as "CG-render sheen / tiled planks / flatter single-source lighting" vs the incumbent's layered (z-image+LoRA + multi-Gemini) pipeline.

The untried lever (now viable): run the --layered pipeline — its populate pass was the #1557 no-go on a sparse greybox (invents furniture) but on a 14-prop greybox + STRUCTURE-LOCK it has little room to invent, and it is the exact pipeline that produced the incumbent's richer brushwork.

Pipeline (all steps ran)

  1. author_room_geometry.py tavern_fit2 → 14 interior props + camera-fit + continuous wall_run band split at door (8,0); no crenellation.
  2. derive_room_manifest.pyqa/room_manifests/tavern_fit2.cells.json (43 walkable).
  3. greybox_render_headless.py --camera-fit --wall-height 5 (+ sidecars). G1_frame_lit PASS.
  4. flux.1-dev + depth-ControlNet, NO LoRA (model_bfl-flux-1-dev), cs0.95 seed222 → recall 0.98.
  5. Single Gemini instruction-edit (model_google-gemini-3-1-flash), STRUCTURE-LOCK + ADDITIONS-LOCK + density-aware scene grounding (all 14 props named), no external referenceImages, best-of-3.
  6. Two blind 5-scorer panels (s1111, s1000) vs the deployed 7.0 incumbent + disguised in-band PoE2 control → promote.py real gate.

Model chain [model_bfl-flux-1-dev, model_google-gemini-3-1-flash] — both registry-approved, provenance gate PASS.

Walkslice reconciliation (report-only, per packet — NOT changed here)

IF tavern_fit2 is ever adopted, qa/seed_gfx_walkslice.py needs: door TAVERN_BACK_DOOR [0,0]→[8,0] (the #1534 durable fix); +8 props / 16 impassable cells (footprints verbatim: woodpile (3,1)(4,1), bench_nw (3,5)(4,5), bench_ne (6,5)(7,5), bench_s (7,6)(7,7), stools_bar (8,3)(8,4), shelf_bar (10,2)(10,3), casks_bar (10,4)(10,5), barrels_corner (10,7)(10,8)); walkable 59→43; spawns UNCHANGED (party (4,8)(5,8), npcs (7,8) — none collide); validate_scene_grid still PASSES. Not changed in this lane (honest negative).

Evidence

  • qa/evidence/tavern-fit2/findings.json — full write-up + runbook gaps + walkslice reconciliation
  • qa/evidence/tavern-fit2/gallery.html (s1111), gallery_s1000.html (s1000)
  • panels: qa/evidence/tavern-fit2/loop{,_s1000}/panel_verdict.json; promote panel tavern_fit2_visual_gate_panel.json

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

Eva added 3 commits July 11, 2026 13:14
Author the furniture the #1557 panel LIKED as REAL collision props (the
architect ruling on PR #1557's honest negative): grow the 6-prop tavern_fit
interior to 14 props — benches flanking each of the 3 tables, a bar stool row,
a back-bar shelf + cask cluster, a hearth-side woodpile, and a corner barrel
pair. All LOW/MID kinds (fallen_log/supply_crates/barrel), each a short 2-cell
run for a tight occlusion hull. Camera-fit + wall_run perimeter band kept from
tavern_fit; tavern + tavern_fit stay byte-identical (new room key tavern_fit2).

Validated: 0 disconnected pockets (8-conn flood-fill), door zone (8,0)+(8,1)
clear, 43 clear combat-floor cells (>=12), frame-lit PASS (mean 0.220).
…+ Gemini style best-of-3 + s1111 panel (6.0)

- gen_base/room_tavern.png: flux.1-dev depth-CN, cs0.95 seed222, edge-recall 0.98 vs greybox (>=0.95 masonry gate PASS)
- gen_style/candidate_s{1000,1111,1222}.png: Gemini 3.1 style pass, STRUCTURE+ADDITIONS-LOCK, density-aware grounding
- s1111 blind 5-panel: candidate median 6.0 vs incumbent 8.0 (7.0 canon) vs control 9.0, delta -3.0 (density CLOSED, s1111 flat-lit)
- s1000 (tenebrist) panel staged for the best-of-N re-score
…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.
@coderabbitai

coderabbitai Bot commented Jul 11, 2026

Copy link
Copy Markdown

Review Change Stack

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: 36 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: 2f835cfb-8ba1-4daa-8917-f582cc6dea12

📥 Commits

Reviewing files that changed from the base of the PR and between bf00f02 and 7bcdf54.

📒 Files selected for processing (1)
  • qa/evidence/tavern-fit2/findings.json
📝 Walkthrough

Walkthrough

Adds the tavern_fit2 room variant with denser geometry, a Gemini-based style-pass script, evaluation contracts and prompts, static galleries, and evidence records documenting registration, pregate, and blind-panel results.

Changes

Tavern Fit 2 density-law pipeline

Layer / File(s) Summary
Tavern geometry and manifest
tools/author_room_geometry.py, qa/evidence/tavern-fit2/tavern_fit2_geometry.json, qa/room_manifests/tavern_fit2.cells.json
Adds the denser tavern_fit2 room, registers it for CLI selection, and records its props, walls, camera configuration, and walkable cells.
Candidate generation and style pass
qa/evidence/tavern-fit2/gen_base/*, qa/evidence/tavern-fit2/plateloop_*.json, qa/evidence/tavern-fit2/style_pass_prompt_v2.txt, qa/evidence/tavern-fit2/gemini_style_pass.py
Defines the generation model chain and structure-locked repaint prompt; the script submits seeded jobs, downloads outputs, and downsizes generated images.
Panel contracts and gate evaluation
qa/evidence/tavern-fit2/loop/**, qa/evidence/tavern-fit2/loop_s1000/**, qa/evidence/tavern-fit2/tavern_fit2_visual_gate_panel.json
Adds blind-panel scoring prompts, slot mappings, contracts, verdicts, registration metadata, pregate results, and visual-gate measurements for both lighting variants.
Gallery and evidence publication
qa/evidence/tavern-fit2/gallery*, qa/evidence/tavern-fit2/findings.json, qa/evidence/tavern-fit2/nomination.jsonl
Publishes candidate galleries and records the pipeline outcomes, including the negative panel delta and rejection status.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Sequence Diagram(s)

sequenceDiagram
  participant RoomAuthor
  participant StylePass
  participant EvaluationPanel
  participant EvidenceGallery
  RoomAuthor->>StylePass: provides tavern_fit2 geometry and base image
  StylePass->>EvaluationPanel: supplies generated candidate images
  EvaluationPanel->>EvidenceGallery: records registration, pregate, and panel verdicts
Loading
🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Description check ⚠️ Warning Confidence 92%: The description is informative but misses most required template sections and checklist items. Reformat it to the repository template and add Linked Issue, Tracker/Milestone, CLA, Review Thread State, Validation, Release/Proof Tier, Release Notes, Safety/Rollback, Evidence, and Notes For Next Agent.
Docstring Coverage ⚠️ Warning Docstring coverage is 40.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed Confidence 97%: The title accurately names the tavern density-law retry and its honest-negative outcome.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch tavern-fit2

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

@evaos-code-review-bot

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

Copy link
Copy Markdown

evaOS review status: completed

PR: #1559 - TAVERN_FIT-V2 (M-ALIGN capstone retry): density-law tavern (14 real props) — HONEST NEGATIVE (6.0, density refuted as the gap)
Head: bf00f026d918a6b94314d8886b2c9cc06a729140
Updated: 2026-07-11T06:41:35.664Z

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: #1559

Review URL: #1559 (review)

@coderabbitai coderabbitai 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.

Actionable comments posted: 15

🤖 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-fit2/findings.json`:
- Line 3: The verdict summary incorrectly states the incumbent scored 9.0
this-panel. Update the verdict text to accurately report the incumbent’s
per-panel results: 8.0 for s1111 and 9.0 for s1000, or explicitly identify which
panel the 9.0 refers to; ensure the corrected values are consistent with the
recorded panel entries.

In `@qa/evidence/tavern-fit2/gallery.html.rows.json`:
- Around line 14-18: Update the drift records in gallery.html.rows.json and
gallery_s1000.html.rows.json so zero checked props with all props skipped are
represented as not_evaluated (or null), never passed; adjust the associated
gate/consumer logic to distinguish not_evaluated from a successful pass.

In `@qa/evidence/tavern-fit2/gemini_style_pass.py`:
- Around line 32-37: The _downscale function currently stretches images to
_PLATE_W × _PLATE_H without preserving aspect ratio. Update _downscale to
validate the input aspect ratio and reject unexpected ratios, or crop/pad the
image to the target dimensions while preserving geometry before saving; retain
RGB conversion and the existing size check.
- Around line 45-47: Validate the parsed `args.n` value in the argument-handling
flow before any uploads or job submissions; if it is less than 1, call
`argparse.error(...)` with a clear message and prevent execution from
continuing. Use the existing `--n` definition and main execution entry point to
locate the validation.

In `@qa/evidence/tavern-fit2/loop_s1000/panel_verdict.json`:
- Around line 2-10: The panel verdict omits the required house-style assessment
for candidate A. Add raw per-image house_style results and an aggregate
candidate-level house_style result to the verdict, then propagate the same data
into tavern_fit2_visual_gate_panel.json, following the schema required by
loop_s1000/panel/prompts.json.

In `@qa/evidence/tavern-fit2/loop_s1000/panel/prompts.json`:
- Line 35: The prompt’s ±1.2 control-band acceptance rule is inconsistent with
the gate’s delta >= 0 check. Update the gate logic in felt_rest_panel.py to read
and apply the declared control_band value, ensuring candidates within the
permitted band pass consistently with the prompt, or remove the band language
from prompts.json. Add regression tests covering candidates exactly at, inside,
and outside the cutoff boundary.

In `@qa/evidence/tavern-fit2/loop/panel/contract.json`:
- Around line 12-16: Update the drift aggregation logic that produces the
contract JSON so any zero-evaluation run (`checked=0`), including all-`SKIP`
props or missing `ref_fp`/`--baseline`, is emitted as `SKIPPED` or
`INCONCLUSIVE` rather than `passed: true`; keep the gate non-passing until
fingerprint data is available, covering both tavern-fit2 loop variants.

In `@qa/evidence/tavern-fit2/loop/panel/prompts.json`:
- Around line 4-24: The factual_defect_checklist lacks a measurable check
supporting the later “Density gap CLOSED” verdict. Add an explicit
density/occupancy checklist flag with criteria for furniture count, spatial
coverage, or crowding, and propagate its result into panel_verdict.json;
alternatively remove the unsupported density conclusion from the verdict.
- Around line 26-35: The required house_style result is requested by the scorer
but discarded during verdict ingestion and gallery persistence. Update the
verdict schema and ingest_verdict() to validate and retain each image’s
house_style classification, include it in the committed verdict, and persist it
in gallery rows so the house-style regression rule remains available.

In `@qa/evidence/tavern-fit2/nomination.jsonl`:
- Line 1: The nomination record uses a machine-specific absolute source_path
that cannot be resolved in other checkouts. Update the source_path field in the
nomination entry to the repo-relative path
qa/evidence/tavern-fit2/tavern_fit2_visual_gate_panel.json, preserving the rest
of the record.

In `@qa/evidence/tavern-fit2/plateloop_tavern_fit2_s1000.json`:
- Around line 4-9: Remove workstation-specific absolute paths from the
manifest’s generate, registration, and panel fields. Replace repository
artifacts with repo-relative paths, and move the external panel.control image to
an explicit override key consistent with sibling contract.json manifests;
preserve the existing manifest structure and values otherwise.

In `@qa/evidence/tavern-fit2/plateloop_tavern_fit2.json`:
- Around line 4-9: The QA contracts contain machine-specific absolute paths,
making replay impossible elsewhere. In both plateloop_tavern_fit2.json and
plateloop_tavern_fit2_s1000.json, replace candidate, greybox, manifest,
incumbent, and house_anchor paths with repository-relative references under
qa/evidence; move the external control image to a configurable override outside
the committed fixtures.
- Around line 11-16: The declared model chain omits the base LoRA used by this
plate. Update the model_chain loras field to include
model_MB22WaRCBLtfhi5R2CRpHoEL with lora_scale 0.78, or ensure plate_loop
receives the candidate’s actual scenario_meta.json before promotion so the
complete chain and provenance are preserved.

In `@qa/room_manifests/tavern_fit2.cells.json`:
- Around line 11-19: The tavern_fit2 manifest uses a fixed camera while its
geometry opts into camera_fit, causing derivation and validation to use
inconsistent projection paths. Either remove the camera_fit setting from
tavern_fit2_geometry.json and regenerate the manifest, or update
derive_room_manifest.py, check_plate_drift.py, and check_grid_paint_coherence.py
to propagate and use the fitted orthographic camera consistently.

In `@tools/author_room_geometry.py`:
- Around line 346-350: The walkability comment incorrectly claims row 8 is fully
open while barrels_corner occupies [10,8] and is folded into impassable geometry
by _geometry(). Move the barrel pair to a valid non-circulation location outside
row 8, updating the barrels_corner definition and any dependent validation or
placement metadata while preserving connectivity.
🪄 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: e5a29cb2-e369-481f-bf32-7963ce6760e0

📥 Commits

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

⛔ Files ignored due to path filters (28)
  • qa/evidence/tavern-fit2/before_after.png is excluded by !**/*.png
  • qa/evidence/tavern-fit2/gen_base/room_tavern.png is excluded by !**/*.png
  • qa/evidence/tavern-fit2/gen_style/candidate_s1000.png is excluded by !**/*.png
  • qa/evidence/tavern-fit2/gen_style/candidate_s1111.png is excluded by !**/*.png
  • qa/evidence/tavern-fit2/gen_style/candidate_s1222.png is excluded by !**/*.png
  • qa/evidence/tavern-fit2/loop/panel/house_best.png is excluded by !**/*.png
  • qa/evidence/tavern-fit2/loop/panel/image_1.png is excluded by !**/*.png
  • qa/evidence/tavern-fit2/loop/panel/image_2.png is excluded by !**/*.png
  • qa/evidence/tavern-fit2/loop/panel/image_3.jpg is excluded by !**/*.jpg
  • qa/evidence/tavern-fit2/loop_s1000/panel/crop1_a.png is excluded by !**/*.png
  • qa/evidence/tavern-fit2/loop_s1000/panel/crop1_b.png is excluded by !**/*.png
  • qa/evidence/tavern-fit2/loop_s1000/panel/crop1_pit.png is excluded by !**/*.png
  • qa/evidence/tavern-fit2/loop_s1000/panel/crop2_chars.png is excluded by !**/*.png
  • qa/evidence/tavern-fit2/loop_s1000/panel/crop2_chars2.png is excluded by !**/*.png
  • qa/evidence/tavern-fit2/loop_s1000/panel/crop3_a.png is excluded by !**/*.png
  • qa/evidence/tavern-fit2/loop_s1000/panel/crop3_b.png is excluded by !**/*.png
  • qa/evidence/tavern-fit2/loop_s1000/panel/crop3_bar.png is excluded by !**/*.png
  • qa/evidence/tavern-fit2/loop_s1000/panel/crop3_left.png is excluded by !**/*.png
  • qa/evidence/tavern-fit2/loop_s1000/panel/crop3_tables.png is excluded by !**/*.png
  • qa/evidence/tavern-fit2/loop_s1000/panel/house_best.png is excluded by !**/*.png
  • qa/evidence/tavern-fit2/loop_s1000/panel/image_1.png is excluded by !**/*.png
  • qa/evidence/tavern-fit2/loop_s1000/panel/image_2.jpg is excluded by !**/*.jpg
  • qa/evidence/tavern-fit2/loop_s1000/panel/image_3.png is excluded by !**/*.png
  • qa/evidence/tavern-fit2/refs/v1_1557_candidate_s1000.png is excluded by !**/*.png
  • qa/evidence/tavern-fit2/tavern_fit2_depth.png is excluded by !**/*.png
  • qa/evidence/tavern-fit2/tavern_fit2_greybox.png is excluded by !**/*.png
  • qa/evidence/tavern-fit2/tavern_fit2_normal.png is excluded by !**/*.png
  • qa/scores.db is excluded by !**/*.db
📒 Files selected for processing (23)
  • qa/evidence/tavern-fit2/findings.json
  • qa/evidence/tavern-fit2/gallery.html
  • qa/evidence/tavern-fit2/gallery.html.rows.json
  • qa/evidence/tavern-fit2/gallery_s1000.html
  • qa/evidence/tavern-fit2/gallery_s1000.html.rows.json
  • qa/evidence/tavern-fit2/gemini_style_pass.py
  • qa/evidence/tavern-fit2/gen_base/scenario_meta.json
  • qa/evidence/tavern-fit2/loop/panel/contract.json
  • qa/evidence/tavern-fit2/loop/panel/prompts.json
  • qa/evidence/tavern-fit2/loop/panel_mapping.json
  • qa/evidence/tavern-fit2/loop/panel_verdict.json
  • qa/evidence/tavern-fit2/loop_s1000/panel/contract.json
  • qa/evidence/tavern-fit2/loop_s1000/panel/prompts.json
  • qa/evidence/tavern-fit2/loop_s1000/panel_mapping.json
  • qa/evidence/tavern-fit2/loop_s1000/panel_verdict.json
  • qa/evidence/tavern-fit2/nomination.jsonl
  • qa/evidence/tavern-fit2/plateloop_tavern_fit2.json
  • qa/evidence/tavern-fit2/plateloop_tavern_fit2_s1000.json
  • qa/evidence/tavern-fit2/style_pass_prompt_v2.txt
  • qa/evidence/tavern-fit2/tavern_fit2_geometry.json
  • qa/evidence/tavern-fit2/tavern_fit2_visual_gate_panel.json
  • qa/room_manifests/tavern_fit2.cells.json
  • tools/author_room_geometry.py
📜 Review details
⏰ Context from checks skipped due to timeout. (8)
  • GitHub Check: CodeRabbit
  • GitHub Check: Analyze (python)
  • GitHub Check: viewer-tests
  • GitHub Check: test
  • GitHub Check: Analyze (python)
  • GitHub Check: Analyze (csharp)
  • GitHub Check: viewer-tests
  • GitHub Check: test
🧰 Additional context used
📓 Path-based instructions (1)
**/*

📄 CodeRabbit inference engine (AGENTS.md)

**/*: Treat /Users/lume/WorldOS as the canonical local Mac app/private-art checkout for WorldOS GUI and native-app testing.
Use /Volumes/LEXAR/Codex for Codex artifacts, scratch files, screenshots, reports, and downloaded CI/VM artifacts.
Before install, build, or test commands, verify pwd; GUI/native app runs must use /Users/lume/WorldOS or an approved same-disk worktree configuration.
Use the codex/ prefix for new branches unless instructed otherwise.

Files:

  • qa/evidence/tavern-fit2/loop/panel_mapping.json
  • qa/evidence/tavern-fit2/plateloop_tavern_fit2_s1000.json
  • qa/evidence/tavern-fit2/tavern_fit2_geometry.json
  • qa/evidence/tavern-fit2/findings.json
  • qa/evidence/tavern-fit2/gallery.html
  • qa/evidence/tavern-fit2/loop/panel_verdict.json
  • qa/evidence/tavern-fit2/gen_base/scenario_meta.json
  • qa/evidence/tavern-fit2/loop_s1000/panel_mapping.json
  • qa/evidence/tavern-fit2/loop/panel/prompts.json
  • qa/evidence/tavern-fit2/gallery_s1000.html
  • qa/evidence/tavern-fit2/loop_s1000/panel_verdict.json
  • qa/evidence/tavern-fit2/style_pass_prompt_v2.txt
  • qa/evidence/tavern-fit2/plateloop_tavern_fit2.json
  • qa/evidence/tavern-fit2/loop_s1000/panel/prompts.json
  • qa/evidence/tavern-fit2/tavern_fit2_visual_gate_panel.json
  • qa/evidence/tavern-fit2/gallery_s1000.html.rows.json
  • tools/author_room_geometry.py
  • qa/evidence/tavern-fit2/gemini_style_pass.py
  • qa/room_manifests/tavern_fit2.cells.json
  • qa/evidence/tavern-fit2/nomination.jsonl
  • qa/evidence/tavern-fit2/loop_s1000/panel/contract.json
  • qa/evidence/tavern-fit2/gallery.html.rows.json
  • qa/evidence/tavern-fit2/loop/panel/contract.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-fit2/tavern_fit2_visual_gate_panel.json
🪛 LanguageTool
qa/evidence/tavern-fit2/style_pass_prompt_v2.txt

[style] ~19-~19: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...ements, signatures, frames, or borders. Do NOT add any characters, people, figures...

(ENGLISH_WORD_REPEAT_BEGINNING_RULE)

🔇 Additional comments (12)
tools/author_room_geometry.py (1)

381-383: LGTM!

qa/evidence/tavern-fit2/tavern_fit2_geometry.json (1)

1-1: LGTM!

qa/evidence/tavern-fit2/findings.json (1)

8-8: 🗄️ Data Integrity & Integration

Disambiguate the two G1 luminance values.

The pipeline summary reports mean luminance 0.220, while pregate reports 0.118 under the same G1_frame_lit label. If these are different artifacts or stages, name them explicitly; otherwise regenerate the evidence.

Confidence: 93%.

Also applies to: 18-18

qa/evidence/tavern-fit2/plateloop_tavern_fit2_s1000.json (1)

11-16: 🗄️ Data Integrity & Integration

No LoRA needs to be added here. This s1000 plate is using a separate, config-declared provenance chain (base_model + style_pass), and the painterly LoRA lives in qa/evidence/tavern-fit2/gen_base/scenario_meta.json, not in this artifact. The current chain already matches the registry gate path. Confidence: 96%.

			> Likely an incorrect or invalid review comment.
qa/evidence/tavern-fit2/gen_base/scenario_meta.json (1)

2-2: 🗄️ Data Integrity & Integration

This room value is correct.
scenario_meta.json tracks the semantic room class (tavern), while tavern-fit2 is the scenario/evidence label; the generated asset is also room_tavern.png. Confidence: 92%.

			> Likely an incorrect or invalid review comment.
qa/evidence/tavern-fit2/style_pass_prompt_v2.txt (1)

1-20: LGTM!

qa/evidence/tavern-fit2/loop/panel_mapping.json (1)

1-17: LGTM!

qa/evidence/tavern-fit2/gallery_s1000.html (1)

1-46: LGTM!

qa/evidence/tavern-fit2/loop_s1000/panel/contract.json (1)

12-16: Duplicate of the unevaluated-drift-gate finding.

The same checked: 0 / skipped: 19 / passed: true pattern appears here; fix the producer once and regenerate both contracts.

Confidence: 97%.

Also applies to: 113-119

qa/evidence/tavern-fit2/loop_s1000/panel_mapping.json (1)

1-17: LGTM!

qa/evidence/tavern-fit2/tavern_fit2_visual_gate_panel.json (1)

1-78: LGTM!

qa/evidence/tavern-fit2/gallery.html (1)

38-42: 🗄️ Data Integrity & Integration

Verify that this panel badge is sourced from the s1111 run.

qa/evidence/tavern-fit2/loop/panel/contract.json records pregate: FLAG and row.panel: null, yet this card renders A 6 · B 8 · C 9. The supplied s1000 verdict is A 6 · B 9 · C 9, and no s1111 verdict is included here. Regenerate from a run-keyed verdict and show blocked/N/A when no panel result was ingested.

Confidence: 91%.

Comment thread qa/evidence/tavern-fit2/findings.json Outdated
Comment on lines +14 to +18
"drift": {
"passed": true,
"room": "tavern_fit2",
"checked": 0,
"skipped": 19,

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift

Do not mark an unevaluated drift gate as passed.

This record says passed: true while zero props were checked and all 19 were skipped because no baseline exists. That is “not evaluated,” not a successful drift check; consumers could incorrectly treat unverified geometry as validated. Use an explicit not_evaluated/null status and make gate logic distinguish it from pass. The same issue exists in gallery_s1000.html.rows.json.

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-fit2/gallery.html.rows.json` around lines 14 - 18, Update
the drift records in gallery.html.rows.json and gallery_s1000.html.rows.json so
zero checked props with all props skipped are represented as not_evaluated (or
null), never passed; adjust the associated gate/consumer logic to distinguish
not_evaluated from a successful pass.

Comment on lines +32 to +37
def _downscale(path: str) -> None:
from PIL import Image
im = Image.open(path).convert("RGB")
if im.size != (_PLATE_W, _PLATE_H):
im.resize((_PLATE_W, _PLATE_H), Image.LANCZOS).save(path)
print(f"[gemini_style_pass] downscaled {os.path.basename(path)} {im.size} -> {_PLATE_W}x{_PLATE_H}")

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy lift

Preserve aspect ratio before writing the plate.

1344x768 is 1.75:1, while common 2K outputs are 16:9. Resizing directly to the target dimensions can stretch the tavern geometry and violate the prompt’s pixel-level structure lock, degrading edge recall and visual comparisons. Reject unexpected aspect ratios or crop/pad while preserving geometry.

Confidence: 97%.

🤖 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-fit2/gemini_style_pass.py` around lines 32 - 37, The
_downscale function currently stretches images to _PLATE_W × _PLATE_H without
preserving aspect ratio. Update _downscale to validate the input aspect ratio
and reject unexpected ratios, or crop/pad the image to the target dimensions
while preserving geometry before saving; retain RGB conversion and the existing
size check.

Comment on lines +45 to +47
ap.add_argument("--n", type=int, default=3, help="best-of-N seeds")
ap.add_argument("--model", default="model_google-gemini-3-1-flash")
ap.add_argument("--timeout", type=int, default=300)

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Reject invalid --n values.

--n 0 and negative values return success with zero candidates, producing an apparently completed but empty evidence run. Validate args.n >= 1 with argparse.error(...) before uploading or submitting jobs.

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-fit2/gemini_style_pass.py` around lines 45 - 47, Validate
the parsed `args.n` value in the argument-handling flow before any uploads or
job submissions; if it is less than 1, call `argparse.error(...)` with a clear
message and prevent execution from continuing. Use the existing `--n` definition
and main execution entry point to locate the validation.

Comment on lines +2 to +10
"scores": {"A": [6,6,6,6.5,7], "B": [9,9,9,6,6], "C": [9,9,9,9,9.5]},
"medians": {"A": 6.0, "B": 9.0, "C": 9.0},
"control_valid": true,
"defects": {
"A": {"on_prop": false, "t_pose": false, "floating": false, "duplicate": false, "missing": false},
"B": {"on_prop": false, "t_pose": false, "floating": false, "duplicate": false, "missing": false},
"C": {"on_prop": false, "t_pose": false, "floating": false, "duplicate": false, "missing": false}
},
"verdict": "candidate s1000 (deep-tenebrist) median 6.0 vs incumbent 9.0 (7.0 canon) vs control 9.0; delta -3.0. Same 6.0 as flat-lit s1111 AND as #1557 sparse -> density is NOT the binding gap."

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift

Persist the house-style verdict required by the panel contract.

loop_s1000/panel/prompts.json:26,35 requires per-image house_style results and makes losing the house-style read a regression. This verdict stores only scores and defect flags, so the evidence cannot establish whether candidate A passed that adoption-critical criterion. Add raw per-image values plus an aggregate candidate result, and carry it into tavern_fit2_visual_gate_panel.json.

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-fit2/loop_s1000/panel_verdict.json` around lines 2 - 10,
The panel verdict omits the required house-style assessment for candidate A. Add
raw per-image house_style results and an aggregate candidate-level house_style
result to the verdict, then propagate the same data into
tavern_fit2_visual_gate_panel.json, following the schema required by
loop_s1000/panel/prompts.json.

Comment on lines +4 to +9
"generate": {"candidate": "/Users/lume/WorldOS-worktrees/wt-tavern-fit2/qa/evidence/tavern-fit2/gen_style/candidate_s1000.png"},
"registration": {"greybox": "/Users/lume/WorldOS-worktrees/wt-tavern-fit2/qa/evidence/tavern-fit2/tavern_fit2_greybox.png", "min_recall": 0.95, "manifest": "/Users/lume/WorldOS-worktrees/wt-tavern-fit2/qa/room_manifests/tavern_fit2.cells.json"},
"panel": {
"incumbent": "/Users/lume/WorldOS-worktrees/wt-tavern-fit2/qa/evidence/new-tavern/tavern_truegrey_v1.png",
"control": "/Users/lume/worldos-session-notes/plate-sprint/armB/poe2_control.jpg",
"house_anchor": "/Users/lume/WorldOS-worktrees/wt-tavern-fit2/qa/evidence/new-tavern/tavern_truegrey_v1.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.

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

pwd
git ls-files qa/evidence/tavern-fit2/plateloop_tavern_fit2_s1000.json qa/evidence/tavern-fit2 | sed -n '1,80p'
python3 - <<'PY'
from pathlib import Path
p = Path('qa/evidence/tavern-fit2/plateloop_tavern_fit2_s1000.json')
print('exists', p.exists(), 'size', p.stat().st_size if p.exists() else None)
if p.exists():
    text = p.read_text()
    for i, line in enumerate(text.splitlines(), 1):
        if 1 <= i <= 40:
            print(f"{i:3}: {line}")
PY

Repository: electricsheephq/WorldOS

Length of output: 3766


🏁 Script executed:

sed -n '1,220p' qa/evidence/tavern-fit2/plateloop_tavern_fit2.json
printf '\n---\n'
sed -n '1,220p' qa/evidence/tavern-fit2/loop_s1000/panel/contract.json
printf '\n---\n'
sed -n '1,220p' qa/evidence/tavern-fit2/loop/panel/contract.json

Repository: electricsheephq/WorldOS

Length of output: 50379


Remove author-local absolute paths from this manifest.

qa/evidence/tavern-fit2/plateloop_tavern_fit2_s1000.json serializes /Users/lume/WorldOS-worktrees/... and /Users/lume/worldos-session-notes/... into generate, registration, and panel.control, so the replay contract is pinned to one workstation and breaks outside that filesystem. Use repo-relative artifact paths and move the external control image behind an explicit override key, matching the sibling contract.json files. 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-fit2/plateloop_tavern_fit2_s1000.json` around lines 4 - 9,
Remove workstation-specific absolute paths from the manifest’s generate,
registration, and panel fields. Replace repository artifacts with repo-relative
paths, and move the external panel.control image to an explicit override key
consistent with sibling contract.json manifests; preserve the existing manifest
structure and values otherwise.

Source: Path instructions

Comment on lines +4 to +9
"generate": {"candidate": "/Users/lume/WorldOS-worktrees/wt-tavern-fit2/qa/evidence/tavern-fit2/gen_style/candidate_s1111.png"},
"registration": {"greybox": "/Users/lume/WorldOS-worktrees/wt-tavern-fit2/qa/evidence/tavern-fit2/tavern_fit2_greybox.png", "min_recall": 0.95, "manifest": "/Users/lume/WorldOS-worktrees/wt-tavern-fit2/qa/room_manifests/tavern_fit2.cells.json"},
"panel": {
"incumbent": "/Users/lume/WorldOS-worktrees/wt-tavern-fit2/qa/evidence/new-tavern/tavern_truegrey_v1.png",
"control": "/Users/lume/worldos-session-notes/plate-sprint/armB/poe2_control.jpg",
"house_anchor": "/Users/lume/WorldOS-worktrees/wt-tavern-fit2/qa/evidence/new-tavern/tavern_truegrey_v1.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.

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

pwd && git ls-files qa/evidence/tavern-fit2/plateloop_tavern_fit2.json qa/evidence/tavern-fit2 | sed -n '1,120p' && wc -l qa/evidence/tavern-fit2/plateloop_tavern_fit2.json && cat -n qa/evidence/tavern-fit2/plateloop_tavern_fit2.json | sed -n '1,120p'

Repository: electricsheephq/WorldOS

Length of output: 3834


🏁 Script executed:

#!/bin/bash
set -euo pipefail
pwd
echo '--- file ---'
wc -l qa/evidence/tavern-fit2/plateloop_tavern_fit2.json
cat -n qa/evidence/tavern-fit2/plateloop_tavern_fit2.json | sed -n '1,120p'
echo '--- nearby json files with absolute paths ---'
rg -n '"/Users/|"/Volumes/' qa/evidence -g '*.json' | sed -n '1,200p'
echo '--- references to tavern_fit2 / plateloop ---'
rg -n 'plateloop_tavern_fit2|tavern_fit2' qa . -g '!**/node_modules/**' | sed -n '1,200p'

Repository: electricsheephq/WorldOS

Length of output: 29036


🏁 Script executed:

#!/bin/bash
set -euo pipefail
pwd
echo '--- evidence path conventions ---'
rg -n 'absolute path|/Users/lume|worldos-session-notes|repo-relative|committed artifact|run contract|evidence' README* qa docs .github -g '!**/node_modules/**' | sed -n '1,240p'
echo '--- tavern-fit2 directory tree ---'
find qa/evidence/tavern-fit2 -maxdepth 2 -type f | sort | sed -n '1,200p'

Repository: electricsheephq/WorldOS

Length of output: 42170


Replace the hard-coded author paths in this QA contract.

qa/evidence/tavern-fit2/plateloop_tavern_fit2.json serializes /Users/lume/WorldOS-worktrees/... and /Users/lume/worldos-session-notes/... verbatim, so the loader only works on one machine. On a clean checkout or CI runner, the candidate, greybox, manifest, and control inputs are unresolved, which makes the committed run contract non-portable and breaks replayability. Switch the committed paths to repo-relative refs under qa/evidence/... and keep any external-control override outside the fixture. The same pattern also appears in qa/evidence/tavern-fit2/plateloop_tavern_fit2_s1000.json. 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-fit2/plateloop_tavern_fit2.json` around lines 4 - 9, The
QA contracts contain machine-specific absolute paths, making replay impossible
elsewhere. In both plateloop_tavern_fit2.json and
plateloop_tavern_fit2_s1000.json, replace candidate, greybox, manifest,
incumbent, and house_anchor paths with repository-relative references under
qa/evidence; move the external control image to a configurable override outside
the committed fixtures.

Source: Path instructions

Comment on lines +11 to +16
"model_chain": {
"base_model": "model_bfl-flux-1-dev",
"controlnet_model": "model_bfl-flux-1-dev",
"control_modality": "depth",
"loras": [],
"style_pass": {"model": "model_google-gemini-3-1-flash", "loras": [], "strength": null}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

pwd
printf '\n--- target file ---\n'
cat -n qa/evidence/tavern-fit2/plateloop_tavern_fit2.json

printf '\n--- nearby metadata files ---\n'
fd -a 'scenario_meta.json|plateloop_tavern_fit2.json' qa/evidence

printf '\n--- search for referenced model id and plate_loop provenance handling ---\n'
rg -n 'model_MB22WaRCBLtfhi5R2CRpHoEL|plate_loop|loras|style pass|style_pass|candidate-local metadata|candidate local metadata' qa/evidence qa -g '*.json' -g '*.md' -g '*.ts' -g '*.js' -g '*.py'

Repository: electricsheephq/WorldOS

Length of output: 50379


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '\n--- plate_loop provenance code ---\n'
sed -n '250,290p' qa/plate_loop.py

printf '\n--- plate_loop config schema comments ---\n'
sed -n '45,80p' qa/plate_loop.py

printf '\n--- base scenario metadata ---\n'
cat -n qa/evidence/tavern-fit2/gen_base/scenario_meta.json

printf '\n--- promotion/gate references to model_chain or loras ---\n'
rg -n 'model_chain|lorasScale|lora|style_pass|provenance gate|promote provenance|panel JSON|scenario_meta' qa/plate_loop.py qa/test_visual_promotion_gate.py qa/evidence/tavern-fit2 -g '*.py' -g '*.json' -g '*.md'

Repository: electricsheephq/WorldOS

Length of output: 19267


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '\n--- read_model_chain + panel write path ---\n'
sed -n '296,345p' qa/plate_loop.py
printf '\n---\n'
sed -n '810,845p' qa/plate_loop.py

printf '\n--- tavern-fit2 loop config / contract evidence ---\n'
sed -n '120,150p' qa/evidence/tavern-fit2/loop/panel/contract.json
printf '\n---\n'
sed -n '126,156p' qa/evidence/tavern-fit2/loop_s1000/panel/contract.json

printf '\n--- search for explicit declared model_chain in tavern-fit2 artifacts ---\n'
rg -n '"model_chain"|'"'"'model_chain'"'"' qa/evidence/tavern-fit2 -g '*.json'

Repository: electricsheephq/WorldOS

Length of output: 6078


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '\n--- provenance gate tests ---\n'
sed -n '330,430p' qa/test_visual_promotion_gate.py

printf '\n--- any tavern-fit2 declared model_chain in evidence ---\n'
rg -n '"model_chain"\s*:' qa/evidence/tavern-fit2 -g '*.json'

printf '\n--- any scenario_meta attached to tavern-fit2 loop outputs ---\n'
fd -a 'scenario_meta.json' qa/evidence/tavern-fit2

Repository: electricsheephq/WorldOS

Length of output: 6459


Propagate the base LoRA into this plate’s declared chain.

plate_loop falls back to the config model_chain when the candidate has no local scenario_meta.json, and this hand-fed plate stamps loras: []. That drops model_MB22WaRCBLtfhi5R2CRpHoEL (lora_scale: 0.78) from qa/evidence/tavern-fit2/gen_base/scenario_meta.json, so promotion records an incomplete chain and can’t enforce provenance on the actual LoRA used. Add the base LoRA here, or attach the real scenario metadata to the candidate path before promote runs. 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-fit2/plateloop_tavern_fit2.json` around lines 11 - 16, The
declared model chain omits the base LoRA used by this plate. Update the
model_chain loras field to include model_MB22WaRCBLtfhi5R2CRpHoEL with
lora_scale 0.78, or ensure plate_loop receives the candidate’s actual
scenario_meta.json before promotion so the complete chain and provenance are
preserved.

Comment on lines +11 to +19
"camera": {
"recipe": "greybox_render_headless (verified vs Unity Quaternion.Euler(30,45,0) <1e-3)",
"ortho_size": 13.0,
"pitch_deg": 30.0,
"yaw_deg": 45.0,
"px_w": 1344,
"px_h": 768,
"cell_world_units": 2.0,
"cam_dist": 80.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.

🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift

🧩 Analysis chain

🏁 Script executed:

pwd && git ls-files | rg '(^qa/room_manifests/tavern_fit2\.cells\.json$|derive_room_manifest\.py$|camera_fit|findings|tavern_fit2|room_manifest)'

Repository: electricsheephq/WorldOS

Length of output: 1492


🏁 Script executed:

ast-grep outline qa/room_manifests/tavern_fit2.cells.json --view expanded
printf '\n--- build_room_manifest.py ---\n'
ast-grep outline qa/build_room_manifest.py --view expanded
printf '\n--- collect_findings.py ---\n'
ast-grep outline qa/collect_findings.py --view expanded
printf '\n--- tavern_fit2 findings ---\n'
cat -n qa/evidence/tavern-fit2/findings.json | sed -n '1,220p'

Repository: electricsheephq/WorldOS

Length of output: 11284


🏁 Script executed:

cat -n qa/room_manifests/tavern_fit2.cells.json | sed -n '1,120p'
printf '\n--- qa/build_room_manifest.py camera-related lines ---\n'
sed -n '78,110p' qa/build_room_manifest.py
printf '\n--- tool refs ---\n'
rg -n "camera_fit|ortho_size|cam_dist|pitch_deg|yaw_deg|cell_world_units|build_manifest|derive_room_manifest" qa tools -g '!**/node_modules/**'

Repository: electricsheephq/WorldOS

Length of output: 24173


🏁 Script executed:

sed -n '1,260p' tools/derive_room_manifest.py

Repository: electricsheephq/WorldOS

Length of output: 9545


🏁 Script executed:

sed -n '1,260p' qa/test_derive_room_manifest.py
printf '\n--- check_plate_drift projection path ---\n'
sed -n '1,260p' qa/check_plate_drift.py
printf '\n--- greybox extent contract tests ---\n'
sed -n '1,140p' qa/test_greybox_extent_contract.py

Repository: electricsheephq/WorldOS

Length of output: 24412


🏁 Script executed:

sed -n '1,260p' qa/check_grid_paint_coherence.py

Repository: electricsheephq/WorldOS

Length of output: 15334


Align the tavern_fit2 room to one projection path. qa/evidence/tavern-fit2/tavern_fit2_geometry.json opts into camera_fit, but tools/derive_room_manifest.py stamps the fixed 13.0 rig and both check_plate_drift.py and check_grid_paint_coherence.py reproject from that same fixed camera. If the candidate plate is built from the camera-fit greybox, the derived screen_bbox/occlusion no longer describe the same image plane, so localization and drift/coherence checks can false-fail or miss the authored cells. Either drop camera_fit for this room and regenerate, or teach the derivation/gates to carry the fitted ortho through. 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/room_manifests/tavern_fit2.cells.json` around lines 11 - 19, The
tavern_fit2 manifest uses a fixed camera while its geometry opts into
camera_fit, causing derivation and validation to use inconsistent projection
paths. Either remove the camera_fit setting from tavern_fit2_geometry.json and
regenerate the manifest, or update derive_room_manifest.py,
check_plate_drift.py, and check_grid_paint_coherence.py to propagate and use the
fitted orthographic camera consistently.

Comment on lines +346 to +350
Walkability is preserved BY CONSTRUCTION (validate_scene_grid / an 8-connectivity flood-fill both
pass): the door zone (8,0)+(8,1) is clear, the front lane (row 8) is fully open, and every added
prop hugs a table, a wall band, or a corner — never a circulation lane or a door approach. LOW props
stay in cols 2-9 / rows 1-7 off the two NEAR walls (col0, the front wall) that would occlude them
under the 30/45 dimetric camera; only the tall hearth + bar sit on the back/far bands.

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

pwd && git ls-files tools/author_room_geometry.py findings.json && python3 - <<'PY'
from pathlib import Path
for path in ["tools/author_room_geometry.py", "findings.json"]:
    p = Path(path)
    if p.exists():
        print(f"\n== {path} ({sum(1 for _ in p.open())} lines) ==")
        with p.open() as f:
            for i, line in enumerate(f, 1):
                if path == "tools/author_room_geometry.py" and 320 <= i <= 380:
                    print(f"{i}: {line.rstrip()}")
                if path == "findings.json" and i <= 240:
                    print(f"{i}: {line.rstrip()}")
PY

Repository: electricsheephq/WorldOS

Length of output: 5016


🏁 Script executed:

python3 - <<'PY'
from pathlib import Path

path = Path("tools/author_room_geometry.py")
text = path.read_text().splitlines()
targets = ["def _geometry", "def validate_scene_grid", "def _perimeter_wall_run_props", "def author_tavern_fit2"]
for target in targets:
    for i, line in enumerate(text, 1):
        if line.startswith(target):
            start = max(1, i - 20)
            end = min(len(text), i + 120)
            print(f"\n== {target} at line {i} ==")
            for j in range(start, end + 1):
                print(f"{j}: {text[j-1]}")
            break
PY

Repository: electricsheephq/WorldOS

Length of output: 26381


Move barrels_corner off row 8

At tools/author_room_geometry.py:346-371, barrels_corner occupies [10,8], and _geometry() folds prop cells into walls/impassable. That makes the claim that row 8 is “fully open” false. Move the barrel pair out of row 8 or rewrite the walkability contract to match the actual topology. 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 `@tools/author_room_geometry.py` around lines 346 - 350, The walkability
comment incorrectly claims row 8 is fully open while barrels_corner occupies
[10,8] and is folded into impassable geometry by _geometry(). Move the barrel
pair to a valid non-circulation location outside row 8, updating the
barrels_corner definition and any dependent validation or placement metadata
while preserving connectivity.

@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: bf00f026d9

ℹ️ 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,

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 the camera-fit projection for this manifest

When this manifest is used for tavern_fit2 drift/coherence or promotion checks, it will validate against the wrong camera: the source geometry sets camera_fit=True and the evidence says the greybox was rendered with a fitted ortho around 9.26, but this committed manifest records the fixed 13.0 rig and the screen_bbox values below were generated with that fixed projection. qa/check_plate_drift.py consumes those bboxes directly, and qa/check_grid_paint_coherence.py regenerates/locates manifest geometry through the same fixed rig, so a camera-fit plate will be compared to fixed-rig boxes and can produce misleading drift/coherence results. Please derive this manifest with the fitted projection, or keep it out of the committed manifest set until the manifest/gates carry camera_fit.

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: #1559 - TAVERN_FIT-V2 (M-ALIGN capstone retry): density-law tavern (14 real props) — HONEST NEGATIVE (6.0, density refuted as the gap)
Head: bf00f026d918a6b94314d8886b2c9cc06a729140 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-fit2/before_after.png added +0/-0 Changed file Low
qa/evidence/tavern-fit2/findings.json added +31/-0 Changed file Moderate: validated P3 finding
qa/evidence/tavern-fit2/gallery.html added +46/-0 Changed file Low
qa/evidence/tavern-fit2/gallery.html.rows.json added +181/-0 Changed file Low
qa/evidence/tavern-fit2/gallery_s1000.html added +46/-0 Changed file Low
qa/evidence/tavern-fit2/gallery_s1000.html.rows.json added +179/-0 Changed file Low
qa/evidence/tavern-fit2/gemini_style_pass.py added +80/-0 Changed file Low
qa/evidence/tavern-fit2/gen_base/room_tavern.png added +0/-0 Changed file Low
qa/evidence/tavern-fit2/gen_base/scenario_meta.json added +29/-0 Changed file Moderate: validated P2 finding
qa/evidence/tavern-fit2/gen_style/candidate_s1000.png added +0/-0 Changed file Low
qa/evidence/tavern-fit2/gen_style/candidate_s1111.png added +0/-0 Changed file Low
qa/evidence/tavern-fit2/gen_style/candidate_s1222.png added +0/-0 Changed file Low
qa/evidence/tavern-fit2/loop/panel/contract.json added +314/-0 Changed file Elevated: large change
qa/evidence/tavern-fit2/loop/panel/house_best.png added +0/-0 Changed file Low
qa/evidence/tavern-fit2/loop/panel/image_1.png added +0/-0 Changed file Low
qa/evidence/tavern-fit2/loop/panel/image_2.png added +0/-0 Changed file Low
qa/evidence/tavern-fit2/loop/panel/image_3.jpg added +0/-0 Changed file Low
qa/evidence/tavern-fit2/loop/panel/prompts.json added +36/-0 Changed file Low
qa/evidence/tavern-fit2/loop/panel_mapping.json added +17/-0 Changed file Low
qa/evidence/tavern-fit2/loop/panel_verdict.json added +11/-0 Changed file Low
qa/evidence/tavern-fit2/loop_s1000/panel/contract.json added +310/-0 Changed file Elevated: large change
qa/evidence/tavern-fit2/loop_s1000/panel/crop1_a.png added +0/-0 Changed file Low
qa/evidence/tavern-fit2/loop_s1000/panel/crop1_b.png added +0/-0 Changed file Low
qa/evidence/tavern-fit2/loop_s1000/panel/crop1_pit.png added +0/-0 Changed file Low
qa/evidence/tavern-fit2/loop_s1000/panel/crop2_chars.png added +0/-0 Changed file Low

25 additional changed files omitted from this walkthrough.

Review Signal

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

Risk Taxonomy

  • API compatibility: 2
  • 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: #1557, #1534.
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.

"guidance": 7.5,
"num_outputs": 4,
"model_id": "model_bfl-flux-1-dev",
"lora": "model_MB22WaRCBLtfhi5R2CRpHoEL",

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: Base gen provenance declares a LoRA, but model_chain blocks (and findings.json) claim 'NO LoRA' / loras:[]

The registered-base generation provenance in gen_base/scenario_meta.json declares "lora": "model_MB22WaRCBLtfhi5R2CRpHoEL" and "lora_scale": 0.78 (lines 9-10). This contradicts (a) findings.json line 9 which states the base was run with 'NO LoRA', (b) the plate_loop config model_chain blocks in loop/panel/contract.json and plateloop_tavern_fit2.json (line 15) which declare "loras": [], and (c) the gallery.html.rows.json model_chain.loras: []. The provenance gate claim in findings.json line 12 ('model_chain_provenance ... promote provenance gate PASS') is therefore based on a model_chain that OMITS the LoRA actually applied at base generation. Even though the verdict is an honest negative (not adopted), this is a real provenance inconsistency that would mask the LoRA from any future provenance gate if this base were ever re-used. Either add the LoRA id to the model_chain loras blocks and drop the 'NO LoRA' claim in findings.json, or regenerate the base without the LoRA to match the declared chain. If the lora id is not in qa/model_registry.json, that is an additional unapproved-model provenance gap.

Category: API compatibility

Why this matters: The RRI/provenance contract requires the plate_loop model_chain to be the true record of models applied. A base baked with an unrecorded LoRA makes the declared chain non-authoritative and would let an unregistered/undocumented LoRA silently enter the promotion record if this base is reused.

Comment thread qa/evidence/tavern-fit2/findings.json Outdated
"walkslice_reconciliation": "REPORT-ONLY (per packet — NOT changed here; the walkslice build_tavern_grid must eventually match an ADOPTED geometry, and this is an honest negative so nothing is adopted). IF tavern_fit2 were ever adopted, qa/seed_gfx_walkslice.py needs: (a) TAVERN_BACK_DOOR [0,0] -> [8,0] (the #1534 durable fix — real back-wall door gap now authored, so the door cell and the painted opening coincide; update the 107-112 comment). (b) ADD 8 props to _TAVERN_PROPS (16 impassable cells), footprints VERBATIM from tavern_fit2 geometry: woodpile [(3,1),(4,1)], bench_nw [(3,5),(4,5)], bench_ne [(6,5),(7,5)], bench_s [(7,6),(7,7)], stools_bar [(8,3),(8,4)], shelf_bar [(10,2),(10,3)], casks_bar [(10,4),(10,5)], barrels_corner [(10,7),(10,8)]. (c) walkable 59 -> 43. (d) spawns UNCHANGED: party [(4,8),(5,8)], npcs [(7,8)] — none collide with any new prop (all new props are off row 8). validate_scene_grid still PASSES on the updated grid (connectivity intact, 43 clear-floor cells >> 12, door (8,0) walkable).",
"runbook_gaps_hit": [
"The coherence gate (check_grid_paint_coherence per-prop NCC) is over-sensitive for CAMERA-FIT painterly rooms: the geometry-locked BASE at registration-recall 0.98 fails it INCOHERENT, as does the deployed 7.0 incumbent. Runbook step 5 already calls it a diagnostic, but a cold agent will read 'INCOHERENT (19 checked)' as blocking. Suggest the runbook explicitly note that camera-fit + soft-edge painterly plates fail per-prop NCC by construction and to lean on registration-recall (base) as the registration floor.",
"plate_loop.py's registration recall check runs on the STYLED candidate (0.81) against the 0.95 min and prints '-> FAIL / pre-gate FLAG', but for painterly rooms styled-recall is ADVISORY (#1491) and the real gate is the BASE recall (0.98). The FLAG is misleading; the base recall is the number that matters.",

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: Registration/drift check skipped all 19 props — 'recall_pass:false, drift passed:true' is structurally vacuous

In both plateloop configs (loop/panel/contract.json, loop_s1000/...) the registration drift reports 'passed': true with 'checked': 0, 'skipped': 19 and reason 'no fingerprintable props (manifest carries geometry only; pass --baseline or seed ref_fp to gate)'. So the styled-candidate registration 'passed' verdict is not actually computed — it passes because nothing was checked. findings.json line 16 correctly downgrades styled recall (0.81/0.75) to ADVISORY and leans on the BASE recall 0.98, but the drift.passed:true value is exported into the row JSON as if it were a positive registration result. Worth adding a note in findings.json that drift.passed is vacuous-true for this manifest so a future agent doesn't read it as evidence that per-prop registration succeeded.

Category: API compatibility

Why this matters: A 'passed:true' registration field that results from checking zero props can be misread by a downstream promotion/gate consumer as positive registration evidence, overstating the plate's structural fidelity.

6.5,
7
],
"B": [

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: s1000 incumbent scorer spread (9,9,9,6,6) spans the adopt/control bands — scorer agreement is low

The s1000 incumbent (B) scores array is [9,9,9,6,6] (lines 58-64): a 3-point split where two scorers rate the deployed 7.0-incumbent plate a 6 and three rate it a 9. The median is reported as 9.0 and used as the bar for delta_candidate_minus_control=-3.0. With only 5 scorers and a 3-point IQR on the reference image, the single-median comparison is fragile. The findings' headline 'density refuted' rests on candidate medians that equal the incumbent's low-scorer mode. This is advisory (the honest-negative conclusion is robust to it, since both s1111 and s1000 candidates also plateau at 6.0 against a 9.0 control), but the panel should report agreement/spread, not only the median, before treating the 6.0-vs-9.0 gap as a law.

Category: Proof gap

Why this matters: Conclusions drawn from a 5-scorer panel with a 3-point split on the anchor image are over-precise; reporting only medians hides disagreement that affects how 'binding' the negative result is.

@100yenadmin

Copy link
Copy Markdown
Member Author

@coderabbitai review — verdict summary corrected to report both incumbent panel medians (8.0 s1111 / 9.0 s1000; canonical adoption median 7.0) instead of a single 'this-panel' figure.

@coderabbitai

coderabbitai Bot commented Jul 11, 2026

Copy link
Copy Markdown
🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail
echo "=== findings.json ==="
cat qa/evidence/tavern-fit2/findings.json
echo "=== visual_gate_panel.json ==="
cat qa/evidence/tavern-fit2/tavern_fit2_visual_gate_panel.json
echo "=== loop/panel_verdict.json ==="
cat qa/evidence/tavern-fit2/loop/panel_verdict.json
echo "=== loop_s1000/panel_verdict.json ==="
cat qa/evidence/tavern-fit2/loop_s1000/panel_verdict.json
echo "=== grep for medians/verdicts across evidence dir ==="
rg -n "median|verdict|8\.0|9\.0|7\.0" qa/evidence/tavern-fit2 --type json -g '!*.rows.json'

Length of output: 22011


🏁 Script executed:

#!/bin/bash
set -euo pipefail
echo "=== rows.json verdict fields ==="
rg -n '"verdict"' qa/evidence/tavern-fit2/gallery.html.rows.json qa/evidence/tavern-fit2/gallery_s1000.html.rows.json qa/evidence/tavern-fit2/nomination.jsonl 2>/dev/null
echo "=== full nomination.jsonl ==="
cat qa/evidence/tavern-fit2/nomination.jsonl
echo "=== panel section in rows.json (medians/delta) ==="
rg -n '"panel"|"median|"delta_vs_control"|"incumbent' qa/evidence/tavern-fit2/gallery.html.rows.json qa/evidence/tavern-fit2/gallery_s1000.html.rows.json

Length of output: 2226


@100yenadmin verified — the correction is consistent across the evidence chain.

Confidence: 90%

What was checked:

  • findings.json top-level verdict now reads: "...vs the incumbent (8.0 (s1111 panel) / 9.0 (s1000 panel) / 7.0 canonical) and the real-art control (9.0)..." — correctly reports both panel medians instead of collapsing to one.
  • New incumbent_panel_medians block (s1111_panel: 8.0, s1000_panel: 9.0, canonical_adoption_median: 7.0) cross-checks against the underlying per-seed panel data:
    • loop/panel_verdict.json (s1111): B scores [8,8,8,8,9] → median 8.0
    • loop_s1000/panel_verdict.json (s1000): B scores [9,9,9,6,6] → median 9.0
  • Per-seed rows/gallery files (gallery.html.rows.json, gallery_s1000.html.rows.json) already carried the correct per-panel figures (8.0 for s1111, 9.0 for s1000) and are consistent with the new top-level summary — no stale single-figure leftovers found in those.
  • tavern_fit2_visual_gate_panel.json still shows a single incumbent_median: 9.0 (7.0 canonical) — this is not a leftover bug; that file is explicitly scoped to the s1000-seed panel run (candidate_image: candidate_s1000.png, B scores match the s1000 median), so a single figure is correct in that narrower context.
  • gates.blind_panel_s1111/gates.blind_panel_s1000 sub-objects in findings.json already had the correct disaggregated incumbent medians before this fix — only the free-text verdict summary string was previously collapsing both panels into one figure, and that's now fixed.

No remaining inconsistencies found between the corrected summary text and the underlying per-panel evidence (panel_verdict.json, contract.json, rows/gallery files). This is evidence-only (no adoption/manifest/library changes), so there's no downstream code-path risk from this correction — it only affects the readability/accuracy of the retrospective record.

✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@evaos-code-review-bot

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

Copy link
Copy Markdown

evaOS review status: completed

PR: #1559 - TAVERN_FIT-V2 (M-ALIGN capstone retry): density-law tavern (14 real props) — HONEST NEGATIVE (6.0, density refuted as the gap)
Head: 7bcdf5420dc1890d55cf9e4d4a375ad52ebfe403
Updated: 2026-07-11T07:08:03.017Z

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: #1559

Review URL: #1559 (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: 7bcdf5420d

ℹ️ 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_fit2_densitylaw_s1000_20260711", "class": "room", "room": "tavern_fit2", "source_path": "/Users/lume/WorldOS-worktrees/wt-tavern-fit2/qa/evidence/tavern-fit2/tavern_fit2_visual_gate_panel.json", "note": "TAVERN_FIT-V2 density-law capstone — 14 real props; density refuted as the binding panel gap"}

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 repo-relative panel path in the nomination

When this committed nomination is consumed outside the original /Users/lume worktree, tools/library/promote.py resolves this absolute source_path literally, so promote.py --batch --dry-run --nominations qa/evidence/tavern-fit2/nomination.jsonl skips it as score-failed instead of reaching the intended rejected visual-gate verdict. Point this at qa/evidence/tavern-fit2/tavern_fit2_visual_gate_panel.json repo-relatively so the evidence can be replayed from other checkouts.

Useful? React with 👍 / 👎.

"panel_id": "panel-visual-tavern-fit2-densitylaw-20260711",
"protocol": "control-anchored 5-scorer blind panel (fast-worker sonnet, independent). Candidate=TAVERN_FIT-V2 density-law (tavern_fit2 14-prop greybox -> flux.1-dev depth-CN base cs0.95 seed222 recall 0.98 -> single Gemini instruction-edit style pass STRUCTURE-LOCK+ADDITIONS-LOCK, density-aware grounding, no external referenceImages, tenebrist best-of-3 seed1000). Blind A=candidate B=incumbent(tavern_truegrey_v1, 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-fit2/gen_style/candidate_s1000.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 Stamp the model chain into the promotion artifact

When this panel is the source_path for a room nomination, promote.py only runs the provenance check against nom.get("model_chain") or panel.get("model_chain"); this panel has neither, and the committed nomination does not either, so the model-registry gate silently no-ops even though the evidence claims the chain was registry-approved. In any candidate that reaches the visual delta bar, an unregistered or wrong model chain would be promotable and the experiment cannot be audited; stamp the recorded model_chain here or on the nomination.

Useful? React with 👍 / 👎.

@@ -0,0 +1 @@
{"artifact_id": "room_tavern_fit2_densitylaw_s1000_20260711", "class": "room", "room": "tavern_fit2", "source_path": "/Users/lume/WorldOS-worktrees/wt-tavern-fit2/qa/evidence/tavern-fit2/tavern_fit2_visual_gate_panel.json", "note": "TAVERN_FIT-V2 density-law capstone — 14 real props; density refuted as the binding panel gap"}

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 Add candidate_plate so drift gate runs

This room nomination does not declare candidate_plate, so tools/library/promote.py's _paint_drift_gate() returns a no-op (no candidate_plate on nomination) instead of checking the committed tavern_fit2 manifest. If the panel delta is later updated into the adoption band, this same nomination can promote the room without the paint-drift hard floor ever running; include the candidate plate path (and a usable baseline/ref fingerprints) in the nomination.

Useful? React with 👍 / 👎.

"pregate": {
"verdict": "PASS",
"blocking": [],
"gates": [

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 Record the full visual pre-gate floor

The promotion gate treats the deterministic visual floor as frame-lit plus occupancy/pin checks, but this panel records only G1_frame_lit and the non-blocking G6_luma_staging_law; G2_occupancy, G3_floor_contact, and G4_screen_scale are absent. Because visual_pregate_floor_passed() accepts any present hard-floor gate with no HIGH/CRITICAL severities, a candidate with an adoption-band delta would pass without evidence that the occupancy/pin floor actually ran, so record the full pre-gate output instead of this abbreviated list.

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: #1559 - TAVERN_FIT-V2 (M-ALIGN capstone retry): density-law tavern (14 real props) — HONEST NEGATIVE (6.0, density refuted as the gap)
Head: 7bcdf5420dc1890d55cf9e4d4a375ad52ebfe403 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-fit2/before_after.png added +0/-0 Changed file Low
qa/evidence/tavern-fit2/findings.json added +75/-0 Changed file Low
qa/evidence/tavern-fit2/gallery.html added +46/-0 Changed file Low
qa/evidence/tavern-fit2/gallery.html.rows.json added +181/-0 Changed file Low
qa/evidence/tavern-fit2/gallery_s1000.html added +46/-0 Changed file Low
qa/evidence/tavern-fit2/gallery_s1000.html.rows.json added +179/-0 Changed file Low
qa/evidence/tavern-fit2/gemini_style_pass.py added +80/-0 Changed file Low
qa/evidence/tavern-fit2/gen_base/room_tavern.png added +0/-0 Changed file Low
qa/evidence/tavern-fit2/gen_base/scenario_meta.json added +29/-0 Changed file Low
qa/evidence/tavern-fit2/gen_style/candidate_s1000.png added +0/-0 Changed file Low
qa/evidence/tavern-fit2/gen_style/candidate_s1111.png added +0/-0 Changed file Low
qa/evidence/tavern-fit2/gen_style/candidate_s1222.png added +0/-0 Changed file Low
qa/evidence/tavern-fit2/loop/panel/contract.json added +314/-0 Changed file Elevated: large change
qa/evidence/tavern-fit2/loop/panel/house_best.png added +0/-0 Changed file Low
qa/evidence/tavern-fit2/loop/panel/image_1.png added +0/-0 Changed file Low
qa/evidence/tavern-fit2/loop/panel/image_2.png added +0/-0 Changed file Low
qa/evidence/tavern-fit2/loop/panel/image_3.jpg added +0/-0 Changed file Low
qa/evidence/tavern-fit2/loop/panel/prompts.json added +36/-0 Changed file Low
qa/evidence/tavern-fit2/loop/panel_mapping.json added +17/-0 Changed file Low
qa/evidence/tavern-fit2/loop/panel_verdict.json added +11/-0 Changed file Low
qa/evidence/tavern-fit2/loop_s1000/panel/contract.json added +310/-0 Changed file Elevated: large change
qa/evidence/tavern-fit2/loop_s1000/panel/crop1_a.png added +0/-0 Changed file Low
qa/evidence/tavern-fit2/loop_s1000/panel/crop1_b.png added +0/-0 Changed file Low
qa/evidence/tavern-fit2/loop_s1000/panel/crop1_pit.png added +0/-0 Changed file Low
qa/evidence/tavern-fit2/loop_s1000/panel/crop2_chars.png added +0/-0 Changed file Low

25 additional changed files omitted from this walkthrough.

Review Signal

No validated inline findings.
Dropped findings before posting: 0. High-severity findings: 0.

Risk Taxonomy

No finding categories.

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: #1557, #1534.
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.

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