Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
67c8d24
feat(playtest): qualify backlight controls with regional tone
jonit-dev Oct 3, 2026
ca1d52f
style: format retained backlight qualification report
jonit-dev Oct 3, 2026
8cb5d3e
style: satisfy fixture publication checks
jonit-dev Oct 3, 2026
bd5d9d5
feat(starter): qualify backlight and environment fill defaults
jonit-dev Oct 3, 2026
dca2d8d
feat(templates): add bounded material lighting defaults and lifetimes
jonit-dev Oct 3, 2026
d03ef22
docs(visuals): retain final backlight comparisons and measured costs
jonit-dev Oct 3, 2026
0976816
fix(test): honor durable temporary parents and stop allocation failures
jonit-dev Oct 3, 2026
815dd9c
docs(visuals): distinguish authored and new template lighting mechanisms
jonit-dev Oct 3, 2026
7311c2c
fix(test): canonicalize packed consumer fixture root
jonit-dev Oct 3, 2026
fce65fd
docs(visuals): retain generated gameplay and native fallback limits
jonit-dev Oct 3, 2026
7b5152c
docs(visuals): include preserved raw starter reports
jonit-dev Oct 3, 2026
e14be86
docs(visuals): retain matched gameplay performance regression
jonit-dev Oct 3, 2026
8e07ff9
fix(playtest): release owned capture resources before signal exit
jonit-dev Oct 3, 2026
8b9b429
docs(visuals): qualify historical capture lease isolation
jonit-dev Oct 3, 2026
d4c5917
docs(visuals): format retained evidence summaries
jonit-dev Oct 3, 2026
c8b1c7a
Merge develop into PR #416 preserving material and fog lifecycle
jonit-dev Oct 4, 2026
c20068b
fix(merge): green the PR #416 merge tree
jonit-dev Oct 4, 2026
eb71906
Merge current develop CI improvements into PR #416
jonit-dev Oct 4, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  

Large diffs are not rendered by default.

7 changes: 7 additions & 0 deletions docs/benchmark/prd345/final-cost/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Final Cost

Actual engine GPU timestamp windows 3–5: dark 11.0467→11.7467 ms (+0.700 ms, 6.34%); backlit 11.6033→11.2267 ms is noise, not a speedup claim. Only 23 asynchronous timestamp samples per arm across three 60-frame windows in one serial run. Raw windows, provenance and full frames retained. No compile-complete or display-FPS claim.

## Historical capture coordination limitation

A reported `held` capture lease establishes ownership within that process's temporary namespace. `defaultCaptureLockRoot()` derives its path from `TMPDIR`; durable-TMPDIR gameplay/native-opening and matched performance runs used private namespaces. We manually serialized our own jobs, but shared global GPU exclusion and external workload isolation were not established for those historical runs. Their measured outcomes remain retained with this limitation; they must not be described as globally exclusive qualification. Future timing runs use an explicit outer existing-API shared `/tmp/threenative-playtest-capture` lease and durable child temps.
Binary file not shown.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Binary file added docs/benchmark/prd345/final-cost/summary.json.gz
Binary file not shown.
7 changes: 7 additions & 0 deletions docs/benchmark/prd345/final-fixture/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Final Fixture

Six current-source controlled arms qualify the intended rim, dark-fill and report red/green checks on hardware NVIDIA Turing WebGPU at 1280×720. All full PNGs, raw reports and qualification are retained. Root inspected the end-pose pixels. This is web fixture qualification, not native or all-template gameplay acceptance. The previous software-adapter harness failure is retained separately and never treated as passing.

## Historical capture coordination limitation

A reported `held` capture lease establishes ownership within that process's temporary namespace. `defaultCaptureLockRoot()` derives its path from `TMPDIR`; durable-TMPDIR gameplay/native-opening and matched performance runs used private namespaces. We manually serialized our own jobs, but shared global GPU exclusion and external workload isolation were not established for those historical runs. Their measured outcomes remain retained with this limitation; they must not be described as globally exclusive qualification. Future timing runs use an explicit outer existing-API shared `/tmp/threenative-playtest-capture` lease and durable child temps.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file added docs/benchmark/prd345/final-fixture/runs.json.gz
Binary file not shown.
9 changes: 9 additions & 0 deletions docs/benchmark/prd345/final-gates/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Final gate logs

Root typecheck and lint pass. Affected CPU verification passes 65 files / 1011 tests. The isolated native host and V8/QuickJS prerequisites build; actual native unit tests pass 1531, with 62 skipped. Native unit/build results do not qualify native appearance.

The retained full-root attempt completed docs/build then failed on 21 absent native test binaries. Its raw failure remains retained; prerequisites were built afterward. Full root verification, all-thirteen generated gameplay and matched native fallback remain pending. No skipped lane is reported as passing.

## Historical capture coordination limitation

