Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2da63d5e30 | ||
|
|
a14fdc4436 |
No files matched your search
+5
-33
@@ -5458,40 +5458,12 @@ Row 299 (573, #1806, Gander, Filbert): before, the P10 band test timed a fault r
|
||||
|
||||
2026-10-24 | Goldie | Row325 / #1821 after (sage-3882 CLEAR) | Only Case1 projects key becomesstack; only old test70 expected key updated under mos-1564. New3-case test copies real .mosaic/project.json bytes, requires CLI project valid, rejects old key. Serialized shortTMP timeout-k10: new3/3, business264/264, old-key mutant killed/restored SHA9e43bfef, restored new3/3; all positive0 fail/skip/cancel. Manifest4/4 verifies including unchanged project document. Logs/load lines and mutant diff in BUILD.md; no queue writes/host action, Gladstone review/Sage gate pending.
|
||||
|
||||
2026-10-24 — Poe, row 208 / 193d (#1706), before: building Console shared list,
|
||||
share controls and per-grant viewer read-only against approved design e2d161e2e.
|
||||
Base ec86f2c84. Isolated tests and UI-guard mutants pending Sage CLEAR; no live action.
|
||||
2026-10-24 | Bentina | Row157 / #1652 before (sage-3906, Q246, mos-1566) | Recovered seat/brief/design at ec86f2c84 on bentina/row157. Canonical queue next flags stale brief pin. Outbound audit finds broker gitea-grant node:https and web DNS-pinned node:https paths, triggering I2 explicit stop rule. Sage notified bentina-0001; BUILD.md records shifted cited sites. No implementation/test/Docker/credential/live-state action; awaiting lead re-pin and transport ruling.
|
||||
|
||||
2026-10-24 — Poe, row 208 / 193d (#1706), after: Console shared list, share/unshare
|
||||
controls and live per-grant viewer UI implemented. Webui 418/418 and plugins
|
||||
119/119 green under sage-3925 CLEAR; four UI guard mutants killed with viewer
|
||||
bus bypass refusals. Prior old-test draft regression fixed under sage-3918;
|
||||
missing root oauth4webapi corrected by pinned npm ci under sage-3924. Evidence:
|
||||
agents/poe/work/queue-208/BUILD.md. Independent reviews and Sage's global gate
|
||||
remain; no live state, schema or bus policy change.
|
||||
2026-10-24 | Bentina | Row157 / #1652 first slot STOP (sage-3910) | New config/helper31/31 and proxy11/11 green. test-config exit1:55 pass/1 old output regression; new install20/20 green. Validator added absent install key to JSON. Stopped before Docker/install suite; slot returned Sage bentina-0004. sage-3916 authorizes preserving absent output shape/defaulting env to local: fixed own loader/new test only, no rerun before next CLEAR. test-config diff +4/-0. No commit/push; seat BUILD and01/02/03 logs.
|
||||
|
||||
2026-10-24 | Goldie | Row265 / #1770 before, recorded during authorized verification | C2-09b has no project room verbs. On goldie/row265 at ec86f2c84, add only room.open/send/read, pure exported leading-tag parser, README verb rows and new bus tests. Sage-3921 fixes EOF-tag and message-only timestamp readings; tester list/helpers/schema stay unchanged. Claim rev3814; Sage-3932 CLEAR for serialized new files, whole bus and twelve refusal mutants. No old-test edits authorized; stop rules apply.
|
||||
2026-10-24 | Bentina | Row157 / #1652 after (sage-3919, sage-3923) | Absent install JSON shape preserved; helper defaults local. Existing config56/56, helper/config31/31, final proxy12/12, final test-install exit0 with three release0.0.12 rootless builds/pins, internal TLS/deny/DNS checks and real Vikunja publicGET200/notifier REST dummyGET401 through services proxy. Upstream-reset correction verified. Slot returned bentina-0007; no broader suites by Sage direction. Boyd then Darkwing review, Mos provider-host measurement and Sage landing gate pending. Evidence in seat BUILD and04-08 logs; only bentina/row157 candidate push authorized.
|
||||
|
||||
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 | Bentina | Row157 / #1652 round2 before (boyd-0023, sage-3933) | Read reproduced B1 half-open refusal socket retention and B2 same-PID exec inherited cache bypass. Added two new regression files; no existing assertion edits. Proxy drains then destroys refused sockets with1s fallback; helper clears inherited cache/export attributes at source. No tests before CLEAR; Goldie holds slot. Source/causes recorded in seat BUILD.
|
||||
|
||||
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.
|
||||
2026-10-24 | Bentina | Row157 / #1652 round2 after (sage-3936) | B1 refused sockets now drain/destroy with1s bound; B2 source clears inherited cache/export attributes. Archived a14+new regressions red as intended (5controls pass/7defects fail), fixed12/12, helper/config33/33, egress22/22, rootless install exit0 incl image pins/network/services dummyGET. Logs09-13 in seat work. No existing test/assertion edit for round2. Slot returned bentina-0014; followup own-branch commit/manifest for Boyd re-review; Mos and Sage landing gates pending.
|
||||
@@ -76,6 +76,16 @@ Rules enforced by `scripts/mosaic-config.mjs`:
|
||||
|
||||
Run paths (`build/hello/verify/reset`) fail closed when configuration is missing or invalid; they never invent it.
|
||||
|
||||
The optional `install` key selects the containerized install explicitly:
|
||||
`"install": {"mode":"containerized","endpoint":"unix:///run/user/1000/docker.sock"}`.
|
||||
An absent key defaults to local mode and remains absent in validation output.
|
||||
Local mode forbids `endpoint`;
|
||||
containerized mode requires a Unix socket endpoint without whitespace
|
||||
(the actual pattern is `^unix:///[^\s]+\.sock$`). Unknown install keys or
|
||||
modes refuse with exit 2 without changing the config. Validation contacts no
|
||||
daemon; the endpoint helper checks rootless status before engine use. Keep
|
||||
existing live configs unchanged until the install rollout is authorized.
|
||||
|
||||
## Missions & tasks (M2)
|
||||
|
||||
Missions and tasks are validated JSON data (strict schemas, version-pinned). The M2 layer is host-side only: mission directives are recorded for provenance but do not yet reach the runtime system prompt (capability/policy layer comes later).
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
2026-10-24T04:05:53Z
|
||||
23:05:53 up 10 days, 14:25, 2 users, load average: 2.29, 2.31, 1.89
|
||||
CLEAR sage-3910 TMPDIR=/mnt/storage/scratch/tmp/lEvgx1
|
||||
✔ install: absent (28.959485ms)
|
||||
✔ install: local (24.660305ms)
|
||||
✔ install: local endpoint (26.210523ms)
|
||||
✔ install: containerized missing endpoint (25.495263ms)
|
||||
✔ install: bad endpoint "tcp://localhost:2375" (28.62092ms)
|
||||
✔ install: bad endpoint "ssh://host/run/docker.sock" (32.126399ms)
|
||||
✔ install: bad endpoint "run/docker.sock" (26.69995ms)
|
||||
✔ install: bad endpoint "unix://relative.sock" (33.36326ms)
|
||||
✔ install: bad endpoint "unix:///a b.sock" (30.579866ms)
|
||||
✔ install: bad endpoint "unix:///a.sock\n" (40.844622ms)
|
||||
✔ install: bad endpoint "unix:///a" (36.371215ms)
|
||||
✔ install: bad endpoint "" (31.603044ms)
|
||||
✔ install: bad endpoint null (29.645166ms)
|
||||
✔ install: bad endpoint 4 (30.638453ms)
|
||||
✔ install: valid endpoint (28.088952ms)
|
||||
✔ install: unknown mode (28.182929ms)
|
||||
✔ install: missing mode (26.297287ms)
|
||||
✔ install: unknown key (27.205488ms)
|
||||
✔ install: null (29.189475ms)
|
||||
✔ install: array (30.347371ms)
|
||||
✔ helper refuses rootful (76.082505ms)
|
||||
✔ helper refuses missing (58.354463ms)
|
||||
✔ helper refuses substring (86.830586ms)
|
||||
✔ helper refuses object (108.0825ms)
|
||||
✔ helper refuses invalid JSON (85.203357ms)
|
||||
✔ helper refuses null success (85.225204ms)
|
||||
✔ helper refuses rootless output but failed (67.840402ms)
|
||||
✔ helper checks once and explicitly names host for both calls (119.763305ms)
|
||||
✔ local mode refuses before Docker null (35.42747ms)
|
||||
✔ local mode refuses before Docker {"mode":"local"} (30.531767ms)
|
||||
✔ invalid config refuses before Docker (30.092363ms)
|
||||
ℹ tests 31
|
||||
ℹ suites 0
|
||||
ℹ pass 31
|
||||
ℹ fail 0
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 833.790665
|
||||
EXIT=0
|
||||
@@ -0,0 +1,23 @@
|
||||
2026-10-24T04:06:01Z
|
||||
23:06:01 up 10 days, 14:25, 2 users, load average: 2.27, 2.30, 1.89
|
||||
CLEAR sage-3910 TMPDIR=/mnt/storage/scratch/tmp/lfgV9z
|
||||
✔ allows exact host and port, fragmented headers, and preserves tunnel head (21.273322ms)
|
||||
✔ unlisted host (1.324735ms)
|
||||
✔ unlisted port (1.081626ms)
|
||||
✔ GET (0.948442ms)
|
||||
✔ invalid port (0.95243ms)
|
||||
✔ userinfo (0.874803ms)
|
||||
✔ bad header (0.782898ms)
|
||||
✔ slow client has a total header deadline (81.829907ms)
|
||||
✔ oversized header refuses (1.267008ms)
|
||||
✔ missing, invalid and unknown lists fail closed (0.491274ms)
|
||||
✔ refused upstream returns 502 while retaining one allowed decision (1.716299ms)
|
||||
ℹ tests 11
|
||||
ℹ suites 0
|
||||
ℹ pass 11
|
||||
ℹ fail 0
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 156.342618
|
||||
EXIT=0
|
||||
@@ -0,0 +1,90 @@
|
||||
2026-10-24T04:06:08Z
|
||||
23:06:08 up 10 days, 14:25, 2 users, load average: 2.53, 2.36, 1.91
|
||||
CLEAR sage-3910 TMPDIR=/mnt/storage/scratch/tmp/6eJjJz
|
||||
OK absent adapter defaults to pi
|
||||
OK adapter mock validates (exit 0)
|
||||
OK unsupported adapter exits 2 (exit 2)
|
||||
OK env exports adapter
|
||||
OK bootstrap creates default when absent (exit 0)
|
||||
OK bootstrap wrote config file
|
||||
OK bootstrap is idempotent on existing config (exit 0)
|
||||
OK bootstrap did not rewrite existing config
|
||||
OK validate missing config exits 3 (exit 3)
|
||||
OK malformed JSON exits 2 (exit 2)
|
||||
OK unsupported configVersion exits 2 (exit 2)
|
||||
OK unknown top-level key exits 2 (exit 2)
|
||||
OK unknown execution key exits 2 (exit 2)
|
||||
OK unsupported backend exits 2 (exit 2)
|
||||
OK unsupported environment exits 2 (exit 2)
|
||||
OK relative dataRoot exits 2 (exit 2)
|
||||
OK non-canonical dataRoot exits 2 (exit 2)
|
||||
OK filesystem root dataRoot exits 2 (exit 2)
|
||||
OK home directory dataRoot exits 2 (exit 2)
|
||||
OK dataRoot containing config dir exits 2 (exit 2)
|
||||
OK control character in provider exits 2 (exit 2)
|
||||
OK symlinked config file exits 2 (exit 2)
|
||||
OK env exports resolve correctly
|
||||
OK valid console.sso loads and is in the output
|
||||
OK console.sso HS256 alg exits 2 naming the path (exit 2)
|
||||
OK console.sso alg none exits 2 naming the path (exit 2)
|
||||
OK console.sso missing slot field exits 2 naming the path (exit 2)
|
||||
OK console.sso slot name outside the pattern exits 2 naming the path (exit 2)
|
||||
OK unknown key under console exits 2 naming the path (exit 2)
|
||||
OK valid federation key loads and is in the output
|
||||
OK federation unknown sub-key exits 2 naming the key (exit 2)
|
||||
OK federation peer unknown sub-key exits 2 naming the key (exit 2)
|
||||
OK federation peer origin over http exits 2 naming the key (exit 2)
|
||||
OK federation peer origin with a path exits 2 naming the key (exit 2)
|
||||
OK federation peer origin with userinfo exits 2 naming the key (exit 2)
|
||||
OK federation peer id equal to self exits 2 naming the key (exit 2)
|
||||
OK federation peer label empty exits 2 naming the key (exit 2)
|
||||
OK federation not an object exits 2 naming the key (exit 2)
|
||||
OK federation self pattern exits 2 naming the key (exit 2)
|
||||
OK federation peers not an array exits 2 naming the key (exit 2)
|
||||
OK federation peer not an object exits 2 naming the key (exit 2)
|
||||
OK federation peer id pattern exits 2 naming the key (exit 2)
|
||||
OK federation peer label over 80 characters exits 2 naming the key (exit 2)
|
||||
OK federation duplicate peer id exits 2 naming the key (exit 2)
|
||||
OK federation peer origin with a trailing slash exits 2 naming the key (exit 2)
|
||||
OK federation self missing exits 2 naming the key (exit 2)
|
||||
OK federation peer id missing exits 2 naming the key (exit 2)
|
||||
OK federation peer label missing exits 2 naming the key (exit 2)
|
||||
OK config without federation loads and has no federation output
|
||||
FAIL config without console loads with unchanged output
|
||||
OK compactionReadBytes 8388608 loads and is in the output as written
|
||||
OK compactionReadBytes "x" loads and is in the output as written
|
||||
OK compactionStreams 2048 loads and is in the output as written
|
||||
OK compactionStreams "x" loads and is in the output as written
|
||||
OK failed validation modified nothing
|
||||
|
||||
✔ install: absent (28.022711ms)
|
||||
✔ install: local (26.314077ms)
|
||||
✔ install: local endpoint (27.030768ms)
|
||||
✔ install: containerized missing endpoint (26.036164ms)
|
||||
✔ install: bad endpoint "tcp://localhost:2375" (29.311242ms)
|
||||
✔ install: bad endpoint "ssh://host/run/docker.sock" (28.012086ms)
|
||||
✔ install: bad endpoint "run/docker.sock" (26.941261ms)
|
||||
✔ install: bad endpoint "unix://relative.sock" (26.90999ms)
|
||||
✔ install: bad endpoint "unix:///a b.sock" (23.646272ms)
|
||||
✔ install: bad endpoint "unix:///a.sock\n" (26.383344ms)
|
||||
✔ install: bad endpoint "unix:///a" (24.914913ms)
|
||||
✔ install: bad endpoint "" (24.320663ms)
|
||||
✔ install: bad endpoint null (25.688262ms)
|
||||
✔ install: bad endpoint 4 (26.934437ms)
|
||||
✔ install: valid endpoint (27.504294ms)
|
||||
✔ install: unknown mode (27.111833ms)
|
||||
✔ install: missing mode (26.365767ms)
|
||||
✔ install: unknown key (26.974983ms)
|
||||
✔ install: null (25.910901ms)
|
||||
✔ install: array (25.507423ms)
|
||||
ℹ tests 20
|
||||
ℹ suites 0
|
||||
ℹ pass 20
|
||||
ℹ fail 0
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 584.03015
|
||||
OK install configuration cases
|
||||
selftest: 55 passed, 1 failed
|
||||
EXIT=1
|
||||
@@ -0,0 +1,43 @@
|
||||
2026-10-24T04:08:52Z
|
||||
23:08:52 up 10 days, 14:28, 2 users, load average: 2.16, 2.49, 2.04
|
||||
CLEAR sage-3919 TMPDIR=/mnt/storage/scratch/tmp/o2n7Db
|
||||
✔ install: absent (31.8592ms)
|
||||
✔ install: local (29.807282ms)
|
||||
✔ install: local endpoint (24.009896ms)
|
||||
✔ install: containerized missing endpoint (26.296453ms)
|
||||
✔ install: bad endpoint "tcp://localhost:2375" (26.404525ms)
|
||||
✔ install: bad endpoint "ssh://host/run/docker.sock" (27.486365ms)
|
||||
✔ install: bad endpoint "run/docker.sock" (24.280876ms)
|
||||
✔ install: bad endpoint "unix://relative.sock" (24.363468ms)
|
||||
✔ install: bad endpoint "unix:///a b.sock" (24.920898ms)
|
||||
✔ install: bad endpoint "unix:///a.sock\n" (25.784031ms)
|
||||
✔ install: bad endpoint "unix:///a" (27.89803ms)
|
||||
✔ install: bad endpoint "" (28.939674ms)
|
||||
✔ install: bad endpoint null (26.129602ms)
|
||||
✔ install: bad endpoint 4 (27.601233ms)
|
||||
✔ install: valid endpoint (29.310223ms)
|
||||
✔ install: unknown mode (30.307014ms)
|
||||
✔ install: missing mode (26.432375ms)
|
||||
✔ install: unknown key (29.208115ms)
|
||||
✔ install: null (29.793ms)
|
||||
✔ install: array (28.956899ms)
|
||||
✔ helper refuses rootful (88.440017ms)
|
||||
✔ helper refuses missing (49.868469ms)
|
||||
✔ helper refuses substring (76.03165ms)
|
||||
✔ helper refuses object (77.494513ms)
|
||||
✔ helper refuses invalid JSON (78.525159ms)
|
||||
✔ helper refuses null success (79.166999ms)
|
||||
✔ helper refuses rootless output but failed (52.195589ms)
|
||||
✔ helper checks once and explicitly names host for both calls (124.380922ms)
|
||||
✔ local mode refuses before Docker null (28.199092ms)
|
||||
✔ local mode refuses before Docker {"mode":"local"} (29.618143ms)
|
||||
✔ invalid config refuses before Docker (27.543884ms)
|
||||
ℹ tests 31
|
||||
ℹ suites 0
|
||||
ℹ pass 31
|
||||
ℹ fail 0
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 762.528877
|
||||
EXIT=0
|
||||
@@ -0,0 +1,90 @@
|
||||
2026-10-24T04:09:01Z
|
||||
23:09:01 up 10 days, 14:28, 2 users, load average: 2.28, 2.50, 2.05
|
||||
CLEAR sage-3919 TMPDIR=/mnt/storage/scratch/tmp/hYypHU
|
||||
OK absent adapter defaults to pi
|
||||
OK adapter mock validates (exit 0)
|
||||
OK unsupported adapter exits 2 (exit 2)
|
||||
OK env exports adapter
|
||||
OK bootstrap creates default when absent (exit 0)
|
||||
OK bootstrap wrote config file
|
||||
OK bootstrap is idempotent on existing config (exit 0)
|
||||
OK bootstrap did not rewrite existing config
|
||||
OK validate missing config exits 3 (exit 3)
|
||||
OK malformed JSON exits 2 (exit 2)
|
||||
OK unsupported configVersion exits 2 (exit 2)
|
||||
OK unknown top-level key exits 2 (exit 2)
|
||||
OK unknown execution key exits 2 (exit 2)
|
||||
OK unsupported backend exits 2 (exit 2)
|
||||
OK unsupported environment exits 2 (exit 2)
|
||||
OK relative dataRoot exits 2 (exit 2)
|
||||
OK non-canonical dataRoot exits 2 (exit 2)
|
||||
OK filesystem root dataRoot exits 2 (exit 2)
|
||||
OK home directory dataRoot exits 2 (exit 2)
|
||||
OK dataRoot containing config dir exits 2 (exit 2)
|
||||
OK control character in provider exits 2 (exit 2)
|
||||
OK symlinked config file exits 2 (exit 2)
|
||||
OK env exports resolve correctly
|
||||
OK valid console.sso loads and is in the output
|
||||
OK console.sso HS256 alg exits 2 naming the path (exit 2)
|
||||
OK console.sso alg none exits 2 naming the path (exit 2)
|
||||
OK console.sso missing slot field exits 2 naming the path (exit 2)
|
||||
OK console.sso slot name outside the pattern exits 2 naming the path (exit 2)
|
||||
OK unknown key under console exits 2 naming the path (exit 2)
|
||||
OK valid federation key loads and is in the output
|
||||
OK federation unknown sub-key exits 2 naming the key (exit 2)
|
||||
OK federation peer unknown sub-key exits 2 naming the key (exit 2)
|
||||
OK federation peer origin over http exits 2 naming the key (exit 2)
|
||||
OK federation peer origin with a path exits 2 naming the key (exit 2)
|
||||
OK federation peer origin with userinfo exits 2 naming the key (exit 2)
|
||||
OK federation peer id equal to self exits 2 naming the key (exit 2)
|
||||
OK federation peer label empty exits 2 naming the key (exit 2)
|
||||
OK federation not an object exits 2 naming the key (exit 2)
|
||||
OK federation self pattern exits 2 naming the key (exit 2)
|
||||
OK federation peers not an array exits 2 naming the key (exit 2)
|
||||
OK federation peer not an object exits 2 naming the key (exit 2)
|
||||
OK federation peer id pattern exits 2 naming the key (exit 2)
|
||||
OK federation peer label over 80 characters exits 2 naming the key (exit 2)
|
||||
OK federation duplicate peer id exits 2 naming the key (exit 2)
|
||||
OK federation peer origin with a trailing slash exits 2 naming the key (exit 2)
|
||||
OK federation self missing exits 2 naming the key (exit 2)
|
||||
OK federation peer id missing exits 2 naming the key (exit 2)
|
||||
OK federation peer label missing exits 2 naming the key (exit 2)
|
||||
OK config without federation loads and has no federation output
|
||||
OK config without console loads with unchanged output
|
||||
OK compactionReadBytes 8388608 loads and is in the output as written
|
||||
OK compactionReadBytes "x" loads and is in the output as written
|
||||
OK compactionStreams 2048 loads and is in the output as written
|
||||
OK compactionStreams "x" loads and is in the output as written
|
||||
OK failed validation modified nothing
|
||||
|
||||
✔ install: absent (33.602997ms)
|
||||
✔ install: local (27.76628ms)
|
||||
✔ install: local endpoint (28.360207ms)
|
||||
✔ install: containerized missing endpoint (26.872508ms)
|
||||
✔ install: bad endpoint "tcp://localhost:2375" (27.729466ms)
|
||||
✔ install: bad endpoint "ssh://host/run/docker.sock" (29.663768ms)
|
||||
✔ install: bad endpoint "run/docker.sock" (28.875798ms)
|
||||
✔ install: bad endpoint "unix://relative.sock" (27.427064ms)
|
||||
✔ install: bad endpoint "unix:///a b.sock" (30.77649ms)
|
||||
✔ install: bad endpoint "unix:///a.sock\n" (34.03786ms)
|
||||
✔ install: bad endpoint "unix:///a" (31.459666ms)
|
||||
✔ install: bad endpoint "" (26.221924ms)
|
||||
✔ install: bad endpoint null (31.982463ms)
|
||||
✔ install: bad endpoint 4 (34.408275ms)
|
||||
✔ install: valid endpoint (30.184118ms)
|
||||
✔ install: unknown mode (26.58596ms)
|
||||
✔ install: missing mode (26.563043ms)
|
||||
✔ install: unknown key (28.663535ms)
|
||||
✔ install: null (26.567284ms)
|
||||
✔ install: array (24.756494ms)
|
||||
ℹ tests 20
|
||||
ℹ suites 0
|
||||
ℹ pass 20
|
||||
ℹ fail 0
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 640.201326
|
||||
OK install configuration cases
|
||||
selftest: 56 passed, 0 failed
|
||||
EXIT=0
|
||||
@@ -0,0 +1,245 @@
|
||||
2026-10-24T04:09:14Z
|
||||
23:09:14 up 10 days, 14:29, 2 users, load average: 2.58, 2.56, 2.08
|
||||
CLEAR sage-3919 TMPDIR=/mnt/storage/scratch/tmp/7xUNh5
|
||||
✔ install: absent (28.837858ms)
|
||||
✔ install: local (28.328967ms)
|
||||
✔ install: local endpoint (26.178892ms)
|
||||
✔ install: containerized missing endpoint (25.578947ms)
|
||||
✔ install: bad endpoint "tcp://localhost:2375" (24.988885ms)
|
||||
✔ install: bad endpoint "ssh://host/run/docker.sock" (25.850327ms)
|
||||
✔ install: bad endpoint "run/docker.sock" (26.499708ms)
|
||||
✔ install: bad endpoint "unix://relative.sock" (42.276491ms)
|
||||
✔ install: bad endpoint "unix:///a b.sock" (32.161423ms)
|
||||
✔ install: bad endpoint "unix:///a.sock\n" (26.834457ms)
|
||||
✔ install: bad endpoint "unix:///a" (30.552354ms)
|
||||
✔ install: bad endpoint "" (28.938768ms)
|
||||
✔ install: bad endpoint null (27.00598ms)
|
||||
✔ install: bad endpoint 4 (29.63046ms)
|
||||
✔ install: valid endpoint (28.707851ms)
|
||||
✔ install: unknown mode (25.507911ms)
|
||||
✔ install: missing mode (27.101142ms)
|
||||
✔ install: unknown key (32.316453ms)
|
||||
✔ install: null (27.273355ms)
|
||||
✔ install: array (25.503395ms)
|
||||
✔ helper refuses rootful (81.447175ms)
|
||||
✔ helper refuses missing (49.32616ms)
|
||||
✔ helper refuses substring (80.299191ms)
|
||||
✔ helper refuses object (96.465808ms)
|
||||
✔ helper refuses invalid JSON (89.854499ms)
|
||||
✔ helper refuses null success (79.934412ms)
|
||||
✔ helper refuses rootless output but failed (61.053445ms)
|
||||
✔ helper checks once and explicitly names host for both calls (120.469053ms)
|
||||
✔ local mode refuses before Docker null (28.252291ms)
|
||||
✔ local mode refuses before Docker {"mode":"local"} (32.631557ms)
|
||||
✔ invalid config refuses before Docker (28.529643ms)
|
||||
ℹ tests 31
|
||||
ℹ suites 0
|
||||
ℹ pass 31
|
||||
ℹ fail 0
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 798.423992
|
||||
✔ allows exact host and port, fragmented headers, and preserves tunnel head (18.932222ms)
|
||||
✔ unlisted host (1.309946ms)
|
||||
✔ unlisted port (1.067401ms)
|
||||
✔ GET (0.988233ms)
|
||||
✔ invalid port (0.919738ms)
|
||||
✔ userinfo (0.832286ms)
|
||||
✔ bad header (0.761085ms)
|
||||
✔ slow client has a total header deadline (80.345593ms)
|
||||
✔ oversized header refuses (1.044536ms)
|
||||
✔ missing, invalid and unknown lists fail closed (0.486134ms)
|
||||
✔ refused upstream returns 502 while retaining one allowed decision (1.562662ms)
|
||||
ℹ tests 11
|
||||
ℹ suites 0
|
||||
ℹ pass 11
|
||||
ℹ fail 0
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 149.849801
|
||||
#0 building with "default" instance using docker driver
|
||||
|
||||
#1 [internal] load build definition from Dockerfile
|
||||
#1 transferring dockerfile: 454B done
|
||||
#1 DONE 0.0s
|
||||
|
||||
#2 [internal] load metadata for docker.io/library/node@sha256:d6aa754f16b3197301076f047b5def2f02ea1dbbc2ca920407d46d7ec7f87b20
|
||||
#2 DONE 1.6s
|
||||
|
||||
#3 [internal] load .dockerignore
|
||||
#3 transferring context: 2B done
|
||||
#3 DONE 0.0s
|
||||
|
||||
#4 [1/9] FROM docker.io/library/node@sha256:d6aa754f16b3197301076f047b5def2f02ea1dbbc2ca920407d46d7ec7f87b20
|
||||
#4 resolve docker.io/library/node@sha256:d6aa754f16b3197301076f047b5def2f02ea1dbbc2ca920407d46d7ec7f87b20 done
|
||||
#4 ...
|
||||
|
||||
#5 [internal] load build context
|
||||
#5 transferring context: 31.36MB 0.1s done
|
||||
#5 DONE 0.2s
|
||||
|
||||
#4 [1/9] FROM docker.io/library/node@sha256:d6aa754f16b3197301076f047b5def2f02ea1dbbc2ca920407d46d7ec7f87b20
|
||||
#4 sha256:08489011619dfda982191cb9cc0418dc48ea3b1341588aeef534e4db0ab4d3d0 447B / 447B 0.1s done
|
||||
#4 sha256:1a0cf4b1ffc8dd659bb8c6e90471bc8fec24620e4fdb68bb2b6faa56154ae146 0B / 1.71MB 0.2s
|
||||
#4 sha256:11ffcabe0f772f0f1a9c80b4b290b5ec0de54f11c671f0fa10e5844f9b52d17a 0B / 50.86MB 0.2s
|
||||
#4 sha256:517d640e32835287653c4b15eb5d9f6bcf48e103baea4f7e29bac937002f649b 3.31kB / 3.31kB 0.2s done
|
||||
#4 sha256:1a0cf4b1ffc8dd659bb8c6e90471bc8fec24620e4fdb68bb2b6faa56154ae146 1.71MB / 1.71MB 0.3s done
|
||||
#4 sha256:7fd1ebe418b5079d4aa36f416af9b143d127bc75b0155d71cb5fd559b5e04d39 3.15MB / 28.25MB 0.3s
|
||||
#4 sha256:11ffcabe0f772f0f1a9c80b4b290b5ec0de54f11c671f0fa10e5844f9b52d17a 6.29MB / 50.86MB 0.5s
|
||||
#4 sha256:7fd1ebe418b5079d4aa36f416af9b143d127bc75b0155d71cb5fd559b5e04d39 11.53MB / 28.25MB 0.5s
|
||||
#4 sha256:11ffcabe0f772f0f1a9c80b4b290b5ec0de54f11c671f0fa10e5844f9b52d17a 14.68MB / 50.86MB 0.6s
|
||||
#4 sha256:7fd1ebe418b5079d4aa36f416af9b143d127bc75b0155d71cb5fd559b5e04d39 19.92MB / 28.25MB 0.6s
|
||||
#4 sha256:11ffcabe0f772f0f1a9c80b4b290b5ec0de54f11c671f0fa10e5844f9b52d17a 24.12MB / 50.86MB 0.8s
|
||||
#4 sha256:7fd1ebe418b5079d4aa36f416af9b143d127bc75b0155d71cb5fd559b5e04d39 28.25MB / 28.25MB 0.8s done
|
||||
#4 sha256:11ffcabe0f772f0f1a9c80b4b290b5ec0de54f11c671f0fa10e5844f9b52d17a 49.28MB / 50.86MB 1.1s
|
||||
#4 extracting sha256:7fd1ebe418b5079d4aa36f416af9b143d127bc75b0155d71cb5fd559b5e04d39
|
||||
#4 sha256:11ffcabe0f772f0f1a9c80b4b290b5ec0de54f11c671f0fa10e5844f9b52d17a 50.86MB / 50.86MB 1.1s done
|
||||
#4 extracting sha256:7fd1ebe418b5079d4aa36f416af9b143d127bc75b0155d71cb5fd559b5e04d39 0.7s done
|
||||
#4 DONE 1.6s
|
||||
|
||||
#4 [1/9] FROM docker.io/library/node@sha256:d6aa754f16b3197301076f047b5def2f02ea1dbbc2ca920407d46d7ec7f87b20
|
||||
#4 extracting sha256:517d640e32835287653c4b15eb5d9f6bcf48e103baea4f7e29bac937002f649b 0.0s done
|
||||
#4 extracting sha256:11ffcabe0f772f0f1a9c80b4b290b5ec0de54f11c671f0fa10e5844f9b52d17a
|
||||
#4 extracting sha256:11ffcabe0f772f0f1a9c80b4b290b5ec0de54f11c671f0fa10e5844f9b52d17a 1.0s done
|
||||
#4 DONE 2.6s
|
||||
|
||||
#4 [1/9] FROM docker.io/library/node@sha256:d6aa754f16b3197301076f047b5def2f02ea1dbbc2ca920407d46d7ec7f87b20
|
||||
#4 extracting sha256:1a0cf4b1ffc8dd659bb8c6e90471bc8fec24620e4fdb68bb2b6faa56154ae146 0.0s done
|
||||
#4 extracting sha256:08489011619dfda982191cb9cc0418dc48ea3b1341588aeef534e4db0ab4d3d0 done
|
||||
#4 DONE 2.7s
|
||||
|
||||
#6 [2/9] WORKDIR /opt/mosaic
|
||||
#6 DONE 0.0s
|
||||
|
||||
#7 [3/9] COPY package.json package-lock.json ./
|
||||
#7 DONE 0.0s
|
||||
|
||||
#8 [4/9] RUN npm ci --omit=dev --ignore-scripts --no-audit --no-fund && npm cache clean --force
|
||||
#8 1.008 npm warn deprecated [email protected]: Use your platform's native DOMException instead
|
||||
#8 2.464
|
||||
#8 2.464 added 128 packages in 2s
|
||||
#8 2.465 npm notice
|
||||
#8 2.465 npm notice New major version of npm available! 11.19.0 -> 12.2.1
|
||||
#8 2.465 npm notice Changelog: https://github.com/npm/cli/releases/tag/v12.2.1
|
||||
#8 2.465 npm notice To update run: npm install -g [email protected]
|
||||
#8 2.465 npm notice
|
||||
#8 2.562 npm warn using --force Recommended protections disabled.
|
||||
#8 DONE 2.7s
|
||||
|
||||
#9 [5/9] COPY packages/ packages/
|
||||
#9 DONE 0.1s
|
||||
|
||||
#10 [6/9] COPY scripts/ scripts/
|
||||
#10 DONE 0.0s
|
||||
|
||||
#11 [7/9] COPY contracts/ contracts/
|
||||
#11 DONE 0.0s
|
||||
|
||||
#12 [8/9] COPY roles/ roles/
|
||||
#12 DONE 0.0s
|
||||
|
||||
#13 [9/9] COPY RELEASE ./
|
||||
#13 DONE 0.0s
|
||||
|
||||
#14 exporting to image
|
||||
#14 exporting layers
|
||||
#14 exporting layers 3.3s done
|
||||
#14 exporting manifest sha256:b288643bbe89b43f6ffe7890598fe70801933c9e1e5d64efbfc6d87bbc502389 done
|
||||
#14 exporting config sha256:c8e137b79bfd807d4d9fc37d5ac211476decc3cc3c8db1e39b2e5dedf5471191 done
|
||||
#14 exporting attestation manifest sha256:5f2e757dd0fc2a424c78eb4bdd2ddd3039067afb54bc76bc03d6a6f9f1e2ac75 done
|
||||
#14 exporting manifest list sha256:7b4fa741d785225148156d1962a1770b40ab84b55ce8ffde5a3485b316f93b3a done
|
||||
#14 naming to docker.io/library/mosaic-core:0.0.12 done
|
||||
#14 unpacking to docker.io/library/mosaic-core:0.0.12
|
||||
#14 unpacking to docker.io/library/mosaic-core:0.0.12 1.6s done
|
||||
#14 DONE 4.9s
|
||||
#0 building with "default" instance using docker driver
|
||||
|
||||
#1 [internal] load build definition from Dockerfile
|
||||
#1 transferring dockerfile: 424B done
|
||||
#1 WARN: InvalidDefaultArgInFrom: Default value for ARG ${CORE_IMAGE} results in empty or invalid base image name (line 2)
|
||||
#1 DONE 0.0s
|
||||
|
||||
#2 [internal] load metadata for docker.io/library/mosaic-core:0.0.12
|
||||
#2 DONE 0.0s
|
||||
|
||||
#3 [internal] load .dockerignore
|
||||
#3 transferring context: 2B done
|
||||
#3 DONE 0.0s
|
||||
|
||||
#4 [1/2] FROM docker.io/library/mosaic-core:0.0.12@sha256:7b4fa741d785225148156d1962a1770b40ab84b55ce8ffde5a3485b316f93b3a
|
||||
#4 resolve docker.io/library/mosaic-core:0.0.12@sha256:7b4fa741d785225148156d1962a1770b40ab84b55ce8ffde5a3485b316f93b3a done
|
||||
#4 DONE 0.0s
|
||||
|
||||
#5 [2/2] RUN npm install -g --no-audit --no-fund @anthropic-ai/[email protected] @earendil-works/[email protected] && npm cache clean --force && rm -rf /root/.npm /tmp/*
|
||||
#5 1.716 npm warn deprecated [email protected]: Use your platform's native DOMException instead
|
||||
#5 6.031
|
||||
#5 6.031 added 167 packages in 6s
|
||||
#5 6.032 npm warn install-scripts 4 packages have install scripts not yet covered by allowScripts:
|
||||
#5 6.032 npm warn install-scripts @anthropic-ai/[email protected] (postinstall: node install.cjs)
|
||||
#5 6.032 npm warn install-scripts @google/[email protected] (preinstall: echo 'preinstall: no-op')
|
||||
#5 6.032 npm warn install-scripts [email protected] (postinstall: node install.js)
|
||||
#5 6.032 npm warn install-scripts [email protected] (postinstall: node scripts/postinstall)
|
||||
#5 6.032 npm warn install-scripts
|
||||
#5 6.032 npm warn install-scripts Run `npm install -g --allow-scripts=@anthropic-ai/claude-code,@google/genai,esbuild,protobufjs` to allow these scripts once, or `npm config set allow-scripts=@anthropic-ai/claude-code,@google/genai,esbuild,protobufjs --location=user` to allow them for all global installs.
|
||||
#5 6.119 npm warn using --force Recommended protections disabled.
|
||||
#5 DONE 6.3s
|
||||
|
||||
#6 exporting to image
|
||||
#6 exporting layers
|
||||
#6 exporting layers 18.7s done
|
||||
#6 exporting manifest sha256:16af90e8e3291626f37fb5b2e78904d87126d875e7bcc240dd2ba453ca62bc10 done
|
||||
#6 exporting config sha256:ad269f0a84c0b1c5833b787793a45df782c1aae86e37f6216782a12a01f4557b done
|
||||
#6 exporting attestation manifest sha256:436490e0d139cb0db83f260c42ac3364377971160b2418cd03ee07c18873a5f6 done
|
||||
#6 exporting manifest list sha256:bc95495952e58a005c275a9d00842242c17965d0d9c2a83c476048cbfc110946 done
|
||||
#6 naming to docker.io/library/mosaic-session:0.0.12 done
|
||||
#6 unpacking to docker.io/library/mosaic-session:0.0.12
|
||||
#6 unpacking to docker.io/library/mosaic-session:0.0.12 5.3s done
|
||||
#6 DONE 24.0s
|
||||
|
||||
[33m1 warning found (use docker --debug to expand):
|
||||
[0m - InvalidDefaultArgInFrom: Default value for ARG ${CORE_IMAGE} results in empty or invalid base image name (line 2)
|
||||
#0 building with "default" instance using docker driver
|
||||
|
||||
#1 [internal] load build definition from Dockerfile
|
||||
#1 transferring dockerfile: 299B done
|
||||
#1 DONE 0.0s
|
||||
|
||||
#2 [internal] load metadata for docker.io/library/node@sha256:d6aa754f16b3197301076f047b5def2f02ea1dbbc2ca920407d46d7ec7f87b20
|
||||
#2 DONE 0.0s
|
||||
|
||||
#3 [internal] load .dockerignore
|
||||
#3 transferring context: 2B done
|
||||
#3 DONE 0.0s
|
||||
|
||||
#4 [1/4] FROM docker.io/library/node@sha256:d6aa754f16b3197301076f047b5def2f02ea1dbbc2ca920407d46d7ec7f87b20
|
||||
#4 resolve docker.io/library/node@sha256:d6aa754f16b3197301076f047b5def2f02ea1dbbc2ca920407d46d7ec7f87b20 done
|
||||
#4 DONE 0.0s
|
||||
|
||||
#5 [2/4] WORKDIR /opt/mosaic
|
||||
#5 CACHED
|
||||
|
||||
#6 [internal] load build context
|
||||
#6 transferring context: 459B 0.0s done
|
||||
#6 DONE 0.0s
|
||||
|
||||
#7 [3/4] COPY packages/egress/ packages/egress/
|
||||
#7 DONE 0.0s
|
||||
|
||||
#8 [4/4] COPY contracts/egress.json contracts/egress.json
|
||||
#8 DONE 0.0s
|
||||
|
||||
#9 exporting to image
|
||||
#9 exporting layers 0.0s done
|
||||
#9 exporting manifest sha256:f3f318ddc871b5a5f953aa0709cf69194260e633e26b15daafefe40572a36f27 done
|
||||
#9 exporting config sha256:c315f86a3be49d29aa7cad287a1653424206adb43683a34b91633b9bb8a14c6b done
|
||||
#9 exporting attestation manifest sha256:d41ee39a55170821cf46236fbf6069519e52c7386e27259ee17113777fa348e1 done
|
||||
#9 exporting manifest list sha256:af29f552efea177d706779ed9afb43c89763b58de913da0a570208cdda619d50 done
|
||||
#9 naming to docker.io/library/mosaic-egress:0.0.12 done
|
||||
#9 unpacking to docker.io/library/mosaic-egress:0.0.12 0.0s done
|
||||
#9 DONE 0.1s
|
||||
internal network: listed TLS reached, unlisted host/port refused, external DNS refused
|
||||
Vikunja client public GET 200; notifier REST dummy-token GET 401
|
||||
test-install: PASS (provider-host measurement remains Mos gate)
|
||||
EXIT=0
|
||||
@@ -0,0 +1,24 @@
|
||||
2026-10-24T04:13:52Z
|
||||
23:13:52 up 10 days, 14:33, 2 users, load average: 2.19, 2.69, 2.26
|
||||
CLEAR sage-3923 TMPDIR=/mnt/storage/scratch/tmp/5Tw4Jn
|
||||
✔ allows exact host and port, fragmented headers, and preserves tunnel head (17.065009ms)
|
||||
✔ unlisted host (1.179696ms)
|
||||
✔ unlisted port (4.182798ms)
|
||||
✔ GET (0.916554ms)
|
||||
✔ invalid port (0.897474ms)
|
||||
✔ userinfo (0.772938ms)
|
||||
✔ bad header (0.737254ms)
|
||||
✔ slow client has a total header deadline (81.64527ms)
|
||||
✔ oversized header refuses (1.073337ms)
|
||||
✔ missing, invalid and unknown lists fail closed (0.464571ms)
|
||||
✔ refused upstream returns 502 while retaining one allowed decision (1.555082ms)
|
||||
✔ upstream reset after CONNECT closes the tunnel without a second HTTP response (21.757224ms)
|
||||
ℹ tests 12
|
||||
ℹ suites 0
|
||||
ℹ pass 12
|
||||
ℹ fail 0
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 173.90579
|
||||
EXIT=0
|
||||
@@ -0,0 +1,207 @@
|
||||
2026-10-24T04:13:56Z
|
||||
23:13:56 up 10 days, 14:33, 2 users, load average: 2.18, 2.67, 2.26
|
||||
CLEAR sage-3923 TMPDIR=/mnt/storage/scratch/tmp/Yb2lkZ
|
||||
✔ install: absent (26.874578ms)
|
||||
✔ install: local (25.86789ms)
|
||||
✔ install: local endpoint (24.545469ms)
|
||||
✔ install: containerized missing endpoint (26.458263ms)
|
||||
✔ install: bad endpoint "tcp://localhost:2375" (24.315713ms)
|
||||
✔ install: bad endpoint "ssh://host/run/docker.sock" (27.113397ms)
|
||||
✔ install: bad endpoint "run/docker.sock" (24.399221ms)
|
||||
✔ install: bad endpoint "unix://relative.sock" (26.259544ms)
|
||||
✔ install: bad endpoint "unix:///a b.sock" (24.051655ms)
|
||||
✔ install: bad endpoint "unix:///a.sock\n" (23.493287ms)
|
||||
✔ install: bad endpoint "unix:///a" (25.527734ms)
|
||||
✔ install: bad endpoint "" (24.647712ms)
|
||||
✔ install: bad endpoint null (24.029319ms)
|
||||
✔ install: bad endpoint 4 (22.545369ms)
|
||||
✔ install: valid endpoint (24.217907ms)
|
||||
✔ install: unknown mode (22.578207ms)
|
||||
✔ install: missing mode (26.668685ms)
|
||||
✔ install: unknown key (25.239503ms)
|
||||
✔ install: null (26.507504ms)
|
||||
✔ install: array (23.325961ms)
|
||||
✔ helper refuses rootful (83.142099ms)
|
||||
✔ helper refuses missing (48.938896ms)
|
||||
✔ helper refuses substring (74.574145ms)
|
||||
✔ helper refuses object (69.21506ms)
|
||||
✔ helper refuses invalid JSON (71.320245ms)
|
||||
✔ helper refuses null success (70.397988ms)
|
||||
✔ helper refuses rootless output but failed (50.077162ms)
|
||||
✔ helper checks once and explicitly names host for both calls (116.70882ms)
|
||||
✔ local mode refuses before Docker null (26.523468ms)
|
||||
✔ local mode refuses before Docker {"mode":"local"} (26.276186ms)
|
||||
✔ invalid config refuses before Docker (26.092328ms)
|
||||
ℹ tests 31
|
||||
ℹ suites 0
|
||||
ℹ pass 31
|
||||
ℹ fail 0
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 707.332707
|
||||
✔ allows exact host and port, fragmented headers, and preserves tunnel head (15.694598ms)
|
||||
✔ unlisted host (1.162772ms)
|
||||
✔ unlisted port (1.047448ms)
|
||||
✔ GET (0.913924ms)
|
||||
✔ invalid port (0.930799ms)
|
||||
✔ userinfo (0.750312ms)
|
||||
✔ bad header (0.739214ms)
|
||||
✔ slow client has a total header deadline (81.348784ms)
|
||||
✔ oversized header refuses (0.992296ms)
|
||||
✔ missing, invalid and unknown lists fail closed (0.441271ms)
|
||||
✔ refused upstream returns 502 while retaining one allowed decision (1.4408ms)
|
||||
✔ upstream reset after CONNECT closes the tunnel without a second HTTP response (21.481904ms)
|
||||
ℹ tests 12
|
||||
ℹ suites 0
|
||||
ℹ pass 12
|
||||
ℹ fail 0
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 169.285852
|
||||
#0 building with "default" instance using docker driver
|
||||
|
||||
#1 [internal] load build definition from Dockerfile
|
||||
#1 transferring dockerfile: 454B done
|
||||
#1 DONE 0.0s
|
||||
|
||||
#2 [internal] load metadata for docker.io/library/node@sha256:d6aa754f16b3197301076f047b5def2f02ea1dbbc2ca920407d46d7ec7f87b20
|
||||
#2 DONE 0.0s
|
||||
|
||||
#3 [internal] load .dockerignore
|
||||
#3 transferring context: 2B done
|
||||
#3 DONE 0.0s
|
||||
|
||||
#4 [1/9] FROM docker.io/library/node@sha256:d6aa754f16b3197301076f047b5def2f02ea1dbbc2ca920407d46d7ec7f87b20
|
||||
#4 resolve docker.io/library/node@sha256:d6aa754f16b3197301076f047b5def2f02ea1dbbc2ca920407d46d7ec7f87b20 done
|
||||
#4 DONE 0.0s
|
||||
|
||||
#5 [internal] load build context
|
||||
#5 transferring context: 31.37MB 0.1s done
|
||||
#5 DONE 0.1s
|
||||
|
||||
#6 [3/9] COPY package.json package-lock.json ./
|
||||
#6 CACHED
|
||||
|
||||
#7 [2/9] WORKDIR /opt/mosaic
|
||||
#7 CACHED
|
||||
|
||||
#8 [4/9] RUN npm ci --omit=dev --ignore-scripts --no-audit --no-fund && npm cache clean --force
|
||||
#8 CACHED
|
||||
|
||||
#9 [5/9] COPY packages/ packages/
|
||||
#9 DONE 0.1s
|
||||
|
||||
#10 [6/9] COPY scripts/ scripts/
|
||||
#10 DONE 0.0s
|
||||
|
||||
#11 [7/9] COPY contracts/ contracts/
|
||||
#11 DONE 0.0s
|
||||
|
||||
#12 [8/9] COPY roles/ roles/
|
||||
#12 DONE 0.0s
|
||||
|
||||
#13 [9/9] COPY RELEASE ./
|
||||
#13 DONE 0.0s
|
||||
|
||||
#14 exporting to image
|
||||
#14 exporting layers
|
||||
#14 exporting layers 0.4s done
|
||||
#14 exporting manifest sha256:065dd55d59585806e540929e2ea66df397d47292cc84160bb7be491ecd2b9d59 done
|
||||
#14 exporting config sha256:3d97362dc6b6242fc540f08f538068b91ec28b1d3c9a34d7bc2bebff137a7a40 done
|
||||
#14 exporting attestation manifest sha256:f66bf47e4ec5b67db64f44d8554192f646111116e165ec3bc017b5a2b011204b done
|
||||
#14 exporting manifest list sha256:d840b0ec16ce6548549d18fb8bfc6b13c76ee77e9131a317582f919c61dcaf7f done
|
||||
#14 naming to docker.io/library/mosaic-core:0.0.12 done
|
||||
#14 unpacking to docker.io/library/mosaic-core:0.0.12
|
||||
#14 unpacking to docker.io/library/mosaic-core:0.0.12 0.2s done
|
||||
#14 DONE 0.6s
|
||||
#0 building with "default" instance using docker driver
|
||||
|
||||
#1 [internal] load build definition from Dockerfile
|
||||
#1 transferring dockerfile: 424B done
|
||||
#1 WARN: InvalidDefaultArgInFrom: Default value for ARG ${CORE_IMAGE} results in empty or invalid base image name (line 2)
|
||||
#1 DONE 0.0s
|
||||
|
||||
#2 [internal] load metadata for docker.io/library/mosaic-core:0.0.12
|
||||
#2 DONE 0.0s
|
||||
|
||||
#3 [internal] load .dockerignore
|
||||
#3 transferring context: 2B done
|
||||
#3 DONE 0.0s
|
||||
|
||||
#4 [1/2] FROM docker.io/library/mosaic-core:0.0.12@sha256:d840b0ec16ce6548549d18fb8bfc6b13c76ee77e9131a317582f919c61dcaf7f
|
||||
#4 resolve docker.io/library/mosaic-core:0.0.12@sha256:d840b0ec16ce6548549d18fb8bfc6b13c76ee77e9131a317582f919c61dcaf7f done
|
||||
#4 DONE 0.0s
|
||||
|
||||
#5 [2/2] RUN npm install -g --no-audit --no-fund @anthropic-ai/[email protected] @earendil-works/[email protected] && npm cache clean --force && rm -rf /root/.npm /tmp/*
|
||||
#5 1.700 npm warn deprecated [email protected]: Use your platform's native DOMException instead
|
||||
#5 5.518
|
||||
#5 5.518 added 167 packages in 5s
|
||||
#5 5.519 npm warn install-scripts 4 packages have install scripts not yet covered by allowScripts:
|
||||
#5 5.519 npm warn install-scripts @anthropic-ai/[email protected] (postinstall: node install.cjs)
|
||||
#5 5.519 npm warn install-scripts @google/[email protected] (preinstall: echo 'preinstall: no-op')
|
||||
#5 5.519 npm warn install-scripts [email protected] (postinstall: node install.js)
|
||||
#5 5.519 npm warn install-scripts [email protected] (postinstall: node scripts/postinstall)
|
||||
#5 5.519 npm warn install-scripts
|
||||
#5 5.519 npm warn install-scripts Run `npm install -g --allow-scripts=@anthropic-ai/claude-code,@google/genai,esbuild,protobufjs` to allow these scripts once, or `npm config set allow-scripts=@anthropic-ai/claude-code,@google/genai,esbuild,protobufjs --location=user` to allow them for all global installs.
|
||||
#5 5.590 npm warn using --force Recommended protections disabled.
|
||||
#5 DONE 5.7s
|
||||
|
||||
#6 exporting to image
|
||||
#6 exporting layers
|
||||
#6 exporting layers 16.9s done
|
||||
#6 exporting manifest sha256:d4c83e350da6f18bfa7f3dbcef9ab078d72ef7f1f957a2926726e17973969e6a done
|
||||
#6 exporting config sha256:8afa310f48e06614963dcbcdc9c3ac497d9e4bad4ddd0524062ba8a52bc3cda2 done
|
||||
#6 exporting attestation manifest sha256:b7f082a8cd17d2c90eb27a81359aea66186b80d56a6d0c5e89d29187a2f78ed4 done
|
||||
#6 exporting manifest list sha256:2b6299e5a329adf85ea36038cb0407f2328e72e848dbfe95a17bd1fefbf9cf92 done
|
||||
#6 naming to docker.io/library/mosaic-session:0.0.12 done
|
||||
#6 unpacking to docker.io/library/mosaic-session:0.0.12
|
||||
#6 unpacking to docker.io/library/mosaic-session:0.0.12 4.7s done
|
||||
#6 DONE 21.7s
|
||||
|
||||
[33m1 warning found (use docker --debug to expand):
|
||||
[0m - InvalidDefaultArgInFrom: Default value for ARG ${CORE_IMAGE} results in empty or invalid base image name (line 2)
|
||||
#0 building with "default" instance using docker driver
|
||||
|
||||
#1 [internal] load build definition from Dockerfile
|
||||
#1 transferring dockerfile: 299B done
|
||||
#1 DONE 0.0s
|
||||
|
||||
#2 [internal] load metadata for docker.io/library/node@sha256:d6aa754f16b3197301076f047b5def2f02ea1dbbc2ca920407d46d7ec7f87b20
|
||||
#2 DONE 0.0s
|
||||
|
||||
#3 [internal] load .dockerignore
|
||||
#3 transferring context: 2B done
|
||||
#3 DONE 0.0s
|
||||
|
||||
#4 [1/4] FROM docker.io/library/node@sha256:d6aa754f16b3197301076f047b5def2f02ea1dbbc2ca920407d46d7ec7f87b20
|
||||
#4 resolve docker.io/library/node@sha256:d6aa754f16b3197301076f047b5def2f02ea1dbbc2ca920407d46d7ec7f87b20 done
|
||||
#4 DONE 0.0s
|
||||
|
||||
#5 [internal] load build context
|
||||
#5 transferring context: 459B 0.0s done
|
||||
#5 DONE 0.0s
|
||||
|
||||
#6 [2/4] WORKDIR /opt/mosaic
|
||||
#6 CACHED
|
||||
|
||||
#7 [3/4] COPY packages/egress/ packages/egress/
|
||||
#7 DONE 0.0s
|
||||
|
||||
#8 [4/4] COPY contracts/egress.json contracts/egress.json
|
||||
#8 DONE 0.0s
|
||||
|
||||
#9 exporting to image
|
||||
#9 exporting layers 0.0s done
|
||||
#9 exporting manifest sha256:e47c86064470f291d2ea468a1002f1e5f9b2e682e42940d06bd33d4e39945a6e done
|
||||
#9 exporting config sha256:ba520eadeb66ccfa2dbd3170744fca08affb4dac377d6cf2d26ec27d98d4ee25 done
|
||||
#9 exporting attestation manifest sha256:93cbd2f8a7fb1afb858b7b1a35a3020af8e9623e3a98be71d04e9d746c25d148 done
|
||||
#9 exporting manifest list sha256:a55e9d5ec6da74933bbefac6816efd0ea5246e825f61eaa4297e7baf7b09501c done
|
||||
#9 naming to docker.io/library/mosaic-egress:0.0.12 done
|
||||
#9 unpacking to docker.io/library/mosaic-egress:0.0.12 0.0s done
|
||||
#9 DONE 0.1s
|
||||
internal network: listed TLS reached, unlisted host/port refused, external DNS refused
|
||||
Vikunja client public GET 200; notifier REST dummy-token GET 401
|
||||
test-install: PASS (provider-host measurement remains Mos gate)
|
||||
EXIT=0
|
||||
@@ -0,0 +1,165 @@
|
||||
2026-10-24T04:29:25Z
|
||||
23:29:25 up 10 days, 14:49, 2 users, load average: 2.63, 2.97, 2.72
|
||||
CLEAR sage-3936 TMPDIR=/mnt/storage/scratch/tmp/jcNy2F archived=a14fdc443 expected RED
|
||||
✔ refusal 408 releases server socket (allowHalfOpen=false) (62.262337ms)
|
||||
✖ refusal 408 releases server socket (allowHalfOpen=true) (552.049114ms)
|
||||
✔ refusal 400 releases server socket (allowHalfOpen=false) (12.304169ms)
|
||||
✖ refusal 400 releases server socket (allowHalfOpen=true) (509.122366ms)
|
||||
✔ refusal 403 releases server socket (allowHalfOpen=false) (11.566877ms)
|
||||
✖ refusal 403 releases server socket (allowHalfOpen=true) (508.134074ms)
|
||||
✔ refusal 431 releases server socket (allowHalfOpen=false) (11.339612ms)
|
||||
✖ refusal 431 releases server socket (allowHalfOpen=true) (507.396552ms)
|
||||
✔ refusal 502 releases server socket (allowHalfOpen=false) (11.812225ms)
|
||||
✖ refusal 502 releases server socket (allowHalfOpen=true) (509.521901ms)
|
||||
✖ inherited cache is discarded; private cache stays unexported (rootless=false) (49.005306ms)
|
||||
✖ inherited cache is discarded; private cache stays unexported (rootless=true) (42.961333ms)
|
||||
ℹ tests 12
|
||||
ℹ suites 0
|
||||
ℹ pass 5
|
||||
ℹ fail 7
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 2739.328587
|
||||
|
||||
✖ failing tests:
|
||||
|
||||
test at ../../../../../../mnt/storage/scratch/tmp/jcNy2F/legacy/packages/egress/tests/refusal.test.mjs:11:79
|
||||
✖ refusal 408 releases server socket (allowHalfOpen=true) (552.049114ms)
|
||||
AssertionError [ERR_ASSERTION]: refused peer must not retain a server socket
|
||||
|
||||
1 !== 0
|
||||
|
||||
at TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/jcNy2F/legacy/packages/egress/tests/refusal.test.mjs:30:10)
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: 1,
|
||||
expected: 0,
|
||||
operator: 'strictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at ../../../../../../mnt/storage/scratch/tmp/jcNy2F/legacy/packages/egress/tests/refusal.test.mjs:11:79
|
||||
✖ refusal 400 releases server socket (allowHalfOpen=true) (509.122366ms)
|
||||
AssertionError [ERR_ASSERTION]: refused peer must not retain a server socket
|
||||
|
||||
1 !== 0
|
||||
|
||||
at TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/jcNy2F/legacy/packages/egress/tests/refusal.test.mjs:30:10)
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: 1,
|
||||
expected: 0,
|
||||
operator: 'strictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at ../../../../../../mnt/storage/scratch/tmp/jcNy2F/legacy/packages/egress/tests/refusal.test.mjs:11:79
|
||||
✖ refusal 403 releases server socket (allowHalfOpen=true) (508.134074ms)
|
||||
AssertionError [ERR_ASSERTION]: refused peer must not retain a server socket
|
||||
|
||||
1 !== 0
|
||||
|
||||
at TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/jcNy2F/legacy/packages/egress/tests/refusal.test.mjs:30:10)
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: 1,
|
||||
expected: 0,
|
||||
operator: 'strictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at ../../../../../../mnt/storage/scratch/tmp/jcNy2F/legacy/packages/egress/tests/refusal.test.mjs:11:79
|
||||
✖ refusal 431 releases server socket (allowHalfOpen=true) (507.396552ms)
|
||||
AssertionError [ERR_ASSERTION]: refused peer must not retain a server socket
|
||||
|
||||
1 !== 0
|
||||
|
||||
at TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/jcNy2F/legacy/packages/egress/tests/refusal.test.mjs:30:10)
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: 1,
|
||||
expected: 0,
|
||||
operator: 'strictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at ../../../../../../mnt/storage/scratch/tmp/jcNy2F/legacy/packages/egress/tests/refusal.test.mjs:11:79
|
||||
✖ refusal 502 releases server socket (allowHalfOpen=true) (509.521901ms)
|
||||
AssertionError [ERR_ASSERTION]: refused peer must not retain a server socket
|
||||
|
||||
1 !== 0
|
||||
|
||||
at TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/jcNy2F/legacy/packages/egress/tests/refusal.test.mjs:30:10)
|
||||
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
|
||||
at async Test.run (node:internal/test_runner/test:1409:7)
|
||||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||||
generatedMessage: false,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: 1,
|
||||
expected: 0,
|
||||
operator: 'strictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at ../../../../../../mnt/storage/scratch/tmp/jcNy2F/legacy/scripts/install-tests/review-cache.test.mjs:10:36
|
||||
✖ inherited cache is discarded; private cache stays unexported (rootless=false) (49.005306ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:
|
||||
|
||||
0 !== 2
|
||||
|
||||
at TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/jcNy2F/legacy/scripts/install-tests/review-cache.test.mjs:19: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: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: 0,
|
||||
expected: 2,
|
||||
operator: 'strictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
|
||||
test at ../../../../../../mnt/storage/scratch/tmp/jcNy2F/legacy/scripts/install-tests/review-cache.test.mjs:10:36
|
||||
✖ inherited cache is discarded; private cache stays unexported (rootless=true) (42.961333ms)
|
||||
AssertionError [ERR_ASSERTION]: Expected values to be strictly deep-equal:
|
||||
+ actual - expected
|
||||
|
||||
[
|
||||
'--host',
|
||||
+ 'unix:///inherited.sock',
|
||||
+ 'ps'
|
||||
- 'unix:///configured.sock',
|
||||
- 'info',
|
||||
- '--format',
|
||||
- '{{json .SecurityOptions}}'
|
||||
]
|
||||
|
||||
at TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/jcNy2F/legacy/scripts/install-tests/review-cache.test.mjs:20: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: true,
|
||||
code: 'ERR_ASSERTION',
|
||||
actual: [ '--host', 'unix:///inherited.sock', 'ps' ],
|
||||
expected: [ '--host', 'unix:///configured.sock', 'info', '--format', '{{json .SecurityOptions}}' ],
|
||||
operator: 'deepStrictEqual',
|
||||
diff: 'simple'
|
||||
}
|
||||
EXIT=1 (expected 1 for reproduced defects)
|
||||
@@ -0,0 +1,24 @@
|
||||
2026-10-24T04:29:39Z
|
||||
23:29:39 up 10 days, 14:49, 2 users, load average: 2.20, 2.85, 2.69
|
||||
CLEAR sage-3936 TMPDIR=/mnt/storage/scratch/tmp/0gZQZl
|
||||
✔ refusal 408 releases server socket (allowHalfOpen=false) (53.837502ms)
|
||||
✔ refusal 408 releases server socket (allowHalfOpen=true) (42.030239ms)
|
||||
✔ refusal 400 releases server socket (allowHalfOpen=false) (1.261482ms)
|
||||
✔ refusal 400 releases server socket (allowHalfOpen=true) (0.904817ms)
|
||||
✔ refusal 403 releases server socket (allowHalfOpen=false) (0.917847ms)
|
||||
✔ refusal 403 releases server socket (allowHalfOpen=true) (0.804008ms)
|
||||
✔ refusal 431 releases server socket (allowHalfOpen=false) (0.718814ms)
|
||||
✔ refusal 431 releases server socket (allowHalfOpen=true) (0.668466ms)
|
||||
✔ refusal 502 releases server socket (allowHalfOpen=false) (1.344911ms)
|
||||
✔ refusal 502 releases server socket (allowHalfOpen=true) (0.979004ms)
|
||||
✔ inherited cache is discarded; private cache stays unexported (rootless=false) (82.339935ms)
|
||||
✔ inherited cache is discarded; private cache stays unexported (rootless=true) (112.830463ms)
|
||||
ℹ tests 12
|
||||
ℹ suites 0
|
||||
ℹ pass 12
|
||||
ℹ fail 0
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 245.761199
|
||||
EXIT=0
|
||||
@@ -0,0 +1,45 @@
|
||||
2026-10-24T04:29:49Z
|
||||
23:29:49 up 10 days, 14:49, 2 users, load average: 2.09, 2.81, 2.68
|
||||
CLEAR sage-3936 TMPDIR=/mnt/storage/scratch/tmp/tUdE4l
|
||||
✔ install: absent (26.366604ms)
|
||||
✔ install: local (22.63247ms)
|
||||
✔ install: local endpoint (22.799393ms)
|
||||
✔ install: containerized missing endpoint (25.600693ms)
|
||||
✔ install: bad endpoint "tcp://localhost:2375" (23.03486ms)
|
||||
✔ install: bad endpoint "ssh://host/run/docker.sock" (23.131519ms)
|
||||
✔ install: bad endpoint "run/docker.sock" (24.109097ms)
|
||||
✔ install: bad endpoint "unix://relative.sock" (23.350143ms)
|
||||
✔ install: bad endpoint "unix:///a b.sock" (25.171936ms)
|
||||
✔ install: bad endpoint "unix:///a.sock\n" (23.993281ms)
|
||||
✔ install: bad endpoint "unix:///a" (23.480143ms)
|
||||
✔ install: bad endpoint "" (24.103262ms)
|
||||
✔ install: bad endpoint null (22.669641ms)
|
||||
✔ install: bad endpoint 4 (24.019575ms)
|
||||
✔ install: valid endpoint (24.603314ms)
|
||||
✔ install: unknown mode (24.602796ms)
|
||||
✔ install: missing mode (23.797819ms)
|
||||
✔ install: unknown key (22.998491ms)
|
||||
✔ install: null (25.129192ms)
|
||||
✔ install: array (24.482115ms)
|
||||
✔ helper refuses rootful (69.872106ms)
|
||||
✔ helper refuses missing (48.024972ms)
|
||||
✔ helper refuses substring (75.261764ms)
|
||||
✔ helper refuses object (69.618809ms)
|
||||
✔ helper refuses invalid JSON (69.071543ms)
|
||||
✔ helper refuses null success (72.882659ms)
|
||||
✔ helper refuses rootless output but failed (53.345431ms)
|
||||
✔ helper checks once and explicitly names host for both calls (102.552473ms)
|
||||
✔ local mode refuses before Docker null (26.011087ms)
|
||||
✔ local mode refuses before Docker {"mode":"local"} (28.185416ms)
|
||||
✔ invalid config refuses before Docker (27.514422ms)
|
||||
✔ inherited cache is discarded; private cache stays unexported (rootless=false) (75.055951ms)
|
||||
✔ inherited cache is discarded; private cache stays unexported (rootless=true) (109.227515ms)
|
||||
ℹ tests 33
|
||||
ℹ suites 0
|
||||
ℹ pass 33
|
||||
ℹ fail 0
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 690.153576
|
||||
EXIT=0
|
||||
@@ -0,0 +1,34 @@
|
||||
2026-10-24T04:29:59Z
|
||||
23:29:59 up 10 days, 14:49, 2 users, load average: 1.93, 2.75, 2.66
|
||||
CLEAR sage-3936 TMPDIR=/mnt/storage/scratch/tmp/TviERP
|
||||
✔ allows exact host and port, fragmented headers, and preserves tunnel head (23.927026ms)
|
||||
✔ unlisted host (1.732173ms)
|
||||
✔ unlisted port (1.604846ms)
|
||||
✔ GET (1.184716ms)
|
||||
✔ invalid port (1.343703ms)
|
||||
✔ userinfo (1.188622ms)
|
||||
✔ bad header (1.150055ms)
|
||||
✔ slow client has a total header deadline (81.793054ms)
|
||||
✔ oversized header refuses (1.244104ms)
|
||||
✔ missing, invalid and unknown lists fail closed (0.57805ms)
|
||||
✔ refused upstream returns 502 while retaining one allowed decision (1.746501ms)
|
||||
✔ upstream reset after CONNECT closes the tunnel without a second HTTP response (22.237884ms)
|
||||
✔ refusal 408 releases server socket (allowHalfOpen=false) (55.691211ms)
|
||||
✔ refusal 408 releases server socket (allowHalfOpen=true) (43.646383ms)
|
||||
✔ refusal 400 releases server socket (allowHalfOpen=false) (1.568816ms)
|
||||
✔ refusal 400 releases server socket (allowHalfOpen=true) (1.105107ms)
|
||||
✔ refusal 403 releases server socket (allowHalfOpen=false) (1.202959ms)
|
||||
✔ refusal 403 releases server socket (allowHalfOpen=true) (1.016559ms)
|
||||
✔ refusal 431 releases server socket (allowHalfOpen=false) (0.914639ms)
|
||||
✔ refusal 431 releases server socket (allowHalfOpen=true) (0.889516ms)
|
||||
✔ refusal 502 releases server socket (allowHalfOpen=false) (1.698346ms)
|
||||
✔ refusal 502 releases server socket (allowHalfOpen=true) (1.234793ms)
|
||||
ℹ tests 22
|
||||
ℹ suites 0
|
||||
ℹ pass 22
|
||||
ℹ fail 0
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 183.862745
|
||||
EXIT=0
|
||||
@@ -0,0 +1,219 @@
|
||||
2026-10-24T04:30:08Z
|
||||
23:30:08 up 10 days, 14:49, 2 users, load average: 1.79, 2.69, 2.64
|
||||
CLEAR sage-3936 TMPDIR=/mnt/storage/scratch/tmp/qmqk7B
|
||||
✔ install: absent (25.729884ms)
|
||||
✔ install: local (27.889152ms)
|
||||
✔ install: local endpoint (24.35751ms)
|
||||
✔ install: containerized missing endpoint (32.226985ms)
|
||||
✔ install: bad endpoint "tcp://localhost:2375" (36.932763ms)
|
||||
✔ install: bad endpoint "ssh://host/run/docker.sock" (30.311354ms)
|
||||
✔ install: bad endpoint "run/docker.sock" (25.198808ms)
|
||||
✔ install: bad endpoint "unix://relative.sock" (26.143708ms)
|
||||
✔ install: bad endpoint "unix:///a b.sock" (26.182728ms)
|
||||
✔ install: bad endpoint "unix:///a.sock\n" (24.78053ms)
|
||||
✔ install: bad endpoint "unix:///a" (25.183076ms)
|
||||
✔ install: bad endpoint "" (26.038913ms)
|
||||
✔ install: bad endpoint null (28.122111ms)
|
||||
✔ install: bad endpoint 4 (25.273681ms)
|
||||
✔ install: valid endpoint (24.978162ms)
|
||||
✔ install: unknown mode (25.362867ms)
|
||||
✔ install: missing mode (30.700943ms)
|
||||
✔ install: unknown key (25.157537ms)
|
||||
✔ install: null (25.311198ms)
|
||||
✔ install: array (22.791684ms)
|
||||
✔ helper refuses rootful (73.335956ms)
|
||||
✔ helper refuses missing (58.142601ms)
|
||||
✔ helper refuses substring (76.536037ms)
|
||||
✔ helper refuses object (71.066459ms)
|
||||
✔ helper refuses invalid JSON (75.615304ms)
|
||||
✔ helper refuses null success (74.72487ms)
|
||||
✔ helper refuses rootless output but failed (56.316538ms)
|
||||
✔ helper checks once and explicitly names host for both calls (116.375519ms)
|
||||
✔ local mode refuses before Docker null (33.189488ms)
|
||||
✔ local mode refuses before Docker {"mode":"local"} (33.416869ms)
|
||||
✔ invalid config refuses before Docker (33.260841ms)
|
||||
✔ inherited cache is discarded; private cache stays unexported (rootless=false) (77.918846ms)
|
||||
✔ inherited cache is discarded; private cache stays unexported (rootless=true) (125.24254ms)
|
||||
ℹ tests 33
|
||||
ℹ suites 0
|
||||
ℹ pass 33
|
||||
ℹ fail 0
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 751.025142
|
||||
✔ allows exact host and port, fragmented headers, and preserves tunnel head (21.619769ms)
|
||||
✔ unlisted host (1.449654ms)
|
||||
✔ unlisted port (1.146495ms)
|
||||
✔ GET (1.037357ms)
|
||||
✔ invalid port (0.994228ms)
|
||||
✔ userinfo (0.84581ms)
|
||||
✔ bad header (0.834734ms)
|
||||
✔ slow client has a total header deadline (81.37968ms)
|
||||
✔ oversized header refuses (1.096351ms)
|
||||
✔ missing, invalid and unknown lists fail closed (0.499339ms)
|
||||
✔ refused upstream returns 502 while retaining one allowed decision (1.730862ms)
|
||||
✔ upstream reset after CONNECT closes the tunnel without a second HTTP response (21.825124ms)
|
||||
✔ refusal 408 releases server socket (allowHalfOpen=false) (55.028256ms)
|
||||
✔ refusal 408 releases server socket (allowHalfOpen=true) (42.613145ms)
|
||||
✔ refusal 400 releases server socket (allowHalfOpen=false) (1.348936ms)
|
||||
✔ refusal 400 releases server socket (allowHalfOpen=true) (1.104981ms)
|
||||
✔ refusal 403 releases server socket (allowHalfOpen=false) (1.097498ms)
|
||||
✔ refusal 403 releases server socket (allowHalfOpen=true) (0.965577ms)
|
||||
✔ refusal 431 releases server socket (allowHalfOpen=false) (0.806917ms)
|
||||
✔ refusal 431 releases server socket (allowHalfOpen=true) (0.752832ms)
|
||||
✔ refusal 502 releases server socket (allowHalfOpen=false) (1.582846ms)
|
||||
✔ refusal 502 releases server socket (allowHalfOpen=true) (1.14509ms)
|
||||
ℹ tests 22
|
||||
ℹ suites 0
|
||||
ℹ pass 22
|
||||
ℹ fail 0
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 0
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 181.752441
|
||||
#0 building with "default" instance using docker driver
|
||||
|
||||
#1 [internal] load build definition from Dockerfile
|
||||
#1 transferring dockerfile: 454B done
|
||||
#1 DONE 0.0s
|
||||
|
||||
#2 [internal] load metadata for docker.io/library/node@sha256:d6aa754f16b3197301076f047b5def2f02ea1dbbc2ca920407d46d7ec7f87b20
|
||||
#2 DONE 0.7s
|
||||
|
||||
#3 [internal] load .dockerignore
|
||||
#3 transferring context: 2B done
|
||||
#3 DONE 0.0s
|
||||
|
||||
#4 [1/9] FROM docker.io/library/node@sha256:d6aa754f16b3197301076f047b5def2f02ea1dbbc2ca920407d46d7ec7f87b20
|
||||
#4 resolve docker.io/library/node@sha256:d6aa754f16b3197301076f047b5def2f02ea1dbbc2ca920407d46d7ec7f87b20 done
|
||||
#4 DONE 0.0s
|
||||
|
||||
#5 [internal] load build context
|
||||
#5 transferring context: 31.38MB 0.1s done
|
||||
#5 DONE 0.1s
|
||||
|
||||
#6 [2/9] WORKDIR /opt/mosaic
|
||||
#6 CACHED
|
||||
|
||||
#7 [3/9] COPY package.json package-lock.json ./
|
||||
#7 CACHED
|
||||
|
||||
#8 [4/9] RUN npm ci --omit=dev --ignore-scripts --no-audit --no-fund && npm cache clean --force
|
||||
#8 CACHED
|
||||
|
||||
#9 [5/9] COPY packages/ packages/
|
||||
#9 DONE 0.1s
|
||||
|
||||
#10 [6/9] COPY scripts/ scripts/
|
||||
#10 DONE 0.0s
|
||||
|
||||
#11 [7/9] COPY contracts/ contracts/
|
||||
#11 DONE 0.0s
|
||||
|
||||
#12 [8/9] COPY roles/ roles/
|
||||
#12 DONE 0.0s
|
||||
|
||||
#13 [9/9] COPY RELEASE ./
|
||||
#13 DONE 0.0s
|
||||
|
||||
#14 exporting to image
|
||||
#14 exporting layers
|
||||
#14 exporting layers 0.4s done
|
||||
#14 exporting manifest sha256:cfd93bac400adc7580134f6177efd9d748e4b4ad65b0ff22515ca3b3ffafa530 done
|
||||
#14 exporting config sha256:bda6c7420c2df9510f081d28f50d205083867d0ce907c12290fff226c020fe38 done
|
||||
#14 exporting attestation manifest sha256:79c61e7daf7794a3db88121ce6260fafab69f182ef89773914c41ca75a44574c done
|
||||
#14 exporting manifest list sha256:82fc7a3df060c3e58799cca4f89dbd57dc007c5534fdedce54d3de637cc83b67 done
|
||||
#14 naming to docker.io/library/mosaic-core:0.0.12 done
|
||||
#14 unpacking to docker.io/library/mosaic-core:0.0.12
|
||||
#14 unpacking to docker.io/library/mosaic-core:0.0.12 0.2s done
|
||||
#14 DONE 0.7s
|
||||
#0 building with "default" instance using docker driver
|
||||
|
||||
#1 [internal] load build definition from Dockerfile
|
||||
#1 transferring dockerfile: 424B done
|
||||
#1 WARN: InvalidDefaultArgInFrom: Default value for ARG ${CORE_IMAGE} results in empty or invalid base image name (line 2)
|
||||
#1 DONE 0.0s
|
||||
|
||||
#2 [internal] load metadata for docker.io/library/mosaic-core:0.0.12
|
||||
#2 DONE 0.0s
|
||||
|
||||
#3 [internal] load .dockerignore
|
||||
#3 transferring context: 2B done
|
||||
#3 DONE 0.0s
|
||||
|
||||
#4 [1/2] FROM docker.io/library/mosaic-core:0.0.12@sha256:82fc7a3df060c3e58799cca4f89dbd57dc007c5534fdedce54d3de637cc83b67
|
||||
#4 resolve docker.io/library/mosaic-core:0.0.12@sha256:82fc7a3df060c3e58799cca4f89dbd57dc007c5534fdedce54d3de637cc83b67 done
|
||||
#4 DONE 0.0s
|
||||
|
||||
#5 [2/2] RUN npm install -g --no-audit --no-fund @anthropic-ai/[email protected] @earendil-works/[email protected] && npm cache clean --force && rm -rf /root/.npm /tmp/*
|
||||
#5 1.920 npm warn deprecated [email protected]: Use your platform's native DOMException instead
|
||||
#5 6.054
|
||||
#5 6.054 added 167 packages in 6s
|
||||
#5 6.055 npm warn install-scripts 4 packages have install scripts not yet covered by allowScripts:
|
||||
#5 6.055 npm warn install-scripts @anthropic-ai/[email protected] (postinstall: node install.cjs)
|
||||
#5 6.055 npm warn install-scripts @google/[email protected] (preinstall: echo 'preinstall: no-op')
|
||||
#5 6.055 npm warn install-scripts [email protected] (postinstall: node install.js)
|
||||
#5 6.055 npm warn install-scripts [email protected] (postinstall: node scripts/postinstall)
|
||||
#5 6.055 npm warn install-scripts
|
||||
#5 6.055 npm warn install-scripts Run `npm install -g --allow-scripts=@anthropic-ai/claude-code,@google/genai,esbuild,protobufjs` to allow these scripts once, or `npm config set allow-scripts=@anthropic-ai/claude-code,@google/genai,esbuild,protobufjs --location=user` to allow them for all global installs.
|
||||
#5 6.127 npm warn using --force Recommended protections disabled.
|
||||
#5 DONE 6.3s
|
||||
|
||||
#6 exporting to image
|
||||
#6 exporting layers
|
||||
#6 exporting layers 19.5s done
|
||||
#6 exporting manifest sha256:8b6b7de22cf08845f8fc02961c9677afb9faf0ddc4efe04ab4073a822a60518b done
|
||||
#6 exporting config sha256:94013fda37e404bc26b7b15281138cd60afbfea672cae2d2187acc0a7c3a0d7e done
|
||||
#6 exporting attestation manifest sha256:127fcf7ecd51a985d22f5a33d5c441d8fa1e246f88dc6e990c01197b46a61427 done
|
||||
#6 exporting manifest list sha256:9a272acf49ab376fa9739f66453979487ea8ab259bc43e56f6553e2da7b20835 done
|
||||
#6 naming to docker.io/library/mosaic-session:0.0.12 done
|
||||
#6 unpacking to docker.io/library/mosaic-session:0.0.12
|
||||
#6 unpacking to docker.io/library/mosaic-session:0.0.12 5.2s done
|
||||
#6 DONE 24.8s
|
||||
|
||||
[33m1 warning found (use docker --debug to expand):
|
||||
[0m - InvalidDefaultArgInFrom: Default value for ARG ${CORE_IMAGE} results in empty or invalid base image name (line 2)
|
||||
#0 building with "default" instance using docker driver
|
||||
|
||||
#1 [internal] load build definition from Dockerfile
|
||||
#1 transferring dockerfile: 299B done
|
||||
#1 DONE 0.0s
|
||||
|
||||
#2 [internal] load metadata for docker.io/library/node@sha256:d6aa754f16b3197301076f047b5def2f02ea1dbbc2ca920407d46d7ec7f87b20
|
||||
#2 DONE 0.0s
|
||||
|
||||
#3 [internal] load .dockerignore
|
||||
#3 transferring context: 2B done
|
||||
#3 DONE 0.0s
|
||||
|
||||
#4 [1/4] FROM docker.io/library/node@sha256:d6aa754f16b3197301076f047b5def2f02ea1dbbc2ca920407d46d7ec7f87b20
|
||||
#4 resolve docker.io/library/node@sha256:d6aa754f16b3197301076f047b5def2f02ea1dbbc2ca920407d46d7ec7f87b20 done
|
||||
#4 DONE 0.0s
|
||||
|
||||
#5 [internal] load build context
|
||||
#5 transferring context: 517B 0.0s done
|
||||
#5 DONE 0.0s
|
||||
|
||||
#6 [2/4] WORKDIR /opt/mosaic
|
||||
#6 CACHED
|
||||
|
||||
#7 [3/4] COPY packages/egress/ packages/egress/
|
||||
#7 DONE 0.0s
|
||||
|
||||
#8 [4/4] COPY contracts/egress.json contracts/egress.json
|
||||
#8 DONE 0.0s
|
||||
|
||||
#9 exporting to image
|
||||
#9 exporting layers 0.0s done
|
||||
#9 exporting manifest sha256:db3e8991a9330374257298a4a5d4ff36779e8c8d0b00c8b8ead47fc82e32fada done
|
||||
#9 exporting config sha256:e7d66f4f785e49a6529b3ed4b708e3b985f4e737d03a66a2c861666288d435d9 done
|
||||
#9 exporting attestation manifest sha256:8d2362ebe73a0b71b175ea4d9571ab841c6f5b0913e8fa265d1f4544307987d2 done
|
||||
#9 exporting manifest list sha256:36d0bbeb3abc92fc099d95e1fac416df5cc29edf147fcfc4d8743cbe1d60e592 done
|
||||
#9 naming to docker.io/library/mosaic-egress:0.0.12 done
|
||||
#9 unpacking to docker.io/library/mosaic-egress:0.0.12 0.0s done
|
||||
#9 DONE 0.1s
|
||||
internal network: listed TLS reached, unlisted host/port refused, external DNS refused
|
||||
Vikunja client public GET 200; notifier REST dummy-token GET 401
|
||||
test-install: PASS (provider-host measurement remains Mos gate)
|
||||
EXIT=0
|
||||
@@ -0,0 +1,363 @@
|
||||
# Row 157 / I2 / #1652 — Bentina build record
|
||||
|
||||
## 2026-10-24 — recovery and pre-build hold
|
||||
|
||||
Authority: Sage sage-3906 under Q246 / mos-1566. Seat thread:
|
||||
`d1ae468e-51ba-40c4-9513-b39ebbb40450`. Branch `bentina/row157`,
|
||||
base `ec86f2c84` (required registration commit), initially clean.
|
||||
Read root AGENTS.md, agents/bentina/README.md, the I2 brief and its shared
|
||||
rules, and the approved containerized-install design. CURRENT.md is a
|
||||
historical narrative; queue and Sage's assignment select this row. Goal
|
||||
order recovered from 2026-09-27_goals-review.md. Boyd first review, then
|
||||
Darkwing install-path review, per Sage's newer assignment.
|
||||
|
||||
### Queue boundary
|
||||
|
||||
The initial worktree `scripts/mosaic queue next bentina` refused because
|
||||
queue commands require the canonical checkout. Retried the same read using
|
||||
`/mnt/storage/src/mosaic-stack/scripts/mosaic` in that checkout (the documented
|
||||
queue location, without changing its configuration):
|
||||
|
||||
```
|
||||
start row 157: I2 install images, the install config key, the endpoint helper and the egress proxy; brief docs/plans/2026-10-18_containerized-install-rows.md § I2 install images, the install config key, the endpoint helper and the egress proxy; brief differs from pinned blob; ask the lead to re-pin
|
||||
```
|
||||
|
||||
No claimant move until Sage resolves the stale brief pin. No other queue
|
||||
write authorized. Sent Sage bentina-0001 with this refusal and the outbound
|
||||
path findings below. Implementation has not started.
|
||||
|
||||
### Re-read of the I2 brief's cited files at ec86f2c84
|
||||
|
||||
| Cited file / old site | Current observation |
|
||||
|---|---|
|
||||
| scripts/hello.sh:24 | Calls processing-control/src/container-cli.mjs:25; Docker moved behind processing control. |
|
||||
| scripts/build.sh:13 | Still ambient `docker compose build`:13. |
|
||||
| scripts/release.sh:39,122 | Still ambient image inspect:39 and compose build:122. |
|
||||
| scripts/agent.sh:208 | Now execs processing-control/src/container-cli.mjs --tty:209. |
|
||||
| scripts/verify.sh:36,39,45 | Ambient image inspect:37 and compose build:40; request now uses processing-control container CLI:46. |
|
||||
| scripts/land-work.sh:87-88 | Ambient network inspect/remove unchanged at 87-88. |
|
||||
| scripts/test-release.sh:58 | Docker probes now at 78,129; cleanup network rm:25; network checks:131,133. |
|
||||
| scripts/test-task.sh:139,395,442,517 | Docker probes now at 166,422,470,513,557,579; cleanup network rm:21 and network checks:581,583. |
|
||||
| scripts/mosaic-task.mjs:396 | Now calls runContainer:402, imported from processing control, rather than directly spawning Docker. |
|
||||
| packages/cli/src/git-socket.mjs:243 | dropNetwork now spawns ambient docker network rm:266; I6 retains ownership. |
|
||||
| scripts/mosaic-config.mjs:109-160 / :115 | Loader expanded for instances, Console, federation and compaction settings. validate starts:293; allowed-key expression:304 retains a prefix used by stack-release-fixture.mjs. No install key yet. |
|
||||
|
||||
The design says to read via scripts/load_config; this is a function, not a
|
||||
file. Actual entry is scripts/common.sh:16 `load_config`, invoking
|
||||
mosaic-config.mjs env, then exporting four existing variables. No install
|
||||
mode/endpoint exports yet. No modification made.
|
||||
|
||||
Design sections 3/4/7 re-read: exact base digest
|
||||
`node@sha256:d6aa754f16b3197301076f047b5def2f02ea1dbbc2ca920407d46d7ec7f87b20`;
|
||||
three release-tagged images; optional install with local default; exact
|
||||
rootless SecurityOptions array element check; baked agents/services CONNECT
|
||||
lists; JSON decision log. Spike proxy source re-read: one-chunk request
|
||||
parsing, no slow-client bound, environment allowlist; it needs the reviewed
|
||||
implementation required by I2, not a direct copy. package.json pins pi
|
||||
0.85.1; spike Dockerfile.clis pins Claude Code 2.1.296 (current session-code
|
||||
pin still needs checking before implementation).
|
||||
|
||||
### Outbound stop condition (brief What ships; design section 7)
|
||||
|
||||
The brief explicitly says: “If one doesn't, stop and tell Sage before
|
||||
adding a dependency.” Not all broker outbound paths use fetch at this base:
|
||||
|
||||
- packages/bus/src/gitea-grant.mjs:11 imports node:https request;
|
||||
send():91-140 calls httpsRequest:115 with `agent: false`, auth header,
|
||||
optional CA, timeout and bounded response. It is not the measured fetch
|
||||
path. runtime.mjs imports and wires the grant executor.
|
||||
- packages/bus/src/web.mjs delegates to packages/discord/src/web.mjs.
|
||||
That implementation imports node:https/node:http:23-24, resolves public
|
||||
addresses and pins the connection to a vetted address (:161 onward).
|
||||
Changing it to fetch without preserving that fence would be a boundary
|
||||
change. Its arbitrary public destinations also need reconciliation with
|
||||
the design's fixed services host list; do not widen the list speculatively.
|
||||
- packages/tasks/src/vikunja.mjs:30,41 uses injected/default global fetch,
|
||||
redirect:error, and processing cancellation/deadline.
|
||||
- packages/cli/src/notifier-process.mjs:41-46 supplies global fetch to
|
||||
openDirect. packages/discord/src/notify.mjs:17 builds REST only; it
|
||||
explicitly does not run the gateway. packages/discord/src/rest.mjs:45
|
||||
calls injected fetch. The separate Discord connector gateway uses native
|
||||
WebSocket (gateway.mjs:193); do not claim the notifier needs that gateway.
|
||||
- No NODE_USE_ENV_PROXY or HTTPS_PROXY setup found in host.mjs,
|
||||
notifier-process.mjs or bus/process.mjs. I6 owns container startup;
|
||||
I2's eventual image/process verification must demonstrate the actual path
|
||||
with dummy credentials, after the transport ruling and a CLEAR slot.
|
||||
|
||||
Recommendation sent to Sage: re-pin the approved brief and rule on the
|
||||
bounded handling/ownership of non-fetch paths before implementation. No new
|
||||
dependency, host-list expansion, or replacement of DNS pinning authorized.
|
||||
|
||||
### Environment and evidence limits
|
||||
|
||||
`/run/user/1000/docker.sock` exists as a Unix socket owned by jwoltje.
|
||||
Existence is not a rootless attestation. No Docker command or endpoint probe
|
||||
has been run. All test execution requires Sage CLEAR; none requested yet
|
||||
because there is no implementation candidate. No test, image build,
|
||||
credential read, live config/data access, daemon/volume/unit change, commit
|
||||
or push. Once unblocked, implement within the owned file list, add required
|
||||
acceptance cases, then request a concrete CLEAR with paths and suites;
|
||||
use fresh /mnt/storage/scratch/tmp/XXXXXX TMPDIR and timeout -k 10 for each
|
||||
scripts/test-*.sh. Old-test changes require Sage authorization before edits.
|
||||
Provider-host measurement ships with expected output for Mos; no real token
|
||||
will be used here.
|
||||
|
||||
## sage-3907 — stop resolved; implementation draft
|
||||
|
||||
Sage confirms only I6 changed since the brief pin, and will re-pin row 157.
|
||||
I2 must not change non-fetch security transports or add a dependency. Record
|
||||
all gaps, retain each named service host and code path in the contract with
|
||||
an explicit note, and build the rest. Sage owns the transport ruling before
|
||||
broker rollout in later rows. This supersedes the pre-build transport hold;
|
||||
the queue claim still awaits a current pin. No queue move attempted.
|
||||
|
||||
Additional non-fetch broker paths found:
|
||||
|
||||
- runtime.mjs:511 calls seat/src/working.mjs:461 publishRemote, which runs
|
||||
git ls-remote/push at :479/:490 with credential helper input on fd 3.
|
||||
checkout.mjs:80 gitEnv emits a fixed environment without HTTPS_PROXY.
|
||||
This is Git HTTPS, not fetch; core's no-git design also prevents it from
|
||||
working today. The Gitea host entry retains this caveat.
|
||||
- runtime.mjs:292 wires hostGrant; host-grant.mjs:174 spawns ssh-keyscan
|
||||
to read public host keys at the registered address/port. It uses fixed
|
||||
PATH-only env, not fetch or HTTP CONNECT. runtime.mjs:435 wires
|
||||
hostExecutor; host-run.mjs:30-45 sshArgs explicitly sets
|
||||
ProxyCommand=none and ProxyJump=none, then ssh to run authorized commands
|
||||
using a pinned host key and private agent. Neither routes through an env
|
||||
HTTP proxy. Hosts/ports are per registry and may be SSH, so no fabricated
|
||||
:443 allowlist entry or network expansion was added.
|
||||
- Search-source plug-ins delegate to discord/src/web.mjs. searxng-url
|
||||
sends search GETs to the operator's configured host; searxng-bundled points
|
||||
at 127.0.0.1:8888. Both are non-fetch and depend on the existing DNS checks.
|
||||
No fixed host can be truthfully named for arbitrary web.fetch or operator
|
||||
search; no wildcard entry was added. These are documented gaps, not
|
||||
claims of proxy coverage.
|
||||
- Separate Discord connector gateway uses native WebSocket; retained
|
||||
gateway.discord.gg:443 with a NOT PROXIED note, as Sage directs. Notifier
|
||||
is REST-only; no gateway test or live connector run added.
|
||||
|
||||
Choices: dependency-free net proxy; exact list lookup; 8192-byte/5s total
|
||||
header bounds, 10s upstream connect/120s tunnel idle bounds. JSON allowed
|
||||
means the contract permitted the destination, not that upstream succeeded.
|
||||
Images use exact I1 base, core has NODE_USE_ENV_PROXY=1, session globally
|
||||
installs Claude 2.1.296 and package.json pi pin. Source context includes only
|
||||
tracked runtime paths plus explicit new I2 runtime paths, never agent work
|
||||
or host node_modules/.git. Tags derive from RELEASE. Core receives no git.
|
||||
The zai host candidate api.z.ai is confirmed by the pinned dependency's
|
||||
providers/zai.js:9 in canonical node_modules; real-token measurement remains
|
||||
Mos's gate. OpenAI candidate is from S6 and is only measured when configured.
|
||||
No live model-table config was read.
|
||||
|
||||
New tests cover config exit/immutability; helper rootful, null/nonzero,
|
||||
substring, wrong type/JSON, exact rootless and hostile DOCKER_HOST; proxy
|
||||
fragmentation/pipelined data, deny/port/malformed/slow/oversize and JSON logs.
|
||||
test-install additionally builds, inspects pins and exercises an internal
|
||||
network plus actual Vikunja/public GET and notifier REST/dummy GET with
|
||||
proxy log evidence. The generic S5 fetch test is not repeated.
|
||||
|
||||
Old-suite change is prepared as test-config.patch (adds new config cases
|
||||
before the existing summary). It has NOT been applied: Sage's old-test
|
||||
change rule requires approval first. No old tests changed. No tests run.
|
||||
|
||||
## sage-3910 — first CLEAR
|
||||
|
||||
Authorized four serialized runs exactly as requested, plus applying the
|
||||
addition-only test-config.patch. No broader suites; Sage supplies the
|
||||
landing gate. Return slot on run 4 completion or an actual stop.
|
||||
|
||||
Additional paths retained under Sage's explicit ruling:
|
||||
- scripts/install-tests/config.test.mjs: table of install schema/exit/byte
|
||||
preservation cases, reused by test-config.sh and test-install.sh.
|
||||
- scripts/install-tests/helper.test.mjs: fake Docker executable to assert
|
||||
exact argv and rootless refusal before the requested call, without a daemon.
|
||||
- scripts/install-tests/network-probe.mjs: actual internal-network tunnel,
|
||||
TLS, unlisted host/port and external DNS refusal in a core image.
|
||||
- scripts/install-tests/services-probe.mjs: actual Vikunja and notifier REST
|
||||
client functions, public GET plus invalid dummy token, with proxy log proof.
|
||||
All are new files; no old assertion changes.
|
||||
|
||||
## First CLEAR result and sage-3916 correction
|
||||
|
||||
Run 1: exit 0, config/helper 31/31, zero fail/skip/cancel,
|
||||
01-install-unit.log. Run 2: exit 0, proxy 11/11, zero fail/skip/cancel,
|
||||
02-egress.log. Run 3: exit 1, config selftest 55 pass / 1 fail; new install
|
||||
cases 20/20, 03-config.log. Each log records UTC/load/CLEAR/fresh scratch TMPDIR.
|
||||
Run 4 NOT RUN: no Docker command, probe or build. Slot returned to Sage in
|
||||
bentina-0004 before any rerun.
|
||||
|
||||
Old red: config without console loads with unchanged output
|
||||
(test-config.sh:266; log:53). Cause: this implementation unconditionally
|
||||
added install:{mode:local} to resolved JSON. Sage-3916 approves the source-only
|
||||
fix: omit output key when input omits it (optional-key convention), default
|
||||
env export to local. Applied this fix to mosaic-config.mjs and adjusted only
|
||||
the new absent-key case. No old assertion changed. No verification after fix:
|
||||
Poe has the current slot, Bentina runs next only on a new CLEAR. Run order
|
||||
will be 1, 3, 4; no reason to rerun unchanged proxy unit tests separately.
|
||||
|
||||
The approved test-config patch is addition-only: git diff --numstat reports
|
||||
4 added, 0 removed lines for scripts/test-config.sh. No existing line or
|
||||
assertion changed. git diff --stat before first run:
|
||||
|
||||
```
|
||||
BUILD-LOG.md | 2 ++
|
||||
README.md | 9 +++++++++
|
||||
docs/SESSIONS.md | 2 ++
|
||||
docs/TOOLS.md | 38 ++++++++++++++++++++++++++++++++++++++
|
||||
scripts/mosaic-config.mjs | 20 +++++++++++++++++++-
|
||||
scripts/test-config.sh | 4 ++++
|
||||
6 files changed, 74 insertions(+), 1 deletion(-)
|
||||
```
|
||||
|
||||
New untracked paths are not included by git diff --stat; see explicit paths
|
||||
above. Claim bentina-0003 initially refused queue-lock-held; same op retried.
|
||||
Sage reports re-pin rev 3808 (sage-3913).
|
||||
|
||||
## sage-3919 — corrected acceptance green, slot returned
|
||||
|
||||
Run 1 exit 0, helper/config 31/31 (04-install-unit-fixed.log); run 3 exit 0,
|
||||
config selftest 56/56 plus new install 20/20 (05-config-fixed.log); run 4
|
||||
exit 0 (06-install.log), helper/config 31/31 and proxy 11/11, images built
|
||||
at RELEASE 0.0.12, rootless endpoint explicitly attested, image version
|
||||
checks passed, internal-network TLS to listed host reached, unlisted host
|
||||
and port refused, external DNS refused. Actual Vikunja public GET returned
|
||||
200 and notifier REST dummy-token GET returned 401; services proxy logs
|
||||
show both host decisions. No real token or broker started. Test-owned
|
||||
networks/containers cleaned by suite. Slot returned bentina-0005. No broader
|
||||
suites: Sage's landing gate supplies them. Claim bentina-0003 acknowledged
|
||||
rev 3812 briefed -> in-progress. No queue files changed in this worktree.
|
||||
|
||||
Post-pass source review found one small correctness defect before handoff:
|
||||
upstream errors after a successful CONNECT would append a plaintext 502 to
|
||||
an established TLS tunnel. Corrected to close an established tunnel and
|
||||
reserve 502 for establishment errors. Added a local reset-after-CONNECT
|
||||
regression alongside the existing establishment-error test. This creates
|
||||
a new verification need: request a new CLEAR for egress units and install
|
||||
rebuild/probe before committing. Existing green logs above predate this fix;
|
||||
do not claim them for the final proxy bytes.
|
||||
|
||||
## sage-3923 — final proxy and install evidence
|
||||
|
||||
07-egress-final.log: exit 0, 12/12, zero fail/skip/cancel, including upstream
|
||||
reset after a CONNECT200 closes the tunnel without a second HTTP response.
|
||||
08-install-final.log: exit 0, 31/31 config/helper and 12/12 proxy,
|
||||
zero fail/skip/cancel, three images rebuilt, version checks passed,
|
||||
internal-network listed TLS200/unlisted host403/unlisted port403/external
|
||||
DNS refused, Vikunja public GET200 and notifier REST dummy-token GET401
|
||||
through services proxy; JSON log decisions verified. Explicit endpoint
|
||||
unix:///run/user/1000/docker.sock passed rootless check. Suite removed only
|
||||
its named i2 containers/networks. Slot returned to Sage in bentina-0007.
|
||||
|
||||
No runtime source change after these final reruns. Mos-only measurement
|
||||
runner was statically hardened to report a fixed message on malformed
|
||||
credential JSON, avoiding JSON.parse's error snippet echoing private input.
|
||||
The runner and provider script have not been executed here: Mos owns the
|
||||
real-token/provider-model-table check and its output must land on #1652.
|
||||
No claim of completed provider-host measurement or final host-list approval.
|
||||
|
||||
Acceptance accounting:
|
||||
- Install validator cases and unchanged config bytes: new 20 cases green;
|
||||
entire existing config suite 56/56 (05-config-fixed.log); absent output
|
||||
shape preserved; env/helper default local proven by helper's absent test.
|
||||
- Rootless guard: exact argv/array membership/status/type/refusal fake
|
||||
cases plus real rootless check in 08-install-final.log. No ambient Docker
|
||||
context used by new code. Other scripts' migration remains I6.
|
||||
- Images: exact base digest in Dockerfiles, release 0.0.12 tags, core node
|
||||
24.21.0/no-git/RELEASE assertion; session Claude2.1.296/pi0.85.1 assertions;
|
||||
all built through the helper on the explicit rootless endpoint.
|
||||
- Proxy: allow/deny/port/malformed/slow/fragmented/header-bound/upstream-error
|
||||
and structured logs verified in final unit suite; actual TLS tunnel and
|
||||
internal-network denials plus services client fetch paths verified by
|
||||
install suite. The generic S5 fetch probe was not repeated.
|
||||
- Non-fetch broker/gateway/SSH/Git/web paths remain documented gaps under
|
||||
sage-3907, not modified or silently claimed to be covered. All fixed
|
||||
service hosts retain entries and code-path notes. No dependency added.
|
||||
- Full suites: not run here per sage-3910; Sage's landing gate supplies
|
||||
broader coverage. Reviewer and Mos gates still pending.
|
||||
|
||||
Static source diff whitespace check passed (excluding captured .log files
|
||||
and unified .patch context). Raw build logs retain Docker/npm output
|
||||
including whitespace; no evidence was normalized or rewritten. Old-suite
|
||||
change remains +4/-0 and every prior assertion byte-identical. No queue
|
||||
file changed here. No secret read, token test, live state/unit operation,
|
||||
daemon/volume/restart action, protected-branch push, or integration.
|
||||
|
||||
Candidate handoff: base ec86f2c84; commit only this I2 work and receipts on
|
||||
bentina/row157, push through configured repository helper, then send Sage
|
||||
and Boyd the tip/base/manifest for first review. Darkwing follows Boyd.
|
||||
The manifest lists each changed path except its own self-reference.
|
||||
|
||||
## Round 2 — Boyd B1/B2 (boyd-0023; Sage sage-3933)
|
||||
|
||||
First candidate a14fdc443, manifest b0ed8395, CHANGES on #1652 comment31494.
|
||||
Read Boyd's exact scratch harnesses and logs under /mnt/storage/scratch/tmp/IyNqMs.
|
||||
B1 reproduction: normal peer control releases its socket, allowHalfOpen peer
|
||||
receives408 but getConnections still reports1 after100ms (assertion1 != 0).
|
||||
Root cause: refusal end sends FIN but clears the only deadline and leaves the
|
||||
read side open. B2 reproduction: same-PID exec inherits exported checked_pid
|
||||
and endpoint; fake rootful Docker sees ps on inherited.sock, no info; rc0 vs
|
||||
expected2. Root cause: source initializes neither cache validity nor endpoint.
|
||||
These findings agree with source inspection and require no design departure.
|
||||
No local tests were run while Goldie holds the slot.
|
||||
|
||||
Added tests before fixes, adapted from the reviewer with explicit cleanup:
|
||||
- packages/egress/tests/refusal.test.mjs: real loopback sockets, normal and
|
||||
half-open controls for every400/403/408/431 refusal; asserts server socket
|
||||
count reaches0, one denial log, expected response. Removing destruction
|
||||
after flush should fail half-open cases while normal controls still pass.
|
||||
- scripts/install-tests/review-cache.test.mjs: same-PID exec with inherited
|
||||
exported cache, fake rootful/rootless Docker, actual loader/helper; asserts
|
||||
first call is info at configured.sock, refusal or exact once-per-process
|
||||
cache behavior, and no cache keys in Docker's child environment. Removing
|
||||
source-time reset should fail; no real engine, config or credentials used.
|
||||
No existing test file or assertion edited.
|
||||
|
||||
Minimal fixes: proxy uses endAndClose for all refusal responses, including
|
||||
upstream establishment502: destroy after the small response flushes, plus a
|
||||
fixed1s drain deadline cleared on close. Established-tunnel reset behavior
|
||||
stays unchanged. Helper unsets checked_pid/endpoint/mode on every source,
|
||||
clearing inherited export attributes; ordinary function calls still reuse
|
||||
only an attestation obtained in the current process. No dependency, contract,
|
||||
host-list or authority change. Request CLEAR for new regression red/green,
|
||||
full targeted units and test-install rebuild before commit. Old-test red
|
||||
still stops and returns slot. Sage's broader landing gate remains separate.
|
||||
|
||||
Sage-3935 approves the five-run plan including archived red-first proof;
|
||||
Goldie holds the slot and Bentina is next. Still no node/docker test run.
|
||||
The new refusal test also includes normal/half-open502 establishment failures
|
||||
on a closed loopback port, exercising the shared termination helper on that
|
||||
path (allowed log stays true for an approved destination whose upstream fails).
|
||||
This stays within the named new regression file and approved commands.
|
||||
|
||||
## Round 2 verified — sage-3936 slot returned
|
||||
|
||||
Claimant move bentina-0012 acknowledged rev3825 in-review -> in-progress,
|
||||
before the correction commit. Five serialized runs, each fresh short scratch
|
||||
TMPDIR/UTC/load/CLEAR and timeout -k10:
|
||||
|
||||
| Run | Log (this directory) | Exit | Evidence |
|
||||
|---|---|---|---|
|
||||
| 1 old archived runtime + new tests | 09-r2-archived-red.log | 1 expected | 12 tests:5 normal-peer controls pass;7 intended failures (five half-open400/403/408/431/502 cases, two inherited-cache cases);0skip/cancel |
|
||||
| 2 fixed regressions | 10-r2-regressions-green.log | 0 | 12/12,0fail/skip/cancel |
|
||||
| 3 install unit suite | 11-r2-install-units.log | 0 | 33/33,0fail/skip/cancel |
|
||||
| 4 egress suite | 12-r2-egress-suite.log | 0 | 22/22,0fail/skip/cancel |
|
||||
| 5 install images/network/services | 13-r2-install.log | 0 | 33+22 unit tests green;three images rebuilt/version pins checked;explicit rootless guard;listed TLS200,unlisted host/port403,external DNS refused;Vikunja publicGET200/notifier REST dummyGET401;JSON decisions verified |
|
||||
|
||||
Run1 unpacked git archive of a14fdc443 into its own scratch directory and
|
||||
overlaid only the two new tests; it did not revert or modify the builder
|
||||
worktree. Failures were exact behavioral assertions, not infrastructure or
|
||||
syntax errors. All test sockets cleaned in t.after; the install suite
|
||||
removed only its i2-prefixed containers/networks. Slot returned to Sage in
|
||||
bentina-0014. No existing test file/assertion changed for round2. No code
|
||||
change after verification. Earlier config56/56 evidence remains in05 log;
|
||||
loader/config unchanged for this review. No broader suites authorized here.
|
||||
|
||||
The round2 manifest MANIFEST-r2.sha256 covers the full candidate delta from
|
||||
original base ec86f2c84, including the unchanged historical round1 manifest;
|
||||
it excludes only its own self-reference (its hash is supplied in the review
|
||||
message). Historical round1 manifest still describes a14fdc443 and is not
|
||||
rewritten to describe later source. New manifest, candidate tip/base and
|
||||
receipts go to Sage and Boyd, then Darkwing follows Boyd's approve. The
|
||||
owner's automated review-request credential boundary still belongs to Sage;
|
||||
no token read or identity substitution is authorized. Mos provider evidence
|
||||
and Sage's broader landing gate remain required. No protected-branch push,
|
||||
real-token test, live config/state/unit action or daemon/volume operation.
|
||||
@@ -0,0 +1,44 @@
|
||||
58e473e1783a9f64f6b1a696f747925b9a444d85dbe72e48e7a0dcbd62a2d4e5 BUILD-LOG.md
|
||||
67bd811b3030ba0355af2316d02e8b2931b4b2c5a74c5be904b5311de6ef81dd README.md
|
||||
6161cc0505bf0be33ba0e7c7f0f07382cca0ec2b5ace65ac54e16c4d1e3424fc agents/bentina/work/queue-157/01-install-unit.log
|
||||
f13213941dab22955841108d85e62f67ede2ddbc95c25a7b351f30070b035a85 agents/bentina/work/queue-157/02-egress.log
|
||||
b46c3fb5f252100f3e2de5b97bd0efc0c1fbbef26230252945f7bb309d359f5e agents/bentina/work/queue-157/03-config.log
|
||||
fc76e5f9b19a31b494ebf4a128ef5f171f1f0712dc3928bebb6556815577015c agents/bentina/work/queue-157/04-install-unit-fixed.log
|
||||
c9a46d969c5d28814addccd7cafe8e734d15c02a407ee80434d4e3e70a3fa4b7 agents/bentina/work/queue-157/05-config-fixed.log
|
||||
1d5505a6aba0078e7cf9936fb683e06ac900af12e9e8faf224099a5e2d825fc7 agents/bentina/work/queue-157/06-install.log
|
||||
c684dfdd8a460a915e15291fc0f92c9ba30f38d3d3dfa5fa190e7835fbcd448f agents/bentina/work/queue-157/07-egress-final.log
|
||||
5c3efacdbcda5628882045644c32169b7020a6e49d6b89b273aba20ae042898b agents/bentina/work/queue-157/08-install-final.log
|
||||
d2f7bd37b5ac8cc781fae1308a5b047e0ed0d1b63f8d5e22d56e0efa328c4883 agents/bentina/work/queue-157/09-r2-archived-red.log
|
||||
4230f9fcc91d1670df0d975e9c5794edb7aa9b21b24c4f415d1594373e769da4 agents/bentina/work/queue-157/10-r2-regressions-green.log
|
||||
3e5cd8d154b01ede9a9533f4ff40ac29b4e8193131fd63ba04707df51217d0bb agents/bentina/work/queue-157/11-r2-install-units.log
|
||||
4d23ae4a6d3247a498bd446960c075235f632474fba9e8db374a32aaf4760219 agents/bentina/work/queue-157/12-r2-egress-suite.log
|
||||
a4652f0eb6dfcc177c24c5d85d7ec08096e9f49304085f817828d7ef451acd64 agents/bentina/work/queue-157/13-r2-install.log
|
||||
5b595798fa8184b15412276d070a0891fdf5cb629eabb8b7bb5f6b3d2b69b3a5 agents/bentina/work/queue-157/BUILD.md
|
||||
b0ed8395108ad398f5c9c08fbac8a1b5ca02f579a5d7b709d19d3aaf0860f9ae agents/bentina/work/queue-157/MANIFEST.sha256
|
||||
21f9783dcfe2cac00a49d0d7930a57134bc59ec19dd7bf2e96950f79fae5b1b1 agents/bentina/work/queue-157/PROVIDER-EXPECTED.md
|
||||
6518c574291db5816057fbbc438435d0571e088c8f26d1a47ec03ff3047a5efa agents/bentina/work/queue-157/provider-hosts.sh
|
||||
6dbef8d20ede98a9311ba47137b587c07cbc03e921b2a8429652fe362aeb4b85 agents/bentina/work/queue-157/provider-runner.mjs
|
||||
e7cb4d0c67eadec557a25385b4ea9803970818354a9e8b0780ac4de07cf34911 agents/bentina/work/queue-157/test-config.patch
|
||||
cb2b251342f0020764b7b757b22567d52380053fc15f0e1c7e665a5ec1838f24 contracts/egress.json
|
||||
58107cfa274b7551ae163ea77c56d08df530e7f08e06539ddd2999c22252d749 docs/SESSIONS.md
|
||||
edcaa526bf0a518716d4e87895d49920b8912295688809a25102ce6b9d6ebdc3 docs/TOOLS.md
|
||||
6bd1dc7c244cfb4134d813e0b149ef1182a810eb99f01a95d548f0885b216437 images/README.md
|
||||
9c6c3d5736f1ed7eb6dcdb893761b937b7108e29730daf28fe8dd0064df73740 images/core/Dockerfile
|
||||
0179d84a7b9321832efb1d90c0290c8f2f6de03db3b2b6d8379672aca598c2a0 images/egress/Dockerfile
|
||||
e246e3e3da1065f3c8cf24cc1f7ae15290f3e4c6508f0c6f17a4889a77f2d591 images/session/Dockerfile
|
||||
3930764cf5848571507eec3e5b3eda2ebb8aa2d9642f83615b462bf5035e0e75 packages/egress/README.md
|
||||
2c45bfed1f19f8a42e05552f8a10584feed8d25ccc506252d55a9a3b6c90a21c packages/egress/package.json
|
||||
257058faee55a429d98955b6253d6b8a0bb058c50446764566586b06a8f76b61 packages/egress/src/cli.mjs
|
||||
ce3adb0515ca7e9041f36d7a82df355a3fc97e2a96fc6811ea3b9b47e464787b packages/egress/src/proxy.mjs
|
||||
5c4e778ec9ec5b93ab681d615a2240cd342d09adfe4df1634f3d6abbf16a405b packages/egress/tests/proxy.test.mjs
|
||||
258e954ad7e441a7dd7d25ca9208691ea167e9cb7f34d7d689ed11005adeb4b4 packages/egress/tests/refusal.test.mjs
|
||||
86e0152120b04fcfe2a4081b7686f179a139c5370027828c79572033f3cf81c3 scripts/images.sh
|
||||
3647b06df02b4d9c0a74b62c774ecdff9272e68a84c06cd85861d7bf18655d5a scripts/install-tests/config.test.mjs
|
||||
21e05bc3e0639427f5a9d4cf166d2991964134845272df76c712ad00ea8033b6 scripts/install-tests/helper.test.mjs
|
||||
aa5328566d3e5b46fee587657dac146712735dca0aca90d3d0ad84bc20e313e1 scripts/install-tests/network-probe.mjs
|
||||
45274f6745cf931f3002e6c36dcfc46a96c8f09e01e6243c18659749673752fd scripts/install-tests/review-cache.test.mjs
|
||||
72ae66696ad2faaf258c832fdfdf680efc8fca7099359e58da1ee01a88541d8a scripts/install-tests/services-probe.mjs
|
||||
79a8ecfc5ab279111031d5a44906450b732b517fe98511992cafd873ab7a84d3 scripts/lib/docker.sh
|
||||
7398bb289d2f28ed15a2984bdeee7e30a704890a33b5e2a5c9f7554115aca8f9 scripts/mosaic-config.mjs
|
||||
dcf1799238141689c9d80adc6680694a609e5fb9deef7b78d6b3f4765163e3fe scripts/test-config.sh
|
||||
08be25f67d8fc6676218b1014d34a2ce36a939231f58b657972d856ee26169b2 scripts/test-install.sh
|
||||
@@ -0,0 +1,36 @@
|
||||
6995aa3bcdf50e2441142cc9b6fc9ec84853e353e7a408bbc877ee7e188e73c4 BUILD-LOG.md
|
||||
67bd811b3030ba0355af2316d02e8b2931b4b2c5a74c5be904b5311de6ef81dd README.md
|
||||
6161cc0505bf0be33ba0e7c7f0f07382cca0ec2b5ace65ac54e16c4d1e3424fc agents/bentina/work/queue-157/01-install-unit.log
|
||||
f13213941dab22955841108d85e62f67ede2ddbc95c25a7b351f30070b035a85 agents/bentina/work/queue-157/02-egress.log
|
||||
b46c3fb5f252100f3e2de5b97bd0efc0c1fbbef26230252945f7bb309d359f5e agents/bentina/work/queue-157/03-config.log
|
||||
fc76e5f9b19a31b494ebf4a128ef5f171f1f0712dc3928bebb6556815577015c agents/bentina/work/queue-157/04-install-unit-fixed.log
|
||||
c9a46d969c5d28814addccd7cafe8e734d15c02a407ee80434d4e3e70a3fa4b7 agents/bentina/work/queue-157/05-config-fixed.log
|
||||
1d5505a6aba0078e7cf9936fb683e06ac900af12e9e8faf224099a5e2d825fc7 agents/bentina/work/queue-157/06-install.log
|
||||
c684dfdd8a460a915e15291fc0f92c9ba30f38d3d3dfa5fa190e7835fbcd448f agents/bentina/work/queue-157/07-egress-final.log
|
||||
5c3efacdbcda5628882045644c32169b7020a6e49d6b89b273aba20ae042898b agents/bentina/work/queue-157/08-install-final.log
|
||||
f4755f24d626dc69b8159c6934e4213a907659dbb4d46d29d82efc0405b50152 agents/bentina/work/queue-157/BUILD.md
|
||||
21f9783dcfe2cac00a49d0d7930a57134bc59ec19dd7bf2e96950f79fae5b1b1 agents/bentina/work/queue-157/PROVIDER-EXPECTED.md
|
||||
6518c574291db5816057fbbc438435d0571e088c8f26d1a47ec03ff3047a5efa agents/bentina/work/queue-157/provider-hosts.sh
|
||||
6dbef8d20ede98a9311ba47137b587c07cbc03e921b2a8429652fe362aeb4b85 agents/bentina/work/queue-157/provider-runner.mjs
|
||||
e7cb4d0c67eadec557a25385b4ea9803970818354a9e8b0780ac4de07cf34911 agents/bentina/work/queue-157/test-config.patch
|
||||
cb2b251342f0020764b7b757b22567d52380053fc15f0e1c7e665a5ec1838f24 contracts/egress.json
|
||||
d6239336e48b6a78b80680c88e83ba4b67f8cbed99bf2ee3a697b1b0611e54e9 docs/SESSIONS.md
|
||||
edcaa526bf0a518716d4e87895d49920b8912295688809a25102ce6b9d6ebdc3 docs/TOOLS.md
|
||||
6bd1dc7c244cfb4134d813e0b149ef1182a810eb99f01a95d548f0885b216437 images/README.md
|
||||
9c6c3d5736f1ed7eb6dcdb893761b937b7108e29730daf28fe8dd0064df73740 images/core/Dockerfile
|
||||
0179d84a7b9321832efb1d90c0290c8f2f6de03db3b2b6d8379672aca598c2a0 images/egress/Dockerfile
|
||||
e246e3e3da1065f3c8cf24cc1f7ae15290f3e4c6508f0c6f17a4889a77f2d591 images/session/Dockerfile
|
||||
3930764cf5848571507eec3e5b3eda2ebb8aa2d9642f83615b462bf5035e0e75 packages/egress/README.md
|
||||
2c45bfed1f19f8a42e05552f8a10584feed8d25ccc506252d55a9a3b6c90a21c packages/egress/package.json
|
||||
257058faee55a429d98955b6253d6b8a0bb058c50446764566586b06a8f76b61 packages/egress/src/cli.mjs
|
||||
2ec533e8a2c9ace2d2dc17ac9efe75a9930ae50e93f6700e3de8aa0475b42295 packages/egress/src/proxy.mjs
|
||||
5c4e778ec9ec5b93ab681d615a2240cd342d09adfe4df1634f3d6abbf16a405b packages/egress/tests/proxy.test.mjs
|
||||
86e0152120b04fcfe2a4081b7686f179a139c5370027828c79572033f3cf81c3 scripts/images.sh
|
||||
3647b06df02b4d9c0a74b62c774ecdff9272e68a84c06cd85861d7bf18655d5a scripts/install-tests/config.test.mjs
|
||||
21e05bc3e0639427f5a9d4cf166d2991964134845272df76c712ad00ea8033b6 scripts/install-tests/helper.test.mjs
|
||||
aa5328566d3e5b46fee587657dac146712735dca0aca90d3d0ad84bc20e313e1 scripts/install-tests/network-probe.mjs
|
||||
72ae66696ad2faaf258c832fdfdf680efc8fca7099359e58da1ee01a88541d8a scripts/install-tests/services-probe.mjs
|
||||
e524a285dcebe2a6350e7690650c2796e54661225ce00a67b4559e519f9e3fea scripts/lib/docker.sh
|
||||
7398bb289d2f28ed15a2984bdeee7e30a704890a33b5e2a5c9f7554115aca8f9 scripts/mosaic-config.mjs
|
||||
dcf1799238141689c9d80adc6680694a609e5fb9deef7b78d6b3f4765163e3fe scripts/test-config.sh
|
||||
08be25f67d8fc6676218b1014d34a2ce36a939231f58b657972d856ee26169b2 scripts/test-install.sh
|
||||
@@ -0,0 +1,37 @@
|
||||
# Mos provider-host gate (not run by Bentina)
|
||||
|
||||
Run only after candidate images build and Mos authorizes the real-token calls.
|
||||
Use a scratch config with install.mode containerized and the rootless endpoint;
|
||||
do not change the live config. Provide one JSON object on stdin with
|
||||
`claudeOAuth` and `zai`, plus optional `anthropic` / `openai` keys if those
|
||||
providers are in the actual model table. The script opens no host token file.
|
||||
Never paste the input or raw CLI output on the issue. It prints success flags
|
||||
and the proxy's host decisions only. Wrap in `timeout -k 10 600`.
|
||||
|
||||
From the checkout:
|
||||
|
||||
```
|
||||
Mos-private-json-producer | MOSAIC_CONFIG=/path/to/scratch-config.json agents/bentina/work/queue-157/provider-hosts.sh
|
||||
```
|
||||
|
||||
Expected required output (with just Claude Code and pi/zai):
|
||||
|
||||
```
|
||||
{"case":"claude","ok":true}
|
||||
{"case":"pi-zai","ok":true}
|
||||
{"hosts":["api.anthropic.com:443","api.z.ai:443"],"denied":[]}
|
||||
```
|
||||
|
||||
Optional pi/anthropic adds `{"case":"pi-anthropic","ok":true}` and no
|
||||
host. Optional pi/openai adds `{"case":"pi-openai","ok":true}` and
|
||||
`api.openai.com:443` to sorted hosts. All cases must return ok true, exit 0,
|
||||
and denied empty. Model names are explicit candidates; Mos must reconcile
|
||||
them to the actual model table without broadening a host list on failure.
|
||||
A new host, refusal, failure, or different model requirement returns to Sage;
|
||||
there is no wildcard or automatic discovery/update. The baked agents list
|
||||
remains provisional until Mos posts matching output on #1652.
|
||||
|
||||
Each resource name begins i2-provider; cleanup removes only this run's two
|
||||
networks and two containers. No volumes, daemon or restart operations. The
|
||||
measurement uses container root as the design requires; I5 still owns the
|
||||
full root filesystem re-measurement and final session limits.
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
#!/usr/bin/env bash
|
||||
# Mos runs this explicitly with a caller-supplied scratch MOSAIC_CONFIG and
|
||||
# credential JSON on stdin. This script reads no host credential file.
|
||||
set -euo pipefail
|
||||
REPO="$(cd "$(dirname "${BASH_SOURCE[0]}")/../../../.." && pwd)"
|
||||
cd "$REPO"
|
||||
source scripts/lib/docker.sh
|
||||
mosaic_docker version >/dev/null
|
||||
release="$(tr -d '[:space:]' < RELEASE)"
|
||||
prefix="i2-provider-$(date -u +%s)-$$"
|
||||
nets=("$prefix-internal" "$prefix-egress")
|
||||
cleanup(){
|
||||
rc=$?; trap - EXIT
|
||||
mosaic_docker container rm -f "$prefix-session" "$prefix-proxy" >/dev/null 2>&1 || true
|
||||
for net in "${nets[@]}"; do mosaic_docker network rm "$net" >/dev/null 2>&1 || true; done
|
||||
exit "$rc"
|
||||
}
|
||||
trap cleanup EXIT
|
||||
mosaic_docker network create --internal "${nets[0]}" >/dev/null
|
||||
mosaic_docker network create "${nets[1]}" >/dev/null
|
||||
mosaic_docker create --name "$prefix-proxy" --network "${nets[1]}" --read-only --cap-drop ALL --security-opt no-new-privileges --pids-limit 64 --memory 128m --memory-swap 128m --cpus 0.5 "mosaic-egress:$release" agents >/dev/null
|
||||
mosaic_docker network connect --alias proxy "${nets[0]}" "$prefix-proxy"
|
||||
mosaic_docker start "$prefix-proxy" >/dev/null
|
||||
ready=0
|
||||
for attempt in {1..50}; do
|
||||
if mosaic_docker exec "$prefix-proxy" node -e 'const s=require("node:net").connect(3128,"127.0.0.1");s.on("connect",()=>{s.destroy();process.exit(0)});s.on("error",()=>process.exit(1))'; then ready=1; break; fi
|
||||
sleep 0.1
|
||||
done
|
||||
[ "$ready" = 1 ] || { echo proxy-not-ready >&2; exit 1; }
|
||||
rc=0
|
||||
# Token travels only in stdin and the CLI child's env; never an engine env or log.
|
||||
mosaic_docker run --rm --init -i --name "$prefix-session" --network "${nets[0]}" --log-driver none --read-only --tmpfs /root:rw,nosuid --tmpfs /tmp:rw,noexec,nosuid --cap-drop ALL --security-opt no-new-privileges --pids-limit 512 --memory 4g --memory-swap 4g --cpus 2 \
|
||||
--mount "type=bind,src=$REPO/agents/bentina/work/queue-157/provider-runner.mjs,dst=/opt/mosaic/provider-runner.mjs,readonly" \
|
||||
"mosaic-session:$release" node provider-runner.mjs || rc=$?
|
||||
mosaic_docker logs "$prefix-proxy" | node -e 'let s="";process.stdin.on("data",c=>s+=c).on("end",()=>{const rows=s.trim().split("\n").filter(Boolean).map(JSON.parse);const deny=rows.filter(r=>r.host&&!r.allowed);console.log(JSON.stringify({hosts:[...new Set(rows.filter(r=>r.allowed).map(r=>r.host+":"+r.port))].sort(),denied:[...new Set(deny.map(r=>r.host+":"+r.port))].sort()}));if(deny.length)process.exitCode=1})' || rc=$?
|
||||
exit "$rc"
|
||||
@@ -0,0 +1,17 @@
|
||||
// Mos-only real-token measurement. Reads one JSON object on stdin. Never logs CLI output.
|
||||
import { execFile } from 'node:child_process';
|
||||
import { promisify } from 'node:util';
|
||||
const exec = promisify(execFile);
|
||||
let input='';for await(const chunk of process.stdin){input+=chunk;if(input.length>65536)throw new Error('measurement-input-too-large');}
|
||||
let keys;try{keys=JSON.parse(input);}catch{input='';process.stderr.write('measurement-input-invalid\n');process.exit(2);}input='';
|
||||
if(!keys.claudeOAuth||!keys.zai)throw new Error('measurement-needs-claudeOAuth-and-zai');
|
||||
const prompt='Reply with exactly I2_PROVIDER_OK and no other text.';
|
||||
const env={PATH:process.env.PATH,HOME:'/root',HTTPS_PROXY:'http://proxy:3128',HTTP_PROXY:'http://proxy:3128',NODE_USE_ENV_PROXY:'1',CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC:'1'};
|
||||
const pi=['--no-session','--no-tools','--no-approve','--no-extensions','--no-skills','--no-prompt-templates','--no-themes','--no-context-files'];
|
||||
const cases=[['claude','claude',['-p',prompt,'--tools',''],{CLAUDE_CODE_OAUTH_TOKEN:keys.claudeOAuth}],['pi-zai','pi',[...pi,'--provider','zai','--model','glm-5.3-flash','-p',prompt],{ZAI_API_KEY:keys.zai}]];
|
||||
if(keys.anthropic)cases.push(['pi-anthropic','pi',[...pi,'--provider','anthropic','--model','claude-sonnet-5-5','-p',prompt],{ANTHROPIC_API_KEY:keys.anthropic}]);
|
||||
if(keys.openai)cases.push(['pi-openai','pi',[...pi,'--provider','openai','--model','gpt-5.4','-p',prompt],{OPENAI_API_KEY:keys.openai}]);
|
||||
for(const [name,bin,args,secrets] of cases){
|
||||
let ok=false;try{const {stdout}=await exec(bin,args,{env:{...env,...secrets},timeout:120000,killSignal:'SIGKILL',maxBuffer:1024*1024});ok=stdout.includes('I2_PROVIDER_OK');}catch{}
|
||||
console.log(JSON.stringify({case:name,ok}));if(!ok)process.exitCode=1;
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
--- a/scripts/test-config.sh
|
||||
+++ b/scripts/test-config.sh
|
||||
@@ -291,5 +291,9 @@
|
||||
fi
|
||||
|
||||
echo
|
||||
+# I2: each install shape asserts its exit code and config-byte preservation.
|
||||
+node --test scripts/install-tests/config.test.mjs
|
||||
+check "install configuration cases" $?
|
||||
+
|
||||
echo "selftest: $PASS passed, $FAIL failed"
|
||||
[ "$FAIL" -eq 0 ]
|
||||
@@ -1,78 +0,0 @@
|
||||
# Row 208 (193d) second review: poe/row208 4a4bef6c1 (duckworth-0302)
|
||||
|
||||
Request: sage-3934 (sage-3931 request, c31492 on #1706). Candidate: 4a4bef6c1 on ec86f2c84, one
|
||||
commit. Design: e2d161e2e:agents/morgana/work/queue-193/DESIGN.md section 8, sha256 dd7fcb41
|
||||
(matches). Scope under mos-1542: the guards only. The question is whether a viewer can widen
|
||||
authority.
|
||||
Method: static. Git reads, plus the mutant summary Sage sent by path. No node, no tests.
|
||||
|
||||
## Verdict: APPROVE (static)
|
||||
|
||||
The diff has no bus or schema change. Every write is still decided by the broker as it stood at the
|
||||
base. The webui adds routes and hints, and no authority.
|
||||
|
||||
- **chat-http.mjs.**
|
||||
- share and unshare are POST only. They come after the same write fences as every other write:
|
||||
send and named mode, the SSO session or auth header, Origin, and sec-fetch-site.
|
||||
- The body must be exactly `{to}`: a string of 1-200 characters with no CR, LF or NUL. Extra keys
|
||||
(owner, verb) refuse 400, and the test covers that.
|
||||
- shares is GET only and takes no query.
|
||||
- The reply must echo thread, to and op exactly. Anything else is 503 outcome-unknown.
|
||||
- The new STATUS codes map share-not-covered to 403, share-exists to 409 and share-not-found to 404.
|
||||
- `?shared=` accepts only `true`.
|
||||
- **chat.mjs and the adapter.**
|
||||
- The three verbs go over `createChannelCaller` to the webui adapter (index.mjs:12-14). The adapter
|
||||
is an allowlist passthrough to the session's own `call`.
|
||||
- A granted user's chat is rebound per session (serve.mjs:701), so share calls carry the user's
|
||||
principal, never the owner's.
|
||||
- The test fixture runs the real adapter and the real Broker.
|
||||
- **The broker decides each new path, unchanged from the base.**
|
||||
- thread.share, thread.unshare and thread.shares are in USER_VERBS and not in VIEWER_VERBS, so
|
||||
userLevel gives collaborator. A viewer gets access-refused at #grantedThread (broker.mjs:950).
|
||||
- Each of the three goes through `#thread`'s owner check (broker.mjs:909-913). A sharee gets
|
||||
thread-not-owned and can't reshare.
|
||||
- share-not-covered applies to a `user:` target (broker.mjs:6559).
|
||||
- Only thread.messages takes `#threadRead`, so a share gives read access and nothing else.
|
||||
- **The grant-hint predicate.**
|
||||
- access.mjs `chatGrants` re-runs `lookup`, so the subject must still sign in as session.user with a
|
||||
live grant. It then keeps only that user's grants in this business that cover at collaborator,
|
||||
which is the same `covers` call as the broker's `#granted`.
|
||||
- It returns only `{projects, instances}`. No ids, receipts, subjects or other users escape. Any
|
||||
failure gives [].
|
||||
- The client's `scopeWrites` requires the project and the instance to match within one grant
|
||||
(`some(g => project && instance)`). It never pairs a project from one grant with an instance from
|
||||
another, so mixed grants can't combine into a scope that no single grant has.
|
||||
- `includes('*')` on the client is equivalent to covers' `[0] === '*'`, because checkScope
|
||||
(business access.mjs:97-103) refuses `*` unless it is alone.
|
||||
- The hint is never carried over: chatGrants starts at [] and is re-read from /api/config on each
|
||||
user render. It is in /api/config only when `granted`.
|
||||
- **No client-only hiding stands in for a broker refusal.** Each hidden control maps to a refusal:
|
||||
|
||||
| Hidden control | Who | Broker refusal |
|
||||
| --- | --- | --- |
|
||||
| composer and resume | viewer | thread.send/open: access-refused |
|
||||
| composer and resume | sharee | thread.send/open: thread-not-owned |
|
||||
| share form | viewer | access-refused |
|
||||
| share form | sharee | thread-not-owned |
|
||||
| create thread | out of scope | collaborator check at create |
|
||||
| create project | user | project.create isn't in USER_VERBS |
|
||||
| session controls, clear, cancel | user | session.* isn't in USER_VERBS (tester-only) |
|
||||
|
||||
Test :136 POSTs create, send, open and share from the page with the UI bypassed, and checks four
|
||||
403 access-refused responses, unchanged table counts, and that each verb reached the bus. Test :19
|
||||
adds unshare and the shares read over HTTP. Test :154 covers the sharee's thread-not-owned on send,
|
||||
open and share.
|
||||
- **Mutants, as reported (sage-3920 CLEAR, /mnt/storage/scratch/tmp/8UlAhS/poe-208-mutants.json, not
|
||||
rerun).**
|
||||
- There are four served-copy mutants: composer, open, share and create. Each one's anchor must exist,
|
||||
or the fixture throws.
|
||||
- Each mutant fails the UI-absence test with ERR_ASSERTION, and the bypass test passes under each
|
||||
one, so the broker still refuses. That meets design section 8: "With each UI check removed, the
|
||||
bus still refuses."
|
||||
- The full webui suite passed 418/0 and plugins 119/0 (sage-3925), as reported.
|
||||
|
||||
## Notes
|
||||
|
||||
- N1 (outside guard scope). user.js:16 re-renders every 5 s while the tab is visible. Each render
|
||||
re-reads /api/config, projects, threads and the shared list. This doesn't affect authority, but it
|
||||
is steady load per open user tab.
|
||||
@@ -1,9 +0,0 @@
|
||||
# Glomgold
|
||||
|
||||
Builder seat, Codex gpt-6.1-sol, started by Sage under Q246 and mos-1571. Owns row 309, O2 W1: the reviewed local
|
||||
thesaurus data (docs/plans/2026-10-21_q195-writing-editor.md, "W1 reviewed local thesaurus data").
|
||||
|
||||
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 `glomgold/*` branches through the repository credential helper (mos-0981), never `refactor`,
|
||||
`main` or another seat's branch. Claude seats orchestrate and give the Opus 5.5 landing review (mos-1571). Registered by
|
||||
Sage on 2026-10-24 so the queue can name the seat as row owner (store.mjs isSeatDir).
|
||||
@@ -1,134 +0,0 @@
|
||||
# Row 265 / #1770 — project rooms
|
||||
|
||||
Current result: verified under sage-3942; slot returned in goldie-0034. Full bus 957/957, sandbox 10/10, parser 15/15, rooms 18/18, twelve mutants killed, restored files green. Review/push packet below includes mos-1567 closure scope.
|
||||
|
||||
Goldie, 2026-10-24. Branch goldie/row265, base ec86f2c847f6154a0677c6ed23c87dabc2c665d0. Brief docs/plans/2026-10-20_case2-rows.md § C2-09b rooms at blob3a5ed91a4fb3462df67e6939ae6f18290ac9b453; design agents/gosalyn/work/case2/DESIGN.md §6. Sage-3915 transfers ownership from Rocko to Goldie and review from Dewey to Boyd. No old test edit authorized. All tests/mutants wait for Sage CLEAR; queued behind Poe, Bentina and Sage's326 gate.
|
||||
|
||||
## Design and clarified readings
|
||||
|
||||
A room is a bus project. Members are all loaded business instances whose definitions are in THREAD_DEFINITIONS, sorted by key. Canonical room threads have those keys as names and belong to the requesting human. open checks all name/instance/owner collisions before creating anything; it delegates missing inserts to existing thread.create dispatch, including default session metadata. send/read require the complete canonical set. No schema or migration change.
|
||||
|
||||
Sage-3921 settles two brief readings: the single captured timestamp applies to the room.send MESSAGE rows; existing route/delivery/event helpers keep their own timestamps in the same dispatch transaction. They are unchanged. A final EOF-terminated @name is a tag, so bare @continuity is invalid-request rather than a broadcast. Leading whitespace is accepted. Pure parseAddress returns {tags,body}, where body is the unaddressed remainder; room.send stores the ORIGINAL input unchanged. Export it from the bus index and expose a separate reusable test table for C2-10c parity.
|
||||
|
||||
send resolves tags against current #named results and member instance keys, deduplicates recipients, and refuses multiple member matches. It checks each target's current default-session fence and messaging rule, then inserts one normal INFO message, route and human.input per target under the existing request transaction. All message rows share one at. No tag broadcasts; tags after the first non-tag token remain plain text.
|
||||
|
||||
read includes all sessions of the caller's canonical threads, globally ordered by messages.seq. Each entry retains first-message fields plus thread/session/instance and adds ids (every grouped message id) and to (each instance once). Only consecutive human rows with identical at/body/class group, and a repeated instance starts a new entry, so same-millisecond identical sends remain separate. Paging limit counts merged entries (THREAD_PAGE defaults/max); clients continue after the last ids element. Cursor must belong to a room thread. Bounded raw scan limit*memberCount+1 completes requested groups without reading unbounded history. Sage-3921 accepts these routine choices as proposed in goldie-0030.
|
||||
|
||||
## Scope / steps
|
||||
|
||||
1. Read current thread.create/send/messages, transaction wrapper, naming and messaging helpers; audit source readers/pins. Claim265 via queue after next. Done/read, claim recorded at rev 3814 with op goldie-0265-start-1 (same-op replay confirmed).
|
||||
2. Add parser + index export, only three room cases in broker, README verb rows and new bus tests/fixtures. Do not modify existing thread/messaging/ACL/helper behavior.
|
||||
3. New tests cover all brief cases, atomicity across message/route/input rows, ownership/projects, permissions, paging/grouping and session fences. No suites or test runs before CLEAR.
|
||||
4. Record exact refusal→test→mutant matrix here before requesting the slot; one targeted killed mutant per named refusal, restoration byte-checks. New files whole then bus suite under CLEAR, serial timeout-k10, fresh31-byte mktemp TMPDIR plus UTC/load/busy header.
|
||||
5. Before in-review, grep packages/*/tests for broker.mjs/TESTER_VERBS and changed-file pins. Push own branch and hand tip/base/manifest directly to Sage/Boyd. Sage owns request posting/landing.
|
||||
|
||||
No Console/Discord/CLI room surface or cross-agent reply visibility added. No tester verb, role, schema or secret change. No host action or credential access.
|
||||
|
||||
## New tests and refusal / mutant matrix
|
||||
|
||||
Only new test files and a new reusable vector fixture are added. No pre-existing test changes. Parser table: address.test.mjs consumes address-cases.mjs, including final EOF tags, leading whitespace, tags after the first word, repetition and blank/tag-only remainder. Broker cases: rooms.test.mjs covers sorted/reused canonical threads, other-instance and other-owner collisions, all three verbs' human/tester gates, missing projects/member set, partial/foreign/wrong-instance rooms, key and current-name addressing, ambiguity/same-member name+key, unknown/non-member/old-name tags, tags-only bodies, one/many/broadcast targets, original bytes, shared message timestamp, routes/deliveries/human.input, denied last recipient, clearing last session, all-session merged reads, agent reply metadata, merged paging/default/max, foreign/noncanonical/absent cursors, and same-at repeated sends. Synthetic historical rows append valid rows; they do not rewrite evidence or clocks. The same-at batches repeat the first recipient at each boundary, proving identical sends remain distinct.
|
||||
|
||||
Each named refusal has one mutation of its enforcement, run against the entire new rooms.test.mjs file. The driver mutants.py stores the exact original→mutant diff in logs/Mxx-*.diff, logs UTC/load/busy/TMPDIR, accepts only Node exit 1 with the named target test failing, and restores/verifies full broker bytes and SHA256 in finally. No mutation is retained. Generic pre-existing request/schema/argument policies are exercised through existing code; the matrix names the refusals added or deliberately inherited by these room cases.
|
||||
|
||||
| Mutant | Refusal | Guard relaxed | Required failing new test |
|
||||
| --- | --- | --- | --- |
|
||||
| M01-human | human-required | remove common room human check | room verbs require the human |
|
||||
| M02-tester | tester-refused | add the three room verbs to TESTER_VERBS | room verbs require the human (explicit absence pin) |
|
||||
| M03-project | project-not-found | remove room project lookup check | room verbs refuse missing projects |
|
||||
| M04-members | thread-instance-missing | allow empty member set | room verbs refuse missing projects |
|
||||
| M05-collision | room-thread-name-taken | remove canonical owner/instance collision check | room.open preflights instance collisions |
|
||||
| M06-open | room-not-open | remove missing canonical thread check | send/read refuse a missing canonical member |
|
||||
| M07-body | invalid-request | allow empty parsed remainder | unknown or non-member addressees and tags-only bodies |
|
||||
| M08-unknown | unknown-addressee | allow zero member matches | unknown or non-member addressees and tags-only bodies |
|
||||
| M09-ambiguous | addressee-ambiguous | allow multiple member matches | a legacy name colliding with another member key |
|
||||
| M10-messaging | message-sender-refused | omit room target messaging check | messaging denial on the last target |
|
||||
| M11-cursor | message-not-found | unknown room cursor falls back to seq zero | room.read groups one send, pages |
|
||||
| M12-fence | session-clearing | omit room target session fence | a clearing last member fences the whole send |
|
||||
|
||||
For M02, the existing human check remains a second barrier: the mutant deliberately relaxes only the tester allowlist; the new explicit absence assertion kills it without loosening or running the old pin. Existing helpers keep their full session-state behavior. No helper or schema mutation ships.
|
||||
|
||||
## Reader / hash audit
|
||||
|
||||
`rg -n 'broker\.mjs|TESTER_VERBS' packages/*/tests --glob '!fixtures/*'` produced reader-grep.txt (133 hits at audit time). These are imports except the concrete source read at bus/tests/limit-checks.test.mjs:323-326 (forbidden limit-check/token-limit imports) and the tester set assertions at bus/tests/tester-writes.test.mjs:18-32. The latter stays byte-for-byte unchanged. bus/tests/viewer.test.mjs:116 builds its coverage set from exported verb lists; rooms do not widen those lists. No old test needs an edit.
|
||||
|
||||
Pin check: recursively inspect packages/*/tests plus scripts/test-*.sh for changed-file mentions (broker.mjs, address.mjs, packages/bus/README.md, packages/bus/src/index.mjs) with literal 64-hex values within eight lines: pin-context-grep.txt records no hits. A direct same-line hash/digest/sha256 grep finds registrySha256 imports only, which hash host registry data rather than broker bytes. The independent channel-proof.test.mjs baselines cover proof/transport files, none changed here. Positive control: pin-positive-control.txt records actual schema.sql / SCHEMA_SHA256 / createHash references in bus/tests/schema.test.mjs and bus/src/store.mjs. Schema bytes are unchanged.
|
||||
|
||||
## Requested serialized slot plan (not run)
|
||||
|
||||
At each run: fresh `TMPDIR=$(mktemp -d /mnt/storage/scratch/tmp/XXXXXX)`, date -u, uptime, and `bash /mnt/storage/scratch/sage-busy-now.sh 2>/dev/null | tail -1` in the log. No concurrent test runs. Ignored root node_modules symlink targets the canonical checkout; it will not be committed.
|
||||
|
||||
1. `timeout -k 10 120 node --test packages/bus/tests/address.test.mjs` whole.
|
||||
2. `timeout -k 10 120 node --test packages/bus/tests/rooms.test.mjs` whole.
|
||||
3. `timeout -k 10 600 node --test --test-concurrency=1 packages/bus/tests/*.test.mjs` bus suite whole.
|
||||
4. `python3 agents/goldie/work/queue-265/mutants.py`: M01 through M12 serially, each runs `timeout -k 10 120 node --test packages/bus/tests/rooms.test.mjs` whole, fresh TMPDIR/header; stop on a live mutant or wrong failure. Record each diff and restoration digest.
|
||||
5. Restored address.test.mjs whole and rooms.test.mjs whole separately, same commands as 1/2 and fresh directories/header each.
|
||||
|
||||
Estimate 5–10 minutes; bus timeout ceiling 10 minutes, individual new/mutant ceilings 2 minutes each. On first new-test red, record/report it. On any old-test red or need for old-test change, stop and ask Sage. Static node --check for new modules/tests and git diff --check passed; no tests or mutants run yet.
|
||||
|
||||
## First slot STOP — sage-3932
|
||||
|
||||
2026-10-24T04:27Z: stopped on an old-test red. No old test changed or rerun, no mutant executed, no product adjustment after the failure, no commit/push claiming verification.
|
||||
|
||||
| Step | Exit | Counts / disposition | Log |
|
||||
| --- | --- | --- | --- |
|
||||
| 1 address whole | 0 | 14 pass, 0 fail/skip/cancel; 58.559 ms | logs/01-address.log |
|
||||
| 2 rooms whole | 0 | 18 pass, 0 fail/skip/cancel; 1067.524 ms | logs/02-rooms.log |
|
||||
| 3 bus whole | 1 (stopped) | partial 619 top-level ok, 1 not ok; not a completed-suite result | logs/03-bus.log |
|
||||
| 4 twelve mutants | not run | stop rule | none |
|
||||
| 5 restored files | not run | stop rule; no mutations were applied | none |
|
||||
|
||||
All three run headers use UTC/date, uptime, helper CLEAR and distinct 31-byte scratch TMPDIRs. Bus began04:25:22Z at load2.80/2.91/2.61, TMPDIR /mnt/storage/scratch/tmp/LaZAaK. Parser used /mnt/storage/scratch/tmp/rqcTH7; rooms has its own header. Explicit TAP reporter was selected for rooms/bus and the mutant driver so failure detection/counts are stable across Node26's default spec reporter; this changes reporting only.
|
||||
|
||||
The old red is project-runtime.test.mjs:12, assertion:14, test620, “Broker keeps the sandbox client import closure: only the listed imports, no lazy project import”. Actual imports include the new `import { parseAddress } from './address.mjs';`; the pinned array omits it. ERR_ASSERTION deepStrictEqual; individual duration2.469251ms. The full expected/actual/stack is in 03-bus.log. No other red was observed before stopping.
|
||||
|
||||
Reader-audit correction: reader-grep.txt:100 already contains project-runtime.test.mjs:13, a direct broker source read. The earlier prose incorrectly described the import-closure assertion as a normal import; I missed this old source pin during inspection. This is not a hash pin. Follow-up static trace finds seat/src/sandbox.mjs:50-60 RUNNER_FILES includes broker and landing but not address; seat/tests/sandbox.test.mjs:45-53 compares this mount list to the recursively imported source closure. A parser dependency therefore also needs the one new RUNNER_FILES path. Both an old-test pin change and this out-of-owned-files product change require Sage/Mos approval before edits. Recommended bounded change: add only the parser import to the project-runtime expected imports, add only packages/bus/src/address.mjs beside broker in RUNNER_FILES, and leave the generic sandbox closure test unchanged.
|
||||
|
||||
Broker bytes remain SHA256 71b32ee4afa322793aad81231441ee7badc3e5aff65ff008c6cc0f7f63b72781. git diff --check still passes. Slot returned in goldie-0032, pending ruling/new CLEAR; no reruns.
|
||||
|
||||
## mos-1567 approved closure correction / second slot request
|
||||
|
||||
Sage-3940 relays Mos's mos-1567 and widened row scope (sage-3939). Applied exactly the approved pre-existing-file edits: project-runtime.test.mjs adds two lines at17-18, one Row265 comment and the parser import in the pinned array, no other line changed (numstat2 added/0 deleted); seat/src/sandbox.mjs adds only `packages/bus/src/address.mjs` immediately after broker in RUNNER_FILES. seat/tests/sandbox.test.mjs stays byte-for-byte unchanged. The parser remains a separate pure module. A NEW block in address.test.mjs asserts `doesNotMatch(/\bimport\b/)` on its source, with a node:fs import in that new test file; no existing assertion is moved or weakened.
|
||||
|
||||
Review packet must explicitly call out the RUNNER_FILES mount-list entry for Boyd's review. This is a read-only source-file mount needed by the broker's static dependency, with no new module dependency or role/verb authority. The first-run import pin failure remains recorded above and in logs/03-bus.log; new logs will have rerun-prefixed names, preserving first-slot bytes.
|
||||
|
||||
Requested rerun order, awaiting CLEAR after Bentina: first `timeout -k 10 180 node --test --test-reporter=tap packages/seat/tests/sandbox.test.mjs` whole, then the original five steps again from step1: address whole (now15 cases), rooms whole, bus whole with concurrency1 (includes project-runtime whole), M01–M12 whole-room-file mutants, then restored address and rooms files separately. Explicit TAP reporter is used throughout for stable logs/kill matching; timeouts otherwise120 per new/mutant run and600 for bus. Each run still gets fresh short mktemp TMPDIR, date/uptime/busy header, serialized with the same stop rule. Estimate5–10minutes. Only static node --check and git diff --check run since the STOP; all pass. No new test run yet.
|
||||
|
||||
## Verified result — sage-3942 CLEAR, slot returned goldie-0034
|
||||
|
||||
All rerun positives exit 0 with zero failures, skips or cancellations. Full bus suite passed 957/957, including the approved project-runtime import pin. The unchanged sandbox test passed 10/10, including its recursive mount/import-closure assertion. New parser cases passed 15/15, rooms 18/18, and both passed again after restoration. No tests run after slot return.
|
||||
|
||||
| Run | Exit | Pass / fail | Duration ms | UTC / load / helper | Log |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| rerun-00-sandbox | 0 | 10 / 0 | 5526.027699 | Sat Oct 24 04:31:35 UTC 2026; 23:31:35 up 10 days, 14:51, 2 users, load average: 2.83, 2.91, 2.73; CLEAR | [log](logs/rerun-00-sandbox.log.gz) |
|
||||
| rerun-01-address | 0 | 15 / 0 | 54.634817 | Sat Oct 24 04:31:45 UTC 2026; 23:31:45 up 10 days, 14:51, 2 users, load average: 2.54, 2.84, 2.71; CLEAR | [log](logs/rerun-01-address.log.gz) |
|
||||
| rerun-02-rooms | 0 | 18 / 0 | 921.788987 | Sat Oct 24 04:31:52 UTC 2026; 23:31:52 up 10 days, 14:51, 2 users, load average: 2.42, 2.81, 2.70; CLEAR | [log](logs/rerun-02-rooms.log.gz) |
|
||||
| rerun-03-bus | 0 | 957 / 0 | 118397.418425 | Sat Oct 24 04:32:01 UTC 2026; 23:32:01 up 10 days, 14:51, 2 users, load average: 2.28, 2.77, 2.68; CLEAR | [log](logs/rerun-03-bus.log.gz) |
|
||||
| rerun-05-restored-address | 0 | 15 / 0 | 54.587943 | Sat Oct 24 04:35:02 UTC 2026; 23:35:02 up 10 days, 14:54, 2 users, load average: 3.10, 3.07, 2.83; CLEAR | [log](logs/rerun-05-restored-address.log.gz) |
|
||||
| rerun-05-restored-rooms | 0 | 18 / 0 | 991.877991 | Sat Oct 24 04:35:11 UTC 2026; 23:35:11 up 10 days, 14:55, 2 users, load average: 3.17, 3.09, 2.84; CLEAR | [log](logs/rerun-05-restored-rooms.log.gz) |
|
||||
|
||||
Mutant driver exit 0; all twelve target tests killed their guard relaxation with Node exit 1. Every mutant log records exact bytes restored to broker SHA256 `71b32ee4afa322793aad81231441ee7badc3e5aff65ff008c6cc0f7f63b72781`. Driver receipt: [rerun-04-mutants-driver.log](logs/rerun-04-mutants-driver.log.gz).
|
||||
|
||||
| Mutant | Node exit | Pass / fail | Exact diff | Raw log |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| M01-human | 1, killed | 16 / 2 | [diff](logs/M01-human.diff) | [log](logs/M01-human.log.gz) |
|
||||
| M02-tester | 1, killed | 17 / 1 | [diff](logs/M02-tester.diff) | [log](logs/M02-tester.log.gz) |
|
||||
| M03-project | 1, killed | 17 / 1 | [diff](logs/M03-project.diff) | [log](logs/M03-project.log.gz) |
|
||||
| M04-members | 1, killed | 17 / 1 | [diff](logs/M04-members.diff) | [log](logs/M04-members.log.gz) |
|
||||
| M05-collision | 1, killed | 14 / 4 | [diff](logs/M05-collision.diff) | [log](logs/M05-collision.log.gz) |
|
||||
| M06-open | 1, killed | 17 / 1 | [diff](logs/M06-open.diff) | [log](logs/M06-open.log.gz) |
|
||||
| M07-body | 1, killed | 17 / 1 | [diff](logs/M07-body.diff) | [log](logs/M07-body.log.gz) |
|
||||
| M08-unknown | 1, killed | 16 / 2 | [diff](logs/M08-unknown.diff) | [log](logs/M08-unknown.log.gz) |
|
||||
| M09-ambiguous | 1, killed | 17 / 1 | [diff](logs/M09-ambiguous.diff) | [log](logs/M09-ambiguous.log.gz) |
|
||||
| M10-messaging | 1, killed | 17 / 1 | [diff](logs/M10-messaging.diff) | [log](logs/M10-messaging.log.gz) |
|
||||
| M11-cursor | 1, killed | 17 / 1 | [diff](logs/M11-cursor.diff) | [log](logs/M11-cursor.log.gz) |
|
||||
| M12-fence | 1, killed | 17 / 1 | [diff](logs/M12-fence.diff) | [log](logs/M12-fence.log.gz) |
|
||||
|
||||
## Final review scope and packet
|
||||
|
||||
Boyd reviews the three room cases, pure parser/export, README rows, new parser/room tests, and **the added read-only RUNNER_FILES mount for packages/bus/src/address.mjs**. mos-1567 authorizes that one sandbox source line and the sole old-test delta: project-runtime.test.mjs:17-18 adds exactly the Row265 comment and parser import pin (numstat 2 added / 0 deleted). Byte comparison against base after removing those additions proves all other old-test bytes unchanged. Removing the single RUNNER_FILES addition likewise restores sandbox.mjs to base. sandbox.test.mjs has no byte change. New address.test.mjs block proves the mounted parser source has no import word.
|
||||
|
||||
The widened changed-file hash-context audit includes sandbox.mjs: [pin-context-with-sandbox.txt](pin-context-with-sandbox.txt), zero 64-hex-near-reference hits. The original reader and positive-control receipts remain alongside it; the missed source pin and first STOP remain recorded, not concealed. No role/schema/tester allowlist or helper change ships. BUILD-LOG and SESSIONS only append tracking entries.
|
||||
|
||||
Base: `ec86f2c847f6154a0677c6ed23c87dabc2c665d0`. Branch: `goldie/row265`. MANIFEST.sha256 lists every changed source/test/tracking/evidence file except itself, with repository-relative paths, and is verified before commit/push. Raw first-red logs are retained separately from green reruns.
|
||||
|
||||
Evidence packaging: logs are stored losslessly as `.log.gz`; decompress with `gzip -cd`. Decompression was byte-compared with each raw run log before packing. This preserves the original failure/Node whitespace while keeping the committed diff whitespace-clean. The run driver recreates raw `.log` files when used. Mutant busy-check headers identify only their own Python driver PID3686656 as BUSY; positive runs report CLEAR. The driver held the assigned slot throughout, with serialized child tests.
|
||||
@@ -1,51 +0,0 @@
|
||||
996e9d0c1e7a8436691ce5d5d89b4eb940b07aafb3386f63a9847d203f43d998 BUILD-LOG.md
|
||||
26b5821895a152ddac66a26f16585c6c48ec71d99ca7e7c2b9a4d5a71943c5b4 agents/goldie/work/queue-265/BUILD.md
|
||||
1289c0f9f4e857590490a0972b5300cc8fb1a86e3ef79fe63e47472709e982f6 agents/goldie/work/queue-265/logs/01-address.log.gz
|
||||
bc0ac95454ca4a4478641832e68caeb82bfe8b1fdc9abc0b80f1126ef42b7be5 agents/goldie/work/queue-265/logs/02-rooms.log.gz
|
||||
459a45bd772576847338a438b27f4f578a2a660be744e1404fd239d192c6957c agents/goldie/work/queue-265/logs/03-bus.log.gz
|
||||
c30cecb149e98d64f285e81a82d07a0a89dad5ea223f9031b543230615663bb5 agents/goldie/work/queue-265/logs/M01-human.diff
|
||||
a75e02d91ff46fbfaf627beea943183b769e417bcb572bf11f778f0fca7fcf29 agents/goldie/work/queue-265/logs/M01-human.log.gz
|
||||
b78b1c5b205272411710f56a981acf58dc09c46333369924b98c4c8657dc949c agents/goldie/work/queue-265/logs/M02-tester.diff
|
||||
6a680dcb1db461cce3a3a2e066aa1245e4f84aa6754354058009bc0f6ebf4185 agents/goldie/work/queue-265/logs/M02-tester.log.gz
|
||||
02a6cfab404405099fc39eb83413614c67a0c4c3f87cd23c3849a35d1055ddb0 agents/goldie/work/queue-265/logs/M03-project.diff
|
||||
8b7cd0c568510e49b61fa14fce7b2680025b773eda884e0a84163d240a124e39 agents/goldie/work/queue-265/logs/M03-project.log.gz
|
||||
18b2cb43f2799301cf934e4c327bc1a03e08ff8d11ff590cb9677c86dfd43ff0 agents/goldie/work/queue-265/logs/M04-members.diff
|
||||
195f9ec57c9494552566d2f8b87f3b17a210b811f8b556dd65db89814e237816 agents/goldie/work/queue-265/logs/M04-members.log.gz
|
||||
a773e214c76acf5285ac4ca17cdd90dd552ddc79157abe75ef6de7f67a0b6a70 agents/goldie/work/queue-265/logs/M05-collision.diff
|
||||
1148cda3f6aaa7f6aeaab2f95c932114ddeac5bfd9318a6b77a4148079d486ed agents/goldie/work/queue-265/logs/M05-collision.log.gz
|
||||
56400065c9cdb6305763b2bff8c0e06e9ae1223fa89b4467634a9951622d3fbe agents/goldie/work/queue-265/logs/M06-open.diff
|
||||
b8f9bd9a5c488e604d0afe3feda4a2602359a94a49c7fdbd2f0f6a421b0ca1ce agents/goldie/work/queue-265/logs/M06-open.log.gz
|
||||
2c1b745a15602cdcaf194131e4d6e0f8fa349e9712ce2e8cb6e695699e4ec19d agents/goldie/work/queue-265/logs/M07-body.diff
|
||||
4857461e7a2ceb01a6446acb4708a732949a0d8d1a85fa2f6d10bedde6b9e11b agents/goldie/work/queue-265/logs/M07-body.log.gz
|
||||
e3480e69d016caea6c1fbcdfa022b18214a10e8deca4409d0dc2f72261d2ee92 agents/goldie/work/queue-265/logs/M08-unknown.diff
|
||||
3d0f347f21df3c388a4f39679d4694aadc9684ae8b8ad2d30bf0bb316e48dcb0 agents/goldie/work/queue-265/logs/M08-unknown.log.gz
|
||||
62420ed20affcab256facee05414b8b760a4c79a60f60be0c06c88abb61ec6ae agents/goldie/work/queue-265/logs/M09-ambiguous.diff
|
||||
14a18d61344df592e885c46ace34e0c59914f4fbe591fa99eeb3d81fa8ef8bf1 agents/goldie/work/queue-265/logs/M09-ambiguous.log.gz
|
||||
0671bf77394f82df92252275171fd9edea2e5b2e7143387840d03bda544676bf agents/goldie/work/queue-265/logs/M10-messaging.diff
|
||||
4202215d40999e0d1cc98ebfb5445f0c8fd4688e6ca968e85d225723076ca8a7 agents/goldie/work/queue-265/logs/M10-messaging.log.gz
|
||||
042598ecb551e761d37af898f69e17ec137d2f39687dbf81ce5e1eeb98a38202 agents/goldie/work/queue-265/logs/M11-cursor.diff
|
||||
deff3d0514c379bd3d9c6f6bbc60db59b9dce2baaafd6fa611711c98cc8365ce agents/goldie/work/queue-265/logs/M11-cursor.log.gz
|
||||
780e70fbcb2328006c8d9ace75aa62fcd0d935b4d758b50b0f5c5d5c55604122 agents/goldie/work/queue-265/logs/M12-fence.diff
|
||||
b629b41a39c028b70d4b847c351d248d6d70e8175d6d27f563b0ed8817f89642 agents/goldie/work/queue-265/logs/M12-fence.log.gz
|
||||
1b8c3cec31b44ff018a1bc74fef95996bcbdd21d340e2d2605154ba645648040 agents/goldie/work/queue-265/logs/rerun-00-sandbox.log.gz
|
||||
d18c5a9432de06ebec36c937da7dfb1a3e79dc397b33ff624058af351eee24dd agents/goldie/work/queue-265/logs/rerun-01-address.log.gz
|
||||
d10b83ccec56e47d8c7c74d8304fc4fc87b8ea92a50098380cd02b8012c32d09 agents/goldie/work/queue-265/logs/rerun-02-rooms.log.gz
|
||||
6ff5955fe5c85f51c1cf4daeb8eddd61ef1a30e170221f99bfb08da8304d7e4a agents/goldie/work/queue-265/logs/rerun-03-bus.log.gz
|
||||
eeba0182f06cee0c06cd15ecf7ef43aaeffd7149b2202cc0653078c20bb46198 agents/goldie/work/queue-265/logs/rerun-04-mutants-driver.log.gz
|
||||
5fe9fe35af60ef951c5c68b040aa9bb6067d9c746e143bb5782eb428acd4e4fe agents/goldie/work/queue-265/logs/rerun-05-restored-address.log.gz
|
||||
2b3f3305ff5f6926a0269bd6c88d5f2e4a89727eefcf99625bebb51a70abb649 agents/goldie/work/queue-265/logs/rerun-05-restored-rooms.log.gz
|
||||
f11ae40d923affad1936fe51d05981ac201a1051bc9f877d75fc1d544c6e38f1 agents/goldie/work/queue-265/mutants.py
|
||||
e9cdf16670a16a14f3dd722a69c63a1785e4deb3608ee05d519b0ec8c1a9ca0b agents/goldie/work/queue-265/pin-context-grep.txt
|
||||
491ba3bb25e918049249178f3c6a67b2b4f56a197f0a67059acb2420cd03b73c agents/goldie/work/queue-265/pin-context-with-sandbox.txt
|
||||
784fb42bff187c0eebcf7756942ec3cf56f8faa7b54ce4ad96181b81fe46f0e9 agents/goldie/work/queue-265/pin-positive-control.txt
|
||||
766ead519eefbde958bbdbf77bf858b10dd1e3d9dee8ab5d356fe821ce7602fe agents/goldie/work/queue-265/reader-grep.txt
|
||||
6c3c44eb943f33d5bb547f542c77da4d6f04e738056466bc491c2f6fd5f67946 docs/SESSIONS.md
|
||||
1ba33af1f42c88a5346d25fe915a44ee70a27fbc6b9ab880db0866cbdad5d45d packages/bus/README.md
|
||||
232a1c77c2f17011c53b55fc6052f70985598210769d41d7c2c0b535328aad23 packages/bus/src/address.mjs
|
||||
71b32ee4afa322793aad81231441ee7badc3e5aff65ff008c6cc0f7f63b72781 packages/bus/src/broker.mjs
|
||||
ed57d48d2af4a225259e0a44c86a30b12792ec9f725dd9c89251569b7dc89e5a packages/bus/src/index.mjs
|
||||
a6725ffe30d44981a9b9d3a3c319f7e96a46ec7bd74f0c8d869d9a798eca1a81 packages/bus/tests/address-cases.mjs
|
||||
fae431bc3743b224f69da33c4cebe376b47257d67f52d25d3ab0cb59f224a607 packages/bus/tests/address.test.mjs
|
||||
8594e94384c1c8b7234cfa8bbc17456cff86d9adef936cd1059a0d5a60e4546b packages/bus/tests/project-runtime.test.mjs
|
||||
892c3709393fa8962710bc07565d1097bbd79ea1fbfda34af5f9385db34ed0fa packages/bus/tests/rooms.test.mjs
|
||||
83019fa6b39ad9fd79b84627856b4dec82683d8261b8cba9b9ac840e0c489268 packages/seat/src/sandbox.mjs
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,10 +0,0 @@
|
||||
--- broker.original
|
||||
+++ M01-human
|
||||
@@ -6423,7 +6423,6 @@
|
||||
case 'room.open':
|
||||
case 'room.send':
|
||||
case 'room.read': {
|
||||
- this.#human(s);
|
||||
const opening = verb === 'room.open';
|
||||
const sending = verb === 'room.send';
|
||||
keys(a, opening ? ['project'] : sending ? ['project', 'body'] : ['project', 'after', 'limit'],
|
||||
Binary file not shown.
@@ -1,12 +0,0 @@
|
||||
--- broker.original
|
||||
+++ M02-tester
|
||||
@@ -122,7 +122,8 @@
|
||||
// Row 175 (#1673, Q173): the test system's reads and two writes, name.set and project.create,
|
||||
// each recorded with `tester` as its actor. The organization branch keeps its own list below.
|
||||
// Row 177 (#1675, Q173): the tester's own threads, owner `tester`, and a stop of their runs.
|
||||
-export const TESTER_VERBS = Object.freeze(['message.send', 'message.receive', 'message.read', 'inbox', 'agents', 'tasks', 'trail', 'decisions', 'messages', 'replies',
|
||||
+export const TESTER_VERBS = Object.freeze([
|
||||
+ 'room.open', 'room.send', 'room.read','message.send', 'message.receive', 'message.read', 'inbox', 'agents', 'tasks', 'trail', 'decisions', 'messages', 'replies',
|
||||
'usage', 'names', 'limits', 'plugins', 'instances', 'project.list', 'thread.list', 'name.set', 'project.create', 'credentials',
|
||||
'thread.create', 'thread.open', 'thread.send', 'thread.messages', 'assistant.stop',
|
||||
// Row 194 (#1692, D4.1): launch and terminate, and the read of the requests they make.
|
||||
Binary file not shown.
@@ -1,10 +0,0 @@
|
||||
--- broker.original
|
||||
+++ M03-project
|
||||
@@ -6429,7 +6429,6 @@
|
||||
keys(a, opening ? ['project'] : sending ? ['project', 'body'] : ['project', 'after', 'limit'],
|
||||
sending ? ['project', 'body'] : ['project']);
|
||||
const project = identifier(a.project);
|
||||
- if (!this.#store.get('SELECT 1 FROM projects WHERE id=? AND business=?', project, s.business)) fail('project-not-found');
|
||||
const members = Object.keys(b.roles).filter((instance) => this.#threaded(s.business, instance)).sort();
|
||||
if (!members.length) fail('thread-instance-missing');
|
||||
const owner = this.#owner(s);
|
||||
Binary file not shown.
@@ -1,10 +0,0 @@
|
||||
--- broker.original
|
||||
+++ M04-members
|
||||
@@ -6431,7 +6431,6 @@
|
||||
const project = identifier(a.project);
|
||||
if (!this.#store.get('SELECT 1 FROM projects WHERE id=? AND business=?', project, s.business)) fail('project-not-found');
|
||||
const members = Object.keys(b.roles).filter((instance) => this.#threaded(s.business, instance)).sort();
|
||||
- if (!members.length) fail('thread-instance-missing');
|
||||
const owner = this.#owner(s);
|
||||
// Preflight all collisions/missing threads before open creates or send writes anything.
|
||||
const threads = members.map((instance) => {
|
||||
Binary file not shown.
@@ -1,11 +0,0 @@
|
||||
--- broker.original
|
||||
+++ M05-collision
|
||||
@@ -6436,8 +6436,6 @@
|
||||
// Preflight all collisions/missing threads before open creates or send writes anything.
|
||||
const threads = members.map((instance) => {
|
||||
const t = this.#store.get('SELECT * FROM threads WHERE project=? AND name=?', project, instance);
|
||||
- if (t && (t.instance !== instance || t.owner !== owner))
|
||||
- fail(opening ? 'room-thread-name-taken' : 'room-not-open');
|
||||
if (!t && !opening) fail('room-not-open');
|
||||
return t ?? { instance, name: instance };
|
||||
});
|
||||
Binary file not shown.
@@ -1,10 +0,0 @@
|
||||
--- broker.original
|
||||
+++ M06-open
|
||||
@@ -6438,7 +6438,6 @@
|
||||
const t = this.#store.get('SELECT * FROM threads WHERE project=? AND name=?', project, instance);
|
||||
if (t && (t.instance !== instance || t.owner !== owner))
|
||||
fail(opening ? 'room-thread-name-taken' : 'room-not-open');
|
||||
- if (!t && !opening) fail('room-not-open');
|
||||
return t ?? { instance, name: instance };
|
||||
});
|
||||
if (opening) {
|
||||
Binary file not shown.
@@ -1,10 +0,0 @@
|
||||
--- broker.original
|
||||
+++ M07-body
|
||||
@@ -6450,7 +6450,6 @@
|
||||
if (sending) {
|
||||
string(a.body, 32768);
|
||||
const addressed = parseAddress(a.body);
|
||||
- if (!addressed.body.trim()) fail('invalid-request');
|
||||
const selected = new Set();
|
||||
for (const tag of addressed.tags) {
|
||||
const candidates = new Set([this.#named(s.business, tag), tag].filter((instance) => members.includes(instance)));
|
||||
Binary file not shown.
@@ -1,10 +0,0 @@
|
||||
--- broker.original
|
||||
+++ M08-unknown
|
||||
@@ -6454,7 +6454,6 @@
|
||||
const selected = new Set();
|
||||
for (const tag of addressed.tags) {
|
||||
const candidates = new Set([this.#named(s.business, tag), tag].filter((instance) => members.includes(instance)));
|
||||
- if (!candidates.size) fail('unknown-addressee');
|
||||
if (candidates.size > 1) fail('addressee-ambiguous');
|
||||
selected.add([...candidates][0]);
|
||||
}
|
||||
Binary file not shown.
@@ -1,10 +0,0 @@
|
||||
--- broker.original
|
||||
+++ M09-ambiguous
|
||||
@@ -6455,7 +6455,6 @@
|
||||
for (const tag of addressed.tags) {
|
||||
const candidates = new Set([this.#named(s.business, tag), tag].filter((instance) => members.includes(instance)));
|
||||
if (!candidates.size) fail('unknown-addressee');
|
||||
- if (candidates.size > 1) fail('addressee-ambiguous');
|
||||
selected.add([...candidates][0]);
|
||||
}
|
||||
const targets = threads.filter((t) => !addressed.tags.length || selected.has(t.instance));
|
||||
Binary file not shown.
@@ -1,10 +0,0 @@
|
||||
--- broker.original
|
||||
+++ M10-messaging
|
||||
@@ -6462,7 +6462,6 @@
|
||||
const sessions = targets.map((t) => {
|
||||
const session = this.#defaultSession(t.id);
|
||||
this.#sessionFence(session);
|
||||
- this.#checkMessaging(s.business, 'human', t.instance);
|
||||
return session;
|
||||
});
|
||||
const at = this.#now();
|
||||
Binary file not shown.
@@ -1,11 +0,0 @@
|
||||
--- broker.original
|
||||
+++ M11-cursor
|
||||
@@ -6488,7 +6488,7 @@
|
||||
`SELECT m.seq FROM messages m JOIN message_threads mt ON mt.message=m.id WHERE m.id=? AND m.business=? AND mt.thread IN (${placeholders})`,
|
||||
identifier(a.after), s.business, ...tids,
|
||||
)?.seq;
|
||||
- if (after === undefined) fail('message-not-found');
|
||||
+ if (after === undefined) after = 0;
|
||||
}
|
||||
// At most one row per instance joins a group; one lookahead row completes the last page.
|
||||
const rows = this.#store.all(
|
||||
Binary file not shown.
@@ -1,10 +0,0 @@
|
||||
--- broker.original
|
||||
+++ M12-fence
|
||||
@@ -6461,7 +6461,6 @@
|
||||
const targets = threads.filter((t) => !addressed.tags.length || selected.has(t.instance));
|
||||
const sessions = targets.map((t) => {
|
||||
const session = this.#defaultSession(t.id);
|
||||
- this.#sessionFence(session);
|
||||
this.#checkMessaging(s.business, 'human', t.instance);
|
||||
return session;
|
||||
});
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,67 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Slot-only runner. Every mutation restores and verifies the complete broker bytes."""
|
||||
from pathlib import Path
|
||||
import hashlib, os, re, subprocess, sys
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[4]
|
||||
SOURCE = ROOT / 'packages/bus/src/broker.mjs'
|
||||
OUT = Path(__file__).resolve().parent / 'logs'
|
||||
MUTANTS = [
|
||||
('M01-human', 'human-required', 'room verbs require the human', ' this.#human(s);\n', ''),
|
||||
('M02-tester', 'tester-refused', 'room verbs require the human', None, None),
|
||||
('M03-project', 'project-not-found', 'room verbs refuse missing projects', " if (!this.#store.get('SELECT 1 FROM projects WHERE id=? AND business=?', project, s.business)) fail('project-not-found');\n", ''),
|
||||
('M04-members', 'thread-instance-missing', 'room verbs refuse missing projects', " if (!members.length) fail('thread-instance-missing');\n", ''),
|
||||
('M05-collision', 'room-thread-name-taken', 'room.open preflights instance collisions', " if (t && (t.instance !== instance || t.owner !== owner))\n fail(opening ? 'room-thread-name-taken' : 'room-not-open');\n", ''),
|
||||
('M06-open', 'room-not-open', 'send/read refuse a missing canonical member', " if (!t && !opening) fail('room-not-open');\n", ''),
|
||||
('M07-body', 'invalid-request', 'unknown or non-member addressees and tags-only bodies', " if (!addressed.body.trim()) fail('invalid-request');\n", ''),
|
||||
('M08-unknown', 'unknown-addressee', 'unknown or non-member addressees and tags-only bodies', " if (!candidates.size) fail('unknown-addressee');\n", ''),
|
||||
('M09-ambiguous', 'addressee-ambiguous', 'a legacy name colliding with another member key', " if (candidates.size > 1) fail('addressee-ambiguous');\n", ''),
|
||||
('M10-messaging', 'message-sender-refused', 'messaging denial on the last target', " this.#checkMessaging(s.business, 'human', t.instance);\n", ''),
|
||||
('M11-cursor', 'message-not-found', 'room.read groups one send, pages', " if (after === undefined) fail('message-not-found');\n", ' if (after === undefined) after = 0;\n'),
|
||||
('M12-fence', 'session-clearing', 'a clearing last member fences the whole send', ' this.#sessionFence(session);\n', ''),
|
||||
]
|
||||
|
||||
def sha(data): return hashlib.sha256(data).hexdigest()
|
||||
|
||||
def main():
|
||||
OUT.mkdir(exist_ok=True)
|
||||
original = SOURCE.read_bytes()
|
||||
text = original.decode()
|
||||
start = text.index(" case 'room.open':")
|
||||
end = text.index(" // A thread belongs", start)
|
||||
block = text[start:end]
|
||||
for name, refusal, expected, old, new in MUTANTS:
|
||||
if old is None:
|
||||
needle = 'export const TESTER_VERBS = Object.freeze(['
|
||||
assert text.count(needle) == 1
|
||||
changed = text.replace(needle, needle + "\n 'room.open', 'room.send', 'room.read',", 1)
|
||||
else:
|
||||
assert block.count(old) == 1, (name, block.count(old))
|
||||
changed = text[:start] + block.replace(old, new, 1) + text[end:]
|
||||
# Save conventional original→mutant diff without relying on shell interpolation.
|
||||
import difflib
|
||||
(OUT / f'{name}.diff').write_text(''.join(difflib.unified_diff(text.splitlines(True), changed.splitlines(True), fromfile='broker.original', tofile=name)))
|
||||
tmp = subprocess.check_output(['mktemp', '-d', '/mnt/storage/scratch/tmp/XXXXXX'], text=True).strip()
|
||||
env = {**os.environ, 'TMPDIR': tmp}
|
||||
log = OUT / f'{name}.log'
|
||||
try:
|
||||
SOURCE.write_text(changed)
|
||||
with log.open('w') as stream:
|
||||
for command in [['date', '-u'], ['uptime'], ['bash', '-c', 'bash /mnt/storage/scratch/sage-busy-now.sh 2>/dev/null | tail -1']]:
|
||||
subprocess.run(command, cwd=ROOT, env=env, stdout=stream, stderr=subprocess.STDOUT, check=True)
|
||||
stream.write(f'TMPDIR={tmp}\nmutant={name} refusal={refusal} original_sha256={sha(original)}\n')
|
||||
stream.flush()
|
||||
result = subprocess.run(['timeout', '-k', '10', '120', 'node', '--test', '--test-reporter=tap', 'packages/bus/tests/rooms.test.mjs'],
|
||||
cwd=ROOT, env=env, stdout=stream, stderr=subprocess.STDOUT)
|
||||
output = log.read_text()
|
||||
killed = result.returncode == 1 and re.search(r'(?m)^not ok \d+ - ' + re.escape(expected), output)
|
||||
print(f'{name}: exit={result.returncode} target_killed={bool(killed)} log={log}', flush=True)
|
||||
if not killed: return 1
|
||||
finally:
|
||||
SOURCE.write_bytes(original)
|
||||
assert SOURCE.read_bytes() == original
|
||||
assert sha(SOURCE.read_bytes()) == sha(original)
|
||||
with log.open('a') as stream: stream.write(f'RESTORED sha256={sha(original)}\n')
|
||||
return 0
|
||||
|
||||
if __name__ == '__main__': sys.exit(main())
|
||||
@@ -1 +0,0 @@
|
||||
No changed-file mention has a literal 64-hex digest within eight lines.
|
||||
@@ -1 +0,0 @@
|
||||
No changed-product-file mention has a literal 64-hex digest within eight lines.
|
||||
@@ -1,6 +0,0 @@
|
||||
packages/bus/src/store.mjs:15:const ddl = readFileSync(new URL('../schema.sql', import.meta.url), 'utf8');
|
||||
packages/bus/src/store.mjs:16:export const SCHEMA_SHA256 = 'a2ba3a46f12e56139ecae9e55227d00847842aedec50c1d92aaae28844ca48e7';
|
||||
packages/bus/src/store.mjs:106:const hex = (value) => createHash('sha256').update(value).digest('hex');
|
||||
packages/bus/src/store.mjs:107:if (hex(ddl) !== SCHEMA_SHA256) throw Error('schema-source-mismatch');
|
||||
packages/bus/tests/schema.test.mjs:17: db.exec(readFileSync(new URL('../schema.sql', import.meta.url), 'utf8'));
|
||||
packages/bus/tests/schema.test.mjs:90: const hex = (s) => createHash('sha256').update(s).digest('hex');
|
||||
@@ -1,133 +0,0 @@
|
||||
packages/bus/tests/session-compactions.test.mjs:9:import { Broker } from '../src/broker.mjs';
|
||||
packages/bus/tests/console-decide.test.mjs:14:import { Broker, CONSOLE_VERBS } from '../src/broker.mjs';
|
||||
packages/harness/tests/runner.test.mjs:14:import { Broker, BusError } from "../../bus/src/broker.mjs";
|
||||
packages/bus/tests/project-files.test.mjs:8:import { PROJECT_FILE_VERBS } from '../src/broker.mjs';
|
||||
packages/cli/tests/lifecycle.test.mjs:19:import { BusError } from "../../bus/src/broker.mjs";
|
||||
packages/bus/tests/lifecycle-verbs.test.mjs:11:import { Broker, LIFECYCLE_REQUEST_MS, TESTER_VERBS } from '../src/broker.mjs';
|
||||
packages/bus/tests/lifecycle-verbs.test.mjs:74: for (const verb of ['instance.launch', 'instance.end', 'instance.request']) assert.ok(TESTER_VERBS.includes(verb), verb);
|
||||
packages/bus/tests/lifecycle-verbs.test.mjs:75: assert.equal(TESTER_VERBS.includes('instance.regenerate'), false);
|
||||
packages/bus/tests/tasks.test.mjs:9:import { Broker, BusError, TASK_VERBS } from '../src/broker.mjs';
|
||||
packages/harness/tests/tools.test.mjs:4:import { ORGANIZATION_KEYS as BROKER_ORGANIZATION_KEYS, TASK_PAGE, TASK_PAGE_MAX } from "../../bus/src/broker.mjs";
|
||||
packages/seat/tests/session.test.mjs:11:import { Broker } from "../../bus/src/broker.mjs";
|
||||
packages/bus/tests/decision-route.test.mjs:12:import { Broker } from '../src/broker.mjs';
|
||||
packages/cli/tests/thread-launch.test.mjs:19:import { BusError } from "../../bus/src/broker.mjs";
|
||||
packages/seat/tests/sandbox.test.mjs:15:import { Broker } from "../../bus/src/broker.mjs";
|
||||
packages/bus/tests/host-run.test.mjs:16:import { Broker, ORGANIZATION_KEYS } from '../src/broker.mjs';
|
||||
packages/bus/tests/host-run.test.mjs:181: // organization.set reaches the writer as limits.set (broker.mjs:1379).
|
||||
packages/cli/tests/helpers.mjs:10:import { BusError, Broker } from "../../bus/src/broker.mjs";
|
||||
packages/tasks/tests/fields.test.mjs:10:import { TASK_VERBS } from '../../bus/src/broker.mjs';
|
||||
packages/tasks/tests/fields.test.mjs:226: // decision back to that role (broker.mjs, decision.raise).
|
||||
packages/webui/tests/instances.test.mjs:15:import { BusError } from '../../bus/src/broker.mjs';
|
||||
packages/cli/tests/tester-threads.test.mjs:14:import { BusError, Broker } from "../../bus/src/broker.mjs";
|
||||
packages/bus/tests/staff-request.test.mjs:8:import { Broker } from '../src/broker.mjs';
|
||||
packages/tasks/tests/world.mjs:5:import { Broker } from '../../bus/src/broker.mjs';
|
||||
packages/cli/tests/processing-cli.test.mjs:7:import { Broker } from '../../bus/src/broker.mjs';
|
||||
packages/bus/tests/grant-host.test.mjs:10:import { Broker, registrySha256 } from '../src/broker.mjs';
|
||||
packages/business/tests/workflow-roles.test.mjs:115: // Q169 (broker.mjs END_PROTECTED, #hardWait): revoking the assistant is a hard wait as well.
|
||||
packages/business/tests/workflow-roles.test.mjs:136: // sage-0709: only recordLand spends a decision (broker.mjs #spent). checkLand refuses decision-consumed after
|
||||
packages/cli/tests/thread-revoke.test.mjs:18:import { BusError } from "../../bus/src/broker.mjs";
|
||||
packages/bus/tests/tester-writes.test.mjs:10:import { Broker, TESTER_VERBS, TESTER_ORGANIZATION_VERBS } from '../src/broker.mjs';
|
||||
packages/bus/tests/tester-writes.test.mjs:18:test('row 175: TESTER_VERBS and the organization branch tester set are pinned', () => {
|
||||
packages/bus/tests/tester-writes.test.mjs:19: assert.deepEqual([...TESTER_VERBS], [
|
||||
packages/bus/tests/tester-writes.test.mjs:32: assert.ok(Object.isFrozen(TESTER_VERBS) && Object.isFrozen(TESTER_ORGANIZATION_VERBS));
|
||||
packages/cli/tests/stack-release.test.mjs:1993: for(const [f,text] of [['packages/cli/src/cli.mjs',id===A?'// fixture host from before row 163\nprocess.exit(1);\n':script(rHost)],['packages/webui/src/cli.mjs',script(rConsole)],['packages/bus/src/store.mjs',rStore(v,froms)],['packages/bus/src/migrate-schema.mjs',script(rMigrate)],['packages/bus/src/broker.mjs','export class BusError extends Error { constructor(code) { super(code); this.code = code; } }\n']]){mkdirSync(dirname(join(d,f)),{recursive:true});writeFileSync(join(d,f),text)}
|
||||
packages/cli/tests/session-cli.test.mjs:94: const { Broker } = await import('../../bus/src/broker.mjs');
|
||||
packages/cli/tests/session-launch.test.mjs:21:import { BusError } from "../../bus/src/broker.mjs";
|
||||
packages/cli/tests/revoke-window.test.mjs:19:import { BusError } from "../../bus/src/broker.mjs";
|
||||
packages/bus/tests/chief-of-staff.test.mjs:10:import { Broker, ACTIONS } from '../src/broker.mjs';
|
||||
packages/cli/tests/instances.test.mjs:13:import { BusError } from "../../bus/src/broker.mjs";
|
||||
packages/cli/tests/thread-cli.test.mjs:14:import { BusError, Broker } from "../../bus/src/broker.mjs";
|
||||
packages/bus/tests/processing.test.mjs:6:import { Broker } from '../src/broker.mjs';
|
||||
packages/cli/tests/idle-stop-race.test.mjs:17:import { BusError } from "../../bus/src/broker.mjs";
|
||||
packages/cli/tests/tester-reads.test.mjs:12:import { BusError } from "../../bus/src/broker.mjs";
|
||||
packages/cli/tests/session-clear.test.mjs:18:import { BusError } from "../../bus/src/broker.mjs";
|
||||
packages/bus/tests/names.test.mjs:8:import { Broker } from '../src/broker.mjs';
|
||||
packages/cli/tests/compactions-launch.test.mjs:24:import { BusError } from "../../bus/src/broker.mjs";
|
||||
packages/cli/tests/tester.test.mjs:7:import { BusError, Broker } from "../../bus/src/broker.mjs";
|
||||
packages/bus/tests/reload.test.mjs:9:import { Broker } from '../src/broker.mjs';
|
||||
packages/bus/tests/agents.test.mjs:9:import { Broker } from '../src/broker.mjs';
|
||||
packages/bus/tests/end-launch.test.mjs:9:import { Broker } from '../src/broker.mjs';
|
||||
packages/webui/tests/decide-browser.test.mjs:14:import { Broker } from '../../bus/src/broker.mjs';
|
||||
packages/bus/tests/credential-verbs.test.mjs:11:import { Broker, CREDENTIAL_VERBS } from '../src/broker.mjs';
|
||||
packages/webui/tests/send-browser.test.mjs:13:import { Broker } from '../../bus/src/broker.mjs';
|
||||
packages/bus/tests/launch-notice.test.mjs:8:import { Broker } from '../src/broker.mjs';
|
||||
packages/bus/tests/messages.test.mjs:3:import { Broker } from '../src/broker.mjs';
|
||||
packages/bus/tests/workflow-roles.test.mjs:11:import { Broker } from '../src/broker.mjs';
|
||||
packages/bus/tests/library-sync.test.mjs:11:import { Broker, LIBRARY_VERBS } from '../src/broker.mjs';
|
||||
packages/bus/tests/credential-status.test.mjs:12:import { Broker } from '../src/broker.mjs';
|
||||
packages/bus/tests/gitea-grant-docker.test.mjs:15:import { Broker, GRANT_EVIDENCE } from '../src/broker.mjs';
|
||||
packages/bus/tests/thread-migration.test.mjs:11:import { Broker } from '../src/broker.mjs';
|
||||
packages/bus/tests/comment-cursors.test.mjs:7:import { Broker } from '../src/broker.mjs';
|
||||
packages/bus/tests/thread-claims.test.mjs:11:import { Broker } from '../src/broker.mjs';
|
||||
packages/bus/tests/state.test.mjs:7:import { Broker, TASK_PAGE } from '../src/broker.mjs';
|
||||
packages/bus/tests/access-revoke.test.mjs:14:import { Broker } from '../src/broker.mjs';
|
||||
packages/bus/tests/plugins-verb.test.mjs:9:import { Broker } from '../src/broker.mjs';
|
||||
packages/bus/tests/transport.test.mjs:8:import { Broker } from '../src/broker.mjs';
|
||||
packages/bus/tests/publish.test.mjs:14:import { Broker } from '../src/broker.mjs';
|
||||
packages/bus/tests/publish.test.mjs:221: const { ACTIONS, HARD_WAITS } = await import('../src/broker.mjs');
|
||||
packages/bus/tests/tester-threads.test.mjs:11:import { Broker } from '../src/broker.mjs';
|
||||
packages/bus/tests/tester-threads.test.mjs:284: // The row #specNotice (broker.mjs) writes for a human save of the spec in project stack. The save
|
||||
packages/bus/tests/approval-binding.test.mjs:7:import { Broker } from '../src/broker.mjs';
|
||||
packages/bus/tests/fire-revokes-grants.test.mjs:15:import { Broker, GRANT_EVIDENCE, registrySha256 } from '../src/broker.mjs';
|
||||
packages/bus/tests/daily-quota-runtime.test.mjs:10:import { Broker } from '../src/broker.mjs';
|
||||
packages/bus/tests/limit-checks.test.mjs:323: for (const file of ['../src/runtime.mjs', '../src/broker.mjs', '../src/process.mjs']) {
|
||||
packages/bus/tests/spec-fixtures.mjs:6:import { Broker } from '../src/broker.mjs';
|
||||
packages/bus/tests/decisions.test.mjs:9:import { Broker, RECENT } from '../src/broker.mjs';
|
||||
packages/bus/tests/peer-transport.test.mjs:9:import { BusError } from '../src/broker.mjs';
|
||||
packages/bus/tests/peer-transport.test.mjs:47: const {TASK_VERBS,BusError}=await import('../src/broker.mjs');
|
||||
packages/bus/tests/messaging.test.mjs:8:import { Broker } from '../src/broker.mjs';
|
||||
packages/bus/tests/rooms.test.mjs:8:import { Broker, THREAD_PAGE, THREAD_PAGE_MAX, TESTER_VERBS } from '../src/broker.mjs';
|
||||
packages/bus/tests/rooms.test.mjs:80: assert.ok(!TESTER_VERBS.includes(verb));
|
||||
packages/bus/tests/web.test.mjs:8:import { Broker, BusError, WEB_UNTRUSTED } from '../src/broker.mjs';
|
||||
packages/bus/tests/replies.test.mjs:11:import { Broker, REPLIES } from '../src/broker.mjs';
|
||||
packages/bus/tests/thread-shares.test.mjs:14:import { Broker } from '../src/broker.mjs';
|
||||
packages/bus/tests/message-citation.test.mjs:6:import { Broker } from '../src/broker.mjs';
|
||||
packages/bus/tests/limits.test.mjs:7:import {Broker} from '../src/broker.mjs';
|
||||
packages/bus/tests/host-fixtures.mjs:6:import { registrySha256, writeGrantEvent } from '../src/broker.mjs';
|
||||
packages/bus/tests/gitea-grant.test.mjs:12:import { Broker, GRANT_EVIDENCE, writeGrantEvent } from '../src/broker.mjs';
|
||||
packages/bus/tests/csuite-messaging.test.mjs:12:import { Broker } from '../src/broker.mjs';
|
||||
packages/bus/tests/decision-close.test.mjs:9:import { Broker } from '../src/broker.mjs';
|
||||
packages/bus/tests/grant-scope.test.mjs:14:import { Broker, GRANT_EVIDENCE, writeGrantEvent } from '../src/broker.mjs';
|
||||
packages/bus/tests/project-await.test.mjs:7:import { Broker, BusError } from '../src/broker.mjs';
|
||||
packages/bus/tests/launcher-released.test.mjs:8:import { Broker } from '../src/broker.mjs';
|
||||
packages/bus/tests/limit-stop.test.mjs:12:import { Broker } from '../src/broker.mjs';
|
||||
packages/bus/tests/message-filter.test.mjs:12:import { Broker, REPLIES } from '../src/broker.mjs';
|
||||
packages/bus/tests/land.test.mjs:18:import { Broker } from '../src/broker.mjs';
|
||||
packages/bus/tests/single-use.test.mjs:7:import { Broker } from '../src/broker.mjs';
|
||||
packages/bus/tests/session-clear.test.mjs:10:import { Broker } from '../src/broker.mjs';
|
||||
packages/bus/tests/grant-migration.test.mjs:10:import { Broker } from '../src/broker.mjs';
|
||||
packages/bus/tests/usage-broker.test.mjs:7:import { Broker } from '../src/broker.mjs';
|
||||
packages/bus/tests/project-runtime.test.mjs:13: const source = readFileSync(new URL('../src/broker.mjs', import.meta.url), 'utf8');
|
||||
packages/bus/tests/task-read.test.mjs:7:import { Broker } from '../src/broker.mjs';
|
||||
packages/bus/tests/library.test.mjs:8:import { Broker } from '../src/broker.mjs';
|
||||
packages/bus/tests/instances-verb.test.mjs:11:import { Broker, LIFECYCLE_HUMAN_VERBS, ORGANIZATION_KEYS, TESTER_ORGANIZATION_VERBS } from '../src/broker.mjs';
|
||||
packages/bus/tests/routes-verb.test.mjs:13:import { Broker, ORGANIZATION_KEYS } from '../src/broker.mjs';
|
||||
packages/bus/tests/broker.test.mjs:10:const { Broker } = await import('../src/broker.mjs').catch((e) => {
|
||||
packages/bus/tests/grant-enroll.test.mjs:10:import { Broker, BusError, writeGrantEvent, registrySha256 } from '../src/broker.mjs';
|
||||
packages/bus/tests/hard-waits.test.mjs:7:import { Broker, ACTIONS, HARD_WAITS } from '../src/broker.mjs';
|
||||
packages/bus/tests/requirements.test.mjs:10:import { Broker } from '../src/broker.mjs';
|
||||
packages/bus/tests/grant-executor.test.mjs:15:import { Broker, registrySha256, writeGrantEvent } from '../src/broker.mjs';
|
||||
packages/bus/tests/sessions.test.mjs:10:import { Broker } from '../src/broker.mjs';
|
||||
packages/bus/tests/user-principal.test.mjs:14: Broker, ACTIONS, USER_VERBS, TESTER_VERBS, TASK_VERBS, WEB_VERBS, HOST_VERBS, HOSTS_VERBS, CREDENTIAL_VERBS,
|
||||
packages/bus/tests/user-principal.test.mjs:16:} from '../src/broker.mjs';
|
||||
packages/bus/tests/user-principal.test.mjs:137: ...ACTIONS, ...TESTER_VERBS, ...TESTER_ORGANIZATION_VERBS, ...PROJECT_FILE_VERBS, ...LIBRARY_VERBS, ...CREDENTIAL_VERBS, ...HOSTS_VERBS,
|
||||
packages/bus/tests/tester.test.mjs:10:import { Broker, TASK_VERBS } from '../src/broker.mjs';
|
||||
packages/bus/tests/threads.test.mjs:9:import { Broker, THREAD_PAGE } from '../src/broker.mjs';
|
||||
packages/webui/tests/routes-browser.test.mjs:15:import {BusError} from '../../bus/src/broker.mjs';
|
||||
packages/bus/tests/creative.test.mjs:8:import { Broker } from '../src/broker.mjs';
|
||||
packages/webui/tests/granted-user.test.mjs:16:import { Broker } from '../../bus/src/broker.mjs';
|
||||
packages/bus/tests/task-page.test.mjs:7:import { Broker, TASK_PAGE, TASK_PAGE_MAX } from '../src/broker.mjs';
|
||||
packages/webui/tests/user-option-swap.test.mjs:14:import { Broker } from '../../bus/src/broker.mjs';
|
||||
packages/webui/tests/board-held.test.mjs:20:import { Broker } from '../../bus/src/broker.mjs';
|
||||
packages/webui/tests/chat-sessions-access.test.mjs:10:import { Broker } from '../../bus/src/broker.mjs';
|
||||
packages/bus/tests/review.test.mjs:14:import { Broker } from '../src/broker.mjs';
|
||||
packages/webui/tests/sso-browser.test.mjs:14:import { Broker } from '../../bus/src/broker.mjs';
|
||||
packages/bus/tests/revoke-window.test.mjs:13:import { Broker } from '../src/broker.mjs';
|
||||
packages/webui/tests/bus.test.mjs:13:import { Broker } from '../../bus/src/broker.mjs';
|
||||
packages/bus/tests/viewer.test.mjs:13: Broker, ACTIONS, USER_VERBS, VIEWER_VERBS, BOARD_VERBS, TESTER_VERBS, TESTER_ORGANIZATION_VERBS, PROJECT_FILE_VERBS,
|
||||
packages/bus/tests/viewer.test.mjs:14:} from '../src/broker.mjs';
|
||||
packages/bus/tests/viewer.test.mjs:116: const others = new Set([...ACTIONS, ...TESTER_VERBS, ...TESTER_ORGANIZATION_VERBS, ...PROJECT_FILE_VERBS, ...BOARD_VERBS, 'no.such.verb']);
|
||||
packages/webui/tests/tester-fixture.mjs:12:import { Broker, BusError } from '../../bus/src/broker.mjs';
|
||||
packages/webui/tests/routes.test.mjs:12:import { BusError } from '../../bus/src/broker.mjs';
|
||||
packages/webui/tests/chat.test.mjs:191: const { Broker } = await import('../../bus/src/broker.mjs');
|
||||
packages/webui/tests/bus-browser.test.mjs:11:import { Broker } from '../../bus/src/broker.mjs';
|
||||
@@ -1,56 +0,0 @@
|
||||
# Row 326 / #1822 — five run-sheet gaps
|
||||
|
||||
Goldie, 2026-10-24. Branch goldie/row-run-sheet in /home/jwoltje/.t3/worktrees/mosaic-stack/goldie-row-run-sheet. Base local refactor4ec279dc43922b338a94718a2afdaba87ef89c15, explicitly assigned by sage-3893. Brief docs/plans/2026-10-24_run-sheet-doc-brief.md at4ec279dc4, blobce3e24fa, section Brief: five run-sheet gaps. Reviewer Gladstone; Sage posts review and owns landing/full gate.
|
||||
|
||||
## Before / after and choices
|
||||
|
||||
Before: the sheet omitted proof bytes/newline handling, treated render refusal without distinguishing metadata/content, omitted missing-project warning consequences and a pre-install key check, offered no first-install retry form, and omitted the bus-relative backup checksum form.
|
||||
|
||||
After: the sheet covers all five cases in their existing sections6/9. Numbered section headings are unchanged. Only this BUILD.md and docs/guides/host-run-sheet.md are edited, per the brief's explicit two-file boundary. Session/build-phase registration and the manifest are recorded here rather than adding changes to SESSIONS.md, BUILD-LOG.md or a third manifest file. No host action or credential read. No suite or product command executed, and no CLEAR needed for this doc-only row (decision137).
|
||||
|
||||
| Gap / claim | Source read and how it supports the text |
|
||||
| --- | --- |
|
||||
| Proof format, optional LF | webui/src/serve.mjs:257-267 opens no-follow, checks regular/uid/mode600-or400, strips exactly one trailing LF at263, then requires32+ ASCII base64url chars at264. Table states the allowed alphabet and one optional trailing LF. Extra newline/CR is outside that alphabet. |
|
||||
| Render versus start | case2-unit.sh:397-408 explicitly stats/realpaths the proof and never opens it. webui/src/serve.mjs:267 throws the content error; webui/src/cli.mjs:138-140 catches and sets exit2. Table now distinguishes metadata refusal at render from bad bytes at Console start. |
|
||||
| Missing project warning | business/src/cli.mjs:74-78 reports absent plus the no-project-variables warning, then continues. case2-install.sh:217-221 captures validate output and prints business-validates on success. Text makes that incomplete install possible and tells operators to stop on the missing-file warning, per Duckworth row323 N2. |
|
||||
| Pre-install key check | business/src/cli.mjs:71-82 checks every file-backed project, skips kind library, and requires loaded id==business key at80. Read-only inline Node uses only builtins and section2's pinned node, as mosaic. It reads the exact intended business input and files under each project's root, prints a match, and exits nonzero with STOP for read/JSON/id failure. Expected .53 output comes from .mosaic/project.json:3 and case1-business.mosaic-stack.json:10-11. Fixing business rather than project id is mos-1563. |
|
||||
| Why check before install | case2-install.sh:178 makes the copy before validation at217. New check is explicitly before case2-install.sh and needs no existing Mosaic config, npm modules or installed wrapper. |
|
||||
| Refused first-install residue | case2-install.sh:172/174 creates/bootstraps the config; bootstrap.sh:13 dispatches to mosaic-config.mjs, whose412-424 creates config.json or validates an existing one without rewriting it. case2-install.sh:200-211 may create businesses/file and library slots. case2-persona-import.mjs:300-308 may create library personas. Validation cleanup at case2-install.sh:217-219 removes only this run's new business file, retaining dirs. Copy may already exist under the path at install:80/178; stack-copy.sh:68 reuses an existing copy. |
|
||||
| Retry paths / refs | Mos-1565/ops-0291, as pinned in the brief, names exactly root checkout, mosaic clone and default config dir to move aside. UTC-suffixed mv is root-only documentation; no delete, chown or chmod. Destination collision/move failure prints STOP. Retry starts section6's first-install block again. The existing upgrade fetch targets only refs/remotes/origin/refactor; stack-copy.sh:44-48 requires reachability from both it and refs/heads/refactor. |
|
||||
| Credential re-placement | Existing sheet section9 names claude-session.env, library proof and library-gitea with owner/mode. Moving config aside preserves them but the new config needs Jason to re-place any already-filled files, under mos-1565. Existing per-agent slots still require credentials issue/Approve, never hand placement. No value or command to read a credential added. |
|
||||
| Backup hand check | stack-release.sh:475-482 creates activation/bus and writes SHA256SUMS from inside bus. restore at502 and rehearsal at2244 cd bus and check ../SHA256SUMS. New hand command does the same as mosaic, without --quiet so the expected bus.sqlite:OK is visible; ops-0292 records why checking in activation itself fails. |
|
||||
|
||||
## Read-only grep gate
|
||||
|
||||
Executed after editing, with no test/suite run:
|
||||
|
||||
```
|
||||
git grep -n host-run-sheet -- 'packages/*/tests/*' 'scripts/*'
|
||||
# no output, exit1
|
||||
|
||||
git grep -n case1-business.mosaic-stack.json -- 'packages/*/tests/*' 'scripts/*'
|
||||
packages/business/tests/case1-business-file.test.mjs:13:const DOCUMENT = join(REPO, "docs/guides/case1-business.mosaic-stack.json");
|
||||
packages/business/tests/case1-project-key.test.mjs:9:const CASE1 = join(REPO, "docs/guides/case1-business.mosaic-stack.json");
|
||||
# exit0: positive control, same command form, both tests read this document
|
||||
|
||||
git grep -n -E '(host-run-sheet.*[0-9a-f]{64}|[0-9a-f]{64}.*host-run-sheet)' -- 'packages/*/tests/*'
|
||||
# no output, exit1: no 64-hex test pin beside the sheet name
|
||||
```
|
||||
|
||||
An earlier positive control with case2-install.sh also found the real installer spawn in case1-business-file.test.mjs:39 and the CLI installer tests. The sheet-name search finds no reference at all in tests/scripts, stronger than just finding no same-line pin. No read/pin blocker.
|
||||
|
||||
Static syntax only: extracted the three new shell snippets, replaced only the version placeholder for parsing, and ran bash-n3/3. Extracted Node heredoc parsed with node --check --input-type=module. No snippet body executed. git diff --check passes. Source citations checked against this base; no new em dash and section numbering unchanged.
|
||||
|
||||
## Session / claimant receipt
|
||||
|
||||
2026-10-24 | Goldie a13dd6d5-5e73-4b7d-8318-02abeff24940 | Row326/#1822 doc-only build | Five gaps documented with source lines and grep control; no suites/host/credential action. Claim goldie-0326-start-1 rev3793, briefed→in-progress. In-review follows the pushed candidate; expected tokenless pre-send failure will be handed to Sage.
|
||||
|
||||
## Inline manifest
|
||||
|
||||
Only the sheet needs a content pin; BUILD.md is this receipt in the same candidate commit. An inline manifest honors the brief's two-file limit:
|
||||
|
||||
```
|
||||
e4c14516edff3bfbc81ea553a5a6ccebb6154942473540659d4681c2d56c9711 docs/guides/host-run-sheet.md
|
||||
```
|
||||
|
||||
Reviewer validates the five source chains and operational order. Sage's landing gate owns suites. No code row265 work started; its brief comes separately.
|
||||
@@ -1,10 +0,0 @@
|
||||
# Gyro
|
||||
|
||||
Builder seat, Codex gpt-6.1-sol, started by Sage under Q246 and mos-1571, as the W2 brief names. Owns row 310, O2 W2:
|
||||
the WordCraft source import and reproducible restricted web build (docs/plans/2026-10-21_q195-writing-editor.md,
|
||||
"W2 WordCraft source import and reproducible restricted web build").
|
||||
|
||||
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 `gyro/*` branches through the repository credential helper (mos-0981), never `refactor`,
|
||||
`main` or another seat's branch. Claude seats orchestrate and give the Opus 5.5 landing review (mos-1571). Registered by
|
||||
Sage on 2026-10-24 so the queue can name the seat as row owner (store.mjs isSeatDir).
|
||||
@@ -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'
|
||||
}
|
||||
@@ -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
@@ -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
|
||||
@@ -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'
|
||||
}
|
||||
@@ -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))
|
||||
Loaded 100 of 176 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user