# Peer review of eight clean-room wardrobe builds

Audit date: 18 October 2026. Reviewer: Sol. Scope: the eight supplied `index.html` files and six supplied `SELF-QA.md` files, judged against the root [BRIEF-CLEAN.md](BRIEF-CLEAN.md). The copy under `candidates/` is byte-identical. Candidate names identify submissions, not verified model provenance. No candidate was edited.

**Opus55 is the strongest integration base at 91/100, followed by AstraMax and Fable51 at 88/100. None earns an unqualified release pass.** Opus55 has a confirmed pointer-lock regression; AstraMax needs lighting correction; Fable51 needs fabrication reconciliation. Qwen38 contributes the strongest skinning implementation but has a broken shelf-return lifecycle. Sol contributes useful product/export work but permits overlapping modules and stale cat support. Gemini4 contains several substantive approximations. GLM53 has a confirmed exception on every frame that prevents the apartment from rendering.

The recommended synthesis is Opus55's integrated scene, acoustic engine and cat choreography, AstraMax's placement validator, Sol's supported stock segmentation and project exports, Fable51's per-bay occupancy and acoustic scheduling ideas, Grok47's collision-bound validation, Qwen38's skinned cat, and Gemini4's wall-clock transition safeguard. GLM53's separate audio scheduler is useful as an isolated pattern after its runtime and quote defects are repaired.

## 1. Method and scoring

Each pillar is worth 20 points, with four equally weighted five-point criteria. Scores measure the supplied implementation, including reachable behavior and confirmed defects. Source presence alone does not establish a working feature. A runtime failure that prevents an entire visual subsystem from being displayed earns only limited implementation credit in that subsystem. There is no bonus for file size, model identity, self-reported test count, or missing evidence being described confidently.

| Pillar | Four five-point criteria |
| --- | --- |
| Camera & Collision | Native pointer lock plus drag/UI fallback, eye height and smooth movement; wall/carcass collision; reversible eased position/quaternion transitions; orbit/pan/zoom, true orthographic elevation and contextual interaction. |
| Volumetric Lighting & Mirrors | Spatial shafts with credible density/occlusion; 300–800 drifting, beam-sensitive dust points; time-of-day, 2048² soft shadows and automatic warm LEDs; procedural physical wood and working mirror behavior. |
| WebAudio Foley, Radio & LPF | Procedural mechanical envelopes and event wiring; spatial Foley/radio and listener updates; street/rain and window filtering from 250 to 1800 Hz; radio/vinyl, mute/volume and reliable scheduling. |
| 3D Cat FSM & Jump | Articulated anatomy, multi-joint gait and five-segment tail; accessible, supported shelf selection; approach/jump/perch/descent lifecycle; rug curl/breathing, petting/purr and response to configuration changes. |
| Polish System-32 & BOM | Envelope, fillers and consistent 18/4 mm geometry/math; per-bay editing, grid, occupancy and span warning; cut-list-derived material/edge/hardware/PLN totals; Polish product presentation, specification export and practical usability. |

A convincing inexpensive spatial shaft earns partial volumetric credit; a shader applied to a surface does not automatically earn full volume-integration credit. The brief explicitly permits a high-specularity mirror alternative, so a static reflective material receives partial credit rather than being treated as no mirror. Group-based articulated joints also count: the brief permits an articulated quadruped, not only a skinned skeleton.

### Evidence levels and limits

- **Source audit:** all eight HTML/module files, all available self-QA reports, relevant geometry builders, controller paths, shaders, audio graphs, cat transitions and quote code. All eight extracted modules pass `node --check`; all documents have the required HTML opening/closing and no literal TODO/rest-of-code placeholders were found.
- **Fresh browser observations:** unmodified files served over local HTTP in Chromium 156 with ANGLE/SwiftShader. Desktop viewport is 960 × 640, with a smaller 480 × 320 follow-up for Grok47. Public application handlers exercise camera/environment/audio state; these smoke checks are not comprehensive gesture tests. The W-key sample only tests locomotion where the app is actually in Walk mode.
- **Controlled probes:** original modules with a small diagnostic bridge appended to the served response, and animation callbacks paused. These directly exercise original functions for Opus55, Sol, Gemini4 and GLM53. They establish logic behavior, not physical pointer-lock permission, animation smoothness or performance. An isolated extraction of Qwen38's original FSM branch establishes its missing descent path with vector/scene test doubles.
- **Historical claims:** the copied self-QA files describe broader tests, but their linked runners, JSON results and screenshots are absent from this workspace. They were read as claims and cross-checked against source; they were not counted as rerun tests. AstraMax and Sol's stated SHA-256 values match the supplied HTML.
- No fresh mobile suite, hardware-GPU benchmark, subjective listening session or complete native-pointer-lock session was performed. No build's 60 FPS target is independently established. Software-rendering startup times are not comparative performance scores.

Evidence is retained under [audit-evidence-sol](audit-evidence-sol/): the [source manifest](audit-evidence-sol/source-manifest.json), [browser runner](audit-evidence-sol/browser-audit.py), per-candidate snapshots/screenshots, [focused probe runner](audit-evidence-sol/focused-probes.py), and [Qwen FSM probe](audit-evidence-sol/qwen-fsm-probe.cjs). Some optional focused runs for AstraMax, Fable51 and Qwen38 timed out; those are inconclusive harness runs, not additional application failures. The successful unmodified runs remain separate evidence.

## 2. Scoreboard

| Rank | Build | Camera /20 | Lighting /20 | Audio /20 | Cat /20 | System-32 & BOM /20 | Total /100 |
| --- | --- | ---: | ---: | ---: | ---: | ---: | ---: |
| 1 | **Opus55** | 17 | 19 | 20 | 19 | 16 | **91** |
| =2 | **AstraMax** | 19 | 16 | 18 | 17 | 18 | **88** |
| =2 | **Fable51** | 17 | 18 | 19 | 18 | 16 | **88** |
| 4 | **Grok47** | 18 | 17 | 19 | 17 | 16 | **87** |
| 5 | **Qwen38** | 19 | 17 | 19 | 12 | 15 | **82** |
| 6 | **Sol** | 18 | 16 | 17 | 14 | 16 | **81** |
| 7 | **Gemini4** | 13 | 13 | 12 | 12 | 11 | **61** |
| 8 | **GLM53** | 4 | 4 | 13 | 2 | 9 | **32** |

