open-standards/CLAUDE.md
Transaction Science 946f3beda9
All checks were successful
joule-moq-remote host agent / joule-moq-remote · does this change touch it (pull_request) Successful in 6s
joule-moq-room room service / joule-moq-room · does this change touch it (pull_request) Successful in 7s
joule-moq-web browser client / joule-moq-web · does this change touch it (pull_request) Successful in 6s
standards workspaces build + test / which workspaces this change touches (pull_request) Successful in 6s
wai-app and Create / wai-app · does this change touch it (pull_request) Successful in 6s
wai-audit collector and player integration / does this change touch it (pull_request) Successful in 6s
WAI breaking changes and the conformance runner / WAI breaking · does this change touch WAI (pull_request) Successful in 6s
WAI operation catalogue / does this change touch it (pull_request) Successful in 6s
WAI conformance / does this change touch it (pull_request) Successful in 6s
WAI energy receipts / does this change touch it (pull_request) Successful in 5s
WAI examples / WAI examples · does this change touch them (pull_request) Successful in 6s
wai-fleet service / does this change touch it (pull_request) Successful in 6s
WAI JPEG-AI whole decode (pinned inputs, required) / does this change touch it (pull_request) Successful in 7s
wai-ledger service / does this change touch it (pull_request) Successful in 6s
joule-moq-remote host agent / joule-moq-remote, every target (macos) (pull_request) Successful in 1m25s
wai-pack / wai-pack · does this change touch it (pull_request) Successful in 6s
wai-quantum for JavaScript / does this change touch it (pull_request) Successful in 6s
wai-quantum studio and desktop / does this change touch it (pull_request) Successful in 6s
wai-sink-android native sink library / does this change touch it (pull_request) Successful in 6s
wai-sink-swift native sink package / does this change touch it (pull_request) Successful in 6s
joule-moq-remote host agent / joule-moq-remote, every target (linux-arm64) (pull_request) Successful in 1m57s
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Successful in 2m7s
WAI Studio / does this change touch it (pull_request) Successful in 6s
wai-web reach builds / wai-web reach · does this change touch it (pull_request) Successful in 6s
wai-web wasm32 / does this change touch it (pull_request) Successful in 6s
wai-app and Create / wai-app · tests, clippy, the line language's verifier (linux) (pull_request) Successful in 29s
wai-audit collector and player integration / collector, player integration and the browser end to end · macos (pull_request) Successful in 2m1s
WAI conformance / fast integer kernels, every x86_64 kernel set (AVX-512 silicon) (pull_request) Successful in 2m59s
wai-audit collector and player integration / collector · linux (pull_request) Successful in 1m1s
WAI conformance / cross-arch byte-equality · macos (pull_request) Successful in 26s
standards workspaces build + test / macOS energy backends (pull_request) Successful in 4m19s
WAI conformance / v2 vocabulary · manifests validate as stated (pull_request) Successful in 16s
WAI conformance / codec wrappers · fuzz smoke, text decode limits, C entry points, provenance, the semantic path (pull_request) Successful in 1m4s
WAI breaking changes and the conformance runner / WAI breaking · wire, record and API against main · linux (pull_request) Successful in 1m15s
wai-app and Create / wai-app · Create, browser end-to-end (macos) (pull_request) Successful in 5m15s
joule-moq-room room service / joule-moq-room, every target (pull_request) Successful in 6m19s
wai-fleet service / service · macos (pull_request) Successful in 1m2s
WAI breaking changes and the conformance runner / WAI breaking and conform · their tests, and the independent verifiers through wai conform · linux (pull_request) Successful in 2m46s
WAI conformance / delivery telemetry · CMCD and CMSD against an independent library (pull_request) Successful in 1m43s
wai-ledger service / service · macos (pull_request) Successful in 1m24s
WAI conformance / cross-arch byte-equality · linux-arm64 (pull_request) Successful in 1m2s
WAI operation catalogue / the catalogue and every door · linux (pull_request) Successful in 4m18s
wai-quantum studio and desktop / desktop app · windows (pull_request) Successful in 9m19s
wai-pack / wai-pack · macos (pull_request) Successful in 3m8s
WAI conformance / cross-arch byte-equality · linux (pull_request) Successful in 30s
WAI energy receipts / energy receipts · macos (pull_request) Successful in 7m49s
WAI conformance / C2PA manifest emission · signed, read back, validated (pull_request) Successful in 3m23s
WAI conformance / faces from keypoints under wasm32-wasip2 (wasmtime) (pull_request) Successful in 1m39s
WAI conformance / quantum core and corpus under wasm32-wasip2 (wasmtime) (pull_request) Successful in 3m9s
wai-fleet service / service · linux (pull_request) Successful in 2m5s
wai-quantum studio and desktop / desktop app · macos (pull_request) Successful in 3m28s
wai-ledger service / service · linux (pull_request) Successful in 1m43s
wai-pack / wai-pack · linux (pull_request) Successful in 1m55s
wai-quantum for JavaScript / javascript · linux (pull_request) Successful in 3m0s
WAI Studio / the catalogue's actions, the unit tests and the core · linux (pull_request) Successful in 1m10s
joule-moq-web browser client / joule-moq-web · browser end-to-end (macos) (pull_request) Successful in 16m12s
WAI conformance / each feature of the independent verifiers' steps compiles alone (pull_request) Successful in 11m32s
wai-sink-android native sink library / every ABI, the AAR, and the instrumented tests in a headless emulator · macos (pull_request) Successful in 4m51s
WAI examples / WAI examples · the archive, the readiness check, the browser and Apple · macos (pull_request) Successful in 13m12s
WAI conformance / cargo-class corpora · macos (pull_request) Successful in 15m2s
wai-quantum studio and desktop / studio · browser (pull_request) Successful in 4m3s
WAI conformance / cargo-class corpora · linux-arm64 (pull_request) Successful in 16m34s
wai-web reach builds / wai-web reach builds · the package of record, every output as recorded (pull_request) Successful in 2m40s
standards workspaces build + test / joule-code-rs (joule-code/joule-code-rs, joule-code-rs, linux-arm64, true) (pull_request) Successful in 17m22s
wai-pack / wai-pack · linux-arm64 (pull_request) Successful in 1m44s
wai-quantum studio and desktop / desktop app · linux (pull_request) Successful in 5m46s
wai-pack / wai-pack · the floor through a media prober (pull_request) Successful in 34s
wai-pack / wai-pack · dependency licences (pull_request) Successful in 17s
WAI examples / WAI examples · portable · linux (pull_request) Successful in 9m28s
WAI examples / WAI examples · android-app · linux-arm64 (pull_request) Successful in 5m7s
WAI conformance / cargo-class corpora · linux (pull_request) Successful in 14m49s
wai-web reach builds / wai-web reach builds · this tree's wai-web, every rung on its engine line (pull_request) Successful in 4m34s
wai-sink-android native sink library / the JNI layer and the platform-free half on the host JVM · linux-arm64 (pull_request) Successful in 2m16s
WAI JPEG-AI whole decode (pinned inputs, required) / fetch pinned JPEG-AI inputs → whole decode + pixel hash, required (pull_request) Successful in 11m4s
WAI energy receipts / energy receipts · linux (pull_request) Successful in 13m6s
wai-web wasm32 / wai-web wasm32 build · corpus, menu and writers (pull_request) Successful in 5m58s
wai-sink-swift native sink package / libwai slices, desktop tests, simulator tests · macos (pull_request) Successful in 10m55s
WAI Studio / Studio in Chromium and Firefox · macos (pull_request) Successful in 9m51s
WAI Studio / Studio in WebKit · linux (pull_request) Successful in 10m15s
wai-pack / wai-pack · independent verifier (Python) (pull_request) Successful in 9m21s
WAI energy receipts / energy receipts · linux-arm64 (pull_request) Successful in 30m14s
WAI conformance / independent verifiers · claims, JWP, key discovery and integer payloads (Python) (pull_request) Successful in 1h4m7s
Changelog entries and the conformance workflow's lists move into files a change adds
Every change to WAI added an entry at the head of wai/CHANGELOG.md, and every new module
appended to the hand-kept lists of .github/workflows/wai-conformance.yml. So any two
branches conflicted on those lines and had to merge one after another. This moves both into
files a change adds.

