Repository navigation
Publish playable beta with native assets and LFS-correct builds - #125
Conversation
Coordinator pre-merge evidence — beta deploymentScope / complianceUser explicitly authorized merging this candidate beta. Retain the VFX proposal without implementation; no asset status is promoted, no strict gate is bypassed, and no milestone completion is inferred. The final corrective commit b7b5f93 changes only two workflow checkout options and README/handoff documentation. Existing raw provider intermediates/local files remain excluded. Build and artifact root causeThe earlier green run 39005827499 artifact contained 91/91 GLBs as LFS pointers (132-byte examples). Both workflows now use checkout lfs:true. Corrected push and PR checks both passed: runs 39006482626 and 39006499578. Fresh checkout / actual runtimeA separate shallow clone was downloaded from the private remote; git lfs pull fetched its own remote objects and npm ci installed its own dependencies. No files/dependencies/excluded raw data were copied from the working tree. Fast-forwarded to b7b5f93, then npm run build passed TypeScript and Vite (325 modules; existing chunk warning). All 91 emitted GLBs had valid v2 headers/declared byte lengths; all 167 native catalog rows matched outputHash. Total GLB bytes: 1,176,573,348. Headless Brave at 1440x900 DPR1 exercised the isolated built root on a fresh origin: New Game -> Aren/Koro -> region intro -> opening dialogue -> native Greenwake/HUD; trusted Escape opened Pause; Save Slot + -> full reload -> Load Game showed Save Slot 2 and restored Aren/Koro at the Prologue checkpoint. This fresh smoke did not advance the first objective or certify the entire campaign. Screenshot was visually inspected. Error-level console entries and page exceptions were absent; four requestfailed ERR_ABORTED audio requests occurred during opening transitions. The same OGG endpoint was directly checked and returned HTTP206 audio/ogg with OggS bytes. Native model HTTP206 had model/gltf-binary and glTF bytes; root returned HTTP200 HTML. Corrected CI artifact, not only CI statusArtifact 12091182050 from run 39006499578: 974,291,222-byte ZIP, 417 files, 91 GLB entries totaling 1,176,573,348 uncompressed bytes. All 91 GLB entry sizes match the clean local build. A range-downloaded/decompressed model payload (prop-mire-bank-rock.glb, 1,454,092 bytes) has actual glTF magic and matching SHA-256 against the clean build. The initial full ZIP download timed out at 900s; subsequent ZIP-directory/range inspection succeeded. This is full local model/hash validation plus CI ZIP size inventory and one CI payload cryptographic spot check, not a claim to have independently hashed every downloaded CI payload. Remaining limits / decisionApproved by the coordinator for merging as a deployable candidate beta, not a production release. Prior 2306 TypeScript tests passed; the previously recorded Node animation assertion failure (823 pass/1 fail, Vara active vs idle) remains unresolved and was not rerun to relabel it. Strict asset acceptance/reference benchmarks/full campaign/gamepad certification remain outstanding. Root-hosted static HTTPS deployment must publish the complete dist; build environments must fetch LFS first. Existing workflows only upload artifacts and do not deploy a live host. No production deployment or cloud-save migration is claimed. |
|
Merged into main as baf344c. Remote main SHA was verified, and its Git tree exactly matches the verified b7b5f93 beta tree (07d14e8e2c38239cd4f336c6123cbe1e888a5966). Main CI run 39007775927 passed in 3m18s, including LFS checkout, npm ci, production build, release tests and artifact upload. Hosting measurements: complete dist has 417 files / 1,242,415,365 bytes; largest file is Sakda GLB at 93,648,764 bytes. Choose a root-hosted static HTTPS service with adequate per-file and total-storage limits; no live deployment has been performed. The isolated verification checkout/server were removed; original working files and excluded raw assets were preserved. Prior known full Node-suite failure and release-acceptance limits remain as documented. |
|
Live incident follow-up after the user enabled Vercel LFS and redeployed: https://wild-crown.vercel.app/ still serves actor-aren as a 133-byte Git LFS pointer. Its exact SHA-256 is 991b0dba26514fadf1f97bd97f14c2ceb5feb1bddd3865f0663d9d0765d21a4a; the pointer identifies the intended 18,468,132-byte GLB with SHA-256 3974728dd8fe17476c89d7313b6d72d228e55146d271781e74eed3e2f1adeab1. Canonical and query-varied range responses returned the same pointer. Yara and Sakda also returned 133-byte pointers on x-vercel-cache MISS, age 0. This establishes bad bytes in the served deployment, not merely a browser-cache issue; build-cache reuse versus LFS checkout failure remains unproven without build logs. Latest GitHub Vercel status points to deployment 6x8NKhHLehvSk194eB7wnT4zyuc7. Current Vercel CLI access is limited to hoainhos-projects, not the owning nicks-projects-85b575ce team. Need that deployments clone/LFS/cache Build Logs or authorized project access before changing production settings. No model hash, loader integrity check or asset acceptance status was changed; no live fix is claimed. |
|
User supplied the complete Vercel build log for main baf344c: at 13:12:27.149 it explicitly says "Skipping build cache, deployment was triggered without cache." Build runs npm run build (tsc -b && vite build), completes successfully, then deploys. Build-cache reuse is therefore ruled out for this incident; do not ask for another cache-free redeploy. The log does not expose an LFS fetch failure or establish why native LFS materialization did not happen. Combined with the previously measured HTTP pointer bytes, the deployed source-to-output path still lacks hydrated assets. vite.config.ts campaignRuntimeAssets closeBundle lines 60-65 blindly copies those bytes, so successful Vite output is not asset-integrity proof. No SHA bypass or pointer hashes should be accepted. Documented recovery path is to hydrate and validate a local/CI checkout, run vercel pull for production settings, vercel build --prod, then vercel deploy --prebuilt --prod to the existing project; this bypasses Vercel Git checkout but still requires authorized access to nicks-projects-85b575ce. Current CLI cannot access that project. Production repair and post-fix live acceptance remain blocked on project access, not more build-cache tests. No repository files changed. |
|
Production incident resolved on https://wild-crown.vercel.app/. After the user authenticated the correct Vercel account, GET /v9/projects/wild-crown under nicks-projects-85b575ce returned project prj_1k59cRIFlmPa1ZOKP7BYoLs3gs3s with gitLFS:false. This was the actual API state despite the earlier reported dashboard enable action; no claim is made about why that earlier action was not reflected. PATCH of this exact project with gitLFS:true succeeded and returned true. Native Git production redeploy then completed in 150.17 seconds and aliased the existing domain; no prebuilt workaround was needed. Deployment: dpl_HvrpQCtL5Y6s1sMgkEXGp7omxPy7; inspector https://vercel.com/nicks-projects-85b575ce/wild-crown/HvrpQCtL5Y6s1sMgkEXGp7omxPy7; source main baf344c; API readyState READY, target production. Observed live acceptance: all 91 unique GLBs referenced by 167 rows in the eight runtime catalogs returned GLB v2 headers, declared lengths and HTTP object sizes matching the hydrated local models; zero pointer/header/size failures. Full streamed HTTP SHA-256 checks (not merely headers) passed for Aren: 18,468,132 bytes, 3974728dd8fe17476c89d7313b6d72d228e55146d271781e74eed3e2f1adeab1; Yara hero: 84,556,292 bytes, f082fc8fbe6c9bf0c2cce528c472ad10e8e2d6aed47e44962c6d0730d86bdc31; Sakda hero: 93,648,764 bytes, b9f57e6fa6d6d0e900b2939a8668e62537c52616bc924f2b5e3c1f97459983d5. This does not claim full HTTP hashing of every GLB. Fresh isolated headless Brave smoke at 1440x900 DPR1 on the production origin: Title -> New Game -> Aren/Koro -> region introduction -> native asset loading -> two-line opening dialogue -> How To Play -> rendered Greenwake with Aren, Koro and HUD. Trusted Escape opened Pause. Candidate/not-release-verified banner remained visible. No page exceptions, error-level console entries or SHA mismatch were observed. One music request reported net::ERR_ABORTED; direct range request for that same layer-corrupted.ogg returned 206, audio/ogg, OggS. An optional E attempt at the spawn position did not advance the first spatial objective; no first-objective, full campaign or persistence acceptance is claimed for this smoke. Existing unrelated test/release limits from this PR remain unchanged. No source files, model bytes, manifests, integrity checks or asset approval statuses changed. This comment is the durable hosting-configuration incident/evidence update; no unit suite was rerun for a hosting-only change. Main-session-only work; request/token counters unavailable. |
Scope
Publish the existing playable candidate beta into main at the user's explicit request. Includes the native campaign/runtime assets, browser-local New Game/Continue/Load Game, hero/companion support, audio and authored tooling/docs. Preserve the character VFX proposal without implementing it. Excluded raw provider intermediates remain local. This snapshot does not close production milestone issues or claim full-game acceptance.
Deployment correction
The previously green CI artifact at 2caa8d8 contained 91/91 GLB files as LFS pointer text. Enable LFS in both checkout workflows; document LFS hydration and complete dist/ publication at the host root. No production site is deployed by this PR.
Observed existing gates
Pre-merge proof
Fresh remote-only checkout build/browser and corrected CI artifact measurements will be recorded in a PR comment before merge. Generated assets remain not release-verified; strict acceptance/reference benchmarks remain blocked.
See docs/execution/beta-handoff-2026-10-17.md for evidence and boundaries.