open-standards/.github/workflows/wai-vector.yml
Transaction Science 2f147d2a30
Some checks failed
standards workspaces build + test / jouleclaw-rs (pull_request) Successful in 2m13s
standards workspaces build + test / aac-rs (pull_request) Successful in 1m58s
standards workspaces build + test / joule-code-rs (pull_request) Successful in 50s
standards workspaces build + test / joulecontract-rs (pull_request) Successful in 34s
standards workspaces build + test / map-rs (pull_request) Successful in 31s
standards workspaces build + test / mesh-rs (pull_request) Successful in 31s
no-vanity-metrics / Scan committed Markdown for vanity metrics (pull_request) Has been cancelled
no-vanity-metrics / WAI public text names no comparison (pull_request) Has been cancelled
no-vanity-metrics / WAI public text names no company or product (pull_request) Has been cancelled
standards workspaces build + test / arl-rs (pull_request) Has been cancelled
standards workspaces build + test / eoc-rs (pull_request) Has been cancelled
standards workspaces build + test / jcp-rs (pull_request) Has been cancelled
standards workspaces build + test / joule-ui-rs (pull_request) Has been cancelled
standards workspaces build + test / jouledesk-rs (pull_request) Has been cancelled
standards workspaces build + test / joulehook-rs (pull_request) Has been cancelled
standards workspaces build + test / proof-rs (pull_request) Has been cancelled
standards workspaces build + test / sandbox-rs (pull_request) Has been cancelled
standards workspaces build + test / sense-rs (pull_request) Has been cancelled
standards workspaces build + test / smart-byte-rs (pull_request) Has been cancelled
standards workspaces build + test / macOS energy backends (pull_request) Has been cancelled
WAI conformance / cargo-class corpora · linux (pull_request) Has been cancelled
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Has been cancelled
WAI conformance / cargo-class corpora · macos (pull_request) Has been cancelled
WAI conformance / quantum core and corpus under wasm32-wasip2 (wasmtime) (pull_request) Has been cancelled
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Has been cancelled
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Has been cancelled
WAI conformance / delivery telemetry · CMCD and CMSD against an independent library (pull_request) Has been cancelled
WAI conformance / cross-arch byte-equality · linux (pull_request) Has been cancelled
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Has been cancelled
WAI conformance / cross-arch byte-equality · macos (pull_request) Has been cancelled
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Has been cancelled
WAI energy receipts / energy receipts · linux (pull_request) Has been cancelled
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Has been cancelled
WAI energy receipts / energy receipts · macos (pull_request) Has been cancelled
WAI section references / cited sections exist (pull_request) Has been cancelled
wai-vector vector graphics / linux-aarch64 (pull_request) Has been cancelled
wai-vector vector graphics / linux-x86_64 (pull_request) Has been cancelled
wai-vector vector graphics / macos-arm64 (pull_request) Has been cancelled
wai-vector vector graphics / wasm32-wasip2 (wasmtime) (pull_request) Has been cancelled
wai-vector vector graphics / wasm32 under Node (pull_request) Has been cancelled
wai-vector vector graphics / fuzz, peak allocation, comparison count (pull_request) Has been cancelled
workflow hygiene / every workflow supersedes its own queue (pull_request) Has been cancelled
standards workspaces build + test / openpay (pull_request) Has been cancelled
wai-vector: WOS1 and WVG1 with the refusal order of §2.7, the clock, tracks, the interval check and the cost (D7-2)
The reference crate of wai.graphics.vector (no_std + alloc, no
dependencies; SHA-256 is wai-ops's, by #[path]):
- WOS1 parsed with §2.1's load checks in order, and written;
- WVG1 split (steps 1-3, nothing allocated before the exact length),
  the record pass (step 4), the cross-record checks (step 5(a)-(h)),
  the sets by digest with at most length + 1 bytes read (step 6), the
  glyphs (7), the interval check (8) and the per-frame cost (9);
- the clock with the frame range by division, track evaluation, and
  placement;
- the JSON authoring form, one member per field, packing back to the
  same bytes;
- the CLI: check, cost, pack, unpack, vectors gen and verify;
- a wasm32 module and verify.mjs for Node.

The corpus wai/vector-conformance/ (arith, canonical, refusals,
geometry, cost) with its README's provenance line and a sha256.json
sidecar naming the div255 table; wai-vector.yml with native, wasip2,
node and fuzz jobs.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-11 03:59:47 -04:00

215 lines
8.2 KiB
YAML

name: wai-vector vector graphics
# The vector graphics capability (wai/extensions/graphics-vector.md), checked on every
# fabric leg the corpus has today. Every leg recomputes every expected file of
# wai/vector-conformance/ from its vector and the committed sets, and requires the
# committed bytes:
#
# - Linux x86_64, Linux arm64 and macOS arm64, natively, debug and release: the unit
# tests, the refusal-order, canonical, clock, track, geometry, cost and held-set
# tests, the corpus tests, and `wai-vector vectors verify`, which also regenerates
# the whole corpus and converts every payload's authoring form back to its bytes;
# - WASI (wasm32-wasip2) under wasmtime, a 32-bit target: the same tests and the same
# `vectors verify`;
# - a browser's engine (wasm32-unknown-unknown) under Node: the recomputation of
# every expected file and every authoring form;
# - the fuzz leg: the corpus-seeded fuzz of the WOS1 and WVG1 parsers at depth, the
# peak-allocation test and the duplicate-detection comparison count.
#
# There is no Windows leg: the Windows runner has been offline since 2026-08-28.
# One run per branch at a time. A push supersedes the run before it.
#
# There is one `macos` runner and it is the dev Mac, so every macOS job in this repo
# queues on it; only the newest commit's verdict is wanted, so older runs are
# cancelled. `cancel-in-progress: true` also applies to `main`, which advances by
# merge commits whose tree contains the commits before them.
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
on:
pull_request:
paths:
- 'wai/wai-vector/**'
# SHA-256 is wai-ops's, included by #[path].
- 'wai/wai-ops/src/sha256.rs'
- 'wai/vector-conformance/**'
- 'wai/tools/wai_vector_*.py'
# The text the crate and the corpus are held to.
- 'wai/extensions/graphics-vector.md'
- '.github/workflows/wai-vector.yml'
push:
branches:
- main
paths:
- 'wai/wai-vector/**'
- 'wai/wai-ops/src/sha256.rs'
- 'wai/vector-conformance/**'
- 'wai/tools/wai_vector_*.py'
- 'wai/extensions/graphics-vector.md'
- '.github/workflows/wai-vector.yml'
jobs:
native:
name: ${{ matrix.label }}
runs-on: ${{ matrix.os }}
timeout-minutes: 40
strategy:
fail-fast: false
matrix:
include:
- { os: linux, label: linux-x86_64 }
- { os: linux-arm64, label: linux-aarch64 }
- { os: macos, label: macos-arm64 }
steps:
- uses: actions/checkout@v4
# The docker images ship no Rust; the macOS host has it, but launchd's PATH omits
# ~/.cargo/bin.
- name: Install Rust 1.98.0
shell: bash
run: |
export PATH="$HOME/.cargo/bin:$PATH"
command -v rustup >/dev/null 2>&1 || \
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --default-toolchain 1.98.0
rustup toolchain install 1.98.0 --profile minimal
rustup default 1.98.0
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
# Debug builds check every arithmetic operation for overflow, so a bound the
# text states that the code exceeds panics here.
- name: Every test, debug
working-directory: wai/wai-vector
shell: bash
run: cargo test --locked
- name: Every test, release
working-directory: wai/wai-vector
shell: bash
run: cargo test --locked --release
- name: The corpus regenerated, every expected file recomputed
working-directory: wai/wai-vector
shell: bash
run: cargo run --locked --release --features std --bin wai-vector -- vectors verify ..
wasip2:
name: wasm32-wasip2 (wasmtime)
runs-on: linux
timeout-minutes: 30
steps:
- uses: actions/checkout@v4
- name: Install Rust 1.98.0 with the wasm32-wasip2 target
shell: bash
run: |
export PATH="$HOME/.cargo/bin:$PATH"
command -v rustup >/dev/null 2>&1 || \
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --default-toolchain 1.98.0
rustup toolchain install 1.98.0 --profile minimal
rustup default 1.98.0
rustup target add wasm32-wasip2
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
- name: Install wasmtime 38.0.3
shell: bash
run: |
set -euo pipefail
v=38.0.3
curl --proto '=https' --tlsv1.2 -sSfL -o "$RUNNER_TEMP/wasmtime.tar.xz" \
"https://github.com/bytecodealliance/wasmtime/releases/download/v$v/wasmtime-v$v-x86_64-linux.tar.xz"
tar -C "$RUNNER_TEMP" -xf "$RUNNER_TEMP/wasmtime.tar.xz"
echo "$RUNNER_TEMP/wasmtime-v$v-x86_64-linux" >> "$GITHUB_PATH"
# The tests read committed files through CARGO_MANIFEST_DIR/.., so the wai
# directory is preopened at its own absolute path.
- name: Every test, under WASI
working-directory: wai/wai-vector
shell: bash
run: |
set -euo pipefail
W=$(cd .. && pwd)
CARGO_TARGET_WASM32_WASIP2_RUNNER="wasmtime run --dir $W::$W" \
cargo test --locked --release --target wasm32-wasip2
- name: Build the tool for wasm32-wasip2
working-directory: wai/wai-vector
shell: bash
run: cargo build --locked --release --features std --target wasm32-wasip2 --bin wai-vector
- name: The corpus regenerated, every expected file recomputed, under WASI
working-directory: wai
shell: bash
run: |
set -euo pipefail
wasmtime --version
wasmtime run --dir .::/wai wai-vector/target/wasm32-wasip2/release/wai-vector.wasm vectors verify /wai
node:
name: wasm32 under Node
runs-on: linux
timeout-minutes: 30
steps:
- uses: actions/checkout@v4
- name: Install Rust 1.98.0 with the wasm32 target
shell: bash
run: |
export PATH="$HOME/.cargo/bin:$PATH"
command -v rustup >/dev/null 2>&1 || \
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --default-toolchain 1.98.0
rustup toolchain install 1.98.0 --profile minimal
rustup default 1.98.0
rustup target add wasm32-unknown-unknown
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
- uses: actions/setup-node@v4
with:
node-version: '22'
- name: Build the recomputation for wasm32-unknown-unknown
working-directory: wai/wai-vector/wasm
shell: bash
run: cargo build --locked --release --target wasm32-unknown-unknown
- name: Every expected file and authoring form recomputed under Node
working-directory: wai/wai-vector/wasm
shell: bash
run: node verify.mjs target/wasm32-unknown-unknown/release/wai_vector_wasm.wasm ../../vector-conformance
fuzz:
name: fuzz, peak allocation, comparison count
runs-on: linux
timeout-minutes: 30
steps:
- uses: actions/checkout@v4
- name: Install Rust 1.98.0
shell: bash
run: |
export PATH="$HOME/.cargo/bin:$PATH"
command -v rustup >/dev/null 2>&1 || \
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal --default-toolchain 1.98.0
rustup toolchain install 1.98.0 --profile minimal
rustup default 1.98.0
echo "$HOME/.cargo/bin" >> "$GITHUB_PATH"
# Every corpus vector and every file under fuzz/seeds/ as a seed, 2,000
# mutations each: no input panics, and every accepted input writes back to
# its own bytes.
- name: Corpus-seeded fuzz at depth
working-directory: wai/wai-vector
shell: bash
env:
WAI_VECTOR_FUZZ_ITERS: '2000'
run: cargo test --locked --release --test fuzz_smoke -- --nocapture
- name: Peak allocation and the duplicate-detection comparison count
working-directory: wai/wai-vector
shell: bash
run: cargo test --locked --release --test peak_alloc --test canonical -- --nocapture
- name: Every workflow declares a concurrency group
shell: bash
run: bash scripts/check-workflow-concurrency.sh