# Stillwater Pavilion Environment study **01** by **Claude Opus 5.5**, made for the [rich environment eval](../../gpt-6-astra/living-pavilion/eval-prompt.md). It is an authoring result, not a score. ## Attribution - **Provider:** Anthropic. Supplied by the user on 25 September 2026 ("run the eval for anthropic, opus 5.5 high reasoning"). - **Model name:** `Claude Opus 5.5`. The user wrote "opus 5.5". The session metadata names the model Opus 5.5 with the ID `claude-opus-5-5`, and the manifest uses Anthropic's full product name. The directory uses the model ID. - **Reasoning effort:** `high`, supplied by the user in the same request. It was not inferred from the output. Independence caveat: before building, the model read the GPT-6 Astra Living Pavilion artifact, including its generator, page script and tests, to see how an entry is packaged. Treat this as an adaptation run, not a blind comparison. The layout, geometry, generator, page and interactions are new. The page reuses two packaging conventions from that entry: the GLB is embedded as base64 so the sandboxed gallery preview works, and Three.js is bundled with a throwaway `bundle.sh`. ## What is in the scene A 10 m square spotted gum deck under a slatted blackbutt roof with a 3 m opening over the middle. A brass square marks a 5.2 m clear centre with no furniture in it. The deck sits 0.45 m above a garden with a lily pond, reeds, tussock grasses, wattle, a dry-stone wall, two flowering trees, eleven eucalypts and a ring of distant hills. The activity areas sit around the edges of the deck: | Area | What is there | | --- | --- | | Reading corner (north-west) | Armchair with cushions, low bookshelf with about 130 book spines, shelf ceramics and a trailing plant, side table, field journal and pencil, floor lamp, rug, a stack of books on the floor | | Tea setting (north-east) | Tatami mat, low table, two zabuton, lacquer tray, clay teapot, two celadon cups, ikebana vase, napkin | | Planted seating (east) | Built-in bench with cushions, pillows and a folded throw, two planter boxes (a small tree, grasses), bamboo blind | | Water feature (north) | Stone basin on a plinth, bamboo spout, ladle, river stones, moss mound, fern, with the pond beyond | | Sculpture display (south-west) | Sandstone plinth with plaque and uplight, stacked basalt and granite stones with a bronze ribbon | | Structure and entry | Seven charred posts with bronze plates, beams, four paper lanterns, sandstone steps, stepping stones, path lights, two grass trees in celadon pots | From [asset-report.json](asset-report.json) and [object-inventory.json](object-inventory.json): 42 object families, 2,019 individually placed parts merged into 59 named mesh objects, 35,428 source polygons (57,326 triangles), 55 materials, seed 55. Roughness runs from 0.04 on water and 0.12 on celadon glaze to 1.0 on wool, tatami and gravel. Bronze and brass are metallic. ## Interactions All six are browser-only. Each changes the rendered scene, works by button (Enter or Space) or by tapping the object, reports the change in a status line, and reverses when chosen again. **Reset scene** restores all six and the starting view. | Object | Change | | --- | --- | | Paper lanterns | Four lanterns glow amber, and four point lights come on | | Field journal | The cover swings open on its hinge to show ink lines and a pressed leaf | | Tea for two | Tea appears in both cups, with steam over the cups and the spout | | Water basin | Water runs from the bamboo spout, ripples appear and the level rises to the rim | | Stone stack | The sculpture turns a quarter turn on its plinth | | Bamboo blind | The blind unrolls from the beam to shade the bench | Four viewpoint buttons (Pavilion, Reading corner, Tea setting, Whole garden) and a close-up for each object cover close and whole-scene views. Camera changes are instant and only happen when you ask. There is no render loop. Frames are drawn on drag, resize, view change or object change. Device pixel ratio is capped at 1.5. ## Files | File | Purpose | | --- | --- | | `generate.py` | Builds every mesh from vertices, renders the three stills, exports GLB and USDZ, writes the reports | | `scene.glb` (1.74 MiB) | Browser scene; kept for reuse, not fetched by the page | | `scene-data.js` (2.33 MiB) | The same GLB as base64, so file-backed pages and the opaque-origin gallery sandbox load it without fetch or CORS | | `scene.usdz` (293 KiB) | Static native environment, Y-up, metres, origin at the visitor's feet | | `preview.png`, `overview.png`, `closeup.png` | Blender EEVEE renders: interior, whole garden, tea setting | | `stillwater.js` → `stillwater.bundle.js` (586 KiB) | Page script, bundled with Three.js | | `bundle.sh` | Rebuilds the bundle with pinned tools in a temporary directory | | `THREE-LICENSE.txt` | Three.js MIT licence | Dependencies: Blender 5.1.2; Apple `usdzip`, `usdcrush` and `usdchecker`; Three.js 0.180.0 (MIT) with GLTFLoader, OrbitControls and RoomEnvironment; esbuild 0.25.10 (build only). No stock models, textures, image generators, remote services or credentials were used. ## Reproduce From the repository root: ```sh /Applications/Blender.app/Contents/MacOS/Blender --background --python artifacts/claude-opus-5-5/stillwater-pavilion/generate.py usdchecker artifacts/claude-opus-5-5/stillwater-pavilion/scene.usdz (cd artifacts/claude-opus-5-5/stillwater-pavilion && sh bundle.sh) npm run check ``` Two runs of the final generator produced byte-identical GLBs (1,829,380 bytes). The USDZ differs by a few hundred bytes between runs, and the renders vary slightly. ## Compatibility - **No WebGL, or load failure:** the rendered still stays in place, the object and view buttons stay disabled, and the status line says why. A lost WebGL context switches back to the still. - **No JavaScript:** the still, descriptions and links to the other renders remain. - **Gallery sandbox:** the preview runs with local assets only. Native immersion points to the standalone page, because the shared helper does not offer it inside a frame. - **Native environment:** the page reuses `assets/model.js` and `assets/immersive.js`. It checks for the Safari 27 / visionOS 27 website environment API and enters only when the button is pressed. The inline model is offset to eye height and one metre forward. Immersion restores the identity transform so the deck sits at the visitor's feet. - **Scope:** the USDZ shows the starting state (lanterns off, journal closed, cups empty, basin low, blind rolled up), the same as the still. The six changes do not carry into native immersion, and there is no WebXR renderer. ## Verification (25 September 2026) - `usdchecker scene.usdz`: passed. - `npm run check`: build passed, 13 unit tests passed, 61 Playwright tests passed in Chromium (the Playwright 1.63.0 build). - Tests added for this artifact cover: - gallery grouping under Anthropic, the High reasoning filter and the index entry - mocked native entry, decline and retry, and system exit - each of the six interactions: Enter changes the canvas, Space reverses it, and repeating it reproduces the same frame - tapping the sculpture and basin in the scene - reset returning to a frame identical to the start - 390 px and 1280 px at 200% text with reduced motion, checking that no control is clipped horizontally - the gallery sandbox making no remote requests - no WebGL, and no JavaScript - Existing gallery tests assumed one model per page. They now scope the "Reasoning level" select, and the scaffold fixture's lowercase `anthropic` provider was renamed so it no longer collides with this real provider. - Inspected by eye: all three renders, every interaction in the browser, the whole-garden view with everything switched on, and the mobile layout at 200% text. That inspection found and fixed a 390 px overflow, a hover state that hid the pressed view button, and a tree canopy blocking the overview. - Known quirk: in Playwright full-page screenshots of `/evals/`, a gallery iframe that is off screen when the capture happens can come out blank. The sandbox test confirms the preview loads and responds. **Device checks:** none. No Safari, visionOS or Apple Vision Pro hardware was used. Native model loading, scale and origin, immersion, comfort and headset performance have not been checked on a device. The native tests use mocked APIs.