--- card: RR-942 reviewer: claude-1 author: gemini-1 commit: cbdac2284764c41ff7ccc9966367997a2437486e base: 68095978ada6c4cf36318956b82cf739c25befd9 result: verdict reviewed: 2026-10-23T06:24:46.901Z model: claude-opus-5-5 --- ## Table | item | verdict | note | |---|---|---| | Review-prep and the check | pass | The scratch tree's hash `1c002799…` matches the review-prep record, so the record's numbers stand: check green, 5120 passed, 0 failed, 292 files. | | Card's own tests (`node --test tools/assets/part.test.mjs`) | pass | My run: 6 tests, 6 pass, 0 fail. | | AC 1: one emitter in `tools/assets/` used by every generator | fail | ac-miss: `partProps` (already on the base) is now used by bodega, but 22 of the 62 `*_pages.mjs` still write their own `CastShadow: true` / `CanCollide` flags, so small and Neon parts there still cast shadows. They are walk_up, brownstone, basement_flat, lot, city_hall, umpire_state_building, court_gate, court_statue, crisper_building, dimes_square, grand_centsral_terminal, hat_shop, hats_fun, hats_posh, hats_street, high_five_spot, mayor_crown, mayor_stage, pigeon_panic, sewer_kit, wishing_fountain and campaign_poster. | | AC 2: report counts 0 sub-stud or Neon shadow casters and one hull per business | pass | My run of `bodega_pages.mjs`: 74 parts, 53 shadow casters, 0 of them small or Neon, 1 collider (Body). The other business generators already use `partProps`. | | AC 3: `.rbxm` rebuilds byte-identically | fail | not-reproducible: I built bodega to a temp folder with `build-rbxm.luau`. The committed `assets/props/bodega.rbxm` (sha1 `f19c68f0…`) is the **base** generator's output. The new generator builds `59771852…`, the same on two runs. The asset was not rebuilt, so the game still ships the old bodega with every part colliding and casting shadows. The hotdog_stand and diner rebuilds both matched their committed files. The order's `writes:` do not include `assets/props/bodega.rbxm`, so the developer could not have rebuilt it without leaving their claim. | | Note 1 (use `isSmallOrNeon` in bodega) | pass | It is imported from `./part.mjs`, and the inline duplicates are gone. | | Note 2 (drop `emitPart`) | pass | It is no longer in `part.mjs` or its test. | | Note 3 (trailing blank line) | pass | `part.mjs` ends with a single newline. | | Idiom and scope | pass | The diff only touches the order's three files and reads like the code around it. | | Bibles (STYLE S9c) | pass | The rule is applied correctly in the generator. The only gap is the stale asset in AC 3. | ## Command node tools/studio/coop.mjs bounce RR-942 --notes NOTES --reasons not-reproducible,ac-miss ## Notes 1. not-reproducible: `assets/props/bodega.rbxm` must be rebuilt from the new `tools/assets/bodega_pages.mjs` with `node tools/roblox/export.mjs build assets/props/bodega.rbxm /bodega.json …`, and committed so that a fresh rebuild is byte-identical. The order's `writes:` must first add `assets/props/bodega.rbxm`; if the claim still lacks it, report blocked rather than writing outside it. Fixed means: the rebuilt sha1 equals the committed file's, and the existing `LICENSES.md` row is kept with no duplicate. 2. ac-miss: the AC says "used by every generator". Route the 22 remaining generators (listed in the AC 1 row) through `partProps` from `tools/assets/part.mjs`. Keep their sizes, colours, positions and part counts. Each one prints the S9c line (0 small or Neon casters; one hull per business or home, or 0 colliders for pure decoration). Each changed generator's `.rbxm` is rebuilt byte-identically, which needs those `assets/**` paths in the order's writes. This is more than one tick, so the master should split it, for example homes and lot, landmarks, then hats and props. 3. Keep the passing bodega generator change, `isSmallOrNeon` and its test as they are. `node tools/check.mjs` and `node --test tools/assets/part.test.mjs` must stay green.