Compare commits

..
74 changed files with 811 additions and 108610 deletions

No files matched your search

-20
View File
@@ -5475,23 +5475,3 @@ remain; no live state, schema or bus policy change.
2026-10-24 | Goldie | Row265 / #1770 first slot STOP (sage-3932) | New parser14/14, rooms18/18 green; serialized bus stops at old project-runtime.test.mjs:14 import-closure pin, partial619 ok/1 not ok. New pure address.mjs import is absent from expected imports. Static trace also needs address.mjs in seat RUNNER_FILES. No old-test/product correction, no mutant/restored run, no green commit/push; old-pin and out-of-owned-files mount change sent to Sage for ruling. Audit prose missed the direct source pin despite raw grep hit; correction recorded in BUILD.md.
2026-10-24 | Goldie | Row265 / #1770 verified (mos-1567, sage-3942) | Approved correction adds solely address import pin + Row265 comment to project-runtime.test and one pure-source RUNNER_FILES mount; new block checks parser has no imports. Serialized fresh-short-TMP timeout-k10: unchanged sandbox10/10, parser15/15, rooms18/18, full bus957/957, twelve named refusal mutants killed (each Node1, driver0), restored parser15/15 + rooms18/18. All positives zero fail/skip/cancel; every mutation restored full broker SHA71b32ee4. Old first-red evidence retained, no other old-test change. Slot returned goldie-0034; Boyd packet explicitly includes mount-list review, candidate push next.
## 2026-10-24 — W2 row 310 / #1824 started (Gyro)
Before: only Louie's evaluation artifact and S0 conditional baseline review exist. Sage assigned the owned source import, offline pinned restricted web build and root-independent output/CSP evidence under Q246/mos-1571. Implementation plan and subsequent measurements live in agents/gyro/work/queue-310/BUILD.md. No build/test, serving route or live change at start.
## 2026-10-24 — W2 row 310 / #1824 bounded scratch measurement (Gyro)
After sage-3992: 534 existing cached registry archives extract to 24,844 files / 611,577,974 bytes, or 614,049,226 bytes with generated checksums. A full 538-package lock vendor set adds 329 identities beyond S0's 209. In isolated scratch, with the three already-reviewed git inputs and approved local workspace reduction, exact S0 199/209 package closures matched; baseline release measurement succeeded offline with networking disabled. Valid absolute-nice19/four-job environment retry: 397.864805 s; four runtime files total 44,142,800 bytes, scratch Git blob pack 16,720,159 bytes. Initial 388.757578 s attempt had an inherited-priority defect and is retained as limited evidence. Receipt and caveats: agents/gyro/work/queue-310/BUILD.md, “Full-lock measurement results (sage-3992)”. No full-lock repository import, runtime output commit/push, serving or live change. W2 remains incomplete at the packaging boundary; no M1–M14/CSP/reproducibility acceptance claimed.
## 2026-10-24 — W2 row 310 / #1824 223-source packaging evidence (Gyro)
Under sage-4008/4010, exactly209+14 source packages measured in scratch: total11,201 files /145,260,334 bytes and26,538,894-byte independent blob pack; extra14 total702 files /14,523,104 bytes and1,720,566-byte blob pack. Original pinned lock refused with --locked after existing cfg-filter script; one authorized automatic offline lock regeneration produced a strict subset (558→226 entries,332 removed,0 added,0 changed). Original lock untouched. Per-package source/archive/license/notice inventory and exact errors are in agents/gyro/work/queue-310/BUILD.md, “223-source measurement — sage-4008 and sage-4010”. Release measurement approved but awaits CLEAR after row327 gate (sage-4011). This evidence commit contains plain text only, no imported crate source or runtime outputs; packaging/landing choice remains held under Vikunja618, and source/notice review goes to Gladstone.
## 2026-10-24 — W2 row310 / #1824 223-vendor release measurement (Gyro)
sage-4014 CLEAR run: frozen/offline scratch build exit0 in380.674036s, actual nice19/four jobs/cores/CPUs, no external network interface, no retry. Four outputs total44,137,258 bytes; WASM43,952,335 bytes SHA2560322beb9e58b9abeed6b6e05125879bfb3eccbebb05094e191df3542a74007ea differs from the full-lock build. Exact S0 package closures passed preflight; original lock unchanged, pruned lock remains3401363e.... Slot released immediately for Bradford in gyro-0018. Gladstone supplemental review of14 additions found10 PASS/4 CONCERN (not adoption approval); embedded W3C notices/attribution, dpi full-source conjunction/copyrights, explicit spirv standard-text map and winit example PNG inventory are now documented in plain-text evidence. Details: agents/gyro/work/queue-310/BUILD.md, “223 release result and notice supplement — sage-4014”. No crate sources/binaries/runtime route committed or served; row held for Vikunja618 and all implementation/CSP gates remain open.
## 2026-10-24 — W2 row310 supplemental notice collection recheck recorded (Gyro)
Gladstone-0027 at9522d2356 independently passes the four corrected collection/mapping gaps, with earlier ten package source/notice PASS results standing. Bundle4d8e2aac... and all12 incremental path hashes verified. This is supplemental evidence only: W3C/M13/license adoption, pruned lock, packaging/size, Worker/native runtime, WASM difference and implementation/CSP gates remain uncleared; row310 stays held. Details: agents/gyro/work/queue-310/BUILD.md, “Supplemental notice recheck — gladstone-0027”. No build or source/notice/runtime change.
+10
View File
@@ -0,0 +1,10 @@
# Bradford
Builder seat, Codex gpt-6.1-sol, started by Sage under Q246 and mos-1572. Owns the push check row:
`scripts/push-check.sh`, which passes a binary only when an approved review candidate lists its path and sha256
(docs/plans/2026-10-24_push-guard-binary-manifest.md, #1825).
No launcher in this directory. The seat runs as a T3 thread and works in its own worktree. It has no credentials of its
own; it pushes only its own `bradford/*` branches through the repository credential helper (mos-0981), never `refactor`,
`main` or another seat's branch. Poe gives the first Codex review and Dewey the Opus 5.5 landing review (mos-1542,
mos-1571). Registered by Sage on 2026-10-24 so the queue can name the seat as row owner (store.mjs isSeatDir).
+162
View File
@@ -0,0 +1,162 @@
# Row 327 — reviewed binary push check (#1825)
2026-10-24 Bradford, branch bradford/row327, base b617b80f6.
## Plan and boundaries
Implement the scratch check's ordered tokens in scripts/push-check.sh, using an
embedded Node program for byte-safe git paths and SHA-256 blob hashing. Bash is
the public entry point; Node is already a repository requirement. Git commands
use explicit resolved object IDs, disable external diff/textconv, and inspect
committed bytes. No queue writes, hook changes, binary evidence, or live state.
Fetch is opt-in. Read reviewed rows with the queue package rows() API rooted in
the caller's repository; this preserves canonical/witness/replay checks.
Only the latest round counts; any changes receipt blocks that round. A matching
approval authorizes exactly the manifest path/hash, or a path changed from the
commit candidate's first parent with matching committed blob hash and mode.
Deleted binaries need no candidate. Multiple --row values form a union.
Add scratch-only integration coverage in scripts/test-push-check.sh. Reuse queue
test fixture helpers to bootstrap real scratch queues, then use queue verbs to
open rounds and record receipts. All git writes, bare remotes and queues remain
under TMPDIR. Test fail-closed ordering and five required mutants, generated as
text copies in scratch. No old tests are modified. Add the TOOLS entry.
Every run needs Sage CLEAR; run timeout -k 10. Record plain-text results here or
in this packet. After green checks, commit and push only bradford/row327 through
the repository helper, send Sage and Poe tip/base/path sha256 manifest, and move
327 in-review. Sage owns request posting and landing; Dewey reviews once there.
## Recovery and choices
Initial worktree queue next refused linked-worktree access as designed. Queue
claim is performed from the canonical checkout; production reads in the guard
retain the same refusal rather than invent a worktree override.
Requested Sage ruling on AGENTS log appends outside the brief's owned paths.
Sage sage-3989: lead handles BUILD-LOG and SESSIONS at landing. Session entry:
2026-10-24 Bradford — row 327 / #1825 — implementation and scratch verification
in this packet; outcome to be appended after acceptance.
Implementation note: commit candidates use an explicit first-parent diff (empty
tree for a root commit), with rename detection disabled, like verify-commit.
The changes-veto case has both an approval and a changes receipt; a veto mutant
would otherwise still fail for lack of approval and provide false confidence.
A receipt for another candidate cannot be produced through queue verbs: the
suite corrupts only a scratch queue and expects the production reader to refuse.
Diff color, external diff and textconv are disabled so scans inspect plain git
output. Paths are read from NUL-delimited records (including spaces/tabs).
## Verification (Sage CLEAR sage-3991)
First new-suite run red: my whitespace-path fixture attempted a manifest path
that the queue intentionally forbids. Corrected the fixture to a commit
candidate, which can contain that git path. Production queue code and old tests
remain unchanged. Raw first-run output is test-run-1.txt.
Second run green: PASS push-check 22 checks; KILLED skip-hash,
accept-changes, earlier-round, working-tree, no-row. test-run-2.txt holds the
plain-text receipt. bash -n both scripts and git diff --check passed. Runs used
TMPDIR recorded in tmpdir.txt and timeout -k 10 240; all generated binary bytes
were in disposable scratch repositories, never in this checkout or evidence.
The slot was used for only the authorized new suite and syntax/diff checks.
No claim of the lead's full scripts/test-*.sh landing gate is made here.
Final inspection after the first green run found a path-decoding concern: lossy
UTF-8 decoding can conflate distinct git filenames. Hardened NUL-delimited path
decoding to reject invalid UTF-8, and quote newline-containing paths in refusal
output to preserve one STOP line. Added scratch cases for both. Requested a new
CLEAR (bradford-0005) because the previous slot had already been released.
Final run (sage-3994 CLEAR) green on final code: PASS push-check 24 checks,
all five mutants KILLED again, bash -n both scripts and git diff --check passed.
Receipt: test-run-3.txt. The guard rejects non-UTF-8 git paths as environment
errors rather than comparing replacement characters; newline paths remain
checkable through commit candidates and refusals quote them on one line.
Acceptance for the builder stage: ordered tokens and stop behavior, explicit
base/fetch, exact blob manifest/commit checks, latest-round/veto checks, deletion,
log/FF/secrets/attribution refusals, and all required mutants are covered. Queue
reads use rows() with production validation; tests use only scratch queues.
Candidate-mismatched receipts are impossible through the queue API and are
covered by a corrupt scratch queue refusing its read. The lead's full-suite gate,
Poe first review, Dewey landing review, and adoption for Sage's next push remain
landing stages. No hooks, role policy, credentials or other seats' paths changed.
## Poe first review R1 (poe-0010) — changes
cceea407e has a blocking subdirectory bypass: ls-tree without --full-tree can
omit an existing binary outside the caller cwd, making it look deleted.
Accepted the finding. Git now anchors all invocations at the repository root,
ls-tree uses --full-tree, and diff/diff-tree use --no-relative. EXPECTED_LOG still
resolves from the original caller cwd. Added outside-cwd and nested-binary cases
under diff.relative=true: unreviewed stops, reviewed manifest/commit passes.
No old test changed. New run requires Sage CLEAR before execution.
R1 verification under sage-3999 CLEAR: test-run-4.txt records PASS 29 checks
and KILLED all five required mutants. Syntax and diff whitespace checks passed.
A second bounded run used the new suite against cceea407e's script copied under
TMPDIR: r1-regression-red.txt records the outside-cwd unreviewed binary reaching
NO_BINARY/PUSH_READY (actual exit 0, expected 1). Thus the new regression detects
the reviewed bug, while the revised guard refuses it. No code changed between
the green run and this old-candidate reproduction. All runs used timeout -k 10.
Holding claimant queue writes per sage-3999 until Boyd finishes row 309's record.
Last acknowledged row 327 state is in-progress (bradford-0010, revision 3868).
## Dewey landing review B1 (dewey-0956) — changes
Read the invited review body at /mnt/storage/scratch/tmp/dew327vWXloCT/body.md.
B1 identifies a brief-level gap: numstat follows candidate/host git attributes,
so *.bin diff makes a NUL-containing blob disappear from the binary-only set.
The production script indeed filters numstat before reading any blob, consistent
with that data flow. Proposed correction: enumerate every changed numstat path,
skip absent/non-blob entries at SHA, classify binary when numstat says binary OR
committed blob has NUL among first 8000 bytes. Read with cat-file, never worktree.
Test committed .gitattributes, info/attributes, and core.attributesFile overrides
in scratch; reject with no row, allow exact reviewed bytes; add NUL-scan mutant.
Sage owns the brief amendment and next CLEAR/queue sequencing.
N1 acknowledged: candidate-equality check is defense in depth; invalid receipt
cannot pass queue replay, so the corrupt-queue case does not isolate that check.
N2/N3 recorded as described in review, without optional secrets/reader changes.
N4 planned hardening: refuse unconfirmed durable tail notes from rows() with
exit 2, with a real scratch witness-prefix case rather than a test-only reader.
No test run or queue write started for B1/N4 before Sage CLEAR.
Sage sage-4013/4015 authorizes B1 and N4 within the brief; amendment committed on
refactor at 9042754c4 (read with git show, no branch change). Fix and tests written
before requesting CLEAR as directed. Tests cover all three attribute sources,
approved manifest success under each override, exact 7999/8000 offset boundary,
and a real prefix-witness rollback to yield an unconfirmed approval tail.
Added only the requested sixth mutant, skip-nul-scan; the original five remain.
No new production configuration knobs, no secrets-diff change, no queue writes.
Will demonstrate red against the prior candidate using the new tests, then green
against revised code, under the approved slot. Full landing gate remains Sage's.
After Dewey's round-2 CHANGES record (comment 31522, rev3876), Sage sage-4016
released only the claimant return to in-progress. Acknowledged:
`ok bradford-0017 rev 3877 row 327 in-review→in-progress`.
No other queue write before the next in-review candidate move.
Test slot remains pending Sage CLEAR after Gyro's build.
## Amendment 1 verification (sage-4017 CLEAR)
b1-regression-red.txt: new tests against 704910ca3 reproduce attributes-hidden
asset.bin reaching NO_BINARY/PUSH_READY with exit0 instead of exit1.
n4-regression-red.txt: revised code with only the N4 check removed lets the real
scratch unconfirmed approval tail reach BINARY_REVIEWED/PUSH_READY, exit0 rather
than exit2. These are expected negative controls; neither changed committed code.
Final full new-suite run is green: test-run-5.txt records PASS 38 checks and
KILLED skip-hash, accept-changes, earlier-round, working-tree, no-row, skip-nul-scan.
All runs used timeout -k 10 240 with the same scratch TMPDIR; no old tests were
changed or run. bash -n both scripts and git diff --check also passed. No source
changes followed this green run. Sage's full landing gate is still separate.
Scope in the final delta: classify all changed present blobs using numstat OR
first-8000-byte NUL; fail closed on queue unconfirmed-tail notes; regression cases
and requested sixth mutant; TOOLS entry and this plain-text packet. B1's brief
amendment is Sage's 9042754c4; this branch does not edit the brief or queue files.
@@ -0,0 +1,27 @@
node:internal/modules/run_main:107
triggerUncaughtException(
^
AssertionError [ERR_ASSERTION]: LOG_OK
FF_OK
NO_BINARY
SECRETS_CLEAN
NO_ATTRIBUTION
PUSH_READY ee394f31d1e52751716e2413049f41b2f3072e65..76acc948149e718091fcd3f3807257e752a6616e
0 !== 1
at Object.check (file:///home/jwoltje/.t3/worktrees/mosaic-stack/bradford-row327/[eval1]:44:12)
at file:///home/jwoltje/.t3/worktrees/mosaic-stack/bradford-row327/[eval1]:100:7
at process.processTicksAndRejections (node:internal/process/task_queues:104:5) {
generatedMessage: false,
code: 'ERR_ASSERTION',
actual: 0,
expected: 1,
operator: 'strictEqual',
diff: 'simple'
}
Node.js v26.8.1
@@ -0,0 +1,27 @@
node:internal/modules/run_main:107
triggerUncaughtException(
^
AssertionError [ERR_ASSERTION]: LOG_OK
FF_OK
BINARY_REVIEWED 1
SECRETS_CLEAN
NO_ATTRIBUTION
PUSH_READY c1a8a1e9b8c3988874a8f7a35afab7c06aea94a5..325cd3671a7bf70b9a3aee60f4446bc93594a12a
0 !== 2
at Object.check (file:///home/jwoltje/.t3/worktrees/mosaic-stack/bradford-row327/[eval1]:44:12)
at file:///home/jwoltje/.t3/worktrees/mosaic-stack/bradford-row327/[eval1]:121:7
at process.processTicksAndRejections (node:internal/process/task_queues:104:5) {
generatedMessage: false,
code: 'ERR_ASSERTION',
actual: 0,
expected: 2,
operator: 'strictEqual',
diff: 'simple'
}
Node.js v26.8.1
@@ -0,0 +1,27 @@
node:internal/modules/run_main:107
triggerUncaughtException(
^
AssertionError [ERR_ASSERTION]: LOG_OK
FF_OK
NO_BINARY
SECRETS_CLEAN
NO_ATTRIBUTION
PUSH_READY 896bdf0ef56596c67d2dc427275743c46026e832..ad9f9c86112fadafef4d4854f46bd9994fe2fe5d
0 !== 1
at Object.check (file:///home/jwoltje/.t3/worktrees/mosaic-stack/bradford-row327/[eval1]:44:12)
at file:///home/jwoltje/.t3/worktrees/mosaic-stack/bradford-row327/[eval1]:130:7
at process.processTicksAndRejections (node:internal/process/task_queues:104:5) {
generatedMessage: false,
code: 'ERR_ASSERTION',
actual: 0,
expected: 1,
operator: 'strictEqual',
diff: 'simple'
}
Node.js v26.8.1
@@ -0,0 +1,21 @@
node:internal/modules/run_main:107
triggerUncaughtException(
^
AssertionError [ERR_ASSERTION]: queue: candidate manifest path must be a repo-relative path: "space tab\tasset.bin"
2 !== 1
at Object.round (file:///home/jwoltje/.t3/worktrees/mosaic-stack/bradford-row327/[eval1]:61:12)
at file:///home/jwoltje/.t3/worktrees/mosaic-stack/bradford-row327/[eval1]:116:7
at process.processTicksAndRejections (node:internal/process/task_queues:104:5) {
generatedMessage: false,
code: 'ERR_ASSERTION',
actual: 2,
expected: 1,
operator: 'strictEqual',
diff: 'simple'
}
Node.js v26.8.1
@@ -0,0 +1,6 @@
PASS push-check 22 checks
KILLED skip-hash
KILLED accept-changes
KILLED earlier-round
KILLED working-tree
KILLED no-row
@@ -0,0 +1,6 @@
PASS push-check 24 checks
KILLED skip-hash
KILLED accept-changes
KILLED earlier-round
KILLED working-tree
KILLED no-row
@@ -0,0 +1,6 @@
PASS push-check 29 checks
KILLED skip-hash
KILLED accept-changes
KILLED earlier-round
KILLED working-tree
KILLED no-row
@@ -0,0 +1,7 @@
PASS push-check 38 checks
KILLED skip-hash
KILLED accept-changes
KILLED earlier-round
KILLED working-tree
KILLED no-row
KILLED skip-nul-scan
@@ -0,0 +1 @@
/mnt/storage/scratch/tmp/YPrPwR
-592
View File
@@ -1,592 +0,0 @@
# Row 310 W2 WordCraft restricted source build
Started 2026-10-24 by Gyro, T3 thread 4c520dc8-238f-4f76-a973-28f2ef87310d.
Issue #1824; branch gyro/row310; base d16958bcf.
## Authority and constraints
Sage dispatch sage-3970 implements the approved W2 brief under Q246/mos-1571.
Read AGENTS.md, agents/gyro/README.md, D2/F4/D6-D9/G1/S0/W2 in
`docs/plans/2026-10-21_q195-writing-editor.md`, S0 report/inventory and CSP
measurement using `git show 74ec32013:<path>`, and Louie's pinned evaluation.
S0 is evidence, never modified. Protected source is read-only at
`e05b7fe86f3b85454000dffc321de638d7009817`, WordCraft 0.9.0.
No source checkout builds, live services/configuration, credentials, private books,
frame routes, shell CSP changes, policy expansion or dependency/tool changes.
All build/test runs need Sage CLEAR and use low priority, at most four jobs,
and TMPDIR freshly allocated beneath /mnt/storage/scratch/tmp.
No commit before applicable checks pass; report source/vendor bytes before commit
and every product binary path/size before first push. Push gyro/* only after ruling.
## Implementation plan
The existing approved design fixes the approach: immutable original import plus a
reviewable patch applied to isolated build roots, offline vendor inputs and pinned
tool hashes. An edited upstream import would lose the original-source receipt;
Louie's built files cannot substitute for a reproducible source build.
- [ ] Inventory original tracked input paths/bytes/hashes; import via git archive
into third_party/wordcraft/upstream. Inventory 209 reviewed packages and exact
git pins from S0; vendor only approved inputs with license/source receipts.
- [ ] Write provenance/build refusal tests first: changed/missing inputs, extra
dependencies, wrong tools, non-offline build, unshipped runtime dependency,
inline bootstrap/styles and stale output manifests must refuse.
- [ ] Implement build.mjs/toolchain.json/PROVENANCE.json/NOTICE and source patch.
Build from copied owned source with path remapping, stable environment and
manifest verification; external frame HTML/CSS/module bootstrap; package all
runtime files under src/public/wordcraft without serving them.
- [ ] Carry M1-M14 explicitly through patch and acceptance inventory. Host hooks
replace rfd/picker/download/print; block raw drops, local font enumeration,
persisted prose/fonts and direct outbound navigation. W6 owns production
bridge/routes, host import watchdog/sandbox and malformed corpus integration;
no placeholder is counted as passing mitigation evidence.
- [ ] Request CLEAR for each build/test stage. Build twice at different absolute
roots offline with the pinned tools. Compare every integration output hash,
record bytes/tool hashes/timings and run each touched test file independently,
affected WebUI suite and required repository checks on the assigned slot.
- [ ] Use scratch fixtures to measure exact Q234 style-src 'self' CSP with full
function coverage including host-owned Print, zero violations, no rfd/file
picker/download fallback and no external traffic. Preserve plain-text receipts.
- [ ] Report source/vendor totals and product binary inventory to Sage. After
checks/ruling, commit, push gyro/row310 through helper, send Sage and Gladstone
base/tip plus sha256 for every changed path. Move only row 310 to in-review;
Sage posts Gitea request. Filbert rechecks inventory once at landing.
## Acceptance risks to resolve
1. Vendor resolution must match reviewed normal/build closure, while preserving
original Cargo.lock and accounting for workspace-only dependency resolution.
2. Tool identity includes Rust target std and actual Trunk/wasm helper executables;
installed versions alone cannot establish tool identity.
3. Removing one Services hook leaves UI/engine fallbacks; trace all before patching.
4. Root-independent WASM includes generated build metadata; wasm-bindgen-shared's
git probing and absolute source paths need deterministic inputs/remapping.
5. W2 scratch host coverage must be real bytes/function behavior; W6 mitigation
gates remain explicit where production bridge authority is not yet available.
## Activity and evidence
- Initial worktree clean; HEAD d16958bcf, correct branch. Protected source HEAD
matches pin and git status is clean. No build or test has run.
- `scripts/mosaic queue next gyro` correctly refused in linked worktree. Retried
through canonical checkout as documented; operation still running at this note.
- Sage CLEAR sage-3973 covers new test red/green, offline metadata/tree/vendor prep
and one restricted release build with nice 19 / four jobs / fresh TMPDIR.
- Retried identical queue op gyro-0001 after Glomgold released lock: success,
revision 3857, row 310 briefed -> in-progress.
- Count reconciliation: F4's 199 counts third-party normal dependency edges for
wordcraft-web/wasm32-unknown-unknown. S0 adds 10 build-only dependencies, hence
209 third-party source/notice inputs, plus 15 local crates = 224 records.
These are distinct closures, not a dependency expansion. Current vendor is
exactly those 209 package identities, 10,499 files / 130,737,232 bytes before
final packaging corrections; upstream is 612 files / 26,913,076 bytes.
- New provenance/build tests ran individually under CLEAR; each has 2 expected
first-run failures because the owned verifier/builder does not exist yet.
- First offline metadata probe caught an error in my git-manifest normalization:
replacing version.workspace as a substring also changed rust-version.workspace.
No upstream input changed. Correcting anchored substitutions before repeating.
### Build-only manifest reduction (sage-3974)
- Cargo.toml: members reduced to the 15 reviewed local crates; default member wordcraft-web. No runtime feature changes.
- crates/doc/Cargo.toml: remove [dev-dependencies] from isolated build copy; excluded dev/test or native-only resolution.
- crates/docbin/Cargo.toml: remove [dev-dependencies] from isolated build copy; excluded dev/test or native-only resolution.
- crates/docx/Cargo.toml: remove [dev-dependencies] from isolated build copy; excluded dev/test or native-only resolution.
- crates/engine/Cargo.toml: remove [target.'cfg(not(target_arch = "wasm32"))'.dependencies] from isolated build copy; excluded dev/test or native-only resolution.
- crates/engine/Cargo.toml: remove [dev-dependencies] from isolated build copy; excluded dev/test or native-only resolution.
- crates/formats/Cargo.toml: remove [dev-dependencies] from isolated build copy; excluded dev/test or native-only resolution.
- crates/pdf/Cargo.toml: remove [dev-dependencies] from isolated build copy; excluded dev/test or native-only resolution.
- crates/proof/Cargo.toml: remove [dev-dependencies] from isolated build copy; excluded dev/test or native-only resolution.
- crates/render/Cargo.toml: remove [target.'cfg(not(target_arch = "wasm32"))'.dependencies] from isolated build copy; excluded dev/test or native-only resolution.
- crates/ui-egui/Cargo.toml: remove [target.'cfg(target_os = "linux")'.dependencies] from isolated build copy; excluded dev/test or native-only resolution.
- crates/ui-egui/Cargo.toml: remove [dev-dependencies] from isolated build copy; excluded dev/test or native-only resolution.
- crates/zotero/Cargo.toml: remove [dev-dependencies] from isolated build copy; excluded dev/test or native-only resolution.
- sage-3976 permits proven-false target-section removal in THIRD-PARTY manifests
only in isolated build copies, with matching checksum rewrites. A three-valued
cfg analysis keeps unknown/custom flags/features unchanged and identifies 26
manifests / 57 false-target dependency sections; target-filter-plan.json lists
every crate/cfg/dependency. This is below the ~30-manifest stop boundary.
- The scratch-only filtered source still refuses: wgpu-core's dormant `angle`
feature references its removed Apple-only dependency. Stopped at the explicit
feature-definition boundary and sent gyro-0006 to Sage. No feature edited.
- Tool versions match all five pins; toolchain.json records their binary hashes
and the Rust compiler driver/wasm target support files. No release build yet.
- Current notice bundle includes 209 third-party package mappings, local source
license/attribution/font texts and self_cell/ryu Apache-2.0 elections. Source
verifier green: 2/2. Output/build acceptance remains red/unimplemented.
### Original-source subset (sage-3976)
Excluded whole directories assets/app-icon/, docs/images/ and packaging/macos/: web frame serves no icon; screenshots and macOS packaging are never build inputs. Every license/notice/copyright remains. Included files remain byte-identical; no vendor file removed. Exact excluded paths:
- assets/app-icon/hicolor/128x128/apps/ai.storyteller.wordcraft.png
- assets/app-icon/hicolor/16x16/apps/ai.storyteller.wordcraft.png
- assets/app-icon/hicolor/24x24/apps/ai.storyteller.wordcraft.png
- assets/app-icon/hicolor/256x256/apps/ai.storyteller.wordcraft.png
- assets/app-icon/hicolor/32x32/apps/ai.storyteller.wordcraft.png
- assets/app-icon/hicolor/48x48/apps/ai.storyteller.wordcraft.png
- assets/app-icon/hicolor/512x512/apps/ai.storyteller.wordcraft.png
- assets/app-icon/hicolor/64x64/apps/ai.storyteller.wordcraft.png
- assets/app-icon/hicolor/scalable/apps/ai.storyteller.wordcraft.svg
- assets/app-icon/wordcraft-1024.png
- assets/app-icon/wordcraft-macos-512.png
- assets/app-icon/wordcraft.icns
- assets/app-icon/wordcraft.ico
- assets/app-icon/wordcraft.svg
- docs/images/backstage.png
- docs/images/dark.png
- docs/images/design.png
- docs/images/hero.png
- docs/images/layout.png
- docs/images/references.png
- docs/images/review.png
- packaging/macos/Info.plist.in
- packaging/macos/dmg/README.md
- packaging/macos/dmg/background.svg
- packaging/macos/dmg/background.tiff
- packaging/macos/dmg/dmg-layout.DS_Store
- packaging/macos/dmg/generate.py
- packaging/macos/entitlements.plist
- packaging/macos/import-cert.sh
- packaging/macos/package.sh
- sage-3982 approved the 103 enumerated feature items across eight manifests,
mechanical script only, build copies only. Scratch application completed;
original vendor unchanged. A committed reproducible generator/test is pending
the packaging decision; no third-party source/feature edits are hand-applied.
- sage-3983 permits custom cfg fuzzing/loom/miri false under a sanitized,
refusing release environment. Third-party target inventory is now 28 manifests
/ 59 sections. It narrows the feature gate to root-specific package/selected
feature closure equality: S0's workspace-unified 293-node feature metadata is
context, not an equality target. Exact 199 normal /209 normal+build identities
remain the acceptance sets.
- Following that reduction, metadata refuses on encoding_rs/simdutf8 under a
target_feature=simd128 cfg. Pinned rustc default cfg has no simd128. The filter
retained target-feature flags as unknown. Scope stop per sage-3983: one-page
PACKAGING-BOUNDARY.md and complete survey sent to Sage in gyro-0010. No further
cfg/dependency category changed. No release build, commit, push or live change.
- Mos mos-1572/1573 via sage-3979: landing held pending Jason/Vikunja618; gyro
review-branch push is allowed after validation, with full binary listing.
Whole-row and runtime-only pack-size measurements are required after a local
verified commit; offline tool availability/provenance/timing also requested.
## Measured-cfg reduction under sage-3984g
Pinned rustc cfg is rustc-wasm32-cfg.txt. releaseEnvironment refuses inherited flag variables and forwards only an allowlist to the cfg measurement. Filter evaluator and mechanical feature cleanup are in build.mjs; no optional normal dependency removed.
- aes-0.9.3: remove dependencies under cfg(any(target_arch = "aarch64", target_arch = "x86_64", target_arch = "x86")); dependencies cpufeatures.
- bytes-1.12.1: remove dev-dependencies under cfg(loom); dependencies loom.
- cmov-0.5.4: remove dev-dependencies under cfg(any(unix, windows)); dependencies proptest.
- eframe-0.36.2: remove dependencies under cfg(any(target_os = "macos")); dependencies objc2.
- eframe-0.36.2: remove dependencies under cfg(any(target_os = "macos")); dependencies objc2-app-kit.
- eframe-0.36.2: remove dependencies under cfg(any(target_os = "macos")); dependencies objc2-foundation.
- eframe-0.36.2: remove dependencies under cfg(any(target_os = "windows")); dependencies windows-sys.
- eframe-0.36.2: remove dependencies under cfg(not(target_arch = "wasm32")); dependencies egui-wgpu.
- eframe-0.36.2: remove dependencies under cfg(not(target_arch = "wasm32")); dependencies egui-winit.
- eframe-0.36.2: remove dependencies under cfg(not(target_arch = "wasm32")); dependencies glutin.
- eframe-0.36.2: remove dependencies under cfg(not(target_arch = "wasm32")); dependencies glutin-winit.
- eframe-0.36.2: remove dependencies under cfg(not(target_arch = "wasm32")); dependencies image.
- eframe-0.36.2: remove dependencies under cfg(not(target_arch = "wasm32")); dependencies pollster.
- eframe-0.36.2: remove dependencies under cfg(not(target_arch = "wasm32")); dependencies winit.
- eframe-0.36.2: remove dev-dependencies under cfg(not(target_arch = "wasm32")); dependencies directories.
- eframe-0.36.2: feature accesskit removes egui-winit/accesskit; dependency egui-winit removed under cfg(not(target_arch = "wasm32")).
- eframe-0.36.2: feature android-game-activity removes egui-winit/android-game-activity; dependency egui-winit removed under cfg(not(target_arch = "wasm32")).
- eframe-0.36.2: feature android-native-activity removes egui-winit/android-native-activity; dependency egui-winit removed under cfg(not(target_arch = "wasm32")).
- eframe-0.36.2: feature default removes winit/default; dependency winit removed under cfg(not(target_arch = "wasm32")).
- eframe-0.36.2: feature glow removes dep:glutin-winit; dependency glutin-winit removed under cfg(not(target_arch = "wasm32")).
- eframe-0.36.2: feature glow removes dep:glutin; dependency glutin removed under cfg(not(target_arch = "wasm32")).
- eframe-0.36.2: feature links removes egui-winit/links; dependency egui-winit removed under cfg(not(target_arch = "wasm32")).
- eframe-0.36.2: feature persistence removes egui-winit/serde; dependency egui-winit removed under cfg(not(target_arch = "wasm32")).
- eframe-0.36.2: feature wayland removes egui-winit/wayland; dependency egui-winit removed under cfg(not(target_arch = "wasm32")).
- eframe-0.36.2: feature wayland removes glutin?/wayland; dependency glutin removed under cfg(not(target_arch = "wasm32")).
- eframe-0.36.2: feature wayland removes glutin-winit?/wayland; dependency glutin-winit removed under cfg(not(target_arch = "wasm32")).
- eframe-0.36.2: feature wgpu_no_default_features removes dep:pollster; dependency pollster removed under cfg(not(target_arch = "wasm32")).
- eframe-0.36.2: feature x11 removes egui-winit/x11; dependency egui-winit removed under cfg(not(target_arch = "wasm32")).
- eframe-0.36.2: feature x11 removes glutin?/x11; dependency glutin removed under cfg(not(target_arch = "wasm32")).
- eframe-0.36.2: feature x11 removes glutin?/glx; dependency glutin removed under cfg(not(target_arch = "wasm32")).
- eframe-0.36.2: feature x11 removes glutin-winit?/x11; dependency glutin-winit removed under cfg(not(target_arch = "wasm32")).
- eframe-0.36.2: feature x11 removes glutin-winit?/glx; dependency glutin-winit removed under cfg(not(target_arch = "wasm32")).
- encoding_rs-0.8.42: remove dependencies under cfg(all(any(target_arch = "x86_64", target_arch = "x86"), not(all(target_feature = "avx2", target_feature = "bmi1")))); dependencies multiversion.
- encoding_rs-0.8.42: remove dependencies under cfg(any(target_arch = "x86_64", target_arch = "x86")); dependencies core_detect.
- encoding_rs-0.8.42: remove dependencies under cfg(any(target_arch = "x86_64", target_arch = "x86", target_arch = "aarch64", all(target_arch = "wasm32", target_feature = "simd128"))); dependencies simdutf8.
- encoding_rs-0.8.42: feature std removes dep:multiversion; dependency multiversion removed under cfg(all(any(target_arch = "x86_64", target_arch = "x86"), not(all(target_feature = "avx2", target_feature = "bmi1")))).
- getrandom-0.3.4: remove dependencies under cfg(all(any(target_os = "linux", target_os = "android"), not(any(all(target_os = "linux", target_env = ""), getrandom_backend = "custom", getrandom_backend = "linux_raw", getrandom_backend = "rdrand", getrandom_backend = "rndr")))); dependencies libc.
- getrandom-0.3.4: remove dependencies under cfg(all(target_arch = "wasm32", any(target_os = "unknown", target_os = "none"), target_feature = "atomics")); dependencies js-sys.
- getrandom-0.3.4: remove dependencies under cfg(all(target_arch = "wasm32", target_os = "wasi", target_env = "p2")); dependencies wasip2.
- getrandom-0.3.4: remove dependencies under cfg(all(target_os = "uefi", getrandom_backend = "efi_rng")); dependencies r-efi.
- getrandom-0.3.4: remove dependencies under cfg(any(target_os = "dragonfly", target_os = "freebsd", target_os = "hurd", target_os = "illumos", target_os = "cygwin", all(target_os = "horizon", target_arch = "arm"))); dependencies libc.
- getrandom-0.3.4: remove dependencies under cfg(any(target_os = "haiku", target_os = "redox", target_os = "nto", target_os = "aix")); dependencies libc.
- getrandom-0.3.4: remove dependencies under cfg(any(target_os = "ios", target_os = "visionos", target_os = "watchos", target_os = "tvos")); dependencies libc.
- getrandom-0.3.4: remove dependencies under cfg(any(target_os = "macos", target_os = "openbsd", target_os = "vita", target_os = "emscripten")); dependencies libc.
- getrandom-0.3.4: remove dependencies under cfg(target_os = "netbsd"); dependencies libc.
- getrandom-0.3.4: remove dependencies under cfg(target_os = "solaris"); dependencies libc.
- getrandom-0.3.4: remove dependencies under cfg(target_os = "vxworks"); dependencies libc.
- getrandom-0.3.4: feature wasm_js removes dep:js-sys; dependency js-sys removed under cfg(all(target_arch = "wasm32", any(target_os = "unknown", target_os = "none"), target_feature = "atomics")).
- half-2.7.1: remove dependencies under cfg(target_arch = "spirv"); dependencies crunchy.
- harfrust-0.12.0: remove dev-dependencies under cfg(target_vendor = "apple"); dependencies objc2-core-foundation.
- harfrust-0.12.0: remove dev-dependencies under cfg(target_vendor = "apple"); dependencies objc2-core-text.
- harfrust-0.13.3: remove dev-dependencies under cfg(target_vendor = "apple"); dependencies objc2-core-foundation.
- harfrust-0.13.3: remove dev-dependencies under cfg(target_vendor = "apple"); dependencies objc2-core-text.
- hashbrown-0.17.1: remove dependencies under cfg(any()); dependencies serde.
- hashbrown-0.17.1: remove dev-dependencies under cfg(unix); dependencies libc.
- hashbrown-0.17.1: feature serde removes dep:serde; dependency serde removed under cfg(any()).
- indexmap-2.14.2: remove dependencies under cfg(any()); dependencies serde.
- indexmap-2.14.2: feature serde removes dep:serde; dependency serde removed under cfg(any()).
- parking_lot_core-0.9.12: remove dependencies under cfg(target_os = "redox"); dependencies redox_syscall.
- parking_lot_core-0.9.12: remove dependencies under cfg(unix); dependencies libc.
- parking_lot_core-0.9.12: remove dependencies under cfg(windows); dependencies windows-link.
- png-0.18.1: remove dev-dependencies under cfg(not(target_arch = "wasm32")); dependencies criterion.
- rfd-0.17.2: remove dependencies under cfg(any(target_os = "linux", target_os = "freebsd", target_os = "dragonfly", target_os = "netbsd", target_os = "openbsd")); dependencies glib-sys.
- rfd-0.17.2: remove dependencies under cfg(any(target_os = "linux", target_os = "freebsd", target_os = "dragonfly", target_os = "netbsd", target_os = "openbsd")); dependencies gobject-sys.
- rfd-0.17.2: remove dependencies under cfg(any(target_os = "linux", target_os = "freebsd", target_os = "dragonfly", target_os = "netbsd", target_os = "openbsd")); dependencies gtk-sys.
- rfd-0.17.2: remove dependencies under cfg(any(target_os = "linux", target_os = "freebsd", target_os = "dragonfly", target_os = "netbsd", target_os = "openbsd")); dependencies libc.
- rfd-0.17.2: remove dependencies under cfg(any(target_os = "linux", target_os = "freebsd", target_os = "dragonfly", target_os = "netbsd", target_os = "openbsd")); dependencies percent-encoding.
- rfd-0.17.2: remove dependencies under cfg(any(target_os = "linux", target_os = "freebsd", target_os = "dragonfly", target_os = "netbsd", target_os = "openbsd")); dependencies pollster.
- rfd-0.17.2: remove dependencies under cfg(any(target_os = "linux", target_os = "freebsd", target_os = "dragonfly", target_os = "netbsd", target_os = "openbsd")); dependencies wayland-backend.
- rfd-0.17.2: remove dependencies under cfg(any(target_os = "linux", target_os = "freebsd", target_os = "dragonfly", target_os = "netbsd", target_os = "openbsd")); dependencies wayland-client.
- rfd-0.17.2: remove dependencies under cfg(any(target_os = "linux", target_os = "freebsd", target_os = "dragonfly", target_os = "netbsd", target_os = "openbsd")); dependencies wayland-protocols.
- rfd-0.17.2: remove dependencies under cfg(target_os = "macos"); dependencies block2.
- rfd-0.17.2: remove dependencies under cfg(target_os = "macos"); dependencies dispatch2.
- rfd-0.17.2: remove dependencies under cfg(target_os = "macos"); dependencies objc2.
- rfd-0.17.2: remove dependencies under cfg(target_os = "macos"); dependencies objc2-app-kit.
- rfd-0.17.2: remove dependencies under cfg(target_os = "macos"); dependencies objc2-core-foundation.
- rfd-0.17.2: remove dependencies under cfg(target_os = "macos"); dependencies objc2-foundation.
- rfd-0.17.2: remove dependencies under cfg(target_os = "windows"); dependencies windows-sys.
- rfd-0.17.2: feature common-controls-v6 removes windows-sys/Win32_UI_Controls; dependency windows-sys removed under cfg(target_os = "windows").
- rfd-0.17.2: feature gtk3 removes gtk-sys; dependency gtk-sys removed under cfg(any(target_os = "linux", target_os = "freebsd", target_os = "dragonfly", target_os = "netbsd", target_os = "openbsd")).
- rfd-0.17.2: feature gtk3 removes glib-sys; dependency glib-sys removed under cfg(any(target_os = "linux", target_os = "freebsd", target_os = "dragonfly", target_os = "netbsd", target_os = "openbsd")).
- rfd-0.17.2: feature gtk3 removes gobject-sys; dependency gobject-sys removed under cfg(any(target_os = "linux", target_os = "freebsd", target_os = "dragonfly", target_os = "netbsd", target_os = "openbsd")).
- rfd-0.17.2: feature wayland removes wayland-backend; dependency wayland-backend removed under cfg(any(target_os = "linux", target_os = "freebsd", target_os = "dragonfly", target_os = "netbsd", target_os = "openbsd")).
- rfd-0.17.2: feature wayland removes wayland-client; dependency wayland-client removed under cfg(any(target_os = "linux", target_os = "freebsd", target_os = "dragonfly", target_os = "netbsd", target_os = "openbsd")).
- rfd-0.17.2: feature wayland removes wayland-protocols; dependency wayland-protocols removed under cfg(any(target_os = "linux", target_os = "freebsd", target_os = "dragonfly", target_os = "netbsd", target_os = "openbsd")).
- rfd-0.17.2: feature xdg-portal removes pollster; dependency pollster removed under cfg(any(target_os = "linux", target_os = "freebsd", target_os = "dragonfly", target_os = "netbsd", target_os = "openbsd")).
- serde_core-1.0.229: remove dependencies under cfg(any()); dependencies serde_derive.
- serde_json-1.0.151: remove dependencies under cfg(any()); dependencies serde.
- sha1-0.11.0: remove dependencies under cfg(any(target_arch = "aarch64", target_arch = "x86", target_arch = "x86_64")); dependencies cpufeatures.
- sha2-0.11.0: remove dependencies under cfg(any(target_arch = "aarch64", target_arch = "x86_64", target_arch = "x86")); dependencies cpufeatures.
- sys-locale-0.3.2: remove dependencies under cfg(target_os = "android"); dependencies libc.
- uuid-1.27.0: remove dependencies under cfg(all(target_arch = "wasm32", any(target_os = "unknown", target_os = "none"), target_feature = "atomics")); dependencies js-sys.
- uuid-1.27.0: remove dependencies under cfg(not(all(target_arch = "wasm32", any(target_os = "unknown", target_os = "none")))); dependencies getrandom.
- uuid-1.27.0: remove dependencies under cfg(not(all(target_arch = "wasm32", any(target_os = "unknown", target_os = "none")))); dependencies rand.
- uuid-1.27.0: remove dev-dependencies under cfg(not(target_arch = "wasm32")); dependencies gungraun.
- uuid-1.27.0: feature fast-rng removes dep:rand; dependency rand removed under cfg(not(all(target_arch = "wasm32", any(target_os = "unknown", target_os = "none")))).
- uuid-1.27.0: feature js removes dep:js-sys; dependency js-sys removed under cfg(all(target_arch = "wasm32", any(target_os = "unknown", target_os = "none"), target_feature = "atomics")).
- uuid-1.27.0: feature rng removes dep:getrandom; dependency getrandom removed under cfg(not(all(target_arch = "wasm32", any(target_os = "unknown", target_os = "none")))).
- uuid-1.27.0: feature rng-getrandom removes dep:getrandom; dependency getrandom removed under cfg(not(all(target_arch = "wasm32", any(target_os = "unknown", target_os = "none")))).
- uuid-1.27.0: feature rng-rand removes dep:rand; dependency rand removed under cfg(not(all(target_arch = "wasm32", any(target_os = "unknown", target_os = "none")))).
- uuid-1.27.0: feature std removes js-sys?/std; dependency js-sys removed under cfg(all(target_arch = "wasm32", any(target_os = "unknown", target_os = "none"), target_feature = "atomics")).
- wasm-bindgen-0.2.129: remove dev-dependencies under cfg(all(target_os = "emscripten", wasm_bindgen_unstable_tokio)); dependencies tokio.
- wasm-bindgen-0.2.129: remove dev-dependencies under cfg(target_arch = "wasm64"); dependencies paste.
- wasm-bindgen-0.2.129: remove dev-dependencies under cfg(target_arch = "wasm64"); dependencies serde_derive.
- wasm-bindgen-futures-0.4.79: remove dependencies under cfg(all(target_os = "emscripten", wasm_bindgen_unstable_tokio)); dependencies tokio.
- web-time-1.1.0: remove dev-dependencies under cfg(all(target_family = "wasm", target_feature = "atomics")); dependencies futures-channel.
- web-time-1.1.0: remove dev-dependencies under cfg(all(target_family = "wasm", target_feature = "atomics")); dependencies futures-util.
- web-time-1.1.0: remove dev-dependencies under cfg(all(target_family = "wasm", target_feature = "atomics")); dependencies web-sys.
- web-time-1.1.0: remove dev-dependencies under cfg(not(target_family = "wasm")); dependencies pollster.
- wgpu-30.0.1: remove dependencies under cfg(not(target_arch = "wasm32")); dependencies smallvec.
- wgpu-30.0.1: remove dependencies under cfg(not(target_arch = "wasm32")); dependencies wgpu-core.
- wgpu-30.0.1: remove dependencies under cfg(not(target_arch = "wasm32")); dependencies wgpu-hal.
- wgpu-30.0.1: remove dependencies under cfg(not(target_has_atomic = "64")); dependencies portable-atomic.
- wgpu-30.0.1: remove dependencies under cfg(target_os = "emscripten"); dependencies smallvec.
- wgpu-30.0.1: remove dependencies under cfg(target_os = "emscripten"); dependencies wgpu-core.
- wgpu-30.0.1: remove dependencies under cfg(target_os = "emscripten"); dependencies wgpu-hal.
- wgpu-core-30.0.1: remove dependencies under cfg(any(windows, target_os = "linux", target_os = "android", target_os = "freebsd")); dependencies wgpu-core-deps-windows-linux-android.
- wgpu-core-30.0.1: remove dependencies under cfg(not(target_has_atomic = "64")); dependencies portable-atomic.
- wgpu-core-30.0.1: remove dependencies under cfg(target_os = "emscripten"); dependencies wgpu-core-deps-emscripten.
- wgpu-core-30.0.1: remove dependencies under cfg(target_vendor = "apple"); dependencies wgpu-core-deps-apple.
- wgpu-core-30.0.1: feature angle removes wgpu-core-deps-apple/angle; dependency wgpu-core-deps-apple removed under cfg(target_vendor = "apple").
- wgpu-core-30.0.1: feature drm removes wgpu-core-deps-windows-linux-android/drm; dependency wgpu-core-deps-windows-linux-android removed under cfg(any(windows, target_os = "linux", target_os = "android", target_os = "freebsd")).
- wgpu-core-30.0.1: feature dx12 removes wgpu-core-deps-windows-linux-android/dx12; dependency wgpu-core-deps-windows-linux-android removed under cfg(any(windows, target_os = "linux", target_os = "android", target_os = "freebsd")).
- wgpu-core-30.0.1: feature gles removes wgpu-core-deps-windows-linux-android/gles; dependency wgpu-core-deps-windows-linux-android removed under cfg(any(windows, target_os = "linux", target_os = "android", target_os = "freebsd")).
- wgpu-core-30.0.1: feature gles removes wgpu-core-deps-emscripten/gles; dependency wgpu-core-deps-emscripten removed under cfg(target_os = "emscripten").
- wgpu-core-30.0.1: feature metal removes wgpu-core-deps-apple/metal; dependency wgpu-core-deps-apple removed under cfg(target_vendor = "apple").
- wgpu-core-30.0.1: feature portable-atomic removes dep:portable-atomic; dependency portable-atomic removed under cfg(not(target_has_atomic = "64")).
- wgpu-core-30.0.1: feature renderdoc removes wgpu-core-deps-windows-linux-android/renderdoc; dependency wgpu-core-deps-windows-linux-android removed under cfg(any(windows, target_os = "linux", target_os = "android", target_os = "freebsd")).
- wgpu-core-30.0.1: feature vulkan removes wgpu-core-deps-windows-linux-android/vulkan; dependency wgpu-core-deps-windows-linux-android removed under cfg(any(windows, target_os = "linux", target_os = "android", target_os = "freebsd")).
- wgpu-core-30.0.1: feature vulkan-portability removes wgpu-core-deps-apple/vulkan-portability; dependency wgpu-core-deps-apple removed under cfg(target_vendor = "apple").
- wgpu-hal-30.0.1: remove dependencies under cfg(all(unix, not(target_vendor = "apple"), not(target_family = "wasm"))); dependencies drm.
- wgpu-hal-30.0.1: remove dependencies under cfg(all(windows, not(target_arch = "aarch64"), target_env = "msvc")); dependencies mach-dxcompiler-rs.
- wgpu-hal-30.0.1: remove dependencies under cfg(any(not(target_has_atomic = "64"), not(target_has_atomic = "ptr"))); dependencies portable-atomic.
- wgpu-hal-30.0.1: remove dev-dependencies under cfg(not(any(target_arch = "wasm32", target_os = "ios", target_os = "visionos", target_env = "ohos"))); dependencies glutin.
- wgpu-hal-30.0.1: remove dev-dependencies under cfg(not(any(target_arch = "wasm32", target_os = "ios", target_os = "visionos", target_env = "ohos"))); dependencies glutin-winit.
- wgpu-hal-30.0.1: remove dependencies under cfg(not(target_arch = "wasm32")); dependencies ash.
- wgpu-hal-30.0.1: remove dependencies under cfg(not(target_arch = "wasm32")); dependencies gpu-allocator.
- wgpu-hal-30.0.1: remove dependencies under cfg(not(target_arch = "wasm32")); dependencies khronos-egl.
- wgpu-hal-30.0.1: remove dependencies under cfg(not(target_arch = "wasm32")); dependencies libloading.
- wgpu-hal-30.0.1: remove dependencies under cfg(not(target_arch = "wasm32")); dependencies renderdoc-sys.
- wgpu-hal-30.0.1: remove dependencies under cfg(not(target_arch = "wasm32")); dependencies smallvec.
- wgpu-hal-30.0.1: remove dependencies under cfg(not(target_has_atomic = "ptr")); dependencies portable-atomic-util.
- wgpu-hal-30.0.1: remove dependencies under cfg(target_os = "android"); dependencies android_system_properties.
- wgpu-hal-30.0.1: remove dependencies under cfg(target_os = "android"); dependencies ndk-sys.
- wgpu-hal-30.0.1: remove dependencies under cfg(target_os = "emscripten"); dependencies khronos-egl.
- wgpu-hal-30.0.1: remove dependencies under cfg(target_os = "emscripten"); dependencies libloading.
- wgpu-hal-30.0.1: remove dependencies under cfg(target_vendor = "apple"); dependencies block2.
- wgpu-hal-30.0.1: remove dependencies under cfg(target_vendor = "apple"); dependencies bytemuck.
- wgpu-hal-30.0.1: remove dependencies under cfg(target_vendor = "apple"); dependencies objc2.
- wgpu-hal-30.0.1: remove dependencies under cfg(target_vendor = "apple"); dependencies objc2-core-foundation.
- wgpu-hal-30.0.1: remove dependencies under cfg(target_vendor = "apple"); dependencies objc2-core-graphics.
- wgpu-hal-30.0.1: remove dependencies under cfg(target_vendor = "apple"); dependencies objc2-foundation.
- wgpu-hal-30.0.1: remove dependencies under cfg(target_vendor = "apple"); dependencies objc2-metal.
- wgpu-hal-30.0.1: remove dependencies under cfg(target_vendor = "apple"); dependencies objc2-quartz-core.
- wgpu-hal-30.0.1: remove dependencies under cfg(target_vendor = "apple"); dependencies raw-window-metal.
- wgpu-hal-30.0.1: remove dependencies under cfg(unix); dependencies libc.
- wgpu-hal-30.0.1: remove dependencies under cfg(unix); dependencies wayland-sys.
- wgpu-hal-30.0.1: remove dependencies under cfg(windows); dependencies bit-set.
- wgpu-hal-30.0.1: remove dependencies under cfg(windows); dependencies glutin_wgl_sys.
- wgpu-hal-30.0.1: remove dependencies under cfg(windows); dependencies once_cell.
- wgpu-hal-30.0.1: remove dependencies under cfg(windows); dependencies range-alloc.
- wgpu-hal-30.0.1: remove dependencies under cfg(windows); dependencies windows.
- wgpu-hal-30.0.1: remove dependencies under cfg(windows); dependencies windows-core.
- wgpu-hal-30.0.1: remove dependencies under cfg(windows); dependencies windows-result.
- wgpu-hal-30.0.1: feature dx12 removes dep:bit-set; dependency bit-set removed under cfg(windows).
- wgpu-hal-30.0.1: feature dx12 removes dep:gpu-allocator; dependency gpu-allocator removed under cfg(not(target_arch = "wasm32")).
- wgpu-hal-30.0.1: feature dx12 removes dep:libloading; dependency libloading removed under cfg(not(target_arch = "wasm32")) / cfg(target_os = "emscripten").
- wgpu-hal-30.0.1: feature dx12 removes dep:once_cell; dependency once_cell removed under cfg(windows).
- wgpu-hal-30.0.1: feature dx12 removes dep:range-alloc; dependency range-alloc removed under cfg(windows).
- wgpu-hal-30.0.1: feature dx12 removes dep:windows-core; dependency windows-core removed under cfg(windows).
- wgpu-hal-30.0.1: feature dx12 removes gpu-allocator/d3d12; dependency gpu-allocator removed under cfg(not(target_arch = "wasm32")).
- wgpu-hal-30.0.1: feature dx12 removes once_cell/std; dependency once_cell removed under cfg(windows).
- wgpu-hal-30.0.1: feature dx12 removes windows/Win32_Devices_DeviceAndDriverInstallation; dependency windows removed under cfg(windows).
- wgpu-hal-30.0.1: feature dx12 removes windows/Win32_Devices_Display; dependency windows removed under cfg(windows).
- wgpu-hal-30.0.1: feature dx12 removes windows/Win32_Graphics_Direct3D_Dxc; dependency windows removed under cfg(windows).
- wgpu-hal-30.0.1: feature dx12 removes windows/Win32_Graphics_Direct3D_Fxc; dependency windows removed under cfg(windows).
- wgpu-hal-30.0.1: feature dx12 removes windows/Win32_Graphics_Direct3D; dependency windows removed under cfg(windows).
- wgpu-hal-30.0.1: feature dx12 removes windows/Win32_Graphics_Direct3D12; dependency windows removed under cfg(windows).
- wgpu-hal-30.0.1: feature dx12 removes windows/Win32_Graphics_DirectComposition; dependency windows removed under cfg(windows).
- wgpu-hal-30.0.1: feature dx12 removes windows/Win32_Graphics_Dxgi_Common; dependency windows removed under cfg(windows).
- wgpu-hal-30.0.1: feature dx12 removes windows/Win32_Graphics_Gdi; dependency windows removed under cfg(windows).
- wgpu-hal-30.0.1: feature dx12 removes windows/Win32_Security; dependency windows removed under cfg(windows).
- wgpu-hal-30.0.1: feature dx12 removes windows/Win32_System_Diagnostics_Debug; dependency windows removed under cfg(windows).
- wgpu-hal-30.0.1: feature dx12 removes windows/Win32_System_Kernel; dependency windows removed under cfg(windows).
- wgpu-hal-30.0.1: feature dx12 removes windows/Win32_System_Performance; dependency windows removed under cfg(windows).
- wgpu-hal-30.0.1: feature dx12 removes windows/Win32_System_Threading; dependency windows removed under cfg(windows).
- wgpu-hal-30.0.1: feature dx12 removes windows/Win32_UI_WindowsAndMessaging; dependency windows removed under cfg(windows).
- wgpu-hal-30.0.1: feature gles removes dep:glutin_wgl_sys; dependency glutin_wgl_sys removed under cfg(windows).
- wgpu-hal-30.0.1: feature gles removes dep:khronos-egl; dependency khronos-egl removed under cfg(not(target_arch = "wasm32")) / cfg(target_os = "emscripten").
- wgpu-hal-30.0.1: feature gles removes dep:libloading; dependency libloading removed under cfg(not(target_arch = "wasm32")) / cfg(target_os = "emscripten").
- wgpu-hal-30.0.1: feature gles removes dep:ndk-sys; dependency ndk-sys removed under cfg(target_os = "android").
- wgpu-hal-30.0.1: feature gles removes dep:objc2; dependency objc2 removed under cfg(target_vendor = "apple").
- wgpu-hal-30.0.1: feature gles removes dep:wayland-sys; dependency wayland-sys removed under cfg(unix).
- wgpu-hal-30.0.1: feature gles removes dep:windows-result; dependency windows-result removed under cfg(windows).
- wgpu-hal-30.0.1: feature gles removes windows-result/std; dependency windows-result removed under cfg(windows).
- wgpu-hal-30.0.1: feature gles removes windows/Win32_Graphics_Gdi; dependency windows removed under cfg(windows).
- wgpu-hal-30.0.1: feature gles removes windows/Win32_Graphics_OpenGL; dependency windows removed under cfg(windows).
- wgpu-hal-30.0.1: feature gles removes windows/Win32_System_LibraryLoader; dependency windows removed under cfg(windows).
- wgpu-hal-30.0.1: feature gles removes windows/Win32_UI_WindowsAndMessaging; dependency windows removed under cfg(windows).
- wgpu-hal-30.0.1: feature metal removes dep:block2; dependency block2 removed under cfg(target_vendor = "apple").
- wgpu-hal-30.0.1: feature metal removes dep:libloading; dependency libloading removed under cfg(not(target_arch = "wasm32")) / cfg(target_os = "emscripten").
- wgpu-hal-30.0.1: feature metal removes dep:objc2; dependency objc2 removed under cfg(target_vendor = "apple").
- wgpu-hal-30.0.1: feature metal removes dep:objc2-core-foundation; dependency objc2-core-foundation removed under cfg(target_vendor = "apple").
- wgpu-hal-30.0.1: feature metal removes dep:objc2-core-graphics; dependency objc2-core-graphics removed under cfg(target_vendor = "apple").
- wgpu-hal-30.0.1: feature metal removes dep:objc2-foundation; dependency objc2-foundation removed under cfg(target_vendor = "apple").
- wgpu-hal-30.0.1: feature metal removes dep:objc2-metal; dependency objc2-metal removed under cfg(target_vendor = "apple").
- wgpu-hal-30.0.1: feature metal removes dep:objc2-quartz-core; dependency objc2-quartz-core removed under cfg(target_vendor = "apple").
- wgpu-hal-30.0.1: feature metal removes dep:smallvec; dependency smallvec removed under cfg(not(target_arch = "wasm32")).
- wgpu-hal-30.0.1: feature metal removes dep:raw-window-metal; dependency raw-window-metal removed under cfg(target_vendor = "apple").
- wgpu-hal-30.0.1: feature portable-atomic removes dep:portable-atomic; dependency portable-atomic removed under cfg(any(not(target_has_atomic = "64"), not(target_has_atomic = "ptr"))).
- wgpu-hal-30.0.1: feature portable-atomic removes dep:portable-atomic-util; dependency portable-atomic-util removed under cfg(not(target_has_atomic = "ptr")).
- wgpu-hal-30.0.1: feature renderdoc removes dep:libloading; dependency libloading removed under cfg(not(target_arch = "wasm32")) / cfg(target_os = "emscripten").
- wgpu-hal-30.0.1: feature renderdoc removes dep:renderdoc-sys; dependency renderdoc-sys removed under cfg(not(target_arch = "wasm32")).
- wgpu-hal-30.0.1: feature static-dxc removes dep:mach-dxcompiler-rs; dependency mach-dxcompiler-rs removed under cfg(all(windows, not(target_arch = "aarch64"), target_env = "msvc")).
- wgpu-hal-30.0.1: feature vulkan removes dep:android_system_properties; dependency android_system_properties removed under cfg(target_os = "android").
- wgpu-hal-30.0.1: feature vulkan removes dep:ash; dependency ash removed under cfg(not(target_arch = "wasm32")).
- wgpu-hal-30.0.1: feature vulkan removes dep:libc; dependency libc removed under cfg(unix).
- wgpu-hal-30.0.1: feature vulkan removes dep:libloading; dependency libloading removed under cfg(not(target_arch = "wasm32")) / cfg(target_os = "emscripten").
- wgpu-hal-30.0.1: feature vulkan removes dep:raw-window-metal; dependency raw-window-metal removed under cfg(target_vendor = "apple").
- wgpu-hal-30.0.1: feature vulkan removes dep:smallvec; dependency smallvec removed under cfg(not(target_arch = "wasm32")).
- wgpu-hal-30.0.1: feature vulkan removes dep:windows; dependency windows removed under cfg(windows).
- wgpu-hal-30.0.1: feature vulkan removes gpu-allocator/vulkan; dependency gpu-allocator removed under cfg(not(target_arch = "wasm32")).
- wgpu-hal-30.0.1: feature vulkan removes windows/Win32; dependency windows removed under cfg(windows).
- wgpu-hal-30.0.1: feature vulkan removes windows/Win32_Devices_Display; dependency windows removed under cfg(windows).
- wgpu-hal-30.0.1: feature vulkan removes windows/Win32_Foundation; dependency windows removed under cfg(windows).
- wgpu-hal-30.0.1: feature vulkan removes windows/Win32_Graphics_Dxgi; dependency windows removed under cfg(windows).
- wgpu-hal-30.0.1: feature vulkan removes windows/Win32_Graphics_Dxgi_Common; dependency windows removed under cfg(windows).
- wgpu-hal-30.0.1: feature vulkan removes windows/Win32_Graphics_Gdi; dependency windows removed under cfg(windows).
- zerocopy-0.8.61: remove dependencies under cfg(any()); dependencies zerocopy-derive.
- zip-3.0.0: remove dependencies under cfg(fuzzing); dependencies arbitrary.
Count correction: 28 changed manifests /121 individual TOML dependency table sections /109 feature items. Earlier57/59 counted grouped cfg+kind sections, not individual dependency tables. Initial indexmap failure exposed my filter treating a dev-dependency as preserving an optional normal dependency; fixed only that bookkeeping bug with a failing then passing regression. No inventory expansion.
Resolution stop: vello_cpu0.1.0 optional normal glifo ^0.2.0 (locked0.2.0) is outside reviewed209 (reviewed glifo is0.3.0). No cfg-filtered section controls it. Stopped per sage-3984g; no import/fetch. Offline size receipt full-lock-cache-size.json: 538 third-party lock records =534 registry +4 git. Default cache175 present/359 missing,16,666,072 archive bytes; existing Louie toolchain cache534 present/0 missing,85,234,501 bytes; S0 cache412 present/122 missing,44,438,740 bytes. Sent Sage gyro-0011. Root closure/release/CSP acceptance is unproved.
## Full-lock scratch measurement — sage-3992
Scope is measurement only, entirely under
`/mnt/storage/scratch/gyro-full-lock-measure-95ntu6t0`. No additional source,
outputs or tool binaries imported into the repository; no commit/push. The
restricted-runtime/security/CSP gates remain open. No further manifest surgery.
Extraction from Louie's pre-existing cache verified every registry archive
against the ORIGINAL Cargo.lock checksum, with no fetch. All four git lock
records were excluded from this extraction. Registry results (534 packages):
- Original archive total: 85,234,501 bytes.
- Extracted archive content: 24,844 files / 611,577,974 bytes.
- Including 534 generated Cargo checksum files: 25,378 files / 614,049,226 bytes.
- Beyond the reviewed 209, the full 538 lock set adds 329 packages: 328 registry
plus one git package. The additional registry content alone is 15,005 files /
484,646,629 bytes including generated checksums. The fourth git package was
neither fetched nor copied. Full details: full-lock-extracted-size.json.
For the measurement build, three ALREADY REVIEWED git packages were copied from
owned cargo-vendor into scratch after registry extraction. No new git source
was imported. Source is the owned source copy with the already approved local
15-member workspace reduction and unchanged vendor manifests/features. The exact
pinned original icon was restored only in scratch for the original Trunk index.
This builds the baseline for size/timing; it is not the restricted adapter and
cannot count as M1-M14 or zero-CSP evidence.
Before compiling, offline cargo tree with normal edges exactly matched S0's
199 third-party +15 local packages; normal,build exactly matched 209+15. The
comparison refused on any added/missing pair. Scratch metadata/tree commands and
the release command each run with unshare --user --map-root-user --net, nice19,
four Cargo jobs, isolated HOME/CARGO_HOME and a fresh scratch TMPDIR. There is no
connected network interface in these namespaces, only loopback; Cargo and Trunk
also have offline enabled and Trunk update checks disabled. Inherited Rust flags
are refused and none are set for this measurement. Release build started after
those package-closure checks; result/timing/output pack measurement pending.
Tool availability/provenance on this host:
- rustc/Cargo 1.99.1 and wasm32-unknown-unknown std: existing isolated rustup
stable toolchain under Louie's evaluation toolchain directory, installed Oct21;
rustup settings and target manifests identify it. No install repeated.
- Trunk0.22.0: existing isolated cargo install; .crates.toml records the exact
version and crates.io origin. No install repeated.
- wasm-bindgen0.2.129 and wasm-opt131: existing Trunk versioned helper cache,
copied to isolated scratch cache/PATH. No download. Their original download
commands are not present in Louie's evaluation report.
- Five executable versions/hashes and Rust support hashes: toolchain.json.
All required tools are already present; this build needs no network.
### Measurement environment correction and retry
The first measurement command succeeded in 388.757578 seconds (06:02:17.598Z
through 06:08:46.356Z). The requested `nice -n19` was relative to inherited
negative priority; compiler workers were initially nice15. I detected and set
only this build's processes/threads absolutely to19 during compilation, then
retained this result as a LIMITED timing, not a whole-run nice19 sample.
Receipt: full-lock-release-limited.json and measurement-priority-correction.json.
No baseline source change was made. Sage was told in gyro-0012 before retry.
The one environment retry authorized in sage-3992 establishes absolute nice19
before child spawn, uses a fresh target-retry directory, CARGO_BUILD_JOBS=4,
BINARYEN_CORES=4 and a four-CPU affinity inherited by all build children.
measurement-retry-priority.jsonl confirms Trunk/Cargo/rustc at19 on those CPUs.
The harness separately reprioritizes the waiting Python launcher, so launcher
priority alone is not the build-child measurement. The network namespace,
offline flags and isolated source/vendor/tool environment are unchanged.
### Full-lock measurement results (sage-3992)
The valid environment retry succeeded, exit0, in **397.864805 seconds** (06:09:38.409Z–06:16:16.274Z), from a fresh target directory. Actual Trunk/Cargo/rustc/wasm-opt children were nice19, four-CPU affinity; Cargo jobs4 and Binaryen cores4. The waiting Python launcher was independently reprioritized to-4 by the harness; that is recorded separately and does not describe build child priority. Evidence: full-lock-release-measurement.json, measurement-retry-priority.jsonl and measurement-release.log. Three existing engine dead-code warnings; no build error.
| Baseline measurement output | Bytes | SHA-256 |
|---|---:|---|
| index.html | 1604 | 299b76f4004bbc65204d561cc381b3fbb249d10069eaa50e88c7fba3b6c63cb8 |
| wordcraft-fa59e09a3f921e03.ico | 18378 | 53a23dcf66260f44d87d4d143d633395f3e967f391eda47e6e9cc3a52f820225 |
| wordcraft-web-832240fdc6ce872b_bg.wasm | 43957877 | c1c15050a9b394c21e7540aa57c9292b86d32bfea2476094a9976304dacf1de0 |
| wordcraft-web-88f7089f25a3b338.js | 164941 | 866a1de6a33eff2ded8ae9588fd049aeacfc42557a3863ccd2107b3faf4d691e |
Total runtime output: **44142800 bytes**. Output blobs alone pack to **16720159 bytes** using Git2.55.0: hash-object -w into a NEW scratch bare repo, sorted four blob IDs through pack-objects --stdout --threads=4. No git gc, no object writes in the Mosaic repository; count-objects receipts are in measurement-output-pack.json. The empty internal .trunk-lock is excluded. This is an independent four-blob pack, not a cross-version delta estimate and not the whole-row pack. Whole-row pack measurement remains unavailable because this work is not committed.
**Network access was disabled:** every Cargo/Trunk command ran in a new isolated user/network namespace with no connected interface; the topology receipt shows only zero-traffic loopback. Cargo and Trunk offline flags and disabled Trunk version checks were also enforced. No fetch/install was needed. No host HOME, Cargo config or credentials were passed into the build environment.
Read-only metadata observation: the unfiltered scratch resolver has238 package records; root tree joins give exactly214 normal and224 normal+build (199/209 third-party +15 local). Fourteen metadata-only extra packages total14,523,104 extracted bytes. measurement-resolution-extra-packages.json lists them for the packaging decision; no smaller vendor experiment/import was performed, and this does not clear additional source for landing.
Both requested scratch measurements are complete. No full-lock vendor source or runtime output entered the repository, no commit/push, no serving route or live change. The packaging choice still waits on Mos/Jason; M1–M14, restricted adapter, two-root reproducibility, CSP/browser and full package checks are unproved. Row310 stays in-progress, not in-review.
## 223-source measurement — sage-4008 and sage-4010
Mos mos-1574 requested the209+14 comparison before Jason chooses (Vikunja618). Scratch only: /mnt/storage/scratch/gyro-223-measure-mzbp0x23. The source includes exactly223 packages: owned reviewed209 plus14 checksum-verified registry archives from the existing cache. No other package, no fetch, no source adoption. Original vendor manifests are preserved for sizing.
| Pristine source set | Files incl checksums | Bytes incl checksums | Independent Git blob pack bytes |
|---|---:|---:|---:|
| Extra14 | 702 | 14523104 | 1720566 |
| Total223 | 11201 | 145260334 | 26538894 |
Packs use the prior output-pack method: source files hash-object -w --no-filters into a NEW scratch bare repository, then sorted unique blob IDs to pack-objects --stdout --threads=4, at nice19. No gc, tree/commit objects or cross-version delta estimate. Pack/input digests and count-objects: measurement-223-source-packs.json and measurement-223-input-manifest.json. Sizes include all original package files (no vendor pruning), plus generated .cargo-checksum.json.
### Resolution and lock result
Unfiltered223 with the original pin lock: metadata --offline --locked exits101 on missing native-only cpufeatures (exact error in measurement-223-unfiltered-resolution.json). Existing packet filterVendorManifest was then applied mechanically to the scratch copy:31 manifests /155 individual false-target dependency table sections /133 dangling feature items, including3 additional changed manifests from the14. No new algorithm or hand edits. Original reviewed209 source remains untouched. Filtered metadata --offline --locked exits101: cannot update Cargo.lock because --locked prevents this. Original lock remains06b745e43c13df3df7f048fa6a1981625ce7a5fe4cd484bc6254d0913d865b0b.
sage-4010 separately authorized one cargo metadata --offline run WITHOUT --locked in another scratch source copy. It exited0 and generated a lock with226 entries against the original558: **332 removed,0 added,0 changed** when comparing name/version/source/checksum entry by entry. Pruned SHA2563401363e100783dc70c8f5ba09324947c0b6f8562f1ac1cbbc61a0497200c17f. Exact diff and generated lock are measurement-223-lock-diff.json and measurement-223-pruned-Cargo.lock.txt. The original source lock was not modified, and there were no manual lock edits.
CLEAR request gyro-0015 covers one release measurement under --locked/--frozen with that generated lock, nice19,4 jobs/cores, isolated netns, fresh HOME/CARGO_HOME/TMPDIR/target and one environment-fault retry. sage-4011 approves the description but withholds CLEAR until row327 landing gate finishes (roughly06:45–06:55Z). **No223 release build has run.** Packaging choice and row310 remain held. Shipping a pruned lock is itself a packaging change needing S0 reviewer and Jason's choice; this measurement does not adopt it.
### Fourteen-package source and notice inventory
Every source is registry+https://github.com/rust-lang/crates.io-index. Exact archive SHA256/size and notice-file SHA256/size: measurement-223-inputs.json; all present notice text: measurement-14-notices.txt. No election or license approval is asserted.
| Package | Version | Declared license expression | Notice/license files present |
|---|---|---|---|
| cursor-icon | 1.2.0 | MIT OR Apache-2.0 OR Zlib | LICENSE-APACHE, LICENSE-MIT, LICENSE-ZLIB |
| dpi | 0.1.2 | Apache-2.0 AND MIT | LICENSE, LICENSE-LIBM-MIT |
| futures-macro | 0.3.34 | MIT OR Apache-2.0 | LICENSE-APACHE, LICENSE-MIT |
| glifo | 0.2.0 | Apache-2.0 OR MIT | LICENSE-APACHE, LICENSE-MIT |
| ordered-float | 5.5.0 | MIT | LICENSE-MIT |
| pin-project | 1.1.13 | Apache-2.0 OR MIT | LICENSE-APACHE, LICENSE-MIT |
| pin-project-internal | 1.1.13 | Apache-2.0 OR MIT | LICENSE-APACHE, LICENSE-MIT |
| smol_str | 0.2.2 | MIT OR Apache-2.0 | LICENSE-APACHE, LICENSE-MIT |
| spirv | 0.4.0+sdk-1.4.341.0 | Apache-2.0 | **None present** |
| termcolor | 1.4.1 | Unlicense OR MIT | COPYING, LICENSE-MIT, UNLICENSE |
| tracing | 0.1.44 | MIT | LICENSE |
| tracing-attributes | 0.1.31 | MIT | LICENSE |
| tracing-core | 0.1.36 | MIT | LICENSE, src/spin/LICENSE |
| winit | 0.30.13 | Apache-2.0 | LICENSE |
spirv has no license/notice file in its archive despite declaring Apache-2.0; this needs Gladstone's notice review before adoption. dpi declares Apache-2.0 AND MIT and includes LICENSE-LIBM-MIT; tracing-core includes an additional src/spin/LICENSE. Both are inventoried, not flattened to a single default text. No source code or binaries from any crate are included in this plain-text evidence commit.
Plain-text packet hygiene: trailing spaces in Node assertion transcripts normalized before commit (filter-dev-red.txt, cfg-red.txt, filter-red.txt); test outcomes and source/notice hashes unchanged.
## 223 release result and notice supplement — sage-4014
sage-4014 CLEAR supersedes the earlier slot hold. Build started06:31:53.099Z and finished06:38:13.773Z, exit0, **380.674036 seconds**. No retry used. Frozen+locked generated lock remains3401363e100783dc70c8f5ba09324947c0b6f8562f1ac1cbbc61a0497200c17f; original06b745e4... remains unchanged. Actual Trunk/Cargo/rustc/wasm-opt at nice19, CPUs12–15, Cargo jobs4/Binaryen cores4; fresh HOME/CARGO_HOME/TMPDIR/target; isolated netns with no external interface and offline/update-check-disabled tooling. No network access or fetch. Three existing engine dead-code warnings; no build error. Slot released to Sage for Bradford in gyro-0018 immediately after completion.
Frozen/offline cargo-tree preflight exactly matches S0:214 normal and224 normal+build records (199/209 third-party plus15 local), no added/missing package identities. measurement-223-build-preflight.json records this.
| Scratch baseline output | Bytes | SHA-256 |
|---|---:|---|
| index.html | 1604 | 28ce55d5c017d545aaac91bbd96f22e6ebd3b35af8d856315cdcb150a2a4a57d |
| wordcraft-fa59e09a3f921e03.ico | 18378 | 53a23dcf66260f44d87d4d143d633395f3e967f391eda47e6e9cc3a52f820225 |
| wordcraft-web-88f7089f25a3b338.js | 164941 | 866a1de6a33eff2ded8ae9588fd049aeacfc42557a3863ccd2107b3faf4d691e |
| wordcraft-web-8e80c8f64c8671f7_bg.wasm | 43952335 | 0322beb9e58b9abeed6b6e05125879bfb3eccbebb05094e191df3542a74007ea |
Total output **44137258 bytes**. The WASM SHA256 **does not equal** the full-lock build c1c15050a9b394c21e7540aa57c9292b86d32bfea2476094a9976304dacf1de0. No reproducibility or functional/CSP equivalence is asserted. Source roots and packaging differ; this run does not isolate the reason for the hash difference. Full result, child priority observations and log: measurement-223-build.json, measurement-223-build-priority.jsonl, measurement-223-release.log.
### Gladstone supplemental review and notice response
gladstone-0026 (06:37:48Z) independently checked the14 original archive checksums and original manifest/source/license inventory:10 supplemental PASS /4 CONCERN. This is not adoption or candidate approval. Checked flags: winit has one cfg-alias build script; futures-macro, pin-project-internal and tracing-attributes are proc-macros; winit has native cfg paths and Worker/Blob source. None of14 appears in the measured normal/build target closure. Source-level Worker/native flags do not imply permission to select those paths or relax Q234.
The filename-only notice collector missed embedded W3C terms in cursor-icon/src/lib.rs and winit/src/keyboard.rs. After re-reading those actual headers, measurement-14-notices.txt now includes each complete embedded license, short notice, source document URI and attribution. measurement-14-notice-supplement.json records original source hashes/line spans and extracted text hashes. The added W3C form remains an explicit S0/license-adoption review gate, not silently folded into the root SPDX expressions.
dpi remains **Apache-2.0 AND MIT** for the full-source inventory: both root LICENSE and LICENSE-LIBM-MIT retained, plus README feature explanation and complete libm copyright header added to the notice packet. No Apache-only election. tracing-core retains root LICENSE and distinct src/spin/LICENSE. spirv has no text file in its archive; supplemental mapping explicitly supplies the standard Apache-2.0 text from the pinned WordCraft LICENSE-APACHE, following S0 M13 missing-file treatment, with its source pin/hash recorded. This is an evidence mapping, not a shipping approval.
measurement-14-binary-inputs.json now lists all four winit example PNGs: examples/data/cross.png159B, cross2.png129B, gradient.png229B, icon.png2950B, each with SHA256. No other non-UTF8/NUL payload among14. They remain scratch source inputs; no binary is in this evidence commit.
All runtime outputs and all223 crate sources remain scratch-only. Only plain-text results/notices/metadata are committed. Shipping the pruned lock, the14 additions, new W3C notice form and repository size still require S0 reviewer/owner choices. Row310 stays held for Vikunja618; restricted adapter, M1–M14, two-root reproducibility and CSP/browser acceptance remain unproved.
## Supplemental notice recheck — gladstone-0027
Gladstone rechecked the collection delta at9522d2356 against1716f5a22 on
2026-10-24T06:44:42Z. All four prior notice-collection/mapping gaps now PASS as
supplemental evidence: cursor-icon embedded W3C text/attribution, dpi full-source
conjunction/copyrights, spirv explicit standard Apache-2.0 text mapping, and
winit embedded W3C text plus four example PNG records. The earlier ten package
source/notice PASS results stand. tracing-core root/spin license texts remain
complete. No additional collection gap was found in this requested delta.
Reviewer independently verified original header/source hashes and extracted
notice hashes, PNG/archive bytes, all12 incremental path hashes and changed-path
set, UTF8/no-NUL boundary and diff whitespace check. Bundle SHA256
4d8e2aac5de85d3f3145d5d3945924436d1c30bc043fb3e2d4391cd98b1adbde also matches
this worktree's fresh hash check.
This recheck is **not adoption or candidate approval**. New W3C terms still need
explicit M13/license/owner adoption review; dpi conjunction and spirv mapping
must carry into any shipped M13 bundle; PNG classification and future selection
of Worker/native paths remain explicit gates. Gladstone did not rerun or
functionally/CSP-validate the WASM. Its differing hash, the pruned lock and
packaging/size choice remain uncleared. S0 M1–M14, Jason's choice/Vikunja618 and
the row310 hold remain in force. No further build, source, notice-text or runtime
change was made to record this result.
@@ -1,57 +0,0 @@
# W2 offline packaging decision — 2026-10-24
Sage requested this consolidated stop report in sage-3983. No additional
category has been applied. No release build, commit or push has run.
The original source/lock resolve packages outside the reviewed WASM target.
The imported vendor tree contains exactly S0's 209 third-party identities:
199 normal plus 10 build-only; the web root adds 15 local crates. Original
source lock has 538 third-party records; S0 workspace metadata has 293 total
resolved packages after target filtering. These are different sets.
Approved and exercised only in scratch:
- Local workspace: 15 members/default web root; remove 12 dev/native sections.
Original included upstream bytes stay identical to the source pin. The local
manifest deltas are currently in source-build.patch and BUILD.md.
- Third-party target filtering: 28 manifests / 59 sections after adding explicit
false custom cfgs fuzzing/loom/miri (sage-3983); 26/57 before that ruling.
All other unknown cfgs remain unknown. target-filter-plan.json is the list.
- Dangling feature lists: 103 removed items across 8 manifests (sage-3982),
mechanically applied in scratch from dangling-features.json. Original vendor
bytes/checksums stay intact; scratch checksum updates touch only Cargo.toml.
- Release flags must refuse inherited RUSTFLAGS/CARGO_ENCODED_RUSTFLAGS/
RUSTDOCFLAGS/CARGO_TARGET_*_RUSTFLAGS/CARGO_BUILD_RUSTFLAGS. Not yet implemented.
- Gate narrowing from sage-3983: compare root-specific resolved package/selected
feature closures before/after packaging, not complete workspace-unified S0
feature text. Both package closures must match the 199/209 S0 sets. Still
unproved: pristine 209-only vendor itself cannot resolve the broader lock.
The next refusal is an unresolved cfg category: encoding_rs 0.8.42 declares
`simdutf8` 0.1.5 under cfg(any(x86_64,x86,aarch64,all(wasm32,simd128))).
The default pinned wasm target has no simd128 feature, but the conservative
filter retains unknown target_feature conditions rather than treating every
potential target feature as false. No target_feature-based removal was made.
The latest command/error is in offline-resolution.txt. Beyond that exact
refusal, a static survey identifies 176 unconditional optional dependency
entries (110 names across 82 manifests) absent from the 209; see
unselected-dependency-resolution.json. These are not current errors and no
such dependency was removed. They show why continued iterative reduction may
require another category. This is a lower-bound survey, not a claim that
removing all of those would make resolution succeed.
Decision requested: continue reducing target-feature and unselected optional dependency metadata,
or adopt the full-lock vendor tree with a separately identified resolution-only
inventory. I recommend the full-lock vendor approach: it preserves upstream
manifests/features and makes before/after root-closure comparison possible
without accumulating more manifest surgery. It adds source/notice review and
size; no extra package should enter the compiled web closure. This is not
permission to fetch/import extra sources. Sage decides that boundary.
Current tree sizes: upstream 582 files / 21,021,869 bytes; vendor 209 packages /
10,499 files / 130,737,230 bytes; combined 151,759,099 bytes. Upstream exclusions
are the authorized 30 icon/screenshot/macOS packaging paths, all enumerated in
BUILD.md/PROVENANCE.json. No license/notice/copyright is omitted; no vendor file
is dropped. Binary path/size inventory is binary-inputs.json (18 upstream and
74 vendor non-text files). Source subset/integrity checks pass 3/3; build test
is 1/2, with runtime-output check expected red because nothing is built yet.
@@ -1,370 +0,0 @@
[
{
"path": "packages/webui/third_party/wordcraft/upstream/assets/fonts/Inter-Medium.ttf",
"bytes": 417300
},
{
"path": "packages/webui/third_party/wordcraft/upstream/assets/fonts/Inter-Regular.ttf",
"bytes": 411640
},
{
"path": "packages/webui/third_party/wordcraft/upstream/assets/fonts/Inter-SemiBold.ttf",
"bytes": 419744
},
{
"path": "packages/webui/third_party/wordcraft/upstream/assets/fonts/JetBrainsMono-Regular.ttf",
"bytes": 270224
},
{
"path": "packages/webui/third_party/wordcraft/upstream/assets/fonts/SourceSans3-Bold.ttf",
"bytes": 428176
},
{
"path": "packages/webui/third_party/wordcraft/upstream/assets/fonts/SourceSans3-It.ttf",
"bytes": 315812
},
{
"path": "packages/webui/third_party/wordcraft/upstream/assets/fonts/SourceSans3-Regular.ttf",
"bytes": 431196
},
{
"path": "packages/webui/third_party/wordcraft/upstream/assets/fonts/SourceSans3-Semibold.ttf",
"bytes": 425904
},
{
"path": "packages/webui/third_party/wordcraft/upstream/assets/fonts/SourceSerif4-Bold.ttf",
"bytes": 271568
},
{
"path": "packages/webui/third_party/wordcraft/upstream/assets/fonts/SourceSerif4-BoldIt.ttf",
"bytes": 191832
},
{
"path": "packages/webui/third_party/wordcraft/upstream/assets/fonts/SourceSerif4-It.ttf",
"bytes": 187808
},
{
"path": "packages/webui/third_party/wordcraft/upstream/assets/fonts/SourceSerif4-Regular.ttf",
"bytes": 261868
},
{
"path": "packages/webui/third_party/wordcraft/upstream/assets/fonts/SourceSerif4-Semibold.ttf",
"bytes": 272088
},
{
"path": "packages/webui/third_party/wordcraft/upstream/assets/hyphenation/en-us.dic",
"bytes": 432905
},
{
"path": "packages/webui/third_party/wordcraft/upstream/docs/brand/artcraft-logo-white.png",
"bytes": 32161
},
{
"path": "packages/webui/third_party/wordcraft/upstream/docs/brand/artcraft-logo.png",
"bytes": 31302
},
{
"path": "packages/webui/third_party/wordcraft/upstream/docs/brand/artcraft-mark-black.png",
"bytes": 26793
},
{
"path": "packages/webui/third_party/wordcraft/upstream/docs/brand/artcraft-mark.png",
"bytes": 24715
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/aes-0.9.3/tests/data/aes128.blb",
"bytes": 27420
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/aes-0.9.3/tests/data/aes192.blb",
"bytes": 41324
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/aes-0.9.3/tests/data/aes256.blb",
"bytes": 49596
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/brotli-decompressor-5.0.3/src/bin/ipsum.brotli",
"bytes": 1752
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/cfb-0.15.0/tests/infinite_loops_fuzzed/loop_in_alloc",
"bytes": 14106
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/cfb-0.15.0/tests/infinite_loops_fuzzed/loop_in_chain",
"bytes": 16959
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/cfb-0.15.0/tests/infinite_loops_fuzzed/loop_in_directory",
"bytes": 13954
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/cfb-0.15.0/tests/infinite_loops_fuzzed/loop_in_minialloc",
"bytes": 14336
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/cfb-0.15.0/tests/infinite_loops_fuzzed/loop_in_minichain",
"bytes": 13992
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/cfb-0.15.0/tests/infinite_loops_fuzzed/loop_in_open_1",
"bytes": 1049
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/cfb-0.15.0/tests/infinite_loops_fuzzed/loop_in_open_2",
"bytes": 13830
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/cfb-0.15.0/tests/panics_fuzzed/alloc_panic",
"bytes": 16928
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/cfb-0.15.0/tests/panics_fuzzed/minialloc_panic",
"bytes": 16909
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/cipher-0.5.2/tests/data/dummy_stream_cipher.blb",
"bytes": 84
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/digest-0.11.3/tests/data/fixed_hash_serialization.bin",
"bytes": 16
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/eframe-0.36.2/data/icon.png",
"bytes": 12052
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/epaint_default_fonts-0.36.2/fonts/Hack-Regular.ttf",
"bytes": 309408
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/epaint_default_fonts-0.36.2/fonts/NotoEmoji-Regular.ttf",
"bytes": 418804
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/epaint_default_fonts-0.36.2/fonts/Ubuntu-Light.ttf",
"bytes": 361676
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/epaint_default_fonts-0.36.2/fonts/emoji-icon-font.ttf",
"bytes": 324132
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/fdeflate-0.3.7/tests/input-chunking-sensitivity-example1.zz",
"bytes": 207
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/fdeflate-0.3.7/tests/input-chunking-sensitivity-example2.zz",
"bytes": 41
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/fdeflate-0.3.7/tests/input-chunking-sensitivity-example3.zz",
"bytes": 52
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/flate2-1.1.10/examples/hello_world.txt.gz",
"bytes": 33
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/flate2-1.1.10/tests/good-file.gz",
"bytes": 6766
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/flate2-1.1.10/tests/multi.gz",
"bytes": 53
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/hmac-0.13.0/tests/data/hmac_md5_rfc2104.blb",
"bytes": 246
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/hmac-0.13.0/tests/data/hmac_sha1_wycheproof.blb",
"bytes": 4877
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/hmac-0.13.0/tests/data/hmac_sha224_rfc4231.blb",
"bytes": 804
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/hmac-0.13.0/tests/data/hmac_sha256_rfc4231.blb",
"bytes": 832
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/hmac-0.13.0/tests/data/hmac_sha256_wycheproof.blb",
"bytes": 6155
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/hmac-0.13.0/tests/data/hmac_sha384_rfc4231.blb",
"bytes": 944
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/hmac-0.13.0/tests/data/hmac_sha384_wycheproof.blb",
"bytes": 7859
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/hmac-0.13.0/tests/data/hmac_sha512_rfc4231.blb",
"bytes": 1063
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/hmac-0.13.0/tests/data/hmac_sha512_wycheproof.blb",
"bytes": 9650
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/hmac-0.13.0/tests/data/hmac_streebog256_gost.blb",
"bytes": 85
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/hmac-0.13.0/tests/data/hmac_streebog512_gost.blb",
"bytes": 118
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/krilla-0.8.2/icc/sGrey-v2-magic.icc",
"bytes": 616
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/krilla-0.8.2/icc/sGrey-v4.icc",
"bytes": 360
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/krilla-0.8.2/icc/sRGB-v2-magic.icc",
"bytes": 736
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/krilla-0.8.2/icc/sRGB-v4.icc",
"bytes": 480
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/pdf-writer-0.15.0/examples/bear-1280x720.jpg",
"bytes": 67710
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/pdf-writer-0.15.0/examples/bear-1280x720.mp4",
"bytes": 715963
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/pdf-writer-0.15.0/examples/rhino.png",
"bytes": 215287
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/pdf-writer-0.15.0/examples/sRGB_v4.icc",
"bytes": 60960
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/pdf-writer-0.15.0/examples/tiger-cmyk.jpg",
"bytes": 945216
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/sha1-0.11.0/tests/data/sha1_kat.blb",
"bytes": 235
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/sha1-0.11.0/tests/data/sha1_serialization.bin",
"bytes": 92
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/sha2-0.11.0/tests/data/sha224_kat.blb",
"bytes": 179
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/sha2-0.11.0/tests/data/sha224_serialization.bin",
"bytes": 104
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/sha2-0.11.0/tests/data/sha256_kat.blb",
"bytes": 191
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/sha2-0.11.0/tests/data/sha256_serialization.bin",
"bytes": 104
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/sha2-0.11.0/tests/data/sha384_kat.blb",
"bytes": 239
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/sha2-0.11.0/tests/data/sha384_serialization.bin",
"bytes": 208
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/sha2-0.11.0/tests/data/sha512_224_kat.blb",
"bytes": 179
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/sha2-0.11.0/tests/data/sha512_224_serialization.bin",
"bytes": 208
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/sha2-0.11.0/tests/data/sha512_256_kat.blb",
"bytes": 191
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/sha2-0.11.0/tests/data/sha512_256_serialization.bin",
"bytes": 208
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/sha2-0.11.0/tests/data/sha512_kat.blb",
"bytes": 290
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/sha2-0.11.0/tests/data/sha512_serialization.bin",
"bytes": 208
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/tiff-0.11.3/tests/decodedata-rgb-3c-8b.tiff",
"bytes": 30180
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/ttf-parser-0.25.1/examples/wasm/TTC.ttc",
"bytes": 2608
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/ttf-parser-0.25.1/tests/fonts/bitmap.otb",
"bytes": 2072
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/ttf-parser-0.25.1/tests/fonts/colr_1.ttf",
"bytes": 21568
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/ttf-parser-0.25.1/tests/fonts/colr_1_variable.ttf",
"bytes": 53096
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/ttf-parser-0.25.1/tests/fonts/demo.ttf",
"bytes": 400
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/unicode-ident-1.0.26/tests/fst/xid_continue.fst",
"bytes": 78779
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/unicode-ident-1.0.26/tests/fst/xid_start.fst",
"bytes": 69927
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/vello_common-0.1.0/assets/probe.png",
"bytes": 877
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/vello_common-0.1.0/assets/probe.rgba",
"bytes": 10404
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/vello_common-0.2.0/assets/probe.png",
"bytes": 877
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/vello_common-0.2.0/assets/probe.rgba",
"bytes": 10404
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/zlib-rs-0.6.8/src/deflate/test-data/inflate_buf_error.dat",
"bytes": 67008
},
{
"path": "packages/webui/third_party/wordcraft/cargo-vendor/zlib-rs-0.6.8/src/deflate/test-data/paper-100k.pdf",
"bytes": 102400
}
]
@@ -1,27 +0,0 @@
✔ release build refuses a missing or mismatched pinned tool before compilation (4.631422ms)
✖ shipped runtime is self-contained and matches every output receipt (0.349349ms)
ℹ tests 2
ℹ suites 0
ℹ pass 1
ℹ fail 1
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 48.123956
✖ failing tests:
test at packages/webui/tests/wordcraft-build.test.mjs:14:1
✖ shipped runtime is self-contained and matches every output receipt (0.349349ms)
Error: ENOENT: no such file or directory, open '/home/jwoltje/.t3/worktrees/mosaic-stack/gyro-row310/packages/webui/wordcraft/BUILD.json'
at readFileSync (node:fs:621:20)
at readJSON (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gyro-row310/packages/webui/wordcraft/build.mjs:9:37)
at verifyOutputs (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gyro-row310/packages/webui/wordcraft/build.mjs:61:19)
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gyro-row310/packages/webui/tests/wordcraft-build.test.mjs:17:18)
at async Test.run (node:internal/test_runner/test:1409:7)
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
errno: -2,
code: 'ENOENT',
syscall: 'open',
path: '/home/jwoltje/.t3/worktrees/mosaic-stack/gyro-row310/packages/webui/wordcraft/BUILD.json'
}
-46
View File
@@ -1,46 +0,0 @@
✖ release build refuses a missing or mismatched pinned tool before compilation (0.932948ms)
✖ shipped runtime is self-contained and matches every output receipt (0.1963ms)
ℹ tests 2
ℹ suites 0
ℹ pass 0
ℹ fail 2
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 48.311391
✖ failing tests:
test at packages/webui/tests/wordcraft-build.test.mjs:7:1
✖ release build refuses a missing or mismatched pinned tool before compilation (0.932948ms)
AssertionError [ERR_ASSERTION]: owned builder must exist
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gyro-row310/packages/webui/tests/wordcraft-build.test.mjs:8:10)
at Test.runInAsyncScope (node:async_hooks:226:14)
at Test.run (node:internal/test_runner/test:1402:25)
at Test.start (node:internal/test_runner/test:1262:17)
at startSubtestAfterBootstrap (node:internal/test_runner/harness:387:17) {
generatedMessage: false,
code: 'ERR_ASSERTION',
actual: false,
expected: true,
operator: '==',
diff: 'simple'
}
test at packages/webui/tests/wordcraft-build.test.mjs:14:1
✖ shipped runtime is self-contained and matches every output receipt (0.1963ms)
AssertionError [ERR_ASSERTION]: owned builder must exist
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gyro-row310/packages/webui/tests/wordcraft-build.test.mjs:15:10)
at Test.runInAsyncScope (node:async_hooks:226:14)
at Test.run (node:internal/test_runner/test:1402:25)
at Test.processPendingSubtests (node:internal/test_runner/test:974:18)
at Test.postRun (node:internal/test_runner/test:1542:19)
at Test.run (node:internal/test_runner/test:1467:12)
at async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3) {
generatedMessage: false,
code: 'ERR_ASSERTION',
actual: false,
expected: true,
operator: '==',
diff: 'simple'
}
File diff suppressed because it is too large. Load diff
-10
View File
@@ -1,10 +0,0 @@
✔ release cfg evaluation follows pinned rustc and refuses inherited flags (7.782219ms)
✔ pinned compiler reproduces the recorded wasm target cfg (10.432502ms)
ℹ tests 2
ℹ suites 0
ℹ pass 2
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 59.893168
-38
View File
@@ -1,38 +0,0 @@
✖ release cfg evaluation follows pinned rustc and refuses inherited flags (9.116481ms)
✖ pinned compiler reproduces the recorded wasm target cfg (0.413075ms)
ℹ tests 2
ℹ suites 0
ℹ pass 0
ℹ fail 2
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 62.764015
✖ failing tests:
test at packages/webui/tests/wordcraft-build.test.mjs:25:1
✖ release cfg evaluation follows pinned rustc and refuses inherited flags (9.116481ms)
AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:
+ actual - expected
+ 'undefined'
- 'function'
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gyro-row310/packages/webui/tests/wordcraft-build.test.mjs:27:10)
at async Test.run (node:internal/test_runner/test:1409:7)
at async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3) {
generatedMessage: true,
code: 'ERR_ASSERTION',
actual: 'undefined',
expected: 'function',
operator: 'strictEqual',
diff: 'simple'
}
test at packages/webui/tests/wordcraft-build.test.mjs:39:1
✖ pinned compiler reproduces the recorded wasm target cfg (0.413075ms)
TypeError: releaseEnvironment is not a function
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gyro-row310/packages/webui/tests/wordcraft-build.test.mjs:43:121)
at async Test.run (node:internal/test_runner/test:1409:7)
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7)
@@ -1,517 +0,0 @@
[
{
"crate": "eframe-0.36.2",
"feature": "accesskit",
"edge": "egui-winit/accesskit"
},
{
"crate": "eframe-0.36.2",
"feature": "android-game-activity",
"edge": "egui-winit/android-game-activity"
},
{
"crate": "eframe-0.36.2",
"feature": "android-native-activity",
"edge": "egui-winit/android-native-activity"
},
{
"crate": "eframe-0.36.2",
"feature": "default",
"edge": "winit/default"
},
{
"crate": "eframe-0.36.2",
"feature": "glow",
"edge": "dep:glutin-winit"
},
{
"crate": "eframe-0.36.2",
"feature": "glow",
"edge": "dep:glutin"
},
{
"crate": "eframe-0.36.2",
"feature": "links",
"edge": "egui-winit/links"
},
{
"crate": "eframe-0.36.2",
"feature": "persistence",
"edge": "egui-winit/serde"
},
{
"crate": "eframe-0.36.2",
"feature": "wayland",
"edge": "egui-winit/wayland"
},
{
"crate": "eframe-0.36.2",
"feature": "wayland",
"edge": "glutin?/wayland"
},
{
"crate": "eframe-0.36.2",
"feature": "wayland",
"edge": "glutin-winit?/wayland"
},
{
"crate": "eframe-0.36.2",
"feature": "wgpu_no_default_features",
"edge": "dep:pollster"
},
{
"crate": "eframe-0.36.2",
"feature": "x11",
"edge": "egui-winit/x11"
},
{
"crate": "eframe-0.36.2",
"feature": "x11",
"edge": "glutin?/x11"
},
{
"crate": "eframe-0.36.2",
"feature": "x11",
"edge": "glutin?/glx"
},
{
"crate": "eframe-0.36.2",
"feature": "x11",
"edge": "glutin-winit?/x11"
},
{
"crate": "eframe-0.36.2",
"feature": "x11",
"edge": "glutin-winit?/glx"
},
{
"crate": "encoding_rs-0.8.42",
"feature": "std",
"edge": "dep:multiversion"
},
{
"crate": "hashbrown-0.17.1",
"feature": "serde",
"edge": "dep:serde"
},
{
"crate": "indexmap-2.14.2",
"feature": "serde",
"edge": "dep:serde"
},
{
"crate": "rfd-0.17.2",
"feature": "common-controls-v6",
"edge": "windows-sys/Win32_UI_Controls"
},
{
"crate": "rfd-0.17.2",
"feature": "gtk3",
"edge": "gtk-sys"
},
{
"crate": "rfd-0.17.2",
"feature": "gtk3",
"edge": "glib-sys"
},
{
"crate": "rfd-0.17.2",
"feature": "gtk3",
"edge": "gobject-sys"
},
{
"crate": "rfd-0.17.2",
"feature": "wayland",
"edge": "wayland-backend"
},
{
"crate": "rfd-0.17.2",
"feature": "wayland",
"edge": "wayland-client"
},
{
"crate": "rfd-0.17.2",
"feature": "wayland",
"edge": "wayland-protocols"
},
{
"crate": "rfd-0.17.2",
"feature": "xdg-portal",
"edge": "pollster"
},
{
"crate": "uuid-1.27.0",
"feature": "fast-rng",
"edge": "dep:rand"
},
{
"crate": "uuid-1.27.0",
"feature": "rng",
"edge": "dep:getrandom"
},
{
"crate": "uuid-1.27.0",
"feature": "rng-getrandom",
"edge": "dep:getrandom"
},
{
"crate": "uuid-1.27.0",
"feature": "rng-rand",
"edge": "dep:rand"
},
{
"crate": "wgpu-core-30.0.1",
"feature": "angle",
"edge": "wgpu-core-deps-apple/angle"
},
{
"crate": "wgpu-core-30.0.1",
"feature": "drm",
"edge": "wgpu-core-deps-windows-linux-android/drm"
},
{
"crate": "wgpu-core-30.0.1",
"feature": "dx12",
"edge": "wgpu-core-deps-windows-linux-android/dx12"
},
{
"crate": "wgpu-core-30.0.1",
"feature": "gles",
"edge": "wgpu-core-deps-windows-linux-android/gles"
},
{
"crate": "wgpu-core-30.0.1",
"feature": "gles",
"edge": "wgpu-core-deps-emscripten/gles"
},
{
"crate": "wgpu-core-30.0.1",
"feature": "metal",
"edge": "wgpu-core-deps-apple/metal"
},
{
"crate": "wgpu-core-30.0.1",
"feature": "renderdoc",
"edge": "wgpu-core-deps-windows-linux-android/renderdoc"
},
{
"crate": "wgpu-core-30.0.1",
"feature": "vulkan",
"edge": "wgpu-core-deps-windows-linux-android/vulkan"
},
{
"crate": "wgpu-core-30.0.1",
"feature": "vulkan-portability",
"edge": "wgpu-core-deps-apple/vulkan-portability"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "dx12",
"edge": "dep:bit-set"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "dx12",
"edge": "dep:gpu-allocator"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "dx12",
"edge": "dep:libloading"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "dx12",
"edge": "dep:once_cell"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "dx12",
"edge": "dep:range-alloc"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "dx12",
"edge": "dep:windows-core"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "dx12",
"edge": "gpu-allocator/d3d12"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "dx12",
"edge": "once_cell/std"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "dx12",
"edge": "windows/Win32_Devices_DeviceAndDriverInstallation"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "dx12",
"edge": "windows/Win32_Devices_Display"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "dx12",
"edge": "windows/Win32_Graphics_Direct3D_Dxc"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "dx12",
"edge": "windows/Win32_Graphics_Direct3D_Fxc"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "dx12",
"edge": "windows/Win32_Graphics_Direct3D"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "dx12",
"edge": "windows/Win32_Graphics_Direct3D12"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "dx12",
"edge": "windows/Win32_Graphics_DirectComposition"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "dx12",
"edge": "windows/Win32_Graphics_Dxgi_Common"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "dx12",
"edge": "windows/Win32_Graphics_Gdi"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "dx12",
"edge": "windows/Win32_Security"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "dx12",
"edge": "windows/Win32_System_Diagnostics_Debug"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "dx12",
"edge": "windows/Win32_System_Kernel"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "dx12",
"edge": "windows/Win32_System_Performance"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "dx12",
"edge": "windows/Win32_System_Threading"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "dx12",
"edge": "windows/Win32_UI_WindowsAndMessaging"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "gles",
"edge": "dep:glutin_wgl_sys"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "gles",
"edge": "dep:khronos-egl"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "gles",
"edge": "dep:libloading"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "gles",
"edge": "dep:ndk-sys"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "gles",
"edge": "dep:objc2"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "gles",
"edge": "dep:wayland-sys"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "gles",
"edge": "dep:windows-result"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "gles",
"edge": "windows-result/std"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "gles",
"edge": "windows/Win32_Graphics_Gdi"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "gles",
"edge": "windows/Win32_Graphics_OpenGL"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "gles",
"edge": "windows/Win32_System_LibraryLoader"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "gles",
"edge": "windows/Win32_UI_WindowsAndMessaging"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "metal",
"edge": "dep:block2"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "metal",
"edge": "dep:libloading"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "metal",
"edge": "dep:objc2"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "metal",
"edge": "dep:objc2-core-foundation"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "metal",
"edge": "dep:objc2-core-graphics"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "metal",
"edge": "dep:objc2-foundation"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "metal",
"edge": "dep:objc2-metal"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "metal",
"edge": "dep:objc2-quartz-core"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "metal",
"edge": "dep:smallvec"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "metal",
"edge": "dep:raw-window-metal"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "renderdoc",
"edge": "dep:libloading"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "renderdoc",
"edge": "dep:renderdoc-sys"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "static-dxc",
"edge": "dep:mach-dxcompiler-rs"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "vulkan",
"edge": "dep:android_system_properties"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "vulkan",
"edge": "dep:ash"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "vulkan",
"edge": "dep:libc"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "vulkan",
"edge": "dep:libloading"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "vulkan",
"edge": "dep:raw-window-metal"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "vulkan",
"edge": "dep:smallvec"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "vulkan",
"edge": "dep:windows"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "vulkan",
"edge": "gpu-allocator/vulkan"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "vulkan",
"edge": "windows/Win32"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "vulkan",
"edge": "windows/Win32_Devices_Display"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "vulkan",
"edge": "windows/Win32_Foundation"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "vulkan",
"edge": "windows/Win32_Graphics_Dxgi"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "vulkan",
"edge": "windows/Win32_Graphics_Dxgi_Common"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "vulkan",
"edge": "windows/Win32_Graphics_Gdi"
}
]
@@ -1,28 +0,0 @@
✖ a dev dependency cannot preserve a removed optional feature dependency (9.223259ms)
ℹ tests 1
ℹ suites 0
ℹ pass 0
ℹ fail 1
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 55.624704
✖ failing tests:
test at packages/webui/tests/wordcraft-build.test.mjs:61:1
✖ a dev dependency cannot preserve a removed optional feature dependency (9.223259ms)
AssertionError [ERR_ASSERTION]: The input did not match the regular expression /serde = \[\]/. Input:
'[features]\nserde = ["dep:serde"]\n[dev-dependencies.serde]\nversion = "1"\n'
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gyro-row310/packages/webui/tests/wordcraft-build.test.mjs:65:10)
at async Test.run (node:internal/test_runner/test:1409:7)
at async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3) {
generatedMessage: true,
code: 'ERR_ASSERTION',
actual: '[features]\nserde = ["dep:serde"]\n[dev-dependencies.serde]\nversion = "1"\n',
expected: /serde = \[\]/,
operator: 'match',
diff: 'simple'
}
@@ -1,14 +0,0 @@
✔ release build refuses a missing or mismatched pinned tool before compilation (5.38916ms)
✔ release cfg evaluation follows pinned rustc and refuses inherited flags (0.546102ms)
✔ pinned compiler reproduces the recorded wasm target cfg (11.861748ms)
✔ vendor filtering removes only false target sections and their dangling feature edges (1.475556ms)
✔ a dev dependency cannot preserve a removed optional feature dependency (0.239783ms)
✔ pristine vendor deterministically reproduces the recorded filter inventory and patch (49.412038ms)
ℹ tests 6
ℹ suites 0
ℹ pass 6
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 117.789074
@@ -1,25 +0,0 @@
✖ pristine vendor deterministically reproduces the recorded filter inventory and patch (77.792167ms)
ℹ tests 1
ℹ suites 0
ℹ pass 0
ℹ fail 1
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 126.569143
✖ failing tests:
test at packages/webui/tests/wordcraft-build.test.mjs:69:1
✖ pristine vendor deterministically reproduces the recorded filter inventory and patch (77.792167ms)
AssertionError [ERR_ASSERTION]: patch must contain exactly the mechanically reproduced vendor changes
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gyro-row310/packages/webui/tests/wordcraft-build.test.mjs:99:12)
at async Test.run (node:internal/test_runner/test:1409:7)
at async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3) {
generatedMessage: false,
code: 'ERR_ASSERTION',
actual: false,
expected: true,
operator: '==',
diff: 'simple'
}
-30
View File
@@ -1,30 +0,0 @@
✖ vendor filtering removes only false target sections and their dangling feature edges (7.574024ms)
ℹ tests 1
ℹ suites 0
ℹ pass 0
ℹ fail 1
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 49.047592
✖ failing tests:
test at packages/webui/tests/wordcraft-build.test.mjs:48:1
✖ vendor filtering removes only false target sections and their dangling feature edges (7.574024ms)
AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:
+ actual - expected
+ 'undefined'
- 'function'
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gyro-row310/packages/webui/tests/wordcraft-build.test.mjs:50:10)
at async Test.run (node:internal/test_runner/test:1409:7)
at async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3) {
generatedMessage: true,
code: 'ERR_ASSERTION',
actual: 'undefined',
expected: 'function',
operator: 'strictEqual',
diff: 'simple'
}
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
@@ -1,52 +0,0 @@
{
"scratchRoot": "/mnt/storage/scratch/gyro-full-lock-measure-95ntu6t0",
"startUTC": "2026-10-24T06:02:17.598071+00:00",
"endUTC": "2026-10-24T06:08:46.355786+00:00",
"wallSeconds": 388.757577938959,
"exitCode": 0,
"network": "new user/network namespace for metadata, tree and release commands; only loopback exists, no connected interface",
"nice": 19,
"cargoJobs": 4,
"flags": "no inherited Rust flag variables; no configured Rust flags; isolated CARGO_HOME and HOME",
"source": "owned pinned upstream copy, approved 15-member local workspace reduction, original vendor manifests; pinned icon restored only in scratch for original Trunk HTML; baseline measurement, NOT restricted runtime/CSP evidence",
"command": [
"unshare",
"--user",
"--map-root-user",
"--net",
"nice",
"-n",
"19",
"/mnt/storage/scratch/louie-wordcraft-toolchain/trunk/bin/trunk",
"build",
"--release",
"--locked",
"--offline",
"--skip-version-check"
],
"outputs": {
".trunk-lock": {
"bytes": 0,
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
"index.html": {
"bytes": 1604,
"sha256": "299b76f4004bbc65204d561cc381b3fbb249d10069eaa50e88c7fba3b6c63cb8"
},
"wordcraft-fa59e09a3f921e03.ico": {
"bytes": 18378,
"sha256": "53a23dcf66260f44d87d4d143d633395f3e967f391eda47e6e9cc3a52f820225"
},
"wordcraft-web-832240fdc6ce872b_bg.wasm": {
"bytes": 43957877,
"sha256": "c1c15050a9b394c21e7540aa57c9292b86d32bfea2476094a9976304dacf1de0"
},
"wordcraft-web-88f7089f25a3b338.js": {
"bytes": 164941,
"sha256": "866a1de6a33eff2ded8ae9588fd049aeacfc42557a3863ccd2107b3faf4d691e"
}
},
"validation": "timing invalid for wholly nice19 run: effective initial nice15; corrected to19 during compilation",
"initialEffectiveNice": 15,
"priorityCorrectionReceipt": "measurement-priority-correction.json"
}
@@ -1,40 +0,0 @@
{
"scratchRoot": "/mnt/storage/scratch/gyro-full-lock-measure-95ntu6t0",
"startUTC": "2026-10-24T06:09:38.408737+00:00",
"endUTC": "2026-10-24T06:16:16.273643+00:00",
"wallSeconds": 397.86480517999735,
"exitCode": 0,
"attempt": "one allowed environment retry after initial effective nice15 was detected",
"cpuAffinity": [
12,
13,
14,
15
],
"cargoJobs": 4,
"binaryenCores": 4,
"targetCache": "fresh target-retry directory",
"network": "enforced isolated user/network namespace, no external interface; Cargo/Trunk offline; Trunk update checks disabled",
"source": "baseline owned source copy plus approved local workspace reduction; vendor manifests unfiltered. Not a restricted editor/CSP gate result.",
"outputs": {
"index.html": {
"bytes": 1604,
"sha256": "299b76f4004bbc65204d561cc381b3fbb249d10069eaa50e88c7fba3b6c63cb8"
},
"wordcraft-fa59e09a3f921e03.ico": {
"bytes": 18378,
"sha256": "53a23dcf66260f44d87d4d143d633395f3e967f391eda47e6e9cc3a52f820225"
},
"wordcraft-web-832240fdc6ce872b_bg.wasm": {
"bytes": 43957877,
"sha256": "c1c15050a9b394c21e7540aa57c9292b86d32bfea2476094a9976304dacf1de0"
},
"wordcraft-web-88f7089f25a3b338.js": {
"bytes": 164941,
"sha256": "866a1de6a33eff2ded8ae9588fd049aeacfc42557a3863ccd2107b3faf4d691e"
}
},
"launcherFinalNice": -4,
"buildChildNice": 19,
"priorityEvidence": "measurement-retry-priority.jsonl: Trunk/Cargo/rustc and wasm-opt all observed at19, CPUs12-15; launcher separately reprioritized by harness"
}
@@ -1,34 +0,0 @@
[
{
"name": "winit",
"version": "0.30.13",
"archivePath": "examples/data/cross.png",
"bytes": 159,
"sha256": "4db9fec917c6cb3196872073e4168d28c4f3e0ad04c5c41865407088abf279e4",
"scope": "example data only; not a committed evidence binary or runtime approval"
},
{
"name": "winit",
"version": "0.30.13",
"archivePath": "examples/data/cross2.png",
"bytes": 129,
"sha256": "fbeeb71e5d6f24898017739d088acefb522d85108a6f1f96183e60e6b4b1f6e6",
"scope": "example data only; not a committed evidence binary or runtime approval"
},
{
"name": "winit",
"version": "0.30.13",
"archivePath": "examples/data/gradient.png",
"bytes": 229,
"sha256": "8f80c21867a59959b84f9ced19ff3aba7bf4e1cf0e2c24dea2c8465c8705c7ca",
"scope": "example data only; not a committed evidence binary or runtime approval"
},
{
"name": "winit",
"version": "0.30.13",
"archivePath": "examples/data/icon.png",
"bytes": 2950,
"sha256": "4340d72fb8b5d95a10e3b2c02230f1060dff0950a137bd1d830c63dbc020dd45",
"scope": "example data only; not a committed evidence binary or runtime approval"
}
]
@@ -1,46 +0,0 @@
{
"review": "gladstone-0026",
"scope": "supplemental inventory corrections, no adoption/implementation approval",
"records": [
{
"crate": "cursor-icon-1.2.0",
"sourcePath": "src/lib.rs",
"sourceSha256": "2f649887b91d2ea059fcf64ef8512a16c0bde72e38ff0aeb14df0f119a9885cb",
"startLine": 34,
"endLine": 102,
"noticeTextSha256": "c54d5155b68d1bd2d3ba1f6b10ee15e3c08696461c3351aef1b71d6cf22cef5e",
"terms": "embedded W3C full license, short notice, document URI and attribution; additional to root SPDX expression",
"adoption": "pending S0/M13 review and owner packaging/license choice; not a policy election"
},
{
"crate": "winit-0.30.13",
"sourcePath": "src/keyboard.rs",
"sourceSha256": "fb1400750fb0c6d376415e642c837e0e8ded95f55ba03a8889d336d180620394",
"startLine": 3,
"endLine": 70,
"noticeTextSha256": "42fe72ba50223d1042803270ecaa191072fe2c41b0f2bd1d7b1a0e19a7bbba7b",
"terms": "embedded W3C full license, short notice, document URI and attribution; additional to root SPDX expression",
"adoption": "pending S0/M13 review and owner packaging/license choice; not a policy election"
},
{
"crate": "dpi-0.1.2",
"sourcePaths": [
"README.md",
"src/libm.rs"
],
"licenseExpression": "Apache-2.0 AND MIT",
"noticeTextSha256": "a3432b00bcf66d370747a494ff8038788019340aaa8cb93c74d3b77d6c1ca025",
"retention": "LICENSE and LICENSE-LIBM-MIT remain in main notice bundle; README explanation and libm copyrights appended; no flattening/election"
},
{
"crate": "spirv-0.4.0+sdk-1.4.341.0",
"declared": "Apache-2.0",
"archiveNoticeFiles": [],
"mapping": "Apache-2.0 standard text, S0 M13 missing-file treatment",
"textSource": "WordCraft e05b7fe86f3b85454000dffc321de638d7009817:LICENSE-APACHE",
"textSha256": "0d542e0c8804e39aa7f37eb00da5a762149dc682d7829451287e11b938e94594",
"adoption": "explicit supplemental evidence mapping only; no shipping adoption or cleared notice verdict asserted"
}
],
"bundleSha256": "4d8e2aac5de85d3f3145d5d3945924436d1c30bc043fb3e2d4391cd98b1adbde"
}
File diff suppressed because it is too large. Load diff
@@ -1,44 +0,0 @@
from pathlib import Path
import os,subprocess,json,datetime,time,hashlib,re
root=Path('/mnt/storage/scratch/gyro-223-measure-root.txt').read_text().strip();root=Path(root);work=Path('agents/gyro/work/queue-310');src=root/'pruned-source'
assert hashlib.sha256((src/'Cargo.lock').read_bytes()).hexdigest()=='3401363e100783dc70c8f5ba09324947c0b6f8562f1ac1cbbc61a0497200c17f'
for k in os.environ:
if k in ['RUSTFLAGS','RUSTDOCFLAGS','CARGO_ENCODED_RUSTFLAGS','CARGO_BUILD_RUSTFLAGS'] or (k.startswith('CARGO_TARGET_') and k.endswith('_RUSTFLAGS')):raise RuntimeError('inherited flags refused: '+k)
for name in ['build-home','build-cargo-home','build-target']:(root/name).mkdir()
rust='/mnt/storage/scratch/louie-wordcraft-toolchain/rustup/toolchains/stable-x86_64-unknown-linux-gnu/bin'
trunk='/mnt/storage/scratch/louie-wordcraft-toolchain/trunk/bin/trunk'
env={'PATH':rust+':'+str(root/'cache/trunk/wasm-bindgen-0.2.129')+':'+str(root/'cache/trunk/wasm-opt-version_131/bin')+':/usr/bin:/bin','HOME':str(root/'build-home'),'CARGO_HOME':str(root/'build-cargo-home'),'XDG_CACHE_HOME':str(root/'cache'),'CARGO_NET_OFFLINE':'true','CARGO_BUILD_JOBS':'4','BINARYEN_CORES':'4','RUSTC':rust+'/rustc','CARGO_TARGET_DIR':str(root/'build-target'),'LC_ALL':'C','TZ':'UTC','TMPDIR':os.environ['TMPDIR'],'TRUNK_OFFLINE':'true','TRUNK_SKIP_VERSION_CHECK':'true','TRUNK_TOOLS_WASM_BINDGEN':'0.2.129','TRUNK_TOOLS_WASM_OPT':'version_131','SOURCE_DATE_EPOCH':'1792587600'}
cpus=sorted(os.sched_getaffinity(0))[-4:]
def limit():os.setpriority(os.PRIO_PROCESS,0,19);os.sched_setaffinity(0,cpus)
base=['unshare','--user','--map-root-user','--net']
expected=json.load(open(work/'measurement-root-closure.json'))['packages'];closures={}
for edge in ['normal','normal,build']:
cmd=base+[rust+'/cargo','tree','--offline','--frozen','--locked','-p','wordcraft-web','--target','wasm32-unknown-unknown','--edges',edge,'--prefix','none','--format','{p}']
p=subprocess.run(cmd,cwd=src,env=env,preexec_fn=limit,capture_output=True,text=True)
(root/('build-tree-'+edge.replace(',','-')+'.txt')).write_text(p.stdout+p.stderr)
actual=set()
for line in p.stdout.splitlines():
m=re.match(r'(\S+) v(\S+)',line)
if m:actual.add((m[1],m[2]))
keys={(p['name'],p['version']) for p in expected if edge=='normal,build' or p['edge']=='normal'}
closures[edge]={'exit':p.returncode,'count':len(actual),'added':sorted(actual-keys),'missing':sorted(keys-actual)}
if p.returncode or actual!=keys:
(work/'measurement-223-build-preflight.json').write_text(json.dumps(closures,indent=2)+'\n');raise RuntimeError('closure check failed: '+edge)
(work/'measurement-223-build-preflight.json').write_text(json.dumps(closures,indent=2)+'\n')
start=datetime.datetime.now(datetime.timezone.utc).isoformat();t=time.monotonic();cmd=base+[trunk,'build','--release','--frozen','--locked','--offline','--skip-version-check']
with (root/'release-build.log').open('w') as log:
child=subprocess.Popen(cmd,cwd=src/'apps/wordcraft-web',env=env,preexec_fn=limit,stdout=log,stderr=subprocess.STDOUT)
priority={'pid':child.pid,'nice':os.getpriority(os.PRIO_PROCESS,child.pid),'cpus':sorted(os.sched_getaffinity(child.pid))}
assert priority['nice']==19 and len(priority['cpus'])==4
(work/'measurement-223-build-start.json').write_text(json.dumps({'startUTC':start,'command':cmd,'priority':priority,'network':'new isolated user/network namespace; no external interface; offline/frozen/locked Cargo/Trunk'},indent=2)+'\n')
print('release started '+start+' '+str(priority),flush=True)
code=child.wait()
seconds=time.monotonic()-t;end=datetime.datetime.now(datetime.timezone.utc).isoformat()
result={'authority':'sage-4014 CLEAR; scratch measurement only','scratchRoot':str(root),'startUTC':start,'endUTC':end,'exitCode':code,'wallSeconds':seconds,'nice':19,'cpuAffinity':cpus,'cargoJobs':4,'binaryenCores':4,'freshDirectories':['HOME','CARGO_HOME','TMPDIR','target'],'lockSha256':hashlib.sha256((src/'Cargo.lock').read_bytes()).hexdigest(),'network':'isolated user/network namespace, no external interface; offline/frozen/locked and no Trunk update checks','source':'baseline measurement with existing packaging filter and cargo-generated pruned lock; not restricted adapter or CSP acceptance','outputs':{}}
if code==0:
for f in sorted((src/'dist/web').rglob('*')):
if f.is_file() and f.name!='.trunk-lock':result['outputs'][f.name]={'bytes':f.stat().st_size,'sha256':hashlib.sha256(f.read_bytes()).hexdigest()}
old=json.load(open(work/'full-lock-release-measurement.json'));oldwasm=next(v['sha256'] for k,v in old['outputs'].items() if k.endswith('.wasm'));newwasm=next(v['sha256'] for k,v in result['outputs'].items() if k.endswith('.wasm'))
result.update({'fullLockWasmSha256':oldwasm,'wasmSha256EqualsFullLock':oldwasm==newwasm})
(root/'release-measurement.json').write_text(json.dumps(result,indent=2)+'\n');(work/'measurement-223-build.json').write_text(json.dumps(result,indent=2)+'\n')
print(json.dumps(result,indent=2),flush=True)
@@ -1,14 +0,0 @@
{
"normal": {
"exit": 0,
"count": 214,
"added": [],
"missing": []
},
"normal,build": {
"exit": 0,
"count": 224,
"added": [],
"missing": []
}
}
@@ -1,2 +0,0 @@
{"atUTC": "2026-10-24T06:34:09.192942+00:00", "processes": [{"pid": 2180936, "name": "trunk", "nice": 19, "cpus": [12, 13, 14, 15]}, {"pid": 2180947, "name": "cargo", "nice": 19, "cpus": [12, 13, 14, 15]}, {"pid": 2198782, "name": "rustc", "nice": 19, "cpus": [12, 13, 14, 15]}]}
{"atUTC": "2026-10-24T06:36:42.030208+00:00", "processes": [{"pid": 2214200, "name": "wasm-opt", "nice": 19, "cpus": [12, 13, 14, 15], "threads": 5}]}
@@ -1,27 +0,0 @@
{
"startUTC": "2026-10-24T06:31:53.099322+00:00",
"command": [
"unshare",
"--user",
"--map-root-user",
"--net",
"/mnt/storage/scratch/louie-wordcraft-toolchain/trunk/bin/trunk",
"build",
"--release",
"--frozen",
"--locked",
"--offline",
"--skip-version-check"
],
"priority": {
"pid": 2180936,
"nice": 19,
"cpus": [
12,
13,
14,
15
]
},
"network": "new isolated user/network namespace; no external interface; offline/frozen/locked Cargo/Trunk"
}
@@ -1,46 +0,0 @@
{
"authority": "sage-4014 CLEAR; scratch measurement only",
"scratchRoot": "/mnt/storage/scratch/gyro-223-measure-mzbp0x23",
"startUTC": "2026-10-24T06:31:53.099322+00:00",
"endUTC": "2026-10-24T06:38:13.773390+00:00",
"exitCode": 0,
"wallSeconds": 380.6740357100498,
"nice": 19,
"cpuAffinity": [
12,
13,
14,
15
],
"cargoJobs": 4,
"binaryenCores": 4,
"freshDirectories": [
"HOME",
"CARGO_HOME",
"TMPDIR",
"target"
],
"lockSha256": "3401363e100783dc70c8f5ba09324947c0b6f8562f1ac1cbbc61a0497200c17f",
"network": "isolated user/network namespace, no external interface; offline/frozen/locked and no Trunk update checks",
"source": "baseline measurement with existing packaging filter and cargo-generated pruned lock; not restricted adapter or CSP acceptance",
"outputs": {
"index.html": {
"bytes": 1604,
"sha256": "28ce55d5c017d545aaac91bbd96f22e6ebd3b35af8d856315cdcb150a2a4a57d"
},
"wordcraft-fa59e09a3f921e03.ico": {
"bytes": 18378,
"sha256": "53a23dcf66260f44d87d4d143d633395f3e967f391eda47e6e9cc3a52f820225"
},
"wordcraft-web-88f7089f25a3b338.js": {
"bytes": 164941,
"sha256": "866a1de6a33eff2ded8ae9588fd049aeacfc42557a3863ccd2107b3faf4d691e"
},
"wordcraft-web-8e80c8f64c8671f7_bg.wasm": {
"bytes": 43952335,
"sha256": "0322beb9e58b9abeed6b6e05125879bfb3eccbebb05094e191df3542a74007ea"
}
},
"fullLockWasmSha256": "c1c15050a9b394c21e7540aa57c9292b86d32bfea2476094a9976304dacf1de0",
"wasmSha256EqualsFullLock": false
}
File diff suppressed because it is too large. Load diff
@@ -1,18 +0,0 @@
import {readFileSync,writeFileSync,readdirSync} from 'node:fs';
import {pathToFileURL} from 'node:url';
const {filterVendorManifest,sha256}=await import(pathToFileURL(`${process.cwd()}/packages/webui/wordcraft/build.mjs`));
const root=readFileSync('/mnt/storage/scratch/gyro-223-measure-root.txt','utf8').trim();
const cfg=readFileSync('agents/gyro/work/queue-310/rustc-wasm32-cfg.txt','utf8');
const inventory=[];
for(const crate of readdirSync(`${root}/vendor`).sort()) {
const path=`${root}/vendor/${crate}/Cargo.toml`;
const original=readFileSync(path,'utf8');const result=filterVendorManifest(original,cfg);
if(result.text===original)continue;
writeFileSync(path,result.text);
const checksum=JSON.parse(readFileSync(`${root}/vendor/${crate}/.cargo-checksum.json`,'utf8'));
checksum.files['Cargo.toml']=sha256(Buffer.from(result.text));
writeFileSync(`${root}/vendor/${crate}/.cargo-checksum.json`,JSON.stringify(checksum)+'\n');
inventory.push({crate,sections:result.sections,features:result.features});
}
writeFileSync('agents/gyro/work/queue-310/measurement-223-filter-inventory.json',JSON.stringify(inventory,null,2)+'\n');
console.log(JSON.stringify({manifests:inventory.length,sections:inventory.reduce((n,x)=>n+x.sections.length,0),featureItems:inventory.reduce((n,x)=>n+x.features.length,0)}));
File diff suppressed because it is too large. Load diff
@@ -1,315 +0,0 @@
{
"scratchRoot": "/mnt/storage/scratch/gyro-223-measure-mzbp0x23",
"authority": "sage-4008 / mos-1574",
"originalLockSha256": "06b745e43c13df3df7f048fa6a1981625ce7a5fe4cd484bc6254d0913d865b0b",
"packages": 223,
"extraPackages": [
{
"name": "cursor-icon",
"version": "1.2.0",
"source": "registry+https://github.com/rust-lang/crates.io-index",
"archiveSha256": "f27ae1dd37df86211c42e150270f82743308803d90a6f6e6651cd730d5e1732f",
"archiveBytes": 14267,
"license": "MIT OR Apache-2.0 OR Zlib",
"licenseFile": null,
"noticeFiles": [
{
"path": "LICENSE-APACHE",
"bytes": 11346,
"sha256": "b59affd015e517ed998dd735757f9a3693643cd389609947ed54074234a10784"
},
{
"path": "LICENSE-MIT",
"bytes": 1059,
"sha256": "c138726a726ac37bae09d0f8a48e74e8e3aa8a8952fcd10fae0fb224cc1c05f1"
},
{
"path": "LICENSE-ZLIB",
"bytes": 844,
"sha256": "01e533bd94e8f1c32b2c2531e2c398de7d35d7804add3d574b4e1fe581d53537"
}
],
"files": 14,
"bytes": 44329
},
{
"name": "dpi",
"version": "0.1.2",
"source": "registry+https://github.com/rust-lang/crates.io-index",
"archiveSha256": "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76",
"archiveBytes": 14812,
"license": "Apache-2.0 AND MIT",
"licenseFile": null,
"noticeFiles": [
{
"path": "LICENSE",
"bytes": 11323,
"sha256": "6dc0e068dcf3a5bc8e054205b85b7720e1d49265bbc64bf515d2cf79197df69a"
},
{
"path": "LICENSE-LIBM-MIT",
"bytes": 2444,
"sha256": "9eff396a99bafd208e7126602420d6864f6066c08b84485a5b032320a9c01997"
}
],
"files": 11,
"bytes": 64188
},
{
"name": "futures-macro",
"version": "0.3.34",
"source": "registry+https://github.com/rust-lang/crates.io-index",
"archiveSha256": "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44",
"archiveBytes": 11926,
"license": "MIT OR Apache-2.0",
"licenseFile": null,
"noticeFiles": [
{
"path": "LICENSE-APACHE",
"bytes": 10874,
"sha256": "275c491d6d1160553c32fd6127061d7f9606c3ea25abfad6ca3f6ed088785427"
},
{
"path": "LICENSE-MIT",
"bytes": 1094,
"sha256": "6652c868f35dfe5e8ef636810a4e576b9d663f3a17fb0f5613ad73583e1b88fd"
}
],
"files": 12,
"bytes": 41731
},
{
"name": "glifo",
"version": "0.2.0",
"source": "registry+https://github.com/rust-lang/crates.io-index",
"archiveSha256": "ed4a1bb24121291d27230c1b1b44e07d6a9b28cefdb32fe1581dfb84e14f940a",
"archiveBytes": 55880,
"license": "Apache-2.0 OR MIT",
"licenseFile": null,
"noticeFiles": [
{
"path": "LICENSE-APACHE",
"bytes": 9723,
"sha256": "62c7a1e35f56406896d7aa7ca52d0cc0d272ac022b5d2796e7d6905db8a3636a"
},
{
"path": "LICENSE-MIT",
"bytes": 1057,
"sha256": "3252fc481fda4d2bad9e1ae675065889abd35c8abb500499ac01e70aaffa02b9"
}
],
"files": 20,
"bytes": 222068
},
{
"name": "ordered-float",
"version": "5.5.0",
"source": "registry+https://github.com/rust-lang/crates.io-index",
"archiveSha256": "8c7c9e0d9b23589f26070720bac724174bfec1083e82f7854cdd0267518343c0",
"archiveBytes": 34706,
"license": "MIT",
"licenseFile": null,
"noticeFiles": [
{
"path": "LICENSE-MIT",
"bytes": 1057,
"sha256": "f7715d38a3fa1b4ac97c5729740752505a39cb92ee83ab5b102aeb5eaa7cdea4"
}
],
"files": 14,
"bytes": 179606
},
{
"name": "pin-project",
"version": "1.1.13",
"source": "registry+https://github.com/rust-lang/crates.io-index",
"archiveSha256": "2466b2336ed02bcdca6b294417127b90ec92038d1d5c4fbeac971a922e0e0924",
"archiveBytes": 56345,
"license": "Apache-2.0 OR MIT",
"licenseFile": null,
"noticeFiles": [
{
"path": "LICENSE-APACHE",
"bytes": 10174,
"sha256": "0d542e0c8804e39aa7f37eb00da5a762149dc682d7829451287e11b938e94594"
},
{
"path": "LICENSE-MIT",
"bytes": 1023,
"sha256": "23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3"
}
],
"files": 209,
"bytes": 476259
},
{
"name": "pin-project-internal",
"version": "1.1.13",
"source": "registry+https://github.com/rust-lang/crates.io-index",
"archiveSha256": "c96395f0a926bc13b1c17622aaddda1ecb55d49c8f1bf9777e4d877800a43f8b",
"archiveBytes": 29331,
"license": "Apache-2.0 OR MIT",
"licenseFile": null,
"noticeFiles": [
{
"path": "LICENSE-APACHE",
"bytes": 10174,
"sha256": "0d542e0c8804e39aa7f37eb00da5a762149dc682d7829451287e11b938e94594"
},
{
"path": "LICENSE-MIT",
"bytes": 1023,
"sha256": "23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3"
}
],
"files": 15,
"bytes": 114911
},
{
"name": "smol_str",
"version": "0.2.2",
"source": "registry+https://github.com/rust-lang/crates.io-index",
"archiveSha256": "dd538fb6910ac1099850255cf94a94df6551fbdd602454387d0adb2d1ca6dead",
"archiveBytes": 15840,
"license": "MIT OR Apache-2.0",
"licenseFile": null,
"noticeFiles": [
{
"path": "LICENSE-APACHE",
"bytes": 10847,
"sha256": "a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2"
},
{
"path": "LICENSE-MIT",
"bytes": 1023,
"sha256": "23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3"
}
],
"files": 14,
"bytes": 56395
},
{
"name": "spirv",
"version": "0.4.0+sdk-1.4.341.0",
"source": "registry+https://github.com/rust-lang/crates.io-index",
"archiveSha256": "d9571ea910ebd84c86af4b3ed27f9dbdc6ad06f17c5f96146b2b671e2976744f",
"archiveBytes": 41285,
"license": "Apache-2.0",
"licenseFile": null,
"noticeFiles": [],
"files": 9,
"bytes": 257440
},
{
"name": "termcolor",
"version": "1.4.1",
"source": "registry+https://github.com/rust-lang/crates.io-index",
"archiveSha256": "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755",
"archiveBytes": 18773,
"license": "Unlicense OR MIT",
"licenseFile": null,
"noticeFiles": [
{
"path": "COPYING",
"bytes": 126,
"sha256": "01c266bced4a434da0051174d6bee16a4c82cf634e2679b6155d40d75012390f"
},
{
"path": "LICENSE-MIT",
"bytes": 1081,
"sha256": "0f96a83840e146e43c0ec96a22ec1f392e0680e6c1226e6f3ba87e0740af850f"
},
{
"path": "UNLICENSE",
"bytes": 1211,
"sha256": "7e12e5df4bae12cb21581ba157ced20e1986a0508dd10d0e8a4ab9a4cf94e85c"
}
],
"files": 12,
"bytes": 92727
},
{
"name": "tracing",
"version": "0.1.44",
"source": "registry+https://github.com/rust-lang/crates.io-index",
"archiveSha256": "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100",
"archiveBytes": 463135,
"license": "MIT",
"licenseFile": null,
"noticeFiles": [
{
"path": "LICENSE",
"bytes": 1062,
"sha256": "898b1ae9821e98daf8964c8d6c7f61641f5f5aa78ad500020771c0939ee0dea1"
}
],
"files": 94,
"bytes": 9827320
},
{
"name": "tracing-attributes",
"version": "0.1.31",
"source": "registry+https://github.com/rust-lang/crates.io-index",
"archiveSha256": "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da",
"archiveBytes": 39733,
"license": "MIT",
"licenseFile": null,
"noticeFiles": [
{
"path": "LICENSE",
"bytes": 1062,
"sha256": "898b1ae9821e98daf8964c8d6c7f61641f5f5aa78ad500020771c0939ee0dea1"
}
],
"files": 31,
"bytes": 184696
},
{
"name": "tracing-core",
"version": "0.1.36",
"source": "registry+https://github.com/rust-lang/crates.io-index",
"archiveSha256": "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a",
"archiveBytes": 63967,
"license": "MIT",
"licenseFile": null,
"noticeFiles": [
{
"path": "LICENSE",
"bytes": 1062,
"sha256": "898b1ae9821e98daf8964c8d6c7f61641f5f5aa78ad500020771c0939ee0dea1"
},
{
"path": "src/spin/LICENSE",
"bytes": 1085,
"sha256": "58545fed1565e42d687aecec6897d35c6d37ccb71479a137c0deb2203e125c79"
}
],
"files": 29,
"bytes": 257879
},
{
"name": "winit",
"version": "0.30.13",
"source": "registry+https://github.com/rust-lang/crates.io-index",
"archiveSha256": "a6755fa58a9f8350bd1e472d4c3fcc25f824ec358933bba33306d0b63df5978d",
"archiveBytes": 605180,
"license": "Apache-2.0",
"licenseFile": null,
"noticeFiles": [
{
"path": "LICENSE",
"bytes": 11323,
"sha256": "6dc0e068dcf3a5bc8e054205b85b7720e1d49265bbc64bf515d2cf79197df69a"
}
],
"files": 218,
"bytes": 2703555
}
],
"extraFiles": 702,
"extraBytes": 14523104,
"totalFiles": 11201,
"totalBytes": 145260334,
"vendorManifestEdits": "none; original 209 packaging plus 14 checksum-verified archive extractions",
"sourceManifestEdits": "same approved local 15-member workspace reduction as prior packet, no additional changes"
}
File diff suppressed because it is too large. Load diff
@@ -1,8 +0,0 @@
command: unshare --user --map-root-user --net /mnt/storage/scratch/louie-wordcraft-toolchain/rustup/toolchains/stable-x86_64-unknown-linux-gnu/bin/cargo metadata --offline --locked --filter-platform wasm32-unknown-unknown --format-version 1
exit: 101
wallSeconds: 0.17994241300038993
STDERR:
error: cannot update the lock file /mnt/storage/scratch/gyro-223-measure-mzbp0x23/source/Cargo.lock because --locked was passed to prevent this
help: to generate the lock file without accessing the network, remove the --locked flag and use --offline instead.
STDOUT:
@@ -1,32 +0,0 @@
from pathlib import Path
import os,subprocess,json,hashlib
root=Path('/mnt/storage/scratch/gyro-223-measure-root.txt').read_text().strip();root=Path(root);work=Path('agents/gyro/work/queue-310')
os.setpriority(os.PRIO_PROCESS,0,19);os.sched_setaffinity(0,sorted(os.sched_getaffinity(0))[-4:])
env={'PATH':'/usr/bin:/bin','HOME':str(root/'home'),'LC_ALL':'C','GIT_CONFIG_NOSYSTEM':'1','GIT_CONFIG_GLOBAL':'/dev/null'}
def priority():os.setpriority(os.PRIO_PROCESS,0,19)
def call(args,**kw):return subprocess.run(args,env=env,preexec_fn=priority,check=True,**kw)
repo=root/'source-measurement.git';call(['git','init','--bare',str(repo)],capture_output=True)
git=['git','--git-dir',str(repo)]
inputs=json.load(open(work/'measurement-223-inputs.json'));extras={p['name']+'-'+p['version'] for p in inputs['extraPackages']}
review=Path('packages/webui/third_party/wordcraft/cargo-vendor').resolve();prior=Path('/mnt/storage/scratch/gyro-full-lock-measure-95ntu6t0/vendor')
files=[]
for d in sorted(review.iterdir()):files.extend((f,False,d.name+'/'+f.relative_to(d).as_posix()) for f in sorted(d.rglob('*')) if f.is_file())
for name in sorted(extras):
d=prior/name;files.extend((f,True,name+'/'+f.relative_to(d).as_posix()) for f in sorted(d.rglob('*')) if f.is_file())
assert len(files)==inputs['totalFiles'];assert sum(f.stat().st_size for f,_,_ in files)==inputs['totalBytes']
assert all('\n' not in str(f) for f,_,_ in files)
before=call(git+['count-objects','-v'],capture_output=True,text=True).stdout
p=call(git+['hash-object','-w','--no-filters','--stdin-paths'],input='\n'.join(str(f) for f,_,_ in files)+'\n',capture_output=True,text=True)
oids=p.stdout.splitlines();assert len(oids)==len(files)
sets={'all223':sorted(set(oids)),'extra14':sorted({oid for oid,(_,extra,_) in zip(oids,files) if extra})}
packs={}
for name,ids in sets.items():
f=root/(name+'-sources.pack')
with f.open('wb') as out:call(git+['pack-objects','--stdout','--threads=4'],input='\n'.join(ids)+'\n',stdout=out,text=True)
packs[name]={'packedBytes':f.stat().st_size,'uniqueBlobs':len(ids),'sha256':hashlib.sha256(f.read_bytes()).hexdigest()}
after=call(git+['count-objects','-v'],capture_output=True,text=True).stdout
report={'scratchRoot':str(root),'method':'pristine package files (not filtered build copy), git hash-object -w --no-filters --stdin-paths into scratch bare repo; each sorted unique blob set through pack-objects --stdout --threads=4; no gc; no tree/commit objects or cross-version deltas','all223Files':len(files),'all223Bytes':sum(f.stat().st_size for f,_,_ in files),'extra14Files':sum(extra for _,extra,_ in files),'extra14Bytes':sum(f.stat().st_size for f,extra,_ in files if extra),'packs':packs,'countObjectsBefore':before,'countObjectsAfter':after}
(work/'measurement-223-source-packs.json').write_text(json.dumps(report,indent=2)+'\n')
manifest=[{'path':path,'bytes':f.stat().st_size,'sha256':hashlib.sha256(f.read_bytes()).hexdigest(),'gitBlob':oid,'extra':extra} for oid,(f,extra,path) in zip(oids,files)]
(work/'measurement-223-input-manifest.json').write_text(json.dumps(manifest,indent=2)+'\n')
print(json.dumps(report,indent=2))
@@ -1,37 +0,0 @@
from pathlib import Path
import os,json,tomllib,hashlib,tarfile,shutil,tempfile,subprocess,datetime,time
os.setpriority(os.PRIO_PROCESS,0,19)
root=Path(tempfile.mkdtemp(prefix='gyro-223-measure-',dir='/mnt/storage/scratch'))
work=Path('agents/gyro/work/queue-310'); prior=Path('/mnt/storage/scratch/gyro-full-lock-measure-95ntu6t0')
shutil.copytree('packages/webui/third_party/wordcraft/cargo-vendor',root/'vendor')
lockfile=Path('packages/webui/third_party/wordcraft/upstream/Cargo.lock');lock=tomllib.loads(lockfile.read_text())
bykey={(p['name'],p['version']):p for p in lock['package']}
extra=json.load(open(work/'measurement-resolution-extra-packages.json'))['packages']
cache=Path('/mnt/storage/scratch/louie-wordcraft-toolchain/cargo/registry/cache/index.crates.io-1949cf8c6b5b557f')
inventory=[]
for p in extra:
key=(p['name'],p['version']);pin=bykey[key];archive=cache/(key[0]+'-'+key[1]+'.crate')
assert hashlib.sha256(archive.read_bytes()).hexdigest()==pin['checksum']
with tarfile.open(archive) as tf:tf.extractall(root/'vendor',filter='data')
d=root/'vendor'/(key[0]+'-'+key[1]);fs=sorted(f for f in d.rglob('*') if f.is_file())
(d/'.cargo-checksum.json').write_text(json.dumps({'files':{f.relative_to(d).as_posix():hashlib.sha256(f.read_bytes()).hexdigest() for f in fs},'package':pin['checksum']},sort_keys=True)+'\n')
manifest=tomllib.loads((d/'Cargo.toml').read_text());licenses=[]
for f in sorted(d.rglob('*')):
if f.is_file() and any(k in f.name.lower() for k in ['license','notice','copying','copyright']):
licenses.append({'path':f.relative_to(d).as_posix(),'bytes':f.stat().st_size,'sha256':hashlib.sha256(f.read_bytes()).hexdigest()})
allfs=[f for f in d.rglob('*') if f.is_file()]
inventory.append({'name':key[0],'version':key[1],'source':pin['source'],'archiveSha256':pin['checksum'],'archiveBytes':archive.stat().st_size,'license':manifest['package'].get('license'),'licenseFile':manifest['package'].get('license-file'),'noticeFiles':licenses,'files':len(allfs),'bytes':sum(f.stat().st_size for f in allfs)})
assert len(list((root/'vendor').iterdir()))==223
shutil.copytree(prior/'source',root/'source')
# Restore the original lock exactly, as Sage requested. Keep only the already
# approved local-workspace reduction; vendor manifests are pristine/unfiltered.
shutil.copyfile(lockfile,root/'source/Cargo.lock')
for name in ['home','cargo-home']:(root/name).mkdir()
shutil.copytree(prior/'cache',root/'cache')
cfg=(root/'source/.cargo/config.toml').read_text().replace(str(prior/'vendor'),str(root/'vendor'))
(root/'source/.cargo/config.toml').write_text(cfg)
fs=[f for f in (root/'vendor').rglob('*') if f.is_file()]
report={'scratchRoot':str(root),'authority':'sage-4008 / mos-1574','originalLockSha256':hashlib.sha256(lockfile.read_bytes()).hexdigest(),'packages':223,'extraPackages':inventory,'extraFiles':sum(p['files'] for p in inventory),'extraBytes':sum(p['bytes'] for p in inventory),'totalFiles':len(fs),'totalBytes':sum(f.stat().st_size for f in fs),'vendorManifestEdits':'none; original 209 packaging plus 14 checksum-verified archive extractions','sourceManifestEdits':'same approved local 15-member workspace reduction as prior packet, no additional changes'}
(work/'measurement-223-inputs.json').write_text(json.dumps(report,indent=2)+'\n');(root/'measurement-inputs.json').write_text(json.dumps(report,indent=2)+'\n')
Path('/mnt/storage/scratch/gyro-223-measure-root.txt').write_text(str(root)+'\n')
print(json.dumps({k:v for k,v in report.items() if k!='extraPackages'},indent=2))
@@ -1,25 +0,0 @@
from pathlib import Path
import os,shutil,subprocess,json,tomllib,hashlib,time
root=Path('/mnt/storage/scratch/gyro-223-measure-root.txt').read_text().strip();root=Path(root);work=Path('agents/gyro/work/queue-310')
src=root/'pruned-source';shutil.copytree(root/'source',src)
rust='/mnt/storage/scratch/louie-wordcraft-toolchain/rustup/toolchains/stable-x86_64-unknown-linux-gnu/bin'
env={'PATH':rust+':/usr/bin:/bin','HOME':str(root/'home'),'CARGO_HOME':str(root/'cargo-home'),'CARGO_NET_OFFLINE':'true','CARGO_BUILD_JOBS':'4','RUSTC':rust+'/rustc','CARGO_TARGET_DIR':str(root/'target'),'LC_ALL':'C','TZ':'UTC','TMPDIR':os.environ['TMPDIR']}
for k in os.environ:
if k in ['RUSTFLAGS','RUSTDOCFLAGS','CARGO_ENCODED_RUSTFLAGS','CARGO_BUILD_RUSTFLAGS'] or (k.startswith('CARGO_TARGET_') and k.endswith('_RUSTFLAGS')):raise RuntimeError('inherited flags refused: '+k)
def priority():os.setpriority(os.PRIO_PROCESS,0,19)
cmd=['unshare','--user','--map-root-user','--net',rust+'/cargo','metadata','--offline','--filter-platform','wasm32-unknown-unknown','--format-version','1']
p=subprocess.run(cmd,cwd=src,env=env,preexec_fn=priority,capture_output=True,text=True)
(root/'pruned-metadata.json').write_text(p.stdout);(work/'measurement-223-pruned-metadata.txt').write_text('command: '+' '.join(cmd)+'\nexit: '+str(p.returncode)+'\n'+p.stderr)
original=(root/'source/Cargo.lock').read_bytes();new=(src/'Cargo.lock').read_bytes()
a=tomllib.loads(original.decode());b=tomllib.loads(new.decode())
def indexed(doc):return {(p['name'],p['version']):p for p in doc['package']}
a=indexed(a);b=indexed(b)
removed=[a[k] for k in sorted(a.keys()-b.keys())];added=[b[k] for k in sorted(b.keys()-a.keys())];changed=[]
for k in sorted(a.keys()&b.keys()):
before={f:a[k].get(f) for f in ['name','version','source','checksum']};after={f:b[k].get(f) for f in ['name','version','source','checksum']}
if before!=after:changed.append({'before':before,'after':after})
report={'authority':'sage-4010, scratch measurement only; shipping would be a packaging change needing S0 reviewer and Jason choice','scratchRoot':str(root),'source':str(src),'metadataExit':p.returncode,'stderr':p.stderr,'originalLockSha256':hashlib.sha256(original).hexdigest(),'prunedLockSha256':hashlib.sha256(new).hexdigest(),'originalEntries':len(a),'prunedEntries':len(b),'removedCount':len(removed),'addedCount':len(added),'changedCount':len(changed),'removed':[{f:r.get(f) for f in ['name','version','source','checksum']} for r in removed],'added':added,'changed':changed,'subsetPass':p.returncode==0 and not added and not changed}
(work/'measurement-223-lock-diff.json').write_text(json.dumps(report,indent=2)+'\n');(root/'pruned-lock-diff.json').write_text(json.dumps(report,indent=2)+'\n')
(work/'measurement-223-pruned-Cargo.lock.txt').write_bytes(new)
print(json.dumps({k:v for k,v in report.items() if k not in ['removed','added','changed']},indent=2))
assert hashlib.sha256((root/'source/Cargo.lock').read_bytes()).hexdigest()==report['originalLockSha256']
File diff suppressed because it is too large. Load diff
@@ -1,2 +0,0 @@
command: unshare --user --map-root-user --net /mnt/storage/scratch/louie-wordcraft-toolchain/rustup/toolchains/stable-x86_64-unknown-linux-gnu/bin/cargo metadata --offline --filter-platform wasm32-unknown-unknown --format-version 1
exit: 0
@@ -1,251 +0,0 @@
2026-10-24T06:31:53.109215Z INFO Starting trunk 0.22.0
2026-10-24T06:31:53.109534Z INFO starting build
2026-10-24T06:31:53.109733Z INFO node packages []
Compiling unicode-ident v1.0.26
Compiling proc-macro2 v1.0.107
Compiling quote v1.0.47
Compiling cfg-if v1.0.5
Compiling serde_core v1.0.229
Compiling once_cell v1.21.4
Compiling serde v1.0.229
Compiling libm v0.2.16
Compiling rustversion v1.0.23
Compiling autocfg v1.5.1
Compiling log v0.4.34
Compiling syn v3.0.6
Compiling wasm-bindgen-shared v0.2.129
Compiling num-traits v0.2.19
Compiling bitflags v2.13.2
Compiling thiserror v2.0.21
Compiling bumpalo v3.20.3
Compiling arrayvec v0.7.8
Compiling wasm-bindgen v0.2.129
Compiling foldhash v0.2.0
Compiling futures-task v0.3.34
Compiling hashbrown v0.17.1
Compiling slab v0.4.12
Compiling futures-core v0.3.34
Compiling pin-project-lite v0.2.17
Compiling futures-util v0.3.34
Compiling simd-adler32 v0.3.10
Compiling syn v2.0.119
Compiling zerocopy v0.8.61
Compiling crc32fast v1.5.2
Compiling adler2 v2.0.1
Compiling polycool v0.4.0
Compiling wasm-bindgen-macro-support v0.2.129
Compiling miniz_oxide v0.9.1
Compiling bytemuck_derive v1.12.1
Compiling serde_derive v1.0.229
Compiling thiserror-impl v2.0.21
Compiling bytemuck v1.25.2
Compiling zerocopy-derive v0.8.61
Compiling zlib-rs v0.6.8
Compiling wasm-bindgen-macro v0.2.129
Compiling smallvec v1.16.2
Compiling kurbo v0.13.1
Compiling equivalent v1.0.2
Compiling indexmap v2.14.2
Compiling js-sys v0.3.106
Compiling flate2 v1.1.10
Compiling font-types v0.12.6
Compiling memchr v2.8.3
Compiling zmij v1.0.23
Compiling miniz_oxide v0.8.9
Compiling scopeguard v1.2.0
Compiling version_check v0.9.5
Compiling half v2.7.1
Compiling fdeflate v0.3.7
Compiling cfg_aliases v0.2.2
Compiling serde_json v1.0.151
Compiling png v0.18.1
Compiling color v0.3.3
Compiling euclid v0.22.14
Compiling unicode-segmentation v1.13.3
Compiling linebender_resource_handle v0.1.1
Compiling typenum v1.20.1
Compiling peniko v0.6.1
Compiling guillotiere v0.7.0
Compiling hybrid-array v0.4.15
Compiling weezl v0.1.12
Compiling fearless_simd v0.4.1
Compiling quick-error v2.0.1
Compiling itoa v1.0.18
Compiling zune-core v0.5.3
Compiling read-fonts v0.41.0
Compiling zune-jpeg v0.5.15
Compiling byteorder-lite v0.1.0
Compiling parking_lot_core v0.9.12
Compiling color_quant v1.1.0
Compiling gif v0.14.2
Compiling image-webp v0.2.4
Compiling uuid v1.27.0
Compiling crypto-common v0.2.2
Compiling lock_api v0.4.14
Compiling fax v0.2.7
Compiling pxfm v0.1.30
Compiling tiff v0.11.3
Compiling web-sys v0.3.106
Compiling moxcms v0.8.1
Compiling skrifa v0.44.0
Compiling parking_lot v0.12.5
Compiling wordcraft-geom v0.9.0 (/mnt/storage/scratch/gyro-223-measure-mzbp0x23/pruned-source/crates/geom)
Compiling font-types v0.11.3
Compiling synstructure v0.14.0
Compiling rustc-hash v1.1.0
Compiling cmov v0.5.4
Compiling profiling v1.0.18
Compiling rustc-hash v2.1.3
Compiling unicode-script v0.5.8
Compiling ctutils v0.4.3
Compiling naga-types v30.0.1
Compiling wordcraft-doc v0.9.0 (/mnt/storage/scratch/gyro-223-measure-mzbp0x23/pruned-source/crates/doc)
Compiling read-fonts v0.39.2
Compiling image v0.25.10
Compiling web-time v1.1.0
Compiling block-buffer v0.12.1
Compiling naga v30.0.1
Compiling slotmap v1.1.1
Compiling unicode-width v0.2.2
Compiling bit-vec v0.9.1
Compiling const-oid v0.10.2
Compiling raw-window-handle v0.6.2
Compiling alloc-no-stdlib v2.0.4
Compiling brotli-decompressor v5.0.3
Compiling bit-set v0.10.0
Compiling digest v0.11.3
Compiling codespan-reporting v0.13.1
Compiling zerofrom-derive v0.1.8
Compiling ahash v0.8.12
Compiling read-fonts v0.44.0
Compiling read-fonts v0.43.3
Compiling core_maths v0.1.1
Compiling static_assertions v1.1.0
Compiling wordcraft-fonts v0.9.0 (/mnt/storage/scratch/gyro-223-measure-mzbp0x23/pruned-source/crates/fonts)
Compiling unicode-general-category v1.1.0
Compiling unicode-bidi v0.3.18
Compiling bytes v1.12.1
Compiling wgpu-types v30.0.1
Compiling wuff v0.2.9
Compiling ttf-parser v0.25.1
Compiling zerofrom v0.1.8
Compiling skrifa v0.47.0
Compiling harfrust v0.13.3
Compiling skrifa v0.42.1
Compiling write-fonts v0.48.1
Compiling yoke-derive v0.8.4
Compiling vello_common v0.1.0
Compiling wgpu-hal v30.0.1
Compiling emath v0.36.2
Compiling encoding_rs v0.8.42
Compiling strict-num v0.1.1
Compiling unicode-bidi-mirroring v0.4.0
Compiling fnv v1.0.7
Compiling stable_deref_trait v1.2.1
Compiling base64 v0.22.1
Compiling unicode-properties v0.1.4
Compiling unicode-ccc v0.4.0
Compiling arrayref v0.3.9
Compiling ryu v1.0.23
Compiling pdf-writer v0.15.0
Compiling tiny-skia-path v0.12.0
Compiling rustybuzz v0.20.1
Compiling vello_cpu v0.1.0
Compiling yoke v0.8.3
Compiling cfb v0.15.0
Compiling subsetter v0.2.6
Compiling ecolor v0.36.2
Compiling glow v0.17.0
Compiling wgpu-naga-bridge v30.0.1
Compiling zopfli v0.8.3
Compiling harfrust v0.12.0
Compiling vello_common v0.2.0
Compiling inout v0.2.2
Compiling wordcraft-proof v0.9.0 (/mnt/storage/scratch/gyro-223-measure-mzbp0x23/pruned-source/crates/proof)
Compiling float-cmp v0.9.0
Compiling nohash-hasher v0.2.0
Compiling unicode-linebreak v0.1.5
Compiling xmp-writer v0.3.3
Compiling getrandom v0.3.4
Compiling multiversion_no_op v1.0.0
Compiling imagesize v0.14.0
Compiling either v1.19.0
Compiling self_cell v1.3.0
Compiling epaint_default_fonts v0.36.2
Compiling siphasher v1.0.4
Compiling epaint v0.36.2
Compiling krilla v0.8.2 (https://github.com/storytold/craft-libs?rev=c3487320b2d1de657b860b3c8abb44e1f2b32bd8#c3487320)
Compiling itertools v0.15.0
Compiling wordcraft-layout v0.9.0 (/mnt/storage/scratch/gyro-223-measure-mzbp0x23/pruned-source/crates/layout)
Compiling glifo v0.3.0
Compiling cipher v0.5.2
Compiling zip v3.0.0
Compiling sha1 v0.11.0
Compiling accesskit v0.24.1
Compiling wgpu-core v30.0.1
Compiling aho-corasick v1.1.5
Compiling quick-xml v0.41.0
Compiling wordcraft-metafile v0.9.0 (/mnt/storage/scratch/gyro-223-measure-mzbp0x23/pruned-source/crates/metafile)
Compiling cpubits v0.1.1
Compiling regex-syntax v0.8.11
Compiling litrs v1.0.0
Compiling winnow v1.0.4
Compiling toml_parser v1.1.3+spec-1.1.0
Compiling document-features v0.2.12
Compiling aes v0.9.3
Compiling wgpu-core-deps-wasm v30.0.1
Compiling regex-automata v0.4.18
Compiling egui v0.36.2
Compiling vello_cpu v0.2.0
Compiling chardetng v1.0.0
Compiling craft-pdf v0.1.0 (https://github.com/storytold/craft-libs?rev=c3487320b2d1de657b860b3c8abb44e1f2b32bd8#c3487320)
Compiling toml_datetime v1.1.1+spec-1.1.0
Compiling serde_spanned v1.1.1
Compiling hmac v0.13.0
Compiling sha2 v0.11.0
Compiling wasm-bindgen-futures v0.4.79
Compiling wgpu v30.0.1
Compiling zeroize v1.9.1
Compiling toml_writer v1.1.2+spec-1.1.0
Compiling toml v1.1.6+spec-1.1.0
Compiling wordcraft-docx v0.9.0 (/mnt/storage/scratch/gyro-223-measure-mzbp0x23/pruned-source/crates/docx)
Compiling wordcraft-pdf v0.9.0 (/mnt/storage/scratch/gyro-223-measure-mzbp0x23/pruned-source/crates/pdf)
Compiling wordcraft-formats v0.9.0 (/mnt/storage/scratch/gyro-223-measure-mzbp0x23/pruned-source/crates/formats)
Compiling wordcraft-render v0.9.0 (/mnt/storage/scratch/gyro-223-measure-mzbp0x23/pruned-source/crates/render)
Compiling regex v1.13.1
Compiling wordcraft-docbin v0.9.0 (/mnt/storage/scratch/gyro-223-measure-mzbp0x23/pruned-source/crates/docbin)
Compiling wordcraft-engine v0.9.0 (/mnt/storage/scratch/gyro-223-measure-mzbp0x23/pruned-source/crates/engine)
Compiling wordcraft-ui-egui v0.9.0 (/mnt/storage/scratch/gyro-223-measure-mzbp0x23/pruned-source/crates/ui-egui)
Compiling type-map v0.5.1
Compiling rfd v0.17.2
Compiling craft-ui v0.1.0 (https://github.com/storytold/craft-libs?rev=d27646a5f7c8b4fc85d9dd3213b8c88b58e0088d#d27646a5)
Compiling sys-locale v0.3.2
Compiling percent-encoding v2.3.2
warning: function `by_author` is never used
--> crates/engine/src/cmd/citations.rs:534:4
|
534 | fn by_author(x: &Source) -> &str {
| ^^^^^^^^^
|
= note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
warning: function `primary_tag` is never used
--> crates/engine/src/speech.rs:252:4
|
252 | fn primary_tag(tag: &str) -> Option<String> {
| ^^^^^^^^^^^
warning: function `voice_language` is never used
--> crates/engine/src/speech.rs:260:4
|
260 | fn voice_language(lang: Option<&str>, default: &str) -> Option<String> {
| ^^^^^^^^^^^^^^
Compiling egui-wgpu v0.36.2
Compiling eframe v0.36.2
Compiling wordcraft-zotero v0.9.0 (/mnt/storage/scratch/gyro-223-measure-mzbp0x23/pruned-source/crates/zotero)
warning: `wordcraft-engine` (lib) generated 3 warnings
Compiling wordcraft-web v0.9.0 (/mnt/storage/scratch/gyro-223-measure-mzbp0x23/pruned-source/apps/wordcraft-web)
Finished `release` profile [optimized] target(s) in 3m 16s
2026-10-24T06:38:13.771065Z INFO applying new distribution
2026-10-24T06:38:13.771634Z INFO success
@@ -1,10 +0,0 @@
{
"scratchRoot": "/mnt/storage/scratch/gyro-223-measure-mzbp0x23",
"metadataExit": 101,
"metadataError": "error: cannot update the lock file /mnt/storage/scratch/gyro-223-measure-mzbp0x23/source/Cargo.lock because --locked was passed to prevent this\nhelp: to generate the lock file without accessing the network, remove the --locked flag and use --offline instead.\n",
"originalLockSha256": "06b745e43c13df3df7f048fa6a1981625ce7a5fe4cd484bc6254d0913d865b0b",
"lockUnchanged": true,
"network": "isolated network namespace with no external interface; offline Cargo; fresh HOME/CARGO_HOME",
"closures": {},
"resolves": false
}
@@ -1,31 +0,0 @@
from pathlib import Path
import os,json,subprocess,re,time,hashlib
root=Path('/mnt/storage/scratch/gyro-223-measure-root.txt').read_text().strip();root=Path(root);work=Path('agents/gyro/work/queue-310')
rust='/mnt/storage/scratch/louie-wordcraft-toolchain/rustup/toolchains/stable-x86_64-unknown-linux-gnu/bin'
for k in os.environ:
if k in ['RUSTFLAGS','RUSTDOCFLAGS','CARGO_ENCODED_RUSTFLAGS','CARGO_BUILD_RUSTFLAGS'] or (k.startswith('CARGO_TARGET_') and k.endswith('_RUSTFLAGS')):raise RuntimeError('inherited flags refused: '+k)
env={'PATH':rust+':/usr/bin:/bin','HOME':str(root/'home'),'CARGO_HOME':str(root/'cargo-home'),'CARGO_NET_OFFLINE':'true','CARGO_BUILD_JOBS':'4','RUSTC':rust+'/rustc','CARGO_TARGET_DIR':str(root/'target'),'LC_ALL':'C','TZ':'UTC','TMPDIR':os.environ['TMPDIR']}
def priority():os.setpriority(os.PRIO_PROCESS,0,19)
def run(args,name):
command=['unshare','--user','--map-root-user','--net']+args;t=time.monotonic()
p=subprocess.run(command,cwd=root/'source',env=env,preexec_fn=priority,capture_output=True,text=True)
(root/(name+'.stdout')).write_text(p.stdout);(root/(name+'.stderr')).write_text(p.stderr)
(work/('measurement-223-'+name+'.txt')).write_text('command: '+' '.join(command)+'\nexit: '+str(p.returncode)+'\nwallSeconds: '+str(time.monotonic()-t)+'\nSTDERR:\n'+p.stderr+('\nSTDOUT:\n'+p.stdout if p.returncode else ''))
return p
original=(root/'source/Cargo.lock').read_bytes()
p=run([rust+'/cargo','metadata','--offline','--locked','--filter-platform','wasm32-unknown-unknown','--format-version','1'],'metadata')
report={'scratchRoot':str(root),'metadataExit':p.returncode,'metadataError':p.stderr,'originalLockSha256':hashlib.sha256(original).hexdigest(),'lockUnchanged':original==(root/'source/Cargo.lock').read_bytes(),'network':'isolated network namespace with no external interface; offline Cargo; fresh HOME/CARGO_HOME','closures':{}}
if p.returncode==0:
inv=json.load(open('packages/webui/third_party/wordcraft/PROVENANCE.json'))['packages']
for edge in ['normal','normal,build']:
p=run([rust+'/cargo','tree','--locked','--offline','-p','wordcraft-web','--target','wasm32-unknown-unknown','--edges',edge,'--prefix','none','--format','{p}'],'tree-'+edge.replace(',','-'))
actual=set()
for line in p.stdout.splitlines():
m=re.match(r'(\S+) v(\S+)',line)
if m:actual.add((m[1],m[2]))
expected={(x['name'],x['version']) for x in inv if edge=='normal,build' or x['edge']=='normal'}
report['closures'][edge]={'exit':p.returncode,'packages':len(actual),'added':sorted(actual-expected),'missing':sorted(expected-actual),'matchesS0':p.returncode==0 and actual==expected}
report['resolves']=all(x['matchesS0'] for x in report['closures'].values())
else:report['resolves']=False
(work/'measurement-223-resolution.json').write_text(json.dumps(report,indent=2)+'\n');(root/'resolution-result.json').write_text(json.dumps(report,indent=2)+'\n')
print(json.dumps(report,indent=2))
@@ -1,22 +0,0 @@
{
"scratchRoot": "/mnt/storage/scratch/gyro-223-measure-mzbp0x23",
"method": "pristine package files (not filtered build copy), git hash-object -w --no-filters --stdin-paths into scratch bare repo; each sorted unique blob set through pack-objects --stdout --threads=4; no gc; no tree/commit objects or cross-version deltas",
"all223Files": 11201,
"all223Bytes": 145260334,
"extra14Files": 702,
"extra14Bytes": 14523104,
"packs": {
"all223": {
"packedBytes": 26538894,
"uniqueBlobs": 10275,
"sha256": "70b06c31030057d7b994290b464f3ed7707d1ae5490140a0853ac520c7563304"
},
"extra14": {
"packedBytes": 1720566,
"uniqueBlobs": 691,
"sha256": "71e53a9af8dd368a56bb382cf313b2a8ead530055028e1a31f57fc8119071bd0"
}
},
"countObjectsBefore": "count: 0\nsize: 0\nin-pack: 0\npacks: 0\nsize-pack: 0\nprune-packable: 0\ngarbage: 0\nsize-garbage: 0\n",
"countObjectsAfter": "count: 10275\nsize: 66172\nin-pack: 0\npacks: 0\nsize-pack: 0\nprune-packable: 0\ngarbage: 0\nsize-garbage: 0\n"
}
@@ -1,10 +0,0 @@
{
"scratchRoot": "/mnt/storage/scratch/gyro-223-measure-mzbp0x23",
"metadataExit": 101,
"metadataError": "error: no matching package named `cpufeatures` found\nlocation searched: directory source `/mnt/storage/scratch/gyro-223-measure-mzbp0x23/vendor` (which is replacing registry `crates-io`)\nrequired by package `sha1 v0.11.0`\n ... which satisfies dependency `sha1 = \"^0.11\"` (locked to 0.11.0) of package `wordcraft-docbin v0.9.0 (/mnt/storage/scratch/gyro-223-measure-mzbp0x23/source/crates/docbin)`\nnote: offline mode (via `--offline`) can sometimes cause surprising resolution failures\nhelp: if this error is too confusing you may wish to retry without `--offline`\n",
"originalLockSha256": "06b745e43c13df3df7f048fa6a1981625ce7a5fe4cd484bc6254d0913d865b0b",
"lockUnchanged": true,
"network": "isolated network namespace with no external interface; offline Cargo; fresh HOME/CARGO_HOME",
"closures": {},
"resolves": false
}
@@ -1,106 +0,0 @@
// Verbatim measurement routines from the W2 packet; no crate sources.
// sage-3983/3984g: target cfgs are measured with a sanitized environment.
// Keep release flags under builder control; ambient flags cannot widen the target.
export function releaseEnvironment(input) {
const forbidden = key => ['RUSTFLAGS', 'CARGO_ENCODED_RUSTFLAGS', 'RUSTDOCFLAGS', 'CARGO_BUILD_RUSTFLAGS'].includes(key)
|| /^CARGO_TARGET_.*_RUSTFLAGS$/.test(key);
for (const key of Object.keys(input)) {
if (forbidden(key)) throw new Error(`refusing inherited Rust flags: ${key}`);
}
const permitted = ['PATH', 'TMPDIR', 'LANG', 'LC_ALL', 'TZ'];
return Object.fromEntries(permitted.filter(key => input[key] !== undefined).map(key => [key, input[key]]));
}
export function evaluateCfg(expression, printCfg) {
const enabled = new Set(printCfg.split('\n').map(line => line.trim()).filter(Boolean));
const tokens = expression.match(/"(?:[^"\\]|\\.)*"|[A-Za-z_][A-Za-z_0-9]*|[(),=]|\S/g) ?? [];
let pos = 0;
const take = expected => {
if (tokens[pos++] !== expected) throw new Error(`invalid cfg expression: ${expression}`);
};
function parse() {
const name = tokens[pos++];
if (!/^[A-Za-z_][A-Za-z_0-9]*$/.test(name ?? '')) throw new Error(`invalid cfg name: ${expression}`);
if (tokens[pos] === '(') {
pos++;
const args = [];
while (tokens[pos] !== ')') {
args.push(parse());
if (tokens[pos] === ',') pos++;
else if (tokens[pos] !== ')') throw new Error(`invalid cfg arguments: ${expression}`);
}
take(')');
if (name === 'cfg' && args.length === 1) return args[0];
if (name === 'not' && args.length === 1) return !args[0];
if (name === 'all') return args.every(Boolean);
if (name === 'any') return args.some(Boolean);
throw new Error(`unsupported cfg operation: ${name}`);
}
if (tokens[pos] === '=') {
pos++;
const value = JSON.parse(tokens[pos++]);
return enabled.has(`${name}=${JSON.stringify(value)}`);
}
return enabled.has(name);
}
const result = parse();
if (pos !== tokens.length) throw new Error(`trailing cfg tokens: ${expression}`);
return result;
}
// Dependency-table parsing only: all edited TOML values are upstream string
// arrays. Unknown syntax refuses instead of guessing or changing a dependency.
function targetSection(part) {
const line = part.split('\n', 1)[0];
const match = /^\[target\.("(?:[^"\\]|\\.)*"|'[^']*'|[^.\]]+)\.(dependencies|build-dependencies|dev-dependencies)(?:\.([A-Za-z0-9_-]+))?\]$/.exec(line);
if (!match) return null;
const selector = match[1].startsWith('"') ? JSON.parse(match[1]) : match[1].replace(/^'|'$/g, '');
const names = match[3] ? [match[3]] : [...part.matchAll(/^([A-Za-z0-9_-]+)\s*=/gm)].map(m => m[1]);
return { cfg: selector, kind: match[2], dependencies: names };
}
export function filterVendorManifest(text, printCfg) {
const parts = text.split(/(?=^\[)/m);
const sections = [];
const retained = [];
for (const part of parts) {
const section = targetSection(part);
if (section?.cfg.startsWith('cfg(') && !evaluateCfg(section.cfg, printCfg)) sections.push(section);
else retained.push(part);
}
const remainingNames = new Set();
for (const part of retained) {
const section = targetSection(part);
if (section && section.kind !== 'dev-dependencies') section.dependencies.forEach(name => remainingNames.add(name));
else {
const header = /^\[(dependencies|build-dependencies)(?:\.([A-Za-z0-9_-]+))?\]/.exec(part);
if (header?.[2]) remainingNames.add(header[2]);
else if (header) for (const match of part.matchAll(/^([A-Za-z0-9_-]+)\s*=/gm)) remainingNames.add(match[1]);
}
}
const removed = new Map();
for (const section of sections) {
for (const name of section.dependencies) {
if (!remainingNames.has(name)) removed.set(name, [...(removed.get(name) ?? []), section.cfg]);
}
}
const features = [];
const output = retained.map(part => {
if (!part.startsWith('[features]')) return part;
return part.replace(/^([A-Za-z0-9_-]+)\s*=\s*\[([^\]]*)\]/gm, (whole, feature, body) => {
const noComments = body.replace(/#[^\n]*/g, '');
let items;
try { items = JSON.parse(`[${noComments.replace(/,\s*$/, '')}]`); }
catch { throw new Error(`unsupported feature array: ${feature}`); }
if (!items.every(item => typeof item === 'string')) throw new Error(`non-string feature item: ${feature}`);
const kept = items.filter(item => {
const dependency = item.replace(/^dep:/, '').split('/')[0].replace(/\?$/, '');
if (!removed.has(dependency)) return true;
features.push({ feature, item, dependency, cfg: removed.get(dependency) });
return false;
});
return kept.length === items.length ? whole : `${feature} = ${JSON.stringify(kept)}`;
});
}).join('');
return { text: output, sections, features };
}
@@ -1,251 +0,0 @@
2026-10-24T06:02:17.606436Z INFO Starting trunk 0.22.0
2026-10-24T06:02:17.608522Z INFO starting build
2026-10-24T06:02:17.609024Z INFO node packages []
Compiling proc-macro2 v1.0.107
Compiling unicode-ident v1.0.26
Compiling quote v1.0.47
Compiling cfg-if v1.0.5
Compiling serde_core v1.0.229
Compiling once_cell v1.21.4
Compiling serde v1.0.229
Compiling libm v0.2.16
Compiling rustversion v1.0.23
Compiling wasm-bindgen-shared v0.2.129
Compiling syn v3.0.6
Compiling autocfg v1.5.1
Compiling log v0.4.34
Compiling num-traits v0.2.19
Compiling thiserror v2.0.21
Compiling bitflags v2.13.2
Compiling arrayvec v0.7.8
Compiling bumpalo v3.20.3
Compiling wasm-bindgen v0.2.129
Compiling foldhash v0.2.0
Compiling slab v0.4.12
Compiling hashbrown v0.17.1
Compiling futures-core v0.3.34
Compiling pin-project-lite v0.2.17
Compiling futures-task v0.3.34
Compiling futures-util v0.3.34
Compiling simd-adler32 v0.3.10
Compiling syn v2.0.119
Compiling zerocopy v0.8.61
Compiling crc32fast v1.5.2
Compiling adler2 v2.0.1
Compiling polycool v0.4.0
Compiling wasm-bindgen-macro-support v0.2.129
Compiling miniz_oxide v0.9.1
Compiling bytemuck_derive v1.12.1
Compiling serde_derive v1.0.229
Compiling thiserror-impl v2.0.21
Compiling bytemuck v1.25.2
Compiling zerocopy-derive v0.8.61
Compiling zlib-rs v0.6.8
Compiling wasm-bindgen-macro v0.2.129
Compiling smallvec v1.16.2
Compiling kurbo v0.13.1
Compiling equivalent v1.0.2
Compiling indexmap v2.14.2
Compiling flate2 v1.1.10
Compiling js-sys v0.3.106
Compiling font-types v0.12.6
Compiling memchr v2.8.3
Compiling zmij v1.0.23
Compiling miniz_oxide v0.8.9
Compiling version_check v0.9.5
Compiling scopeguard v1.2.0
Compiling fdeflate v0.3.7
Compiling half v2.7.1
Compiling serde_json v1.0.151
Compiling cfg_aliases v0.2.2
Compiling png v0.18.1
Compiling color v0.3.3
Compiling euclid v0.22.14
Compiling linebender_resource_handle v0.1.1
Compiling unicode-segmentation v1.13.3
Compiling typenum v1.20.1
Compiling peniko v0.6.1
Compiling guillotiere v0.7.0
Compiling hybrid-array v0.4.15
Compiling fearless_simd v0.4.1
Compiling quick-error v2.0.1
Compiling itoa v1.0.18
Compiling weezl v0.1.12
Compiling zune-core v0.5.3
Compiling zune-jpeg v0.5.15
Compiling read-fonts v0.41.0
Compiling parking_lot_core v0.9.12
Compiling byteorder-lite v0.1.0
Compiling color_quant v1.1.0
Compiling gif v0.14.2
Compiling image-webp v0.2.4
Compiling uuid v1.27.0
Compiling crypto-common v0.2.2
Compiling lock_api v0.4.14
Compiling fax v0.2.7
Compiling pxfm v0.1.30
Compiling tiff v0.11.3
Compiling web-sys v0.3.106
Compiling moxcms v0.8.1
Compiling skrifa v0.44.0
Compiling parking_lot v0.12.5
Compiling wordcraft-geom v0.9.0 (/mnt/storage/scratch/gyro-full-lock-measure-95ntu6t0/source/crates/geom)
Compiling font-types v0.11.3
Compiling synstructure v0.14.0
Compiling unicode-script v0.5.8
Compiling profiling v1.0.18
Compiling rustc-hash v2.1.3
Compiling cmov v0.5.4
Compiling rustc-hash v1.1.0
Compiling ctutils v0.4.3
Compiling naga-types v30.0.1
Compiling read-fonts v0.39.2
Compiling wordcraft-doc v0.9.0 (/mnt/storage/scratch/gyro-full-lock-measure-95ntu6t0/source/crates/doc)
Compiling image v0.25.10
Compiling web-time v1.1.0
Compiling block-buffer v0.12.1
Compiling naga v30.0.1
Compiling slotmap v1.1.1
Compiling unicode-width v0.2.2
Compiling bit-vec v0.9.1
Compiling raw-window-handle v0.6.2
Compiling alloc-no-stdlib v2.0.4
Compiling const-oid v0.10.2
Compiling digest v0.11.3
Compiling brotli-decompressor v5.0.3
Compiling bit-set v0.10.0
Compiling codespan-reporting v0.13.1
Compiling zerofrom-derive v0.1.8
Compiling ahash v0.8.12
Compiling read-fonts v0.44.0
Compiling read-fonts v0.43.3
Compiling core_maths v0.1.1
Compiling unicode-bidi v0.3.18
Compiling bytes v1.12.1
Compiling unicode-general-category v1.1.0
Compiling static_assertions v1.1.0
Compiling wordcraft-fonts v0.9.0 (/mnt/storage/scratch/gyro-full-lock-measure-95ntu6t0/source/crates/fonts)
Compiling wgpu-types v30.0.1
Compiling wuff v0.2.9
Compiling ttf-parser v0.25.1
Compiling zerofrom v0.1.8
Compiling skrifa v0.47.0
Compiling harfrust v0.13.3
Compiling skrifa v0.42.1
Compiling write-fonts v0.48.1
Compiling yoke-derive v0.8.4
Compiling vello_common v0.1.0
Compiling wgpu-hal v30.0.1
Compiling emath v0.36.2
Compiling encoding_rs v0.8.42
Compiling strict-num v0.1.1
Compiling base64 v0.22.1
Compiling fnv v1.0.7
Compiling stable_deref_trait v1.2.1
Compiling unicode-ccc v0.4.0
Compiling arrayref v0.3.9
Compiling ryu v1.0.23
Compiling unicode-properties v0.1.4
Compiling unicode-bidi-mirroring v0.4.0
Compiling rustybuzz v0.20.1
Compiling pdf-writer v0.15.0
Compiling tiny-skia-path v0.12.0
Compiling yoke v0.8.3
Compiling cfb v0.15.0
Compiling vello_cpu v0.1.0
Compiling subsetter v0.2.6
Compiling ecolor v0.36.2
Compiling glow v0.17.0
Compiling wgpu-naga-bridge v30.0.1
Compiling zopfli v0.8.3
Compiling harfrust v0.12.0
Compiling vello_common v0.2.0
Compiling inout v0.2.2
Compiling wordcraft-proof v0.9.0 (/mnt/storage/scratch/gyro-full-lock-measure-95ntu6t0/source/crates/proof)
Compiling float-cmp v0.9.0
Compiling self_cell v1.3.0
Compiling imagesize v0.14.0
Compiling epaint_default_fonts v0.36.2
Compiling xmp-writer v0.3.3
Compiling unicode-linebreak v0.1.5
Compiling nohash-hasher v0.2.0
Compiling multiversion_no_op v1.0.0
Compiling getrandom v0.3.4
Compiling either v1.19.0
Compiling siphasher v1.0.4
Compiling itertools v0.15.0
Compiling krilla v0.8.2 (https://github.com/storytold/craft-libs?rev=c3487320b2d1de657b860b3c8abb44e1f2b32bd8#c3487320)
Compiling epaint v0.36.2
Compiling wordcraft-layout v0.9.0 (/mnt/storage/scratch/gyro-full-lock-measure-95ntu6t0/source/crates/layout)
Compiling glifo v0.3.0
Compiling cipher v0.5.2
Compiling zip v3.0.0
Compiling sha1 v0.11.0
Compiling accesskit v0.24.1
Compiling wgpu-core v30.0.1
Compiling quick-xml v0.41.0
Compiling aho-corasick v1.1.5
Compiling wordcraft-metafile v0.9.0 (/mnt/storage/scratch/gyro-full-lock-measure-95ntu6t0/source/crates/metafile)
Compiling winnow v1.0.4
Compiling cpubits v0.1.1
Compiling regex-syntax v0.8.11
Compiling litrs v1.0.0
Compiling document-features v0.2.12
Compiling aes v0.9.3
Compiling toml_parser v1.1.3+spec-1.1.0
Compiling wgpu-core-deps-wasm v30.0.1
Compiling egui v0.36.2
Compiling vello_cpu v0.2.0
Compiling regex-automata v0.4.18
Compiling craft-pdf v0.1.0 (https://github.com/storytold/craft-libs?rev=c3487320b2d1de657b860b3c8abb44e1f2b32bd8#c3487320)
Compiling chardetng v1.0.0
Compiling toml_datetime v1.1.1+spec-1.1.0
Compiling serde_spanned v1.1.1
Compiling sha2 v0.11.0
Compiling hmac v0.13.0
Compiling wasm-bindgen-futures v0.4.79
Compiling wgpu v30.0.1
Compiling toml_writer v1.1.2+spec-1.1.0
Compiling zeroize v1.9.1
Compiling wordcraft-docx v0.9.0 (/mnt/storage/scratch/gyro-full-lock-measure-95ntu6t0/source/crates/docx)
Compiling toml v1.1.6+spec-1.1.0
Compiling wordcraft-formats v0.9.0 (/mnt/storage/scratch/gyro-full-lock-measure-95ntu6t0/source/crates/formats)
Compiling wordcraft-pdf v0.9.0 (/mnt/storage/scratch/gyro-full-lock-measure-95ntu6t0/source/crates/pdf)
Compiling regex v1.13.1
Compiling wordcraft-render v0.9.0 (/mnt/storage/scratch/gyro-full-lock-measure-95ntu6t0/source/crates/render)
Compiling wordcraft-docbin v0.9.0 (/mnt/storage/scratch/gyro-full-lock-measure-95ntu6t0/source/crates/docbin)
Compiling wordcraft-engine v0.9.0 (/mnt/storage/scratch/gyro-full-lock-measure-95ntu6t0/source/crates/engine)
Compiling wordcraft-ui-egui v0.9.0 (/mnt/storage/scratch/gyro-full-lock-measure-95ntu6t0/source/crates/ui-egui)
Compiling type-map v0.5.1
Compiling rfd v0.17.2
Compiling craft-ui v0.1.0 (https://github.com/storytold/craft-libs?rev=d27646a5f7c8b4fc85d9dd3213b8c88b58e0088d#d27646a5)
Compiling sys-locale v0.3.2
Compiling percent-encoding v2.3.2
warning: function `by_author` is never used
--> crates/engine/src/cmd/citations.rs:534:4
|
534 | fn by_author(x: &Source) -> &str {
| ^^^^^^^^^
|
= note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
warning: function `primary_tag` is never used
--> crates/engine/src/speech.rs:252:4
|
252 | fn primary_tag(tag: &str) -> Option<String> {
| ^^^^^^^^^^^
warning: function `voice_language` is never used
--> crates/engine/src/speech.rs:260:4
|
260 | fn voice_language(lang: Option<&str>, default: &str) -> Option<String> {
| ^^^^^^^^^^^^^^
Compiling egui-wgpu v0.36.2
Compiling eframe v0.36.2
Compiling wordcraft-zotero v0.9.0 (/mnt/storage/scratch/gyro-full-lock-measure-95ntu6t0/source/crates/zotero)
warning: `wordcraft-engine` (lib) generated 3 warnings
Compiling wordcraft-web v0.9.0 (/mnt/storage/scratch/gyro-full-lock-measure-95ntu6t0/source/apps/wordcraft-web)
Finished `release` profile [optimized] target(s) in 3m 31s
2026-10-24T06:08:46.350795Z INFO applying new distribution
2026-10-24T06:08:46.351536Z INFO success
@@ -1,3 +0,0 @@
Inter-| Receive | Transmit
face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
lo: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
@@ -1,29 +0,0 @@
{
"method": "git hash-object -w for four output blobs into new scratch bare repo; sorted blob ids piped into git pack-objects --stdout --threads=4; no gc, no repo-tree object writes",
"gitVersion": "git version 2.55.0",
"packedBytes": 16720159,
"unpackedOutputBytes": 44142800,
"excluded": ".trunk-lock (empty internal Trunk lock, not runtime artifact)",
"outputs": {
"index.html": {
"bytes": 1604,
"sha256": "299b76f4004bbc65204d561cc381b3fbb249d10069eaa50e88c7fba3b6c63cb8"
},
"wordcraft-fa59e09a3f921e03.ico": {
"bytes": 18378,
"sha256": "53a23dcf66260f44d87d4d143d633395f3e967f391eda47e6e9cc3a52f820225"
},
"wordcraft-web-832240fdc6ce872b_bg.wasm": {
"bytes": 43957877,
"sha256": "c1c15050a9b394c21e7540aa57c9292b86d32bfea2476094a9976304dacf1de0"
},
"wordcraft-web-88f7089f25a3b338.js": {
"bytes": 164941,
"sha256": "866a1de6a33eff2ded8ae9588fd049aeacfc42557a3863ccd2107b3faf4d691e"
}
},
"countObjectsBefore": "count: 0\nsize: 0\nin-pack: 0\npacks: 0\nsize-pack: 0\nprune-packable: 0\ngarbage: 0\nsize-garbage: 0\n",
"countObjectsAfterHash": "count: 4\nsize: 21628\nin-pack: 0\npacks: 0\nsize-pack: 0\nprune-packable: 0\ngarbage: 0\nsize-garbage: 0\n",
"countObjectsAfterPack": "count: 4\nsize: 21628\nin-pack: 0\npacks: 0\nsize-pack: 0\nprune-packable: 0\ngarbage: 0\nsize-garbage: 0\n",
"scratchRepo": "/mnt/storage/scratch/gyro-full-lock-measure-95ntu6t0/output-measurement.git"
}
@@ -1,26 +0,0 @@
{
"atUTC": "2026-10-24T06:05:25.404163+00:00",
"note": "nice -n 19 is relative; observed inherited priority resulted in nice15. Set owned build process/thread priorities absolutely to19 during the build. No other process affected.",
"processes": [
{
"pid": 1518443,
"before": -4,
"after": 19
},
{
"pid": 1518605,
"before": 15,
"after": 19
},
{
"pid": 1518655,
"before": 15,
"after": 19
},
{
"pid": 1538729,
"before": 15,
"after": 19
}
]
}
@@ -1,251 +0,0 @@
2026-10-24T06:09:38.421692Z INFO Starting trunk 0.22.0
2026-10-24T06:09:38.423033Z INFO starting build
2026-10-24T06:09:38.423284Z INFO node packages []
Compiling unicode-ident v1.0.26
Compiling proc-macro2 v1.0.107
Compiling quote v1.0.47
Compiling cfg-if v1.0.5
Compiling serde_core v1.0.229
Compiling once_cell v1.21.4
Compiling serde v1.0.229
Compiling libm v0.2.16
Compiling rustversion v1.0.23
Compiling wasm-bindgen-shared v0.2.129
Compiling autocfg v1.5.1
Compiling syn v3.0.6
Compiling log v0.4.34
Compiling num-traits v0.2.19
Compiling thiserror v2.0.21
Compiling bitflags v2.13.2
Compiling bumpalo v3.20.3
Compiling arrayvec v0.7.8
Compiling wasm-bindgen v0.2.129
Compiling foldhash v0.2.0
Compiling hashbrown v0.17.1
Compiling futures-task v0.3.34
Compiling slab v0.4.12
Compiling futures-core v0.3.34
Compiling pin-project-lite v0.2.17
Compiling simd-adler32 v0.3.10
Compiling futures-util v0.3.34
Compiling syn v2.0.119
Compiling zerocopy v0.8.61
Compiling crc32fast v1.5.2
Compiling adler2 v2.0.1
Compiling polycool v0.4.0
Compiling wasm-bindgen-macro-support v0.2.129
Compiling miniz_oxide v0.9.1
Compiling bytemuck_derive v1.12.1
Compiling serde_derive v1.0.229
Compiling bytemuck v1.25.2
Compiling thiserror-impl v2.0.21
Compiling zerocopy-derive v0.8.61
Compiling zlib-rs v0.6.8
Compiling wasm-bindgen-macro v0.2.129
Compiling smallvec v1.16.2
Compiling kurbo v0.13.1
Compiling equivalent v1.0.2
Compiling indexmap v2.14.2
Compiling js-sys v0.3.106
Compiling flate2 v1.1.10
Compiling font-types v0.12.6
Compiling memchr v2.8.3
Compiling zmij v1.0.23
Compiling miniz_oxide v0.8.9
Compiling half v2.7.1
Compiling scopeguard v1.2.0
Compiling version_check v0.9.5
Compiling fdeflate v0.3.7
Compiling cfg_aliases v0.2.2
Compiling serde_json v1.0.151
Compiling color v0.3.3
Compiling png v0.18.1
Compiling euclid v0.22.14
Compiling typenum v1.20.1
Compiling unicode-segmentation v1.13.3
Compiling linebender_resource_handle v0.1.1
Compiling peniko v0.6.1
Compiling hybrid-array v0.4.15
Compiling guillotiere v0.7.0
Compiling zune-core v0.5.3
Compiling fearless_simd v0.4.1
Compiling itoa v1.0.18
Compiling weezl v0.1.12
Compiling quick-error v2.0.1
Compiling zune-jpeg v0.5.15
Compiling read-fonts v0.41.0
Compiling color_quant v1.1.0
Compiling byteorder-lite v0.1.0
Compiling parking_lot_core v0.9.12
Compiling image-webp v0.2.4
Compiling gif v0.14.2
Compiling uuid v1.27.0
Compiling crypto-common v0.2.2
Compiling lock_api v0.4.14
Compiling pxfm v0.1.30
Compiling fax v0.2.7
Compiling tiff v0.11.3
Compiling web-sys v0.3.106
Compiling moxcms v0.8.1
Compiling skrifa v0.44.0
Compiling parking_lot v0.12.5
Compiling wordcraft-geom v0.9.0 (/mnt/storage/scratch/gyro-full-lock-measure-95ntu6t0/source/crates/geom)
Compiling font-types v0.11.3
Compiling synstructure v0.14.0
Compiling rustc-hash v1.1.0
Compiling unicode-script v0.5.8
Compiling cmov v0.5.4
Compiling rustc-hash v2.1.3
Compiling profiling v1.0.18
Compiling ctutils v0.4.3
Compiling naga-types v30.0.1
Compiling read-fonts v0.39.2
Compiling wordcraft-doc v0.9.0 (/mnt/storage/scratch/gyro-full-lock-measure-95ntu6t0/source/crates/doc)
Compiling image v0.25.10
Compiling web-time v1.1.0
Compiling block-buffer v0.12.1
Compiling naga v30.0.1
Compiling slotmap v1.1.1
Compiling alloc-no-stdlib v2.0.4
Compiling raw-window-handle v0.6.2
Compiling unicode-width v0.2.2
Compiling bit-vec v0.9.1
Compiling const-oid v0.10.2
Compiling bit-set v0.10.0
Compiling digest v0.11.3
Compiling codespan-reporting v0.13.1
Compiling brotli-decompressor v5.0.3
Compiling zerofrom-derive v0.1.8
Compiling ahash v0.8.12
Compiling read-fonts v0.44.0
Compiling read-fonts v0.43.3
Compiling core_maths v0.1.1
Compiling wordcraft-fonts v0.9.0 (/mnt/storage/scratch/gyro-full-lock-measure-95ntu6t0/source/crates/fonts)
Compiling bytes v1.12.1
Compiling unicode-general-category v1.1.0
Compiling unicode-bidi v0.3.18
Compiling static_assertions v1.1.0
Compiling wgpu-types v30.0.1
Compiling wuff v0.2.9
Compiling ttf-parser v0.25.1
Compiling zerofrom v0.1.8
Compiling skrifa v0.47.0
Compiling harfrust v0.13.3
Compiling skrifa v0.42.1
Compiling write-fonts v0.48.1
Compiling yoke-derive v0.8.4
Compiling vello_common v0.1.0
Compiling wgpu-hal v30.0.1
Compiling emath v0.36.2
Compiling encoding_rs v0.8.42
Compiling ryu v1.0.23
Compiling unicode-properties v0.1.4
Compiling base64 v0.22.1
Compiling arrayref v0.3.9
Compiling fnv v1.0.7
Compiling strict-num v0.1.1
Compiling unicode-bidi-mirroring v0.4.0
Compiling stable_deref_trait v1.2.1
Compiling unicode-ccc v0.4.0
Compiling rustybuzz v0.20.1
Compiling yoke v0.8.3
Compiling tiny-skia-path v0.12.0
Compiling cfb v0.15.0
Compiling subsetter v0.2.6
Compiling pdf-writer v0.15.0
Compiling vello_cpu v0.1.0
Compiling ecolor v0.36.2
Compiling glow v0.17.0
Compiling wgpu-naga-bridge v30.0.1
Compiling zopfli v0.8.3
Compiling harfrust v0.12.0
Compiling vello_common v0.2.0
Compiling inout v0.2.2
Compiling wordcraft-proof v0.9.0 (/mnt/storage/scratch/gyro-full-lock-measure-95ntu6t0/source/crates/proof)
Compiling float-cmp v0.9.0
Compiling siphasher v1.0.4
Compiling self_cell v1.3.0
Compiling xmp-writer v0.3.3
Compiling nohash-hasher v0.2.0
Compiling either v1.19.0
Compiling imagesize v0.14.0
Compiling epaint_default_fonts v0.36.2
Compiling multiversion_no_op v1.0.0
Compiling unicode-linebreak v0.1.5
Compiling getrandom v0.3.4
Compiling wordcraft-layout v0.9.0 (/mnt/storage/scratch/gyro-full-lock-measure-95ntu6t0/source/crates/layout)
Compiling epaint v0.36.2
Compiling krilla v0.8.2 (https://github.com/storytold/craft-libs?rev=c3487320b2d1de657b860b3c8abb44e1f2b32bd8#c3487320)
Compiling itertools v0.15.0
Compiling glifo v0.3.0
Compiling cipher v0.5.2
Compiling zip v3.0.0
Compiling sha1 v0.11.0
Compiling accesskit v0.24.1
Compiling wgpu-core v30.0.1
Compiling aho-corasick v1.1.5
Compiling quick-xml v0.41.0
Compiling wordcraft-metafile v0.9.0 (/mnt/storage/scratch/gyro-full-lock-measure-95ntu6t0/source/crates/metafile)
Compiling winnow v1.0.4
Compiling litrs v1.0.0
Compiling regex-syntax v0.8.11
Compiling cpubits v0.1.1
Compiling aes v0.9.3
Compiling document-features v0.2.12
Compiling toml_parser v1.1.3+spec-1.1.0
Compiling wgpu-core-deps-wasm v30.0.1
Compiling egui v0.36.2
Compiling vello_cpu v0.2.0
Compiling regex-automata v0.4.18
Compiling craft-pdf v0.1.0 (https://github.com/storytold/craft-libs?rev=c3487320b2d1de657b860b3c8abb44e1f2b32bd8#c3487320)
Compiling chardetng v1.0.0
Compiling toml_datetime v1.1.1+spec-1.1.0
Compiling serde_spanned v1.1.1
Compiling hmac v0.13.0
Compiling sha2 v0.11.0
Compiling wasm-bindgen-futures v0.4.79
Compiling wgpu v30.0.1
Compiling toml_writer v1.1.2+spec-1.1.0
Compiling zeroize v1.9.1
Compiling wordcraft-docx v0.9.0 (/mnt/storage/scratch/gyro-full-lock-measure-95ntu6t0/source/crates/docx)
Compiling toml v1.1.6+spec-1.1.0
Compiling regex v1.13.1
Compiling wordcraft-formats v0.9.0 (/mnt/storage/scratch/gyro-full-lock-measure-95ntu6t0/source/crates/formats)
Compiling wordcraft-pdf v0.9.0 (/mnt/storage/scratch/gyro-full-lock-measure-95ntu6t0/source/crates/pdf)
Compiling wordcraft-render v0.9.0 (/mnt/storage/scratch/gyro-full-lock-measure-95ntu6t0/source/crates/render)
Compiling wordcraft-docbin v0.9.0 (/mnt/storage/scratch/gyro-full-lock-measure-95ntu6t0/source/crates/docbin)
Compiling wordcraft-engine v0.9.0 (/mnt/storage/scratch/gyro-full-lock-measure-95ntu6t0/source/crates/engine)
Compiling wordcraft-ui-egui v0.9.0 (/mnt/storage/scratch/gyro-full-lock-measure-95ntu6t0/source/crates/ui-egui)
Compiling type-map v0.5.1
Compiling rfd v0.17.2
Compiling craft-ui v0.1.0 (https://github.com/storytold/craft-libs?rev=d27646a5f7c8b4fc85d9dd3213b8c88b58e0088d#d27646a5)
Compiling sys-locale v0.3.2
Compiling percent-encoding v2.3.2
warning: function `by_author` is never used
--> crates/engine/src/cmd/citations.rs:534:4
|
534 | fn by_author(x: &Source) -> &str {
| ^^^^^^^^^
|
= note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
warning: function `primary_tag` is never used
--> crates/engine/src/speech.rs:252:4
|
252 | fn primary_tag(tag: &str) -> Option<String> {
| ^^^^^^^^^^^
warning: function `voice_language` is never used
--> crates/engine/src/speech.rs:260:4
|
260 | fn voice_language(lang: Option<&str>, default: &str) -> Option<String> {
| ^^^^^^^^^^^^^^
Compiling egui-wgpu v0.36.2
Compiling wordcraft-zotero v0.9.0 (/mnt/storage/scratch/gyro-full-lock-measure-95ntu6t0/source/crates/zotero)
Compiling eframe v0.36.2
warning: `wordcraft-engine` (lib) generated 3 warnings
Compiling wordcraft-web v0.9.0 (/mnt/storage/scratch/gyro-full-lock-measure-95ntu6t0/source/apps/wordcraft-web)
Finished `release` profile [optimized] target(s) in 3m 23s
2026-10-24T06:16:16.271064Z INFO applying new distribution
2026-10-24T06:16:16.271692Z INFO success
@@ -1,105 +0,0 @@
{
"note": "read-only observation from full-lock scratch metadata, not a proposed/imported reduced vendor set; compiled normal/build closure remains exactly S0",
"count": 14,
"bytes": 14523104,
"packages": [
{
"name": "cursor-icon",
"version": "1.2.0",
"source": "registry+https://github.com/rust-lang/crates.io-index",
"files": 14,
"bytes": 44329
},
{
"name": "dpi",
"version": "0.1.2",
"source": "registry+https://github.com/rust-lang/crates.io-index",
"files": 11,
"bytes": 64188
},
{
"name": "futures-macro",
"version": "0.3.34",
"source": "registry+https://github.com/rust-lang/crates.io-index",
"files": 12,
"bytes": 41731
},
{
"name": "glifo",
"version": "0.2.0",
"source": "registry+https://github.com/rust-lang/crates.io-index",
"files": 20,
"bytes": 222068
},
{
"name": "ordered-float",
"version": "5.5.0",
"source": "registry+https://github.com/rust-lang/crates.io-index",
"files": 14,
"bytes": 179606
},
{
"name": "pin-project",
"version": "1.1.13",
"source": "registry+https://github.com/rust-lang/crates.io-index",
"files": 209,
"bytes": 476259
},
{
"name": "pin-project-internal",
"version": "1.1.13",
"source": "registry+https://github.com/rust-lang/crates.io-index",
"files": 15,
"bytes": 114911
},
{
"name": "smol_str",
"version": "0.2.2",
"source": "registry+https://github.com/rust-lang/crates.io-index",
"files": 14,
"bytes": 56395
},
{
"name": "spirv",
"version": "0.4.0+sdk-1.4.341.0",
"source": "registry+https://github.com/rust-lang/crates.io-index",
"files": 9,
"bytes": 257440
},
{
"name": "termcolor",
"version": "1.4.1",
"source": "registry+https://github.com/rust-lang/crates.io-index",
"files": 12,
"bytes": 92727
},
{
"name": "tracing",
"version": "0.1.44",
"source": "registry+https://github.com/rust-lang/crates.io-index",
"files": 94,
"bytes": 9827320
},
{
"name": "tracing-attributes",
"version": "0.1.31",
"source": "registry+https://github.com/rust-lang/crates.io-index",
"files": 31,
"bytes": 184696
},
{
"name": "tracing-core",
"version": "0.1.36",
"source": "registry+https://github.com/rust-lang/crates.io-index",
"files": 29,
"bytes": 257879
},
{
"name": "winit",
"version": "0.30.13",
"source": "registry+https://github.com/rust-lang/crates.io-index",
"files": 218,
"bytes": 2703555
}
]
}
@@ -1,2 +0,0 @@
{"atUTC": "2026-10-24T06:10:11.225848+00:00", "processes": [{"pid": 1585414, "nice": 19, "cpus": [12, 13, 14, 15], "name": "trunk"}, {"pid": 1585433, "nice": 19, "cpus": [12, 13, 14, 15], "name": "cargo"}, {"pid": 1589366, "nice": 19, "cpus": [12, 13, 14, 15], "name": "rustc"}, {"pid": 1589563, "nice": 19, "cpus": [12, 13, 14, 15], "name": "rustc"}, {"pid": 1590336, "nice": 19, "cpus": [12, 13, 14, 15], "name": "rustc"}, {"pid": 1590472, "nice": 19, "cpus": [12, 13, 14, 15], "name": "rustc"}]}
{"atUTC": "2026-10-24T06:13:38.818103+00:00", "processes": [{"pid": 1631174, "name": "wasm-opt", "nice": 19, "cpus": [12, 13, 14, 15], "threads": 5}]}
File diff suppressed because it is too large. Load diff
@@ -1,12 +0,0 @@
command: cargo metadata --locked --offline --filter-platform wasm32-unknown-unknown --format-version 1
exit: 101
error: failed to select a version for the requirement `glifo = "^0.2.0"` (locked to 0.2.0)
candidate versions found which didn't match: 0.3.0
location searched: directory source `/mnt/storage/scratch/gyro-w2-resolution/cargo-vendor` (which is replacing registry `crates-io`)
required by package `vello_cpu v0.1.0`
... which satisfies dependency `vello_cpu = "^0.1.0"` (locked to 0.1.0) of package `epaint v0.36.2`
... which satisfies dependency `epaint = "^0.36.2"` (locked to 0.36.2) of package `egui v0.36.2`
... which satisfies dependency `egui = "^0.36"` (locked to 0.36.2) of package `wordcraft-web v0.9.0 (/mnt/storage/scratch/gyro-w2-resolution/source/apps/wordcraft-web)`
note: perhaps a crate was updated and forgotten to be re-vendored?
note: offline mode (via `--offline`) can sometimes cause surprising resolution failures
help: if this error is too confusing you may wish to retry without `--offline`
@@ -1,11 +0,0 @@
✔ WordCraft inputs have a verifiable offline source receipt (1793.67392ms)
✔ input verifier refuses altered, missing and unrecorded files (1.797894ms)
✔ included upstream subset equals the pinned protected git tree (51.472281ms)
ℹ tests 3
ℹ suites 0
ℹ pass 3
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 1893.050007
@@ -1,46 +0,0 @@
✖ WordCraft inputs have a verifiable offline source receipt (0.933599ms)
✖ input verifier refuses altered, missing and unrecorded files (0.211521ms)
ℹ tests 2
ℹ suites 0
ℹ pass 0
ℹ fail 2
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 46.579384
✖ failing tests:
test at packages/webui/tests/wordcraft-provenance.test.mjs:9:1
✖ WordCraft inputs have a verifiable offline source receipt (0.933599ms)
AssertionError [ERR_ASSERTION]: owned verifier must exist
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gyro-row310/packages/webui/tests/wordcraft-provenance.test.mjs:10:10)
at Test.runInAsyncScope (node:async_hooks:226:14)
at Test.run (node:internal/test_runner/test:1402:25)
at Test.start (node:internal/test_runner/test:1262:17)
at startSubtestAfterBootstrap (node:internal/test_runner/harness:387:17) {
generatedMessage: false,
code: 'ERR_ASSERTION',
actual: false,
expected: true,
operator: '==',
diff: 'simple'
}
test at packages/webui/tests/wordcraft-provenance.test.mjs:18:1
✖ input verifier refuses altered, missing and unrecorded files (0.211521ms)
AssertionError [ERR_ASSERTION]: owned verifier must exist
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gyro-row310/packages/webui/tests/wordcraft-provenance.test.mjs:19:10)
at Test.runInAsyncScope (node:async_hooks:226:14)
at Test.run (node:internal/test_runner/test:1402:25)
at Test.processPendingSubtests (node:internal/test_runner/test:974:18)
at Test.postRun (node:internal/test_runner/test:1542:19)
at Test.run (node:internal/test_runner/test:1467:12)
at async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3) {
generatedMessage: false,
code: 'ERR_ASSERTION',
actual: false,
expected: true,
operator: '==',
diff: 'simple'
}
@@ -1,26 +0,0 @@
debug_assertions
panic="abort"
target_abi=""
target_arch="wasm32"
target_endian="little"
target_env=""
target_family="wasm"
target_feature="bulk-memory"
target_feature="multivalue"
target_feature="mutable-globals"
target_feature="nontrapping-fptoint"
target_feature="reference-types"
target_feature="sign-ext"
target_has_atomic="16"
target_has_atomic="32"
target_has_atomic="64"
target_has_atomic="8"
target_has_atomic="ptr"
target_has_atomic_primitive_alignment="16"
target_has_atomic_primitive_alignment="32"
target_has_atomic_primitive_alignment="64"
target_has_atomic_primitive_alignment="8"
target_has_atomic_primitive_alignment="ptr"
target_os="unknown"
target_pointer_width="32"
target_vendor="unknown"
@@ -1,416 +0,0 @@
{
"metadataSha256": "503bcf5a2a6d3fc814b0422bf3658cc3a187b182d2928da11e8ed68519b9d8fb",
"note": "S0 cargo metadata includes workspace feature unification; evidence of a constraint conflict, not exact root-only feature proof",
"edges": [
{
"crate": "eframe-0.36.2",
"feature": "accesskit",
"edge": "egui-winit/accesskit"
},
{
"crate": "eframe-0.36.2",
"feature": "links",
"edge": "egui-winit/links"
},
{
"crate": "eframe-0.36.2",
"feature": "wayland",
"edge": "egui-winit/wayland"
},
{
"crate": "eframe-0.36.2",
"feature": "wayland",
"edge": "glutin?/wayland"
},
{
"crate": "eframe-0.36.2",
"feature": "wayland",
"edge": "glutin-winit?/wayland"
},
{
"crate": "eframe-0.36.2",
"feature": "wgpu_no_default_features",
"edge": "dep:pollster"
},
{
"crate": "eframe-0.36.2",
"feature": "x11",
"edge": "egui-winit/x11"
},
{
"crate": "eframe-0.36.2",
"feature": "x11",
"edge": "glutin?/x11"
},
{
"crate": "eframe-0.36.2",
"feature": "x11",
"edge": "glutin?/glx"
},
{
"crate": "eframe-0.36.2",
"feature": "x11",
"edge": "glutin-winit?/x11"
},
{
"crate": "eframe-0.36.2",
"feature": "x11",
"edge": "glutin-winit?/glx"
},
{
"crate": "rfd-0.17.2",
"feature": "wayland",
"edge": "wayland-backend"
},
{
"crate": "rfd-0.17.2",
"feature": "wayland",
"edge": "wayland-client"
},
{
"crate": "rfd-0.17.2",
"feature": "wayland",
"edge": "wayland-protocols"
},
{
"crate": "rfd-0.17.2",
"feature": "xdg-portal",
"edge": "pollster"
},
{
"crate": "wgpu-core-30.0.1",
"feature": "dx12",
"edge": "wgpu-core-deps-windows-linux-android/dx12"
},
{
"crate": "wgpu-core-30.0.1",
"feature": "gles",
"edge": "wgpu-core-deps-windows-linux-android/gles"
},
{
"crate": "wgpu-core-30.0.1",
"feature": "gles",
"edge": "wgpu-core-deps-emscripten/gles"
},
{
"crate": "wgpu-core-30.0.1",
"feature": "metal",
"edge": "wgpu-core-deps-apple/metal"
},
{
"crate": "wgpu-core-30.0.1",
"feature": "renderdoc",
"edge": "wgpu-core-deps-windows-linux-android/renderdoc"
},
{
"crate": "wgpu-core-30.0.1",
"feature": "vulkan",
"edge": "wgpu-core-deps-windows-linux-android/vulkan"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "dx12",
"edge": "dep:bit-set"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "dx12",
"edge": "dep:gpu-allocator"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "dx12",
"edge": "dep:libloading"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "dx12",
"edge": "dep:once_cell"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "dx12",
"edge": "dep:range-alloc"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "dx12",
"edge": "dep:windows-core"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "dx12",
"edge": "gpu-allocator/d3d12"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "dx12",
"edge": "once_cell/std"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "dx12",
"edge": "windows/Win32_Devices_DeviceAndDriverInstallation"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "dx12",
"edge": "windows/Win32_Devices_Display"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "dx12",
"edge": "windows/Win32_Graphics_Direct3D_Dxc"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "dx12",
"edge": "windows/Win32_Graphics_Direct3D_Fxc"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "dx12",
"edge": "windows/Win32_Graphics_Direct3D"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "dx12",
"edge": "windows/Win32_Graphics_Direct3D12"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "dx12",
"edge": "windows/Win32_Graphics_DirectComposition"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "dx12",
"edge": "windows/Win32_Graphics_Dxgi_Common"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "dx12",
"edge": "windows/Win32_Graphics_Gdi"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "dx12",
"edge": "windows/Win32_Security"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "dx12",
"edge": "windows/Win32_System_Diagnostics_Debug"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "dx12",
"edge": "windows/Win32_System_Kernel"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "dx12",
"edge": "windows/Win32_System_Performance"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "dx12",
"edge": "windows/Win32_System_Threading"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "dx12",
"edge": "windows/Win32_UI_WindowsAndMessaging"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "gles",
"edge": "dep:glutin_wgl_sys"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "gles",
"edge": "dep:khronos-egl"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "gles",
"edge": "dep:libloading"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "gles",
"edge": "dep:ndk-sys"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "gles",
"edge": "dep:objc2"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "gles",
"edge": "dep:wayland-sys"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "gles",
"edge": "dep:windows-result"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "gles",
"edge": "windows-result/std"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "gles",
"edge": "windows/Win32_Graphics_Gdi"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "gles",
"edge": "windows/Win32_Graphics_OpenGL"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "gles",
"edge": "windows/Win32_System_LibraryLoader"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "gles",
"edge": "windows/Win32_UI_WindowsAndMessaging"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "metal",
"edge": "dep:block2"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "metal",
"edge": "dep:libloading"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "metal",
"edge": "dep:objc2"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "metal",
"edge": "dep:objc2-core-foundation"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "metal",
"edge": "dep:objc2-core-graphics"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "metal",
"edge": "dep:objc2-foundation"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "metal",
"edge": "dep:objc2-metal"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "metal",
"edge": "dep:objc2-quartz-core"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "metal",
"edge": "dep:smallvec"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "metal",
"edge": "dep:raw-window-metal"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "renderdoc",
"edge": "dep:libloading"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "renderdoc",
"edge": "dep:renderdoc-sys"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "vulkan",
"edge": "dep:android_system_properties"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "vulkan",
"edge": "dep:ash"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "vulkan",
"edge": "dep:libc"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "vulkan",
"edge": "dep:libloading"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "vulkan",
"edge": "dep:raw-window-metal"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "vulkan",
"edge": "dep:smallvec"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "vulkan",
"edge": "dep:windows"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "vulkan",
"edge": "gpu-allocator/vulkan"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "vulkan",
"edge": "windows/Win32"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "vulkan",
"edge": "windows/Win32_Devices_Display"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "vulkan",
"edge": "windows/Win32_Foundation"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "vulkan",
"edge": "windows/Win32_Graphics_Dxgi"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "vulkan",
"edge": "windows/Win32_Graphics_Dxgi_Common"
},
{
"crate": "wgpu-hal-30.0.1",
"feature": "vulkan",
"edge": "windows/Win32_Graphics_Gdi"
}
]
}
@@ -1,526 +0,0 @@
[
{
"crate": "aes-0.9.3",
"cfg": "cfg(any(target_arch = \"aarch64\", target_arch = \"x86_64\", target_arch = \"x86\"))",
"kind": "dependencies",
"dependencies": [
"cpufeatures"
]
},
{
"crate": "bytes-1.12.1",
"cfg": "cfg(loom)",
"kind": "dev-dependencies",
"dependencies": [
"loom"
]
},
{
"crate": "cmov-0.5.4",
"cfg": "cfg(any(unix, windows))",
"kind": "dev-dependencies",
"dependencies": [
"proptest"
]
},
{
"crate": "eframe-0.36.2",
"cfg": "cfg(any(target_os = \"macos\"))",
"kind": "dependencies",
"dependencies": [
"objc2",
"objc2-app-kit",
"objc2-foundation"
]
},
{
"crate": "eframe-0.36.2",
"cfg": "cfg(any(target_os = \"windows\"))",
"kind": "dependencies",
"dependencies": [
"windows-sys"
]
},
{
"crate": "eframe-0.36.2",
"cfg": "cfg(not(target_arch = \"wasm32\"))",
"kind": "dependencies",
"dependencies": [
"egui-wgpu",
"egui-winit",
"glutin",
"glutin-winit",
"image",
"pollster",
"winit"
]
},
{
"crate": "eframe-0.36.2",
"cfg": "cfg(not(target_arch = \"wasm32\"))",
"kind": "dev-dependencies",
"dependencies": [
"directories"
]
},
{
"crate": "encoding_rs-0.8.42",
"cfg": "cfg(all(any(target_arch = \"x86_64\", target_arch = \"x86\"), not(all(target_feature = \"avx2\", target_feature = \"bmi1\"))))",
"kind": "dependencies",
"dependencies": [
"multiversion"
]
},
{
"crate": "encoding_rs-0.8.42",
"cfg": "cfg(any(target_arch = \"x86_64\", target_arch = \"x86\"))",
"kind": "dependencies",
"dependencies": [
"core_detect"
]
},
{
"crate": "getrandom-0.3.4",
"cfg": "cfg(all(any(target_os = \"linux\", target_os = \"android\"), not(any(all(target_os = \"linux\", target_env = \"\"), getrandom_backend = \"custom\", getrandom_backend = \"linux_raw\", getrandom_backend = \"rdrand\", getrandom_backend = \"rndr\"))))",
"kind": "dependencies",
"dependencies": [
"libc"
]
},
{
"crate": "getrandom-0.3.4",
"cfg": "cfg(all(target_arch = \"wasm32\", target_os = \"wasi\", target_env = \"p2\"))",
"kind": "dependencies",
"dependencies": [
"wasip2"
]
},
{
"crate": "getrandom-0.3.4",
"cfg": "cfg(all(target_os = \"uefi\", getrandom_backend = \"efi_rng\"))",
"kind": "dependencies",
"dependencies": [
"r-efi"
]
},
{
"crate": "getrandom-0.3.4",
"cfg": "cfg(any(target_os = \"dragonfly\", target_os = \"freebsd\", target_os = \"hurd\", target_os = \"illumos\", target_os = \"cygwin\", all(target_os = \"horizon\", target_arch = \"arm\")))",
"kind": "dependencies",
"dependencies": [
"libc"
]
},
{
"crate": "getrandom-0.3.4",
"cfg": "cfg(any(target_os = \"haiku\", target_os = \"redox\", target_os = \"nto\", target_os = \"aix\"))",
"kind": "dependencies",
"dependencies": [
"libc"
]
},
{
"crate": "getrandom-0.3.4",
"cfg": "cfg(any(target_os = \"ios\", target_os = \"visionos\", target_os = \"watchos\", target_os = \"tvos\"))",
"kind": "dependencies",
"dependencies": [
"libc"
]
},
{
"crate": "getrandom-0.3.4",
"cfg": "cfg(any(target_os = \"macos\", target_os = \"openbsd\", target_os = \"vita\", target_os = \"emscripten\"))",
"kind": "dependencies",
"dependencies": [
"libc"
]
},
{
"crate": "getrandom-0.3.4",
"cfg": "cfg(target_os = \"netbsd\")",
"kind": "dependencies",
"dependencies": [
"libc"
]
},
{
"crate": "getrandom-0.3.4",
"cfg": "cfg(target_os = \"solaris\")",
"kind": "dependencies",
"dependencies": [
"libc"
]
},
{
"crate": "getrandom-0.3.4",
"cfg": "cfg(target_os = \"vxworks\")",
"kind": "dependencies",
"dependencies": [
"libc"
]
},
{
"crate": "half-2.7.1",
"cfg": "cfg(target_arch = \"spirv\")",
"kind": "dependencies",
"dependencies": [
"crunchy"
]
},
{
"crate": "harfrust-0.12.0",
"cfg": "cfg(target_vendor = \"apple\")",
"kind": "dev-dependencies",
"dependencies": [
"objc2-core-foundation",
"objc2-core-text"
]
},
{
"crate": "harfrust-0.13.3",
"cfg": "cfg(target_vendor = \"apple\")",
"kind": "dev-dependencies",
"dependencies": [
"objc2-core-foundation",
"objc2-core-text"
]
},
{
"crate": "hashbrown-0.17.1",
"cfg": "cfg(any())",
"kind": "dependencies",
"dependencies": [
"serde"
]
},
{
"crate": "hashbrown-0.17.1",
"cfg": "cfg(unix)",
"kind": "dev-dependencies",
"dependencies": [
"libc"
]
},
{
"crate": "indexmap-2.14.2",
"cfg": "cfg(any())",
"kind": "dependencies",
"dependencies": [
"serde"
]
},
{
"crate": "parking_lot_core-0.9.12",
"cfg": "cfg(target_os = \"redox\")",
"kind": "dependencies",
"dependencies": [
"redox_syscall"
]
},
{
"crate": "parking_lot_core-0.9.12",
"cfg": "cfg(unix)",
"kind": "dependencies",
"dependencies": [
"libc"
]
},
{
"crate": "parking_lot_core-0.9.12",
"cfg": "cfg(windows)",
"kind": "dependencies",
"dependencies": [
"windows-link"
]
},
{
"crate": "png-0.18.1",
"cfg": "cfg(not(target_arch = \"wasm32\"))",
"kind": "dev-dependencies",
"dependencies": [
"criterion"
]
},
{
"crate": "rfd-0.17.2",
"cfg": "cfg(any(target_os = \"linux\", target_os = \"freebsd\", target_os = \"dragonfly\", target_os = \"netbsd\", target_os = \"openbsd\"))",
"kind": "dependencies",
"dependencies": [
"glib-sys",
"gobject-sys",
"gtk-sys",
"libc",
"percent-encoding",
"pollster",
"wayland-backend",
"wayland-client",
"wayland-protocols"
]
},
{
"crate": "rfd-0.17.2",
"cfg": "cfg(target_os = \"macos\")",
"kind": "dependencies",
"dependencies": [
"block2",
"dispatch2",
"objc2",
"objc2-app-kit",
"objc2-core-foundation",
"objc2-foundation"
]
},
{
"crate": "rfd-0.17.2",
"cfg": "cfg(target_os = \"windows\")",
"kind": "dependencies",
"dependencies": [
"windows-sys"
]
},
{
"crate": "serde_core-1.0.229",
"cfg": "cfg(any())",
"kind": "dependencies",
"dependencies": [
"serde_derive"
]
},
{
"crate": "serde_json-1.0.151",
"cfg": "cfg(any())",
"kind": "dependencies",
"dependencies": [
"serde"
]
},
{
"crate": "sha1-0.11.0",
"cfg": "cfg(any(target_arch = \"aarch64\", target_arch = \"x86\", target_arch = \"x86_64\"))",
"kind": "dependencies",
"dependencies": [
"cpufeatures"
]
},
{
"crate": "sha2-0.11.0",
"cfg": "cfg(any(target_arch = \"aarch64\", target_arch = \"x86_64\", target_arch = \"x86\"))",
"kind": "dependencies",
"dependencies": [
"cpufeatures"
]
},
{
"crate": "sys-locale-0.3.2",
"cfg": "cfg(target_os = \"android\")",
"kind": "dependencies",
"dependencies": [
"libc"
]
},
{
"crate": "uuid-1.27.0",
"cfg": "cfg(not(all(target_arch = \"wasm32\", any(target_os = \"unknown\", target_os = \"none\"))))",
"kind": "dependencies",
"dependencies": [
"getrandom",
"rand"
]
},
{
"crate": "uuid-1.27.0",
"cfg": "cfg(not(target_arch = \"wasm32\"))",
"kind": "dev-dependencies",
"dependencies": [
"gungraun"
]
},
{
"crate": "wasm-bindgen-0.2.129",
"cfg": "cfg(all(target_os = \"emscripten\", wasm_bindgen_unstable_tokio))",
"kind": "dev-dependencies",
"dependencies": [
"tokio"
]
},
{
"crate": "wasm-bindgen-0.2.129",
"cfg": "cfg(target_arch = \"wasm64\")",
"kind": "dev-dependencies",
"dependencies": [
"paste",
"serde_derive"
]
},
{
"crate": "wasm-bindgen-futures-0.4.79",
"cfg": "cfg(all(target_os = \"emscripten\", wasm_bindgen_unstable_tokio))",
"kind": "dependencies",
"dependencies": [
"tokio"
]
},
{
"crate": "web-time-1.1.0",
"cfg": "cfg(not(target_family = \"wasm\"))",
"kind": "dev-dependencies",
"dependencies": [
"pollster"
]
},
{
"crate": "wgpu-30.0.1",
"cfg": "cfg(not(target_arch = \"wasm32\"))",
"kind": "dependencies",
"dependencies": [
"smallvec",
"wgpu-core",
"wgpu-hal"
]
},
{
"crate": "wgpu-30.0.1",
"cfg": "cfg(target_os = \"emscripten\")",
"kind": "dependencies",
"dependencies": [
"smallvec",
"wgpu-core",
"wgpu-hal"
]
},
{
"crate": "wgpu-core-30.0.1",
"cfg": "cfg(any(windows, target_os = \"linux\", target_os = \"android\", target_os = \"freebsd\"))",
"kind": "dependencies",
"dependencies": [
"wgpu-core-deps-windows-linux-android"
]
},
{
"crate": "wgpu-core-30.0.1",
"cfg": "cfg(target_os = \"emscripten\")",
"kind": "dependencies",
"dependencies": [
"wgpu-core-deps-emscripten"
]
},
{
"crate": "wgpu-core-30.0.1",
"cfg": "cfg(target_vendor = \"apple\")",
"kind": "dependencies",
"dependencies": [
"wgpu-core-deps-apple"
]
},
{
"crate": "wgpu-hal-30.0.1",
"cfg": "cfg(all(unix, not(target_vendor = \"apple\"), not(target_family = \"wasm\")))",
"kind": "dependencies",
"dependencies": [
"drm"
]
},
{
"crate": "wgpu-hal-30.0.1",
"cfg": "cfg(all(windows, not(target_arch = \"aarch64\"), target_env = \"msvc\"))",
"kind": "dependencies",
"dependencies": [
"mach-dxcompiler-rs"
]
},
{
"crate": "wgpu-hal-30.0.1",
"cfg": "cfg(not(any(target_arch = \"wasm32\", target_os = \"ios\", target_os = \"visionos\", target_env = \"ohos\")))",
"kind": "dev-dependencies",
"dependencies": [
"glutin",
"glutin-winit"
]
},
{
"crate": "wgpu-hal-30.0.1",
"cfg": "cfg(not(target_arch = \"wasm32\"))",
"kind": "dependencies",
"dependencies": [
"ash",
"gpu-allocator",
"khronos-egl",
"libloading",
"renderdoc-sys",
"smallvec"
]
},
{
"crate": "wgpu-hal-30.0.1",
"cfg": "cfg(target_os = \"android\")",
"kind": "dependencies",
"dependencies": [
"android_system_properties",
"ndk-sys"
]
},
{
"crate": "wgpu-hal-30.0.1",
"cfg": "cfg(target_os = \"emscripten\")",
"kind": "dependencies",
"dependencies": [
"khronos-egl",
"libloading"
]
},
{
"crate": "wgpu-hal-30.0.1",
"cfg": "cfg(target_vendor = \"apple\")",
"kind": "dependencies",
"dependencies": [
"block2",
"bytemuck",
"objc2",
"objc2-core-foundation",
"objc2-core-graphics",
"objc2-foundation",
"objc2-metal",
"objc2-quartz-core",
"raw-window-metal"
]
},
{
"crate": "wgpu-hal-30.0.1",
"cfg": "cfg(unix)",
"kind": "dependencies",
"dependencies": [
"libc",
"wayland-sys"
]
},
{
"crate": "wgpu-hal-30.0.1",
"cfg": "cfg(windows)",
"kind": "dependencies",
"dependencies": [
"bit-set",
"glutin_wgl_sys",
"once_cell",
"range-alloc",
"windows",
"windows-core",
"windows-result"
]
},
{
"crate": "zerocopy-0.8.61",
"cfg": "cfg(any())",
"kind": "dependencies",
"dependencies": [
"zerocopy-derive"
]
},
{
"crate": "zip-3.0.0",
"cfg": "cfg(fuzzing)",
"kind": "dependencies",
"dependencies": [
"arbitrary"
]
}
]
File diff suppressed because it is too large. Load diff
-5
View File
@@ -1625,8 +1625,3 @@ are never rewritten or removed; corrections are new entries.
2026-10-24T04:29Z | Duckworth (Opus 5.5) | row 208 (193d) second review, guards only, on 4a4bef6c1 (sage-3934) | APPROVE (static), no bus change, every hidden control has a broker refusal, grant hint per-grant and self-only, N1 5 s poll (duckworth-0302) |
2026-10-24T04:27Z | Goldie (a13dd6d5-5e73-4b7d-8318-02abeff24940) | Row265 / #1770 C2-09b rooms | Goldie owns build, Boyd reviews under sage-3915. New goldie/row265 worktree at ec86f2c84, claim rev3814; room verbs/parser/new tests prepared, no old tests changed. Sage-3932 slot: new parser14/14 and rooms18/18 passed; whole bus in progress before refusal mutants, stop rule active.
2026-10-24T04:35Z | Goldie (a13dd6d5-5e73-4b7d-8318-02abeff24940) | Row265 / #1770 verified | First slot stopped at project-runtime import pin. mos-1567 narrowly authorizes pin and pure-source mount correction. sage-3942 rerun: sandbox10/10, parser15/15, rooms18/18, bus957/957, twelve refusal mutants killed/restored SHA71b32ee4, parser15/15 + rooms18/18 again. Slot returned goldie-0034; no further test runs. Boyd reviews RUNNER_FILES alongside rooms; own-branch push/claimant in-review next.
2026-10-24 — Gyro — row 310 / #1824 W2 source import and reproducible restricted web build — started on gyro/row310 at d16958bcf; reading pinned S0 and planning, build/test slot gates apply.
2026-10-24 — Gyro — row 310 / #1824 W2, sage-3992 scratch full-lock sizing/build measurement — extracted 534 cached registry sources, verified exact S0 target/build package sets, offline namespace release retry succeeded in 397.864805 s at nice19/four jobs; outputs pack to 16,720,159 bytes. No full-lock repo import, commit, push or serving. Packaging remains held for Mos/Jason; row stays in-progress.
2026-10-24 — Gyro — row 310 / #1824, sage-4008/4010 223-source measurement — scratch209+14 measured (145,260,334 bytes; source blob pack26,538,894 bytes); extra14 pack1,720,566 bytes; generated scratch lock prunes332 entries with0 added/changed. Build awaits Sage CLEAR after row327 gate. Plain-text results prepared for Gladstone; no crate sources/runtime outputs committed.
2026-10-24 — Gyro — row310 / #1824, sage-4014 223-source release measurement — frozen offline scratch build exit0 in380.674036s at nice19/four jobs; WASM0322beb9... differs from full-lockc1c15050.... Slot released to Sage/Bradford. Gladstone14-source notice concerns inventoried and plain-text notice collection supplemented; no source/runtime adoption or row release.
2026-10-24 — Gyro — row310 supplemental notice recheck gladstone-0027 — recorded four collection/mapping PASS results and independently matched bundle SHA4d8e2aac...; policy/runtime/adoption gates and Vikunja618 hold unchanged. Tracking-only text update; no build or source change.
+25
View File
@@ -1365,3 +1365,28 @@ public sign-in smoke and a forged-loopback 401 check; rollback drops flags
before middleware. Same-uid callers can still read the file; separate service
uid is Jason's question on #385. The Authentik allowed-uid file remains an
identity input and is never reused for proof.
## `scripts/push-check.sh` — verify a prospective push
`scripts/push-check.sh SHA EXPECTED_LOG [--row N]... [--base-ref REF] [--fetch]`
checks the repository at the caller's cwd; it never pushes or writes the queue.
Git checks cover the full repository even from a subdirectory; EXPECTED_LOG is
resolved relative to the original caller. Non-UTF-8 git paths refuse with exit 2.
EXPECTED_LOG must contain exactly `git log --oneline BASE..SHA` (including its
newlines). BASE defaults to `refs/remotes/origin/refactor`; `--base-ref` overrides
it. Only `--fetch` fetches origin, before resolving BASE.
Success prints `LOG_OK`, `FF_OK`, `NO_BINARY` or `BINARY_REVIEWED n`,
`SECRETS_CLEAN`, `NO_ATTRIBUTION`, then `PUSH_READY BASE..SHA` as the last line.
A changed present blob counts as binary when numstat marks it binary or its
first 8000 committed bytes contain NUL, regardless of git attributes. Each
present binary needs its committed blob sha256 and exact path in an approved
latest-round candidate from a supplied row. A `changes` receipt blocks that round.
Commit candidates authorize only changed paths with matching bytes and mode.
Deleted binaries need no review. Queue reads retain canonical-checkout checks
and refuse unconfirmed durable tails with exit 2.
Exit 0 means ready; 1 means refusal (`STOP reason`, always the last line); 2 means
usage or environment error. A refusal never prints later success tokens.
`timeout -k 10 240 bash scripts/test-push-check.sh` exercises isolated scratch
repositories and the six required mutants; set TMPDIR to a scratch filesystem.
@@ -0,0 +1,103 @@
# Push check in the repository, with reviewed binaries
Written 2026-10-24 by Sage for Mos's mos-1572 ("Go with A for the guard"), after rows 265 and 310
raised the binary question (mos-1570, sage-3978).
## Brief: push-check.sh passes a binary only when the reviewed candidate lists its path and sha256
**Why.** The lead's push check is a scratch script, `/mnt/storage/scratch/sage-r64/pushcheck.sh`
(mos-0856/0857), so nobody has reviewed it and no test covers it. Its `NO_BINARY` step refuses any
path that `git diff --numstat BASE SHA` reports as binary (`-` in the first column). Row 265 had to
waive that step by hand for 22 gzip logs. Row 310 (W2) will need committed WASM, fonts and test blobs.
Mos chose option A: keep the binary check, and let a binary through only when its path and sha256
appear in the candidate a reviewer approved. Whether any large binary lands at all is a separate
question for Jason (Vikunja 618). This row builds the guard, not that answer.
**Read first.**
- The scratch script, copied under "The scratch script today" at the end of this brief. Don't read
`/mnt/storage/scratch/sage-r64` itself; it's Sage's scratch.
- `packages/queue/README.md`, sections on `move ID in-review` (manifest and commit candidates) and
`review verify-commit`. `packages/queue/src/review.mjs` for how a round's candidate and its receipts
are stored. Running `scripts/mosaic queue show N` prints them.
- `docs/plans/2026-10-20_force-push-guard.md`, row 211 (Darkwing, in progress). That row owns
`scripts/git-hooks/pre-push`, the hook install and `scripts/slot-busy.sh`. Don't touch those files,
and don't wire this check into a hook.
**What ships.**
1. `scripts/push-check.sh SHA EXPECTED_LOG [--row N]...` (new). It runs the scratch script's steps in
the same order and prints the same tokens, so the lead's push sequence only changes its path:
`LOG_OK`, `FF_OK`, `NO_BINARY` or `BINARY_REVIEWED <n>`, `SECRETS_CLEAN`, `NO_ATTRIBUTION`, then
`PUSH_READY BASE..SHA` as the last line. Every refusal prints one `STOP <reason>` line and exits 1.
A usage or environment error exits 2. It works in the repository the caller's cwd is in. The base
ref defaults to `refs/remotes/origin/refactor`, and `--base-ref REF` overrides it for tests. A fetch
happens only when `--fetch` is given, and the lead's sequence passes it.
2. The binary step. For each path that `git diff --numstat BASE SHA` marks binary and that exists at
SHA (a deleted binary needs no review):
- compute the sha256 of the blob at `SHA:path` (`git cat-file blob`, not the working tree);
- look for an approved candidate among the `--row` rows. A round counts only when it is the row's
latest round and has a receipt with verdict `approve` whose candidate equals that round's
candidate. A `changes` receipt in the same round blocks it;
- for a manifest candidate, the manifest must hold the line `<sha256> <path>` exactly;
- for a commit candidate, use the same rule as `queue review verify-commit`. The path must be one the
candidate changed from its first parent, and the sha256 of the candidate's blob must equal SHA's;
- no match prints `STOP binary <path> <sha256> not in a reviewed candidate`. With no `--row`, any
binary stops, which is today's behaviour.
Read the queue only through `scripts/mosaic queue show N` or the queue package's read functions.
Never write the queue or post anything.
3. The secret scan and the attribution check stay as they are. A binary passes the secret scan only
through the review above. Decompressing gzip to scan it is a separate row if anyone wants it
(mos-1570). Don't add it here.
4. `scripts/test-push-check.sh` (new), run by `timeout -k 10` like the other suites. It builds a
scratch bare remote, a scratch clone and a scratch queue. It never touches origin, the canonical
`docs/plans/queue.json` or a seat's queue lock. If the queue CLI can't read a scratch queue without a
full scratch copy of the repository, use a scratch copy. If that is impractical too, stop and ask
Sage before inventing a test-only override. Cases:
- a text-only range prints `NO_BINARY` and `PUSH_READY`;
- an unlisted binary stops, naming the path;
- a listed path with a different sha256 stops;
- an approved manifest candidate passes and prints `BINARY_REVIEWED 1`;
- an approved commit candidate passes. One whose blob for that path differs from SHA's stops;
- a round with a `changes` receipt, a superseded earlier round, and an approve receipt for a
different candidate each stop;
- a deleted binary passes with no `--row`;
- a non-fast-forward SHA, a log mismatch, an attribution line and a planted fake secret each stop,
and nothing after the stop prints;
- the last line is `PUSH_READY` only on success, so `| tail -1 | grep -q '^PUSH_READY '` is safe.
5. Mutants, each killed by the test: skip the sha256 comparison; accept a `changes` round; accept an
earlier round; read the working tree instead of the blob; let a binary through when `--row` is absent.
6. `docs/TOOLS.md`: one entry for `push-check.sh` with usage, the tokens and the exit codes.
**Files owned.** `scripts/push-check.sh`, `scripts/test-push-check.sh`, the new `docs/TOOLS.md` entry,
and your `agents/<seat>/work/queue-<row>/` packet (BUILD.md, plain-text evidence). Anything else needs a
brief amendment.
**Out of scope.** The pre-push hook and slot check (row 211). Deciding whether W2's WASM or W1's data
lands (Jason, Vikunja 618). Gzip scanning. Retiring the scratch script, which Sage does after landing.
**Gate.** A separate Codex thread does the first review. Dewey reviews once on the landing candidate
(guards go to a Claude reviewer, mos-1542). `scripts/test-push-check.sh` and every other
`scripts/test-*.sh` are green on Sage's landing gate, and the mutants are killed. Done when Sage's next
push runs through `scripts/push-check.sh` instead of the scratch script. Evidence is plain text
(BRIEF-TEMPLATE, mos-1570). Use a TMPDIR from `mktemp -d /mnt/storage/scratch/tmp/XXXXXX`.
### The scratch script today
```bash
#!/bin/bash
# Push checks for an explicit sha (mos-0856/0857). Usage: pushcheck.sh SHA EXPECTED_LIST_FILE
# EXPECTED_LIST_FILE holds the exact `git log --oneline origin/refactor..SHA` lines, newest first.
set -o pipefail
cd /mnt/storage/src/mosaic-stack || exit 9
SHA=$(git rev-parse --verify "$1^{commit}") || { echo "STOP sha"; exit 9; }
git fetch -q origin || { echo "STOP fetch"; exit 9; }
BASE=$(git rev-parse refs/remotes/origin/refactor) || exit 9
diff <(git log --oneline "$BASE..$SHA") "$2" && echo LOG_OK || { echo "STOP log"; exit 1; }
git merge-base --is-ancestor "$BASE" "$SHA" && echo FF_OK || { echo "STOP ff"; exit 1; }
[ "$(git diff --numstat "$BASE" "$SHA" | awk '$1=="-"' | wc -l)" = 0 ] && echo NO_BINARY || { echo "STOP binary"; exit 1; }
if git diff "$BASE" "$SHA" | grep -E '^\+' | grep -iqE 'BEGIN [A-Z ]*PRIVATE KEY|ghp_[A-Za-z0-9]{20}|sk-ant-[A-Za-z0-9-]{10}|xox[bp]-|AKIA[0-9A-Z]{16}|(token|secret|password)["'"'"' ]*[:=] *["'"'"'][A-Za-z0-9_\-]{24,}'; then echo "STOP secrets"; exit 1; fi
echo SECRETS_CLEAN
if git log --format=%B "$BASE..$SHA" | grep -iqE 'co-authored-by|generated with'; then echo "STOP attribution"; exit 1; fi
echo NO_ATTRIBUTION
echo "PUSH_READY $BASE..$SHA"
```
+127
View File
@@ -0,0 +1,127 @@
#!/bin/bash
# Check an explicit committed push range. Fetch is opt-in; never pushes.
command -v node >/dev/null 2>&1 || { echo 'STOP node unavailable'; exit 2; }
exec node --input-type=module - "$@" <<'JS'
import { spawnSync } from 'node:child_process';
import { readFileSync } from 'node:fs';
import { createHash } from 'node:crypto';
import { join } from 'node:path';
import { pathToFileURL } from 'node:url';
const stop = (reason, code = 1) => { console.log(`STOP ${reason}`); process.exit(code); };
let gitRoot = process.cwd();
const git = (...args) => {
const r = spawnSync('git', args, { cwd: gitRoot, maxBuffer: 256 * 1024 * 1024 });
if (r.error || r.status !== 0) throw new Error('git');
return r.stdout;
};
// Git paths must round-trip as UTF-8 before comparing them with queue paths.
const pathsText = bytes => new TextDecoder('utf-8', { fatal: true, ignoreBOM: true }).decode(bytes);
const shownPath = path => /[\r\n]/.test(path) ? JSON.stringify(path) : path;
const hash = bytes => createHash('sha256').update(bytes).digest('hex');
const text = (...args) => git(...args).toString('utf8').trimEnd();
const resolve = ref => text('rev-parse', '--verify', '--end-of-options', `${ref}^{commit}`);
const argv = process.argv.slice(2);
if (argv.length < 2) stop('usage: push-check.sh SHA EXPECTED_LOG [--row N]... [--base-ref REF] [--fetch]', 2);
const [ref, expectedFile] = argv.splice(0, 2);
let baseRef = 'refs/remotes/origin/refactor', fetch = false;
const rowIds = new Set();
while (argv.length) {
const flag = argv.shift();
if (flag === '--fetch' && !fetch) fetch = true;
else if (flag === '--row' && /^[1-9][0-9]*$/.test(argv[0] ?? '') && Number.isSafeInteger(Number(argv[0]))) rowIds.add(Number(argv.shift()));
else if (flag === '--base-ref' && argv[0] && !argv[0].startsWith('-')) baseRef = argv.shift();
else stop('usage', 2);
}
let sha, base, expected;
try {
// Resolve the log against the original caller, then anchor every Git command
// at the repository root. Queue reads retain their production cwd checks.
expected = readFileSync(expectedFile);
gitRoot = text('rev-parse', '--show-toplevel');
sha = resolve(ref);
}
catch { stop('sha or expected log unavailable', 2); }
if (fetch) { try { git('fetch', '-q', 'origin'); } catch { stop('fetch', 2); } }
try { base = resolve(baseRef); } catch { stop('base ref unavailable', 2); }
try {
if (!git('log', '--oneline', `${base}..${sha}`).equals(expected)) stop('log');
console.log('LOG_OK');
try { git('merge-base', '--is-ancestor', base, sha); } catch { stop('ff'); }
console.log('FF_OK');
// --no-renames keeps -z numstat to exactly one path per record. Never parse
// quoted path output or consult working-tree bytes.
const changedPaths = pathsText(git('diff', '--no-relative', '--no-color', '--no-ext-diff', '--no-textconv', '--no-renames', '--numstat', '-z', base, sha))
.split('\0').filter(Boolean).map(record => {
const first = record.indexOf('\t'), second = record.indexOf('\t', first + 1);
return { path: record.slice(second + 1), binary: record.startsWith('-\t-\t') };
});
const tree = commit => {
const entries = new Map();
for (const entry of pathsText(git('ls-tree', '--full-tree', '-r', '-z', commit)).split('\0').filter(Boolean)) {
const tab = entry.indexOf('\t');
const [mode, type, oid] = entry.slice(0, tab).split(' ');
entries.set(entry.slice(tab + 1), { mode, type, oid });
}
return entries;
};
const have = tree(sha);
// Attributes can force a binary to appear as text in numstat. Inspect raw
// committed bytes as well, following Git's first-8000-byte NUL rule.
const present = changedPaths.filter(({ path, binary }) => {
const entry = have.get(path);
if (!entry || entry.type !== 'blob') return false;
return binary || git('cat-file', 'blob', entry.oid).subarray(0, 8000).includes(0);
}).map(({ path }) => path);
let approved = [];
if (present.length && rowIds.size) {
let rows;
try {
const root = text('rev-parse', '--show-toplevel');
const { rows: readRows } = await import(pathToFileURL(join(root, 'packages/queue/src/store.mjs')).href);
const result = readRows({ cwd: process.cwd(), env: process.env });
if (result.code !== 0) throw new Error('queue');
if (result.err.some(note => /unconfirmed tail|not confirmed durable/.test(note))) stop('queue unconfirmed tail', 2);
rows = result.rows;
for (const id of rowIds) if (!rows.some(r => r.id === id)) throw new Error('row');
} catch { stop('queue unavailable or invalid', 2); }
for (const row of rows.filter(r => rowIds.has(r.id))) {
const round = row.review?.rounds.at(-1);
if (!round || round.receipts?.some(r => r.verdict === 'changes')) continue;
if (!round.receipts?.some(r => r.verdict === 'approve' && r.candidate === round.candidate.digest)) continue;
approved.push(round.candidate);
}
}
const candidates = new Map();
for (const c of approved) {
if (c.kind !== 'commit') continue;
const candidateTree = tree(c.digest);
let parent;
try { parent = text('rev-parse', '--verify', `${c.digest}^1`); }
catch { parent = text('hash-object', '-t', 'tree', '/dev/null'); }
const changed = new Set(pathsText(git('diff-tree', '--no-relative', '-r', '--no-renames', '--name-only', '-z', parent, c.digest)).split('\0').filter(Boolean));
candidates.set(c.digest, { candidateTree, changed });
}
for (const path of present) {
const h = have.get(path);
const digest = hash(git('cat-file', 'blob', h.oid));
const matches = approved.some(c => {
if (c.kind === 'manifest') return c.text.split('\n').includes(`${digest} ${path}`);
const { candidateTree, changed } = candidates.get(c.digest);
const entry = candidateTree.get(path);
return changed.has(path) && entry?.type === 'blob' && entry.mode === h.mode && hash(git('cat-file', 'blob', entry.oid)) === digest;
});
if (!matches) stop(`binary ${shownPath(path)} ${digest} not in a reviewed candidate`);
}
console.log(present.length ? `BINARY_REVIEWED ${present.length}` : 'NO_BINARY');
const diff = git('diff', '--no-relative', '--no-color', '--no-ext-diff', '--no-textconv', base, sha).toString('utf8');
const secret = /BEGIN [A-Z ]*PRIVATE KEY|ghp_[A-Za-z0-9]{20}|sk-ant-[A-Za-z0-9-]{10}|xox[bp]-|AKIA[0-9A-Z]{16}|(token|secret|password)["' ]*[:=] *["'][A-Za-z0-9_\-]{24,}/i;
if (diff.split('\n').some(line => line.startsWith('+') && secret.test(line))) stop('secrets');
console.log('SECRETS_CLEAN');
if (/co-authored-by|generated with/i.test(text('log', '--format=%B', `${base}..${sha}`))) stop('attribution');
console.log('NO_ATTRIBUTION');
console.log(`PUSH_READY ${base}..${sha}`);
} catch { stop('git or environment error', 2); }
JS
+256
View File
@@ -0,0 +1,256 @@
#!/bin/bash
# All repositories, queue writes, remotes and mutants are disposable scratch.
set -euo pipefail
ROOT=$(cd -- "$(dirname -- "$0")/.." && pwd)
exec node --input-type=module - "$ROOT" "$@" <<'JS'
import assert from 'node:assert/strict';
import { spawnSync } from 'node:child_process';
import { readFileSync, writeFileSync, mkdirSync, mkdtempSync, rmSync } from 'node:fs';
import { tmpdir } from 'node:os';
import { join } from 'node:path';
import { pathToFileURL } from 'node:url';
import { createHash } from 'node:crypto';
const root = process.argv[2];
const { scratchRepo, genesisCommitted, cli } = await import(pathToFileURL(join(root, 'packages/queue/tests/helpers.mjs')));
const target = process.argv[3] ?? join(root, 'scripts/push-check.sh');
const sha256 = bytes => createHash('sha256').update(bytes).digest('hex');
const binary = Buffer.from([0, 1, 2, 3]);
const digest = sha256(binary);
const cleanups = [];
let count = 0;
function fixture() {
const repo = scratchRepo({ after: fn => cleanups.push(fn) });
genesisCommitted(repo);
const run = (args, by = 'darkwing', allow = false) => {
const r = cli(repo, args, { by });
assert.ok(r.code === 0 || allow, r.err);
return r;
};
run(['move', '6', 'blocked', '--reason', 'paused', '--op', 'block-six-0001']);
run(['move', '9', 'in-progress', '--op', 'start-nine-0001']);
run(['set', '9', 'reviewers', 'dewey,filbert', '--op', 'set-reviewers-0001'], 'sage');
// A real local bare remote and clone, with no network or origin access.
const bare = join(repo.base, 'remote.git');
repo.g('init', '--bare', '-q', bare);
repo.g('clone', '-q', bare, join(repo.base, 'clone'));
repo.g('remote', 'add', 'origin', bare);
const base = repo.g('rev-parse', 'HEAD').trim();
repo.g('update-ref', 'refs/remotes/origin/refactor', base);
const commit = (path, bytes, message = 'content') => {
if (bytes === null) repo.g('rm', '--', path);
else { writeFileSync(join(repo.root, path), bytes); repo.g('add', '--', path); }
repo.g('commit', '-q', '-m', message);
return repo.g('rev-parse', 'HEAD').trim();
};
const check = (sha, extra = [], expectedCode = 0, reason = null, script = target, cwd = repo.root) => {
const log = join(repo.base, 'expected.log');
writeFileSync(log, repo.g('log', '--oneline', `${base}..${sha}`));
const r = spawnSync('bash', [script, sha, log, ...extra], { cwd, env: repo.env, encoding: 'utf8' });
assert.equal(r.status, expectedCode, `${r.stdout}\n${r.stderr}`);
const lines = r.stdout.trim().split('\n');
if (expectedCode === 0) assert.match(lines.at(-1), /^PUSH_READY /);
else {
assert.equal(lines.filter(s => s.startsWith('STOP ')).length, 1, r.stdout);
assert.match(lines.at(-1), reason ?? /^STOP /);
assert.ok(!r.stdout.includes('PUSH_READY'), r.stdout);
}
count++;
return r.stdout;
};
let n = 0;
const round = (candidate, verdict = 'approve') => {
n++;
const r = run(['move', '9', 'in-review', '--candidate', candidate, '--op', `review-nine-000${n}`], 'darkwing', true);
// Missing dummy transport credentials fails the request, after opening a
// valid round. Recording a receipt is cooperative and needs no credential.
assert.equal(r.code, 1, r.out + r.err);
const row = JSON.parse(run(['show', '9']).out);
const c = row.review.rounds.at(-1).candidate.digest;
run(['review', 'record', '9', '--verdict', verdict, '--candidate', c, '--comment', String(n), '--op', `verdict-nine-00${n}`], 'filbert');
};
const manifest = (d = digest, path = 'asset.bin') => {
const file = join(repo.base, 'manifest.sha256');
writeFileSync(file, `${d} ${path}\n`);
return file;
};
return { repo, run, base, commit, check, round, manifest };
}
try {
{
const f = fixture();
const sha = f.commit('text.txt', 'hello\n');
assert.match(f.check(sha), /NO_BINARY\nSECRETS_CLEAN\nNO_ATTRIBUTION\nPUSH_READY /);
f.check(sha, ['--base-ref', f.base]);
f.check(sha, ['--bad-option'], 2, /^STOP usage/);
// Explicit fetch goes only to the scratch remote.
f.check(sha, ['--fetch']);
const wrong = join(f.repo.base, 'wrong.log'); writeFileSync(wrong, 'wrong\n');
const r = spawnSync('bash', [target, sha, wrong], { cwd: f.repo.root, env: f.repo.env, encoding: 'utf8' });
assert.equal(r.status, 1); assert.equal(r.stdout, 'STOP log\n'); count++;
f.repo.g('update-ref', 'refs/remotes/origin/refactor', sha);
const log = join(f.repo.base, 'empty.log'); writeFileSync(log, '');
const ff = spawnSync('bash', [target, f.base, log], { cwd: f.repo.root, env: f.repo.env, encoding: 'utf8' });
assert.equal(ff.status, 1); assert.equal(ff.stdout, 'LOG_OK\nSTOP ff\n'); count++;
}
// B1: attributes may add binary classifications, never hide NUL blobs.
for (const source of ['tree', 'info', 'config']) {
const f = fixture();
if (source === 'tree') f.commit('.gitattributes', '*.bin diff\n');
if (source === 'info') writeFileSync(join(f.repo.gitDir, 'info/attributes'), '*.bin diff\n');
if (source === 'config') {
const attributes = join(f.repo.base, 'attributes'); writeFileSync(attributes, '*.bin diff\n');
f.repo.g('config', 'core.attributesFile', attributes);
}
const sha = f.commit('asset.bin', binary);
f.check(sha, [], 1, /^STOP binary asset.bin /);
f.round(f.manifest());
assert.match(f.check(sha, ['--row', '9']), /BINARY_REVIEWED 1\n/);
}
// The content rule includes byte 7999, and excludes byte 8000.
for (const offset of [7999, 8000]) {
const f = fixture(), bytes = Buffer.alloc(8001, 65); bytes[offset] = 0;
f.commit('.gitattributes', '*.bin diff\n');
const sha = f.commit('asset.bin', bytes);
if (offset === 7999) f.check(sha, [], 1, /^STOP binary asset.bin /);
else assert.match(f.check(sha), /NO_BINARY\n/);
}
// N4: an approval beyond the durable witness is visible, not authority.
{
const f = fixture(), sha = f.commit('asset.bin', binary);
const witness = join(f.repo.gitDir, 'mosaic-queue.head');
const durable = readFileSync(witness);
f.round(f.manifest());
writeFileSync(witness, durable);
const visible = f.run(['show', '9']);
assert.match(visible.err, /not confirmed durable/);
f.check(sha, ['--row', '9'], 2, /^STOP queue unconfirmed tail$/);
}
{
const f = fixture(), sha = f.commit('asset.bin', binary);
f.check(sha, [], 1, /^STOP binary asset.bin /);
f.round(f.manifest('0'.repeat(64)));
f.check(sha, ['--row', '9'], 1, /^STOP binary asset.bin /);
}
{
const f = fixture(), sha = f.commit('asset.bin', binary);
f.round(f.manifest());
writeFileSync(join(f.repo.root, 'asset.bin'), 'working tree differs');
assert.match(f.check(sha, ['--row', '9']), /BINARY_REVIEWED 1\n/);
f.check(sha, [], 1, /^STOP binary asset.bin /);
const other = f.commit('asset.bin', Buffer.from([0, 8, 9]));
// The working tree is the approved version; the pushed blob isn't.
writeFileSync(join(f.repo.root, 'asset.bin'), binary);
f.check(other, ['--row', '9'], 1, /^STOP binary asset.bin /);
}
{
const f = fixture(), sha = f.commit('asset.bin', binary);
f.round(sha);
assert.match(f.check(sha, ['--row', '9']), /BINARY_REVIEWED 1\n/);
const other = f.commit('asset.bin', Buffer.from([0, 7]));
f.check(other, ['--row', '9'], 1, /^STOP binary asset.bin /);
}
{
const f = fixture(), sha = f.commit('space tab\tasset.bin', binary);
f.round(sha);
assert.match(f.check(sha, ['--row', '9']), /BINARY_REVIEWED 1\n/);
}
{
const f = fixture(), sha = f.commit('line\nbreak.bin', binary);
f.check(sha, [], 1, /^STOP binary "line\\nbreak.bin" /);
writeFileSync(Buffer.concat([Buffer.from(f.repo.root + '/'), Buffer.from([255]), Buffer.from('.bin')]), binary);
f.repo.g('add', '-A'); f.repo.g('commit', '-q', '-m', 'invalid UTF-8 path');
f.check(f.repo.g('rev-parse', 'HEAD').trim(), [], 2, /^STOP git or environment error$/);
}
{
const f = fixture(), sha = f.commit('asset.bin', binary);
const cwd = join(f.repo.root, 'nested'); mkdirSync(cwd);
f.repo.g('config', 'diff.relative', 'true');
f.check(sha, [], 1, /^STOP binary asset.bin /, target, cwd);
f.round(f.manifest());
assert.match(f.check(sha, ['--row', '9'], 0, null, target, cwd), /BINARY_REVIEWED 1\n/);
const relativeLog = spawnSync('bash', [target, sha, '../../expected.log', '--row', '9'], { cwd, env: f.repo.env, encoding: 'utf8' });
assert.equal(relativeLog.status, 0, relativeLog.stdout + relativeLog.stderr);
assert.match(relativeLog.stdout.trim().split('\n').at(-1), /^PUSH_READY /); count++;
}
{
const f = fixture(), cwd = join(f.repo.root, 'nested'); mkdirSync(cwd);
const sha = f.commit('nested/asset.bin', binary);
f.repo.g('config', 'diff.relative', 'true');
f.check(sha, [], 1, /^STOP binary nested\/asset.bin /, target, cwd);
f.round(sha);
assert.match(f.check(sha, ['--row', '9'], 0, null, target, cwd), /BINARY_REVIEWED 1\n/);
}
{
const f = fixture();
f.commit('asset.bin', binary);
const unrelated = f.commit('text.txt', 'unrelated\n');
f.round(unrelated);
f.check(unrelated, ['--row', '9'], 1, /^STOP binary asset.bin /);
}
{
const f = fixture(), sha = f.commit('asset.bin', binary);
f.round(f.manifest(), 'changes');
const row = JSON.parse(f.run(['show', '9']).out);
f.run(['review', 'record', '9', '--verdict', 'approve', '--candidate', row.review.rounds.at(-1).candidate.digest, '--comment', '2', '--op', 'approve-dewey-0001'], 'dewey');
f.check(sha, ['--row', '9'], 1, /^STOP binary asset.bin /);
}
{
const f = fixture(), sha = f.commit('asset.bin', binary);
f.round(f.manifest());
f.run(['move', '9', 'in-progress', '--op', 'revise-nine-0001']);
f.round(f.manifest('0'.repeat(64)));
f.check(sha, ['--row', '9'], 1, /^STOP binary asset.bin /);
}
{
const f = fixture(), sha = f.commit('asset.bin', binary);
f.round(f.manifest());
// This shape cannot be recorded by the queue. Its read API must reject
// tampered receipts before the guard can treat them as authority.
const path = f.repo.queuePath;
const doc = JSON.parse(readFileSync(path));
doc.rows.find(r => r.id === 9).review.rounds.at(-1).receipts[0].candidate = '0'.repeat(64);
writeFileSync(path, JSON.stringify(doc));
f.check(sha, ['--row', '9'], 2, /^STOP queue unavailable or invalid$/);
}
{
const f = fixture(), added = f.commit('asset.bin', binary);
f.repo.g('update-ref', 'refs/remotes/origin/refactor', added);
const deleted = f.commit('asset.bin', null);
// Explicit base retains the check helper's original expected log range.
f.repo.g('update-ref', 'refs/remotes/origin/refactor', f.base);
assert.match(f.check(deleted, ['--base-ref', added], 1, /^STOP log$/), /STOP log/);
const log = join(f.repo.base, 'delete.log'); writeFileSync(log, f.repo.g('log', '--oneline', `${added}..${deleted}`));
const r = spawnSync('bash', [target, deleted, log, '--base-ref', added], { cwd: f.repo.root, env: f.repo.env, encoding: 'utf8' });
assert.equal(r.status, 0, r.stdout); assert.match(r.stdout, /NO_BINARY\n/); assert.match(r.stdout.trim().split('\n').at(-1), /^PUSH_READY /); count++;
}
for (const [message, content, reason, prefix] of [
['content', 'password="' + 'a'.repeat(30) + '"\n', 'secrets', 'LOG_OK\nFF_OK\nNO_BINARY\n'],
['Generated with example', 'hello\n', 'attribution', 'LOG_OK\nFF_OK\nNO_BINARY\nSECRETS_CLEAN\n'],
]) {
const f = fixture(), sha = f.commit('text.txt', content, message);
assert.equal(f.check(sha, [], 1), `${prefix}STOP ${reason}\n`);
}
console.log(`PASS push-check ${count} checks`);
if (!process.argv[3]) {
const dir = mkdtempSync(join(tmpdir(), 'push-check-mutants-'));
cleanups.push(() => rmSync(dir, { recursive: true, force: true }));
const source = readFileSync(target, 'utf8');
const mutants = [
['skip-hash', "c.text.split('\\n').includes(`${digest} ${path}`)", "c.text.split('\\n').some(line => line.endsWith(` ${path}`))"],
['accept-changes', "round.receipts?.some(r => r.verdict === 'changes')", 'false'],
['earlier-round', 'row.review?.rounds.at(-1)', 'row.review?.rounds.at(0)'],
['working-tree', "hash(git('cat-file', 'blob', h.oid))", 'hash(readFileSync(path))'],
['no-row', 'if (!matches) stop(', 'if (!matches && rowIds.size) stop('],
['skip-nul-scan', " || git('cat-file', 'blob', entry.oid).subarray(0, 8000).includes(0)", ''],
];
for (const [name, before, after] of mutants) {
assert.ok(source.includes(before), name);
const file = join(dir, `${name}.sh`); writeFileSync(file, source.replace(before, after));
const r = spawnSync('timeout', ['-k', '10', '120', 'bash', join(root, 'scripts/test-push-check.sh'), file], { encoding: 'utf8', maxBuffer: 4 << 20 });
assert.equal(r.status, 1, `${name} survived or infrastructure failed: ${r.status}\n${r.stdout}\n${r.stderr}`);
assert.match(r.stderr, /AssertionError/, r.stderr);
console.log(`KILLED ${name}`);
}
}
} finally { for (const fn of cleanups.reverse()) fn(); }
JS