Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
ddd80fb
docs(vq07): begin bounded volumetric fog implementation
jonit-dev Oct 2, 2026
8983a49
fix(render): retain ownership of direct environment output graphs
jonit-dev Oct 2, 2026
2314687
fix(render): distinguish borrowed pass textures from owned RTTs
jonit-dev Oct 2, 2026
02f1be5
fix(render): keep superseded chains from clearing or reinstalling output
jonit-dev Oct 2, 2026
1bb878e
feat(vq07): add opt-in bounded fog and hosted runtime capture fixture
jonit-dev Oct 2, 2026
76db7cc
test(vq07): preserve baseline screenshot and identify failed HTTP res…
jonit-dev Oct 2, 2026
4f8fe47
fix(vq07): avoid the confirmed missing favicon request
jonit-dev Oct 2, 2026
a5ff6ff
docs(vq07): preserve actual fog variant screenshots and provenance
jonit-dev Oct 2, 2026
9b2bcd7
fix(render): identify output installations with ownership receipts
jonit-dev Oct 2, 2026
beedf1e
test(vq07): isolate scattering and exercise graph teardown
jonit-dev Oct 2, 2026
b10771e
merge develop into VQ07 and refresh combined scaffold hashes
jonit-dev Oct 2, 2026
001b934
test(vq07): calibrate black controls without weakening capture guards
jonit-dev Oct 2, 2026
1c9534f
test(vq07): retain scattering proof and exercise four owned fog graphs
jonit-dev Oct 2, 2026
0d9c1c5
test(vq07): qualify live target resize and settled texture ownership
jonit-dev Oct 2, 2026
47464cc
fix(vq07): observe completed renders under the game-owned loop
jonit-dev Oct 2, 2026
1505e01
test(vq07): wait on observed render stability before captures
jonit-dev Oct 2, 2026
bc628ac
test(vq07): retain resize proof and qualify the native host route
jonit-dev Oct 2, 2026
1f73e55
test(vq07): render each owned graph before lifecycle replacement
jonit-dev Oct 2, 2026
08f4fe5
docs(vq07): preserve native fog progress and resize failure
jonit-dev Oct 2, 2026
7f710b7
test(vq07): isolate native resize and enforce authored pixel guard
jonit-dev Oct 2, 2026
ff59e24
fix(native): accept usable suboptimal surface acquisitions
jonit-dev Oct 2, 2026
b0727a4
fix(native): rebuild the swapchain after an outdated surface acquisition
jonit-dev Oct 2, 2026
640c103
fix(vq07): preserve fog and native presentation across transitions
jonit-dev Oct 2, 2026
9d3e109
Merge develop and retain qualified volumetric fog proof
jonit-dev Oct 2, 2026
85d826d
Merge origin/develop into feat/vq07-volumetric-fog
jonit-dev Oct 3, 2026
fe1b1f6
ci: fold integration-volumetric-fog.yml into integration.yml (one wor…
jonit-dev Oct 3, 2026
78bba05
Merge remote-tracking branch 'origin/develop' into HEAD
jonit-dev Oct 3, 2026
659c7dd
Merge branch 'develop' into feat/vq07-volumetric-fog
jonit-dev Oct 3, 2026
37ba68c
Merge branch 'develop' into feat/vq07-volumetric-fog
jonit-dev Oct 3, 2026
f781733
Merge branch 'develop' into feat/vq07-volumetric-fog
jonit-dev Oct 3, 2026
57bc0e5
refactor(create-threenative): split starter fog into four render modules
jonit-dev Oct 3, 2026
8aee7e9
Merge branch 'develop' into feat/vq07-volumetric-fog
jonit-dev Oct 3, 2026
21222ef
fix(create-threenative): make the shipped fog reachable instead of de…
jonit-dev Oct 3, 2026
c364558
fix(create-threenative): put the starter's mist where the look belong…
jonit-dev Oct 3, 2026
38da46b
fix(ci): use ERE groups in the fog lane so grep -E matches
jonit-dev Oct 3, 2026
a3e4e34
fix(create-threenative): keep a fog the game authored under the live …
jonit-dev Oct 3, 2026
c866f64
docs(prd): record the local 29-arm browser sweep and the two defects …
jonit-dev Oct 3, 2026
3c5730f
Merge remote-tracking branch 'origin/develop' into feat/vq07-volumetr…
jonit-dev Oct 3, 2026
3c8d19d
fix(examples): declare why the fog calibration card stays hidden
jonit-dev Oct 3, 2026
a6a155e
chore(native): re-measure the coverage record for this branch's nativ…
jonit-dev Oct 3, 2026
bde500a
fix(vq07): prove the fog arms instead of asserting what they requested
jonit-dev Oct 3, 2026
b339f89
fix(vq07): measure the overlapping bound by added scattering, not a f…
jonit-dev Oct 3, 2026
432dd70
fix(vq07): keep the pinned overlap gate and the coverage it measures
jonit-dev Oct 3, 2026
4e48744
docs(prd): record the 29-arm requalification of 432dd7043
jonit-dev Oct 3, 2026
6309276
fix(vq07): reject fog cost-arm sample counts the meter never measured
jonit-dev Oct 3, 2026
b93944e
style(vq07): follow the type alias naming convention
jonit-dev Oct 3, 2026
b655f43
docs(prd): verify VQ-07 volumetric fog at b93944e60 and archive it
jonit-dev Oct 3, 2026
8431684
Merge remote-tracking branch 'origin/develop' into feat/vq07-volumetr…
jonit-dev Oct 3, 2026
89c4e8a
docs(prd): record the develop reconciliation and its local requalific…
jonit-dev Oct 3, 2026
6701a80
Merge remote-tracking branch 'origin/develop' into feat/vq07-volumetr…
jonit-dev Oct 3, 2026
52d0b5b
docs(prd): record the second reconciliation and its fresh browser req…
jonit-dev Oct 3, 2026
e87faa6
Merge remote-tracking branch 'origin/develop' into feat/vq07-volumetr…
jonit-dev Oct 3, 2026
39fe208
fix(rain): preserve software quality defaults and explicit tier choices
jonit-dev Oct 4, 2026
edd5e1d
test(rain): refresh measured scaffold identity after quality fix
jonit-dev Oct 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
112 changes: 112 additions & 0 deletions .github/workflows/integration.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ jobs:
outputs:
csg: ${{ steps.filter.outputs.csg }}
decals: ${{ steps.filter.outputs.decals }}
fog: ${{ steps.filter.outputs.fog }}
fluid-particles: ${{ steps.filter.outputs.fluid-particles }}
ik: ${{ steps.filter.outputs.ik }}
tone: ${{ steps.filter.outputs.tone }}
Expand All @@ -61,6 +62,7 @@ jobs:
csg ^examples/integrations/csg/.*$
decals ^packages/playtest/.*$|^packages/create-threenative/templates/shooter/src/render/decals\.ts$|^packages/create-threenative/templates/shooter/src/scenes/Play\.ts$|^packages/create-threenative/__tests__/shooter-decals[^/]*\.spec\.ts$|^packages/create-threenative/__tests__/fixtures/bounded-decals/.*$|^packages/runtime-native/.*$|^scripts/xvfb\.sh$|^\.github/actions/workspace-dist/.*$|^\.github/actions/pnpm/.*$|^\.github/actions/playwright-chromium/.*$|^pnpm-lock\.yaml$
fluid-particles ^packages/core/src/fluid-particles\.ts$|^packages/core/src/gpu-readback\.ts$|^packages/core/__tests__/fluid-particles\.spec\.ts$|^packages/core/patches/.*$|^packages/playtest/.*$|^examples/prd476-fluid-particles/.*$|^scripts/verify-fluid-collision\.ts$|^scripts/verify-fluid-consumers\.ts$|^scripts/verify-fluid-collision-native\.ts$|^scripts/__tests__/fluid-collision-native-proof\.spec\.ts$|^packages/runtime-native/.*$|^\.github/actions/workspace-dist/.*$|^scripts/fluid-collision-proof\.ts$|^scripts/__tests__/fluid-collision-proof\.spec\.ts$|^scripts/__tests__/fluid-collision-view\.spec\.ts$|^pnpm-lock\.yaml$|^\.github/actions/pnpm/.*$|^\.github/actions/playwright-chromium/.*$|^scripts/xvfb\.sh$|^scripts/workspace-packages\.ts$
fog ^packages/create-threenative/templates/starter/src/render/volumetricFog[A-Za-z]*\.ts$|^packages/create-threenative/templates/starter/src/render/postprocessing\.ts$|^packages/create-threenative/templates/starter/src/scenes/Play\.ts$|^packages/create-threenative/template-assets/worldEnvironment\.ts$|^packages/create-threenative/__tests__/vq-(volumetric-fog|fog-fixture)\.spec\.ts$|^packages/core/src/renderer\.ts$|^packages/core/src/render/chain\.ts$|^examples/abyss-framework/vq-fog/.*$|^examples/abyss-framework/playtests/vq-volumetric-fog\.playtest\.json$|^scripts/verify-volumetric-fog\.ts$|^scripts/__tests__/(verify-volumetric-fog|vq-fog-native-proof)\.spec\.ts$|^packages/runtime-native/include/mystral/webgpu_compat\.h$|^packages/runtime-native/src/webgpu/bindings_presentation\.cpp$|^packages/runtime-native/tests/surface_texture_status_test\.cpp$|^packages/runtime-native/tests/canvas_presentation_test\.cpp$
ik ^examples/integrations/ik/.*$
tone ^scripts/xvfb\.sh$|^packages/playtest/.*$|^examples/abyss-framework/src/render/toneCalibration\.ts$|^examples/abyss-framework/src/tone-main\.ts$|^examples/abyss-framework/tone\.html$|^examples/abyss-framework/tone\.vite\.config\.ts$|^examples/abyss-framework/playtests/tone\.playtest\.json$|^examples/abyss-framework/package\.json$|^scripts/verify-tone-exposure\.ts$|^scripts/tone-capture-proof\.ts$|^scripts/__tests__/tone-capture-proof\.spec\.ts$|^scripts/non-visual-scenarios\.mjs$|^package\.json$|^pnpm-lock\.yaml$|^\.github/actions/pnpm/.*$|^\.github/actions/playwright-chromium/.*$|^packages/create-threenative/(template-assets|templates/[^/]+/src/render)/(autoExposure|exposureGraph|exposureReadback|exposureSettings|worldEnvironment)\.ts$
vegetation ^examples/integrations/vegetation/.*$
Expand Down Expand Up @@ -252,6 +254,116 @@ jobs:
path: artifacts/tone-exposure
if-no-files-found: error

fog:
name: fog capture
if: ${{ needs.paths.outputs.fog == 'true' && !github.event.pull_request.draft }}
needs: paths
runs-on: ${{ (github.event.pull_request.head.repo.fork || !vars.TN_RUNNER) && 'ubuntu-24.04' || vars.TN_RUNNER }}
timeout-minutes: 20
steps:
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262
with:
persist-credentials: false
ref: ${{ github.event.pull_request.head.sha || github.sha }}
- uses: ./.github/actions/pnpm
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020
with:
node-version: '22'
cache: pnpm
- run: pnpm install --frozen-lockfile
- uses: ./.github/actions/playwright-chromium
- run: pnpm --filter @threenative/playtest build
- run: pnpm --filter abyss-framework exec vite build --config vq-fog/vite.config.ts
- run: node --import tsx scripts/verify-volumetric-fog.ts
- uses: actions/upload-artifact@v7
if: always()
with:
name: volumetric-fog-${{ github.event.pull_request.head.sha || github.sha }}
path: artifacts/volumetric-fog/
retention-days: 30
if-no-files-found: error

fog-native:
name: Linux native fog correctness
needs: [fog]
# Reuse the proven native-platforms / native-assets ARM QuickJS route without changing defaults.
runs-on: ubuntu-24.04-arm
timeout-minutes: 60
env:
CMAKE_BUILD_PARALLEL_LEVEL: '2'
TN_PLAYTEST_ALLOW_SOFTWARE: '1'
TN_PLAYTEST_NATIVE_SCREENSHOT_TIMEOUT_MS: '30000'
steps:
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262
with:
persist-credentials: false
ref: ${{ github.event.pull_request.head.sha || github.sha }}
- uses: ./.github/actions/pnpm
- uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020
with:
node-version: '22'
cache: pnpm
- uses: actions/setup-python@v7
with:
python-version: '3.12'
- run: pnpm install --frozen-lockfile
- name: Build this source's public JavaScript packages
uses: ./.github/actions/workspace-dist
with:
save-bundles: 'false'
pack-archives: 'false'
- name: Verify native preflight and capture rejection controls
run: pnpm exec vitest run scripts/__tests__/vq-fog-native-proof.spec.ts --maxWorkers=1
- name: Restore checksum-provisioned native dependencies
uses: actions/cache/restore@v4
with:
path: packages/runtime-native/third_party
key: native-third-party-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('packages/runtime-native/scripts/download-deps.mjs', 'packages/runtime-native/scripts/package-android.mjs') }}
- name: Install the existing native lane's system prerequisites
run: >-
sudo apt-get update && sudo apt-get install -y
libasound2-dev libcurl4-openssl-dev libfontconfig1-dev libfreetype6-dev
libpulse-dev libudev-dev libx11-dev libxext-dev libxrandr-dev
libxcursor-dev libxi-dev libxfixes-dev libxss-dev libxkbcommon-dev
libgtk-3-dev libwebkit2gtk-4.1-dev libxcomposite-dev xcompmgr
libvulkan1 mesa-vulkan-drivers vulkan-tools xvfb zlib1g-dev
- name: Build the ordinary ARM desktop host
run: pnpm --filter @threenative/runtime-native native:build
- name: Verify the compiled surface acquisition status contract
run: |
cmake --build packages/runtime-native/build/tn-linux --target threenative-surface-texture-status-test --parallel 2
packages/runtime-native/build/tn-linux/threenative-surface-texture-status-test
- name: Verify rendered presentation destination pixels
run: |
cmake --build packages/runtime-native/build/tn-linux --target threenative-canvas-presentation-test --parallel 2
packages/runtime-native/build/tn-linux/threenative-canvas-presentation-test
- name: Isolate native resize with no fog allocation
id: resize-control
# Preserve the original fog sequence even when this diagnostic reproduces the abort.
# The final step below still fails the job if this control fails.
continue-on-error: true
env:
VQ_FOG_RESIZE_CONTROL: '1'
THREENATIVE_RUNTIME_BINARY: ${{ github.workspace }}/packages/runtime-native/build/tn-linux/mystral
run: node --import tsx scripts/verify-volumetric-fog.ts
- name: Run the same authored fog and pixel gates on the native host
env:
THREENATIVE_RUNTIME_BINARY: ${{ github.workspace }}/packages/runtime-native/build/tn-linux/mystral
run: node --import tsx scripts/verify-volumetric-fog.ts
- name: Require the no-fog resize control
if: always() && steps.resize-control.outcome != 'success'
run: exit 1
- name: Retain native screenshots, host console and executable identities
if: always()
uses: actions/upload-artifact@v7
with:
name: volumetric-fog-native-${{ github.event.pull_request.head.sha || github.sha }}
path: |
artifacts/volumetric-fog-native/
artifacts/volumetric-fog-native-resize-control/
retention-days: 30
if-no-files-found: warn

capture:
name: capture
if: ${{ !github.event.pull_request.draft && needs.paths.outputs.world-capture == 'true' }}
Expand Down
Loading
Loading