Record14 min read10 sections

Current branch beta handoff

Commit-specific qualification, acceptance evidence, and the release handoff.

docs/RELEASE_CANDIDATE.mdSource updated 2026-10-28
Markdown
On this page 10 sections

#Dusk identity rename — acceptance (October 28)

Separate from the beta results below; nothing here re-qualifies 0546627. Branch codex/dusk-identity. Commits: R1 bd2002a, R2 af9087f, R3 e88c523 (pushed); R4 00ce5b5, R5 27d6744. All are pushed to jasona/dusk-engine. PR: https://github.com/jasona/dusk-engine/pull/2. Per-milestone details are in Dusk compatibility.

ID Result
V1 npm run check passes: types, boundaries (including the new host rules) and generated wire. Root package and lockfile both read dusk-engine.
V2 npm run build passes (player, workers, editor, server, author, accounts, retained engine).
V3 tests/dusk-env.test.ts passes (10). Production host smoke passes with canonical-only and legacy-only settings, and a conflict exits 78 with no values printed.
V4 Boundary check and test pass. Exceptions are listed in DUSK_COMPATIBILITY.
V5 Dusk World Atelier, Observatory and Physics Lab captured on the physical GPU.
V6 Continuous two-traveler house → garden → cart → house journey on the physical Intel Xe-3LPG: passed on re-run (1.5 min); the first run failed at cart boarding (E did not take a seat). The baseline passed once. Recorded as intermittent and not reproduced.
V7 meridian-browser.test.ts passes on the physical GPU (puzzle, travel, reload, editor publish). Captures show Meridian with its own identity.
V8 A copy of the existing .data/hearth room loads under DUSK_DATA_DIR with its signing key. Legacy-save, editor-identity and engine-pinning tests pass. Serialized identifiers are unchanged.
V9 Compose configuration inspected for legacy-only and canonical-only Coolify settings. Volumes are unchanged. Static only.
V10 This record, DUSK_COMPATIBILITY and the PR description.

Not covered: GitHub Actions (earlier billing block; no CI result claimed), Docker image build and hosted restart (no daemon), and pre-existing software-rendering browser failures (listed under R3 in DUSK_COMPATIBILITY, identical on the baseline).

This is the codex/engine-foundations arrival candidate: textured travelers, the furnished Lantern House, planted garden, shared movement, doors, chat, pickups and a two-seat garden cart. Use a separate application and storage from the earlier beta on main. It is a playable slice of the engine, not completion of the full roadmap.

#Completed fixed polish pass

The later, explicitly authorized five-item polish pass is complete: 5/5 (100%), with feature implementation unchanged at 70/70 (100%). The current branch preview is lantern-house.1.arrival-10; run instructions, screenshots, motion clips and the passing continuous shared house/garden/cart/house route are in TRAVELER_ART.md. Stop that pass; recorded follow-ups are not an automatic work queue.

The qualification record below remains pinned to the earlier candidate 0546627. Its Docker result is still unreported. The newer polish code has focused native/source and physical-GPU journey checks; no new broad regression, benchmark or Docker execution pass is claimed. Record an external Docker result against its exact commit rather than transferring old acceptance to newer code.

#Frozen finish line for this pass — October 28

Deliverable: one feature-complete, polished desktop beta release candidate, at one pinned commit, ready for the user's shared playtesting. The existing 70 features stay in scope. The tested beta profile uses desktop Chromium/WebGPU, Rapier, the furnished arrival and shared multiplayer. This is a bounded release pass; full engine production/performance certification remains a separate phase. No change to the 70-feature inventory or to the original roadmap's requirements is implied by this beta finish line.

Gate Exact finish condition Current state
1. Build and native regression Production build and type/boundary/wire checks pass; full native baseline has zero failures/cancellations; changed-code checks pass on the release candidate. Passing evidence: production build, 1,446 native passes / zero failures; environment-dependent skips recorded. Final artifact is pinned under gate 5.
2. Shared play Actual two-browser journeys pass furnished house/keeper/shared movement, porch-to-grass/garden return, two-seat cart use, and 2D author/publish/actions/pickup/reload. Passed: four furnished-world journeys plus the 2D journey on physical Xe-3LPG.
3. Visual pass Review and retain screenshots of the approved character, house/daylight, garden and shared play; fix visible blockers in those views. Passed for this candidate: arrival-7 daylight/edge pass, approved Vita character retained, screenshots reviewed.
4. Durability and recovery Finish the existing database-enabled regression set with zero failures/cancellations, including exclusive inventory, reconnect/restart, fencing, backup/restore and vehicle ownership. Enumerate environment skips; a mandatory path cannot be hidden by a skip. Closed: the 93-file set has no unresolved failures after the full sweep and complete affected-file rerun. See the acceptance record below; conditional browser skips remain explicit.
5. Package and handoff Run the existing arrival-art Docker smoke on a Docker-capable host, including same-volume restart. Push the final candidate, document exact run instructions, attach screenshots and the fixed benchmark report, and list all remaining limitations. Blocked on Docker daemon access. Candidate 0546627 is built and pushed; the existing container smoke is the only remaining acceptance action. No production deployment is part of this gate.