- Changelog entries: a change adds wai/changes/<yyyy-mm-dd>-<slug>.md holding the entry
  text. scripts/changelog-assemble.py renders the entries into CHANGELOG.md's Unreleased
  section for a release, in a stable order. scripts/check-changelog-fragment.py, run by
  repo-checks on every pull request, fails a pull request that changes wai/ and adds or
  edits no entry file directly in wai/changes/ (a release passes, and so does a commit
  with the trailer line "Changelog: none"). A pull request opened before the check reached
  main passes as it is; one opened after it that adds its entry to the head of Unreleased
  fails and is told where the entry goes. wai breaking reads breaking changes from entry
  files too.
- The conformance workflow: each per-module verifier step is a file in
  .github/wai-conformance/verifiers/, each corpus a file in corpora/, and the
  integer-kernel tests carry a tag line. scripts/wai-conformance-lists.py derives every
  list the workflow kept by hand (WAI_FEATURES, the union --bin and --test lists, the
  features-alone lists, the kernel and corpus steps) from those files when the workflow
  runs. Its `selftest --exact` holds the derived lists to the hand lists of the commit
  before this one, and its dry-run prints every command each job runs: the dry-runs before
  and after this change differ only in the gate's path list, which gains the two paths this
  change adds.
- What stays shared, and how to insert there, is written in wai/CONTRIBUTING.md and
  wai/changes/README.md: wai-rs Cargo.toml features and [[test]] entries, lib.rs, registry
  rows, wai/.gitattributes and the live corpus table take an insert beside the related
  entry, never at the end.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-11-05 01:41:29 -05:00

27 lines
5.2 KiB
Markdown