These are engineering judgments on a declared rubric, not statistically measured quality differences. The one-point Qwen/Sol separation is less important than their different failure modes. GLM53's low visual scores reflect its supplied runtime, not a judgment that its source contains no camera, lighting or cat work.

### Fresh runtime observations

| Build | Ready state reached | Uncaught page errors | Observation |
| --- | --- | ---: | --- |
| Opus55 | Yes | 0 | Walk state and W movement observed; radio/rain/window handlers ran. Controlled probe confirms locked view reset. |
| AstraMax | Yes | 0 | CAD → Walk and W movement observed. Initial image has severe bright clipping behind/around the wardrobe. Audio remained uninitialized in this smoke path; its graph was inspected in source. |
| Fable51 | Yes | 0 | Entry handler, CAD transition, radio/rain/window and master-door handlers ran. |
| Sol | Yes | 0 | CAD → Walk and W movement observed; running AudioContext and nonzero RMS observed. |
| Grok47 | Yes | 0 | CAD transition/audio handlers ran at a reduced viewport; compositor capture was skipped after an inconclusive initial capture-oriented attempt. |
| Gemini4 | Yes | 0 | CAD camera state and running environment toggles observed; diagnostic probe confirms off-grid clamp and fixed drawer-area estimate. |
| Qwen38 | Yes | 0 | CAD transition and procedural audio/environment handlers ran. Shelf-return defect is established separately by source/FSM probe. |
| GLM53 | Yes, but misleading | **135** | Repeated `Cannot read properties of undefined (reading 'angleTo')`; apartment render never reached. |

Several browser runs logged two generic resource-404 console messages, without a corresponding failed page request or captured HTTP-error response. Their origin was not established; they are retained in the JSON. Consequently this report does **not** reproduce the historical blanket claim of zero console errors. AstraMax and Sol's unmodified smoke runs logged zero console errors. GLM53's uncaught JavaScript failure is independently identified and is unrelated to those resource messages.

## 3. Per-build audits

### Opus55 — 91/100