Status: 4 of 5 beta gates are closed; only gate 5 remains. Feature implementation is independently 70/70 (100%). These gates are not weighted estimates of remaining time and must not be converted into another misleading overall percentage.

The benchmark report for this pass is fixed to: (a) 16 travelers / 128 active bodies, 60 warm-up + 300 measured ticks on each backend; (b) a 60-second furnished 1080p physical-GPU walking/looking sample with cold local startup observation. Publish the measured failures as well as passes. Repeating, extending or optimizing these workloads is follow-up work unless needed to diagnose a blocker in gates 1–5. The report does not qualify the original full-plan performance targets. Those still require the ten-minute desktop walkthrough and GPU timings, shaped startup/download test, supported-phone thermal run, sustained memory/crossing checks and satisfactory full-load simulation performance.

Stopping rule: after gates 1–5 close, mark this beta qualification/polish pass complete and hand over the pinned build. Stop adding tests, polish or optimization tasks. New nonblocking findings go into the existing follow-up notes. A new gate, new feature, expanded compatibility matrix or further optimization phase requires an explicit user scope decision. If a gate requires unavailable external access, report it blocked and hand over its exact remaining command; do not call it passed or substitute unrelated work. Existing full-roadmap requirements remain open until separately qualified.

#Pinned candidate and remaining action

Candidate: 0546627 on codex/engine-foundations in https://github.com/jasona/awaken-engine.git. Production build and source/type/boundary/wire checks pass. The local default-profile retained-engine artifact is ff082de3f894248ac3e1fc71ab064b039d6173bb6acbff5271b14b4c22140633; the arrival-art Docker build uses its own explicit build argument.

On a Docker-enabled host, from a checkout of this repository:

Terminal
git fetch origin
git switch --detach 0546627
npm ci
npm run test:container -- --arrival-art

Use Node 22.23.4 for the qualification CLI. The runner creates a uniquely named temporary image, container and named volume; it verifies two-client shared state, exclusive storage ownership, graceful shutdown, same-volume replacement, retained credentials/state, packaged assets/author tools and Docker health, then removes its own test resources. It does not deploy or alter a production application. This session has only the inaccessible /var/run/docker.sock context and no rootless Docker runtime. No container execution pass is claimed. A passing result from the command above, or daemon access to run it here, is the remaining input.

#Gate 4 acceptance — October 28

The frozen 93 database-enabled test files have no unresolved named failures. The full sweep finished with 241 passes, 2 failures, no cancellations and 28 conditional browser skips. Its 256 MiB test-worker heap ceiling interrupted the routing worker before all of that file's remaining cases ran. The two affected files were then run in full with a 512 MiB test-worker heap: 28 passes, zero failures/cancellations and one conditional browser skip. This also completed 11 previously unreached passing cases and one browser skip. Combined latest results cover 254 distinct passing checks and 29 explicit browser skips. These are combined results, not a claim that the first full sweep was green. Production RSS admission budgets and supervisor heap limits were not raised.

Coverage includes exclusive inventory/container transfers, trusted/cooperative movement and restart, database/lease loss, bounded drain and stale-writer fencing, backup/restore including vehicle ownership, build-worker crash recovery in its separate database, account return, local/remote room ownership transfer, continuous room sockets and doorway handoff. The separate changed-story/art/checkpoint check passes 14/14, and the production build passes. Qualifying imported art stays separate from the compact state/replay fixtures. No new visual change is claimed for this database milestone.

The remaining admission corrections align the old-health test with the existing policy (refuse new arrivals under unmeasured headroom; preserve saved returns), and construct the swimming fixture's simulated client before starting server pressure measurement. Runtime behavior and the original pressure thresholds are preserved. Replay tampering remains rejected by the current earlier validation.

Local records: .data/qualification-2026-10-28/postgres-gate4-final.log, gate4-admission-final.log, story-fixture-check.log and build-gate4-final.log. The targeted command was:

