Skip to content

Commit a597b0e

Browse files
authored
fix(live): GLBs with undeployed textures are skipped, not failed — closes #59 (#87)
* fix(live): GLBs with undeployed textures are skipped, not failed (#59) Deep-dive result on the Genesis Plaza delta: the manifest was already name-identical to prod's (1160/1160, both omit the broken GLB) — the whole remaining gap was exit-code classification. dispenser_pride2026.glb references PrideBucketHat.png, which the deployment never included; prod skips such GLBs (no manifest entry, exit 0), abgen counted the omission as a conversion failure (exit 12). deps_digest_for_glb now marks missing-dep failures with a typed DepNotDeployed error; compute_deps_digests classifies those hashes into a separate set, and the bundle loop skips them (warn, no manifest entry, no exit-code contribution) while every other digest failure still fails the conversion. The two thumbnail extras from the issue were already fixed by the metadata-only filter; the stale bucket objects that suggested otherwise were leftovers from a pre-filter image. * release: v0.17.1 version bump * ci: gate the nix lanes on what the diff can affect; record v0.17.1 hashes Windows-gate pattern extended to the nix lanes: a nix-gate job classifies the PR diff (crate / lambda / lint) and each lane runs only when its class is touched — docs- and CI-only PRs skip every nix compile, lambda- only PRs skip the workspace nextest lanes. Pushes to main and schedules always run everything. Manifests recorded for buildId 6ac5ed8d1a10 (the v0.17.1 tree; run 32419782059). * chore: comment strip — narration and provenance out, invariants stay Aggressive pass over the 218 surviving comment lines: test narration, refactor provenance, perf history and design-philosophy prose cut (-58 lines); external/cross-file invariants kept (parity contracts, security guards, OOM/ANSI/pipefail gotchas, ISA-floor SIGILL notes, the buildId boundary). Semantics-equality gated per file; fmt re-applied; affected test modules green (96 passed). * chore: record artifact hashes for buildId e48e050ebc29 (post-strip tree)
1 parent 887892a commit a597b0e

21 files changed

Lines changed: 200 additions & 111 deletions

.github/workflows/ci.yml

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,57 +130,109 @@ jobs:
130130
# Image artifacts are produced by the release workflow's build legs,
131131
# which start on the same push in parallel with all of this; publishing
132132
# is what gates on green, not building.
133+
# Windows-gate pattern for the nix lanes: a PR pays only for the lanes
134+
# its diff can affect. Pushes to main and schedules always run everything.
135+
# crate -> workspace tests/build (crate/, template/, roots, nix build wiring)
136+
# lambda -> the lambda test config (also affected by crate/)
137+
# lint -> anything lintable at all (rust/nix/toml sources)
138+
nix-gate:
139+
name: nix gate
140+
runs-on: ubuntu-latest
141+
timeout-minutes: 5
142+
outputs:
143+
run_crate: ${{ steps.decide.outputs.crate }}
144+
run_lambda: ${{ steps.decide.outputs.lambda }}
145+
run_lint: ${{ steps.decide.outputs.lint }}
146+
steps:
147+
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0
148+
with:
149+
fetch-depth: 0
150+
- id: decide
151+
run: |
152+
if [ "${{ github.event_name }}" != "pull_request" ]; then
153+
printf 'crate=true\nlambda=true\nlint=true\n' >> "$GITHUB_OUTPUT"
154+
exit 0
155+
fi
156+
base="${{ github.event.pull_request.base.sha }}"
157+
changed() { ! git diff --quiet "$base"...HEAD -- "$@"; }
158+
crate=false; lambda=false; lint=false
159+
changed 'crate' 'template' 'Cargo.lock' 'Cargo.toml' \
160+
'rust-toolchain.toml' 'nix/build.nix' 'flake.nix' 'flake.lock' \
161+
'.config/nextest.toml' && crate=true
162+
changed 'lambda' && lambda=true
163+
# crate changes reach the lambda tests too (shared workspace).
164+
[ "$crate" = "true" ] && lambda=true
165+
changed '**/*.rs' '**/*.toml' 'nix' 'flake.nix' 'flake.lock' \
166+
'ci/nix-checks.sh' && lint=true
167+
printf 'crate=%s\nlambda=%s\nlint=%s\n' "$crate" "$lambda" "$lint" >> "$GITHUB_OUTPUT"
168+
echo "crate=$crate lambda=$lambda lint=$lint"
169+
133170
nix-ci:
134171
name: ${{ matrix.lane }}
172+
needs: nix-gate
135173
strategy:
136174
fail-fast: false
137175
matrix:
138176
include:
139177
# One workspace-scale compile per lane: nextest's test-target
140178
# build and abgen-all (behind native-smoke) each cost ~10 min on
141179
# 4 cores, so pairing them serialized the verdict. Wall time is
142-
# the slowest single lane.
180+
# the slowest single lane. `gate` names the nix-gate output that
181+
# decides whether the lane runs for this diff.
143182
- lane: x86 nextest
144183
runner: ubuntu-24.04
145184
system: x86_64-linux
146185
deps: .#checks.x86_64-linux.deps
147186
attrs: nextest
187+
gate: run_crate
148188
- lane: x86 build + smoke
149189
runner: ubuntu-24.04
150190
system: x86_64-linux
151191
deps: .#checks.x86_64-linux.deps
152192
attrs: native-smoke
193+
gate: run_crate
153194
- lane: arm nextest
154195
runner: ubuntu-24.04-arm
155196
system: aarch64-linux
156197
deps: .#checks.aarch64-linux.deps
157198
attrs: nextest
199+
gate: run_crate
158200
- lane: arm lambda + smoke
159201
runner: ubuntu-24.04-arm
160202
system: aarch64-linux
161203
deps: .#checks.aarch64-linux.deps
162204
attrs: lambda-tests native-smoke
205+
gate: run_lambda
163206
- lane: arm lints
164207
runner: ubuntu-24.04-arm
165208
system: aarch64-linux
166209
deps: .#checks.aarch64-linux.deps .#checks.aarch64-linux.wasm-deps
167210
attrs: clippy fmt no-node-spawn wasm-check
211+
gate: run_lint
168212
runs-on: ${{ matrix.runner }}
169213
timeout-minutes: 45
170214
steps:
215+
- name: skip notice
216+
if: needs.nix-gate.outputs[matrix.gate] != 'true'
217+
run: echo "diff cannot affect this lane (${{ matrix.gate }}=false); skipping."
171218
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0
219+
if: needs.nix-gate.outputs[matrix.gate] == 'true'
172220
# No standalone nix installer: the composite runs it with the
173221
# extra-conf this job needs; a prior bare install made that conf
174222
# silently a no-op.
175223
- uses: ./.github/actions/nix-store-cache
224+
if: needs.nix-gate.outputs[matrix.gate] == 'true'
176225
- name: deps (dependency closures)
226+
if: needs.nix-gate.outputs[matrix.gate] == 'true'
177227
run: nix build --no-link ${{ matrix.deps }}
178228
# Publish immediately and from any branch: the composite no-ops
179229
# unless the exact key is new, so this fires once per input rotation
180230
# (lanes sharing a key race; first save wins, the rest skip).
181231
- uses: ./.github/actions/nix-store-cache/save
232+
if: needs.nix-gate.outputs[matrix.gate] == 'true'
182233
continue-on-error: true
183234
- name: checks (${{ matrix.attrs }})
235+
if: needs.nix-gate.outputs[matrix.gate] == 'true'
184236
run: bash ci/nix-checks.sh ${{ matrix.system }} ${{ matrix.attrs }}
185237

186238
node-addon:

Cargo.lock

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ exclude = [
1111
]
1212

1313
[workspace.package]
14-
version = "0.17.0"
14+
version = "0.17.1"
1515

1616
# Whole-program LTO and a single codegen unit: the hot paths cross crate
1717
# boundaries (image/gltf decode -> abgen kernels -> lz4 pack), and the
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
43aae8787bc80d6a5ad305635d3887a324cea6df72c9a99dbbbdced383b3a5fe abgen
2-
c5883ccb7168abe4dd6f480dc5fc9c58fefe05c0c7f17ad04707cb72ca23fe18 abgen-host
3-
31a8a58c4b6c6cdb6cbbf4a94d4429a01758ec231ccbcf20f932a388c20e60d6 libabgen.a
4-
d939bae93f4889238b6eda28a6b96ce8f841495de6002bc1953c0d3be4da3f5e libabgen.dylib
1+
bd08c7d4eb17e22e12356ddd217370d4d5c6e0b0851a4eb9fabf519a1c43985d abgen
2+
2145dc0963aeb9ac31c437a1950ec9d8b24547c986d25a5ae82fb223543c3174 abgen-host
3+
41dabe82cf68ea8407f65c116e8ce5fddc9149e9236cd69806781623ac554678 libabgen.a
4+
83b06af5f14104298b5b45e955085d6e0b0ba023c938d52c78ed283f80658ebe libabgen.dylib
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
accbffb9dcbc24a517897f4b2d84ab7e691cdf572891a133be75f72ebad2f748 abgen-host.exe
2-
d1bbbda35d44e2fc578d091fe8499e2f6c082a4c90e8c76e0b5a963c74830a7b abgen.dll
3-
9180279bfaf26415c062be96ebe427209628333228b3bf7fe768460d86610862 abgen.exe
4-
f2a764d3db7f7e2a8a0f40fb121e1ea6a52fb9397d0bafafbbfde2133cbafbc3 libabgen.a
1+
d84230b22fe08e4a23173503c9d7765d256fd1f65d8940025bd398a4e8cd00b5 abgen-host.exe
2+
f6e26105ce6025407f8e89a822486aeff6329bd145748f3da8680341aaddb8c5 abgen.dll
3+
7dfeed412b35d9b7edec57a45a2e93563e5a6c09cbd2716c37c7b75cc5545003 abgen.exe
4+
57a47dbca5f25ea1b3f7de06a8288dec51cde1bf7152960a79203c75e0f02be3 libabgen.a
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
64d3b24b02117062af9f090b1c5f01dc763d53eb371adcb96abbf583905418e5 abgen
2-
54192e167a11b0fc7eb463df0e3f1f34e0ffed03318a27e6cb7fc501fcc787f6 abgen-host
3-
25a2c71ff30c21ead6055114af4de12fd209593b2598effea977a420a3788832 libabgen.a
4-
80b2cbd77c200d7656a6ac87fa54a312b472f9ffecbf0f60d89e906dd39871bb libabgen.so
1+
f8230e8167a2c94b8166c28d04a78a175aa5e51a5f40a8a1c8696b26460678ae abgen
2+
016cfedebc3d22e2d37616235989303029664617998f6e1f4286434c41d92e74 abgen-host
3+
95424e6cce26ff65bfe970949818345aa4ba98cecb3b19f9efbdb55590452a94 libabgen.a
4+
39c7cda12398553290c3083cf12e11405d014abd1a5b0330eb9d6201381ab243 libabgen.so
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
4b80ac6223f50ffc55eb1db25cfc5df98a2df83942ebedda0bbc0ad6f194e4c4 abgen
2-
cbcb3a9707ad2c358d6fbdfc97fbdff9d43c07c1dbadceb82ed554cf64e8da5e abgen-host
3-
1dcb074eae36c5877fded27acfa7323d01d353886a3b18f7b49a6ec419c92965 libabgen.a
4-
a3fa303c3eb583fed38f6f661dbc48391d9d7ed0114efa72f96aefc0bea0503b libabgen.dylib
1+
6ab6b6de62e2f4962ffa0f9bb7a6cd5b1bd597a69fc6442d94ae6de34e432dcf abgen
2+
d2c457a0309e73417a8984fc5c70bece51d9c3aab822b4ed3e28c4c6775d475e abgen-host
3+
8010b7796573007ecee8e28ef8257638c8a9d7964f8ccefc6ce8b43e12600298 libabgen.a
4+
ff1da344a9e821facb2019af666ef350d2eb51357d8c34431c325efed7d9d55d libabgen.dylib
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
2b93e95ca3c56ea3432a9e97c0958a660ad11afcd5af2d8f37b5325474bf001a abgen-host.exe
2-
0ff5468b669f0f8b4d3ddd563bed74077efcd073e94e394c9b29d513ea907048 abgen.dll
3-
9ca6243474ae72e4fd9d0e232f1d3f327214c0bc4662f2eda337afae5ef6c311 abgen.exe
4-
b39cce4552b412b0f7c263464ea221c613a612765d146e0247a2e9816e5001a9 libabgen.a
1+
0461ee096bb43da0488c5a071343e498c2f058e1c70f64119f1d3cc2f497293a abgen-host.exe
2+
dffc85142bb537d02b389940083f4b62f97ec8a8e4f7f16cf060a506c71afd14 abgen.dll
3+
306f2946b75ab06c4944647b09f48330bdfd105458d84004fc4763516ed09104 abgen.exe
4+
a98a37bb96d92794880f057fba941bbe49341d83227382af262b0976021691ee libabgen.a
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
5f7ae76ae58eb7e1f9744480ef96be963f998c8b975465862bfdc3f2fd3df7dd abgen
2-
fc9b77e1bc1e6b19e10202e01059cd8e03f1b098229e6300d18c86969f585f6d abgen-host
3-
8ffa602df936d9d5d430d0c4ccdc75e0b92d2accfd39d76ac4267f0909d836c1 libabgen.a
4-
8f770ba9aa8dc6c7351be4eafa39ff423cb5f5950ddcbb7f472d2a2bb0a1761c libabgen.so
1+
5131bcd95062986bdf3f02985b018b32b909fc9bc7adcd04ec8a55490207197c abgen
2+
7f141ab43f4ad2a91edd5b529ee780ad45b7a6924ec8c78eecbceda571a7b591 abgen-host
3+
14b09ab1946844f94cf7c97d81b1d92630025c055ba5fb07ed8db6fcb5bad7f6 libabgen.a
4+
289ced063b926ade51c4f387e84af5cf60712bb4601f0ae5cac0f5656ff34cf3 libabgen.so

ci/nix-checks.sh

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@ set -euo pipefail
55
system="${1:?usage: nix-checks.sh <system> [attr...]}"
66
shift || true
77

8-
# With attr names, build only that subset (lanes split the check set across
9-
# parallel jobs); without, build every attr the system carries.
108
if [ $# -gt 0 ]; then
119
names="$(printf '%s\n' "$@")"
1210
else

0 commit comments

Comments
 (0)