**Camera & Collision — 17/20.** Strong fallback drag-look, screen pad, damped velocity, head-bob, contextual raycasting, dynamic furniture/window bounds, orbit and true orthographic projection. The camera transition preserves position/quaternion endpoints. However, [the locked branch of `updateWalk`](candidates/gta-opus55/index.html#L1868) recalculates yaw/pitch toward `(-0.9, 1.25, -1.6)` on every update instead of preserving the user's look. In the [controlled probe](audit-evidence-sol/opus55-focused.json), `updateWalk(0)` changes yaw **1.2 → 0.519146** and pitch **0.4 → −0.117972**. Zero elapsed time is sufficient: this is a controller defect, not software-GPU lag. Move the pose-restoration block back to initialization and read the camera orientation during locked movement.

**Volumetric Lighting & Mirrors — 19/20.** The strongest actual light-volume implementation: [analytic six-pane shaft membership plus depth-bounded screen-space integration](candidates/gta-opus55/index.html#L2136), noise, phase scattering and quality-dependent steps. Its 720 dust points reuse the same shaft predicate, making dust/beam agreement much better than an unrelated bright band. Real Reflectors, a bounded planar count/cube-map fallback, 2048² shadows and warm LEDs complete the system. Deduction: static aperture rectangles do not follow the sash or provide light-space occlusion from moving doors/cat. A camera-depth bound is not equivalent to shadowing the participating medium. Hardware performance is also unestablished.

**WebAudio — 20/20.** The most complete specification coverage: procedural soft-close hiss/thud, rail sweep, grid/tape sounds, spatialized events, radio/vinyl, street/birds/tram, rain, mixer and listener. The three window states produce 250/900/1800 Hz targets. Inspect the [audio implementation](candidates/gta-opus55/index.html#L2270) and its exported diagnostics near L3376. Full marks reflect code and reachable graph coverage, not listening approval.

**Cat — 19/20.** [Shelf planning](candidates/gta-opus55/index.html#L2700) checks real support, head clearance, open fronts, drawer obstruction and approach paths. The FSM includes turning, crouching, a genuine quadratic `4t(1−t)` jump, landing, shelf dwell, descent, rug circling, curling, sleep and wake/stretch. Door closure requests eviction. Deduction: timed retries and configuration rebuilds need a stronger support/clearance revalidation contract throughout a jump and perch, rather than relying on the old planned target.

**System-32 & BOM — 16/20.** Correct equal-bay and clear-height formulas, neighbour-aware editing, 36 mm reinforcement option, real hardware lines, separate decors, VAT modes and useful JSON/TXT export. But the [drawer builder](candidates/gta-opus55/index.html#L1420) renders a bottom **Wbay−42 mm wide and 16 mm thick**, whereas [the BOM](candidates/gta-opus55/index.html#L2924) bills a bottom **Wbay−75 mm wide** in the common board pool. That is a 33 mm width mismatch, beyond display rounding. Long top/bottom runs are also issued as continuous parts without a stock-fit strategy. Derive billable parts and meshes from one part model, including thickness.

**Self-QA judgment:** candid about software rendering, simulated transition timing, audio listening and light-space occlusion. The 52-check claim cannot be independently rerun from this copy, and its explicitly untested locked path contains the regression above. **Best donor:** volume/dust predicate, acoustic system and cat choreography. **First repair:** native look, then drawer part reconciliation.

### AstraMax — 88/100

**Camera & Collision — 19/20.** Strong reversible saved poses, wall/carcass resolution, elapsed-time movement substeps, fallback/native controls, on-screen movement and true orthographic elevation with its own controls. [Controller code](candidates/gta-astramax/index.html#L226) also hides the room/props in elevation and fits portrait widths. The collider is a simplified static carcass envelope; doors and other changing solids are not resolved to Opus/Qwen's level.

**Volumetric Lighting & Mirrors — 16/20.** Two actual shaft meshes use a [12-sample density shader](candidates/gta-astramax/index.html#L100), with 540 drifting dust points, procedural grain/normal/roughness maps, time-of-day, soft shadows, real planar mirrors and per-bay LEDs. Its integration samples from the visible surface forward by an arbitrary additional distance, without an entry/exit or opaque-depth bound. That is weaker than integrating a properly bounded segment. The [fresh initial screenshot](audit-evidence-sol/astramax-initial.png) also shows a conspicuous overexposed white region with coloured edges behind the wardrobe. The cause is not established, but the visible artifact warrants correction before adopting its lighting wholesale.

**WebAudio — 18/20.** [Soundscape](candidates/gta-astramax/index.html#L107) has exact 90→38 Hz thud, damper noise, rail/grid/tape events, HRTF one-shots, radio chord synthesis, rain impulses, street noise and LPF, listener and proximity purr. The radio's tonal events are spatial, but the continuous vinyl source goes directly to the music bus rather than sharing one prop-space panner. Scheduling through scene updates remains vulnerable to slow frames. This smoke run did not initialize its audio because the optional helper invoked by the generic harness is absent; no runtime audio pass is claimed for that path.

**Cat — 17/20.** Four two-joint legs, five tail bones, approach, true quadratic jump/descent, rug sleep and breathing. [Access selection](candidates/gta-astramax/index.html#L176) tests actual doors/sliding coverage and a real low shelf; moving its selected shelf updates the target. [Door closure](candidates/gta-astramax/index.html#L212) waits for evacuation. Deductions: shelf selection does not establish overhead body clearance, and a wardrobe rebuild teleports a visiting cat to the rug rather than preserving a safe continuous lifecycle.

**System-32 & BOM — 18/20.** [Metrics and `fitY`](candidates/gta-astramax/index.html#L45) correctly account for fillers, N+1 boards, module extents, neighbour separation and a 32 mm search space. Dimensions, doors, drawer heights, physical cargo/trouser pulls, all six decors, stock-size warning, 15% waste, sheet area, edge/hardware costs and VAT are wired. Long runs are sectioned in both geometry and cut-list. The generic sectioning and separately constructed BOM still deserve verification across mixed part types; this is an area-based procurement estimate, not a nesting proof. It has only three preset families, though independent module editing supplies the required functionality.

**Self-QA judgment:** unusually candid about its reported **1.46 FPS** software result, sourcing assumptions and area-based sheet estimate. The cited 72 checks are not included, and the screenshot artifact prevents accepting the visual result at face value. **Best donor:** `validY`/`fitY`, shelf-target updates and state-based door-close deferral. **First repair:** beam integration/exposure and cat clearance.

### Fable51 — 88/100

**Camera & Collision — 17/20.** [Walk/orbit/elevation](candidates/gta-fable51/index.html#L1459) supplies eye height, acceleration, fallback look, UI movement, AABB resolution, saved pose and quaternion interpolation. Orthographic elevation has dedicated pan/zoom controls. Pointer locking is implemented directly through the browser API rather than the requested `PointerLockControls`. The main loop caps simulation delta at 0.1 s, so a nominal one-second transition can exceed the wall-clock interval at low FPS. Collision checks resolve the endpoint rather than a swept movement segment.

**Volumetric Lighting & Mirrors — 18/20.** [Four pane-aligned extruded shaft volumes](candidates/gta-fable51/index.html#L737), 650 beam-sensitive dust points, procedural normal/roughness maps, lacquer response, solar changes, shadows and automatic LEDs. Three planar mirrors are prioritized around the centre; additional fronts use explicitly disclosed high-specularity silver. Surface-density shading is cheaper than integrated participating media and does not provide moving-object light-space shadowing, hence not full volumetric credit.

**WebAudio — 19/20.** [The engine](candidates/gta-fable51/index.html#L1185) has a strong procedural library, Foley panners, radio panner, window-filtered ambience, rain wash plus impulses, tram events, vinyl, chord/detune/tremolo and category mixing. It schedules from AudioContext time. Grid/tape effects route directly to the Foley bus rather than through a position-specific panner. A separate, bounded look-ahead scheduler would make it less dependent on render cadence.

**Cat — 18/20.** [The articulated FSM](candidates/gta-fable51/index.html#L1331) has lateral leg phasing, five tail bones, path checks, real low perches, overhead clearance, quadratic jump/down arcs, curled breathing and proximity purr. It checks continuing bay access while approaching/perching. Closing a front begins the cat's escape rather than explicitly holding that front clear until the cat has left; configuration changes also need stronger support-identity validation.

**System-32 & BOM — 16/20.** Correct envelope/joinery, independent module lists, occupancy-aware placement, three front systems and full cost categories. However, [drawer geometry](candidates/gta-fable51/index.html#L1007) uses **12 mm** bottom/back pieces, while [the cut-list](candidates/gta-fable51/index.html#L1114) places its “HDF/16” bottom and back in the ordinary decor/board pool with different dimensions. The rendered per-bay HDF backs are billed as a whole outer rectangle. Printed dimensions are rounded while areas use unrounded values, and long runs lack stock-fit warnings/sectioning. These are fabrication consistency deductions, not a demand for a full nesting optimizer.

**Self-QA judgment:** the eight-line report establishes only a claimed initial canvas, zero errors and one screenshot. It does not substantiate the five pillars. **Best donor:** per-bay occupancy, accessible-perch logic, radio texture and its transparent mirror budget. **First repair:** cut-list/geometry contract and door/cat interlock.

### Grok47 — 87/100

**Camera & Collision — 18/20.** Coherent [saved-pose transition and elevation](candidates/gta-grok47/index.html#L2272), native/fallback look, acceleration, eye-level head-bob, contextual controls and solid bounds. The self-test compares the actual carcass `Box3` with the collision box, a valuable invariant. A 50 ms simulation cap stretches transition duration under software rendering; collision and timing need real-time edge-case coverage beyond fixed-step self-tests.

**Volumetric Lighting & Mirrors — 17/20.** Four [extruded shaft boxes](candidates/gta-grok47/index.html#L1718), 560 Points with beam-sensitive brightness, 2048² soft shadows, automatic LED/night behavior, procedural normal/roughness maps and real hinged/sliding Reflectors. This remains shell shading rather than a density integral. Dust displacement includes fixed per-frame increments, so its drift speed varies with frame rate. Mirror and dynamic lighting cost need a controlled rendering budget.

**WebAudio — 19/20.** [Procedural graph](candidates/gta-grok47/index.html#L805) includes radio/ambience/purr panners, listener updates, window LPF, rain and the mechanical suite. The graph is more fully spatial than Gemini's. Event timing and long-running graph/resource behavior are less convincingly evidenced than the inventory; the fresh audit did not listen or run an endurance test.

**Cat — 17/20.** Bone hierarchy with multi-joint legs and five tail segments, good lateral phasing, real [shelf/access discovery](candidates/gta-grok47/index.html#L1615), strolling, anticipation, perch, descent, curl and pet behavior. [Jump height](candidates/gta-grok47/index.html#L2120) adds `sin(πt) × 0.32`, so the self-QA's “parabolic” description is mathematically inaccurate. Rebuilds and a changing shelf still need support identity/headroom revalidation through landing.

**System-32 & BOM — 16/20.** [Solver and quote](candidates/gta-grok47/index.html#L440) use the required formulas and most rates, independent bays, draggable shelves/rods, pullouts, VAT and export. Several part measures are not the rendered measures: the adjustable shelf is **Wbay−2** in geometry but **Wbay** in the quote; HDF height is **Hinternal+8** in the builder versus **+10** in the quote. Mirrored fronts are priced as replacement mirror parts instead of a clearly itemized backing-plus-insert surcharge. No stock-fit treatment for long runs is established.

**Self-QA judgment:** useful explicit caveats about software frame capture, pointer lock and long transition wall times. Its built-in self-test is useful engineering evidence but shares the implementation's assumptions and should not arbitrate its own geometry/cost correctness. **Best donor:** collider-versus-mesh invariant and scriptable semantic diagnostics. **First repair:** shared part data, real-time timing and support revalidation.

### Qwen38 — 82/100

**Camera & Collision — 19/20.** [Player/collision code](candidates/gta-qwen38/index.html#L4345) handles room and dynamic solids, acceleration, head-bob, native/fallback look and UI input. [Camera switching](candidates/gta-qwen38/index.html#L4457) includes separate perspective/orthographic views, pan/zoom, quaternion interpolation and restoration. Its one-second tween still advances on simulation delta; low frame rate stretches it. This is one of the better camera/inspection APIs.

**Volumetric Lighting & Mirrors — 17/20.** [Two procedural shaft volumes](candidates/gta-qwen38/index.html#L2740) use FBM density-looking surface shaders, solar/window state, endpoint clipping, beam-responsive motes, physical procedural maps, mirror panels and warm LEDs. They are not true ray-integrated volumes. `beamLength` also compares world-metre x positions against `cfg.W / 2` in millimetres, weakening the wardrobe-width clipping test. Audit unit conversions before transplanting the clipping code.

**WebAudio — 19/20.** [The acoustic subsystem](candidates/gta-qwen38/index.html#L2995) contains substantial spatial Foley, a prop-space chord/vinyl radio, ambient synthesis, rain, listener, mixer and window filtering. It is a good feature donor; render-loop-driven scheduling still needs low-FPS/endurance verification rather than equating a running AudioContext with stable music.

**Cat — 12/20.** [The genuine SkinnedMesh/skeleton](candidates/gta-qwen38/index.html#L3534) is an excellent visual donor: full hierarchy, articulated paws, lateral gait, tail, sleeping and pet poses. The FSM integration is substantially weaker. [On landing](candidates/gta-qwen38/index.html#L3840), it changes `jump → sit` and clears `CAT.jump`. The code labelled “sitting on the shelf → hop back down” lives inside the `jump` branch's no-jump-data case, so that intended return path is not entered after landing. The `sit` branch eventually selects another shelf jump or `stroll`; strolling damps y toward zero. The [isolated original-branch probe](audit-evidence-sol/qwen-fsm-isolated.json) produces **jump → sit at 0.5 m → stroll at 0.5 m**, then sinks toward floor y without any return jump. Sleep selection can also teleport to the rug. Shelf selection does not establish full headroom/sliding-panel coverage or invalidate a perched support on rebuild. Do not transplant this FSM with the mesh.

**System-32 & BOM — 15/20.** Rich decors, hardware, cut-list, warnings, technical overlay and exports. But [the clear width](candidates/gta-qwen38/index.html#L1003) is floored, departing from the brief's exact equal distribution. The computed remainder does not restore the fractional width to the bay dimensions. In [the part builder](candidates/gta-qwen38/index.html#L2230), display dimensions and areas are rounded separately; mixed decors share an area-based sheet count rather than independent material procurement. The [quote](candidates/gta-qwen38/index.html#L3999) always retains installation even for the supply-only VAT description. Long stock and mesh/BOM agreement need explicit verification.

**Self-QA judgment:** no `SELF-QA.md` supplied; no missing-file penalty was applied, but there is no historical verification to reconcile. **Best donor:** skinning, material factory, inspection/event API and dynamic colliders. **First repair:** supported shelf lifecycle, dimensional units and exact bay widths.

### Sol — 81/100

**Camera & Collision — 18/20.** [Saved cameras, actual quaternion interpolation and wall-clock tween progress](candidates/gta-sol/index.html#L299), plus movement substeps, drag-look, native controls and on-screen movement. Walk movement was observed. Orthographic fitting adapts to viewport width. The elevation camera has no dedicated orbit/pan/zoom controller, and collision approximates the static envelope/bench rather than moving fronts/drawers.

**Volumetric Lighting & Mirrors — 16/20.** [Four shafts made from eight intersecting slices each](candidates/gta-sol/index.html#L211), 560 drifting dust points, normal/roughness maps, anisotropic/clearcoat materials, 2048² shadows, actual Reflectors with explicit recursion suppression and automatic LEDs. Slices are a credible low-cost effect but do not integrate density. Dust uses an approximate fixed bright band rather than the rotated shaft geometry. The daylight shaft rotation and direct sun direction are related aesthetically rather than through one exact aperture predicate.

**WebAudio — 17/20.** [Procedural Foley and prop-space radio](candidates/gta-sol/index.html#L250), 90→38 Hz thud, rail sound, grid/tape events, street/rain/LPF, footsteps, purr and updated listener. Fresh smoke observed nonzero RMS with audio running. Category mixing is thinner than Opus/Fable/Grok, ambience is not routed through a shared window-position panner, and closing a drawer selects the generic soft-close effect rather than its rail-glide event. Scheduling is frame-driven.

**Cat — 14/20.** Bones, hip/knee animation, five tail joints, access selection, headroom check, real low shelf target, approach, perch, down, rug sleep and purr are present. [The flight arc](candidates/gta-sol/index.html#L291) is sinusoidal, despite self-QA saying parabolic. More seriously, a rebuild never validates/remaps the visiting cat's support or closes fronts safely around it. The [controlled probe](audit-evidence-sol/sol-focused.json) removes the supporting shelf and rebuilds: the cat remains **`perch`, y=0.427 m, zero shelves** in that bay. Commands to sleep/walk can also bypass a proper descent.

**System-32 & BOM — 16/20.** Correct clear widths/heights, supported [partition-centred stock segmentation](candidates/gta-sol/index.html#L165), broad per-bay modules, hardware/VAT, CSV/JSON export and local persistence. But [sanitization/dragging](candidates/gta-sol/index.html#L166) clamps to the envelope without checking neighbours. Two shelves at y=320 survive sanitation at **[320, 320]**. The sliding front reuses the hinged panel width/clearance and translates panels without an overlap/collision strategy. Labour still includes installation at 23%, and the mirror charge uses the full front area while the Reflector inset is smaller. These limit manufacturing/quote fidelity despite correct headline formulas.

**Self-QA judgment:** detailed and candid about software graphics, estimate status and networking. The matching hash identifies this exact file, but its 65 claimed checks miss overlapping modules, removed cat support and the sinusoidal arc. **Best donor:** stock segmentation, exports/persistence, bounded mirror recursion and clear customer presentation. **First repair:** one shared module validator and cat-support lifecycle.

### Gemini4 — 61/100

**Camera & Collision — 13/20.** Native/fallback look, WASD/UI controls, contextual raycasts and eased position/quaternion/FOV transition are present. [Movement](candidates/gta-gemini4/index.html#L3754) directly changes position at fixed speed, without the requested acceleration/deceleration. Collision is a broad room/wardrobe clamp. [Elevation](candidates/gta-gemini4/index.html#L3730) remains the same PerspectiveCamera at 28° FOV; it is not orthographic. Its transition progress using elapsed wall time as a lower bound is worth copying.

**Volumetric Lighting & Mirrors — 13/20.** [Two crossed planes per pane](candidates/gta-gemini4/index.html#L2322) create a shader effect, not a volume integral. Dust, solar colours, soft shadows and LEDs are implemented. The [central planar Reflector](candidates/gta-gemini4/index.html#L2667) is repositioned independently of animated door pivots, so it cannot be assumed to be the correct moving mirror on each configured front. Most other mirrored doors use a shiny material. Night retains a small nonzero sunlight/beam factor. The [960 × 640 screenshot](audit-evidence-sol/gemini4-initial.png) has overlapping top controls and large side panels obscuring the wardrobe, undermining the brief's product centrality.

**WebAudio — 12/20.** Real procedural thud/glide/grid/tape, radio chords, rain and 250/1800 Hz filter. However, [the complete engine](candidates/gta-gemini4/index.html#L1457) has no `PannerNode` construction or listener update; Foley and radio connect through gains to the master. The radio has chords but no dedicated vinyl layer, and the traffic claim is largely represented by a noise bed. Cat purr is a triggered burst rather than a proximity-aware ongoing source.

**Cat — 12/20.** Real articulated multi-joint anatomy and five tail bones, walking, quadratic flight, sitting, sleep and pet poses. [Jump commands](candidates/gta-gemini4/index.html#L3484) open bay 0 and immediately begin flight, regardless of the actual shelf's bay or front clearance. Shelf target selection leaves a stale global fallback if all qualifying shelves disappear. The [probe](audit-evidence-sol/gemini4-focused.json) removes every shelf and still enters `jumping_to_shelf` toward the old target. Sleep teleports to the rug.

**System-32 & BOM — 11/20.** Correct basic formula and configurable envelope, but [snap-then-clamp](candidates/gta-gemini4/index.html#L1330) can leave the grid: with default Hint=2384, max=2320, an upper drag clamps to **2320 % 32 = 16**. New shelves/rods/drawers can be added repeatedly at the same fixed y without occupancy validation. [Drawer area](candidates/gta-gemini4/index.html#L3017) is a hardcoded **0.48 m² per drawer**; the probe changes depth 450→700 and still gets **2.40 m² for five drawers**. Hinge bands use carcass height rather than the actual Hcarcass−4 door height. The cut-list combines unlike filler parts, assumes one rounded size for all drawers, and the visible add-drawer control supplies only 180 mm. The production card modal is useful, but the quote is not an exact cut-list result.

**Self-QA judgment:** overstates spatial acoustics, exact BOM, strict snapping, orthographic behavior and safe shelf access. A working scene and a long QA narrative do not establish these claims. **Best donor:** wall-time transition guard and visible arithmetic explanations. **First repair:** true ortho, spatial bus graph, module validator and part-derived pricing.

### GLM53 — 32/100

**Blocking runtime defect.** [SUN](candidates/gta-glm53/index.html#L1516) has no `lastDir`; that field belongs to [BEAM](candidates/gta-glm53/index.html#L1520). Nevertheless [L1719](candidates/gta-glm53/index.html#L1719) calls `SUN.lastDir.angleTo(SUN.dir)`. Every [tick](candidates/gta-glm53/index.html#L3335) reaches `updateEnvironment` before `updateWindowSash`, `updateCat`, `updateAudioListener` and `renderer.render`, so these later operations are skipped. A new animation callback was already queued, causing repeated uncaught errors rather than recovery. The fresh run recorded **135** identical page errors. Its “ready” flag therefore does not mean a frame rendered. The [screenshot](audit-evidence-sol/glm53-initial.png) shows HUD over a blank background. Fix the field reference, then verify a complete rendered tick; do not treat the correction alone as a passing audit.

**Camera & Collision — 4/20.** Internal camera pose and transition logic execute before the exception, but their results are never displayed. Manual orbit/ortho and input code exist, with simplified collision. Its circle/AABB push also fails to resolve a centre already inside the rectangle (`dx=dz=0`). Partial source credit only.

**Volumetric Lighting & Mirrors — 4/20.** Frustum shaders, 620 dust points, shadows, time and LEDs are authored but the application render is unreachable. The mirror material uses a static procedural environment and high specularity; no planar Reflector exists. Credit reflects authored components, not a functioning apartment view.

**WebAudio — 13/20.** Procedural Foley, panners, rain, vinyl/chords and a [separate 120 ms audio scheduler](candidates/gta-glm53/index.html#L2182) are substantial and can run despite the visual exception. However, sash animation and listener updates are after the throw. Thus the window never opens acoustically through its normal animation path, and spatial sound cannot follow the displayed camera as specified. Do not award the full audio inventory as integrated behavior.

**Cat — 2/20.** Articulated groups, multi-joint legs, five tail segments, states and jump formulas exist. `updateCat` is never reached in the supplied main loop. Even after repairing the crash, [shelf selection](candidates/gta-glm53/index.html#L1874) can choose a rod+0.1 m fallback rather than a supporting shelf and does not validate headroom; the jump is sinusoidal. Source anatomy credit only.

**System-32 & BOM — 9/20.** The DOM configurator and basic joinery math work independently of rendering. Quote accuracy does not. [The row helper](candidates/gta-glm53/index.html#L1418) multiplies edge by quantity, while several callers already supply a quantity-multiplied edge length. For six 816 mm shelves, it returns **29.38 m** versus **4.896 m** for their six front edges. [The total](candidates/gta-glm53/index.html#L1477) then omits edge-band cost altogether while [the UI](candidates/gta-glm53/index.html#L3126) displays it: default **161.08 m × 4.50 = 724.86 PLN** is absent from net **6988.468396 PLN**. The [focused probe](audit-evidence-sol/glm53-focused.json) confirms net equals material+hardware+labour excluding edges. Waste affects sheet count but not board-material charge. Drawer carcass parts are omitted and front heights use bay 0 for every drawer. Some presets bypass grid snapping; the high-hang rod at top−150 is subsequently filtered out by a top−200 ceiling rule, as the focused probe also shows.

**Self-QA judgment:** no `SELF-QA.md` supplied. The ready flag and volume of authored code would be especially misleading here without a real render-loop check. **Best donor:** independent audio scheduling and explicit pure quote/config functions as architectural ideas. **First repair:** exception and render gate, then accounting and module layout. This build requires a full re-audit after repair.

## 4. Highest-value cross-pollination patterns

These are bounded subsystem transfers. Copying entire modules would import incompatible units, bay indices, global state and the defects above. Retain the single-file deliverable, but give each subsystem explicit inputs and stable identifiers.

| Priority | Pattern and donor | Why it is worth transferring | Integration rule and acceptance check |
| --- | --- | --- | --- |
| 1 | **Validate a placement before committing it — AstraMax, reinforced by Fable51** | Astra's `validY`/`fitY` searches legal 32 mm positions using module extents; Fable independently models per-bay occupancy. This directly addresses Sol/Gemini overlap and boundary defects. | One validator must serve drag, slider, preset, add, height change, resize and restore. Two shelves cannot occupy the same slot; changing drawer height cannot overlap a neighbour; every final relative y remains divisible by 32. |
| 2 | **One physical part list feeding both geometry and quote — develop from AstraMax/Sol/Qwen patterns** | Astra constructs a cut-list alongside its meshes; Sol explicitly reuses stock segments; Qwen attaches material, thickness, quantity and edge information to parts. Each has useful ingredients, although none is a complete fabrication authority. | A part contains ID, material/decor, thickness, dimensions, quantity, exposed edges and placement. Build meshes, CSV/JSON and cost from those same records. Eliminate Opus/Fable/Grok drawer and HDF discrepancies and GLM's duplicate quantity multiplication. |
| 3 | **One aperture predicate for shafts and dust — Opus55** | Shared pane membership makes the illuminated dust visually belong to the light volume. Camera-depth clipping and a bounded integration segment are better than brightening an unrelated plane or band. | Drive direct sun, shaft direction, pane transforms and dust membership from the same solar/window state. Add light-space moving-object occlusion only after the basic shared geometry is correct. Budget the ray count/profile explicitly. |
| 4 | **Quality-scaled spatial shafts — Fable51/Sol with Opus55 profiles** | Cheap 3D shell/slice effects can preserve spatial cues when a ray-marched pass is too expensive. Opus exposes quality profiles; Sol adapts resolution; Astra batches static geometry. | Offer an honest lower-cost lighting tier. Keep shadows/dust/interaction functional; do not label a sliced fallback as physically integrated scattering. Benchmark on an actual GPU before setting a 60 FPS claim. |
| 5 | **Qwen38's skinned cat with Opus55's FSM** | Qwen provides the strongest mesh/skeleton system. Opus provides the best anticipation, occupancy, gait, quadratic flight, dwell, descent and rug choreography. | Copy the rig and pose interface, not Qwen's FSM. Drive it with states such as approach, face, crouch, jump, perch, evacuate, rug and sleep. A 30-second shelf visit must include a distinct downward flight before floor locomotion. |
| 6 | **Support references and door-close handshake — AstraMax + Opus55** | Astra updates a moved target shelf by module ID and defers closure until evacuation; Opus checks headroom/drawers and approach paths. | Cat support is `{bayId, moduleId, topFace}`. Before flight, at landing and after every config change, validate support, overhead clearance and actual front coverage. Defer closing by a state condition, not a fixed timeout. Test deleting/moving support during flight/perch. |
| 7 | **Wall-clock camera duration with stable physics substeps — Gemini4 + Sol** | Gemini takes the maximum of simulated tween progress and wall-time progress; Sol uses raw elapsed time for its camera and bounded substeps for movement. This resolves Grok/Fable/Opus slow-frame transition stretching. | Camera duration uses a monotonic clock; collision uses bounded simulation steps. Both directions complete in 0.8–1.2 seconds of wall time without changing eye height or tunnelling through the wardrobe. Preserve look while locked. |
| 8 | **Mesh-to-collider invariant — Grok47, dynamic bounds from Qwen38/Opus55** | Grok explicitly compares the built carcass bound with the walk collider. Qwen/Opus add changing solids. | Keep units and coordinate space explicit. Validate colliders against rendered bounds after every envelope/front change. Test W and diagonal input into each wall, at asymmetric fillers, and beside an open drawer/door. |
| 9 | **Acoustic library and prop-space buses — Opus55/Fable51/Grok47** | Exact thud/damper envelopes, spatial one-shots, window-filtered ambience, layered radio/vinyl and category gains are already substantially solved across these builds. | A radio has one prop panner for its chords, beats and vinyl; outside sources share the window-position/filter chain. Route all named Foley consistently. Derive sound-event positions from current world transforms rather than approximate local coordinates. |
| 10 | **Audio scheduling independent of rendering — GLM53** | Its bounded 120 ms scheduler continues even when the graphics loop throws. This is useful separation despite the broken integration. | Use AudioContext-time look-ahead with explicit start/stop lifecycle. Update listener and window target independently of rendering where appropriate. A render stall must not halt chords or leave the LPF at its old value. Reuse the idea, not GLM's broken environment field access. |
| 11 | **Bounded planar reflections — Opus55/Fable51 + Sol** | Opus/Fable cap costly planar mirrors and disclose fallback behavior; Sol suppresses sibling mirrors/annotations during reflection to bound recursion. | Attach each reflecting surface to its actual moving front, maintain visibility with `try/finally`, dispose targets on rebuild, and share a reflection budget. Verify multiple mirrors after resize and material changes. |
| 12 | **Supported stock segmentation and procurement assumptions — Sol/AstraMax** | Sol splits horizontal runs at partition centres; Astra sections long runs and flags parts that cannot fit a stock rectangle. Both distinguish sheet-area estimates from verified CNC nesting. | Meshes and cut-list must share every split and seam. Compute sheets per material/decor/thickness; never present an area ceiling as a nesting proof. Check the 4200 mm envelope and grain direction. |
| 13 | **Progressive customer-facing workbench — AstraMax/Sol; arithmetic disclosure from Gemini4** | The two FORMA interfaces give the wardrobe more space and stage dimensions/interior/quote. Gemini makes the joinery equation unusually legible. Sol adds persistence, CSV and JSON. | Keep calculation details in the quote/CAD layer and leave the room visible. At 960 px and mobile width, opening the BOM must be a reversible layout state. Preserve exact project data without forcing the customer to read implementation jargon. |
| 14 | **Semantic diagnostics plus independent assertions — Grok47/Opus55/Sol** | Public camera, layout, cat, audio and renderer diagnostics make difficult interactions inspectable without relying on screenshots alone. | An external oracle must recompute engineering and cost expectations. A “ready” check requires a completed apartment render, advancing frames and no repeated exception—not just object existence. Test native and fallback input paths separately. |

### Shared engineering oracle

The following values are suitable independent expectations for a merged build; they are not a claim that every candidate was run against every vector in this audit.

| Case | Expected result |
| --- | --- |
| W=3000, H=2440, D=600, BL=BR=30, BT=20, plinth=80, N=3 | Wcarcass=2940; Wbay=956; Hinternal=2304 mm. |
| Same fillers/N, W=2832 vs W=2833 | Clear bay 900 vs 900⅓ mm; heavy-load warning appears only above 900. |
| Default Gemini upper placement bound with Hint=2384 | Highest legal final grid position below 2320 is 2304 mm, not 2320. Account for module extent before choosing the legal maximum. |
| Door height 1999/2000/2399/2400 mm | 3/4/4/5 hinges per hinged door, using actual leaf height. |
| Net board area A | Procurement area=1.15A; sheet estimate=ceil(1.15A/5.796), separately per procurement material. |
| Six 816 mm shelf front edges | 4.896 mb, charged once at 4.50 PLN/mb. |
| Quote | Net=sum of displayed payable line totals; VAT=net×rate; gross=net+VAT under one documented rounding policy. Installation must agree with the supply/installation option. |
| Cat support deleted or covered | Abort before takeoff, choose a safe landing, or evacuate; never continue perching on a removed surface or walk down through empty space. |

The brief supplies decor and hardware prices. Additional labour/HDF/cargo/LED assumptions are allowed as visible estimate inputs. This audit checks consistency with the supplied brief; it does not independently validate current supplier pricing or legal eligibility for a VAT rate.

## 5. Repair order and adoption decision

1. **Prove a complete rendered tick.** Fix GLM53's `SUN.lastDir` access and add an external frame/error gate. Its other subsystem scores need re-evaluation after this repair. Do not fold GLM's visual runtime into a merged base in its present form.
2. **Repair Opus55's locked camera branch.** Its drag fallback cannot stand in for pointer-lock verification. Add separate locked-orientation and permission-denied/fallback checks.
3. **Create one module/part authority.** Adopt Astra/Fable occupancy principles; use snapped legal bounds, physical extents and stable IDs. Derive both meshes and cut-lists from part records. Fix GLM cost omissions, Gemini fixed drawer allowances, and Opus/Fable/Grok measure mismatches before quoting a manufacturing specification.
4. **Finish the cat lifecycle.** Keep Qwen's rig, replace its state logic with Opus-style anticipation/descent, and use Astra-style support/door handshakes. Test shelf deletion, shelf drag, bay removal, front-system change and a closing sliding panel while occupied.
5. **Reconcile lighting and mirrors.** Start from Opus's shared aperture math, add a cheaper Fable/Sol tier, correct Astra's visible glare and ensure mirrors move with the door surface. Measure with multiple mirrors and at night, not just the default open wardrobe.
6. **Decouple acoustic scheduling and validate the product flow.** Combine the stronger audio libraries with a bounded AudioContext scheduler. Verify LPF endpoints, listener motion and mute using actual signal measurements, then listen. Finish with real desktop/mobile gestures, downloads, reload/persistence, extreme dimensions and a hardware performance run.

**Adopt Opus55 as the integration starting point only after its locked-look regression is fixed.** AstraMax is the strongest compact alternative for placement/quote discipline; Fable51 is the most balanced alternate immersion implementation. Grok47 is especially useful for invariants and diagnostics. Qwen38 and Sol are valuable subsystem donors rather than release-ready replacements. Gemini4's explanatory UI and timing technique are reusable; its engineering claims need narrowing. GLM53 should remain isolated until its render-loop failure and accounting defects are repaired.

## 6. Verification provenance and reproducibility

The smoke runner serves the candidate files unchanged. The focused runner injects only a diagnostic bridge into an HTTP response and pauses animation; it never writes candidate source. The Qwen probe extracts its original FSM branch and uses small scene/vector doubles. Those methods are deliberately distinguished so a logic probe is not mistaken for a successful real-time browser interaction.

This workspace already had Python Playwright and Chromium. The runners identify the browser executable and library environment they use. From this directory, the recorded invocations were equivalent to:

```bash
LD_LIBRARY_PATH=/home/agent/pw-env/libs/usr/lib/x86_64-linux-gnu /home/agent/pw-env/.venv/bin/python audit-evidence-sol/browser-audit.py opus55 fable51 astramax sol
LD_LIBRARY_PATH=/home/agent/pw-env/libs/usr/lib/x86_64-linux-gnu /home/agent/pw-env/.venv/bin/python audit-evidence-sol/browser-audit.py gemini4 qwen38 glm53
LD_LIBRARY_PATH=/home/agent/pw-env/libs/usr/lib/x86_64-linux-gnu /home/agent/pw-env/.venv/bin/python audit-evidence-sol/browser-audit.py grok47
LD_LIBRARY_PATH=/home/agent/pw-env/libs/usr/lib/x86_64-linux-gnu /home/agent/pw-env/.venv/bin/python audit-evidence-sol/focused-probes.py opus55 sol gemini4 glm53
node audit-evidence-sol/qwen-fsm-probe.cjs
```

Smoke serialization was refined to omit live Three.js mesh references after Grok's diagnostic object proved circular; the reduced-viewport follow-up is the retained Grok result. Earlier capture/optional-probe timeouts are not treated as regressions. The scripts require internet for pinned library/font imports. Their finite waits do not establish a boot-time service-level guarantee.

| Candidate | Supplied HTML SHA-256 |
| --- | --- |
| Opus55 | `78a4755cbec80abe3162ea1dc028fce7496808dcf66b8c32840234bcf7512395` |
| Fable51 | `9e707d4540ea10cec38cf60757329bc701ea74ca523311ce97305405f69efe1a` |
| AstraMax | `6a8cc7e8b3209a68d0f51fc80ad503952ac737a211e897e7e1405489f26878e6` |
| Sol | `d79d96bcc6f79a3100c48c7d66bf8df4dd97b600da7137c2862c0843c3e6b56b` |
| Grok47 | `a3b5f37e34f6de81dbff7f070d9278c8d17c867d4905a013a207d447112c1336` |
| Gemini4 | `35b16f49cf43e4c868a5a5f937344d15952b273f1df3495c2c13107f98d2fb39` |
| Qwen38 | `f1f56d8b1c7e6f28953a776f6f71c91239571a66ad13e4f2e5c6ff6cbea3beec` |
| GLM53 | `f58dff369b26a8d4a66409f2aab35e0346fe175ad746a06292841b9f5294f558` |


---

## Addendum — Clean-Room Wave 2 (`gta-fugu`, `gta-muse`, `gta-kimi`, `gta-minimax`)

| Candidate | P1 Camera (20) | P2 Lighting & Mirrors (20) | P3 WebAudio (20) | P4 3D Cat (20) | P5 System-32 & BOM (20) | **Total (100)** |
|---|---:|---:|---:|---:|---:|---:|
| **`gta-fugu`** (`Sakana Fugu · fugu-ultra-v2.0 xhigh`) | 19 | 19 | 18 | 19 | 19 | **94** |
| **`gta-muse`** (`Meta Muse · muse-wonder-1.0 ultra`) | 18 | 18 | 18 | 18 | 19 | **91** |
| **`gta-kimi`** (`Moonshot Kimi K3 · moonshotai/Kimi-K3`) | 17 | 18 | 18 | 18 | 18 | **89** |
| **`gta-minimax`** (`MiniMax-M3`) | 15 | 15 | 12 | 18 | 13 | **73** |

- **`gta-fugu` (94/100):** `3,753` lines (`118,880 B`). Complete clean-room build passing `12/12` v2.1 Oracle gates (`16/16` combined): `OrthographicCamera` elevation view (`L1020`, `L3092`), door-mounted `Reflector` (`L1836-1904`), procedural WebAudio with `250->1800 Hz` window LPF (`L2399`) and `PannerNode` (`L2483`), 20-part cat with shelf jump (`L2132-2364`), and 13-test `window.__studio.selfTest()` (`L3629`).
- **`gta-muse` (91/100):** `1,472` lines (`84,565 B`). True `OrthographicCamera` (`elevCam` `L310`), door `Reflector` (`L669, L688`), HRTF `PannerNode` on `playDoorClose` (`L799`), `THREE.Bone` cat (`L883`), and `InstancedMesh` System-32 pin holes (`L612`).
- **`gta-kimi` (89/100):** `1,286` lines (`75,512 B`). Passes `11/12` v2.1 Oracle gates (`15/16` combined). Only misses active orthographic projection (`orthoCam` at `L203` not swapped into `renderer.render` at `L1263`).
- **`gta-minimax` (73/100):** `2,557` lines (`111,476 B`). Suffers from `audio.resumeOnce()` `TypeError` (`L2445, L2448` vs `tryInitAudio` `L1672`), unused `Reflector` import (`L326`), and millimeter-vs-meter unit bug in `computeBom()` (`L2292`, `121,982 PLN`).