# open-standards — Rules for Claude
This is the Transaction-Science **open-standards monorepo** (Apache-2.0 code + CC-BY spec text). The standards live here as **subdirectories, not separate repos** — including **wai**, jouleclaw, jcp, mesh, sandbox, map, aac (access), sense, openpay, smart-byte, eoc, arl, joulecontract, joule-code, joule-ui, joule-os, joulehook, jouledesk, jouletable, and proof. A change to any one standard is a commit in this one repo.
## Sovereign git & CI (canonical — READ FIRST)
**Canonical git home is the sovereign Forgejo forge at https://git.transaction.science/Transaction-Science/open-standards.** GitHub and Codeberg are **downstream mirrors that update automatically on every commit** — **push only to the forge** (`origin` on dev already points there; GitHub is preserved as the `github-backup` remote). Never treat GitHub as the source of truth: no "View on GitHub" as canonical, and no `github.com` in any standard's README, install snippet, or public site copy — name **`git.transaction.science`**.
- This is a fast-moving, multi-worktree repo; `main` moves under you. Land work by cherry-picking onto a fresh worktree off `origin/main`, build-verify, then rebase/retry the push (the forge auto-mirrors on success).
- **CI is Forgejo Actions** (GitHub-Actions-compatible) on self-hosted runners: use `runs-on: macos` / `linux` — never `ubuntu-22.04`, `windows-2022`, `namespace-*`, or bare `self-hosted`. Publish releases via the Forgejo release API, not `gh release`. A repo needs its Actions unit enabled before workflows run.
- **Buildable targets (all on live self-hosted runners):** macOS **aarch64 + x86_64** (`runs-on: macos`), Linux **x86_64** (`runs-on: linux`) and **arm64** (`runs-on: linux-arm64` — a native arm64 Linux VM on the Apple Silicon dev Mac; arm64 guest on an arm64 host is virtualization, not emulation), Windows **x86_64** (`runs-on: windows`). **Windows-arm64 is the only gap** — the same VM trick would close it (needs a licence/ISO). Linux-arm64 builds with `CC=gcc-14` + `REMOTE_SERVER_TARGET=aarch64-unknown-linux-gnu`; the x86_64 leg uses clang.
Dev-machine push/upload specifics (LAN push-routing, credential, release-asset upload) are in the global operator notes (`~/.claude/CLAUDE.md`).
## Add files of your own; insert beside the entry you build on
Many sessions' branches are open at once, and every line two of them append to is a conflict that serialises their merges. A change adds files of its own where the tree lets it (its changelog entry, and its lists in `wai-conformance.yml`), and inserts beside the entry it builds on in a file that stays shared:
- **WAI's changelog:** one new file per change, `wai/changes/<yyyy-mm-dd>-<slug>.md`, holding the entry exactly as `wai/CHANGELOG.md` would ([`wai/changes/README.md`](wai/changes/README.md)). Never edit the head of `wai/CHANGELOG.md`; a release renders the files into it (`scripts/changelog-assemble.py --write`). The repository checks fail a pull request that changes `wai/`, adds or edits no entry file directly in `wai/changes/`, and has no commit message whose trailer block holds the line `Changelog: none`, exactly (a release, which renders the files and removes them, passes); one opened since the check reached main (the merge that brought it in) that adds its entry to the head of `wai/CHANGELOG.md` instead fails too.
- **`wai-conformance.yml`:** a new step of the independent verifiers is a file of `.github/wai-conformance/verifiers/`, a new cargo-class corpus a file of `.github/wai-conformance/corpora/`, and a new fast-integer-kernel test tags itself (`// wai-conformance: int-kernels`). The workflow's feature lists, test lists, steps and corpora, and the paths its gate runs on, are derived from them; add no line to the workflow for them, unless a step's `# paths:` names a file under none of the trigger's paths (`check` names it). `python3 scripts/wai-conformance-lists.py dry-run` prints what runs; `wai/CONTRIBUTING.md` states the header keys.
- **Files still shared** (`wai/wai-rs/Cargo.toml`'s features and targets, `[[test]]` entries included, `wai/wai-rs/src/lib.rs`'s `mod` lines, the tables of `codecs/registry.rs`, `wai/.gitattributes`, and the corpus table of `wai/live-conformance/README.md` with the verifier commands under it) are grouped by topic, not sorted: insert beside the entry yours builds on, never at the end, and never re-sort. A corpus whose bytes must never be converted gives its own directory a `.gitattributes` (`* -text`), as `wai/pin-conformance/` and `wai/live-conformance/scene/` do, rather than a line in `wai/.gitattributes`. Generated files (`wai/registry/capabilities.json`, `wai/REGISTRY.md`'s table, `wai/vocab/v2.*`) are sorted by the export: regenerate them, never merge them by hand.
## Framing rules (public surfaces)
- Describe every standard **on its own terms** — ingest open/private efforts into permissive-licensed Rust; **no competitive / SWOT framing**, no comparisons, no us-vs-them. Copy is self-referential only.
- Don't manufacture cross-project dependencies; shared neutral primitives ≠ "X is built on Y." Verify before asserting a link.
- No vanity metrics (crate/test counts, LOC, "N+ adapters") — describe the shape, not the size.