A reported `held` capture lease establishes ownership within that process's temporary namespace. `defaultCaptureLockRoot()` derives its path from `TMPDIR`; durable-TMPDIR gameplay/native-opening and matched performance runs used private namespaces. We manually serialized our own jobs, but shared global GPU exclusion and external workload isolation were not established for those historical runs. Their measured outcomes remain retained with this limitation; they must not be described as globally exclusive qualification. Future timing runs use an explicit outer existing-API shared `/tmp/threenative-playtest-capture` lease and durable child temps.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
45 changes: 45 additions & 0 deletions docs/benchmark/prd345/final-template-matrix/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# Final PRD-345 default template captures

All twelve conventional templates pass strict matched hardware WebGPU readiness captures
at the fixed tick-60 default camera: 1280×720, NVIDIA Turing, 4× MSAA, identical per-pair
camera/game state/clock/backend/buffer and cooked assets. Candidate generated runtime
source matches checkpoint `dca2d8d4b`, including read-only light matrices. All 24 full PNGs
were personally inspected by root and a separate reviewer. The original authored palettes
and surrounding geometry/shadows remain stable. Bright photographed IBL suppresses extra
analytic fill; difficult backlit/black-environment controls are separately qualified.

This custom boot capture is not a full gameplay/playtest matrix, native proof, pipeline
compile-completion claim or a final per-frame/startup performance budget. Source manifests,
readiness session, runtime snapshots and adapter provenance are preserved in each gzip
report and the complete matrix. Earlier attempts and rejected racing frames remain in
separate historical evidence; they were not overwritten or silently filtered.

Platformer flags and runner smoke can vary with presentation time despite matched gameplay
clock. Tower-defense HUD hover differs slightly. These differences are disclosed, not
claimed as lighting improvements or exact whole-frame pixel equivalence. Puzzle/tower
extra material rim/fill remain zero to preserve authored lights; runner/snow extra fill
remains zero. Custom RTS terrain/water and snow materials stay original. Rain's custom
raymarched shader is explicitly unqualified; native/mobile/software/WebGL retain originals.

| Template | Before | After |
| --- | --- | --- |
| racing | ![Before](racing/before.png) | ![After](racing/after.png) |
| minimal | ![Before](minimal/before.png) | ![After](minimal/after.png) |
| starter | ![Before](starter/before.png) | ![After](starter/after.png) |
| platformer | ![Before](platformer/before.png) | ![After](platformer/after.png) |
| runner | ![Before](runner/before.png) | ![After](runner/after.png) |
| shooter | ![Before](shooter/before.png) | ![After](shooter/after.png) |
| action-rpg | ![Before](action-rpg/before.png) | ![After](action-rpg/after.png) |
| rts | ![Before](rts/before.png) | ![After](rts/after.png) |
| tower-defense | ![Before](tower-defense/before.png) | ![After](tower-defense/after.png) |
| puzzle | ![Before](puzzle/before.png) | ![After](puzzle/after.png) |
| sailing | ![Before](sailing/before.png) | ![After](sailing/after.png) |
| snow | ![Before](snow/before.png) | ![After](snow/after.png) |

[Effective mechanisms, named zero controls and remaining original acceptance](mechanisms.md)
separate authored illumination from the new grazing/disc terms; palette-preserving boot proof
does not establish equivalent difficult-light behavior in every template.

## Historical capture coordination limitation

A reported `held` capture lease establishes ownership within that process's temporary namespace. `defaultCaptureLockRoot()` derives its path from `TMPDIR`; durable-TMPDIR gameplay/native-opening and matched performance runs used private namespaces. We manually serialized our own jobs, but shared global GPU exclusion and external workload isolation were not established for those historical runs. Their measured outcomes remain retained with this limitation; they must not be described as globally exclusive qualification. Future timing runs use an explicit outer existing-API shared `/tmp/threenative-playtest-capture` lease and durable child temps.
Binary file not shown.
Binary file not shown.
Binary file not shown.
36 changes: 36 additions & 0 deletions docs/benchmark/prd345/final-template-matrix/mechanisms.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# Effective default mechanism map

All paths are relative to `packages/create-threenative/templates/`. Each conventional new
expression is actual source in `src/render/backlightMaterial.ts`, with live named `rimGain`,
`fillGain`, black `fillColor`, direction and angular-size controls. Reporting survives zero
controls. The rim is view grazing × key-behind × surface-backlit; fill is directional diffuse
plus a roughness-broadened reflected disc. Admission is hardware high-tier desktop WebGPU.

