# Publication Readiness Audit

Candidate: Enter the Field · Parallax World Portal v0.3.1  
Audit date: 2026-07-25  
Target: a separate protected or public-preview Netlify project; no current-site or DNS mutation

## Verdict

**The uploaded v0.3 was finished as a strong review prototype, but it was not finished as a final public portal.**

The repaired v0.3.1 package is a **publication candidate** with safe review defaults. It is suitable for a protected review link after a clean gate succeeds, and it can become a clearly labeled public preview after founder content approval and a real Netlify preview check. It should not yet be presented as the complete official Parallax portal.

I am **not issuing a final live-ready certificate in this environment** because the package mirror returned broad HTTP 503 failures during every clean-install retry. That prevented an honest rerun of the upgraded candidate’s lint, typecheck, production build, unit tests, browser tests, and dependency audit. The older v0.3 package does include a complete passing baseline, but that evidence cannot substitute for rerunning v0.3.1 after dependency changes.

## Evidence and checks completed

| Control | Result |
| --- | --- |
| Uploaded ZIP extraction | Passed |
| Original SHA-256 package manifest | 177/177 entries passed |
| Screenshot decoding | 90/90 PNGs passed |
| Historical v0.3 clean install/build/test report | Passed: 15 unit tests and 28 browser tests |
| Historical route matrix | Passed on mobile, tablet, and desktop |
| Historical accessibility smoke lane | Zero critical/serious axe findings on five routes |
| Historical WebGL/Still/Quiet/reduced-motion lanes | Passed within the documented software-rendered boundary |
| Candidate TypeScript/TSX syntax parse | 64 files, 0 syntax diagnostics |
| Candidate package/lock direct-version consistency | Passed |
| Candidate JSON manifests | Passed |
| Candidate publication checksum manifest | 193/193 entries passed |
| Internal literal links and fragment targets | 28 checked, 0 unresolved |
| Referenced local assets | 0 missing |
| Secret-pattern scan | 0 findings |
| Candidate clean `npm ci` | Blocked by package-mirror HTTP 503 outage |
| Candidate full build/test/audit rerun | Pending successful clean install |

## Publication blockers found and repaired

1. **Framework security patch:** v0.3 used Next.js 16.2.6. v0.3.1 moves `next` and `eslint-config-next` to 16.2.11.
2. **Node mismatch:** the browser harness requires Node 22.17.0 or newer, while Netlify requested only major `22`. The candidate pins 22.17.0 in Netlify, `.nvmrc`, and `.node-version`, and npm now enforces the engine.
3. **Review-only metadata:** v0.3 permanently used noindex metadata and an example canonical origin. v0.3.1 introduces a safe review/public build gate.
4. **Missing discovery endpoints:** added mode-aware `robots.txt`, a public-only sitemap, and a web manifest.
5. **Missing recovery routes:** added a branded 404, route error recovery, and self-styled global recovery.
6. **Review crawler defense:** added `X-Robots-Tag` in review builds in addition to HTML metadata and robots rules.
7. **Public-build safety:** public mode refuses to build without a valid HTTPS, non-example `NEXT_PUBLIC_SITE_URL`.
8. **Mode consistency:** publication-mode parsing is normalized across server metadata, response headers, and client-visible footer state.
9. **Test-mode collision:** public discovery tests now skip safely in review mode, while shared portal tests assert the selected mode.
10. **Cross-platform commands:** public verification no longer relies on Unix-only inline environment assignment.

## What is complete

- Five coherent responsive routes.
- Accessible HTML navigation independent of WebGL.
- Search and filtering with URL restoration.
- A complete Parallax Village Project Genome route.
- Quiet Mode, reduced-motion handling, Still Field fallback, and a controlled enhanced Field Engine.
- Transparent claim boundaries and visible placeholder labels.
- No accounts, forms, analytics, database, CMS, external media, wellness input, or visitor-data transmission.
- Current Netlify build settings and an exact Node pin.

## What remains incomplete by design

- Eleven of twelve catalog projects have no detail route.
- Two Human Garden choices are future placeholders and do not open interactive rooms.
- Homepage signals and ledger entries are representative rather than live.
- Parallax Village receipts, state, roadmap, relationships, and reviewer are representative or provisional.
- The portal contains twelve projects and is not a complete gallery of the user’s current Parallax body of work.
- No final social-sharing image or final governed brand-asset package is supplied.
- Physical-device GPU, mobile Safari, screen-reader, forced-colors, voice-control, battery, and sustained-performance review remains manual.
- The eventual Netlify adapter execution and response behavior have not been observed on a real preview URL.

## Required release sequence

1. Run a clean install under Node 22.17.0 or newer when the package registry is healthy.
2. Run `npm run verify:review`.
3. Set the intended HTTPS origin and run `npm run verify:public`.
4. Run `npm run audit` and record the current dependency result.
5. Resolve any failure before deployment.
6. Create a brand-new protected Netlify project; do not modify the current `enterthefield.org` project.
7. Verify the real preview’s routes, headers, canonical URLs, robots, sitemap, 404, Quiet Mode, reduced motion, filters, responsive layouts, and WebGL fallback.
8. Complete the founder decisions in `PUBLICATION_DECISION_CHECKLIST.md`.
9. Only then choose between protected review and public preview.

## Environment contract

### Protected review

```bash
NEXT_PUBLIC_SITE_URL=https://<protected-preview>.netlify.app
npm run verify:review
```

Leave `NEXT_PUBLIC_PUBLICATION_MODE` unset. The build remains noindex, crawler-blocked, and marked as a private review prototype.

### Approved public preview

```bash
NEXT_PUBLIC_SITE_URL=https://<approved-public-origin> npm run verify:public
```

The wrapper sets public mode. The site origin must use HTTPS and match the actual visitor-facing URL.