Terminal
NODE_OPTIONS=--max-old-space-size=512 node tools/cli/test-control.mjs \
  --test-force-exit --test-timeout=180000 \
  tests/room-routing.test.ts tests/swimming-room.test.ts

The 29 skipped cases require optional client-bundle browser environments. Their server/data checks ran where applicable; they remain unverified browser journeys, not passes. The mandatory furnished shared-play and 2D journeys passed separately under gate 2. The skips are:

Explicit browser-only skips
  • browser owner invites accounts and editor saves with account-bound undo while viewer stays read only
  • atelier travelers walk and operate the bridge
  • studio checks private inventory receipts for a shared chest
  • editor captures movement and a creator response in one replay
  • two travelers share raft steering
  • two browsers share a creator-authored job result and recover it after host restart
  • two browsers share an installed program result and recover it after host restart
  • portable creator: owner captures, restarts and replays an actual shared response
  • native operator and sensor: owner captures, restarts and replays an actual shared response
  • dynamic entities: owner captures, restarts and replays an actual shared response
  • spawned behavior jobs: owner captures, restarts and replays an actual shared response
  • spawned collision: owner captures, restarts and replays an actual shared response
  • spawned moving platforms: owner captures, restarts and replays an actual shared response
  • spawned rigid bodies: owner captures, restarts and replays an actual shared response
  • spawned rigid travel: owner captures, restarts and replays an actual shared response
  • spawned mixed physics: owner captures, restarts and replays an actual shared response
  • authored and spawned physics: owner captures, restarts and replays an actual shared response
  • shared rigid platform: owner captures, restarts and replays an actual shared response
  • linked room bridge action
  • two travelers receive linked stones beside spawned bodies
  • editor records a walk and replay studio verifies it
  • editor Apply and native program migration keep two live travelers and their progress
  • live multi-place owner creates shared stones
  • browser signs in on two devices and returns to the same saved traveler
  • browser confirms a recovery link before retaining the original traveler and inventory
  • two browsers share public plugin progress through a stopped-room version upgrade
  • two travelers see the mixed-room mannequin
  • a rider crosses and reconnects while another traveler observes
  • browser doorway signs in and returns to invited inventory on a second device

#Run with Docker locally

From this repository, with Docker running and accessible to your user:

Terminal
git switch codex/engine-foundations
git pull --ff-only origin codex/engine-foundations
cp deploy/beta.env.example .env.beta

Edit .env.beta and replace the example passphrase. The file is ignored by Git. Keep the local origin http://localhost:8789. Then, in the same terminal:

Terminal
beta() {
  docker compose --env-file .env.beta -p darkwind-beta \
    -f compose.beta.yaml -f compose.beta.local.yaml "$@"
}
beta up --build -d
beta ps
beta logs --tail=50

Wait for healthy, then visit http://localhost:8789/ in two independent browser profiles. Enter the passphrase you chose. Docker builds the application; there is no separate local npm ci or Vite server to start.

Docker automatically creates darkwind-beta_darkwind-arrival-v7, mounted at /data. This version 7 daylight-review seed uses fresh storage; previous version 6 volumes remain intact. Reusing the project and version 7 volume preserves the room and session key. beta restart darkwind-beta tests restart recovery. beta down stops the test while retaining storage. Do not add --volumes when keeping progress.

#Configure an isolated Coolify application

Create a Git-based Docker Compose application for https://github.com/jasona/awaken-engine.git with:

Setting Value
Branch codex/engine-foundations
Base directory /
Compose location /compose.beta.yaml
Service darkwind-beta
Internal port 8787
Domain A separate beta HTTPS domain
DW_ALLOWED_ORIGINS Exact public HTTPS origin, without a trailing slash or path
DW_ROOM_PASSWORD Your chosen private test passphrase

Load the Compose definition, set those two environment variables, and deploy when ready. Select darkwind-beta for the domain; a domain value such as https://beta.example.com:8787 tells Coolify the internal port, while players visit https://beta.example.com. See the official Coolify Compose guide. The Compose file declares persistent storage automatically; no manual volume creation is needed. Keep the same application and volume across redeployments. Use one instance, stop-then-start replacement and the image's health check. This configuration does not expose editor authoring or enable SQL accounts.