| Template | Existing authored source and behavior | New default rim / fill | Effective opening and proof limit |
| --- | --- | --- | --- |
| minimal | `src/render/lighting.ts`: sun4.5; `sky.ts`: photo IBL | .12 / 1 | Measured bright IBL suppresses extra fill; static-material scene |
| starter | `lighting.ts`: sun4.5; `sky.ts`: photo IBL | .12 / 1 | Measured bright IBL suppresses fill; actual mannequin supplies global difficult-light controls |
| action-rpg | `lighting.ts`: sun4.5; photo IBL; `dungeon.ts`: torch points | .12 / 1 | Bright-source fill off; spawned loot enrolled |
| platformer | `lighting.ts`: following sun4.2; photo IBL | .12 / 1 | Bright-source fill off |
| shooter | `lighting.ts`: sun4.5; photo IBL | .12 / 1 | Bright-source fill off |
| racing | `lighting.ts`: sun4.5; photo IBL | .12 / 1 | Bright-source fill off; read-only matrix fix preserves road/shadows |
| rts | `lighting.ts`: following sun4.5; photo IBL | .12 / 1 | Bright-source fill off; dynamic armies enrolled, custom terrain/water excluded |
| sailing | `lighting.ts`: palette sun3.4; photo IBL | .12 / 1 | Bright-source fill off |
| runner | `lighting.ts`: sun4.5 plus camera directional fill .9 | .12 / 0 (actual `Run.ts` override) | Original fill retained; not analytic-disc equivalence |
| snow | `lighting.ts`: storm sun3.3, hemisphere2.2, camera directional fill .45 | .12 / 0 | Original storm fill retained; custom snow material excluded; no analytic-disc equivalence |
| puzzle | `lighting.ts`: key.8, hemisphere.6, cold directional rim.24; vault lantern/seal points | 0 / 0 | Measured missing environment zero, added terms disabled; originals not key-gated grazing/disc equivalence |
| tower-defense | `lighting.ts`: key3.4, hemisphere1.5, cold directional rim.9; photo IBL | 0 / 0 | Originals preserved; authored directional rim/hemisphere not requested expressions |
| rain | `lighting.ts` forwards key/fill/flash into actual custom `world-shader.ts`; cloud `uSky` camera pass | Not integrated | Existing hemisphere-like fill and flash diffuse are not grazing/disc; cloud-source mean unknown |

Twelve matched full opening pairs establish authored-palette preservation. The starter mannequin
fixture supplies positive/zero rim, positive/black fill and omitted-report red-green controls.
Those global controls do not prove difficult-light behavior in every template. Bright-source
reports prove why fill is suppressed, not dark/no-sun behavior in every template.

Existing directional rim/hemisphere lights are useful authored illumination, but are not
mathematically equivalent to the requested terms. All-template acceptance remains open for
puzzle/tower disabled additions, runner/snow analytic-fill omission, rain and enabled native
appearance. Do not stack duplicate ambient merely to make new gains nonzero. A coherent
replacement or qualified authored alternative requires actual behavioral/palette proof and
preserved original acceptance. Native/mobile/software/WebGL original-material fallback is
preservation evidence, not enabled-mechanism acceptance.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
11 changes: 11 additions & 0 deletions docs/benchmark/prd345/generated-gameplay-native-fallback/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Generated gameplay and native fallback

All 13 actual clean generated starters used the same frozen local framework archives and forced capture lease. Eleven passed their original full gameplay suite. Shooter failed its unchanged 33 ms performance p95 limit at 52 ms (352 performance samples; 603 observed frames); snow failed at 34 ms (223 performance samples; 660 observed frames). Those failures are retained, with matched baseline controls pending. All 13 booted independently. This is not an all-template gameplay acceptance pass. Full raw reports are compressed here; every original image and report remains in the durable local gameplay5 tree, with SHA-256 image/report inventory.

The native opening before/after pair uses actual native WebGPU on NVIDIA RTX 2080, 1280×720, matched camera and terminal tick 86. The candidate reports enabled=false, converted=0, unknown mean radiance, and platform-unqualified fallback. These pictures demonstrate preservation of the original appearance, not enabled native lighting qualification. Original native render-chain gameplay attempts remain blocked by unsupported visibility observations; the separate compatible opening witness does not replace those gates. Raw reports, observations, derived proof and both full images are retained here. Both native reports disclose the antialias stage dropped with `build:Image is not defined`, and network diagnostics explicitly waived because native has no observer. These limitations remain open. Independent review personally inspected both full images and confirmed the matched camera/projection, tick, sun, fog, object count and material census. Single-launch ready timings are not p95 measurements.

The root full suite separately failed two canonical fixture-path checks before its unit phase; the fixture correction and its seven passing tests are recorded in ../packed-fixture-canonical-root. Original acceptance remains partial.

## Historical capture coordination limitation

A reported `held` capture lease establishes ownership within that process's temporary namespace. `defaultCaptureLockRoot()` derives its path from `TMPDIR`; durable-TMPDIR gameplay/native-opening and matched performance runs used private namespaces. We manually serialized our own jobs, but shared global GPU exclusion and external workload isolation were not established for those historical runs. Their measured outcomes remain retained with this limitation; they must not be described as globally exclusive qualification. Future timing runs use an explicit outer existing-API shared `/tmp/threenative-playtest-capture` lease and durable child temps.
Loading
Loading