Loading…
Reference in a new issue
No description provided.
Delete branch "train/pack-stack"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
The packaging stack (#426, #438, and #452's GPU-tier part) as one train onto main (now
9d984511a), with every MUST-FIX and SHOULD-FIX of the three reviews applied as its own commit, and #452's platform-decode part left out by the reviews' split. Branchtrain/pack-stack, head7971c3338. It lands as one squashed history: commit836d0255dcarries the three PRs' changes, and every later commit is one fix, named by the finding it closes.What the three PRs bring
floor.listing;wai-pack-gpucrate (WGSL integer kernels for the motion search, SSE and BLAKE3),wai-pack fabric, the macOS fabric meter, andwai-pack floor-decode.decode-equivalencefor output a GPU computed.wai/wgsl-conformance/).tests/wgsl_rules.rs).min(max())clamps. These also remove a shift by 32 that main'sq_shr_fillreaches on Metal.How they were integrated
Built as a squash onto
origin/mainatb16816671(#438 review M6).git merge --squash pr/452brings in #426, #438 and #452, since #452's head contains the other two.The only textual conflict,
wai/CHANGELOG.md, is the union of both sides. The stack's entries come first, since it lands after main's. No line of either side is dropped.#438's research note is rewritten inside the squash, so its original text never enters history (#438 review M6). It moves from
docs/research/wai-cross-fabric.mdtowai/research/cross-fabric.md, where the name check scans it.floor_decode.rscomment that named a chip vendor, and awai_pack.rscomment that named the title.Left out by the review's split, for EN-C to take over: #452's platform decode in dispatch. That is its commits
6ad92e2e8,8695bc75fandfed8694f4(reversed in the squash) and its CHANGELOG entry:wai/extensions/platform-decode.md;wai/platform-decode-conformance/;wai::platform_decode(wai-rs/src/platform_decode.rsand its tests, and thelib.rsline);wai-web'splatform_decodefeature,src/platform_decode.rs, and its demo pages (demo/platform_decode.{html,js},demo/verify_platform_decode.mjs), with their.gitignoreline;SPEC.mdsentences (§4's "advertising is per envelope in one other place" and the §7.1 pointer);So
SPEC.md,wai-rs/src/lib.rs,wai-webandwai/.gitignoreare main's, byte for byte.Semantic interactions with main, checked:
MeasurementClaimconstructed in the merged tree setsfabrics.claim_receipt.rs,claim_verify.pyand jwp-receipts.wai-ops-gpukernels and passes (below).The fixes, one commit each
72ab8756e#define PIECE_KIND_NONE 6, the six lines the build writes, so a build leaves the tree clean (and the falsify shards pass, below).4108c473eptsby the sample duration and requires every sample on that grid: constant duration, no gap, in order. The CMAF floor's ticks (48000 per frame at 1/1200000) now read 0 60 85 135 160, and the step reachesvideo-floor-only-02.f62ff0c23pack-source-missingapplies to the standard profile only; the code already agreed.b876b404dd911d11e0intent: "replicate"on a floor promises; what a floor-only sink can check; §7.2's sentence.d2dbcf011,5757156ddav1Cand sample-entry size must be the sequence header's, in both Rust readers andpack_verify.py, with tests.098489d73d2dbcf011.0ba8e5577pack_verify.pychecks a metered package's claim withclaim_verify.check_figure.4e0c3fd8ccmaf_diff.py's timescale case now altersmdhd's timescale (+16 in version 0, +24 in version 1).26ca4d787,37b3cfa6asegment-not-the-supplied-oneis resealed with catalogs naming the replacement, so its one fault is the binding tofloor.listing.b60c03327verify --parentreports an unreadable parent asrepack-parent-invalid.321aa53a2,e9a3acb58,a74adcb3e,fbabae76e,c6b41ee5csrc/fabric_attribution.rs, compiled on every OS): GPU clients sampled every 200 ms and keyed by registry id, a vanished client or a negative difference refused, nothing clamped, the busy window enclosing the rail's; a frozen or failed reading refused; the whole rail;OnChipCounter, filteringUnknown, with a 5% declared uncertainty computed in integers;task=ri_energy_nj + ri_billed_energy − ri_serviced_energy; the reading thread's fold checked; a 1 s and five-interval minimum span; 11 unit tests. The packer refuses a fabric that ran steps with no share or a share of 0.4e9e53abe,e3dd5a7ccmeasurement_fabric_unmetered), in the text and both verifiers. The accept vector isOnChipCounter. Seven vectors are appended (581 → 588); the corpus is regenerated.25b34b2aewai-pack-gputakes tokio 1.54.1 (RUSTSEC-2026-0384).f1544724enpu, notneural, everywhere.20833bcecb37e2986f,2aa4e54d3task, how sole use is sampled and its residual, the rail's idle draw and window, and that a profile without a step vocabulary MUST NOT carry a record.6b62aa482wai-pack-gpuuses per-call Validation and OutOfMemory error scopes (thread-local in wgpu 30 withstd). The kernels are claimed exact on Metal only. The CHANGELOG says older verifiers refusefabrics.6d90c17dfencode_withrefuses a vector outside the search window (field_range).9b5c99e49wai::jwp_hash::DOMAIN_OBJECTreplaces a hand-written domain.ae487223fwgsl-conformancegets its sidecar exclusion. This was the cargo-class corpora jobs' root cause:every_decoded_output_states_a_sha256read asha256.jsonthe new corpora lack. With platform-decode left out, only this one entry is needed.344bbcbbcatomicLoad/atomicStore(a load or store through a pointer to an atomic), with the review's plants and a storage barrier alone.841d7a66e4b5f73c1das_type<int>(as_type<uint>(,asint(asuint(), with a test that strips it. The workflow counts 17 tests.3281210860ec788fe7,9b5c99e49,e71980901wai/research/ops-gpu-runs.txt(minus the adapter-name field, a product name): Metal on an arm64 desktop and Chromium 148's WebGPU on it (the forge's run 10236, job 46928), and Vulkan on PCI 0x1002:0x1586 (Mesa 26.0.8) and llvmpipe (this train's run). The hand runs with no record (Linux 0x10de and 0x8086, Windows Vulkan and DX12, WARP) are named and not claimed. Item 6 covers backends with no PCI id. The rules check's scope is stated. "Every integer operation WGSL defines" is narrowed to what the kernels may use. The corrections: SPIR-V's signed%, HLSLclamp, FXC, §8.8/§8.10, the doc links. The §6 row cites the run. The subsection opens with an accelerator-general form, so #440 (G2) can rebase onto it rather than write a parallel rule.The packaging CHANGELOG gains a line for the review fixes (
b270ac75d).Checks
Heavy checks ran on the build host through
rb, with one target directory per workspace as CI has. A first run with one shared target directory let wai-pack pick up awaibuilt with another workspace's features, which no CI job can hit; its wai-pack steps were rerun. The trees:87618bbe(the train before main's #451),f3a04b82(after it), and the head for the last two rows.python3 ~/kani-logs/wfsteps.py HEAD origin/main pr/426 pr/438 pr/452wai-ops-gpu.ymlmetal "The probe, the corpus…" (the test count 16 → 17) andwai-pack.ymlmedia "The goldens' floors read and decode" (the prober fix)ruby -ryaml -e 'ARGV.each{|f| YAML.load_file(f)}' .github/workflows/*.ymlcheck-tests-in-ci.py,check-workflow-concurrency.sh,check-spec-refs.py,check-wai-section-refs.py,check-no-vanity-metrics.sh,test-public-text-checks.sh,check-comparative-prose.sh,check-orphan-sources.pyWAI_NAME_DENYLIST=… bash scripts/check-public-names.sh <every changed text file>;grep -Eover every commit messagepython3 -I scripts/check-advisories.pyint_kernels_vectors)v …loop over all 21 corpora,wai_claim_vectorsincludedregistry export --checkcargo run -q --no-default-features --bin wai -- registry export --checkinclude/wai.hafter a buildtouch cbindgen.toml && cargo build … --bin wai_http_vectors && git diff --quiet -- wai/wai-rs/include/wai.hbash wai/http-conformance/falsify/run.sh <work> --patches I/3for I = 0, 1, 2, as the CI job runs itclaim_verify.pyanddifferential.py --random 2000,jwp_verify.py,signer_verify.py,http_verify.pyand its fuzz differential,pin_verify.py, the audio provenance check, the OER C kernelcargo clippy --locked --all-targets -- -D warnings;cargo test --release --locked --no-fail-fast; the test-count floors;wai-pack conformance check ../pack-conformance(afterconformance regen)cargo clippy --all-targets --features gpu,fabric-meter -- -D warnings;WAI_PACK_GPU_REQUIRE=1 cargo test --release --locked --features gpu --test fabric-D warnings;WAI_PACK_GPU_REQUIRE=1 cargo test --release --lockedwith the workflow's grepscargo test --release --locked --features fabric-meter --lib fabricpack_verify.py pack-conformance, and--jobs 2source_diff.py(debug and release),policy_diff.py,segment_diff.py,stage_diff.py,cmaf_diff.py,png_diff.py-D warnings; themetaljob ofwai-ops-gpu.yml, its text run step by step: the probe, the corpus at both widths, the mutants and the semantics suite withWAI_OPS_GPU_REQUIRE=1, the capability corpora with their graphs on the GPU, main's exact-upscale derivations on the GPU, and the browser legWAI_OPS_GPU_REQUIRE=1 cargo test --locked --release -- --nocapture --test-threads=1on a Linux x86_64 host, PCI 0x1002:0x1586 (Mesa 26.0.8) and llvmpipe./scripts/check-lockfiles.sh;cargo metadata --locked --offlinefor wai-rs, wai-pack, wai-pack-gpu, wai-ops-gpu and wai-webwai-pack.ymland run over the goldens with ffmpeg 9.0.2 (CI has 4.4.2)video-cmaf-01andvideo-floor-only-02includedFalsifications
Every new check was committed before it was falsified. Each case broke the rule in rb's checkout, required the guarding test to fail, restored the file through git, and required the test to pass again (
.ps-falsify.sh, not committed):The fabric attribution:
c6b41ee5c), and the case now fails.Zero shares: the packer's zero-share refusal removed (fails); claim rule 6's
> 0removed in Rust (wai_claim_vectors verify, fails) and in Python (claim_verify.py, fails).The CMAF floor: the per-sample sync check removed (fails); the
av1C/size check removed (fails);pack_verify.py'sinit_agreesmade always true (an alteredav1Clevel is then accepted).Other code checks:
encode_with's window check removed (fails); the rules check's atomic-load refusal and signed-left-shift refusal each removed (wgsl_rules, fails).The media prober, on a scratch copy of the corpus with the committed step text:
supplied_cmaf.py's ffmpeg recipe) fails: "key frames at 0 59 85 135 160; the plan says 0 60 85 135 160";Editing the
trunsync flags alone does not move ffmpeg's K flag, because its AV1 parser takes key frames from the frame header. So the step reads real key frames.The header: without the regenerated header, a build dirties the tree (the CI failure, reproduced on the build host). With it, the forced rebuild leaves the tree clean and the three falsify shards pass.
Rule 8: its test strips naga's wrapping from
ops32's MSL and HLSL and requires a refusal; the stripped MSL still carries the bare bitcasts, which the old check took for the wrapping.Not done
wai-rs/tests/ops_gpu.rsdid not run there, and §5 says so.wai/research/cross-fabric.mdare the meter's first revision, one run each; the note says so. No metered pack was repeated under the new meter.What deploys beyond the repo
wai-transaction-science-web, branchstatus/wai-gpu-int-tier, commit980639b, not merged). Before it goes live:envelope-tiers-gpu's adapters must match §5 as narrowed: Metal and its browser WebGPU, and Vulkan on PCI 0x1002 and llvmpipe;envelope-dispatch-platformrow, and the WebCodecs and Media Capabilities references, belong to the platform-decode part that this train leaves out, so they should not go live with it;envelope-tiersand the WGSL reference row stand.wai-packwith featuresgpuandfabric-meter, andwai-pack-gpu, are repository crates, not published.🤖 Generated with Claude Code
npu, notneural(#438 review, the fabric term) f1544724ef