diff --git a/web/reviewer-sandbox/.gitignore b/web/reviewer-sandbox/.gitignore
new file mode 100644
index 0000000..c4fac30
--- /dev/null
+++ b/web/reviewer-sandbox/.gitignore
@@ -0,0 +1,7 @@
+node_modules/
+dist/
+.DS_Store
+implementation-desktop-1440x1024.png
+implementation-mobile-390x844.png
+.vercel
+.env*
diff --git a/web/reviewer-sandbox/.npmrc b/web/reviewer-sandbox/.npmrc
new file mode 100644
index 0000000..1223b5c
--- /dev/null
+++ b/web/reviewer-sandbox/.npmrc
@@ -0,0 +1,2 @@
+fund=false
+audit=false
diff --git a/web/reviewer-sandbox/.openai/hosting.json b/web/reviewer-sandbox/.openai/hosting.json
new file mode 100644
index 0000000..47c28cb
--- /dev/null
+++ b/web/reviewer-sandbox/.openai/hosting.json
@@ -0,0 +1,4 @@
+{
+ "d1": null,
+ "r2": null
+}
diff --git a/web/reviewer-sandbox/AGENTS.md b/web/reviewer-sandbox/AGENTS.md
new file mode 100644
index 0000000..05965fc
--- /dev/null
+++ b/web/reviewer-sandbox/AGENTS.md
@@ -0,0 +1,16 @@
+# Prototype Instructions
+
+Run the local server yourself and open the preview in the browser available to this environment. Do not give the user server-start instructions when you can run it.
+
+Before making substantial visual changes, use the Product Design plugin's `get-context` skill when the visual source is unclear or no longer matches the current goal. When the user gives durable prototype-specific design feedback, preferences, or decisions, record them in `AGENTS.md`.
+
+When implementing from a selected generated mock, treat that image as the source of truth for layout, component anatomy, density, spacing, color, typography, visible content, and hierarchy.
+
+## Selected Valoris direction
+
+- The approved Reviewer Sandbox direction is Option 1: a guided, five-step desktop review workspace with a persistent task sidebar, role switcher, explicit orange DEMO/SYNTHETIC warning, and supporting/challenging evidence presented side by side.
+- Keep the visual language restrained and institutional: white and pale-gray surfaces, dark navy type, vivid blue actions, orange warning states, compact data density, subtle borders, and small radii.
+- Preserve the public-static boundary: no backend, authentication, uploads, private materials, production components, scientific-acceptance claims, or independence claims. Every fixture datum must carry a DEMO or SYNTHETIC label, and cryptography remains BLOCKED_UNVERIFIED.
+- The top Perspective control and the four “I’m reviewing as” buttons are two synchronized inputs for the same active reviewer role. The top control must be a functional selector on mobile and desktop, not a focus-only shortcut.
+
+Build app UI in `src/`. Keep `.openai/hosting.json`, `worker/index.js`, `scripts/prepare-sites-build.mjs`, and `tests/sites-worker.test.mjs` intact so the same local prototype can be handed to Sites. Before a Sites handoff, run `npm run build` and `npm run test:sites`; the build must leave `dist/client/index.html`, `dist/server/index.js`, and `dist/.openai/hosting.json`.
diff --git a/web/reviewer-sandbox/DEPLOYMENT.md b/web/reviewer-sandbox/DEPLOYMENT.md
new file mode 100644
index 0000000..d0c9c77
--- /dev/null
+++ b/web/reviewer-sandbox/DEPLOYMENT.md
@@ -0,0 +1,74 @@
+# Vercel Deployment Record
+
+- **Stable URL:** https://valoris-reviewer-sandbox.vercel.app
+- **Deployment ID:** `dpl_5vv3pjqr7D8Gr4jcmrdjZ7kWT8fY`
+- **Vercel project:** `halalmfs-projects/valoris-reviewer-sandbox`
+- **Target:** Production — promoted from validated preview `dpl_3YjYLjAWMLs5aEN8DUAjwP46JqYj`.
+- **Source commit:** `2abf130c878875ca7a51cd6d1dd61efded7c15fd`
+- **Status:** `READY`
+- **Artifact:** Prebuilt static Vite output from `dist/client`; no functions, API routes, backend, authentication, or upload endpoints.
+
+## Verification
+
+- Stable alias returned HTTP 200 without an authentication bypass.
+- Deployed HTML title and metadata match the Reviewer Sandbox build.
+- Security headers are active: restrictive Content Security Policy, denied framing, disabled camera/microphone/geolocation, no-referrer policy, MIME sniffing disabled, and Vercel HSTS.
+- Vercel marks the deployment `noindex`, appropriate for a reviewer demonstration.
+- Browser-rendered mobile verification passed at 390 × 844 CSS pixels: document width 390, no horizontal page overflow, single-column evidence layout, static task panel, active step visible, and zero console warnings/errors.
+- Browser evidence: `qa/deployed-mobile-390x844.png`.
+- Mobile interaction checks passed for role switching, the ADR dialog, `BLOCKED_UNVERIFIED` cryptography, and step navigation.
+- Vercel runtime error scan returned no logs; this is expected for a static deployment with no functions.
+
+## Boundaries
+
+The deployment remains DEMO/SYNTHETIC. It makes no scientific, security, cryptographic, production-readiness, or independence claim. Local Vercel link metadata and environment files are ignored and are not committed.
+
+## Reviewer handoff preview — 2026-08-17
+
+- **Preview URL:** https://valoris-reviewer-sandbox-aeybsb0lk-halalmfs-projects.vercel.app
+- **Deployment ID:** `dpl_3YjYLjAWMLs5aEN8DUAjwP46JqYj`
+- **Target:** Preview; the stable production alias was not promoted or changed.
+- **Source commit:** `2abf130c878875ca7a51cd6d1dd61efded7c15fd`
+- **Status:** `READY`
+- **Build artifact:** `index-CAorDIqP.js` and `index-wMgKUQ3e.css` from the static Vite output.
+- **Live verification:** Exact deployed title and synthetic boundaries rendered successfully. At 390 × 844 CSS pixels, the role-aware step-5 handoff generated for Materials Science, all three handoff actions remained reachable, document width stayed 390 with no horizontal overflow, and the console had zero warnings or errors.
+- **Production check after preview:** `https://valoris-reviewer-sandbox.vercel.app` remained deployment `dpl_Ff6fq9pDQx5LyAiPi8QKKxVvkMqi`, target `production`, status `READY`, and returned HTTP 200.
+
+## Production promotion — 2026-08-17
+
+- **Promoted preview:** `dpl_3YjYLjAWMLs5aEN8DUAjwP46JqYj`.
+- **Resulting production deployment:** `dpl_5vv3pjqr7D8Gr4jcmrdjZ7kWT8fY` at `https://valoris-reviewer-sandbox-fv1mxtivr-halalmfs-projects.vercel.app`.
+- **Stable public alias:** https://valoris-reviewer-sandbox.vercel.app returned HTTP 200 and resolved to the resulting production deployment with status `READY`.
+- **Artifact identity:** production served `index-CAorDIqP.js` and `index-wMgKUQ3e.css`, matching the validated preview artifact.
+- **Pre-promotion regression gate:** 7/7 sandbox and review-packet tests passed, 4/4 static-host packaging tests passed, and the Vite static build completed successfully.
+- **Desktop gate:** 1440 × 1024 CSS pixels, no horizontal overflow, exact DEMO/SYNTHETIC and BLOCKED_UNVERIFIED boundaries present, and zero console warnings/errors.
+- **Mobile gate:** 390 × 844 CSS pixels, no horizontal overflow, role-aware Cryptography handoff generated, all three handoff actions reachable, and zero console warnings/errors.
+- **Static boundary:** no backend, authentication, uploads, production components, file inputs, form targets, or Vercel Functions were present. The deployed artifact remained a static Vite bundle.
+- **Security headers:** restrictive Content Security Policy, framing denied, camera/microphone/geolocation disabled, no-referrer, MIME sniffing disabled, and HSTS remained active.
+- **Post-deploy error scan:** Vercel returned no runtime logs, expected for this static deployment.
+- **Promotion boundary:** the deployment remains a DEMO/SYNTHETIC reviewer interface and does not accept scientific, security, cryptographic, production-readiness, or independence policy.
+
+## Mobile overlap correction — 2026-08-17
+
+- **Validated source commit:** `048828823e91d83b882cdf54fe47a6cd5a90e7cd`.
+- **Validated preview:** `dpl_Ao99wJAbqzMKBquVr61X1oCvhKFn` at `https://valoris-reviewer-sandbox-jiuzsae9m-halalmfs-projects.vercel.app`, target `preview`, status `READY`.
+- **Resulting production deployment:** `dpl_D9U1SqbUZN7ZXLyfJjzezcJtANic` at `https://valoris-reviewer-sandbox-eabn3anzq-halalmfs-projects.vercel.app`, target `production`, status `READY`.
+- **Stable public alias:** https://valoris-reviewer-sandbox.vercel.app returned HTTP 200 and resolved to the resulting production deployment.
+- **Artifact identity:** preview and production serve `index-FM-UCdAY.js` and `index-BXtRsd-W.css`. Downloaded production assets exactly matched the promoted prebuilt artifact: JS SHA-256 `4f8b86f503be6fe91370dd4fc93ad9ec5ab99439af054c4768479fad8baf5f69`; CSS SHA-256 `60d5630b783cddb11b1cea98246111dbb3ac4aac7521e42c940121c54333e280`.
+- **Regression gate:** 8/8 sandbox and review-packet tests passed, 4/4 static-host packaging tests passed, the Vite static build passed, and the repository baseline passed.
+- **Responsive gate:** all four roles passed at 390 × 844; Materials Science passed at 320 × 800; desktop passed at 1440 × 1024. The brand, perspective control, global warning, and active walkthrough step remained contained with no document overflow or console warnings/errors.
+- **Reported-versus-fixed evidence:** `qa/mobile-overlap-source-vs-fixed.png`; focused corrected captures are in `qa/mobile-header-fixed-390x844.png`, `qa/mobile-header-fixed-320x800.png`, and `qa/desktop-header-fixed-1440x1024.png`.
+- **Headers and observability:** restrictive CSP, framing denial, disabled camera/microphone/geolocation, no-referrer, MIME-sniffing protection, HSTS, and `noindex` remained active. The post-deploy runtime error scan returned no logs, expected for this static deployment.
+- **Boundary confirmation:** the promoted artifact remains static and synthetic, keeps cryptography `BLOCKED_UNVERIFIED`, and introduces no backend, authentication, uploads, API routes, Vercel Functions, private materials, or scientific/independence claims.
+
+## Functional perspective selector — 2026-08-17
+
+- **Validated source commit:** `32f7e3047c20ba2b0806c1386b0ad7b359d401f2`.
+- **Validated preview:** `dpl_BXDijKNvLS87RM7nzXuuCdUnmbXV` at `https://valoris-reviewer-sandbox-cy1ipox2b-halalmfs-projects.vercel.app`, target `preview`, status `READY`. Browser access remained deployment-protected; Vercel-authenticated retrieval verified the exact artifact before promotion.
+- **Resulting production deployment:** `dpl_HtfKgVR5R9pvhjbxmYm5xkSWrWJK` at `https://valoris-reviewer-sandbox-p9rm6in6v-halalmfs-projects.vercel.app`, target `production`, status `READY`.
+- **Stable public alias:** https://valoris-reviewer-sandbox.vercel.app returned HTTP 200 and resolved to the resulting production deployment.
+- **Artifact identity:** production serves `index-_9axtI6i.js` and `index-D7JI5rEz.css`, exactly matching the promoted prebuilt preview. JS SHA-256: `221cd60bef6f62a405c964cafc260ab2a6c311fd827fcc0396c94613527c6a04`; CSS SHA-256: `3bc359bbf0e6d5f722474672dd4ff332f0439e19c61c3a31fafae7ccb455f816`.
+- **Interaction gate:** on the public alias at 390 × 844, the top selector changed to Cryptography and synchronized the lower active role plus ADR-0012 packet; the lower Materials Science role then synchronized the top selector plus ADR-0010/ADR-0014 packet. `DEMO / SYNTHETIC` and `BLOCKED_UNVERIFIED` remained visible, with no horizontal overflow or runtime errors.
+- **Regression and accessibility gate:** 9/9 sandbox and review-packet tests passed, 4/4 static-host packaging tests passed, the Vite static build and repository baseline passed, and the final automated WCAG A/AA scan reported zero violations.
+- **Headers and observability:** restrictive CSP, framing denial, disabled camera/microphone/geolocation, no-referrer, MIME-sniffing protection, HSTS, and `noindex` remained active. The post-deploy runtime error scan returned no logs, expected for this static deployment.
+- **Boundary confirmation:** this interaction correction adds no backend, authentication, uploads, persistence, API routes, Vercel Functions, private materials, or scientific/independence claims; cryptography remains `BLOCKED_UNVERIFIED`.
diff --git a/web/reviewer-sandbox/LEARNING_EPISODE.md b/web/reviewer-sandbox/LEARNING_EPISODE.md
new file mode 100644
index 0000000..7d62b80
--- /dev/null
+++ b/web/reviewer-sandbox/LEARNING_EPISODE.md
@@ -0,0 +1,19 @@
+# LearningEpisode — Public Reviewer Sandbox
+
+- **Trigger:** The founder selected visual direction 1 for a public, static, synthetic Reviewer Sandbox.
+- **Inputs:** The selected 1487 × 1058 design image; the existing Valoris UI system; the onboarding architecture; the current UX audit; the public architecture; ADR-0006, ADR-0007, and proposed ADR-0010.
+- **Invariants:** No backend, authentication, uploads, executable schemas, private materials, production components, scientific-acceptance claim, or independence claim. All fixture data is DEMO/SYNTHETIC. Cryptography stays BLOCKED_UNVERIFIED.
+- **Output:** A five-step, ten-minute React walkthrough with four reviewer perspectives, side-by-side supporting and challenging evidence, bounded ADR packets, limitations, and structured local feedback.
+- **Failure observed:** At 390 CSS pixels the horizontal walkthrough initially opened on steps 1–2 while active step 3 was offscreen.
+- **Correction:** Center the active step on initial responsive render and after navigation; retain the current step in view without changing desktop layout.
+- **Handoff extension:** Added a role-aware, session-only review summary with explicit conflict and blocked-decision fields, copy and JSON download actions, and a clean-session reset. No timestamp, reviewer identity, transport, or storage was introduced.
+- **Failure observed during extension:** The download action revoked its temporary object URL immediately after the synthetic link click, creating a race for slower browser download handlers.
+- **Correction during extension:** Attach the download link to the document, remove it after activation, and defer URL revocation to the next task so the browser can consume the synthetic JSON reliably.
+- **Reported-device failure:** User-supplied iOS captures showed the mobile perspective control obscuring the product name and the horizontally centered walkthrough clipping the previous step label.
+- **Reported-device correction:** At ≤600 CSS pixels, place the brand, perspective control, and warning in explicit grid rows; show one complete active walkthrough step; reserve automatic horizontal centering for the 601–860-pixel tablet layout.
+- **Regression protection:** A source-level test now requires the mobile single-column header, contained perspective control, and active-only phone walkthrough rules.
+- **Interaction failure:** The top Perspective affordance visually implied a dropdown but only moved keyboard focus to the first lower role button, so it could not change reviewer viewpoint.
+- **Interaction correction:** Replace the focus shortcut with a native controlled selector that shares `roleId` with the lower role buttons. Both entry points now update the selected label, active role, task language, and ADR packet.
+- **Accessibility correction:** The interaction audit exposed a serious automated contrast violation in the orange warning and evidence metadata. Darker semantic tokens reduced the follow-up WCAG A/AA result to zero violations; gradient-backed contrast checks remain machine-incomplete and were visually reviewed.
+- **Evidence:** Desktop and mobile browser captures, a combined reported-versus-corrected comparison, synchronized selector/button checks at 320, 390, and 1440 CSS pixels, zero runtime errors, passing static build, 9/9 sandbox and review-packet tests, and 4/4 static-host packaging tests in `design-qa.md`.
+- **Promotion decision:** The static prototype was published to a dedicated Vercel project for founder and reviewer inspection. Vercel assigned the first deployment to its production target automatically; this makes the static interface reachable but does not imply protocol production readiness, policy acceptance, scientific acceptance, or independence assurance.
diff --git a/web/reviewer-sandbox/README.md b/web/reviewer-sandbox/README.md
new file mode 100644
index 0000000..2f2cdd6
--- /dev/null
+++ b/web/reviewer-sandbox/README.md
@@ -0,0 +1,32 @@
+# Valoris Reviewer Sandbox
+
+A public-safe, static, synthetic walkthrough for evaluating the Valoris reviewer experience.
+
+## Boundaries
+
+- Every fixture datum is labeled `DEMO` or `SYNTHETIC`.
+- Cryptographic choices remain `BLOCKED_UNVERIFIED`.
+- The sandbox makes no scientific, security, production, or independence claim.
+- It has no backend, authentication, uploads, executable schemas, private materials, workers, payments, or production infrastructure.
+- Feedback remains in browser memory unless the reviewer explicitly copies or downloads the DEMO handoff.
+- The generated handoff is role-aware, includes conflict and blocked-decision fields, preserves the non-approval boundaries, and can be reset without persistence.
+
+## Local commands
+
+```bash
+npm install
+npm run dev
+npm run build
+npm run test:sandbox
+npm run test:sites
+```
+
+The selected design direction and implementation constraints are recorded in `AGENTS.md`. Visual verification is recorded in `design-qa.md`.
+
+## Vercel preview
+
+`vercel.json` deploys only `dist/client` as a static site and applies restrictive browser security headers. Vercel link metadata and local environment files remain ignored and must never be committed.
+
+Live mobile-ready deployment: https://valoris-reviewer-sandbox.vercel.app
+
+Deployment evidence is recorded in `DEPLOYMENT.md`.
diff --git a/web/reviewer-sandbox/design-qa.md b/web/reviewer-sandbox/design-qa.md
new file mode 100644
index 0000000..4677ace
--- /dev/null
+++ b/web/reviewer-sandbox/design-qa.md
@@ -0,0 +1,143 @@
+# Reviewer Sandbox Design QA
+
+## Comparison target
+
+- Source visual truth: `/Users/monikacruz/.codex/generated_images/019fec1e-fd38-73f1-846f-53fbb765b16e/exec-ed228b72-420b-4fd3-92b0-fec3054abde2.png`
+- Browser-rendered desktop implementation: `/Users/monikacruz/Desktop/Valoris/valoris-reviewer-sandbox/web/reviewer-sandbox/implementation-desktop-final-1440x1024.png`
+- Browser-rendered responsive evidence: `/Users/monikacruz/Desktop/Valoris/valoris-reviewer-sandbox/web/reviewer-sandbox/implementation-mobile-final-390x844.png`
+- Full-view side-by-side comparison: `/Users/monikacruz/Desktop/Valoris/valoris-reviewer-sandbox/web/reviewer-sandbox/qa/source-vs-implementation-final.png`
+- Focused-region comparison: `/Users/monikacruz/Desktop/Valoris/valoris-reviewer-sandbox/web/reviewer-sandbox/qa/focused-source-vs-implementation-final.png`
+- Handoff-extension comparison state: `/Users/monikacruz/Desktop/Valoris/valoris-reviewer-sandbox/web/reviewer-sandbox/qa/implementation-handoff-pass.png`
+- Handoff-extension full-view comparison: `/Users/monikacruz/Desktop/Valoris/valoris-reviewer-sandbox/web/reviewer-sandbox/qa/source-vs-handoff-final.png`
+- Handoff-extension focused comparison: `/Users/monikacruz/Desktop/Valoris/valoris-reviewer-sandbox/web/reviewer-sandbox/qa/focused-source-vs-handoff-final.png`
+- Generated handoff, desktop: `/Users/monikacruz/Desktop/Valoris/valoris-reviewer-sandbox/web/reviewer-sandbox/qa/review-handoff-desktop.png`
+- Generated handoff, mobile: `/Users/monikacruz/Desktop/Valoris/valoris-reviewer-sandbox/web/reviewer-sandbox/qa/review-handoff-mobile-390x844.png`
+- Reported iOS overlap source: `/Users/monikacruz/Desktop/Valoris/valoris-reviewer-sandbox/web/reviewer-sandbox/qa/mobile-reported-overlap-materials.jpg`
+- Corrected mobile implementation, 390 CSS pixels: `/Users/monikacruz/Desktop/Valoris/valoris-reviewer-sandbox/web/reviewer-sandbox/qa/mobile-header-fixed-390x844.png`
+- Corrected narrow-mobile implementation, 320 CSS pixels: `/Users/monikacruz/Desktop/Valoris/valoris-reviewer-sandbox/web/reviewer-sandbox/qa/mobile-header-fixed-320x800.png`
+- Corrected desktop implementation: `/Users/monikacruz/Desktop/Valoris/valoris-reviewer-sandbox/web/reviewer-sandbox/qa/desktop-header-fixed-1440x1024.png`
+- Reported-versus-corrected full-view comparison: `/Users/monikacruz/Desktop/Valoris/valoris-reviewer-sandbox/web/reviewer-sandbox/qa/mobile-overlap-source-vs-fixed.png`
+- Functional perspective selector, mobile Cryptography: `/Users/monikacruz/Desktop/Valoris/valoris-reviewer-sandbox/web/reviewer-sandbox/qa/perspective-selector-mobile-cryptography-390x844.png`
+- Functional perspective selector, narrow-mobile Materials Science: `/Users/monikacruz/Desktop/Valoris/valoris-reviewer-sandbox/web/reviewer-sandbox/qa/perspective-selector-mobile-materials-320x800.png`
+- Functional perspective selector, desktop Identity & IT: `/Users/monikacruz/Desktop/Valoris/valoris-reviewer-sandbox/web/reviewer-sandbox/qa/perspective-selector-desktop-identity-1440x1024.png`
+
+## Normalization
+
+- Source pixels: 1487 × 1058.
+- Desktop implementation pixels and CSS viewport: 1440 × 1024 at device scale 1.
+- Source and implementation have effectively the same aspect ratio. The side-by-side comparison renders each image to the same column width, preserving its aspect ratio; no crop or density-based finding was filed.
+- Responsive implementation CSS viewport: 390 × 844, rendered inside a same-origin browser QA frame. The app document measured exactly 390 CSS pixels wide with no document overflow.
+- Compared state: Reviewer perspective, step 3 of 5, “Inspect evidence,” light theme, synthetic fixture.
+- Handoff extension evidence: step 5 of 5 with a generated role-aware summary. Desktop pixels: 1440 × 1565 from a 1440 × 1024 CSS viewport at device scale 1. Mobile pixels: 390 × 2807 from a 390 × 844 CSS viewport at device scale 1.
+- Reported iOS evidence pixels: 591 × 1280, including browser chrome. The corrected implementation was captured at 390 × 844 CSS pixels at device scale 1. The comparison intentionally preserves the browser-chrome mismatch because the source is user evidence; layout judgments are limited to the shared app viewport.
+
+## Findings
+
+### Pass 1
+
+- [P2] Completed-step glyphs drifted from the selected visual.
+ - Location: global five-step walkthrough.
+ - Evidence: the source retained the numbered circles 1–5 while the first implementation changed completed steps to checkmarks.
+ - Impact: it changed the visual rhythm and created a second completion language beside the sidebar.
+ - Fix: restored persistent 1–5 numbering in the global walkthrough; completion checkmarks remain only in the detailed sidebar progress list.
+
+- [P2] The current mobile step opened outside the initial horizontal viewport.
+ - Location: mobile walkthrough navigation at 390 CSS pixels.
+ - Evidence: the first responsive capture showed steps 1 and 2 while the active step was 3.
+ - Impact: a mobile reviewer could not immediately confirm where they were in the ten-minute flow.
+ - Fix: the active step now scrolls to the center of the walkthrough on initial load and after step changes. Post-fix measurement confirms the active step is fully visible.
+
+### Final pass
+
+- No actionable P0, P1, or P2 findings remain.
+- [P3] The implementation is slightly denser than the source in the evidence rows because each fixture value carries the required inline DEMO/SYNTHETIC label and the walkthrough adds explicit time estimates. This is an intentional safety and product-requirement deviation; hierarchy and legibility remain intact.
+- [P3] The source’s “View all” text links are represented by expandable evidence rows instead. The replacement preserves the single-page boundary and gives each visible fixture a working inspection state.
+
+### Handoff extension pass
+
+- No actionable P0, P1, or P2 findings were introduced by the role-aware handoff extension.
+- The step-3 source-comparison state remains aligned after the extension: Reviewer perspective, active step, hierarchy, grid, color system, numbered walkthrough, evidence pairing, and sidebar proportions remain intact.
+- Step 5 has no separate source mock. It was evaluated as an intentional extension of the selected UI system: the summary reuses the existing borders, blue action hierarchy, fixture labels, warning tokens, typography, and responsive stacking behavior.
+- [P3] The full generated summary makes step 5 a long mobile page. This is acceptable for the present ten-minute static walkthrough because the reviewer sees the form before the summary, actions are stacked at 390 CSS pixels, and no horizontal overflow or hidden controls were observed.
+
+### Reported iOS overlap correction
+
+- [P1] The perspective control covered the product name on mobile.
+ - Location: top bar at the reported iPhone viewport.
+ - Evidence: the user capture shows the right-aligned “Perspective” pill laid over “Valoris Reviewer Sandbox.” The corrected 390-pixel capture places the brand, full-width perspective control, and global warning in three distinct rows.
+ - Impact: the product identity was obscured and the control appeared outside its intended container.
+ - Fix: changed the ≤600-pixel top bar to a single-column grid with explicit rows; allowed safe label wrapping and made the perspective control fill, but never exceed, the available width.
+
+- [P2] The centered mobile walkthrough clipped the previous step label at the card edge.
+ - Location: global walkthrough card at the reported iPhone viewport.
+ - Evidence: the user capture cuts off “Consider limitations” on the left while step 5 is active. The corrected capture displays one complete active step and no adjacent clipped content.
+ - Impact: partially visible navigation looked broken and made the current stage harder to scan.
+ - Fix: show only the active walkthrough step at ≤600 pixels, remove its connector, and limit automatic horizontal centering to the 601–860-pixel tablet range.
+
+- Post-fix evidence: all four roles were checked at 390 × 844; the longest Materials Science label was also checked at 320 × 800; desktop was checked at 1440 × 1024. Brand, perspective control, warning, and active walkthrough card remained contained with no document overflow or console warnings/errors.
+
+### Perspective interaction correction
+
+- [P1] The top Perspective control looked like a selector but only focused the lower Reviewer button.
+ - Location: top bar on mobile and desktop.
+ - Evidence: the earlier implementation rendered a caret-bearing button whose click handler called `focus()` on the first role button; it could not select Cryptography, Identity & IT, or Materials Science. The corrected captures show a native selector synchronized with the active lower radio button and role-specific task content.
+ - Impact: users reasonably expected the top control to change viewpoints, but it performed no perspective change.
+ - Fix: replace the focus-only button with an accessible controlled `select` backed by the same `roleId` state as the four lower role buttons.
+
+- [P2] Automated WCAG checks found insufficient contrast in the orange warning and seven-pixel evidence metadata.
+ - Location: global warning and evidence-table secondary labels.
+ - Evidence: the initial axe run reported one serious color-contrast violation affecting 13 nodes. The corrected run reports zero violations; eight gradient-backed nodes remain machine-incomplete and were visually inspected.
+ - Impact: low-vision reviewers could struggle to read safety labels and evidence metadata.
+ - Fix: darken the semantic orange token and use the existing accessible muted token for evidence metadata.
+
+- Post-fix interaction evidence: the top selector changed Reviewer → Cryptography and synchronized the lower active role, role-specific goal, and ADR-0012 packet at 390 × 844. The lower Materials Science button synchronized the top selector and switched the focus/ADR packet. Identity & IT passed from the top selector at 1440 × 1024; Materials Science passed at 320 × 800. No overflow, runtime errors, or console warnings were observed.
+
+## Required fidelity surfaces
+
+- Fonts and typography: matches the existing Valoris Inter/system UI stack, with comparable weight, line height, hierarchy, and wrapping. Small fixture labels use a compact optical treatment without replacing body copy.
+- Spacing and layout rhythm: header, role selector, five-step walkthrough, 2.45:1 workspace grid, persistent sidebar, card padding, borders, radii, and footer align with the source. Mobile reorders the task card ahead of the detailed evidence and stacks evidence into one column.
+- Colors and visual tokens: white and pale-gray surfaces, dark navy text, vivid blue actions, soft blue fixture labels, and restrained amber warnings map directly to the selected direction. Status is never expressed by color alone.
+- Image quality and asset fidelity: the source contains no photography, illustration, or product imagery. All UI icons use one installed Phosphor icon family; there are no custom SVGs, emoji, CSS drawings, or placeholder images.
+- Copy and content: all app-specific fixture data is explicitly DEMO or SYNTHETIC. The claim language is bounded, cryptography remains BLOCKED_UNVERIFIED, and the interface makes no scientific, security, production, or independence claim.
+- States and interactions: role selection, step navigation, previous/continue controls, expandable evidence rows, the ADR packet dialog, feedback inputs, required conflict acknowledgement, generated local summary, copy, JSON download, and clean-session reset were exercised successfully.
+- Accessibility: semantic buttons, radio groups, form controls, dialog labeling, keyboard focus indicators, reduced-motion behavior, and mobile tap targets are present. The 390-pixel document has no horizontal overflow.
+
+## Browser evidence
+
+- Primary interactions tested: role changes to Cryptography and Identity & IT; exact BLOCKED_UNVERIFIED status in the role ADR packet; dialog open/close; evidence expansion; step 3 → 4 → 5 progression; feedback text entry; incomplete submission blocked by the required conflict reminder; role-aware summary generation; plain-text copy; a browser-created `valoris-demo-review-handoff.json` download; and clean-session reset to Reviewer / step 1.
+- Console warnings/errors: none on desktop or responsive QA frame.
+- Static build: passed.
+- Static sandbox and review-packet tests: 9 passed, 0 failed.
+- Sites-compatible static packaging tests: 4 passed, 0 failed.
+- Responsive handoff measurement at 390 × 844: document width 390, no horizontal overflow, one-column summary metadata, vertically stacked actions, active step 5 visible.
+
+## Comparison history
+
+1. Initial desktop comparison recorded two P2 findings: global step glyph drift and mobile current-step visibility.
+2. The global stepper was restored to numbered circles, and mobile step navigation gained current-step centering.
+3. The final desktop comparison and focused-region comparison show the corrected numbered sequence and source-aligned information hierarchy.
+4. The final 390 × 844 browser-rendered check measured `documentWidth = 390`, a single evidence column, static task-card positioning, and the current step fully visible.
+5. The handoff extension preserved the final step-3 comparison state and added verified desktop/mobile evidence for summary generation, copy, download, and reset.
+6. A download reliability check exposed immediate object-URL revocation. The link is now attached for activation and URL revocation is deferred; the browser produced the expected JSON file after the correction.
+7. User-supplied iOS evidence exposed a P1 top-bar collision and P2 walkthrough clipping that were not reproduced by the earlier centered-step check.
+8. The mobile header now uses three explicit rows, and phone widths show only the complete active walkthrough step. A combined source-versus-fixed comparison confirms both reported failures are removed.
+9. Post-fix checks covered Reviewer, Cryptography, Identity & IT, and Materials Science at 390 × 844, the longest label at 320 × 800, and the unchanged desktop composition at 1440 × 1024.
+10. User testing exposed that the top Perspective affordance was focus-only. It is now a native controlled selector synchronized bidirectionally with the lower role buttons and role-specific content.
+11. The selector passed mobile and desktop interaction checks. A follow-up axe run reports zero WCAG A/AA violations after correcting two contrast tokens.
+
+## Implementation checklist
+
+- [x] Match the approved Option 1 composition and UI system.
+- [x] Keep all fixture data DEMO/SYNTHETIC and cryptography BLOCKED_UNVERIFIED.
+- [x] Implement the complete ten-minute five-step flow.
+- [x] Make supporting and challenging evidence inspectable side by side.
+- [x] Add bounded ADR packets, limitations, and structured local feedback.
+- [x] Verify desktop, responsive mobile, interactions, console health, build, and static hosting package.
+- [x] Add regression checks for the public-static boundary and required safety labels.
+- [x] Generate a role-aware, session-only review handoff with explicit conflict and blocked-decision fields.
+- [x] Verify copy, JSON download, clean reset, mobile stacking, and the unchanged source-comparison state.
+- [x] Prevent mobile brand/perspective overlap and clipped walkthrough labels at 320–600 CSS pixels.
+- [x] Make the top Perspective control select and synchronize every reviewer role on mobile and desktop.
+- [x] Resolve automated warning/metadata contrast violations introduced or exposed by the interaction review.
+
+final result: passed
diff --git a/web/reviewer-sandbox/implementation-desktop-final-1440x1024.png b/web/reviewer-sandbox/implementation-desktop-final-1440x1024.png
new file mode 100644
index 0000000..b82cd3f
Binary files /dev/null and b/web/reviewer-sandbox/implementation-desktop-final-1440x1024.png differ
diff --git a/web/reviewer-sandbox/implementation-mobile-final-390x844.png b/web/reviewer-sandbox/implementation-mobile-final-390x844.png
new file mode 100644
index 0000000..ae5d93b
Binary files /dev/null and b/web/reviewer-sandbox/implementation-mobile-final-390x844.png differ
diff --git a/web/reviewer-sandbox/index.html b/web/reviewer-sandbox/index.html
new file mode 100644
index 0000000..b277647
--- /dev/null
+++ b/web/reviewer-sandbox/index.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+ Fixed responsive viewport — separated rows and one complete active step
+
+
+
+
+
diff --git a/web/reviewer-sandbox/qa-mobile.html b/web/reviewer-sandbox/qa-mobile.html
new file mode 100644
index 0000000..0466eed
--- /dev/null
+++ b/web/reviewer-sandbox/qa-mobile.html
@@ -0,0 +1,21 @@
+
+
+
+
+
+ Reviewer Sandbox Mobile QA
+
+
+
+
+ Browser-rendered responsive viewport — 390 × 844 CSS px
+
+
+
+
diff --git a/web/reviewer-sandbox/qa/deployed-mobile-390x844.png b/web/reviewer-sandbox/qa/deployed-mobile-390x844.png
new file mode 100644
index 0000000..bd6c8d3
Binary files /dev/null and b/web/reviewer-sandbox/qa/deployed-mobile-390x844.png differ
diff --git a/web/reviewer-sandbox/qa/desktop-header-fixed-1440x1024.png b/web/reviewer-sandbox/qa/desktop-header-fixed-1440x1024.png
new file mode 100644
index 0000000..f51d9e1
Binary files /dev/null and b/web/reviewer-sandbox/qa/desktop-header-fixed-1440x1024.png differ
diff --git a/web/reviewer-sandbox/qa/focused-source-vs-handoff-final.png b/web/reviewer-sandbox/qa/focused-source-vs-handoff-final.png
new file mode 100644
index 0000000..237c83a
Binary files /dev/null and b/web/reviewer-sandbox/qa/focused-source-vs-handoff-final.png differ
diff --git a/web/reviewer-sandbox/qa/focused-source-vs-implementation-final.png b/web/reviewer-sandbox/qa/focused-source-vs-implementation-final.png
new file mode 100644
index 0000000..237c83a
Binary files /dev/null and b/web/reviewer-sandbox/qa/focused-source-vs-implementation-final.png differ
diff --git a/web/reviewer-sandbox/qa/implementation-handoff-pass.png b/web/reviewer-sandbox/qa/implementation-handoff-pass.png
new file mode 100644
index 0000000..b82cd3f
Binary files /dev/null and b/web/reviewer-sandbox/qa/implementation-handoff-pass.png differ
diff --git a/web/reviewer-sandbox/qa/implementation-pass-1.png b/web/reviewer-sandbox/qa/implementation-pass-1.png
new file mode 100644
index 0000000..28ed81f
Binary files /dev/null and b/web/reviewer-sandbox/qa/implementation-pass-1.png differ
diff --git a/web/reviewer-sandbox/qa/implementation-pass-2.png b/web/reviewer-sandbox/qa/implementation-pass-2.png
new file mode 100644
index 0000000..b82cd3f
Binary files /dev/null and b/web/reviewer-sandbox/qa/implementation-pass-2.png differ
diff --git a/web/reviewer-sandbox/qa/mobile-header-fixed-320x800.png b/web/reviewer-sandbox/qa/mobile-header-fixed-320x800.png
new file mode 100644
index 0000000..e093aa0
Binary files /dev/null and b/web/reviewer-sandbox/qa/mobile-header-fixed-320x800.png differ
diff --git a/web/reviewer-sandbox/qa/mobile-header-fixed-390x844.png b/web/reviewer-sandbox/qa/mobile-header-fixed-390x844.png
new file mode 100644
index 0000000..a520f10
Binary files /dev/null and b/web/reviewer-sandbox/qa/mobile-header-fixed-390x844.png differ
diff --git a/web/reviewer-sandbox/qa/mobile-overlap-source-vs-fixed.png b/web/reviewer-sandbox/qa/mobile-overlap-source-vs-fixed.png
new file mode 100644
index 0000000..e7d0bb2
Binary files /dev/null and b/web/reviewer-sandbox/qa/mobile-overlap-source-vs-fixed.png differ
diff --git a/web/reviewer-sandbox/qa/mobile-reported-overlap-materials.jpg b/web/reviewer-sandbox/qa/mobile-reported-overlap-materials.jpg
new file mode 100644
index 0000000..b885c41
Binary files /dev/null and b/web/reviewer-sandbox/qa/mobile-reported-overlap-materials.jpg differ
diff --git a/web/reviewer-sandbox/qa/perspective-selector-desktop-identity-1440x1024.png b/web/reviewer-sandbox/qa/perspective-selector-desktop-identity-1440x1024.png
new file mode 100644
index 0000000..3e82e60
Binary files /dev/null and b/web/reviewer-sandbox/qa/perspective-selector-desktop-identity-1440x1024.png differ
diff --git a/web/reviewer-sandbox/qa/perspective-selector-mobile-cryptography-390x844.png b/web/reviewer-sandbox/qa/perspective-selector-mobile-cryptography-390x844.png
new file mode 100644
index 0000000..49c4863
Binary files /dev/null and b/web/reviewer-sandbox/qa/perspective-selector-mobile-cryptography-390x844.png differ
diff --git a/web/reviewer-sandbox/qa/perspective-selector-mobile-materials-320x800.png b/web/reviewer-sandbox/qa/perspective-selector-mobile-materials-320x800.png
new file mode 100644
index 0000000..ba0abf7
Binary files /dev/null and b/web/reviewer-sandbox/qa/perspective-selector-mobile-materials-320x800.png differ
diff --git a/web/reviewer-sandbox/qa/perspective-selector-mobile-materials-390x844.png b/web/reviewer-sandbox/qa/perspective-selector-mobile-materials-390x844.png
new file mode 100644
index 0000000..6f76b40
Binary files /dev/null and b/web/reviewer-sandbox/qa/perspective-selector-mobile-materials-390x844.png differ
diff --git a/web/reviewer-sandbox/qa/review-handoff-desktop.png b/web/reviewer-sandbox/qa/review-handoff-desktop.png
new file mode 100644
index 0000000..5d3d649
Binary files /dev/null and b/web/reviewer-sandbox/qa/review-handoff-desktop.png differ
diff --git a/web/reviewer-sandbox/qa/review-handoff-mobile-390x844.png b/web/reviewer-sandbox/qa/review-handoff-mobile-390x844.png
new file mode 100644
index 0000000..c8f82bc
Binary files /dev/null and b/web/reviewer-sandbox/qa/review-handoff-mobile-390x844.png differ
diff --git a/web/reviewer-sandbox/qa/source-option-1.png b/web/reviewer-sandbox/qa/source-option-1.png
new file mode 100644
index 0000000..4835f2e
Binary files /dev/null and b/web/reviewer-sandbox/qa/source-option-1.png differ
diff --git a/web/reviewer-sandbox/qa/source-vs-handoff-final.png b/web/reviewer-sandbox/qa/source-vs-handoff-final.png
new file mode 100644
index 0000000..b9342cc
Binary files /dev/null and b/web/reviewer-sandbox/qa/source-vs-handoff-final.png differ
diff --git a/web/reviewer-sandbox/qa/source-vs-implementation-final.png b/web/reviewer-sandbox/qa/source-vs-implementation-final.png
new file mode 100644
index 0000000..54b52c5
Binary files /dev/null and b/web/reviewer-sandbox/qa/source-vs-implementation-final.png differ
diff --git a/web/reviewer-sandbox/qa/source-vs-implementation-pass-1.png b/web/reviewer-sandbox/qa/source-vs-implementation-pass-1.png
new file mode 100644
index 0000000..84bb53d
Binary files /dev/null and b/web/reviewer-sandbox/qa/source-vs-implementation-pass-1.png differ
diff --git a/web/reviewer-sandbox/scripts/prepare-sites-build.mjs b/web/reviewer-sandbox/scripts/prepare-sites-build.mjs
new file mode 100644
index 0000000..86a9e8c
--- /dev/null
+++ b/web/reviewer-sandbox/scripts/prepare-sites-build.mjs
@@ -0,0 +1,21 @@
+#!/usr/bin/env node
+import { copyFileSync, existsSync, mkdirSync } from "node:fs";
+import path from "node:path";
+import { fileURLToPath } from "node:url";
+
+const root = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
+const dist = path.join(root, "dist");
+const index = path.join(dist, "client", "index.html");
+const worker = path.join(root, "worker", "index.js");
+const hosting = path.join(root, ".openai", "hosting.json");
+
+for (const file of [index, worker, hosting]) {
+ if (!existsSync(file)) throw new Error("Missing Sites build input: " + file);
+}
+
+mkdirSync(path.join(dist, "server"), { recursive: true });
+mkdirSync(path.join(dist, ".openai"), { recursive: true });
+copyFileSync(worker, path.join(dist, "server", "index.js"));
+copyFileSync(hosting, path.join(dist, ".openai", "hosting.json"));
+
+console.log("Prepared Sites build: dist/server/index.js and dist/.openai/hosting.json");
diff --git a/web/reviewer-sandbox/src/App.jsx b/web/reviewer-sandbox/src/App.jsx
new file mode 100644
index 0000000..9bc3784
--- /dev/null
+++ b/web/reviewer-sandbox/src/App.jsx
@@ -0,0 +1,655 @@
+import { useEffect, useMemo, useRef, useState } from "react";
+import {
+ ArrowLeft,
+ ArrowRight,
+ Atom,
+ CaretDown,
+ Check,
+ CheckCircle,
+ Clock,
+ Code,
+ Copy,
+ Database,
+ DownloadSimple,
+ FileText,
+ Flask,
+ IdentificationCard,
+ Info,
+ Lightbulb,
+ ListChecks,
+ LockKey,
+ MagnifyingGlass,
+ ShieldWarning,
+ Target,
+ Warning,
+ X,
+} from "@phosphor-icons/react";
+import { createReviewPacket, formatReviewPacket, REVIEW_FIXTURE_VERSION } from "./reviewPacket.js";
+
+const INITIAL_FEEDBACK = {
+ recommendation: "Revise the packet",
+ clear: "",
+ concerns: "",
+ blocked: "Cryptographic suite selection remains BLOCKED_UNVERIFIED.",
+ conflictDisclosed: false,
+};
+
+const ROLES = [
+ {
+ id: "reviewer",
+ label: "Reviewer",
+ shortLabel: "Reviewer",
+ icon: MagnifyingGlass,
+ goal: "Assess whether the synthetic evidence is sufficient for this training exercise.",
+ focus: "Compare supporting and challenging evidence before recording a bounded recommendation.",
+ outcome: "Provide structured feedback without making a scientific-acceptance decision.",
+ packet: ["ADR-0011", "ADR-0012", "ADR-0013", "ADR-0014"],
+ },
+ {
+ id: "cryptography",
+ label: "Cryptography",
+ shortLabel: "Cryptography",
+ icon: LockKey,
+ goal: "Inspect the proposed evidence boundaries without selecting a cryptographic suite.",
+ focus: "Look for downgrade paths, identifier confusion, and unsupported trust claims.",
+ outcome: "Keep every suite choice BLOCKED_UNVERIFIED and record what review is still needed.",
+ packet: ["ADR-0012"],
+ },
+ {
+ id: "identity",
+ label: "Identity & IT",
+ shortLabel: "Identity & IT",
+ icon: IdentificationCard,
+ goal: "Inspect synthetic identity, delegation, revocation, and privacy boundaries.",
+ focus: "Look for escalation, stale status, ambiguous authority, and excess data exposure.",
+ outcome: "Record institutional integration risks without accepting identity policy.",
+ packet: ["ADR-0013"],
+ },
+ {
+ id: "materials",
+ label: "Materials Science",
+ shortLabel: "Materials Science",
+ icon: Atom,
+ goal: "Inspect a narrow synthetic symmetry-classification walkthrough.",
+ focus: "Challenge conventions, tolerances, ambiguity, and the limits of the proposed exercise.",
+ outcome: "Record methodology feedback without claiming scientific acceptance or independence.",
+ packet: ["ADR-0010", "ADR-0014"],
+ },
+];
+
+const STEPS = [
+ { title: "Understand question", subtitle: "Plain-language summary", minutes: "2 min" },
+ { title: "Inspect approach", subtitle: "Plans and methods", minutes: "2 min" },
+ { title: "Inspect evidence", subtitle: "Walk through results", minutes: "3 min" },
+ { title: "Consider limitations", subtitle: "Risks and constraints", minutes: "1 min" },
+ { title: "Record feedback", subtitle: "Your structured input", minutes: "2 min" },
+];
+
+const ADRS = {
+ "ADR-0010": {
+ title: "Proposed narrow benchmark",
+ status: "PROPOSED / SYNTHETIC TRAINING SUMMARY",
+ question: "Is the fixture narrow, deterministic, and scientifically bounded enough for a later domain review?",
+ boundary: "Does not accept the benchmark or make a scientific claim.",
+ },
+ "ADR-0011": {
+ title: "Canonical JSON and version compatibility",
+ status: "DRAFT / DEMO SUMMARY",
+ question: "Are constraints explicit enough to prevent parser and cross-language ambiguity?",
+ boundary: "No executable schema or canonicalizer is present in this sandbox.",
+ },
+ "ADR-0012": {
+ title: "Identifiers and signature-suite agility",
+ status: "BLOCKED_UNVERIFIED",
+ question: "Are downgrade boundaries and algorithm identifiers reviewable without selecting a suite?",
+ boundary: "All cryptographic choices remain BLOCKED_UNVERIFIED.",
+ },
+ "ADR-0013": {
+ title: "Event identity, delegation, and revocation",
+ status: "DRAFT / DEMO SUMMARY",
+ question: "Are authority, revocation time, offline status, and privacy risks explicit?",
+ boundary: "No identity or access policy is accepted by this training view.",
+ },
+ "ADR-0014": {
+ title: "Reproduction independence profiles",
+ status: "DRAFT / DEMO SUMMARY",
+ question: "Does the language avoid overstating account, operator, environment, or institutional independence?",
+ boundary: "No independence policy or assurance claim is accepted.",
+ },
+};
+
+const SUPPORTING_EVIDENCE = [
+ {
+ title: "Simulated XRD-like peaks align with the illustrative indexing pattern.",
+ source: "xrd_sim_01.csv",
+ type: "Dataset",
+ icon: Database,
+ },
+ {
+ title: "Mock structure output returns the proposed discrete classification.",
+ source: "structure_result_01.json",
+ type: "Output",
+ icon: FileText,
+ },
+];
+
+const CHALLENGING_EVIDENCE = [
+ {
+ title: "An alternative stacking sequence also fits the simulated noise envelope.",
+ source: "xrd_alt_model.csv",
+ type: "Dataset",
+ icon: Warning,
+ },
+ {
+ title: "Thermal stability is not established inside the illustrative run window.",
+ source: "stability_run_01.log",
+ type: "Log",
+ icon: Warning,
+ },
+];
+
+const LIMITATIONS = [
+ "All data, methods, and results are synthetic fixtures for reviewer training.",
+ "No experimental measurements or physical samples are represented.",
+ "Simulation settings are simplified and have not been scientifically validated.",
+ "The walkthrough cannot establish researcher, operator, or institutional independence.",
+ "Cryptographic suites, identifiers, signatures, and key lifecycle remain BLOCKED_UNVERIFIED.",
+ "Nothing in this sandbox authorizes production use or a scientific-acceptance decision.",
+];
+
+function FixtureLabel({ kind = "DEMO" }) {
+ return {kind};
+}
+
+function StatusChip({ children, tone = "neutral" }) {
+ return {children};
+}
+
+function SectionIntro({ step }) {
+ const copy = [
+ "Orient yourself to the synthetic question, the decision boundary, and what this walkthrough cannot establish.",
+ "Inspect the declared synthetic inputs, simplified method, expected output, and deliberate challenge path.",
+ "Compare supporting and challenging evidence in plain language. Every item is DEMO or SYNTHETIC.",
+ "Review constraints and stop conditions before deciding whether the packet is ready for a real expert review.",
+ "Record a bounded training recommendation. Your response stays in this browser unless you download it.",
+ ];
+ return
{copy[step]}
;
+}
+
+function QuestionStep() {
+ return (
+
+
+
QUESTION TO REVIEW
+
Can a narrow symmetry-classification fixture produce an inspectable technical result?
+
+ This training exercise asks whether a declared runner can return an expected discrete classification and preserve a deliberately challenging alternative.
+
+
+
+
+
+
Decision boundary
+
Review the clarity and sufficiency of the packet. Do not approve science, security, cryptography, or independence policy.
+ The synthetic packet proposes that a hypothetical material fixture yields an illustrative wurtzite-like classification. Supporting and challenging fixtures are shown together so a reviewer can test the argument instead of seeing only favorable evidence.
+
+
No physical material, scientific validity, cryptographic assurance, or independence is implied or claimed. DEMO / SYNTHETIC.
Stop and mark “Insufficient evidence” if the packet appears to select a cryptographic suite, imply scientific acceptance, hide counterevidence, or claim independent-person assurance.