#Five-minute multiplayer check

  1. Open /health; expect ready: true. Open the game in two browser profiles (ideally on two computers) and enter the passphrase.
  2. Confirm two connected travelers. Walk around each other and into the garden; check that walking off the porch reaches the ground normally.
  3. In the garden, follow the path to the cart on the right. Walk up its rear step, press E to drive, and have the second traveler board and press E for the passenger seat. Use W/S to move and A/D to steer; E leaves a seat.
  4. Talk to the keeper with E. Open the garden door and verify the other traveler sees it open. Try chat and let one traveler collect the lantern.
  5. Leave the door open, restart the service, and keep both pages open. Expect both to reconnect and the shared door to remain open. Close it from one page and confirm the other sees the change.
  6. Refresh a page, then redeploy the same commit. Check the shared progress is retained. Record the commit, browser/GPU, action and a screenshot for defects.

The shared room and signing key are server-persistent; player position/settings in this entry world remain browser-local. This handoff does not exercise the separate SQL-backed account/creator deployment.

#Validation and remaining review

#October 28 integrated pass

Feature implementation stays 70/70 (100%). Arrival-7 has window-shaped daylight and spatial edge smoothing, preserving the approved Vita character. Four physical Intel Xe-3LPG journeys pass house/keeper/shared movement, porch/grass/garden return, crowded arrival/camera clearance, and driver/passenger cart use. The full native run has 1,446 passes, zero failures, 259 environment-dependent skips. A real 2D import/author/publish/two-browser/pickup/reload journey also passes.

The initial database sweep exposed stale source versions and art-sized inline recording fixtures. Those failures are repaired; the completed gate-4 acceptance record above distinguishes the full sweep from the affected-file rerun. Production content retains its own textured integration check. Backups now include vehicle ownership. Broader optional browser/device qualification remains open.

A fresh 60-second 1920×1080 walking/looking sample on physical Xe-3LPG, high quality and Worker rendering, records 3,599 intervals: p50 16.7 / p95 16.8 / p99 16.8 ms. Final counters show 4,106 submitted / 4,105 completed frames, one pending, one skipped and zero failed/cancelled; the final CPU submit sample is 1.6 ms. No page errors occurred. These are whole-run main-page RAF intervals and one final CPU sample, not GPU execution timings or the ten-minute full-world desktop gate. The strict 16.7 ms interval target is missed by 0.1 ms.

Unshaped cold local navigation reached readiness at 8.033 s and observed movement at 8.375 s, including automation/report overhead. This does not qualify the 20 Mbps/80 ms first-control or critical-download gates. Raw local report is in .data/qualification-2026-10-28/arrival-performance.json.

Reproduce the rendered sample without other test/benchmark load:

Terminal
DW_PLAYTEST=arrival-art DW_BENCH_SECONDS=60 DW_GPU_PROFILE=hardware \
PLAYWRIGHT_EXECUTABLE_PATH=/usr/bin/chromium \
npx playwright test tests/browser/arrival-performance.spec.ts

Use DW_BENCH_SECONDS=600 for a longer interior-only sample; it still excludes other places, multi-traveler load, GPU execution timestamps and physical phones.

Measured high-quality arrival at 1080p
Measured high-quality arrival at 1080pExpand ↗

For the version 4 handoff, the Node 22 production build, type/boundary/wire checks and Compose configuration validation passed. A focused Chromium journey against the actual built production server (using the deployment entrypoint on the host) passed private admission, two rendered travelers, a shared door change, graceful restart on the same storage, both clients reconnecting, retained signing key and a second shared interaction after reconnect. The post-restart screenshot was visually reviewed. This host-runtime check does not verify container packaging. For version 5, focused physical-GPU checks passed porch/lawn movement, shared garden visibility, return to the house, and keeper dialogue; type/boundary/wire and identity/collision/story checks also passed. See art acceptance. Actual Docker image execution remains unverified in this agent session: the Docker socket is inaccessible and sudo is prohibited by process settings. This does not establish any problem with the image itself.

On a Docker-enabled machine, the existing container acceptance runner can now target this exact arrival world:

Terminal
npm ci
npm run test:container -- --arrival-art

It builds a temporary image, checks two protocol clients sharing a door, replaces its own container on the same volume, verifies retained state/session and checks storage ownership, the single-writer lock and health. It removes only its uniquely named test resources. This is not a visual or Coolify proxy test; perform the browser checklist above as well.

The user approved the current white-haired fantasy character on October 27; see TRAVELER_ART.

Still open: hosted HTTPS/WSS and two-device testing, actual container acceptance, recorded environment/animation refinements, wider hardware and performance qualification, owned-backend replacement gates and interrupted replay coverage. Continuous authored-body replay with separate physics owners is delivered; see CARGO_CROSSINGS.md. These remain unfinished full-plan work.

End of Release & acceptance