- Walked: 2026-05-29 by Claude (Opus 4.8) against commit
bf12b0f7d8; browser coverage was extended on 2026-06-25 through 2026-06-27. - Reconciled: 2026-07-17 against the current Camera Obscura composer, plate-action island, Library store/read-back, cast endpoint, provider adapter, and focused browser suites. This review does not rerun the historical walker.
- Verdict: partial — current coverage deeply proves editable composition controls, specimen selection, compare, metadata-rich save, BFF and clean- device Library read-back, privacy-preserving telemetry, and fail-closed cast/refine requests. A real provider-backed image success and plate-specific variant resume remain outside the proven path.
- Historical runner:
/tmp/claude-oshun-lt-2-walkthrough/walk.mjs atelier-image-to-library. The temporary path remains provenance only; the repository suites below are the portable evidence.
Result at a glance#
| Evidence lane | Current result | Authority limit |
|---|---|---|
| Room composition | Prompt, aspect, style, seed lock, specimen selection, compare panel, and five-step rail transition in the real browser | Initial specimen/source data remains fixture-backed |
| Library save | atelier-plate-kept persists as generated-artifact, including prompt and composition metadata |
Saves metadata and partial provenance, not pixels |
| BFF and clean-device read | Saved item reads back through the real BFF and hydrates in a fresh browser context | Same authenticated test identity and local harness |
| Resume action | Library exposes Open in Atelier and returns to /atelier/image |
No plate id, selected state, or variant hydration |
| Cast and refine | Real /v1/atelier/cast seam receives edited composition payloads and fails closed when Stability is unconfigured |
Successful generated image bytes are credential-gated |
| Responsive behavior | /atelier and /atelier/image stack without horizontal overflow at 390 px |
Focused viewport, not the complete device matrix |
Evidence map#
The saved Library artifact records the user's composition and source context. Generation is a separate provider-backed branch, and the current resume link returns to the room rather than reopening a durable plate lineage.
flowchart LR
A[Camera Obscura fixture sources] --> B[Edit prompt and controls]
B --> C[Select and compare specimen]
C --> D[Save plate metadata]
D --> E[Web Library store]
E --> F[Real BFF saved-item read-back]
F --> G[Library generated-artifact row]
G -->|Open in Atelier| H[Generic /atelier/image]
B --> I[Cast or refine request]
I --> J[/v1/atelier/cast]
J -->|no credential| K[provider_not_configured]
J -. credential required .-> L[Generated image bytes]
H -. plate-specific hydration absent .-> M[Variant lineage]
Proven observations#
Composition and selection#
/atelierexposes five rooms and routes Camera Obscura to/atelier/image. Both surfaces have focused 390 px no-overflow coverage.- The image room accepts an edited prompt and exposes aspect, style, and seed- lock controls. Selecting a specimen updates the plate detail, compare opens a kept-versus-active panel, specimen selection advances the rail to step 4, and explicit save advances it to step 5.
- Cast and refine requests carry the browser-entered prompt, selected specimen, aspect, style, and seed-lock state rather than silently reverting to the initial fixture.
Saved artifact and provenance#
- “Save plate to notebook” writes the stable id
atelier-plate-keptas agenerated-artifact. Its summary retains the selected specimen, aspect, style, seed state, and normalized prompt; its trust state is explicitlypartialbecause provider image bytes are absent. - The test proves browser-store persistence, authenticated real-BFF read-back,
the filtered
/library?kind=generated-artifactrow, provenance badge and lineage note, and hydration in a clean second browser context. atelier_plate_savedtelemetry records a prompt hash plus bounded composition fields. The assertion explicitly rejects the raw prompt from telemetry.
Honest generation seam#
- “Cast twelve more” and “Refine · vary slightly” POST to the real
/v1/atelier/castBFF route. In an environment withoutOSHUN_STABILITY_API_KEY, the route returns typedprovider_not_configuredand the UI surfaces that state. - The fail-closed branch is meaningful proof that the product does not fabricate generation success. It is not evidence that a provider accepted the request, returned bytes, or preserved those bytes with the saved Library item.
Boundaries and gaps#
- Saved metadata is not generated pixels. The durable Library row preserves prompt, source names, specimen, aspect, style, and seed state with partial provenance. It does not contain a provider-generated image or an asset-level hash/receipt for those bytes.
- Resume is route-level, not plate-specific.
Open in Ateliertargets/atelier/image; there is no/atelier/image?plate=<id>hydration, restored selection, parent reference, or variant graph. - Provider failure is not provider success. The local credential-free path proves an honest 503. It does not exercise Stability latency, moderation, quota, response parsing, image persistence, retries, cancellation, or billing.
- Fixture inputs still shape the room. Source names and initial plate state
come from
getAtelierImageFixture; the browser interactions are real, but the initial contact sheet is not a provider response. - Crisis and sharing policy are not joined here. This record does not prove crisis-frame privacy defaults, a share gate, abuse review, or an AAA-tier handoff into Yemaya Studio.
- A clean browser context is not an arbitrary external device. The suite proves BFF rehydration inside the test harness, not cross-account or offline asset synchronization in production.
Re-run evidence#
The current focused browser evidence is:
bash
PW_BROWSER_CHANNEL=chrome pnpm exec playwright test \
-c apps/oshun/web/playwright.config.ts \
apps/oshun/web/e2e/atelier-image-to-library.spec.ts \
apps/oshun/web/e2e/atelier-plate-actions.spec.ts \
--workers=1
Run it against the real-development-infrastructure web/BFF harness. Without a Stability credential, the expected generation result is the typed fail-closed state; only a separately configured success-path run may claim returned image bytes.
Source trail#
- Source-reconciled journey
- Camera Obscura route
- Image composer
- Plate save/cast/refine island
- Atelier fixture data
- Web Library store
- BFF cast route
- Image-provider resolution
- Room and composition browser suite
- Save/read-back and cast browser suite
Cross-references#
- Journey coverage matrix
- Atelier index view
- Camera Obscura view
- Library view
- Scene keep-and-share journey
- Crisis-aware tone-policy result
Open questions#
- What identifier and route contract will reopen an exact kept plate with its selected specimen, prompt, controls, parent, and variants intact?
- Where should generated image bytes, hashes, provider/model metadata, safety decisions, and asset receipts live so Library provenance can become complete?
- Which credentialed staging gate will exercise provider success, timeout, moderation, quota, cancellation, retry, and persistence behavior?
- How should crisis-frame privacy and AAA-tier “Open in Studio” transfer alter the save and resume affordances?