Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
186 commits
Select commit Hold shift + click to select a range
227cb94
docs: begin Strata terrain hardening epic
jonit-dev Oct 10, 2026
9e7a8ca
fix(terrain): validate bake inputs and pin starter output
jonit-dev Oct 10, 2026
6c40d87
perf(terrain): bound erosion work and remove hot-loop allocations
jonit-dev Oct 10, 2026
c1e4211
docs: track active Strata EPIC worktree ownership
jonit-dev Oct 10, 2026
8454426
ci: select and require Strata terrain proof
jonit-dev Oct 10, 2026
c2bbd30
docs: record Strata proof integration and checkout reuse
jonit-dev Oct 10, 2026
bd8072b
docs: record Strata runtime failures and editor proof
jonit-dev Oct 10, 2026
11e7fc7
feat(assets): bake terrain worlds with instanced static species
jonit-dev Oct 10, 2026
ede0cff
docs(strata): record export integration and desktop runtime results
jonit-dev Oct 10, 2026
5b8fbfa
fix(terrain): start editor on invalid saves and expose recovery
jonit-dev Oct 10, 2026
7673267
fix(terrain): keep recovery controller independent of draft UI
jonit-dev Oct 10, 2026
dde88e3
fix(scaffold): pin supported pnpm before consumer installs
jonit-dev Oct 10, 2026
4cf0664
feat(terrain): cook forest kit and verify vanilla GLB consumers
jonit-dev Oct 10, 2026
95fc18c
fix(assets): preserve terrain species LODs and validate baked contact
jonit-dev Oct 10, 2026
55d64bb
fix(terrain): include terrain in isolated asset cook installs
jonit-dev Oct 10, 2026
38c83ef
fix(terrain): declare root forest cook dependency
jonit-dev Oct 10, 2026
f46902d
docs(strata): record packed consumer pass and pending visual scope
jonit-dev Oct 10, 2026
e0a53dc
perf(terrain): remove repeated hydraulic and placement work
jonit-dev Oct 10, 2026
5ad00f9
chore(terrain): ignore generated forest world output
jonit-dev Oct 10, 2026
69f3ce3
fix(terrain): preserve ordered save intents across document rebases
jonit-dev Oct 10, 2026
f95fc72
fix(terrain): record intents against the displayed document
jonit-dev Oct 10, 2026
a750a9a
perf(terrain): avoid numeric validation path allocations
jonit-dev Oct 10, 2026
44d213b
fix(terrain): reject invalid cook flags and preserve IO failures
jonit-dev Oct 10, 2026
83a9e79
fix(terrain): reject invalid bake flags across starter kits
jonit-dev Oct 10, 2026
9e362e8
feat(core): await spawn readiness through WorldCells updates
jonit-dev Oct 10, 2026
94d179e
feat(core): generate pinned Three patches with legacy upgrade compati…
jonit-dev Oct 10, 2026
f2bf1eb
test(scaffold): refresh verified shared artifact fingerprints
jonit-dev Oct 10, 2026
4c3c69a
docs(strata): record actual generated patch drift rejection
jonit-dev Oct 10, 2026
e12a5d5
test(native): prove WorldCells spawn readiness lifecycle
jonit-dev Oct 10, 2026
3b32a45
refactor(strata): join engine spawn readiness in preview callers
jonit-dev Oct 11, 2026
0f8d7a3
docs(strata): record hardware recovery and incomplete preview qualifi…
jonit-dev Oct 11, 2026
97fad60
feat(terrain): move starter heightmaps to byte-stable RAW16 sidecars
jonit-dev Oct 11, 2026
e32411f
docs(terrain): align charter and placement rules with authoring allow…
jonit-dev Oct 11, 2026
d342cd9
test(world): prove seeded load and disposal races leave no residency
jonit-dev Oct 11, 2026
141ecd2
fix(terrain): synchronize generator and cohort peer release metadata
jonit-dev Oct 11, 2026
9c80692
docs(terrain): record integration build and outstanding kit packing f…
jonit-dev Oct 11, 2026
53e9e09
refactor(core): extract world load and admission limiters
jonit-dev Oct 11, 2026
df1727b
docs(terrain): record verified first-use fir preparation
jonit-dev Oct 11, 2026
69b6adf
refactor(core): extract streamed world shared batches
jonit-dev Oct 11, 2026
8698c31
refactor(core): extract world bundle surface safety
jonit-dev Oct 11, 2026
ca83730
fix(assets): share identical images in cooked terrain worlds
jonit-dev Oct 11, 2026
47adb19
refactor(core): extract world chunk shadow proxies
jonit-dev Oct 11, 2026
f8c41d6
feat(scaffolder): deliver terrain kit sources from packed package
jonit-dev Oct 11, 2026
410171f
feat(core): prepare compressed textures through public WebGPU seams
jonit-dev Oct 11, 2026
5f80682
Remove the private compressed upload lane from generated Three.js pat…
jonit-dev Oct 11, 2026
ec2671e
docs(prd-593): record web, native and preview runs after upload-lane …
jonit-dev Oct 11, 2026
70068c7
fix(core): upgrade generated Three patch predecessors and stock delet…
jonit-dev Oct 11, 2026
a2b7776
test(core): prove retained Three patch hunks against stock source
jonit-dev Oct 11, 2026
6583ec2
docs(prd-593): close AC-5 because the updateTexture wrapper was deleted
jonit-dev Oct 11, 2026
aa4a32c
docs(prd-593): keep EPIC integration notes after lane merge
jonit-dev Oct 11, 2026
aa8fb26
test(core): retain red imported instanced LOD loader regressions
jonit-dev Oct 11, 2026
49df9ea
fix(core): attach partitioned LOD to imported instanced meshes
jonit-dev Oct 11, 2026
b84a7d8
fix(assets): preserve discrete LOD chains in cooked terrain worlds
jonit-dev Oct 11, 2026
fd3faf1
wip(terrain): retained draft of terrain MCP server before architectur…
jonit-dev Oct 11, 2026
fb5092d
feat(terrain): serve terrain MCP from @threenative/terrain through a …
jonit-dev Oct 11, 2026
524b1f0
feat(terrain): list the terrain MCP server in doctor and the install …
jonit-dev Oct 11, 2026
b2b5ac9
feat(terrain): terrain_generate reports the recipe, paths, GLB counts…
jonit-dev Oct 11, 2026
953b51c
docs(prd-584): note the fifth-server enumerations, the tool result co…
jonit-dev Oct 11, 2026
22a8e18
test(golden-path): give the cold-layout copy the terrain kit sources …
jonit-dev Oct 11, 2026
7702883
fix(golden-path): resolve packed packages workspace deps from local t…
jonit-dev Oct 11, 2026
d5fe1c2
refactor(core): extract world cell data declarations
jonit-dev Oct 11, 2026
0ff054b
refactor(core): extract world tile observation declarations
jonit-dev Oct 11, 2026
8a9f17f
refactor(core): extract world GPU validation declarations
jonit-dev Oct 11, 2026
0c2f9e4
refactor(core): extract CellPrewarm state and draw hooks
jonit-dev Oct 11, 2026
9f9b52c
refactor(core): extract owned CellChunks collaborator
jonit-dev Oct 11, 2026
7d09282
refactor(core): extract CellImpostors ownership from WorldCells
jonit-dev Oct 11, 2026
712a4c4
refactor(core): extract CellModels ownership from WorldCells
jonit-dev Oct 11, 2026
fc79a88
fix(core): extend appearance guard to extracted WorldCells seams
jonit-dev Oct 11, 2026
d29bc0c
refactor(core): extract CellRender ownership from WorldCells
jonit-dev Oct 11, 2026
2c71574
fix(core): restore IWorldAsset type import after CellRender extraction
jonit-dev Oct 11, 2026
667fcdc
fix(core): record the regenerated Three patch hash in the lockfile
jonit-dev Oct 11, 2026
ebffa23
fix: remove terrain unknown-cast suppressions
jonit-dev Oct 11, 2026
fbec7d1
docs(prd-595): record the split meeting the 3 000-line limit with wor…
jonit-dev Oct 11, 2026
9012362
docs(prd-595): record the machinefall walk against the split core
jonit-dev Oct 11, 2026
ff380ef
refactor(terrain): share starter kit bake implementation
jonit-dev Oct 11, 2026
8dd07ea
refactor(terrain): share starter world loading mechanism (PRD-590 Par…
jonit-dev Oct 11, 2026
896b212
refactor(terrain): parameterize kit scene and regression specs (PRD-5…
jonit-dev Oct 11, 2026
c4b6b1b
test(terrain): separate example specs and guard package imports (PRD-…
jonit-dev Oct 11, 2026
42f80b4
docs(terrain): record dedup savings and remaining GPU gate (PRD-590 P…
jonit-dev Oct 11, 2026
4328136
test(terrain): forest walk playtest on the stock starter via the real…
jonit-dev Oct 11, 2026
099f1c2
test: register terrain temporary directories for cleanup
jonit-dev Oct 11, 2026
54b0b1c
fix(terrain): select editable starter recipes from requests
jonit-dev Oct 11, 2026
cac1a78
fix(core): report rejected scene loads through launch failures
jonit-dev Oct 11, 2026
3cc2a87
fix(terrain): generate worlds under the configured asset source
jonit-dev Oct 11, 2026
e53a173
fix(assets): publish cooked terrain worlds without another encode
jonit-dev Oct 11, 2026
c47aea4
docs(prd-584): record production forest hardening and web result
jonit-dev Oct 11, 2026
e7d3d47
fix(assets): preserve authored terrain maps and link the package surface
jonit-dev Oct 11, 2026
6a564ea
feat(core): apply package terrain surfaces to loaded world GLBs
jonit-dev Oct 11, 2026
e02e0d1
fix(terrain): apply authored surfaces in the generated world load sni…
jonit-dev Oct 11, 2026
efc98fc
fix(core): preserve model LOD associations across glTF scenes
jonit-dev Oct 11, 2026
b15418b
fix(terrain): hoist the printed load snippet imports in the forest pl…
jonit-dev Oct 11, 2026
bf5604f
docs(strata): index the shared starter kit fixture
jonit-dev Oct 11, 2026
1e3987f
docs(prd-590): record blocked starter readiness diagnosis
jonit-dev Oct 11, 2026
fc78a02
refactor(terrain): split the editor into strict TypeScript modules
jonit-dev Oct 11, 2026
4b36c1d
refactor(terrain): move editor picking and landform transforms into t…
jonit-dev Oct 11, 2026
bb71b05
fix(terrain): bound editor routes and return slim errors
jonit-dev Oct 11, 2026
6ce7ff5
feat(terrain): deliver pinned starter assets outside the npm tarball
jonit-dev Oct 11, 2026
43ad67b
fix(core): settle the world prewarm gate when every asked key is alre…
jonit-dev Oct 11, 2026
e58063c
feat(terrain): keyboard editor tools, one live region and the cook ex…
jonit-dev Oct 12, 2026
2d175ff
test(core): prove shipped terrain shim lists its tools
jonit-dev Oct 11, 2026
6c8b62f
test(terrain): measure cold forest tool handoff to vanilla GLTFLoader
jonit-dev Oct 11, 2026
d1ef4af
docs(terrain): record forest recall ownership blocker after two failures
jonit-dev Oct 11, 2026
caab6b5
test(core): prove TRAA velocity consumers keep the desktop scale floor
jonit-dev Oct 12, 2026
e3a49e8
test(core): document slice budget and prove observer disposal is idem…
jonit-dev Oct 12, 2026
b504cf2
fix(terrain): transfer evaluated height normal and splat buffers from…
jonit-dev Oct 12, 2026
37f33e3
feat(capabilities): rank cookTerrainWorld first for a forest-world re…
jonit-dev Oct 12, 2026
56c4b29
docs(prd-589): record the archive-delivered forest kit run
jonit-dev Oct 12, 2026
ac3c7d9
test(native): register two-cell WorldCells proxy streaming (PRD-594 A…
jonit-dev Oct 12, 2026
ae75488
docs(prd): reuse compressed texture conformance for PRD-594 AC-2
jonit-dev Oct 12, 2026
744329a
test(native): validate virtual-shadow first-frame submission (PRD-594…
jonit-dev Oct 12, 2026
1648993
fix(terrain): Enter finishes a pending spline in the editor viewport …
jonit-dev Oct 12, 2026
6cce451
ci(core): check generated Three.js patches before build publication
jonit-dev Oct 12, 2026
7cab5f7
docs(prd-588): tick AC-6, the editor export runs cookTerrainWorld
jonit-dev Oct 12, 2026
d02144e
fix(terrain): retain rapid editor strokes through the save queue (PRD…
jonit-dev Oct 12, 2026
1b650cf
fix(terrain): show refused edits with retry and discard (PRD-587 AC-2)
jonit-dev Oct 12, 2026
67156cc
fix(terrain): restart a terminated editor worker on the next edit (PR…
jonit-dev Oct 12, 2026
d04f661
test(preview): select a brush tool before the radius slider steps (PR…
jonit-dev Oct 12, 2026
d1f9d13
test(preview): point the moved durability spec at its new relative pa…
jonit-dev Oct 12, 2026
8fd2fcd
docs(prd-590): tick AC-2, five kits pass on one KitScene
jonit-dev Oct 12, 2026
b202ca2
docs(prd-590): five kits pass; PRD done
jonit-dev Oct 12, 2026
575af56
docs(prd-584): record black-fir diagnosis, not a regression since 3b3…
jonit-dev Oct 12, 2026
efc7110
docs(prd): add the look gate to the Strata hardening EPIC
jonit-dev Oct 12, 2026
5f6c439
docs(prd-590): point the moved PRD at its epic README
jonit-dev Oct 12, 2026
b5aa0d7
fix(conformance): budget for WorldCells proxy admission
jonit-dev Oct 12, 2026
5d04a07
docs(prd-594): tick AC-1, AC-2 and AC-3, conformance passes on web an…
jonit-dev Oct 12, 2026
3d2e0ff
fix(assets): keep quantized species normals through the terrain world…
jonit-dev Oct 12, 2026
eb588f5
style: apply Biome import order and JSON format to four epic files
jonit-dev Oct 12, 2026
19a2fb3
test(scaffold): pin the terrain MCP server into scaffold hashes and M…
jonit-dev Oct 12, 2026
ce9b317
docs(prd-584): record the forest kit frame p95 as partial AC-4 evidence
jonit-dev Oct 12, 2026
16b0738
fix(strata): repair editor, sky and authored proof lanes; run every s…
jonit-dev Oct 12, 2026
ed8c812
fix(strata): editor cancel scenario runs mid-build; PRD-587 AC-4 green
jonit-dev Oct 12, 2026
bd5f3af
fix(terrain): range sliders keep fractional defaults; refresh starter…
jonit-dev Oct 12, 2026
1c6c4f9
docs(prd-589): record the refreshed starter archive hash
jonit-dev Oct 12, 2026
e7cf436
fix(core): walk each shared node once when warmup looks for a reflector
jonit-dev Oct 12, 2026
346fade
test(core): count reflector-walk calls without the comma operator
jonit-dev Oct 12, 2026
ed26ec7
fix(terrain): compress the forest kit's near-horizon sky so it stops …
jonit-dev Oct 12, 2026
0d16b47
fix(terrain): give the forest kit lake a teal body and a soft shoreline
jonit-dev Oct 12, 2026
5505bf6
refactor(strata-preview): draw editor props through the streamed path…
jonit-dev Oct 12, 2026
c123479
perf(terrain): skip the bake's cache work and varargs hypot, bytes un…
jonit-dev Oct 12, 2026
fcd63a5
test(strata-preview): prove editor persistence, 409 recovery, keyboar…
jonit-dev Oct 12, 2026
f1f1b3c
docs(prd-593): correct the upload-lane hunk claim and record the guar…
jonit-dev Oct 12, 2026
2ff7902
docs(prd-585): record the pinned-scale GPU cost attribution
jonit-dev Oct 12, 2026
0b91738
refactor(terrain): move editor selection and picking mechanics into t…
jonit-dev Oct 12, 2026
0659079
refactor(terrain): one static-world GLB encoder, delete the browser e…
jonit-dev Oct 12, 2026
8a228dd
docs(prd-585): record the rejected weight-gated ground fetch experiment
jonit-dev Oct 12, 2026
e545805
perf(assets): speed up the terrain cook 13% with byte-identical output
jonit-dev Oct 12, 2026
54b26e9
fix(capabilities): restore generated files the pre-commit hook regene…
jonit-dev Oct 12, 2026
ecc7810
docs(prd-583): name the specs that prove the package half of the laye…
jonit-dev Oct 12, 2026
e906147
perf(assets): cut the forest bake to about 1.4 s by deferring heavy m…
jonit-dev Oct 12, 2026
f0e4f02
docs(prd-592): AC-5 met at 30.5% with identical bytes, PRD moves to done
jonit-dev Oct 12, 2026
421dafe
fix(preview): remove the tundra terrain cut-out wedge and give rocks …
jonit-dev Oct 12, 2026
4f1b5ed
test(core): match the generated-patch spec to the 33 pinned compat pairs
jonit-dev Oct 12, 2026
9eb7938
fix(preview): fade the distant coastal wrack band so the beach stops …
jonit-dev Oct 12, 2026
a541bd6
fix(coastal): remove the ocean seam and rectangle, add depth gradient…
jonit-dev Oct 12, 2026
7ff8e6a
refactor(preview): gate spawn on WorldCells.whenSpawnReady, delete th…
jonit-dev Oct 12, 2026
f8e9933
feat(preview): smooth noise-displaced stones with a Poly Haven boulde…
jonit-dev Oct 13, 2026
f491ecf
fix(coastal): remove the lit rim at the base of beach stones
jonit-dev Oct 13, 2026
302c48f
perf(preview): bake scatter into per-world placement tables, enter no…
jonit-dev Oct 13, 2026
266671a
docs(prd-591): reopen AC-3, the enterMs assertion fails in the full s…
jonit-dev Oct 13, 2026
9735adf
perf(preview): build the coastal water mesh in load, not enter
jonit-dev Oct 13, 2026
b9e48b6
docs(prd-589): record the quiet-host forest kit rerun, AC-3 stays ope…
jonit-dev Oct 13, 2026
159d1ca
Merge develop into strata hardening and retain both terrain and Three…
jonit-dev Oct 13, 2026
3314a67
test(core): verify bounded compressed uploads and published kit assets
jonit-dev Oct 13, 2026
bcb916b
docs(prd-589): complete published-kit delivery and archive the PRD
jonit-dev Oct 13, 2026
60e1608
fix(coastal): cast the sun-facing stone surface at sand contacts
jonit-dev Oct 13, 2026
9f0f598
docs(prd-580): track tree and ground vegetation art arms
jonit-dev Oct 13, 2026
4dd84d0
docs(prd-591): record full terrain runtime budget failures
jonit-dev Oct 13, 2026
8b0c3cf
docs(prd-591): record measured startup function attribution
jonit-dev Oct 13, 2026
16ec099
Merge branch 'develop' into epic/strata-terrain-hardening
jonit-dev Oct 13, 2026
f5fc419
perf(three): reuse unchanged scheduled instance history
jonit-dev Oct 13, 2026
5b37bc7
docs(strata): record rejected tree crowns and capture admission cause
jonit-dev Oct 13, 2026
17e6dec
feat(core): reuse explicitly named terrain splat maps
jonit-dev Oct 13, 2026
953ec6d
feat(strata): export real splat inputs through existing asset stages
jonit-dev Oct 13, 2026
dede905
feat(core): retain ordered terrain blending with game samples
jonit-dev Oct 13, 2026
1b7e2ce
feat(strata): vary procedural ground plants and join wind seams
jonit-dev Oct 13, 2026
ce7f08b
fix(strata): narrow and bow procedural grass blades
jonit-dev Oct 13, 2026
f0df046
docs(strata): record accepted ground vegetation comparisons
jonit-dev Oct 13, 2026
b9908d8
refactor(strata): use engine ordered terrain blend
jonit-dev Oct 13, 2026
33428ea
fix(checks): refresh scaffold hashes and preserve donor schema keys
jonit-dev Oct 13, 2026
81f66dd
Merge remote-tracking branch 'origin/epic/strata-terrain-hardening' i…
jonit-dev Oct 13, 2026
e57319d
chore(scaffold): record pinned asset MCP 0.12 tool surface
jonit-dev Oct 13, 2026
e2e5cf0
fix(strata): derive terrain and stone bands from world elevations
jonit-dev Oct 13, 2026
11175ac
Observe completed compressed prop texture replacements
jonit-dev Oct 13, 2026
9f95c4d
Exercise custom terrain sampling and material callbacks on GPU
jonit-dev Oct 13, 2026
f56d20d
docs(strata): record current native callback proof and isolated GPU r…
jonit-dev Oct 13, 2026
a0aa38b
docs(strata): retain timing-sensitive terrain and native temporal res…
jonit-dev Oct 13, 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
  •  
  •  
  •  
49 changes: 48 additions & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -659,6 +659,46 @@ jobs:
- uses: ./.github/actions/playwright-chromium
- run: pnpm test:playtest:ci

strata:
needs: [scope, build-artifacts]
if: ${{ needs.scope.outputs.selection == 'full' && fromJSON(needs.scope.outputs.plan).jobs.strata.required }}
runs-on: ${{ (github.event.pull_request.head.repo.fork || !vars.TN_RUNNER) && 'ubuntu-24.04' || vars.TN_RUNNER }}
timeout-minutes: 60
env:
TN_CI_SHA: ${{ needs.scope.outputs.candidate_sha }}
steps:
- uses: actions/checkout@v7
with:
ref: ${{ needs.scope.outputs.candidate_sha || github.sha }}
- uses: ./.github/actions/pnpm
- uses: actions/setup-node@v7
with:
node-version: 20
cache: pnpm
cache-dependency-path: |
pnpm-lock.yaml
packages/create-threenative/templates/*/package.json
- run: pnpm install --frozen-lockfile
- uses: ./.github/actions/workspace-dist
with:
shared-artifact: workspace-packages
save-bundles: "false"
- uses: ./.github/actions/playwright-chromium
- name: Generate the terrain example's ignored world source
run: pnpm --filter strata-terrain-preview bake
- name: Run strata web playtest
run: sh scripts/xvfb.sh pnpm --filter strata-terrain-preview test:terrain:web
- name: Run strata consumer verification
run: pnpm --filter strata-terrain-preview test:consumer
- name: Run strata editor verification
run: sh scripts/xvfb.sh pnpm --filter strata-terrain-preview test:terrain:editor
- name: Run strata authored-world reproduction
run: sh scripts/xvfb.sh pnpm --filter strata-terrain-preview test:terrain:authored
- name: Run strata custom-art swap
run: sh scripts/xvfb.sh pnpm --filter strata-terrain-preview test:terrain:custom
- name: Run strata static-world export
run: sh scripts/xvfb.sh pnpm --filter strata-terrain-preview test:terrain:export

golden-path-template:
needs: [scope, build-artifacts]
if: ${{ (needs.scope.outputs.selection == 'full' || needs.scope.outputs.selection == 'template') }}
Expand Down Expand Up @@ -1008,6 +1048,12 @@ jobs:
node-version: 20
cache: pnpm
- run: pnpm install --frozen-lockfile
# Check before restoring or publishing workspace builds, including the develop warm lane.
# The pinned upstream archive is downloaded fresh; cache: pnpm does not cache its npm build.
# Bash time reports the download + own-build wall cost and preserves failures (PRD-593 AC-2).
- name: Verify the generated Three.js patch has not drifted
shell: bash
run: time pnpm --filter @threenative/core patch:generate --check
- uses: ./.github/actions/workspace-dist
- run: pnpm --filter abyss-framework build
- name: Enforce entity registry boundaries
Expand Down Expand Up @@ -1241,7 +1287,7 @@ jobs:
# The only required context after protected-develop cutover. Explicit exemptions are not passes.
# Legacy main contexts stay in place until the owner changes protection after full qualification.
ci-required:
needs: [scope, integration, native-platforms, typecheck, lint, test, test-unit, test-native, test-browser, test-playtest, golden-path-template, template-nonvisual, golden-path, benchmark, build, build-artifacts, budgets, performance-contracts, supply-chain]
needs: [scope, integration, native-platforms, typecheck, lint, test, test-unit, test-native, test-browser, test-playtest, strata, golden-path-template, template-nonvisual, golden-path, benchmark, build, build-artifacts, budgets, performance-contracts, supply-chain]
if: ${{ always() && !github.event.pull_request.draft }}
runs-on: ${{ (github.event.pull_request.head.repo.fork || !vars.TN_RUNNER_LIGHT) && 'ubuntu-24.04' || vars.TN_RUNNER_LIGHT }}
timeout-minutes: 5
Expand Down Expand Up @@ -1295,6 +1341,7 @@ jobs:
- test-native
- test-browser
- test-playtest
- strata
- golden-path-template
- template-nonvisual
- golden-path
Expand Down
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -201,10 +201,15 @@ examples/auto-lod/public/

# Generated by prepack from packages/core/patches (the only tracked copy).
packages/create-threenative/template-assets/patches/
# scripts/stage-terrain-kits.mjs writes these kits from packages/terrain/starter, the only tracked copy.
/packages/create-threenative/template-assets/terrain/

# Licensed (non-redistributable) local art for review; never committed
examples/strata-terrain-preview/local-assets/
examples/native-css-hud/corpus/out/
examples/native-css-hud/corpus/out-interaction/
examples/native-css-hud/corpus/out-desktop/
examples/native-css-hud/bench/out/

# Forest kit headless bake output (authored recipe and assets remain tracked).
/packages/terrain/starter/forest/world/
1 change: 1 addition & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ One source, two runtimes: browser WebGPU and an owned C++ host for desktop/Andro
| --- | --- |
| Anything that **decides how it looks** — materials, shaders, TSL, lights, tonemapping, post, framing — and any preset or default picking one | `templates/*/src/render/`, as generated user source |
| The **mechanism** that puts it on screen — pooling, lifetime, billboarding, instancing, dispatch, culling — with every appearance parameter from the game; plumbing every game repeats | `packages/core/src/` |
| Optional terrain authoring and terrain-only editor companions, within the CHARTER allowance | `packages/terrain/`; appearance remains generated game source |
| Physics or navigation (WASM dep) · React HUD/menu bindings · C++ host, platform bring-up, native systems · scenario harness and assertions | `packages/physics/` · `ui/` · `runtime-native/` · `playtest/` |
| Gameplay, never in a package · proof that any of it works | an example or template · `<package>/__tests__/*.spec.ts` **and** a playtest scenario |

Expand Down
12 changes: 12 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,18 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

### Breaking

- `@threenative/terrain/export` removes `exportWorldGLB`. Prepare the browser scene with
`prepareWorldGLTF`, then encode it in Node with `cookTerrainWorld({ preparedWorld: prepared.json })`
from `@threenative/assets`; the editor already uses this shared cook.

- `@threenative/assets`'s `cookTerrainWorld` declaration adds a prepared-world JSON overload
for the terrain editor's portable GLB export. Existing state/species/out calls remain valid;
the new overload embeds the game's frozen scene without instancing or filesystem output.

- `@threenative/terrain`'s `makeExport` declaration adds a `"project"` overload accepting
a null terrain state, so recipes can be exported before the first evaluation. Existing
calls remain valid; non-project exports still require an evaluated state.

- The unreleased terrain editor's `mountTerrainEditor` view factory receives
`(host, controller)`. Its `IEditorView` implements `setDocument(document, revision)`
so metadata edits can update the scene without dispatching terrain evaluation;
Expand Down
1 change: 1 addition & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ One source, two runtimes: browser WebGPU and an owned C++ host for desktop/Andro
| --- | --- |
| Anything that **decides how it looks** — materials, shaders, TSL, lights, tonemapping, post, framing — and any preset or default picking one | `templates/*/src/render/`, as generated user source |
| The **mechanism** that puts it on screen — pooling, lifetime, billboarding, instancing, dispatch, culling — with every appearance parameter from the game; plumbing every game repeats | `packages/core/src/` |
| Optional terrain authoring and terrain-only editor companions, within the CHARTER allowance | `packages/terrain/`; appearance remains generated game source |
| Physics or navigation (WASM dep) · React HUD/menu bindings · C++ host, platform bring-up, native systems · scenario harness and assertions | `packages/physics/` · `ui/` · `runtime-native/` · `playtest/` |
| Gameplay, never in a package · proof that any of it works | an example or template · `<package>/__tests__/*.spec.ts` **and** a playtest scenario |

Expand Down
5 changes: 5 additions & 0 deletions biome.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
"packages/metahuman/wasm/**",
"artifacts/**",
"examples/strata-terrain-preview/src/world/*.json",
"examples/strata-terrain-preview/assets/world/*.json",
"examples/strata-terrain-preview/local-assets/**",
"build/**",
"release-native/**",
Expand Down Expand Up @@ -89,6 +90,10 @@
}
},
"overrides": [
{
"include": ["examples/procedural-animals/src/render/donor/core/motion/quadruped.js"],
"javascript": { "formatter": { "quoteProperties": "preserve" } }
},
{
"include": ["**/*.ts", "**/*.tsx"],
"linter": { "rules": { "style": { "useNamingConvention": "off" } } }
Expand Down
Loading