Compare commits

..
116 changed files with 20942 additions and 2675 deletions

No files matched your search

+6 -1
View File
@@ -5554,4 +5554,9 @@ claim. Receipts and limitations in agents/lena/work/queue-296/BUILD.md and run-r
2026-10-24T15:55:22Z | Sage | Row 225 (#1726, C2-10b, Fethry on Codex, Dewey) LANDED 9b6345466. Before: refactor at c63801959. After: Fethry's r2 candidate c1f9dfd3c (11 commits on 963303403) cherry-picked onto c63801959. 8 commits are equal by range-diff; the other 3 differ only in the append-only log hunks, kept both sides with 0 lines removed against either parent. All 13 manifest paths match manifest.r2.sha256 (517af41b). Dewey APPROVE c31599 rev 3960; request c31600 revs 3961-3962, posted by Sage because Fethry has no token. Sage gate GREEN 15:54:58Z with its own npm ci and MOSAIC_REQUIRE_EDITOR_BUILD=1: every package suite except queue 0 fail (webui 442, library 149, bus 981, cli 988 plus the allow-listed FED R7 skip, whose runner passed 1/1), all 12 scripts rc 0. The excluded M3 timeout attempt was not counted; the unchanged retry killed cleanly. Dewey N1-N3 non-blocking: the Discord relay must pass check once it calls renderReply; the M3 hang was in the new status test's after-hook teardown; the pre-217 residual stands under sage-3669. #1726 closed c31604. Not re-pinned.
2026-10-24T16:12:35Z | Sage | Row 287 (#1792, C2-21, Steelbeak on Codex, Boyd and Dewey) LANDED 0e935776e. Before: refactor at 9b6345466. After: Steelbeak's c2338ed58 and doc follow-up a5370b198 cherry-picked onto 9b6345466. One commit equal by range-diff, the other differs only in log hunks, kept both sides. 56 manifest paths match 3683b40a. Boyd APPROVE c31602 rev 3967, Dewey APPROVE c31603 rev 3968; request c31601 revs 3965-3966 posted by Sage. Sage gate GREEN 16:11:38Z: bus 998 (Gitea Docker F-A/F-B and X-G3, minted 4, hits 0), business 283, webui 442, cli 989 plus the allowed FED R7 skip, every other suite 0 fail, all 12 scripts rc 0; fixture credential values in 0 of 29 run files with a positive control. Rulings applied: sage-4125 (library grants mint declared scopes, chief read), mos-1590 (new-test fixture fixes are the lead's call when no production code or old test changes and every fail-closed refusal keeps its own test), sage-4139 (fixture fixes) and sage-4141 (test-land-work.sh is mode 100644, run via bash). Follow-up: F-C negative, a protected Story/** rule refuses the owner too; binds the first row that needs owner pushes to a protected branch. Dewey N1-N3 non-blocking: the block's last line "can write every repository this user can write" contradicts the chief's read grant; a collaborator entry outlives a failed step 5, which still fails closed; #publishFacts would accept a library project, unreachable today. Closes Dewey's 286 r2 N2 (T7/T9 real mint). #1792 closed c31606. Not re-pinned.
2026-10-24T22:15:07Z | Herb | row 214 #1715 C2-11a focused evidence | Before: wikilinks are ordinary editor text; raw/sig retention keeps no-edit bytes, but the model has no inert node. After: inert inline wikilink atom preserves spelling through neighbouring edits; invalid attrs share HTML/entity escaping. On herb/row214-r2 base487500a16, grant sage-4286 lane B: baseline10/10 roundTrips equal (outcome A); baseline structural0/1 expected red; four whole editor files40/0, both mutants killed0/1 and restored1/0, whole webui69 files455/0 in174.189s with MOSAIC_REQUIRE_EDITOR_BUILD=1, nice19, no skips/cancellations. A mistaken preliminary7-file subset28/0 is logged and excluded from gate evidence. CSS byte-identical, final process sweep0, scratch TMPDIR removed. Filbert candidate review and every scripts/test-*.sh gate remain pending; no click, target resolution or library save change.
2026-10-24 | Fethry | Row266 C2-10c start (#1771), sage4154/4156. Before: Console seam/plugin only expose thread verbs; room.read omits check/last needed by225. New isolated worktree on487500a16, amended pin85e6fe2ecfc5. Plan: three fixed room calls, strict room HTTP, merged room UI and leading-@ completion, shared broker check hydration/last only under amendment1. No old tests or out-of-scope production edits; local installs/no canonical links; RED-first and serialized full webui/plugins/bus/scripts plus mutants under CLEAR. Detailed design/acceptance in agent BUILD.md.
2026-10-24 | Fethry | Row266 implementation verified before candidate commit. Six owned production paths plus four new tests, no old tests edited. RED history and fixture corrections recorded before action. Editor build, webui458/0, plugins120/0, bus1000/0 and all12 scripts exit0. Initial bus999/1 hit old T9 50ms timer race; sage4158 authorized three unchanged credential-file6/0 reruns and whole bus1000/0 rerun, all green. Raw/normalized TAP provenance retained. Candidate/mutants/review next; no landing claim.
2026-10-24 | Fethry | Row266 final verification: candidate3095d6ea5, manifest5f816042 (10 package paths, no old-test edit). All16 isolated mutants killed by assertions with restored hashes and unchanged candidate. Initial M01 uncaught plugin refusal excluded, strengthened only new doesNotReject assertion and full plugins120/0 rerun. Final cwd node/Chromium sweep empty, killpg cleanup recorded. Full webui458/0, plugins120/0, bus1000/0, all12 scripts0; earlier T9 race plus four unchanged green reruns retained. Push/review packet next; Sage gate and two reviews remain.
+144
View File
@@ -0,0 +1,144 @@
# Row266 C2-10c — Console rooms (#1771)
Fethry14f80e3c, branch fethry/row266, NEW worktree /home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266.
Original base962046aaa; fast-forwarded to doc-only487500a16 per sage4156. Both225 branches untouched.
Pinned amended brief85e6fe2ecfc5, C2-10c; prior3a5ed91a had identical section but stale whole-file pin.
Review order Boyd48a3ae38 then Dewey84fb346c; Sage owns landing. No token/other-seat credential access.
Slot CLEAR sage4154 lasts until returned. Local root/webui npm ci, no dependency links.
TMPDIR=/mnt/storage/scratch/tmp/KV9rHb, MOSAIC_REQUIRE_EDITOR_BUILD=1. Implementation and targeted checks complete; full gate in progress.
## Current code and resolved seam
- chat.mjs is the channel-gated fixed-verb seam. Add roomOpen({project}), roomRead({project,after,limit}),
roomSend({project,body}), exactly one matching room verb each. Never fetch thread.messages to hydrate rooms.
- chat-http.mjs already provides signed-in/send/Origin/Fetch Metadata, bounded JSON, strict keys, safe
error text, audit and outcome-unknown handling. Extend it with POST rooms/PROJECT/open {},
GET rooms/PROJECT/messages ?after&limit, POST same messages {body}. Four room codes map409 and fixed lines.
Open returns {project,threads}; send returns {ids,to}; read returns {rows,after,hasMore,at}.
Room cursor is the LAST id in the final entry.ids, not the first entry.id; the broker groups human sends.
- webui plugin needs exactly room.open/read/send in its allowlist, still rejecting arbitrary verbs.
- /api/chat/instances already returns threaded instance keys and persona.name labels. No serve.mjs edit.
- room.open returns canonical member threads; room.read returns one merged human entry with ids/to.
Read-only GET must never open/create a room or wake an agent. No implicit retry of any write.
- Amendment1 (sage4156): broker.mjs is owned only for shared check-event hydration and routing room.read
through #withLast under the same condition as thread.messages. The missing check would otherwise
hide badges AND reopen225's forged-notice defect. No other broker verb/refusal/field changes.
## Design and implementation plan
1. New plugin, HTTP/seam, bus metadata and browser files first; run whole new files RED, report
first-run results per mos1272/1590, correct only demonstrably wrong NEW fixtures. No old test edits.
2. Add the three plugin/seam calls and strict HTTP room routes/receipt validation. Reuse existing
principal/write fences. Owner room verbs stay human-only; hide controls from granted users/testers,
and never route a call through an owner transport for them.
3. In broker, extract #withCheck(row), call it for thread messages and each final merged room entry;
extend the existing last-routing condition to room.read. Test real checked reply parity, unchecked
absence and unchanged merged human entry across two members. No broker room.open/send changes.
4. Add /chat/rooms/PROJECT route inside chat.js, sharing its current state, generation/abort handling,
capture/paint/scroll preservation and225 message renderer. Project view gets explicit Open room;
direct room GET only reads and offers Open on room-not-open. Names come from instances catalog,
membership from canonical room threads, with server room.read authoritative. Quiet members stay
available for completion. Human entries display once, with all broker addressees; no client regrouping.
5. Completion parses leading @ tokens with the exact broker grammar and its existing case vectors.
Display typed tags in a preview; use that production tag reader for completion and browser parity.
Suggest members by instance/name, insert the stable instance token, preserve unrelated text/caret.
Arrow keys/Enter/Tab/Escape and click work; labels/text remain escaped and bidi/control inert.
Browser sends original typed body, never a client-selected addressee list. Broker409 lines are fixed.
6. Whole webui/plugins/bus (touched) suites, all12 scripts/test-*.sh under timeout -k10, then isolated
mutants. No live-provider calls (MOSAIC_LIVE_PROVIDER unset). New worker/temp process groups get
killpg cleanup and cwd/Chromium sweep; never touch another seat's processes. Record every red.
7. Hash-pin audit by source path AND old64-hex digest for chat.js/chat-http.mjs/channel module before
in-review. Freeze manifest, push fethry/* only, owner queue move in-review, handoff Boyd+Sage with
candidate/digest; Sage posts because this seat has no Gitea token. No force push, merge or deploy.
Acceptance focus: grouped paging cursor, one entry for a broadcast even across two threads, quiet
member completion and parser parity, checked reply badges/notice safety, malformed receipts/unknown
outcomes,4 refusal codes, no read-side mutation, late reads/sign-out and project draft isolation.
Boundary rules: old-test red, any production path beyond the owned set/amendment, or weakened
assertion goes to Sage BEFORE action. New-file first red is reported then fixture corrected.
## Targeted RED/GREEN receipts (2026-10-24)
Start op fethry-266-start succeeded rev3978 after sage4156's re-pin; old-pin refusal wrote nothing.
First whole NEW files RED: plugin0/1,HTTP0/5,bus1/1,browser0/7, all intended missing-feature paths;
reported fethry0028 before production. Component GREEN plugin1/0,HTTP5/0,bus2/0. Browser5/2 exposed a
missing submit branch in our new room event dispatcher; reported fethry0029, fixed only that branch,
then browser7/0. No fixture/assertion changed to fix production behavior.
Boundary coverage added before full gate: malformed numeric member key was accepted by regex
coercion (new HTTP6/1, fethry0030); required string and unique group ids/addressees, now HTTP7/0.
New browser assertions use fresh send ids and read back exactly one broadcast entry. Expanded run8/1
exposed a nested quote in our new runtime CSS selector; reported fethry0031 BEFORE fixing fixture
with JSON.stringify, same exact count=1 assertion retained. Final browser9/0,4864.326ms, with quiet
member Arrow/Tab/Escape, raw body preservation, no duplicate pending send, uncertain draft, parser
vectors, all4 refusal lines, checked reply/cite/notice safety and late-read/sign-out coverage.
No pre-existing test/helper edit and no assertion loosened. Production set is precisely six brief-
owned paths including the narrow broker amendment. All red/green raw logs under unique TMPDIR.
Full gate now runs run-gate.py: local editor build, whole webui/plugins/bus then all12 test scripts,
serial timeout -k10, per-test30s, MOSAIC_REQUIRE_EDITOR_BUILD=1; live-provider env removed. Each step
has its own process group and killpg cleanup, with signals recorded. Any failure stops for report.
## Full gate first pass
Editor build exit0; whole webui458/0 (270.066s), plugins120/0 (.866s), no skips/cancels.
Bus999/1 (132.9s): OLD library-credential.test.mjs T9 at317 expected library-fetch-no-grant,
received library-sync-busy. Reported fethry0032 before changes. No old test/source change.
Read-only diagnosis: fixture starts a50ms periodic sync; waiting for a completed log does not
prevent the next tick from acquiring running(mirror) before the manual sync. Existing sync.mjs140
checks running before credential refusal. Row266 touches neither timer nor sync implementation.
All12 scripts continue independently; rerun/ruling requested from Sage. Raw bus-full.tap and
gate-summary.json remain in the scratch directory, preserving the red evidence.
Sage4158 confirms the pre-existing50ms T9 timer race and authorizes three unchanged whole-file
credential runs followed by one unchanged whole bus run. Any recurring T9 red stops for Sage;
no fixture or production patch is authorized. The12-script runner proceeds serially first.
All12 scripts/test-*.sh exited0 (scripts-summary.json). Queue's156 tests pass; wrapper28/0
and explicitly skips canonical queue verify/render checks in an isolated worktree. Task92/0
uses existing row244 live-provider exclusions, with MOSAIC_LIVE_PROVIDER unset. No script edited.
Three unchanged whole credential-file reruns under sage4158 each pass6/0 without skips/cancels,
1.367s each wall clock. Full unchanged bus rerun is next/running.
Pin audit before in-review: source paths/basenames and old/current64hex values for chat.js,
chat-http.mjs and channel/webui/index.mjs searched across package/script tests. No literal old
or current digest pin. The10 frozen package hashes include all six production paths and four
new test files; no existing test diff. sha256sum -c passes on all10.
Unchanged full bus rerun GREEN1000/0, no skips/cancels,142.919s. T9 passes. This completes
sage4158's four unchanged green reruns (credential6/0 three times, bus1000/0 once) after the
initial999/1. Preserve all five TAPs. Pre-existing T9 timer race is Sage's follow-up, no source
or old test changed for it. Full applicable suites and12 scripts are green; mutants next.
Evidence display copies strip trailing whitespace only; raw-log-provenance.json records original
paths and both digests. All10 package hashes remain unchanged from full-suite verification.
Source candidate b8b26ae4d. First M01 attempt removed plugin room.open and deterministically
refused channel-operation, but the strict assertion-only classifier did not count the uncaught
PluginError. Restored hash and candidate unchanged. Reported fethry0033 BEFORE strengthening
only the NEW room-channel test with doesNotReject; exact receipt/call assertions retained.
Whole plugins rerun120/0, no skips/cancels. Only that new test hash changes in manifest.r1;
all production hashes, HTTP/bus/browser tests and prior suite coverage remain identical.
Excluded M01 TAP/summary preserved under evidence/mutants-r1, not a killed-mutant claim.
## Final candidate and mutant verification
Tested source3095d6ea5 (b8b26ae4d plus assertion-strengthening new-test follow-up). All16
isolated mutants killed by assertions, exit1 with ERR_ASSERTION, zero skips/cancels, one anchor
each, hash restored after each, candidate hashes unchanged. Evidence/mutants-r2/summary.json
records every result. Initial excluded M01 remains separate. No timeout/error counted as a kill.
All gate/mutant commands bounded with timeout -k10; runner-owned groups cleaned using killpg.
Final /proc sweep finds zero node/Chromium processes with this worktree cwd or command path;
process-sweep.json records it. No other seat process touched.
Final manifest.r1 SHA256:5f816042792b24b790d4faa5bfdc35a8138225819f85d9d32ae49ba8a2de033f,
10 package files. Six production paths, four NEW test paths, zero pre-existing test edits.
No production/source change after suite verification; only the new plugin assertion strengthened
and full plugins rerun120/0. Final static diff and manifest checks pass. Slot can return.
Review first Boyd, then Dewey; Sage owns review-request credential and landing.
Canonical owner move fethry-266-inreview succeeded rev3979: row266 in-review round1 #1771,
frozen manifest5f816042. Review request outcome rev3980 failed solely because
MOSAIC_GITEA_CREDENTIAL_FILE is unset; no credential file read or alternate credential used.
Sage must post the arranged review request. Boyd received direct candidate handoff fethry0035.
Initial duplicate handoff to Sage timed out in T3 metadata GET; retry via outcome report0036.
+34
View File
@@ -0,0 +1,34 @@
# Row266 review packet — Console rooms (#1771)
Owner Fethry14f80e3c; first reviewer Boyd48a3ae38, second Dewey84fb346c.
Base487500a16, pinned amended brief85e6fe2ecfc5. Sage owns gate and landing.
The owner Console has an explicit Open room action and a merged project timeline. Human broadcasts
show once with the broker's addressees; agent rows use the shared225 reply renderer including stored
check metadata, badges, changed-file labels and safe notices. Completion suggests quiet and active room
members and follows the broker's leading-tag grammar. The original body goes to room.send.
The seam has exactly three room calls, and no thread.messages fanout. Four room refusals map to409
with fixed lines. Read-only routes never open rooms. Writes retain existing authority/Origin fences,
strict arguments, receipt validation, draft preservation and no automatic retry after uncertainty.
manifest.r1.sha256 freezes exactly10 package paths: six production files and four NEW test files.
No pre-existing test is edited. Check with sha256sum -c from the repository root. The only brief
amendment is sage4156's narrow broker helper/check/last hydration for room.read; room.open/send and
other broker fields/refusals remain unchanged. Other changes are append-only session/build records
and this tracking packet. No queue JSON, role, policy, secret or generated editor asset changes.
Evidence and RED/GREEN history are in BUILD.md. Full suites/scripts are green; all16 isolated mutants are killed by assertions on source3095d6ea5. The initial
full bus999/1 is the pre-existing T9 timer race, reported before action; unchanged reruns authorized
by sage4158 all pass: credential6/0 three times, bus1000/0 once. Webui458/0, plugins120/0,
all12 scripts exit0. Queue wrapper skips canonical-only verify/render, and task retains the
row244 live-provider exclusions. No test-runner skips/cancellations in package suites. Full plugins120/0 rerun after strengthening
the new dispatch assertion. All16 one-anchor mutants restore and preserve candidate hashes; initial
M01 uncaught-refusal attempt is explicitly excluded. Final own-cwd node/Chromium sweep is empty. Review must consider every run, including the red.
Pin audit: pin-audit-before.txt and pin-audit-after.txt search source paths/basenames and64-hex old
and new digests across tests. No literal digest pin needs updating for any of the three named files.
Review focus: grouped paging cursor, no body-based client regrouping, quiet membership/completion,
raw body preservation, checked/unchecked renderer trust, grant/tester refusal, pending/uncertain writes,
late reads/sign-out and strictly scoped broker hydration.
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
@@ -1,4 +1,5 @@
# grant sage-4286; nice 19; TMPDIR /mnt/storage/scratch/tmp/g49X; MOSAIC_REQUIRE_EDITOR_BUILD 1
npm notice run @mosaic/[email protected] build:editor
npm notice run node editor/build.mjs
▲ [WARNING] Ignoring this import because "third_party/editor/prosemirror-transform/src/mark.ts" was marked as having no side effects [ignored-bare-import]
third_party/editor/prosemirror-transform/src/index.ts:10:7:
@@ -11,5 +12,5 @@
13 │ "sideEffects": false,
╵ ~~~~~~~~~~~~~
editor.js bf55e22b945eda1e51ecbe9185eadd9ff21a7902713b24417ed7d697c7347bba (133 inputs)
editor.js 9c881b13740fae2408717ad75fa1d85bfcfe3fa8b3af0f1b3f2e706c90e80fee (133 inputs)
editor.css 8654ac57d1e7a561110138ecd7f701c34a074017ff8c4cd2768d8083908ee61f
@@ -0,0 +1,63 @@
[
{
"step": "editor-build",
"command": [
"npm",
"run",
"build:editor"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/webui",
"outerSeconds": 120,
"exit": 0,
"seconds": 0.214,
"cleanupSignals": []
},
{
"step": "webui-full",
"command": [
"node",
"--test",
"--test-reporter=tap",
"--test-concurrency=1",
"--test-timeout=30000",
"packages/webui/tests/"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266",
"outerSeconds": 900,
"exit": 0,
"seconds": 270.066,
"cleanupSignals": []
},
{
"step": "plugins-full",
"command": [
"node",
"--test",
"--test-reporter=tap",
"--test-concurrency=1",
"--test-timeout=30000",
"packages/plugins/tests/"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266",
"outerSeconds": 300,
"exit": 0,
"seconds": 0.866,
"cleanupSignals": []
},
{
"step": "bus-full",
"command": [
"node",
"--test",
"--test-reporter=tap",
"--test-concurrency=1",
"--test-timeout=30000",
"packages/bus/tests/"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266",
"outerSeconds": 1200,
"exit": 1,
"seconds": 132.9,
"cleanupSignals": []
}
]
@@ -0,0 +1,28 @@
TAP version 13
# Subtest: C2-10c webui permits exactly the three added room verbs and preserves core refusals
not ok 1 - C2-10c webui permits exactly the three added room verbs and preserves core refusals
---
duration_ms: 0.698734
type: 'test'
location: '/mnt/storage/scratch/tmp/KV9rHb/fethry266-mutants-nwewtdks/M01-plugin/packages/plugins/tests/room-channel.test.mjs:5:1'
failureType: 'testCodeFailure'
error: 'unsupported channel operation'
code: 'channel-operation'
name: 'PluginError'
stack: |-
dispatch (file:///mnt/storage/scratch/tmp/KV9rHb/fethry266-mutants-nwewtdks/M01-plugin/packages/plugins/channel/webui/index.mjs:25:31)
TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/KV9rHb/fethry266-mutants-nwewtdks/M01-plugin/packages/plugins/tests/room-channel.test.mjs:8:28)
Test.runInAsyncScope (node:async_hooks:226:14)
Test.run (node:internal/test_runner/test:1402:25)
Test.start (node:internal/test_runner/test:1262:17)
startSubtestAfterBootstrap (node:internal/test_runner/harness:387:17)
...
1..1
# tests 1
# suites 0
# pass 0
# fail 1
# cancelled 0
# skipped 0
# todo 0
# duration_ms 45.47515
@@ -0,0 +1,35 @@
{
"source": "b8b26ae4d2b440cd14959c4e792baa4b068964e4",
"selected": [
"M01-plugin",
"M02-seam-body",
"M03-page-cursor",
"M04-room-status",
"M05-strict-body",
"M06-receipt-type",
"M07-room-check",
"M08-room-last",
"M09-browser-body",
"M10-members",
"M11-checked-render",
"M12-leading-tags",
"M13-readonly",
"M14-uncertainty",
"M15-pending",
"M16-body-dedup"
],
"candidateUnchanged": true,
"results": [
{
"mutant": "M01-plugin",
"test": "packages/plugins/tests/room-channel.test.mjs",
"exit": 1,
"killed": false,
"hits": 1,
"restored": true,
"candidateUnchanged": true,
"seconds": 0.115,
"cleanupSignals": []
}
]
}
@@ -0,0 +1,40 @@
TAP version 13
# Subtest: C2-10c webui permits exactly the three added room verbs and preserves core refusals
not ok 1 - C2-10c webui permits exactly the three added room verbs and preserves core refusals
---
duration_ms: 1.157584
type: 'test'
location: '/mnt/storage/scratch/tmp/KV9rHb/fethry266-mutants-32bmgm_x/M01-plugin/packages/plugins/tests/room-channel.test.mjs:5:1'
failureType: 'testCodeFailure'
error: |-
Got unwanted rejection.
Actual message: "unsupported channel operation"
code: 'ERR_ASSERTION'
name: 'AssertionError'
actual:
error: 'unsupported channel operation'
stack: |-
dispatch (file:///mnt/storage/scratch/tmp/KV9rHb/fethry266-mutants-32bmgm_x/M01-plugin/packages/plugins/channel/webui/index.mjs:25:31)
file:///mnt/storage/scratch/tmp/KV9rHb/fethry266-mutants-32bmgm_x/M01-plugin/packages/plugins/tests/room-channel.test.mjs:9:62
waitForActual (node:assert:601:21)
strict.doesNotReject (node:assert:758:39)
TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/KV9rHb/fethry266-mutants-32bmgm_x/M01-plugin/packages/plugins/tests/room-channel.test.mjs:9:18)
Test.runInAsyncScope (node:async_hooks:226:14)
Test.run (node:internal/test_runner/test:1402:25)
Test.start (node:internal/test_runner/test:1262:17)
startSubtestAfterBootstrap (node:internal/test_runner/harness:387:17)
operator: 'doesNotReject'
stack: |-
async TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/KV9rHb/fethry266-mutants-32bmgm_x/M01-plugin/packages/plugins/tests/room-channel.test.mjs:9:5)
async Test.run (node:internal/test_runner/test:1409:7)
async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3)
...
1..1
# tests 1
# suites 0
# pass 0
# fail 1
# cancelled 0
# skipped 0
# todo 0
# duration_ms 52.924783
@@ -0,0 +1,126 @@
TAP version 13
# Subtest: C2-10c seam exposes three fixed room calls without thread.messages fanout
not ok 1 - C2-10c seam exposes three fixed room calls without thread.messages fanout
---
duration_ms: 11.868254
type: 'test'
location: '/mnt/storage/scratch/tmp/KV9rHb/fethry266-mutants-32bmgm_x/M02-seam-body/packages/webui/tests/room-http.test.mjs:34:1'
failureType: 'testCodeFailure'
error: |-
Expected values to be strictly deep-equal:
+ actual - expected
[
'room.send',
{
+ body: '@bean exact\ntext',
- body: '@bean exact\ntext ',
project: '10000000-0000-4000-8000-000000000001'
}
]
code: 'ERR_ASSERTION'
name: 'AssertionError'
expected:
0: 'room.send'
1:
project: '10000000-0000-4000-8000-000000000001'
body: |-
@bean exact
text
actual:
0: 'room.send'
1:
project: '10000000-0000-4000-8000-000000000001'
body: |-
@bean exact
text
operator: 'deepStrictEqual'
stack: |-
TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/KV9rHb/fethry266-mutants-32bmgm_x/M02-seam-body/packages/webui/tests/room-http.test.mjs:40:12)
process.processTicksAndRejections (node:internal/process/task_queues:104:5)
async Test.run (node:internal/test_runner/test:1409:7)
async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3)
...
# Subtest: C2-10c HTTP preserves original send, member receipt and the last grouped paging id
not ok 2 - C2-10c HTTP preserves original send, member receipt and the last grouped paging id
---
duration_ms: 12.337405
type: 'test'
location: '/mnt/storage/scratch/tmp/KV9rHb/fethry266-mutants-32bmgm_x/M02-seam-body/packages/webui/tests/room-http.test.mjs:44:1'
failureType: 'testCodeFailure'
error: |-
Expected values to be strictly deep-equal:
+ actual - expected
[
'room.send',
{
+ body: '@bean\n exact text',
- body: ' \t@bean\n exact text ',
project: '10000000-0000-4000-8000-000000000001'
}
]
code: 'ERR_ASSERTION'
name: 'AssertionError'
expected:
0: 'room.send'
1:
project: '10000000-0000-4000-8000-000000000001'
body: |-
@bean
exact text
actual:
0: 'room.send'
1:
project: '10000000-0000-4000-8000-000000000001'
body: |-
@bean
exact text
operator: 'deepStrictEqual'
stack: |-
TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/KV9rHb/fethry266-mutants-32bmgm_x/M02-seam-body/packages/webui/tests/room-http.test.mjs:54:10)
process.processTicksAndRejections (node:internal/process/task_queues:104:5)
async Test.run (node:internal/test_runner/test:1409:7)
async Test.processPendingSubtests (node:internal/test_runner/test:974:7)
...
# Subtest: C2-10c room write fences and strict keys reject before transport
ok 3 - C2-10c room write fences and strict keys reject before transport
---
duration_ms: 10.902017
type: 'test'
...
# Subtest: C2-10c all four room refusals are409 with fixed text, never transport prose
ok 4 - C2-10c all four room refusals are409 with fixed text, never transport prose
---
duration_ms: 3.766834
type: 'test'
...
# Subtest: C2-10c malformed/lost write receipts are unknown and never retried
ok 5 - C2-10c malformed/lost write receipts are unknown and never retried
---
duration_ms: 3.752149
type: 'test'
...
# Subtest: C2-10c room receipts reject coerced member keys and duplicate grouped ids
ok 6 - C2-10c room receipts reject coerced member keys and duplicate grouped ids
---
duration_ms: 2.085047
type: 'test'
...
# Subtest: C2-10c granted-user room calls never borrow the owner transport
ok 7 - C2-10c granted-user room calls never borrow the owner transport
---
duration_ms: 0.823543
type: 'test'
...
1..7
# tests 7
# suites 0
# pass 5
# fail 2
# cancelled 0
# skipped 0
# todo 0
# duration_ms 164.309887
@@ -0,0 +1,72 @@
TAP version 13
# Subtest: C2-10c seam exposes three fixed room calls without thread.messages fanout
ok 1 - C2-10c seam exposes three fixed room calls without thread.messages fanout
---
duration_ms: 11.193494
type: 'test'
...
# Subtest: C2-10c HTTP preserves original send, member receipt and the last grouped paging id
not ok 2 - C2-10c HTTP preserves original send, member receipt and the last grouped paging id
---
duration_ms: 13.394594
type: 'test'
location: '/mnt/storage/scratch/tmp/KV9rHb/fethry266-mutants-32bmgm_x/M03-page-cursor/packages/webui/tests/room-http.test.mjs:44:1'
failureType: 'testCodeFailure'
error: |-
Expected values to be strictly equal:
+ actual - expected
+ '30000000-0000-4000-8000-000000000001'
- '30000000-0000-4000-8000-000000000002'
^
code: 'ERR_ASSERTION'
name: 'AssertionError'
expected: '30000000-0000-4000-8000-000000000002'
actual: '30000000-0000-4000-8000-000000000001'
operator: 'strictEqual'
stack: |-
TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/KV9rHb/fethry266-mutants-32bmgm_x/M03-page-cursor/packages/webui/tests/room-http.test.mjs:58:42)
process.processTicksAndRejections (node:internal/process/task_queues:104:5)
async Test.run (node:internal/test_runner/test:1409:7)
async Test.processPendingSubtests (node:internal/test_runner/test:974:7)
...
# Subtest: C2-10c room write fences and strict keys reject before transport
ok 3 - C2-10c room write fences and strict keys reject before transport
---
duration_ms: 10.010122
type: 'test'
...
# Subtest: C2-10c all four room refusals are409 with fixed text, never transport prose
ok 4 - C2-10c all four room refusals are409 with fixed text, never transport prose
---
duration_ms: 4.569671
type: 'test'
...
# Subtest: C2-10c malformed/lost write receipts are unknown and never retried
ok 5 - C2-10c malformed/lost write receipts are unknown and never retried
---
duration_ms: 3.093316
type: 'test'
...
# Subtest: C2-10c room receipts reject coerced member keys and duplicate grouped ids
ok 6 - C2-10c room receipts reject coerced member keys and duplicate grouped ids
---
duration_ms: 2.282426
type: 'test'
...
# Subtest: C2-10c granted-user room calls never borrow the owner transport
ok 7 - C2-10c granted-user room calls never borrow the owner transport
---
duration_ms: 0.630311
type: 'test'
...
1..7
# tests 7
# suites 0
# pass 6
# fail 1
# cancelled 0
# skipped 0
# todo 0
# duration_ms 154.412627
@@ -0,0 +1,69 @@
TAP version 13
# Subtest: C2-10c seam exposes three fixed room calls without thread.messages fanout
ok 1 - C2-10c seam exposes three fixed room calls without thread.messages fanout
---
duration_ms: 10.261335
type: 'test'
...
# Subtest: C2-10c HTTP preserves original send, member receipt and the last grouped paging id
ok 2 - C2-10c HTTP preserves original send, member receipt and the last grouped paging id
---
duration_ms: 11.510403
type: 'test'
...
# Subtest: C2-10c room write fences and strict keys reject before transport
ok 3 - C2-10c room write fences and strict keys reject before transport
---
duration_ms: 9.56247
type: 'test'
...
# Subtest: C2-10c all four room refusals are409 with fixed text, never transport prose
not ok 4 - C2-10c all four room refusals are409 with fixed text, never transport prose
---
duration_ms: 2.373319
type: 'test'
location: '/mnt/storage/scratch/tmp/KV9rHb/fethry266-mutants-32bmgm_x/M04-room-status/packages/webui/tests/room-http.test.mjs:75:1'
failureType: 'testCodeFailure'
error: |-
unknown-addressee
400 !== 409
code: 'ERR_ASSERTION'
name: 'AssertionError'
expected: 409
actual: 400
operator: 'strictEqual'
stack: |-
TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/KV9rHb/fethry266-mutants-32bmgm_x/M04-room-status/packages/webui/tests/room-http.test.mjs:80:12)
process.processTicksAndRejections (node:internal/process/task_queues:104:5)
async Test.run (node:internal/test_runner/test:1409:7)
async Test.processPendingSubtests (node:internal/test_runner/test:974:7)
...
# Subtest: C2-10c malformed/lost write receipts are unknown and never retried
ok 5 - C2-10c malformed/lost write receipts are unknown and never retried
---
duration_ms: 4.132728
type: 'test'
...
# Subtest: C2-10c room receipts reject coerced member keys and duplicate grouped ids
ok 6 - C2-10c room receipts reject coerced member keys and duplicate grouped ids
---
duration_ms: 2.139569
type: 'test'
...
# Subtest: C2-10c granted-user room calls never borrow the owner transport
ok 7 - C2-10c granted-user room calls never borrow the owner transport
---
duration_ms: 0.748544
type: 'test'
...
1..7
# tests 7
# suites 0
# pass 6
# fail 1
# cancelled 0
# skipped 0
# todo 0
# duration_ms 146.718382
@@ -0,0 +1,69 @@
TAP version 13
# Subtest: C2-10c seam exposes three fixed room calls without thread.messages fanout
ok 1 - C2-10c seam exposes three fixed room calls without thread.messages fanout
---
duration_ms: 10.171183
type: 'test'
...
# Subtest: C2-10c HTTP preserves original send, member receipt and the last grouped paging id
ok 2 - C2-10c HTTP preserves original send, member receipt and the last grouped paging id
---
duration_ms: 11.711364
type: 'test'
...
# Subtest: C2-10c room write fences and strict keys reject before transport
not ok 3 - C2-10c room write fences and strict keys reject before transport
---
duration_ms: 7.485153
type: 'test'
location: '/mnt/storage/scratch/tmp/KV9rHb/fethry266-mutants-32bmgm_x/M05-strict-body/packages/webui/tests/room-http.test.mjs:62:1'
failureType: 'testCodeFailure'
error: |-
Expected values to be strictly equal:
503 !== 400
code: 'ERR_ASSERTION'
name: 'AssertionError'
expected: 400
actual: 503
operator: 'strictEqual'
stack: |-
TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/KV9rHb/fethry266-mutants-32bmgm_x/M05-strict-body/packages/webui/tests/room-http.test.mjs:68:12)
process.processTicksAndRejections (node:internal/process/task_queues:104:5)
async Test.run (node:internal/test_runner/test:1409:7)
async Test.processPendingSubtests (node:internal/test_runner/test:974:7)
...
# Subtest: C2-10c all four room refusals are409 with fixed text, never transport prose
ok 4 - C2-10c all four room refusals are409 with fixed text, never transport prose
---
duration_ms: 3.76857
type: 'test'
...
# Subtest: C2-10c malformed/lost write receipts are unknown and never retried
ok 5 - C2-10c malformed/lost write receipts are unknown and never retried
---
duration_ms: 3.713736
type: 'test'
...
# Subtest: C2-10c room receipts reject coerced member keys and duplicate grouped ids
ok 6 - C2-10c room receipts reject coerced member keys and duplicate grouped ids
---
duration_ms: 2.15552
type: 'test'
...
# Subtest: C2-10c granted-user room calls never borrow the owner transport
ok 7 - C2-10c granted-user room calls never borrow the owner transport
---
duration_ms: 0.612719
type: 'test'
...
1..7
# tests 7
# suites 0
# pass 6
# fail 1
# cancelled 0
# skipped 0
# todo 0
# duration_ms 143.474549
@@ -0,0 +1,69 @@
TAP version 13
# Subtest: C2-10c seam exposes three fixed room calls without thread.messages fanout
ok 1 - C2-10c seam exposes three fixed room calls without thread.messages fanout
---
duration_ms: 11.013578
type: 'test'
...
# Subtest: C2-10c HTTP preserves original send, member receipt and the last grouped paging id
ok 2 - C2-10c HTTP preserves original send, member receipt and the last grouped paging id
---
duration_ms: 12.608774
type: 'test'
...
# Subtest: C2-10c room write fences and strict keys reject before transport
ok 3 - C2-10c room write fences and strict keys reject before transport
---
duration_ms: 9.684014
type: 'test'
...
# Subtest: C2-10c all four room refusals are409 with fixed text, never transport prose
ok 4 - C2-10c all four room refusals are409 with fixed text, never transport prose
---
duration_ms: 3.750164
type: 'test'
...
# Subtest: C2-10c malformed/lost write receipts are unknown and never retried
ok 5 - C2-10c malformed/lost write receipts are unknown and never retried
---
duration_ms: 3.555785
type: 'test'
...
# Subtest: C2-10c room receipts reject coerced member keys and duplicate grouped ids
not ok 6 - C2-10c room receipts reject coerced member keys and duplicate grouped ids
---
duration_ms: 1.849296
type: 'test'
location: '/mnt/storage/scratch/tmp/KV9rHb/fethry266-mutants-32bmgm_x/M06-receipt-type/packages/webui/tests/room-http.test.mjs:95:1'
failureType: 'testCodeFailure'
error: |-
Expected values to be strictly equal:
200 !== 503
code: 'ERR_ASSERTION'
name: 'AssertionError'
expected: 503
actual: 200
operator: 'strictEqual'
stack: |-
TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/KV9rHb/fethry266-mutants-32bmgm_x/M06-receipt-type/packages/webui/tests/room-http.test.mjs:99:10)
process.processTicksAndRejections (node:internal/process/task_queues:104:5)
async Test.run (node:internal/test_runner/test:1409:7)
async Test.processPendingSubtests (node:internal/test_runner/test:974:7)
...
# Subtest: C2-10c granted-user room calls never borrow the owner transport
ok 7 - C2-10c granted-user room calls never borrow the owner transport
---
duration_ms: 0.908096
type: 'test'
...
1..7
# tests 7
# suites 0
# pass 6
# fail 1
# cancelled 0
# skipped 0
# todo 0
# duration_ms 150.3236
@@ -0,0 +1,54 @@
TAP version 13
# Subtest: C2-10c room.read carries exactly the thread check and current file last
not ok 1 - C2-10c room.read carries exactly the thread check and current file last
---
duration_ms: 83.507065
type: 'test'
location: '/mnt/storage/scratch/tmp/KV9rHb/fethry266-mutants-32bmgm_x/M07-room-check/packages/bus/tests/room-check.test.mjs:10:1'
failureType: 'testCodeFailure'
error: |-
Expected values to be strictly deep-equal:
+ actual - expected
+ undefined
- {
- citations: [
- {
- agent: null,
- file: '451004f1ccad7601e78c1e40eb352997ab433e08',
- last: '451004f1ccad7601e78c1e40eb352997ab433e08',
- scope: 'canon'
- }
- ]
- }
code: 'ERR_ASSERTION'
name: 'AssertionError'
expected:
citations:
0:
scope: 'canon'
agent: ~
file: '451004f1ccad7601e78c1e40eb352997ab433e08'
last: '451004f1ccad7601e78c1e40eb352997ab433e08'
operator: 'deepStrictEqual'
stack: |-
TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/KV9rHb/fethry266-mutants-32bmgm_x/M07-room-check/packages/bus/tests/room-check.test.mjs:20:10)
async Test.run (node:internal/test_runner/test:1409:7)
async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3)
...
# Subtest: C2-10c check hydration preserves unchecked rows and one broadcast with two addressees
ok 2 - C2-10c check hydration preserves unchecked rows and one broadcast with two addressees
---
duration_ms: 15.38309
type: 'test'
...
1..2
# tests 2
# suites 0
# pass 1
# fail 1
# cancelled 0
# skipped 0
# todo 0
# duration_ms 171.86807
@@ -0,0 +1,59 @@
TAP version 13
# Subtest: C2-10c room.read carries exactly the thread check and current file last
not ok 1 - C2-10c room.read carries exactly the thread check and current file last
---
duration_ms: 67.328888
type: 'test'
location: '/mnt/storage/scratch/tmp/KV9rHb/fethry266-mutants-32bmgm_x/M08-room-last/packages/bus/tests/room-check.test.mjs:10:1'
failureType: 'testCodeFailure'
error: |-
Expected values to be strictly deep-equal:
+ actual - expected
{
citations: [
{
agent: null,
file: '10b4ecc1f7ff568550e9967c36701b5a6bd5e8b6',
- last: '10b4ecc1f7ff568550e9967c36701b5a6bd5e8b6',
scope: 'canon'
}
]
}
code: 'ERR_ASSERTION'
name: 'AssertionError'
expected:
citations:
0:
scope: 'canon'
agent: ~
file: '10b4ecc1f7ff568550e9967c36701b5a6bd5e8b6'
last: '10b4ecc1f7ff568550e9967c36701b5a6bd5e8b6'
actual:
citations:
0:
scope: 'canon'
agent: ~
file: '10b4ecc1f7ff568550e9967c36701b5a6bd5e8b6'
operator: 'deepStrictEqual'
stack: |-
TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/KV9rHb/fethry266-mutants-32bmgm_x/M08-room-last/packages/bus/tests/room-check.test.mjs:20:10)
async Test.run (node:internal/test_runner/test:1409:7)
async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3)
...
# Subtest: C2-10c check hydration preserves unchecked rows and one broadcast with two addressees
ok 2 - C2-10c check hydration preserves unchecked rows and one broadcast with two addressees
---
duration_ms: 15.525552
type: 'test'
...
1..2
# tests 2
# suites 0
# pass 1
# fail 1
# cancelled 0
# skipped 0
# todo 0
# duration_ms 166.159314
@@ -0,0 +1,101 @@
TAP version 13
# Subtest: C2-10c room merges members, shows a broadcast once, reuses cited renderer and suppresses checked notice forgery
ok 1 - C2-10c room merges members, shows a broadcast once, reuses cited renderer and suppresses checked notice forgery
---
duration_ms: 654.717114
type: 'test'
...
# Subtest: C2-10c explicit project Open room calls only room.open before navigating
ok 2 - C2-10c explicit project Open room calls only room.open before navigating
---
duration_ms: 556.312248
type: 'test'
...
# Subtest: C2-10c completion lists only room members, inserts instance tokens and preserves typed send exactly
not ok 3 - C2-10c completion lists only room members, inserts instance tokens and preserves typed send exactly
---
duration_ms: 578.59092
type: 'test'
location: '/mnt/storage/scratch/tmp/KV9rHb/fethry266-mutants-32bmgm_x/M09-browser-body/packages/webui/tests/room-browser.test.mjs:103:1'
failureType: 'testCodeFailure'
error: |-
Expected values to be strictly deep-equal:
+ actual - expected
{
body: {
+ body: '@bean\n@chet unchanged text'
- body: ' \t@bean\n@chet unchanged text '
},
path: '/api/chat/rooms/10000000-0000-4000-8000-000000000001/messages',
redirect: 'manual'
}
code: 'ERR_ASSERTION'
name: 'AssertionError'
expected:
path: '/api/chat/rooms/10000000-0000-4000-8000-000000000001/messages'
body:
body: |-
@bean
@chet unchanged text
redirect: 'manual'
actual:
path: '/api/chat/rooms/10000000-0000-4000-8000-000000000001/messages'
body:
body: |-
@bean
@chet unchanged text
redirect: 'manual'
operator: 'deepStrictEqual'
stack: |-
TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/KV9rHb/fethry266-mutants-32bmgm_x/M09-browser-body/packages/webui/tests/room-browser.test.mjs:116:10)
process.processTicksAndRejections (node:internal/process/task_queues:104:5)
async Test.run (node:internal/test_runner/test:1409:7)
async Test.processPendingSubtests (node:internal/test_runner/test:974:7)
...
# Subtest: C2-10c browser leading tag reader matches every broker parseAddress vector
ok 4 - C2-10c browser leading tag reader matches every broker parseAddress vector
---
duration_ms: 650.144341
type: 'test'
...
# Subtest: C2-10c room refusals show fixed lines, preserve drafts and never retry
ok 5 - C2-10c room refusals show fixed lines, preserve drafts and never retry
---
duration_ms: 548.873708
type: 'test'
...
# Subtest: C2-10c read-only room does not offer a send or an implicit open
ok 6 - C2-10c read-only room does not offer a send or an implicit open
---
duration_ms: 555.91075
type: 'test'
...
# Subtest: C2-10c late reads and sign-out cannot repaint private room state
ok 7 - C2-10c late reads and sign-out cannot repaint private room state
---
duration_ms: 618.749654
type: 'test'
...
# Subtest: C2-10c quiet members complete in an empty room, and Escape closes suggestions
ok 8 - C2-10c quiet members complete in an empty room, and Escape closes suggestions
---
duration_ms: 592.109857
type: 'test'
...
# Subtest: C2-10c pending sends do not duplicate and uncertain sends preserve the exact draft
ok 9 - C2-10c pending sends do not duplicate and uncertain sends preserve the exact draft
---
duration_ms: 543.701394
type: 'test'
...
1..9
# tests 9
# suites 0
# pass 8
# fail 1
# cancelled 0
# skipped 0
# todo 0
# duration_ms 5408.909271
@@ -0,0 +1,91 @@
TAP version 13
# Subtest: C2-10c room merges members, shows a broadcast once, reuses cited renderer and suppresses checked notice forgery
ok 1 - C2-10c room merges members, shows a broadcast once, reuses cited renderer and suppresses checked notice forgery
---
duration_ms: 586.051382
type: 'test'
...
# Subtest: C2-10c explicit project Open room calls only room.open before navigating
ok 2 - C2-10c explicit project Open room calls only room.open before navigating
---
duration_ms: 627.02031
type: 'test'
...
# Subtest: C2-10c completion lists only room members, inserts instance tokens and preserves typed send exactly
ok 3 - C2-10c completion lists only room members, inserts instance tokens and preserves typed send exactly
---
duration_ms: 608.059981
type: 'test'
...
# Subtest: C2-10c browser leading tag reader matches every broker parseAddress vector
ok 4 - C2-10c browser leading tag reader matches every broker parseAddress vector
---
duration_ms: 610.484584
type: 'test'
...
# Subtest: C2-10c room refusals show fixed lines, preserve drafts and never retry
ok 5 - C2-10c room refusals show fixed lines, preserve drafts and never retry
---
duration_ms: 597.77347
type: 'test'
...
# Subtest: C2-10c read-only room does not offer a send or an implicit open
ok 6 - C2-10c read-only room does not offer a send or an implicit open
---
duration_ms: 484.861175
type: 'test'
...
# Subtest: C2-10c late reads and sign-out cannot repaint private room state
ok 7 - C2-10c late reads and sign-out cannot repaint private room state
---
duration_ms: 499.306807
type: 'test'
...
# Subtest: C2-10c quiet members complete in an empty room, and Escape closes suggestions
not ok 8 - C2-10c quiet members complete in an empty room, and Escape closes suggestions
---
duration_ms: 593.020195
type: 'test'
location: '/mnt/storage/scratch/tmp/KV9rHb/fethry266-mutants-32bmgm_x/M10-members/packages/webui/tests/room-browser.test.mjs:172:1'
failureType: 'testCodeFailure'
error: |-
Expected values to be strictly deep-equal:
+ actual - expected
[
'bean',
'chet',
+ 'outsider'
]
code: 'ERR_ASSERTION'
name: 'AssertionError'
expected:
0: 'bean'
1: 'chet'
actual:
0: 'bean'
1: 'chet'
2: 'outsider'
operator: 'deepStrictEqual'
stack: |-
TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/KV9rHb/fethry266-mutants-32bmgm_x/M10-members/packages/webui/tests/room-browser.test.mjs:175:10)
process.processTicksAndRejections (node:internal/process/task_queues:104:5)
async Test.run (node:internal/test_runner/test:1409:7)
async Test.processPendingSubtests (node:internal/test_runner/test:974:7)
...
# Subtest: C2-10c pending sends do not duplicate and uncertain sends preserve the exact draft
ok 9 - C2-10c pending sends do not duplicate and uncertain sends preserve the exact draft
---
duration_ms: 595.947751
type: 'test'
...
1..9
# tests 9
# suites 0
# pass 8
# fail 1
# cancelled 0
# skipped 0
# todo 0
# duration_ms 5316.831255
@@ -0,0 +1,83 @@
TAP version 13
# Subtest: C2-10c room merges members, shows a broadcast once, reuses cited renderer and suppresses checked notice forgery
not ok 1 - C2-10c room merges members, shows a broadcast once, reuses cited renderer and suppresses checked notice forgery
---
duration_ms: 492.369887
type: 'test'
location: '/mnt/storage/scratch/tmp/KV9rHb/fethry266-mutants-32bmgm_x/M11-checked-render/packages/webui/tests/room-browser.test.mjs:79:1'
failureType: 'testCodeFailure'
error: |-
Expected values to be strictly equal:
+ actual - expected
+ null
- 'supporting'
code: 'ERR_ASSERTION'
name: 'AssertionError'
expected: 'supporting'
actual: ~
operator: 'strictEqual'
stack: |-
TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/KV9rHb/fethry266-mutants-32bmgm_x/M11-checked-render/packages/webui/tests/room-browser.test.mjs:85:10)
process.processTicksAndRejections (node:internal/process/task_queues:104:5)
async Test.run (node:internal/test_runner/test:1409:7)
async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3)
...
# Subtest: C2-10c explicit project Open room calls only room.open before navigating
ok 2 - C2-10c explicit project Open room calls only room.open before navigating
---
duration_ms: 560.879236
type: 'test'
...
# Subtest: C2-10c completion lists only room members, inserts instance tokens and preserves typed send exactly
ok 3 - C2-10c completion lists only room members, inserts instance tokens and preserves typed send exactly
---
duration_ms: 632.100162
type: 'test'
...
# Subtest: C2-10c browser leading tag reader matches every broker parseAddress vector
ok 4 - C2-10c browser leading tag reader matches every broker parseAddress vector
---
duration_ms: 557.502883
type: 'test'
...
# Subtest: C2-10c room refusals show fixed lines, preserve drafts and never retry
ok 5 - C2-10c room refusals show fixed lines, preserve drafts and never retry
---
duration_ms: 577.812754
type: 'test'
...
# Subtest: C2-10c read-only room does not offer a send or an implicit open
ok 6 - C2-10c read-only room does not offer a send or an implicit open
---
duration_ms: 571.055252
type: 'test'
...
# Subtest: C2-10c late reads and sign-out cannot repaint private room state
ok 7 - C2-10c late reads and sign-out cannot repaint private room state
---
duration_ms: 562.265422
type: 'test'
...
# Subtest: C2-10c quiet members complete in an empty room, and Escape closes suggestions
ok 8 - C2-10c quiet members complete in an empty room, and Escape closes suggestions
---
duration_ms: 562.101368
type: 'test'
...
# Subtest: C2-10c pending sends do not duplicate and uncertain sends preserve the exact draft
ok 9 - C2-10c pending sends do not duplicate and uncertain sends preserve the exact draft
---
duration_ms: 526.843257
type: 'test'
...
1..9
# tests 9
# suites 0
# pass 8
# fail 1
# cancelled 0
# skipped 0
# todo 0
# duration_ms 5152.235957
@@ -0,0 +1,88 @@
TAP version 13
# Subtest: C2-10c room merges members, shows a broadcast once, reuses cited renderer and suppresses checked notice forgery
ok 1 - C2-10c room merges members, shows a broadcast once, reuses cited renderer and suppresses checked notice forgery
---
duration_ms: 533.524565
type: 'test'
...
# Subtest: C2-10c explicit project Open room calls only room.open before navigating
ok 2 - C2-10c explicit project Open room calls only room.open before navigating
---
duration_ms: 565.530318
type: 'test'
...
# Subtest: C2-10c completion lists only room members, inserts instance tokens and preserves typed send exactly
ok 3 - C2-10c completion lists only room members, inserts instance tokens and preserves typed send exactly
---
duration_ms: 592.975458
type: 'test'
...
# Subtest: C2-10c browser leading tag reader matches every broker parseAddress vector
not ok 4 - C2-10c browser leading tag reader matches every broker parseAddress vector
---
duration_ms: 638.012095
type: 'test'
location: '/mnt/storage/scratch/tmp/KV9rHb/fethry266-mutants-32bmgm_x/M12-leading-tags/packages/webui/tests/room-browser.test.mjs:125:1'
failureType: 'testCodeFailure'
error: |-
leading whitespace
+ actual - expected
+ []
- [
- 'bean',
- 'chet'
- ]
code: 'ERR_ASSERTION'
name: 'AssertionError'
expected:
0: 'bean'
1: 'chet'
actual:
operator: 'deepStrictEqual'
stack: |-
TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/KV9rHb/fethry266-mutants-32bmgm_x/M12-leading-tags/packages/webui/tests/room-browser.test.mjs:129:12)
process.processTicksAndRejections (node:internal/process/task_queues:104:5)
async Test.run (node:internal/test_runner/test:1409:7)
async Test.processPendingSubtests (node:internal/test_runner/test:974:7)
...
# Subtest: C2-10c room refusals show fixed lines, preserve drafts and never retry
ok 5 - C2-10c room refusals show fixed lines, preserve drafts and never retry
---
duration_ms: 613.741071
type: 'test'
...
# Subtest: C2-10c read-only room does not offer a send or an implicit open
ok 6 - C2-10c read-only room does not offer a send or an implicit open
---
duration_ms: 582.549802
type: 'test'
...
# Subtest: C2-10c late reads and sign-out cannot repaint private room state
ok 7 - C2-10c late reads and sign-out cannot repaint private room state
---
duration_ms: 620.515287
type: 'test'
...
# Subtest: C2-10c quiet members complete in an empty room, and Escape closes suggestions
ok 8 - C2-10c quiet members complete in an empty room, and Escape closes suggestions
---
duration_ms: 476.797273
type: 'test'
...
# Subtest: C2-10c pending sends do not duplicate and uncertain sends preserve the exact draft
ok 9 - C2-10c pending sends do not duplicate and uncertain sends preserve the exact draft
---
duration_ms: 568.856603
type: 'test'
...
1..9
# tests 9
# suites 0
# pass 8
# fail 1
# cancelled 0
# skipped 0
# todo 0
# duration_ms 5305.643765
@@ -0,0 +1,81 @@
TAP version 13
# Subtest: C2-10c room merges members, shows a broadcast once, reuses cited renderer and suppresses checked notice forgery
ok 1 - C2-10c room merges members, shows a broadcast once, reuses cited renderer and suppresses checked notice forgery
---
duration_ms: 515.306411
type: 'test'
...
# Subtest: C2-10c explicit project Open room calls only room.open before navigating
ok 2 - C2-10c explicit project Open room calls only room.open before navigating
---
duration_ms: 587.728142
type: 'test'
...
# Subtest: C2-10c completion lists only room members, inserts instance tokens and preserves typed send exactly
ok 3 - C2-10c completion lists only room members, inserts instance tokens and preserves typed send exactly
---
duration_ms: 615.408914
type: 'test'
...
# Subtest: C2-10c browser leading tag reader matches every broker parseAddress vector
ok 4 - C2-10c browser leading tag reader matches every broker parseAddress vector
---
duration_ms: 631.443015
type: 'test'
...
# Subtest: C2-10c room refusals show fixed lines, preserve drafts and never retry
ok 5 - C2-10c room refusals show fixed lines, preserve drafts and never retry
---
duration_ms: 548.976444
type: 'test'
...
# Subtest: C2-10c read-only room does not offer a send or an implicit open
not ok 6 - C2-10c read-only room does not offer a send or an implicit open
---
duration_ms: 482.66679
type: 'test'
location: '/mnt/storage/scratch/tmp/KV9rHb/fethry266-mutants-32bmgm_x/M13-readonly/packages/webui/tests/room-browser.test.mjs:149:1'
failureType: 'testCodeFailure'
error: |-
Expected values to be strictly equal:
1 !== 0
code: 'ERR_ASSERTION'
name: 'AssertionError'
expected: 0
actual: 1
operator: 'strictEqual'
stack: |-
TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/KV9rHb/fethry266-mutants-32bmgm_x/M13-readonly/packages/webui/tests/room-browser.test.mjs:155:10)
process.processTicksAndRejections (node:internal/process/task_queues:104:5)
async Test.run (node:internal/test_runner/test:1409:7)
async Test.processPendingSubtests (node:internal/test_runner/test:974:7)
...
# Subtest: C2-10c late reads and sign-out cannot repaint private room state
ok 7 - C2-10c late reads and sign-out cannot repaint private room state
---
duration_ms: 581.912482
type: 'test'
...
# Subtest: C2-10c quiet members complete in an empty room, and Escape closes suggestions
ok 8 - C2-10c quiet members complete in an empty room, and Escape closes suggestions
---
duration_ms: 587.019049
type: 'test'
...
# Subtest: C2-10c pending sends do not duplicate and uncertain sends preserve the exact draft
ok 9 - C2-10c pending sends do not duplicate and uncertain sends preserve the exact draft
---
duration_ms: 603.816605
type: 'test'
...
1..9
# tests 9
# suites 0
# pass 8
# fail 1
# cancelled 0
# skipped 0
# todo 0
# duration_ms 5264.797509
@@ -0,0 +1,86 @@
TAP version 13
# Subtest: C2-10c seam exposes three fixed room calls without thread.messages fanout
ok 1 - C2-10c seam exposes three fixed room calls without thread.messages fanout
---
duration_ms: 10.260746
type: 'test'
...
# Subtest: C2-10c HTTP preserves original send, member receipt and the last grouped paging id
ok 2 - C2-10c HTTP preserves original send, member receipt and the last grouped paging id
---
duration_ms: 11.451922
type: 'test'
...
# Subtest: C2-10c room write fences and strict keys reject before transport
ok 3 - C2-10c room write fences and strict keys reject before transport
---
duration_ms: 9.444913
type: 'test'
...
# Subtest: C2-10c all four room refusals are409 with fixed text, never transport prose
not ok 4 - C2-10c all four room refusals are409 with fixed text, never transport prose
---
duration_ms: 2.363579
type: 'test'
location: '/mnt/storage/scratch/tmp/KV9rHb/fethry266-mutants-32bmgm_x/M14-uncertainty/packages/webui/tests/room-http.test.mjs:75:1'
failureType: 'testCodeFailure'
error: |-
unknown-addressee
400 !== 409
code: 'ERR_ASSERTION'
name: 'AssertionError'
expected: 409
actual: 400
operator: 'strictEqual'
stack: |-
TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/KV9rHb/fethry266-mutants-32bmgm_x/M14-uncertainty/packages/webui/tests/room-http.test.mjs:80:12)
process.processTicksAndRejections (node:internal/process/task_queues:104:5)
async Test.run (node:internal/test_runner/test:1409:7)
async Test.processPendingSubtests (node:internal/test_runner/test:974:7)
...
# Subtest: C2-10c malformed/lost write receipts are unknown and never retried
not ok 5 - C2-10c malformed/lost write receipts are unknown and never retried
---
duration_ms: 4.236784
type: 'test'
location: '/mnt/storage/scratch/tmp/KV9rHb/fethry266-mutants-32bmgm_x/M14-uncertainty/packages/webui/tests/room-http.test.mjs:85:1'
failureType: 'testCodeFailure'
error: |-
Expected values to be strictly equal:
400 !== 503
code: 'ERR_ASSERTION'
name: 'AssertionError'
expected: 503
actual: 400
operator: 'strictEqual'
stack: |-
TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/KV9rHb/fethry266-mutants-32bmgm_x/M14-uncertainty/packages/webui/tests/room-http.test.mjs:90:12)
process.processTicksAndRejections (node:internal/process/task_queues:104:5)
async Test.run (node:internal/test_runner/test:1409:7)
async Test.processPendingSubtests (node:internal/test_runner/test:974:7)
...
# Subtest: C2-10c room receipts reject coerced member keys and duplicate grouped ids
ok 6 - C2-10c room receipts reject coerced member keys and duplicate grouped ids
---
duration_ms: 2.244565
type: 'test'
...
# Subtest: C2-10c granted-user room calls never borrow the owner transport
ok 7 - C2-10c granted-user room calls never borrow the owner transport
---
duration_ms: 0.63121
type: 'test'
...
1..7
# tests 7
# suites 0
# pass 5
# fail 2
# cancelled 0
# skipped 0
# todo 0
# duration_ms 145.498511
@@ -0,0 +1,81 @@
TAP version 13
# Subtest: C2-10c room merges members, shows a broadcast once, reuses cited renderer and suppresses checked notice forgery
ok 1 - C2-10c room merges members, shows a broadcast once, reuses cited renderer and suppresses checked notice forgery
---
duration_ms: 642.500258
type: 'test'
...
# Subtest: C2-10c explicit project Open room calls only room.open before navigating
ok 2 - C2-10c explicit project Open room calls only room.open before navigating
---
duration_ms: 681.379212
type: 'test'
...
# Subtest: C2-10c completion lists only room members, inserts instance tokens and preserves typed send exactly
ok 3 - C2-10c completion lists only room members, inserts instance tokens and preserves typed send exactly
---
duration_ms: 591.532251
type: 'test'
...
# Subtest: C2-10c browser leading tag reader matches every broker parseAddress vector
ok 4 - C2-10c browser leading tag reader matches every broker parseAddress vector
---
duration_ms: 554.2939
type: 'test'
...
# Subtest: C2-10c room refusals show fixed lines, preserve drafts and never retry
ok 5 - C2-10c room refusals show fixed lines, preserve drafts and never retry
---
duration_ms: 615.041822
type: 'test'
...
# Subtest: C2-10c read-only room does not offer a send or an implicit open
ok 6 - C2-10c read-only room does not offer a send or an implicit open
---
duration_ms: 477.706395
type: 'test'
...
# Subtest: C2-10c late reads and sign-out cannot repaint private room state
ok 7 - C2-10c late reads and sign-out cannot repaint private room state
---
duration_ms: 589.566493
type: 'test'
...
# Subtest: C2-10c quiet members complete in an empty room, and Escape closes suggestions
ok 8 - C2-10c quiet members complete in an empty room, and Escape closes suggestions
---
duration_ms: 473.941034
type: 'test'
...
# Subtest: C2-10c pending sends do not duplicate and uncertain sends preserve the exact draft
not ok 9 - C2-10c pending sends do not duplicate and uncertain sends preserve the exact draft
---
duration_ms: 512.018276
type: 'test'
location: '/mnt/storage/scratch/tmp/KV9rHb/fethry266-mutants-32bmgm_x/M15-pending/packages/webui/tests/room-browser.test.mjs:183:1'
failureType: 'testCodeFailure'
error: |-
Expected values to be strictly equal:
2 !== 1
code: 'ERR_ASSERTION'
name: 'AssertionError'
expected: 1
actual: 2
operator: 'strictEqual'
stack: |-
TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/KV9rHb/fethry266-mutants-32bmgm_x/M15-pending/packages/webui/tests/room-browser.test.mjs:189:10)
process.processTicksAndRejections (node:internal/process/task_queues:104:5)
async Test.run (node:internal/test_runner/test:1409:7)
async Test.processPendingSubtests (node:internal/test_runner/test:974:7)
...
1..9
# tests 9
# suites 0
# pass 8
# fail 1
# cancelled 0
# skipped 0
# todo 0
# duration_ms 5248.865109
@@ -0,0 +1,98 @@
TAP version 13
# Subtest: C2-10c room merges members, shows a broadcast once, reuses cited renderer and suppresses checked notice forgery
not ok 1 - C2-10c room merges members, shows a broadcast once, reuses cited renderer and suppresses checked notice forgery
---
duration_ms: 474.489714
type: 'test'
location: '/mnt/storage/scratch/tmp/KV9rHb/fethry266-mutants-32bmgm_x/M16-body-dedup/packages/webui/tests/room-browser.test.mjs:79:1'
failureType: 'testCodeFailure'
error: |-
Expected values to be strictly equal:
4 !== 5
code: 'ERR_ASSERTION'
name: 'AssertionError'
expected: 5
actual: 4
operator: 'strictEqual'
stack: |-
TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/KV9rHb/fethry266-mutants-32bmgm_x/M16-body-dedup/packages/webui/tests/room-browser.test.mjs:82:10)
process.processTicksAndRejections (node:internal/process/task_queues:104:5)
async Test.run (node:internal/test_runner/test:1409:7)
async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3)
...
# Subtest: C2-10c explicit project Open room calls only room.open before navigating
ok 2 - C2-10c explicit project Open room calls only room.open before navigating
---
duration_ms: 587.106171
type: 'test'
...
# Subtest: C2-10c completion lists only room members, inserts instance tokens and preserves typed send exactly
not ok 3 - C2-10c completion lists only room members, inserts instance tokens and preserves typed send exactly
---
duration_ms: 506.06589
type: 'test'
location: '/mnt/storage/scratch/tmp/KV9rHb/fethry266-mutants-32bmgm_x/M16-body-dedup/packages/webui/tests/room-browser.test.mjs:103:1'
failureType: 'testCodeFailure'
error: |-
no optimistic copies of a broadcast
4 !== 5
code: 'ERR_ASSERTION'
name: 'AssertionError'
expected: 5
actual: 4
operator: 'strictEqual'
stack: |-
TestContext.<anonymous> (file:///mnt/storage/scratch/tmp/KV9rHb/fethry266-mutants-32bmgm_x/M16-body-dedup/packages/webui/tests/room-browser.test.mjs:118:10)
process.processTicksAndRejections (node:internal/process/task_queues:104:5)
async Test.run (node:internal/test_runner/test:1409:7)
async Test.processPendingSubtests (node:internal/test_runner/test:974:7)
...
# Subtest: C2-10c browser leading tag reader matches every broker parseAddress vector
ok 4 - C2-10c browser leading tag reader matches every broker parseAddress vector
---
duration_ms: 574.421619
type: 'test'
...
# Subtest: C2-10c room refusals show fixed lines, preserve drafts and never retry
ok 5 - C2-10c room refusals show fixed lines, preserve drafts and never retry
---
duration_ms: 525.669748
type: 'test'
...
# Subtest: C2-10c read-only room does not offer a send or an implicit open
ok 6 - C2-10c read-only room does not offer a send or an implicit open
---
duration_ms: 574.584051
type: 'test'
...
# Subtest: C2-10c late reads and sign-out cannot repaint private room state
ok 7 - C2-10c late reads and sign-out cannot repaint private room state
---
duration_ms: 714.522652
type: 'test'
...
# Subtest: C2-10c quiet members complete in an empty room, and Escape closes suggestions
ok 8 - C2-10c quiet members complete in an empty room, and Escape closes suggestions
---
duration_ms: 605.062154
type: 'test'
...
# Subtest: C2-10c pending sends do not duplicate and uncertain sends preserve the exact draft
ok 9 - C2-10c pending sends do not duplicate and uncertain sends preserve the exact draft
---
duration_ms: 598.986047
type: 'test'
...
1..9
# tests 9
# suites 0
# pass 7
# fail 2
# cancelled 0
# skipped 0
# todo 0
# duration_ms 5270.931167
@@ -0,0 +1,200 @@
{
"source": "3095d6ea5295d19e216128454c33b616b16d8d34",
"selected": [
"M01-plugin",
"M02-seam-body",
"M03-page-cursor",
"M04-room-status",
"M05-strict-body",
"M06-receipt-type",
"M07-room-check",
"M08-room-last",
"M09-browser-body",
"M10-members",
"M11-checked-render",
"M12-leading-tags",
"M13-readonly",
"M14-uncertainty",
"M15-pending",
"M16-body-dedup"
],
"candidateUnchanged": true,
"results": [
{
"mutant": "M01-plugin",
"test": "packages/plugins/tests/room-channel.test.mjs",
"exit": 1,
"killed": true,
"hits": 1,
"restored": true,
"candidateUnchanged": true,
"seconds": 0.115,
"cleanupSignals": []
},
{
"mutant": "M02-seam-body",
"test": "packages/webui/tests/room-http.test.mjs",
"exit": 1,
"killed": true,
"hits": 1,
"restored": true,
"candidateUnchanged": true,
"seconds": 0.215,
"cleanupSignals": []
},
{
"mutant": "M03-page-cursor",
"test": "packages/webui/tests/room-http.test.mjs",
"exit": 1,
"killed": true,
"hits": 1,
"restored": true,
"candidateUnchanged": true,
"seconds": 0.215,
"cleanupSignals": []
},
{
"mutant": "M04-room-status",
"test": "packages/webui/tests/room-http.test.mjs",
"exit": 1,
"killed": true,
"hits": 1,
"restored": true,
"candidateUnchanged": true,
"seconds": 0.215,
"cleanupSignals": []
},
{
"mutant": "M05-strict-body",
"test": "packages/webui/tests/room-http.test.mjs",
"exit": 1,
"killed": true,
"hits": 1,
"restored": true,
"candidateUnchanged": true,
"seconds": 0.215,
"cleanupSignals": []
},
{
"mutant": "M06-receipt-type",
"test": "packages/webui/tests/room-http.test.mjs",
"exit": 1,
"killed": true,
"hits": 1,
"restored": true,
"candidateUnchanged": true,
"seconds": 0.215,
"cleanupSignals": []
},
{
"mutant": "M07-room-check",
"test": "packages/bus/tests/room-check.test.mjs",
"exit": 1,
"killed": true,
"hits": 1,
"restored": true,
"candidateUnchanged": true,
"seconds": 0.216,
"cleanupSignals": []
},
{
"mutant": "M08-room-last",
"test": "packages/bus/tests/room-check.test.mjs",
"exit": 1,
"killed": true,
"hits": 1,
"restored": true,
"candidateUnchanged": true,
"seconds": 0.216,
"cleanupSignals": []
},
{
"mutant": "M09-browser-body",
"test": "packages/webui/tests/room-browser.test.mjs",
"exit": 1,
"killed": true,
"hits": 1,
"restored": true,
"candidateUnchanged": true,
"seconds": 5.478,
"cleanupSignals": []
},
{
"mutant": "M10-members",
"test": "packages/webui/tests/room-browser.test.mjs",
"exit": 1,
"killed": true,
"hits": 1,
"restored": true,
"candidateUnchanged": true,
"seconds": 5.377,
"cleanupSignals": []
},
{
"mutant": "M11-checked-render",
"test": "packages/webui/tests/room-browser.test.mjs",
"exit": 1,
"killed": true,
"hits": 1,
"restored": true,
"candidateUnchanged": true,
"seconds": 5.227,
"cleanupSignals": []
},
{
"mutant": "M12-leading-tags",
"test": "packages/webui/tests/room-browser.test.mjs",
"exit": 1,
"killed": true,
"hits": 1,
"restored": true,
"candidateUnchanged": true,
"seconds": 5.376,
"cleanupSignals": []
},
{
"mutant": "M13-readonly",
"test": "packages/webui/tests/room-browser.test.mjs",
"exit": 1,
"killed": true,
"hits": 1,
"restored": true,
"candidateUnchanged": true,
"seconds": 5.326,
"cleanupSignals": []
},
{
"mutant": "M14-uncertainty",
"test": "packages/webui/tests/room-http.test.mjs",
"exit": 1,
"killed": true,
"hits": 1,
"restored": true,
"candidateUnchanged": true,
"seconds": 0.215,
"cleanupSignals": []
},
{
"mutant": "M15-pending",
"test": "packages/webui/tests/room-browser.test.mjs",
"exit": 1,
"killed": true,
"hits": 1,
"restored": true,
"candidateUnchanged": true,
"seconds": 5.327,
"cleanupSignals": []
},
{
"mutant": "M16-body-dedup",
"test": "packages/webui/tests/room-browser.test.mjs",
"exit": 1,
"killed": true,
"hits": 1,
"restored": true,
"candidateUnchanged": true,
"seconds": 5.327,
"cleanupSignals": []
}
]
}
@@ -0,0 +1,16 @@
TAP version 13
# Subtest: C2-10c webui permits exactly the three added room verbs and preserves core refusals
ok 1 - C2-10c webui permits exactly the three added room verbs and preserves core refusals
---
duration_ms: 1.543022
type: 'test'
...
1..1
# tests 1
# suites 0
# pass 1
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 45.19296
@@ -0,0 +1,28 @@
TAP version 13
# Subtest: C2-10c webui permits exactly the three added room verbs and preserves core refusals
not ok 1 - C2-10c webui permits exactly the three added room verbs and preserves core refusals
---
duration_ms: 0.69237
type: 'test'
location: '/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/plugins/tests/room-channel.test.mjs:5:1'
failureType: 'testCodeFailure'
error: 'unsupported channel operation'
code: 'channel-operation'
name: 'PluginError'
stack: |-
dispatch (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/plugins/channel/webui/index.mjs:23:31)
TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/plugins/tests/room-channel.test.mjs:8:28)
Test.runInAsyncScope (node:async_hooks:226:14)
Test.run (node:internal/test_runner/test:1402:25)
Test.start (node:internal/test_runner/test:1262:17)
startSubtestAfterBootstrap (node:internal/test_runner/harness:387:17)
...
1..1
# tests 1
# suites 0
# pass 0
# fail 1
# cancelled 0
# skipped 0
# todo 0
# duration_ms 46.133256
@@ -0,0 +1,730 @@
TAP version 13
# Subtest: channel registry requires dispatch at interface 1 and switches a list
ok 1 - channel registry requires dispatch at interface 1 and switches a list
---
duration_ms: 1.255032
type: 'test'
...
# Subtest: channel shipped modules load and preserve every supported operation and bus refusal
ok 2 - channel shipped modules load and preserve every supported operation and bus refusal
---
duration_ms: 2.804618
type: 'test'
...
# Subtest: channel snapshot is a frozen matched pair and a captured array survives reload
ok 3 - channel snapshot is a frozen matched pair and a captured array survives reload
---
duration_ms: 4.163001
type: 'test'
...
# Subtest: channel guards refuse bad names, missing paths, exports and versions while retaining last good
ok 4 - channel guards refuse bad names, missing paths, exports and versions while retaining last good
---
duration_ms: 3.559755
type: 'test'
...
# Subtest: channel guards refuse symlinked module, index and kind directories
ok 5 - channel guards refuse symlinked module, index and kind directories
---
duration_ms: 2.649428
type: 'test'
...
# Subtest: channel caller re-reads settings and keeps off switches independent by module name
ok 6 - channel caller re-reads settings and keeps off switches independent by module name
---
duration_ms: 1.86561
type: 'test'
...
# Subtest: channel caller malformed settings refuse without a chat operation and no unrelated kind loads
ok 7 - channel caller malformed settings refuse without a chat operation and no unrelated kind loads
---
duration_ms: 0.553009
type: 'test'
...
# Subtest: channel caller uses last good after loader refusal and fails closed on first load
ok 8 - channel caller uses last good after loader refusal and fails closed on first load
---
duration_ms: 0.753171
type: 'test'
...
# Subtest: channel dispatch holds no selection lock while a slow send is awaiting
ok 9 - channel dispatch holds no selection lock while a slow send is awaiting
---
duration_ms: 0.63183
type: 'test'
...
# Subtest: channel last realpath check refuses an index swapped after component checks
ok 10 - channel last realpath check refuses an index swapped after component checks
---
duration_ms: 3.292656
type: 'test'
...
# Subtest: channel caller refuses invalid core construction
ok 11 - channel caller refuses invalid core construction
---
duration_ms: 0.192852
type: 'test'
...
# Subtest: channel caller invokes the selected loaded module instead of bypassing dispatch
ok 12 - channel caller invokes the selected loaded module instead of bypassing dispatch
---
duration_ms: 2.4109
type: 'test'
...
# Subtest: channel caller keeps the selected module operation filter in front of the core transport
ok 13 - channel caller keeps the selected module operation filter in front of the core transport
---
duration_ms: 0.296323
type: 'test'
...
# Subtest: REQ-LIMIT-2 daily-quota exports interface version 2 with mayLaunch, mustStop and report
ok 14 - REQ-LIMIT-2 daily-quota exports interface version 2 with mayLaunch, mustStop and report
---
duration_ms: 1.604743
type: 'test'
...
# Subtest: REQ-LIMIT-2 the count sums every kind of the account's known records since the later of the day start and since
ok 15 - REQ-LIMIT-2 the count sums every kind of the account's known records since the later of the day start and since
---
duration_ms: 18.301118
type: 'test'
...
# Subtest: REQ-LIMIT-2 a launch with no account (pi) is covered by no daily quota
ok 16 - REQ-LIMIT-2 a launch with no account (pi) is covered by no daily quota
---
duration_ms: 0.67675
type: 'test'
...
# Subtest: REQ-LIMIT-4 an unknown turn adds nothing and is counted apart
ok 17 - REQ-LIMIT-4 an unknown turn adds nothing and is counted apart
---
duration_ms: 0.68869
type: 'test'
...
# Subtest: REQ-LIMIT-2 the day turns at the reset in its zone, not in UTC, and before it the day is yesterday's
ok 18 - REQ-LIMIT-2 the day turns at the reset in its zone, not in UTC, and before it the day is yesterday's
---
duration_ms: 0.910567
type: 'test'
...
# Subtest: REQ-LIMIT-2 the spring DST change makes the day after a 00:00 reset 23 hours long
ok 19 - REQ-LIMIT-2 the spring DST change makes the day after a 00:00 reset 23 hours long
---
duration_ms: 0.655694
type: 'test'
...
# Subtest: REQ-LIMIT-2 the fall DST change makes the day after a 00:00 reset 25 hours long
ok 20 - REQ-LIMIT-2 the fall DST change makes the day after a 00:00 reset 25 hours long
---
duration_ms: 0.494632
type: 'test'
...
# Subtest: REQ-LIMIT-2 a reset the clocks skip starts the day at the first instant after the gap
ok 21 - REQ-LIMIT-2 a reset the clocks skip starts the day at the first instant after the gap
---
duration_ms: 2.195628
type: 'test'
...
# Subtest: REQ-LIMIT-2 a reset the clocks repeat starts one day, at the first one
ok 22 - REQ-LIMIT-2 a reset the clocks repeat starts one day, at the first one
---
duration_ms: 0.909074
type: 'test'
...
# Subtest: REQ-LIMIT-2 a launch is refused at the quota, a turn that reaches it stops, and the next day allows again
ok 23 - REQ-LIMIT-2 a launch is refused at the quota, a turn that reaches it stops, and the next day allows again
---
duration_ms: 1.793159
type: 'test'
...
# Subtest: REQ-LIMIT-2 counts past the safe integer range come back as digit strings
ok 24 - REQ-LIMIT-2 counts past the safe integer range come back as digit strings
---
duration_ms: 0.560099
type: 'test'
...
# Subtest: REQ-LIMIT-4 bad leaves, records or times throw a code, and the check reads nothing but its arguments
ok 25 - REQ-LIMIT-4 bad leaves, records or times throw a code, and the check reads nothing but its arguments
---
duration_ms: 3.066376
type: 'test'
...
# Subtest: REQ-LIMIT-2 no daily quotas: every launch is allowed and the report is empty
ok 26 - REQ-LIMIT-2 no daily quotas: every launch is allowed and the report is empty
---
duration_ms: 0.26005
type: 'test'
...
# Subtest: row 307 pi answers what row 270 read: plain
ok 27 - row 307 pi answers what row 270 read: plain
---
duration_ms: 3.128746
type: 'test'
...
# Subtest: row 307 pi answers what row 270 read: budget
ok 28 - row 307 pi answers what row 270 read: budget
---
duration_ms: 1.055314
type: 'test'
...
# Subtest: row 307 pi answers what row 270 read: cap
ok 29 - row 307 pi answers what row 270 read: cap
---
duration_ms: 0.646932
type: 'test'
...
# Subtest: row 307 pi answers what row 270 read: shrank
ok 30 - row 307 pi answers what row 270 read: shrank
---
duration_ms: 0.514604
type: 'test'
...
# Subtest: row 307 pi answers what row 270 read: header
ok 31 - row 307 pi answers what row 270 read: header
---
duration_ms: 0.71648
type: 'test'
...
# Subtest: row 307 pi's first collection over Claude history answers harness-unsupported without a scan, and a later one scans
ok 32 - row 307 pi's first collection over Claude history answers harness-unsupported without a scan, and a later one scans
---
duration_ms: 1.146063
type: 'test'
...
# Subtest: row 307 claude-code reads nothing and answers harness-unsupported with no version
ok 33 - row 307 claude-code reads nothing and answers harness-unsupported with no version
---
duration_ms: 0.242405
type: 'test'
...
# Subtest: row 307 a harness module without compactions doesn't load: missing-export
ok 34 - row 307 a harness module without compactions doesn't load: missing-export
---
duration_ms: 3.973295
type: 'test'
...
# Subtest: row 65 both harness modules load through the loader with every export the kind names
ok 35 - row 65 both harness modules load through the loader with every export the kind names
---
duration_ms: 10.826134
type: 'test'
...
# Subtest: row 65 each module answers for its own harness: adapter, levels, account, web, turn end and session files
ok 36 - row 65 each module answers for its own harness: adapter, levels, account, web, turn end and session files
---
duration_ms: 0.901435
type: 'test'
...
# Subtest: row 65 claude-code preflight: a missing credential, then a missing or relative binary, each refuse with their code
ok 37 - row 65 claude-code preflight: a missing credential, then a missing or relative binary, each refuse with their code
---
duration_ms: 4.184201
type: 'test'
...
# Subtest: row 65 claude-code version asks MOSAIC_CLAUDE_BIN when set, else claude on PATH, else null
ok 38 - row 65 claude-code version asks MOSAIC_CLAUDE_BIN when set, else claude on PATH, else null
---
duration_ms: 4.810847
type: 'test'
...
# Subtest: row 65 pi preflight passes with the repository's pi, and its version is the package pin
ok 39 - row 65 pi preflight passes with the repository's pi, and its version is the package pin
---
duration_ms: 1.138555
type: 'test'
...
# Subtest: row 65 env passes the thinking level to both adapters, and claude-code's bundle writes its hook and MCP files
ok 40 - row 65 env passes the thinking level to both adapters, and claude-code's bundle writes its hook and MCP files
---
duration_ms: 1.575693
type: 'test'
...
# Subtest: row 65 a route's thinking reaches pi as --thinking and claude as --effort, through each module's env and adapter
ok 41 - row 65 a route's thinking reaches pi as --thinking and claude as --effort, through each module's env and adapter
---
duration_ms: 19.982183
type: 'test'
...
# Subtest: row 65 no core source outside packages/plugins names a harness, apart from the listed exceptions
ok 42 - row 65 no core source outside packages/plugins names a harness, apart from the listed exceptions
---
duration_ms: 35.700253
type: 'test'
...
# Subtest: row 65 the grep's pattern catches a quoted name and a regex alternation, and not a word in prose
ok 43 - row 65 the grep's pattern catches a quoted name and a regex alternation, and not a word in prose
---
duration_ms: 0.194718
type: 'test'
...
# Subtest: REQ-PLUG-1 REQ-LIMIT-4 the registry: usage-source at interface version 1, limit-check at 2 (row 125), each a list
ok 44 - REQ-PLUG-1 REQ-LIMIT-4 the registry: usage-source at interface version 1, limit-check at 2 (row 125), each a list
---
duration_ms: 1.459893
type: 'test'
...
# Subtest: REQ-PLUG-1 checkPlugins accepts one key per kind, each a list of names, empty included
ok 45 - REQ-PLUG-1 checkPlugins accepts one key per kind, each a list of names, empty included
---
duration_ms: 0.318081
type: 'test'
...
# Subtest: REQ-PLUG-1 checkPlugins refuses bad shapes, unknown kinds, bad names and duplicates
ok 46 - REQ-PLUG-1 checkPlugins refuses bad shapes, unknown kinds, bad names and duplicates
---
duration_ms: 4.006863
type: 'test'
...
# Subtest: REQ-PLUG-1 a kind that switches on one module takes one name, not a list
ok 47 - REQ-PLUG-1 a kind that switches on one module takes one name, not a list
---
duration_ms: 0.240242
type: 'test'
...
# Subtest: REQ-PLUG-1 checkPlugins reports through the caller's fail callback
ok 48 - REQ-PLUG-1 checkPlugins reports through the caller's fail callback
---
duration_ms: 0.227037
type: 'test'
...
# Subtest: REQ-PLUG-1 fixture modules of each kind switch on from a test organization file, no core file changed
ok 49 - REQ-PLUG-1 fixture modules of each kind switch on from a test organization file, no core file changed
---
duration_ms: 10.556155
type: 'test'
...
# Subtest: REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting
ok 50 - REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting
---
duration_ms: 4.644716
type: 'test'
...
# Subtest: REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting
ok 51 - REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting
---
duration_ms: 4.413168
type: 'test'
...
# Subtest: REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting
ok 52 - REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting
---
duration_ms: 2.976821
type: 'test'
...
# Subtest: REQ-PLUG-1 a symlinked kind directory refuses and keeps the old setting
ok 53 - REQ-PLUG-1 a symlinked kind directory refuses and keeps the old setting
---
duration_ms: 2.66049
type: 'test'
...
# Subtest: REQ-PLUG-1 a symlinked packages/plugins refuses (run with --preserve-symlinks so the path keeps it)
ok 54 - REQ-PLUG-1 a symlinked packages/plugins refuses (run with --preserve-symlinks so the path keeps it)
---
duration_ms: 31.929167
type: 'test'
...
# Subtest: REQ-PLUG-1 index.mjs swapped for a symlink after the lstat checks refuses at the realpath check
ok 55 - REQ-PLUG-1 index.mjs swapped for a symlink after the lstat checks refuses at the realpath check
---
duration_ms: 3.775138
type: 'test'
...
# Subtest: REQ-PLUG-1 a path that can't be read refuses as unreadable, is logged and keeps the old setting
ok 56 - REQ-PLUG-1 a path that can't be read refuses as unreadable, is logged and keeps the old setting
---
duration_ms: 3.568356
type: 'test'
...
# Subtest: REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath
ok 57 - REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath
---
duration_ms: 3.240777
type: 'test'
...
# Subtest: REQ-PLUG-1 a module that fails to load refuses and keeps the old setting
ok 58 - REQ-PLUG-1 a module that fails to load refuses and keeps the old setting
---
duration_ms: 3.317002
type: 'test'
...
# Subtest: REQ-PLUG-1 a missing export refuses and keeps the old setting
ok 59 - REQ-PLUG-1 a missing export refuses and keeps the old setting
---
duration_ms: 5.632466
type: 'test'
...
# Subtest: REQ-PLUG-1 a different interface version refuses and keeps the old setting
ok 60 - REQ-PLUG-1 a different interface version refuses and keeps the old setting
---
duration_ms: 5.597735
type: 'test'
...
# Subtest: REQ-PLUG-1 REQ-LIMIT-3 a version 1 limit check refuses after the bump to 2, and the old setting stays
ok 61 - REQ-PLUG-1 REQ-LIMIT-3 a version 1 limit check refuses after the bump to 2, and the old setting stays
---
duration_ms: 4.383909
type: 'test'
...
# Subtest: REQ-PLUG-1 a kind refused on its first load has nothing switched on, and the log names kind and name
ok 62 - REQ-PLUG-1 a kind refused on its first load has nothing switched on, and the log names kind and name
---
duration_ms: 3.685614
type: 'test'
...
# Subtest: REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything
ok 63 - REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything
---
duration_ms: 5.345608
type: 'test'
...
# Subtest: REQ-PLUG-1 loads run one at a time, so the last requested setting wins
ok 64 - REQ-PLUG-1 loads run one at a time, so the last requested setting wins
---
duration_ms: 105.419451
type: 'test'
...
# Subtest: REQ-PLUG-1 the loader needs a log callback
ok 65 - REQ-PLUG-1 the loader needs a log callback
---
duration_ms: 1.585267
type: 'test'
...
# Subtest: C2-10c webui permits exactly the three added room verbs and preserves core refusals
ok 66 - C2-10c webui permits exactly the three added room verbs and preserves core refusals
---
duration_ms: 5.236914
type: 'test'
...
# Subtest: REQ-PLUG-2 the real tree's searxng-url module switches on as the search-source and answers
ok 67 - REQ-PLUG-2 the real tree's searxng-url module switches on as the search-source and answers
---
duration_ms: 3.225057
type: 'test'
...
# Subtest: REQ-PLUG-2 a SearXNG that refuses JSON (403) is search-down, a bad settings url throws
ok 68 - REQ-PLUG-2 a SearXNG that refuses JSON (403) is search-down, a bad settings url throws
---
duration_ms: 1.278205
type: 'test'
...
# Subtest: REQ-PLUG-2 search-source takes one name, not a list
ok 69 - REQ-PLUG-2 search-source takes one name, not a list
---
duration_ms: 0.269767
type: 'test'
...
# Subtest: REQ-PLUG-2 searxng-bundled queries the fixed loopback address and ignores web.searxng
ok 70 - REQ-PLUG-2 searxng-bundled queries the fixed loopback address and ignores web.searxng
---
duration_ms: 1.229975
type: 'test'
...
# Subtest: REQ-PLUG-2 harness-builtin switches on, serves no broker search, and refuses if called
ok 71 - REQ-PLUG-2 harness-builtin switches on, serves no broker search, and refuses if called
---
duration_ms: 0.882877
type: 'test'
...
# Subtest: the searxng modules end the request when the broker's AbortSignal fires
ok 72 - the searxng modules end the request when the broker's AbortSignal fires
---
duration_ms: 41.188565
type: 'test'
...
# Subtest: hasModule: true for a shipped module, false for a missing one, an unknown kind or a bad name
ok 73 - hasModule: true for a shipped module, false for a missing one, an unknown kind or a bad name
---
duration_ms: 0.618514
type: 'test'
...
# Subtest: REQ-LIMIT-3 token-limit exports interface version 2 with mayLaunch, mustStop and report
ok 74 - REQ-LIMIT-3 token-limit exports interface version 2 with mayLaunch, mustStop and report
---
duration_ms: 4.517556
type: 'test'
...
# Subtest: REQ-LIMIT-3 each subject kind refuses at its limit and allows under it
ok 75 - REQ-LIMIT-3 each subject kind refuses at its limit and allows under it
---
duration_ms: 1.445175
type: 'test'
...
# Subtest: REQ-LIMIT-3 a limit covers only its own subject's records and launches
ok 76 - REQ-LIMIT-3 a limit covers only its own subject's records and launches
---
duration_ms: 0.361027
type: 'test'
...
# Subtest: REQ-LIMIT-4 only known records count; an unknown turn adds nothing and is counted apart
ok 77 - REQ-LIMIT-4 only known records count; an unknown turn adds nothing and is counted apart
---
duration_ms: 0.288366
type: 'test'
...
# Subtest: REQ-LIMIT-3 a reset moves since: records before it no longer count
ok 78 - REQ-LIMIT-3 a reset moves since: records before it no longer count
---
duration_ms: 0.203004
type: 'test'
...
# Subtest: REQ-LIMIT-3 limit 0 refuses with no records; the first limit hit in file order is named
ok 79 - REQ-LIMIT-3 limit 0 refuses with no records; the first limit hit in file order is named
---
duration_ms: 0.160925
type: 'test'
...
# Subtest: REQ-LIMIT-3 a key limit is not enforced while every record's account is null (decision 150 Q1)
ok 80 - REQ-LIMIT-3 a key limit is not enforced while every record's account is null (decision 150 Q1)
---
duration_ms: 0.192387
type: 'test'
...
# Subtest: REQ-LIMIT-3 counts past the safe integer range come back as digit strings
ok 81 - REQ-LIMIT-3 counts past the safe integer range come back as digit strings
---
duration_ms: 0.190253
type: 'test'
...
# Subtest: REQ-LIMIT-4 bad records or times throw a code, and the check reads nothing but its arguments
ok 82 - REQ-LIMIT-4 bad records or times throw a code, and the check reads nothing but its arguments
---
duration_ms: 0.66893
type: 'test'
...
# Subtest: REQ-LIMIT-3 no token limits: every launch is allowed and the report is empty
ok 83 - REQ-LIMIT-3 no token limits: every launch is allowed and the report is empty
---
duration_ms: 0.264938
type: 'test'
...
# Subtest: REQ-LIMIT-3 token-limit ignores tokens.daily, which the daily-quota check enforces (row 126)
ok 84 - REQ-LIMIT-3 token-limit ignores tokens.daily, which the daily-quota check enforces (row 126)
---
duration_ms: 0.52878
type: 'test'
...
# Subtest: REQ-LIMIT-4 pi: reports all token kinds and deduplicates assistant ids
ok 85 - REQ-LIMIT-4 pi: reports all token kinds and deduplicates assistant ids
---
duration_ms: 3.202577
type: 'test'
...
# Subtest: REQ-LIMIT-4 claude-code: reports all token kinds and deduplicates assistant ids
ok 86 - REQ-LIMIT-4 claude-code: reports all token kinds and deduplicates assistant ids
---
duration_ms: 0.789693
type: 'test'
...
# Subtest: REQ-LIMIT-4 pi cut line is unknown, never zero or content
ok 87 - REQ-LIMIT-4 pi cut line is unknown, never zero or content
---
duration_ms: 1.068437
type: 'test'
...
# Subtest: REQ-LIMIT-4 pi invalid UTF-8 is unknown, never zero or content
ok 88 - REQ-LIMIT-4 pi invalid UTF-8 is unknown, never zero or content
---
duration_ms: 0.551999
type: 'test'
...
# Subtest: REQ-LIMIT-4 pi missing input is unknown, never zero or content
ok 89 - REQ-LIMIT-4 pi missing input is unknown, never zero or content
---
duration_ms: 0.585082
type: 'test'
...
# Subtest: REQ-LIMIT-4 pi negative count is unknown, never zero or content
ok 90 - REQ-LIMIT-4 pi negative count is unknown, never zero or content
---
duration_ms: 0.498103
type: 'test'
...
# Subtest: REQ-LIMIT-4 pi fractional count is unknown, never zero or content
ok 91 - REQ-LIMIT-4 pi fractional count is unknown, never zero or content
---
duration_ms: 0.451081
type: 'test'
...
# Subtest: REQ-LIMIT-4 pi unsafe integer is unknown, never zero or content
ok 92 - REQ-LIMIT-4 pi unsafe integer is unknown, never zero or content
---
duration_ms: 0.467648
type: 'test'
...
# Subtest: REQ-LIMIT-4 pi file size is unknown, never zero or content
ok 93 - REQ-LIMIT-4 pi file size is unknown, never zero or content
---
duration_ms: 12.153053
type: 'test'
...
# Subtest: REQ-LIMIT-4 pi line size is unknown, never zero or content
ok 94 - REQ-LIMIT-4 pi line size is unknown, never zero or content
---
duration_ms: 3.738483
type: 'test'
...
# Subtest: REQ-LIMIT-4 pi symlink file is unknown, never zero or content
ok 95 - REQ-LIMIT-4 pi symlink file is unknown, never zero or content
---
duration_ms: 0.51929
type: 'test'
...
# Subtest: REQ-LIMIT-4 pi hardlink file is unknown, never zero or content
ok 96 - REQ-LIMIT-4 pi hardlink file is unknown, never zero or content
---
duration_ms: 0.332686
type: 'test'
...
# Subtest: REQ-LIMIT-4 claude-code cut line is unknown, never zero or content
ok 97 - REQ-LIMIT-4 claude-code cut line is unknown, never zero or content
---
duration_ms: 0.375612
type: 'test'
...
# Subtest: REQ-LIMIT-4 claude-code invalid UTF-8 is unknown, never zero or content
ok 98 - REQ-LIMIT-4 claude-code invalid UTF-8 is unknown, never zero or content
---
duration_ms: 0.399894
type: 'test'
...
# Subtest: REQ-LIMIT-4 claude-code missing input is unknown, never zero or content
ok 99 - REQ-LIMIT-4 claude-code missing input is unknown, never zero or content
---
duration_ms: 0.377755
type: 'test'
...
# Subtest: REQ-LIMIT-4 claude-code negative count is unknown, never zero or content
ok 100 - REQ-LIMIT-4 claude-code negative count is unknown, never zero or content
---
duration_ms: 0.370714
type: 'test'
...
# Subtest: REQ-LIMIT-4 claude-code fractional count is unknown, never zero or content
ok 101 - REQ-LIMIT-4 claude-code fractional count is unknown, never zero or content
---
duration_ms: 0.359511
type: 'test'
...
# Subtest: REQ-LIMIT-4 claude-code unsafe integer is unknown, never zero or content
ok 102 - REQ-LIMIT-4 claude-code unsafe integer is unknown, never zero or content
---
duration_ms: 0.372877
type: 'test'
...
# Subtest: REQ-LIMIT-4 claude-code file size is unknown, never zero or content
ok 103 - REQ-LIMIT-4 claude-code file size is unknown, never zero or content
---
duration_ms: 5.929833
type: 'test'
...
# Subtest: REQ-LIMIT-4 claude-code line size is unknown, never zero or content
ok 104 - REQ-LIMIT-4 claude-code line size is unknown, never zero or content
---
duration_ms: 2.390572
type: 'test'
...
# Subtest: REQ-LIMIT-4 claude-code symlink file is unknown, never zero or content
ok 105 - REQ-LIMIT-4 claude-code symlink file is unknown, never zero or content
---
duration_ms: 0.422073
type: 'test'
...
# Subtest: REQ-LIMIT-4 claude-code hardlink file is unknown, never zero or content
ok 106 - REQ-LIMIT-4 claude-code hardlink file is unknown, never zero or content
---
duration_ms: 0.361017
type: 'test'
...
# Subtest: REQ-LIMIT-4 pi a symlink directory anywhere in the root refuses
ok 107 - REQ-LIMIT-4 pi a symlink directory anywhere in the root refuses
---
duration_ms: 0.368549
type: 'test'
...
# Subtest: REQ-LIMIT-4 claude-code a symlink directory anywhere in the root refuses
ok 108 - REQ-LIMIT-4 claude-code a symlink directory anywhere in the root refuses
---
duration_ms: 0.289802
type: 'test'
...
# Subtest: REQ-LIMIT-4 bounded directory entries refuse before scanning an arbitrary tree
ok 109 - REQ-LIMIT-4 bounded directory entries refuse before scanning an arbitrary tree
---
duration_ms: 7.765819
type: 'test'
...
# Subtest: REQ-LIMIT-4 conflicting repeated usage refuses rather than double counting
ok 110 - REQ-LIMIT-4 conflicting repeated usage refuses rather than double counting
---
duration_ms: 0.531022
type: 'test'
...
# Subtest: REQ-LIMIT-4 oversized metadata refuses before reading any transcript bytes
ok 111 - REQ-LIMIT-4 oversized metadata refuses before reading any transcript bytes
---
duration_ms: 6.610835
type: 'test'
...
# Subtest: REQ-LIMIT-4 a file growing after fstat cannot exceed the streaming byte budget
ok 112 - REQ-LIMIT-4 a file growing after fstat cannot exceed the streaming byte budget
---
duration_ms: 6.282821
type: 'test'
...
# Subtest: REQ-LIMIT-4 a same-size edit during a read is unknown rather than a stable snapshot
ok 113 - REQ-LIMIT-4 a same-size edit during a read is unknown rather than a stable snapshot
---
duration_ms: 0.810788
type: 'test'
...
# Subtest: REQ-LIMIT-4 record count is bounded even when each record is tiny
ok 114 - REQ-LIMIT-4 record count is bounded even when each record is tiny
---
duration_ms: 7.805423
type: 'test'
...
# Subtest: REQ-LIMIT-4 missing assistant usage, malformed JSON and conflicting identities are unknown
ok 115 - REQ-LIMIT-4 missing assistant usage, malformed JSON and conflicting identities are unknown
---
duration_ms: 0.928936
type: 'test'
...
# Subtest: REQ-LIMIT-4 caller roots, unsupported harnesses and non-object JSON never become zero usage
ok 116 - REQ-LIMIT-4 caller roots, unsupported harnesses and non-object JSON never become zero usage
---
duration_ms: 0.621657
type: 'test'
...
# Subtest: REQ-LIMIT-4 even a complete JSON record with no final newline is an unknown cut line
ok 117 - REQ-LIMIT-4 even a complete JSON record with no final newline is an unknown cut line
---
duration_ms: 0.310336
type: 'test'
...
# Subtest: REQ-LIMIT-4 final file opens are nonblocking before hostile file type is known
ok 118 - REQ-LIMIT-4 final file opens are nonblocking before hostile file type is known
---
duration_ms: 0.533184
type: 'test'
...
# Subtest: REQ-LIMIT-4 invalid transcript entry names refuse before file lookup
ok 119 - REQ-LIMIT-4 invalid transcript entry names refuse before file lookup
---
duration_ms: 0.316982
type: 'test'
...
# Subtest: REQ-LIMIT-4 claude-code refuses a symlinked project directory
ok 120 - REQ-LIMIT-4 claude-code refuses a symlinked project directory
---
duration_ms: 0.474377
type: 'test'
...
1..120
# tests 120
# suites 0
# pass 120
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 1004.179548
@@ -0,0 +1,730 @@
TAP version 13
# Subtest: channel registry requires dispatch at interface 1 and switches a list
ok 1 - channel registry requires dispatch at interface 1 and switches a list
---
duration_ms: 1.093033
type: 'test'
...
# Subtest: channel shipped modules load and preserve every supported operation and bus refusal
ok 2 - channel shipped modules load and preserve every supported operation and bus refusal
---
duration_ms: 2.329081
type: 'test'
...
# Subtest: channel snapshot is a frozen matched pair and a captured array survives reload
ok 3 - channel snapshot is a frozen matched pair and a captured array survives reload
---
duration_ms: 3.672804
type: 'test'
...
# Subtest: channel guards refuse bad names, missing paths, exports and versions while retaining last good
ok 4 - channel guards refuse bad names, missing paths, exports and versions while retaining last good
---
duration_ms: 3.25585
type: 'test'
...
# Subtest: channel guards refuse symlinked module, index and kind directories
ok 5 - channel guards refuse symlinked module, index and kind directories
---
duration_ms: 2.246923
type: 'test'
...
# Subtest: channel caller re-reads settings and keeps off switches independent by module name
ok 6 - channel caller re-reads settings and keeps off switches independent by module name
---
duration_ms: 1.351401
type: 'test'
...
# Subtest: channel caller malformed settings refuse without a chat operation and no unrelated kind loads
ok 7 - channel caller malformed settings refuse without a chat operation and no unrelated kind loads
---
duration_ms: 0.435438
type: 'test'
...
# Subtest: channel caller uses last good after loader refusal and fails closed on first load
ok 8 - channel caller uses last good after loader refusal and fails closed on first load
---
duration_ms: 0.580004
type: 'test'
...
# Subtest: channel dispatch holds no selection lock while a slow send is awaiting
ok 9 - channel dispatch holds no selection lock while a slow send is awaiting
---
duration_ms: 0.491762
type: 'test'
...
# Subtest: channel last realpath check refuses an index swapped after component checks
ok 10 - channel last realpath check refuses an index swapped after component checks
---
duration_ms: 2.241815
type: 'test'
...
# Subtest: channel caller refuses invalid core construction
ok 11 - channel caller refuses invalid core construction
---
duration_ms: 0.150251
type: 'test'
...
# Subtest: channel caller invokes the selected loaded module instead of bypassing dispatch
ok 12 - channel caller invokes the selected loaded module instead of bypassing dispatch
---
duration_ms: 2.065095
type: 'test'
...
# Subtest: channel caller keeps the selected module operation filter in front of the core transport
ok 13 - channel caller keeps the selected module operation filter in front of the core transport
---
duration_ms: 0.241841
type: 'test'
...
# Subtest: REQ-LIMIT-2 daily-quota exports interface version 2 with mayLaunch, mustStop and report
ok 14 - REQ-LIMIT-2 daily-quota exports interface version 2 with mayLaunch, mustStop and report
---
duration_ms: 4.156727
type: 'test'
...
# Subtest: REQ-LIMIT-2 the count sums every kind of the account's known records since the later of the day start and since
ok 15 - REQ-LIMIT-2 the count sums every kind of the account's known records since the later of the day start and since
---
duration_ms: 12.582509
type: 'test'
...
# Subtest: REQ-LIMIT-2 a launch with no account (pi) is covered by no daily quota
ok 16 - REQ-LIMIT-2 a launch with no account (pi) is covered by no daily quota
---
duration_ms: 0.329543
type: 'test'
...
# Subtest: REQ-LIMIT-4 an unknown turn adds nothing and is counted apart
ok 17 - REQ-LIMIT-4 an unknown turn adds nothing and is counted apart
---
duration_ms: 0.442314
type: 'test'
...
# Subtest: REQ-LIMIT-2 the day turns at the reset in its zone, not in UTC, and before it the day is yesterday's
ok 18 - REQ-LIMIT-2 the day turns at the reset in its zone, not in UTC, and before it the day is yesterday's
---
duration_ms: 0.682365
type: 'test'
...
# Subtest: REQ-LIMIT-2 the spring DST change makes the day after a 00:00 reset 23 hours long
ok 19 - REQ-LIMIT-2 the spring DST change makes the day after a 00:00 reset 23 hours long
---
duration_ms: 0.387921
type: 'test'
...
# Subtest: REQ-LIMIT-2 the fall DST change makes the day after a 00:00 reset 25 hours long
ok 20 - REQ-LIMIT-2 the fall DST change makes the day after a 00:00 reset 25 hours long
---
duration_ms: 0.330814
type: 'test'
...
# Subtest: REQ-LIMIT-2 a reset the clocks skip starts the day at the first instant after the gap
ok 21 - REQ-LIMIT-2 a reset the clocks skip starts the day at the first instant after the gap
---
duration_ms: 1.372326
type: 'test'
...
# Subtest: REQ-LIMIT-2 a reset the clocks repeat starts one day, at the first one
ok 22 - REQ-LIMIT-2 a reset the clocks repeat starts one day, at the first one
---
duration_ms: 0.4571
type: 'test'
...
# Subtest: REQ-LIMIT-2 a launch is refused at the quota, a turn that reaches it stops, and the next day allows again
ok 23 - REQ-LIMIT-2 a launch is refused at the quota, a turn that reaches it stops, and the next day allows again
---
duration_ms: 1.027459
type: 'test'
...
# Subtest: REQ-LIMIT-2 counts past the safe integer range come back as digit strings
ok 24 - REQ-LIMIT-2 counts past the safe integer range come back as digit strings
---
duration_ms: 0.350076
type: 'test'
...
# Subtest: REQ-LIMIT-4 bad leaves, records or times throw a code, and the check reads nothing but its arguments
ok 25 - REQ-LIMIT-4 bad leaves, records or times throw a code, and the check reads nothing but its arguments
---
duration_ms: 2.155059
type: 'test'
...
# Subtest: REQ-LIMIT-2 no daily quotas: every launch is allowed and the report is empty
ok 26 - REQ-LIMIT-2 no daily quotas: every launch is allowed and the report is empty
---
duration_ms: 0.190579
type: 'test'
...
# Subtest: row 307 pi answers what row 270 read: plain
ok 27 - row 307 pi answers what row 270 read: plain
---
duration_ms: 2.273277
type: 'test'
...
# Subtest: row 307 pi answers what row 270 read: budget
ok 28 - row 307 pi answers what row 270 read: budget
---
duration_ms: 0.560346
type: 'test'
...
# Subtest: row 307 pi answers what row 270 read: cap
ok 29 - row 307 pi answers what row 270 read: cap
---
duration_ms: 0.447806
type: 'test'
...
# Subtest: row 307 pi answers what row 270 read: shrank
ok 30 - row 307 pi answers what row 270 read: shrank
---
duration_ms: 0.41824
type: 'test'
...
# Subtest: row 307 pi answers what row 270 read: header
ok 31 - row 307 pi answers what row 270 read: header
---
duration_ms: 0.525662
type: 'test'
...
# Subtest: row 307 pi's first collection over Claude history answers harness-unsupported without a scan, and a later one scans
ok 32 - row 307 pi's first collection over Claude history answers harness-unsupported without a scan, and a later one scans
---
duration_ms: 0.854402
type: 'test'
...
# Subtest: row 307 claude-code reads nothing and answers harness-unsupported with no version
ok 33 - row 307 claude-code reads nothing and answers harness-unsupported with no version
---
duration_ms: 0.145488
type: 'test'
...
# Subtest: row 307 a harness module without compactions doesn't load: missing-export
ok 34 - row 307 a harness module without compactions doesn't load: missing-export
---
duration_ms: 2.544641
type: 'test'
...
# Subtest: row 65 both harness modules load through the loader with every export the kind names
ok 35 - row 65 both harness modules load through the loader with every export the kind names
---
duration_ms: 7.887813
type: 'test'
...
# Subtest: row 65 each module answers for its own harness: adapter, levels, account, web, turn end and session files
ok 36 - row 65 each module answers for its own harness: adapter, levels, account, web, turn end and session files
---
duration_ms: 0.743006
type: 'test'
...
# Subtest: row 65 claude-code preflight: a missing credential, then a missing or relative binary, each refuse with their code
ok 37 - row 65 claude-code preflight: a missing credential, then a missing or relative binary, each refuse with their code
---
duration_ms: 3.607123
type: 'test'
...
# Subtest: row 65 claude-code version asks MOSAIC_CLAUDE_BIN when set, else claude on PATH, else null
ok 38 - row 65 claude-code version asks MOSAIC_CLAUDE_BIN when set, else claude on PATH, else null
---
duration_ms: 3.846673
type: 'test'
...
# Subtest: row 65 pi preflight passes with the repository's pi, and its version is the package pin
ok 39 - row 65 pi preflight passes with the repository's pi, and its version is the package pin
---
duration_ms: 8.397292
type: 'test'
...
# Subtest: row 65 env passes the thinking level to both adapters, and claude-code's bundle writes its hook and MCP files
ok 40 - row 65 env passes the thinking level to both adapters, and claude-code's bundle writes its hook and MCP files
---
duration_ms: 1.435832
type: 'test'
...
# Subtest: row 65 a route's thinking reaches pi as --thinking and claude as --effort, through each module's env and adapter
ok 41 - row 65 a route's thinking reaches pi as --thinking and claude as --effort, through each module's env and adapter
---
duration_ms: 15.483026
type: 'test'
...
# Subtest: row 65 no core source outside packages/plugins names a harness, apart from the listed exceptions
ok 42 - row 65 no core source outside packages/plugins names a harness, apart from the listed exceptions
---
duration_ms: 14.005572
type: 'test'
...
# Subtest: row 65 the grep's pattern catches a quoted name and a regex alternation, and not a word in prose
ok 43 - row 65 the grep's pattern catches a quoted name and a regex alternation, and not a word in prose
---
duration_ms: 0.162322
type: 'test'
...
# Subtest: REQ-PLUG-1 REQ-LIMIT-4 the registry: usage-source at interface version 1, limit-check at 2 (row 125), each a list
ok 44 - REQ-PLUG-1 REQ-LIMIT-4 the registry: usage-source at interface version 1, limit-check at 2 (row 125), each a list
---
duration_ms: 1.063022
type: 'test'
...
# Subtest: REQ-PLUG-1 checkPlugins accepts one key per kind, each a list of names, empty included
ok 45 - REQ-PLUG-1 checkPlugins accepts one key per kind, each a list of names, empty included
---
duration_ms: 0.24919
type: 'test'
...
# Subtest: REQ-PLUG-1 checkPlugins refuses bad shapes, unknown kinds, bad names and duplicates
ok 46 - REQ-PLUG-1 checkPlugins refuses bad shapes, unknown kinds, bad names and duplicates
---
duration_ms: 0.939348
type: 'test'
...
# Subtest: REQ-PLUG-1 a kind that switches on one module takes one name, not a list
ok 47 - REQ-PLUG-1 a kind that switches on one module takes one name, not a list
---
duration_ms: 0.155413
type: 'test'
...
# Subtest: REQ-PLUG-1 checkPlugins reports through the caller's fail callback
ok 48 - REQ-PLUG-1 checkPlugins reports through the caller's fail callback
---
duration_ms: 0.16264
type: 'test'
...
# Subtest: REQ-PLUG-1 fixture modules of each kind switch on from a test organization file, no core file changed
ok 49 - REQ-PLUG-1 fixture modules of each kind switch on from a test organization file, no core file changed
---
duration_ms: 9.287009
type: 'test'
...
# Subtest: REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting
ok 50 - REQ-PLUG-1 a name not matching ^[a-z][a-z0-9-]*$ refuses and keeps the old setting
---
duration_ms: 3.680508
type: 'test'
...
# Subtest: REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting
ok 51 - REQ-PLUG-1 a missing module directory or index.mjs refuses and keeps the old setting
---
duration_ms: 3.446331
type: 'test'
...
# Subtest: REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting
ok 52 - REQ-PLUG-1 a symlinked module directory or index.mjs refuses and keeps the old setting
---
duration_ms: 2.671649
type: 'test'
...
# Subtest: REQ-PLUG-1 a symlinked kind directory refuses and keeps the old setting
ok 53 - REQ-PLUG-1 a symlinked kind directory refuses and keeps the old setting
---
duration_ms: 2.37595
type: 'test'
...
# Subtest: REQ-PLUG-1 a symlinked packages/plugins refuses (run with --preserve-symlinks so the path keeps it)
ok 54 - REQ-PLUG-1 a symlinked packages/plugins refuses (run with --preserve-symlinks so the path keeps it)
---
duration_ms: 25.90956
type: 'test'
...
# Subtest: REQ-PLUG-1 index.mjs swapped for a symlink after the lstat checks refuses at the realpath check
ok 55 - REQ-PLUG-1 index.mjs swapped for a symlink after the lstat checks refuses at the realpath check
---
duration_ms: 2.906707
type: 'test'
...
# Subtest: REQ-PLUG-1 a path that can't be read refuses as unreadable, is logged and keeps the old setting
ok 56 - REQ-PLUG-1 a path that can't be read refuses as unreadable, is logged and keeps the old setting
---
duration_ms: 2.796915
type: 'test'
...
# Subtest: REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath
ok 57 - REQ-PLUG-1 a path that becomes unreadable after the lstat checks refuses at either realpath
---
duration_ms: 2.400995
type: 'test'
...
# Subtest: REQ-PLUG-1 a module that fails to load refuses and keeps the old setting
ok 58 - REQ-PLUG-1 a module that fails to load refuses and keeps the old setting
---
duration_ms: 2.69425
type: 'test'
...
# Subtest: REQ-PLUG-1 a missing export refuses and keeps the old setting
ok 59 - REQ-PLUG-1 a missing export refuses and keeps the old setting
---
duration_ms: 3.312634
type: 'test'
...
# Subtest: REQ-PLUG-1 a different interface version refuses and keeps the old setting
ok 60 - REQ-PLUG-1 a different interface version refuses and keeps the old setting
---
duration_ms: 2.951412
type: 'test'
...
# Subtest: REQ-PLUG-1 REQ-LIMIT-3 a version 1 limit check refuses after the bump to 2, and the old setting stays
ok 61 - REQ-PLUG-1 REQ-LIMIT-3 a version 1 limit check refuses after the bump to 2, and the old setting stays
---
duration_ms: 2.585281
type: 'test'
...
# Subtest: REQ-PLUG-1 a kind refused on its first load has nothing switched on, and the log names kind and name
ok 62 - REQ-PLUG-1 a kind refused on its first load has nothing switched on, and the log names kind and name
---
duration_ms: 1.87625
type: 'test'
...
# Subtest: REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything
ok 63 - REQ-PLUG-1 the setting's shape: unknown kinds refuse alone, a bad whole setting keeps everything
---
duration_ms: 2.675823
type: 'test'
...
# Subtest: REQ-PLUG-1 loads run one at a time, so the last requested setting wins
ok 64 - REQ-PLUG-1 loads run one at a time, so the last requested setting wins
---
duration_ms: 102.001355
type: 'test'
...
# Subtest: REQ-PLUG-1 the loader needs a log callback
ok 65 - REQ-PLUG-1 the loader needs a log callback
---
duration_ms: 1.130584
type: 'test'
...
# Subtest: C2-10c webui permits exactly the three added room verbs and preserves core refusals
ok 66 - C2-10c webui permits exactly the three added room verbs and preserves core refusals
---
duration_ms: 1.532674
type: 'test'
...
# Subtest: REQ-PLUG-2 the real tree's searxng-url module switches on as the search-source and answers
ok 67 - REQ-PLUG-2 the real tree's searxng-url module switches on as the search-source and answers
---
duration_ms: 2.616283
type: 'test'
...
# Subtest: REQ-PLUG-2 a SearXNG that refuses JSON (403) is search-down, a bad settings url throws
ok 68 - REQ-PLUG-2 a SearXNG that refuses JSON (403) is search-down, a bad settings url throws
---
duration_ms: 1.153042
type: 'test'
...
# Subtest: REQ-PLUG-2 search-source takes one name, not a list
ok 69 - REQ-PLUG-2 search-source takes one name, not a list
---
duration_ms: 0.232651
type: 'test'
...
# Subtest: REQ-PLUG-2 searxng-bundled queries the fixed loopback address and ignores web.searxng
ok 70 - REQ-PLUG-2 searxng-bundled queries the fixed loopback address and ignores web.searxng
---
duration_ms: 0.766974
type: 'test'
...
# Subtest: REQ-PLUG-2 harness-builtin switches on, serves no broker search, and refuses if called
ok 71 - REQ-PLUG-2 harness-builtin switches on, serves no broker search, and refuses if called
---
duration_ms: 0.633341
type: 'test'
...
# Subtest: the searxng modules end the request when the broker's AbortSignal fires
ok 72 - the searxng modules end the request when the broker's AbortSignal fires
---
duration_ms: 41.975824
type: 'test'
...
# Subtest: hasModule: true for a shipped module, false for a missing one, an unknown kind or a bad name
ok 73 - hasModule: true for a shipped module, false for a missing one, an unknown kind or a bad name
---
duration_ms: 0.572554
type: 'test'
...
# Subtest: REQ-LIMIT-3 token-limit exports interface version 2 with mayLaunch, mustStop and report
ok 74 - REQ-LIMIT-3 token-limit exports interface version 2 with mayLaunch, mustStop and report
---
duration_ms: 4.069294
type: 'test'
...
# Subtest: REQ-LIMIT-3 each subject kind refuses at its limit and allows under it
ok 75 - REQ-LIMIT-3 each subject kind refuses at its limit and allows under it
---
duration_ms: 1.264429
type: 'test'
...
# Subtest: REQ-LIMIT-3 a limit covers only its own subject's records and launches
ok 76 - REQ-LIMIT-3 a limit covers only its own subject's records and launches
---
duration_ms: 0.310153
type: 'test'
...
# Subtest: REQ-LIMIT-4 only known records count; an unknown turn adds nothing and is counted apart
ok 77 - REQ-LIMIT-4 only known records count; an unknown turn adds nothing and is counted apart
---
duration_ms: 0.245871
type: 'test'
...
# Subtest: REQ-LIMIT-3 a reset moves since: records before it no longer count
ok 78 - REQ-LIMIT-3 a reset moves since: records before it no longer count
---
duration_ms: 0.178373
type: 'test'
...
# Subtest: REQ-LIMIT-3 limit 0 refuses with no records; the first limit hit in file order is named
ok 79 - REQ-LIMIT-3 limit 0 refuses with no records; the first limit hit in file order is named
---
duration_ms: 0.159818
type: 'test'
...
# Subtest: REQ-LIMIT-3 a key limit is not enforced while every record's account is null (decision 150 Q1)
ok 80 - REQ-LIMIT-3 a key limit is not enforced while every record's account is null (decision 150 Q1)
---
duration_ms: 0.172512
type: 'test'
...
# Subtest: REQ-LIMIT-3 counts past the safe integer range come back as digit strings
ok 81 - REQ-LIMIT-3 counts past the safe integer range come back as digit strings
---
duration_ms: 0.145224
type: 'test'
...
# Subtest: REQ-LIMIT-4 bad records or times throw a code, and the check reads nothing but its arguments
ok 82 - REQ-LIMIT-4 bad records or times throw a code, and the check reads nothing but its arguments
---
duration_ms: 0.661745
type: 'test'
...
# Subtest: REQ-LIMIT-3 no token limits: every launch is allowed and the report is empty
ok 83 - REQ-LIMIT-3 no token limits: every launch is allowed and the report is empty
---
duration_ms: 0.624533
type: 'test'
...
# Subtest: REQ-LIMIT-3 token-limit ignores tokens.daily, which the daily-quota check enforces (row 126)
ok 84 - REQ-LIMIT-3 token-limit ignores tokens.daily, which the daily-quota check enforces (row 126)
---
duration_ms: 0.133942
type: 'test'
...
# Subtest: REQ-LIMIT-4 pi: reports all token kinds and deduplicates assistant ids
ok 85 - REQ-LIMIT-4 pi: reports all token kinds and deduplicates assistant ids
---
duration_ms: 2.821247
type: 'test'
...
# Subtest: REQ-LIMIT-4 claude-code: reports all token kinds and deduplicates assistant ids
ok 86 - REQ-LIMIT-4 claude-code: reports all token kinds and deduplicates assistant ids
---
duration_ms: 0.696333
type: 'test'
...
# Subtest: REQ-LIMIT-4 pi cut line is unknown, never zero or content
ok 87 - REQ-LIMIT-4 pi cut line is unknown, never zero or content
---
duration_ms: 1.007977
type: 'test'
...
# Subtest: REQ-LIMIT-4 pi invalid UTF-8 is unknown, never zero or content
ok 88 - REQ-LIMIT-4 pi invalid UTF-8 is unknown, never zero or content
---
duration_ms: 0.493409
type: 'test'
...
# Subtest: REQ-LIMIT-4 pi missing input is unknown, never zero or content
ok 89 - REQ-LIMIT-4 pi missing input is unknown, never zero or content
---
duration_ms: 0.57636
type: 'test'
...
# Subtest: REQ-LIMIT-4 pi negative count is unknown, never zero or content
ok 90 - REQ-LIMIT-4 pi negative count is unknown, never zero or content
---
duration_ms: 0.49758
type: 'test'
...
# Subtest: REQ-LIMIT-4 pi fractional count is unknown, never zero or content
ok 91 - REQ-LIMIT-4 pi fractional count is unknown, never zero or content
---
duration_ms: 0.422118
type: 'test'
...
# Subtest: REQ-LIMIT-4 pi unsafe integer is unknown, never zero or content
ok 92 - REQ-LIMIT-4 pi unsafe integer is unknown, never zero or content
---
duration_ms: 0.397082
type: 'test'
...
# Subtest: REQ-LIMIT-4 pi file size is unknown, never zero or content
ok 93 - REQ-LIMIT-4 pi file size is unknown, never zero or content
---
duration_ms: 6.459547
type: 'test'
...
# Subtest: REQ-LIMIT-4 pi line size is unknown, never zero or content
ok 94 - REQ-LIMIT-4 pi line size is unknown, never zero or content
---
duration_ms: 3.92269
type: 'test'
...
# Subtest: REQ-LIMIT-4 pi symlink file is unknown, never zero or content
ok 95 - REQ-LIMIT-4 pi symlink file is unknown, never zero or content
---
duration_ms: 0.488148
type: 'test'
...
# Subtest: REQ-LIMIT-4 pi hardlink file is unknown, never zero or content
ok 96 - REQ-LIMIT-4 pi hardlink file is unknown, never zero or content
---
duration_ms: 0.325503
type: 'test'
...
# Subtest: REQ-LIMIT-4 claude-code cut line is unknown, never zero or content
ok 97 - REQ-LIMIT-4 claude-code cut line is unknown, never zero or content
---
duration_ms: 0.377051
type: 'test'
...
# Subtest: REQ-LIMIT-4 claude-code invalid UTF-8 is unknown, never zero or content
ok 98 - REQ-LIMIT-4 claude-code invalid UTF-8 is unknown, never zero or content
---
duration_ms: 0.388899
type: 'test'
...
# Subtest: REQ-LIMIT-4 claude-code missing input is unknown, never zero or content
ok 99 - REQ-LIMIT-4 claude-code missing input is unknown, never zero or content
---
duration_ms: 0.403653
type: 'test'
...
# Subtest: REQ-LIMIT-4 claude-code negative count is unknown, never zero or content
ok 100 - REQ-LIMIT-4 claude-code negative count is unknown, never zero or content
---
duration_ms: 0.356921
type: 'test'
...
# Subtest: REQ-LIMIT-4 claude-code fractional count is unknown, never zero or content
ok 101 - REQ-LIMIT-4 claude-code fractional count is unknown, never zero or content
---
duration_ms: 0.388944
type: 'test'
...
# Subtest: REQ-LIMIT-4 claude-code unsafe integer is unknown, never zero or content
ok 102 - REQ-LIMIT-4 claude-code unsafe integer is unknown, never zero or content
---
duration_ms: 0.377099
type: 'test'
...
# Subtest: REQ-LIMIT-4 claude-code file size is unknown, never zero or content
ok 103 - REQ-LIMIT-4 claude-code file size is unknown, never zero or content
---
duration_ms: 6.07976
type: 'test'
...
# Subtest: REQ-LIMIT-4 claude-code line size is unknown, never zero or content
ok 104 - REQ-LIMIT-4 claude-code line size is unknown, never zero or content
---
duration_ms: 1.893556
type: 'test'
...
# Subtest: REQ-LIMIT-4 claude-code symlink file is unknown, never zero or content
ok 105 - REQ-LIMIT-4 claude-code symlink file is unknown, never zero or content
---
duration_ms: 0.403314
type: 'test'
...
# Subtest: REQ-LIMIT-4 claude-code hardlink file is unknown, never zero or content
ok 106 - REQ-LIMIT-4 claude-code hardlink file is unknown, never zero or content
---
duration_ms: 0.316423
type: 'test'
...
# Subtest: REQ-LIMIT-4 pi a symlink directory anywhere in the root refuses
ok 107 - REQ-LIMIT-4 pi a symlink directory anywhere in the root refuses
---
duration_ms: 0.322364
type: 'test'
...
# Subtest: REQ-LIMIT-4 claude-code a symlink directory anywhere in the root refuses
ok 108 - REQ-LIMIT-4 claude-code a symlink directory anywhere in the root refuses
---
duration_ms: 0.311861
type: 'test'
...
# Subtest: REQ-LIMIT-4 bounded directory entries refuse before scanning an arbitrary tree
ok 109 - REQ-LIMIT-4 bounded directory entries refuse before scanning an arbitrary tree
---
duration_ms: 8.32832
type: 'test'
...
# Subtest: REQ-LIMIT-4 conflicting repeated usage refuses rather than double counting
ok 110 - REQ-LIMIT-4 conflicting repeated usage refuses rather than double counting
---
duration_ms: 0.528438
type: 'test'
...
# Subtest: REQ-LIMIT-4 oversized metadata refuses before reading any transcript bytes
ok 111 - REQ-LIMIT-4 oversized metadata refuses before reading any transcript bytes
---
duration_ms: 5.788996
type: 'test'
...
# Subtest: REQ-LIMIT-4 a file growing after fstat cannot exceed the streaming byte budget
ok 112 - REQ-LIMIT-4 a file growing after fstat cannot exceed the streaming byte budget
---
duration_ms: 4.822522
type: 'test'
...
# Subtest: REQ-LIMIT-4 a same-size edit during a read is unknown rather than a stable snapshot
ok 113 - REQ-LIMIT-4 a same-size edit during a read is unknown rather than a stable snapshot
---
duration_ms: 0.77981
type: 'test'
...
# Subtest: REQ-LIMIT-4 record count is bounded even when each record is tiny
ok 114 - REQ-LIMIT-4 record count is bounded even when each record is tiny
---
duration_ms: 7.87409
type: 'test'
...
# Subtest: REQ-LIMIT-4 missing assistant usage, malformed JSON and conflicting identities are unknown
ok 115 - REQ-LIMIT-4 missing assistant usage, malformed JSON and conflicting identities are unknown
---
duration_ms: 0.831847
type: 'test'
...
# Subtest: REQ-LIMIT-4 caller roots, unsupported harnesses and non-object JSON never become zero usage
ok 116 - REQ-LIMIT-4 caller roots, unsupported harnesses and non-object JSON never become zero usage
---
duration_ms: 0.640367
type: 'test'
...
# Subtest: REQ-LIMIT-4 even a complete JSON record with no final newline is an unknown cut line
ok 117 - REQ-LIMIT-4 even a complete JSON record with no final newline is an unknown cut line
---
duration_ms: 0.331929
type: 'test'
...
# Subtest: REQ-LIMIT-4 final file opens are nonblocking before hostile file type is known
ok 118 - REQ-LIMIT-4 final file opens are nonblocking before hostile file type is known
---
duration_ms: 0.469933
type: 'test'
...
# Subtest: REQ-LIMIT-4 invalid transcript entry names refuse before file lookup
ok 119 - REQ-LIMIT-4 invalid transcript entry names refuse before file lookup
---
duration_ms: 0.279053
type: 'test'
...
# Subtest: REQ-LIMIT-4 claude-code refuses a symlinked project directory
ok 120 - REQ-LIMIT-4 claude-code refuses a symlinked project directory
---
duration_ms: 0.491358
type: 'test'
...
1..120
# tests 120
# suites 0
# pass 120
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 829.707835
@@ -0,0 +1,5 @@
{
"worktree": "/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266",
"nodeChromiumRemaining": [],
"method": "Own cwd or explicit worktree command path; fresh child groups killed after every gate/mutant run. No other seat signalled."
}
@@ -0,0 +1,320 @@
[
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/bus-full.tap",
"display": "bus-full.tap",
"rawSHA256": "cecdb996f0d0f34b592bdc1d8f7015cf1fcef48b7235f34237fb7edf8c194d5c",
"displaySHA256": "21e5b1cecc5a1499a7ae12b73fef50adaad8ada5f6ad8c222ed098e0add2fe0c"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/editor-build.tap",
"display": "editor-build.tap",
"rawSHA256": "6e4fb4cbdd36ff817c8246e727f382ada773d4667f314e0a5a187369c2c994ba",
"displaySHA256": "6e4fb4cbdd36ff817c8246e727f382ada773d4667f314e0a5a187369c2c994ba"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/plugin-green.tap",
"display": "plugin-green.tap",
"rawSHA256": "812b4fe16ba42152021741cd518913c68a834afb2b41da2a704c9f1eea87ba3e",
"displaySHA256": "812b4fe16ba42152021741cd518913c68a834afb2b41da2a704c9f1eea87ba3e"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/plugin-red.tap",
"display": "plugin-red.tap",
"rawSHA256": "a03dbb651717487be38b57bd793727e5627f37c8d3efd19483dbe979d2c7db46",
"displaySHA256": "a03dbb651717487be38b57bd793727e5627f37c8d3efd19483dbe979d2c7db46"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/plugins-full.tap",
"display": "plugins-full.tap",
"rawSHA256": "287e1f34ebab1c9290d7553ac4ba5319bf6c660ce26b430b2c69535dd803013c",
"displaySHA256": "287e1f34ebab1c9290d7553ac4ba5319bf6c660ce26b430b2c69535dd803013c"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/room-browser-final.tap",
"display": "room-browser-final.tap",
"rawSHA256": "9061501c7cc991c2710df07f1db7f564dc2bf6119de11ec9835ebd23e62f9137",
"displaySHA256": "9061501c7cc991c2710df07f1db7f564dc2bf6119de11ec9835ebd23e62f9137"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/room-browser-final2.tap",
"display": "room-browser-final2.tap",
"rawSHA256": "e20f05a46438679273ab94a3bf8e718421e647c38068283bccb6895a5e2938c3",
"displaySHA256": "e20f05a46438679273ab94a3bf8e718421e647c38068283bccb6895a5e2938c3"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/room-browser-green.tap",
"display": "room-browser-green.tap",
"rawSHA256": "a5197d7417efef5ba7dfa9c480516e26719e366adaeaeef49cbcfa9ae96285ee",
"displaySHA256": "a5197d7417efef5ba7dfa9c480516e26719e366adaeaeef49cbcfa9ae96285ee"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/room-browser-green2.tap",
"display": "room-browser-green2.tap",
"rawSHA256": "d00a8f2842a74adbd304020dd4536bd0328a8fe50d10462267673bb87b93a69e",
"displaySHA256": "d00a8f2842a74adbd304020dd4536bd0328a8fe50d10462267673bb87b93a69e"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/room-browser-red.tap",
"display": "room-browser-red.tap",
"rawSHA256": "0049cf34649eb250262a365dfa65f579f02d50cc1df4c0139c3e2c17c37d91a5",
"displaySHA256": "0049cf34649eb250262a365dfa65f579f02d50cc1df4c0139c3e2c17c37d91a5"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/room-check-green.tap",
"display": "room-check-green.tap",
"rawSHA256": "efd5ac58b3cc94f4b5d831b5372c96cf1390af2eaf4215a55c179b97ad72bb64",
"displaySHA256": "efd5ac58b3cc94f4b5d831b5372c96cf1390af2eaf4215a55c179b97ad72bb64"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/room-check-red.tap",
"display": "room-check-red.tap",
"rawSHA256": "b2917225a113bdf5a9cc2ff9efceb336f0cb8cbc4593bf8b4b2aa2292b025a9d",
"displaySHA256": "c41c959a330ff01db5941da91ee64e5ac398850710127920809ec0368b32026c"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/room-http-final.tap",
"display": "room-http-final.tap",
"rawSHA256": "25844a7bcca478617d95ec23460dd58aca539232d2eb3047d6537b5b4b5f3261",
"displaySHA256": "25844a7bcca478617d95ec23460dd58aca539232d2eb3047d6537b5b4b5f3261"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/room-http-green.tap",
"display": "room-http-green.tap",
"rawSHA256": "d2a309b9e9b9859f4c4ba4352cc70ecf70cdfded31c187b8361250071b508140",
"displaySHA256": "d2a309b9e9b9859f4c4ba4352cc70ecf70cdfded31c187b8361250071b508140"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/room-http-red.tap",
"display": "room-http-red.tap",
"rawSHA256": "9d642f087190461f71d26d8a2e5802ed329f9499a07eafa763eacc1b1a7cde6e",
"displaySHA256": "2c27ec9c7ee06484440705b2166f95042c8db357a2879930f55b68fb62557f72"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/room-http-validation-red.tap",
"display": "room-http-validation-red.tap",
"rawSHA256": "12ebb7b83c3f59bfefc5ea3964f40a868b2405661533a74f01644486baf6fe12",
"displaySHA256": "fbddc50f3cf24c42520b4b7fd7649c83f52409346cc177ddd946286ac712cc02"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/t9-rerun-1.tap",
"display": "t9-rerun-1.tap",
"rawSHA256": "221bae8b7e9e8dee198580e8c3985dc7cef88f2b049b2c2f536df67cbb0d7ac9",
"displaySHA256": "221bae8b7e9e8dee198580e8c3985dc7cef88f2b049b2c2f536df67cbb0d7ac9"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/t9-rerun-2.tap",
"display": "t9-rerun-2.tap",
"rawSHA256": "13cc40f64acd8311cc48d695a8f97c277ca115bf7e5dc72dbe3696b8144fc8be",
"displaySHA256": "13cc40f64acd8311cc48d695a8f97c277ca115bf7e5dc72dbe3696b8144fc8be"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/t9-rerun-3.tap",
"display": "t9-rerun-3.tap",
"rawSHA256": "d398bd81d1f86a599bd8da59d5d45c6a534d75f656046880042d687ca1b2f07f",
"displaySHA256": "d398bd81d1f86a599bd8da59d5d45c6a534d75f656046880042d687ca1b2f07f"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/test-auth.tap",
"display": "test-auth.tap",
"rawSHA256": "f91fc95a173339137f981e24fbf630acfde957e32c3cd71e28304532083c6a77",
"displaySHA256": "f91fc95a173339137f981e24fbf630acfde957e32c3cd71e28304532083c6a77"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/test-conductor.tap",
"display": "test-conductor.tap",
"rawSHA256": "c50ff64b098027711e20445f4c02612a9a2db0c316b17160811f8beadf183ad6",
"displaySHA256": "c50ff64b098027711e20445f4c02612a9a2db0c316b17160811f8beadf183ad6"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/test-config.tap",
"display": "test-config.tap",
"rawSHA256": "92ea8ce5e66d892fefacc76b87d140bcfb8c5a51dc77bdf4a47a6213ac5d2898",
"displaySHA256": "92ea8ce5e66d892fefacc76b87d140bcfb8c5a51dc77bdf4a47a6213ac5d2898"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/test-discord.tap",
"display": "test-discord.tap",
"rawSHA256": "9b482b7a3f0672c872923c06e71d5a88ff085a08170905a6cabe1d2b6fc283b6",
"displaySHA256": "9b482b7a3f0672c872923c06e71d5a88ff085a08170905a6cabe1d2b6fc283b6"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/test-extension-package.tap",
"display": "test-extension-package.tap",
"rawSHA256": "3aae7d4f584eb86c19a87fc2589ede0159617c1cc59d35e1e326ebf1830a4bfc",
"displaySHA256": "3aae7d4f584eb86c19a87fc2589ede0159617c1cc59d35e1e326ebf1830a4bfc"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/test-federation-acceptance.tap",
"display": "test-federation-acceptance.tap",
"rawSHA256": "674d778090229d0d9adcad089e8cbeaf811c5e797380655a57dce37ca7fc768e",
"displaySHA256": "674d778090229d0d9adcad089e8cbeaf811c5e797380655a57dce37ca7fc768e"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/test-foundation.tap",
"display": "test-foundation.tap",
"rawSHA256": "83dfaa21c4e4ad941088efab3f69e87ebd2f6bd3cc72ede938e21dc06da8a34f",
"displaySHA256": "83dfaa21c4e4ad941088efab3f69e87ebd2f6bd3cc72ede938e21dc06da8a34f"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/test-land-work.tap",
"display": "test-land-work.tap",
"rawSHA256": "3e2f8024027592e77790db2bbe039803060915ebf37c7b67f04071a7e83d20dc",
"displaySHA256": "3e2f8024027592e77790db2bbe039803060915ebf37c7b67f04071a7e83d20dc"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/test-push-check.tap",
"display": "test-push-check.tap",
"rawSHA256": "5d9a170308927264d212e3dd00e87463a21d55811cf9b4cb51dce74d6a10fea5",
"displaySHA256": "5d9a170308927264d212e3dd00e87463a21d55811cf9b4cb51dce74d6a10fea5"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/test-queue.tap",
"display": "test-queue.tap",
"rawSHA256": "ac1a44f25384f67386ebc0864b4d8c853bb3991eb5c75c5fc9b882841797850a",
"displaySHA256": "ac1a44f25384f67386ebc0864b4d8c853bb3991eb5c75c5fc9b882841797850a"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/test-release.tap",
"display": "test-release.tap",
"rawSHA256": "9f9dd11e2631a24ad55aaf7becc61965c592b00da08a4e72b98e0384d3a13ec7",
"displaySHA256": "9f9dd11e2631a24ad55aaf7becc61965c592b00da08a4e72b98e0384d3a13ec7"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/test-task.tap",
"display": "test-task.tap",
"rawSHA256": "a065947f07d70a4721b423da597968630bc8ec1659db14681af42bb3f974077d",
"displaySHA256": "a065947f07d70a4721b423da597968630bc8ec1659db14681af42bb3f974077d"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/webui-full.tap",
"display": "webui-full.tap",
"rawSHA256": "42fc6cc8d2d90ff8730a150942a16a12b3e1777c8b95c966a045c27c88c7777e",
"displaySHA256": "42fc6cc8d2d90ff8730a150942a16a12b3e1777c8b95c966a045c27c88c7777e"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/bus-rerun.tap",
"display": "bus-rerun.tap",
"rawSHA256": "3a1901f3e1b7f80a0faa72d07b156bd9b8480a3d5e16f74d0d76401e2f26d456",
"displaySHA256": "3a1901f3e1b7f80a0faa72d07b156bd9b8480a3d5e16f74d0d76401e2f26d456"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/plugins-final.tap",
"display": "plugins-final.tap",
"rawSHA256": "06b737eefa512acf4256cd66d800eec63249148920242581a42921ab3f6fdf0e",
"displaySHA256": "06b737eefa512acf4256cd66d800eec63249148920242581a42921ab3f6fdf0e"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/mutants-r1/M01-plugin.tap",
"display": "mutants-r1/M01-plugin.tap",
"rawSHA256": "eb0f00b83a42cbaa3e277859d03521f3f499163e2eee602753100b0cae6424d4",
"displaySHA256": "eb0f00b83a42cbaa3e277859d03521f3f499163e2eee602753100b0cae6424d4"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/mutants-r1/summary.json",
"display": "mutants-r1/summary.json",
"rawSHA256": "6cdb1522e895434b657534e400cbd38b0077e7db206fad61e45697731f941b7e",
"displaySHA256": "6cdb1522e895434b657534e400cbd38b0077e7db206fad61e45697731f941b7e"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/mutants-r2/M01-plugin.tap",
"display": "mutants-r2/M01-plugin.tap",
"rawSHA256": "00f4f83caa6119b8189b757c8e21376a17b647fd0c691ad3a10bc4b26c4c13c1",
"displaySHA256": "00f4f83caa6119b8189b757c8e21376a17b647fd0c691ad3a10bc4b26c4c13c1"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/mutants-r2/M02-seam-body.tap",
"display": "mutants-r2/M02-seam-body.tap",
"rawSHA256": "17594067e463a4b0303adda4a8bc6476b4bae4e650f689d3b51714513e81adae",
"displaySHA256": "35b5d70ed2cf81dc9deb6610c8ffd4a018229ea98e0e8d4621f93049b580d40d"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/mutants-r2/M03-page-cursor.tap",
"display": "mutants-r2/M03-page-cursor.tap",
"rawSHA256": "6e8cf3a24163cb20c17a8a0072c96e753f5a2514016a15234502eabb2f93e3e0",
"displaySHA256": "43081c6826c91d0b75907d41426ca291bcf174a0058dad9013df66b1121272b5"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/mutants-r2/M04-room-status.tap",
"display": "mutants-r2/M04-room-status.tap",
"rawSHA256": "5f2fa244ddf7afc83157469a66f95aea943ae0bcbe93cdb5e4a70200399dc2bd",
"displaySHA256": "c6cce27974bd6ee0fc40b49245fefd7e9534599a3f24372af6c083aaeffb5b60"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/mutants-r2/M05-strict-body.tap",
"display": "mutants-r2/M05-strict-body.tap",
"rawSHA256": "b8bc48c7a52a98ec8b67fb3c53e05fb1f59e078f38ff657742548a2ea4d3c2ef",
"displaySHA256": "aca9475140979a3768b7e4782b216960f4f5f780e8ca4beeb588af8a565c643e"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/mutants-r2/M06-receipt-type.tap",
"display": "mutants-r2/M06-receipt-type.tap",
"rawSHA256": "8f78507bc39046d4b49120d51d8ca02070ba2e2914375b3592f799fe8afe9a62",
"displaySHA256": "127bfe8686dde4d1c1167d3a94c39ad54b65c971efc293bcd255b4e35f169195"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/mutants-r2/M07-room-check.tap",
"display": "mutants-r2/M07-room-check.tap",
"rawSHA256": "e6aa52760107dfed980d1a1e78335e4d10e4dce677b9a0ea8e7dfcacf180b75e",
"displaySHA256": "f63ae69e63abe634db1a7856ed9a1586fe8836337324294f2adc64e9108ba10c"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/mutants-r2/M08-room-last.tap",
"display": "mutants-r2/M08-room-last.tap",
"rawSHA256": "9995569d51a4ec69b6017d9684eed630d757135524ace8f1a2b7c6193b398701",
"displaySHA256": "57ce0841659ad261ab255b10ce9c5b7efd566fb04ef2173537835ece01eb4107"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/mutants-r2/M09-browser-body.tap",
"display": "mutants-r2/M09-browser-body.tap",
"rawSHA256": "719941ff281651a629d0b440569bf32b9481a89489e5a1ce7b44cbb850269b83",
"displaySHA256": "dba34fe54be4f4693d6ba951d4c94fa5b1546da5a0c0a806aa0dced69d466cce"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/mutants-r2/M10-members.tap",
"display": "mutants-r2/M10-members.tap",
"rawSHA256": "27ccf704537c4c485d7bf8a575b8d92c5540495c8c5e8a6b61b68e1f6130982b",
"displaySHA256": "99d7d38a1e837595e17f8f071c0a96b7e49675e8a69d59c0ba9133fbdb2e2a8e"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/mutants-r2/M11-checked-render.tap",
"display": "mutants-r2/M11-checked-render.tap",
"rawSHA256": "50d9fc3c5f93784cbde1b7de2367d2e96ee08a8dd1acbd7c9555c57e3542ce43",
"displaySHA256": "2626e9f9bbc5c140c6797dc5f64c12bb25eebfec63e431355dfc382f724150d1"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/mutants-r2/M12-leading-tags.tap",
"display": "mutants-r2/M12-leading-tags.tap",
"rawSHA256": "9ce6330372a03847ecc2d6c43ecbb66765a94e211b55b1eac77b4306be3c7e18",
"displaySHA256": "08bac05bbbd5f6e4cf45efdb52680ea341a01b574e51e5ec75a482bc690d51a6"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/mutants-r2/M13-readonly.tap",
"display": "mutants-r2/M13-readonly.tap",
"rawSHA256": "f02435604b4a6f4d473e57aae13804c5cee23b1946628e06b22445895d5f9ceb",
"displaySHA256": "d4049ff617b6fdb0cafd13ff5925fb66a514082b2d051cdec60b7a05dcfe0b35"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/mutants-r2/M14-uncertainty.tap",
"display": "mutants-r2/M14-uncertainty.tap",
"rawSHA256": "6d365419381849631d4b369c4bdb91c35a6a690ccbac25634d6b481391b8a7bb",
"displaySHA256": "376dd9deda7c6934822901fc6dabbd99da10f481539f2418e193b14ca9b3ac88"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/mutants-r2/M15-pending.tap",
"display": "mutants-r2/M15-pending.tap",
"rawSHA256": "004007418152ae17ff29c173216d352600c7442962694131fbb88c7da9c9622e",
"displaySHA256": "63cfbaf89dd5b62a95eb94f2a7c658b2db2ab03a4f5d4a79c06f70ca391d7072"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/mutants-r2/M16-body-dedup.tap",
"display": "mutants-r2/M16-body-dedup.tap",
"rawSHA256": "0e381526dec7b042cbf61667d03cc4377be6f84343c3e99ba244438faa3a36be",
"displaySHA256": "85223d3266cb90b764c2276f02b7df6d67ccc4ea392b1766fea6bc9162132632"
},
{
"raw": "/mnt/storage/scratch/tmp/KV9rHb/mutants-r2/summary.json",
"display": "mutants-r2/summary.json",
"rawSHA256": "1e9b5da043b16589c08d8bde1f627fb15b06f2302d83f01626d637f63b6b2e46",
"displaySHA256": "1e9b5da043b16589c08d8bde1f627fb15b06f2302d83f01626d637f63b6b2e46"
}
]
@@ -0,0 +1,66 @@
[
{
"step": "t9-rerun-1",
"command": [
"node",
"--test",
"--test-reporter=tap",
"--test-concurrency=1",
"--test-timeout=30000",
"packages/bus/tests/library-credential.test.mjs"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266",
"outerSeconds": 120,
"exit": 0,
"seconds": 1.367,
"cleanupSignals": []
},
{
"step": "t9-rerun-2",
"command": [
"node",
"--test",
"--test-reporter=tap",
"--test-concurrency=1",
"--test-timeout=30000",
"packages/bus/tests/library-credential.test.mjs"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266",
"outerSeconds": 120,
"exit": 0,
"seconds": 1.367,
"cleanupSignals": []
},
{
"step": "t9-rerun-3",
"command": [
"node",
"--test",
"--test-reporter=tap",
"--test-concurrency=1",
"--test-timeout=30000",
"packages/bus/tests/library-credential.test.mjs"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266",
"outerSeconds": 120,
"exit": 0,
"seconds": 1.367,
"cleanupSignals": []
},
{
"step": "bus-rerun",
"command": [
"node",
"--test",
"--test-reporter=tap",
"--test-concurrency=1",
"--test-timeout=30000",
"packages/bus/tests/"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266",
"outerSeconds": 1200,
"exit": 0,
"seconds": 142.919,
"cleanupSignals": []
}
]
@@ -0,0 +1,74 @@
TAP version 13
# Subtest: C2-10c room merges members, shows a broadcast once, reuses cited renderer and suppresses checked notice forgery
ok 1 - C2-10c room merges members, shows a broadcast once, reuses cited renderer and suppresses checked notice forgery
---
duration_ms: 579.685618
type: 'test'
...
# Subtest: C2-10c explicit project Open room calls only room.open before navigating
ok 2 - C2-10c explicit project Open room calls only room.open before navigating
---
duration_ms: 590.781432
type: 'test'
...
# Subtest: C2-10c completion lists only room members, inserts instance tokens and preserves typed send exactly
not ok 3 - C2-10c completion lists only room members, inserts instance tokens and preserves typed send exactly
---
duration_ms: 477.156559
type: 'test'
location: '/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/webui/tests/room-browser.test.mjs:103:1'
failureType: 'testCodeFailure'
error: 'Uncaught: SyntaxError: missing ) after argument list'
code: 'ERR_TEST_FAILURE'
stack: |-
Object.evaluate (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/webui/tests/browser.mjs:49:35)
process.processTicksAndRejections (node:internal/process/task_queues:104:5)
async TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/webui/tests/room-browser.test.mjs:122:16)
async Test.run (node:internal/test_runner/test:1409:7)
async Test.processPendingSubtests (node:internal/test_runner/test:974:7)
...
# Subtest: C2-10c browser leading tag reader matches every broker parseAddress vector
ok 4 - C2-10c browser leading tag reader matches every broker parseAddress vector
---
duration_ms: 446.373694
type: 'test'
...
# Subtest: C2-10c room refusals show fixed lines, preserve drafts and never retry
ok 5 - C2-10c room refusals show fixed lines, preserve drafts and never retry
---
duration_ms: 467.224249
type: 'test'
...
# Subtest: C2-10c read-only room does not offer a send or an implicit open
ok 6 - C2-10c read-only room does not offer a send or an implicit open
---
duration_ms: 429.347385
type: 'test'
...
# Subtest: C2-10c late reads and sign-out cannot repaint private room state
ok 7 - C2-10c late reads and sign-out cannot repaint private room state
---
duration_ms: 481.360271
type: 'test'
...
# Subtest: C2-10c quiet members complete in an empty room, and Escape closes suggestions
ok 8 - C2-10c quiet members complete in an empty room, and Escape closes suggestions
---
duration_ms: 431.26383
type: 'test'
...
# Subtest: C2-10c pending sends do not duplicate and uncertain sends preserve the exact draft
ok 9 - C2-10c pending sends do not duplicate and uncertain sends preserve the exact draft
---
duration_ms: 445.816871
type: 'test'
...
1..9
# tests 9
# suites 0
# pass 8
# fail 1
# cancelled 0
# skipped 0
# todo 0
# duration_ms 4457.473253
@@ -0,0 +1,64 @@
TAP version 13
# Subtest: C2-10c room merges members, shows a broadcast once, reuses cited renderer and suppresses checked notice forgery
ok 1 - C2-10c room merges members, shows a broadcast once, reuses cited renderer and suppresses checked notice forgery
---
duration_ms: 612.127424
type: 'test'
...
# Subtest: C2-10c explicit project Open room calls only room.open before navigating
ok 2 - C2-10c explicit project Open room calls only room.open before navigating
---
duration_ms: 523.14041
type: 'test'
...
# Subtest: C2-10c completion lists only room members, inserts instance tokens and preserves typed send exactly
ok 3 - C2-10c completion lists only room members, inserts instance tokens and preserves typed send exactly
---
duration_ms: 575.124776
type: 'test'
...
# Subtest: C2-10c browser leading tag reader matches every broker parseAddress vector
ok 4 - C2-10c browser leading tag reader matches every broker parseAddress vector
---
duration_ms: 503.401984
type: 'test'
...
# Subtest: C2-10c room refusals show fixed lines, preserve drafts and never retry
ok 5 - C2-10c room refusals show fixed lines, preserve drafts and never retry
---
duration_ms: 496.507579
type: 'test'
...
# Subtest: C2-10c read-only room does not offer a send or an implicit open
ok 6 - C2-10c read-only room does not offer a send or an implicit open
---
duration_ms: 461.20871
type: 'test'
...
# Subtest: C2-10c late reads and sign-out cannot repaint private room state
ok 7 - C2-10c late reads and sign-out cannot repaint private room state
---
duration_ms: 528.355937
type: 'test'
...
# Subtest: C2-10c quiet members complete in an empty room, and Escape closes suggestions
ok 8 - C2-10c quiet members complete in an empty room, and Escape closes suggestions
---
duration_ms: 557.487691
type: 'test'
...
# Subtest: C2-10c pending sends do not duplicate and uncertain sends preserve the exact draft
ok 9 - C2-10c pending sends do not duplicate and uncertain sends preserve the exact draft
---
duration_ms: 497.125002
type: 'test'
...
1..9
# tests 9
# suites 0
# pass 9
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 4864.325898
@@ -0,0 +1,72 @@
TAP version 13
# Subtest: C2-10c room merges members, shows a broadcast once, reuses cited renderer and suppresses checked notice forgery
ok 1 - C2-10c room merges members, shows a broadcast once, reuses cited renderer and suppresses checked notice forgery
---
duration_ms: 478.675099
type: 'test'
...
# Subtest: C2-10c explicit project Open room calls only room.open before navigating
ok 2 - C2-10c explicit project Open room calls only room.open before navigating
---
duration_ms: 482.553437
type: 'test'
...
# Subtest: C2-10c completion lists only room members, inserts instance tokens and preserves typed send exactly
not ok 3 - C2-10c completion lists only room members, inserts instance tokens and preserves typed send exactly
---
duration_ms: 3478.222635
type: 'test'
location: '/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/webui/tests/room-browser.test.mjs:101:1'
failureType: 'testCodeFailure'
error: 'Uncaught (in promise) Error: window.__writes.length===1 && !document.querySelector("#chat-room-body").disabled: undefined'
code: 'ERR_TEST_FAILURE'
stack: |-
Object.evaluate (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/webui/tests/browser.mjs:49:35)
process.processTicksAndRejections (node:internal/process/task_queues:104:5)
async TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/webui/tests/room-browser.test.mjs:113:3)
async Test.run (node:internal/test_runner/test:1409:7)
async Test.processPendingSubtests (node:internal/test_runner/test:974:7)
...
# Subtest: C2-10c browser leading tag reader matches every broker parseAddress vector
ok 4 - C2-10c browser leading tag reader matches every broker parseAddress vector
---
duration_ms: 469.757127
type: 'test'
...
# Subtest: C2-10c room refusals show fixed lines, preserve drafts and never retry
not ok 5 - C2-10c room refusals show fixed lines, preserve drafts and never retry
---
duration_ms: 3452.43392
type: 'test'
location: '/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/webui/tests/room-browser.test.mjs:128:1'
failureType: 'testCodeFailure'
error: "Uncaught (in promise) Error: window.__writes.length===1 && !document.querySelector('#chat-room-body').disabled: undefined"
code: 'ERR_TEST_FAILURE'
stack: |-
Object.evaluate (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/webui/tests/browser.mjs:49:35)
process.processTicksAndRejections (node:internal/process/task_queues:104:5)
async TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/webui/tests/room-browser.test.mjs:134:5)
async Test.run (node:internal/test_runner/test:1409:7)
async Test.processPendingSubtests (node:internal/test_runner/test:974:7)
...
# Subtest: C2-10c read-only room does not offer a send or an implicit open
ok 6 - C2-10c read-only room does not offer a send or an implicit open
---
duration_ms: 450.601494
type: 'test'
...
# Subtest: C2-10c late reads and sign-out cannot repaint private room state
ok 7 - C2-10c late reads and sign-out cannot repaint private room state
---
duration_ms: 505.231021
type: 'test'
...
1..7
# tests 7
# suites 0
# pass 5
# fail 2
# cancelled 0
# skipped 0
# todo 0
# duration_ms 9422.414756
@@ -0,0 +1,52 @@
TAP version 13
# Subtest: C2-10c room merges members, shows a broadcast once, reuses cited renderer and suppresses checked notice forgery
ok 1 - C2-10c room merges members, shows a broadcast once, reuses cited renderer and suppresses checked notice forgery
---
duration_ms: 461.849386
type: 'test'
...
# Subtest: C2-10c explicit project Open room calls only room.open before navigating
ok 2 - C2-10c explicit project Open room calls only room.open before navigating
---
duration_ms: 457.623189
type: 'test'
...
# Subtest: C2-10c completion lists only room members, inserts instance tokens and preserves typed send exactly
ok 3 - C2-10c completion lists only room members, inserts instance tokens and preserves typed send exactly
---
duration_ms: 458.150891
type: 'test'
...
# Subtest: C2-10c browser leading tag reader matches every broker parseAddress vector
ok 4 - C2-10c browser leading tag reader matches every broker parseAddress vector
---
duration_ms: 608.340525
type: 'test'
...
# Subtest: C2-10c room refusals show fixed lines, preserve drafts and never retry
ok 5 - C2-10c room refusals show fixed lines, preserve drafts and never retry
---
duration_ms: 497.894326
type: 'test'
...
# Subtest: C2-10c read-only room does not offer a send or an implicit open
ok 6 - C2-10c read-only room does not offer a send or an implicit open
---
duration_ms: 460.087976
type: 'test'
...
# Subtest: C2-10c late reads and sign-out cannot repaint private room state
ok 7 - C2-10c late reads and sign-out cannot repaint private room state
---
duration_ms: 600.261859
type: 'test'
...
1..7
# tests 7
# suites 0
# pass 7
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 3647.620295
@@ -0,0 +1,131 @@
TAP version 13
# Subtest: C2-10c room merges members, shows a broadcast once, reuses cited renderer and suppresses checked notice forgery
not ok 1 - C2-10c room merges members, shows a broadcast once, reuses cited renderer and suppresses checked notice forgery
---
duration_ms: 3628.090522
type: 'test'
location: '/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/webui/tests/room-browser.test.mjs:77:1'
failureType: 'testCodeFailure'
error: 'Uncaught (in promise) Error: document.querySelector(".chat-room"): undefined'
code: 'ERR_TEST_FAILURE'
stack: |-
Object.evaluate (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/webui/tests/browser.mjs:49:35)
process.processTicksAndRejections (node:internal/process/task_queues:104:5)
async setup (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/webui/tests/room-browser.test.mjs:74:3)
async TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/webui/tests/room-browser.test.mjs:78:29)
async Test.run (node:internal/test_runner/test:1409:7)
async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3)
...
# Subtest: C2-10c explicit project Open room calls only room.open before navigating
not ok 2 - C2-10c explicit project Open room calls only room.open before navigating
---
duration_ms: 429.638963
type: 'test'
location: '/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/webui/tests/room-browser.test.mjs:94:1'
failureType: 'testCodeFailure'
error: |-
Uncaught: TypeError: Cannot read properties of null (reading 'click')
at <anonymous>:1:42
code: 'ERR_TEST_FAILURE'
stack: |-
<anonymous>:1:42
Object.evaluate (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/webui/tests/browser.mjs:49:35)
process.processTicksAndRejections (node:internal/process/task_queues:104:5)
async TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/webui/tests/room-browser.test.mjs:97:3)
async Test.run (node:internal/test_runner/test:1409:7)
async Test.processPendingSubtests (node:internal/test_runner/test:974:7)
...
# Subtest: C2-10c completion lists only room members, inserts instance tokens and preserves typed send exactly
not ok 3 - C2-10c completion lists only room members, inserts instance tokens and preserves typed send exactly
---
duration_ms: 3424.260935
type: 'test'
location: '/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/webui/tests/room-browser.test.mjs:101:1'
failureType: 'testCodeFailure'
error: 'Uncaught (in promise) Error: document.querySelector(".chat-room"): undefined'
code: 'ERR_TEST_FAILURE'
stack: |-
Object.evaluate (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/webui/tests/browser.mjs:49:35)
process.processTicksAndRejections (node:internal/process/task_queues:104:5)
async setup (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/webui/tests/room-browser.test.mjs:74:3)
async TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/webui/tests/room-browser.test.mjs:102:28)
async Test.run (node:internal/test_runner/test:1409:7)
async Test.processPendingSubtests (node:internal/test_runner/test:974:7)
...
# Subtest: C2-10c browser leading tag reader matches every broker parseAddress vector
not ok 4 - C2-10c browser leading tag reader matches every broker parseAddress vector
---
duration_ms: 3423.200884
type: 'test'
location: '/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/webui/tests/room-browser.test.mjs:118:1'
failureType: 'testCodeFailure'
error: 'Uncaught (in promise) Error: document.querySelector(".chat-room"): undefined'
code: 'ERR_TEST_FAILURE'
stack: |-
Object.evaluate (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/webui/tests/browser.mjs:49:35)
process.processTicksAndRejections (node:internal/process/task_queues:104:5)
async setup (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/webui/tests/room-browser.test.mjs:74:3)
async TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/webui/tests/room-browser.test.mjs:119:22)
async Test.run (node:internal/test_runner/test:1409:7)
async Test.processPendingSubtests (node:internal/test_runner/test:974:7)
...
# Subtest: C2-10c room refusals show fixed lines, preserve drafts and never retry
not ok 5 - C2-10c room refusals show fixed lines, preserve drafts and never retry
---
duration_ms: 3450.058918
type: 'test'
location: '/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/webui/tests/room-browser.test.mjs:128:1'
failureType: 'testCodeFailure'
error: 'Uncaught (in promise) Error: document.querySelector(".chat-room"): undefined'
code: 'ERR_TEST_FAILURE'
stack: |-
Object.evaluate (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/webui/tests/browser.mjs:49:35)
process.processTicksAndRejections (node:internal/process/task_queues:104:5)
async setup (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/webui/tests/room-browser.test.mjs:74:3)
async TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/webui/tests/room-browser.test.mjs:129:34)
async Test.run (node:internal/test_runner/test:1409:7)
async Test.processPendingSubtests (node:internal/test_runner/test:974:7)
...
# Subtest: C2-10c read-only room does not offer a send or an implicit open
not ok 6 - C2-10c read-only room does not offer a send or an implicit open
---
duration_ms: 3443.193406
type: 'test'
location: '/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/webui/tests/room-browser.test.mjs:142:1'
failureType: 'testCodeFailure'
error: 'Uncaught (in promise) Error: document.querySelector(".chat-room"): undefined'
code: 'ERR_TEST_FAILURE'
stack: |-
Object.evaluate (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/webui/tests/browser.mjs:49:35)
process.processTicksAndRejections (node:internal/process/task_queues:104:5)
async setup (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/webui/tests/room-browser.test.mjs:74:3)
async TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/webui/tests/room-browser.test.mjs:143:22)
async Test.run (node:internal/test_runner/test:1409:7)
async Test.processPendingSubtests (node:internal/test_runner/test:974:7)
...
# Subtest: C2-10c late reads and sign-out cannot repaint private room state
not ok 7 - C2-10c late reads and sign-out cannot repaint private room state
---
duration_ms: 3457.523072
type: 'test'
location: '/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/webui/tests/room-browser.test.mjs:150:1'
failureType: 'testCodeFailure'
error: 'Uncaught (in promise) Error: document.querySelector(".chat-room"): undefined'
code: 'ERR_TEST_FAILURE'
stack: |-
Object.evaluate (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/webui/tests/browser.mjs:49:35)
process.processTicksAndRejections (node:internal/process/task_queues:104:5)
async setup (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/webui/tests/room-browser.test.mjs:74:3)
async TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/webui/tests/room-browser.test.mjs:151:28)
async Test.run (node:internal/test_runner/test:1409:7)
async Test.processPendingSubtests (node:internal/test_runner/test:974:7)
...
1..7
# tests 7
# suites 0
# pass 0
# fail 7
# cancelled 0
# skipped 0
# todo 0
# duration_ms 21368.466856
@@ -0,0 +1,22 @@
TAP version 13
# Subtest: C2-10c room.read carries exactly the thread check and current file last
ok 1 - C2-10c room.read carries exactly the thread check and current file last
---
duration_ms: 66.788688
type: 'test'
...
# Subtest: C2-10c check hydration preserves unchecked rows and one broadcast with two addressees
ok 2 - C2-10c check hydration preserves unchecked rows and one broadcast with two addressees
---
duration_ms: 14.902072
type: 'test'
...
1..2
# tests 2
# suites 0
# pass 2
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 154.8326
@@ -0,0 +1,55 @@
TAP version 13
# Subtest: C2-10c room.read carries exactly the thread check and current file last
not ok 1 - C2-10c room.read carries exactly the thread check and current file last
---
duration_ms: 68.925074
type: 'test'
location: '/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/bus/tests/room-check.test.mjs:10:1'
failureType: 'testCodeFailure'
error: |-
Expected values to be strictly deep-equal:
+ actual - expected
+ undefined
- {
- citations: [
- {
- agent: null,
- file: 'e46ffb32a683035cf812aa05e1773ba95f2c9ee4',
- last: 'e46ffb32a683035cf812aa05e1773ba95f2c9ee4',
- scope: 'canon'
- }
- ]
- }
code: 'ERR_ASSERTION'
name: 'AssertionError'
expected:
citations:
0:
scope: 'canon'
agent: ~
file: 'e46ffb32a683035cf812aa05e1773ba95f2c9ee4'
last: 'e46ffb32a683035cf812aa05e1773ba95f2c9ee4'
operator: 'deepStrictEqual'
stack: |-
TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/bus/tests/room-check.test.mjs:20:10)
process.processTicksAndRejections (node:internal/process/task_queues:104:5)
async Test.run (node:internal/test_runner/test:1409:7)
async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3)
...
# Subtest: C2-10c check hydration preserves unchecked rows and one broadcast with two addressees
ok 2 - C2-10c check hydration preserves unchecked rows and one broadcast with two addressees
---
duration_ms: 16.111117
type: 'test'
...
1..2
# tests 2
# suites 0
# pass 1
# fail 1
# cancelled 0
# skipped 0
# todo 0
# duration_ms 159.952195
@@ -0,0 +1,52 @@
TAP version 13
# Subtest: C2-10c seam exposes three fixed room calls without thread.messages fanout
ok 1 - C2-10c seam exposes three fixed room calls without thread.messages fanout
---
duration_ms: 10.41166
type: 'test'
...
# Subtest: C2-10c HTTP preserves original send, member receipt and the last grouped paging id
ok 2 - C2-10c HTTP preserves original send, member receipt and the last grouped paging id
---
duration_ms: 11.761026
type: 'test'
...
# Subtest: C2-10c room write fences and strict keys reject before transport
ok 3 - C2-10c room write fences and strict keys reject before transport
---
duration_ms: 9.734065
type: 'test'
...
# Subtest: C2-10c all four room refusals are409 with fixed text, never transport prose
ok 4 - C2-10c all four room refusals are409 with fixed text, never transport prose
---
duration_ms: 4.365649
type: 'test'
...
# Subtest: C2-10c malformed/lost write receipts are unknown and never retried
ok 5 - C2-10c malformed/lost write receipts are unknown and never retried
---
duration_ms: 2.682212
type: 'test'
...
# Subtest: C2-10c room receipts reject coerced member keys and duplicate grouped ids
ok 6 - C2-10c room receipts reject coerced member keys and duplicate grouped ids
---
duration_ms: 2.090283
type: 'test'
...
# Subtest: C2-10c granted-user room calls never borrow the owner transport
ok 7 - C2-10c granted-user room calls never borrow the owner transport
---
duration_ms: 0.625202
type: 'test'
...
1..7
# tests 7
# suites 0
# pass 7
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 144.565659
@@ -0,0 +1,40 @@
TAP version 13
# Subtest: C2-10c seam exposes three fixed room calls without thread.messages fanout
ok 1 - C2-10c seam exposes three fixed room calls without thread.messages fanout
---
duration_ms: 9.140924
type: 'test'
...
# Subtest: C2-10c HTTP preserves original send, member receipt and the last grouped paging id
ok 2 - C2-10c HTTP preserves original send, member receipt and the last grouped paging id
---
duration_ms: 10.424582
type: 'test'
...
# Subtest: C2-10c room write fences and strict keys reject before transport
ok 3 - C2-10c room write fences and strict keys reject before transport
---
duration_ms: 9.318333
type: 'test'
...
# Subtest: C2-10c all four room refusals are409 with fixed text, never transport prose
ok 4 - C2-10c all four room refusals are409 with fixed text, never transport prose
---
duration_ms: 3.458143
type: 'test'
...
# Subtest: C2-10c malformed/lost write receipts are unknown and never retried
ok 5 - C2-10c malformed/lost write receipts are unknown and never retried
---
duration_ms: 3.395395
type: 'test'
...
1..5
# tests 5
# suites 0
# pass 5
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 135.694931
@@ -0,0 +1,127 @@
TAP version 13
# Subtest: C2-10c seam exposes three fixed room calls without thread.messages fanout
not ok 1 - C2-10c seam exposes three fixed room calls without thread.messages fanout
---
duration_ms: 8.731172
type: 'test'
location: '/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/webui/tests/room-http.test.mjs:34:1'
failureType: 'testCodeFailure'
error: |-
Expected values to be strictly equal:
+ actual - expected
+ 'undefined'
- 'function'
code: 'ERR_ASSERTION'
name: 'AssertionError'
expected: 'function'
actual: 'undefined'
operator: 'strictEqual'
stack: |-
TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/webui/tests/room-http.test.mjs:37:12)
process.processTicksAndRejections (node:internal/process/task_queues:104:5)
async Test.run (node:internal/test_runner/test:1409:7)
async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3)
...
# Subtest: C2-10c HTTP preserves original send, member receipt and the last grouped paging id
not ok 2 - C2-10c HTTP preserves original send, member receipt and the last grouped paging id
---
duration_ms: 9.016525
type: 'test'
location: '/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/webui/tests/room-http.test.mjs:44:1'
failureType: 'testCodeFailure'
error: |-
Expected values to be strictly equal:
404 !== 200
code: 'ERR_ASSERTION'
name: 'AssertionError'
expected: 200
actual: 404
operator: 'strictEqual'
stack: |-
TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/webui/tests/room-http.test.mjs:48:10)
process.processTicksAndRejections (node:internal/process/task_queues:104:5)
async Test.run (node:internal/test_runner/test:1409:7)
async Test.processPendingSubtests (node:internal/test_runner/test:974:7)
...
# Subtest: C2-10c room write fences and strict keys reject before transport
not ok 3 - C2-10c room write fences and strict keys reject before transport
---
duration_ms: 3.141918
type: 'test'
location: '/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/webui/tests/room-http.test.mjs:62:1'
failureType: 'testCodeFailure'
error: |-
Expected values to be strictly equal:
404 !== 400
code: 'ERR_ASSERTION'
name: 'AssertionError'
expected: 400
actual: 404
operator: 'strictEqual'
stack: |-
TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/webui/tests/room-http.test.mjs:66:12)
process.processTicksAndRejections (node:internal/process/task_queues:104:5)
async Test.run (node:internal/test_runner/test:1409:7)
async Test.processPendingSubtests (node:internal/test_runner/test:974:7)
...
# Subtest: C2-10c all four room refusals are409 with fixed text, never transport prose
not ok 4 - C2-10c all four room refusals are409 with fixed text, never transport prose
---
duration_ms: 1.798433
type: 'test'
location: '/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/webui/tests/room-http.test.mjs:75:1'
failureType: 'testCodeFailure'
error: |-
unknown-addressee
404 !== 409
code: 'ERR_ASSERTION'
name: 'AssertionError'
expected: 409
actual: 404
operator: 'strictEqual'
stack: |-
TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/webui/tests/room-http.test.mjs:80:12)
process.processTicksAndRejections (node:internal/process/task_queues:104:5)
async Test.run (node:internal/test_runner/test:1409:7)
async Test.processPendingSubtests (node:internal/test_runner/test:974:7)
...
# Subtest: C2-10c malformed/lost write receipts are unknown and never retried
not ok 5 - C2-10c malformed/lost write receipts are unknown and never retried
---
duration_ms: 1.788338
type: 'test'
location: '/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/webui/tests/room-http.test.mjs:85:1'
failureType: 'testCodeFailure'
error: |-
Expected values to be strictly equal:
404 !== 503
code: 'ERR_ASSERTION'
name: 'AssertionError'
expected: 503
actual: 404
operator: 'strictEqual'
stack: |-
TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/webui/tests/room-http.test.mjs:90:12)
process.processTicksAndRejections (node:internal/process/task_queues:104:5)
async Test.run (node:internal/test_runner/test:1409:7)
async Test.processPendingSubtests (node:internal/test_runner/test:974:7)
...
1..5
# tests 5
# suites 0
# pass 0
# fail 5
# cancelled 0
# skipped 0
# todo 0
# duration_ms 124.767975
@@ -0,0 +1,69 @@
TAP version 13
# Subtest: C2-10c seam exposes three fixed room calls without thread.messages fanout
ok 1 - C2-10c seam exposes three fixed room calls without thread.messages fanout
---
duration_ms: 9.95559
type: 'test'
...
# Subtest: C2-10c HTTP preserves original send, member receipt and the last grouped paging id
ok 2 - C2-10c HTTP preserves original send, member receipt and the last grouped paging id
---
duration_ms: 11.053371
type: 'test'
...
# Subtest: C2-10c room write fences and strict keys reject before transport
ok 3 - C2-10c room write fences and strict keys reject before transport
---
duration_ms: 9.160608
type: 'test'
...
# Subtest: C2-10c all four room refusals are409 with fixed text, never transport prose
ok 4 - C2-10c all four room refusals are409 with fixed text, never transport prose
---
duration_ms: 4.022295
type: 'test'
...
# Subtest: C2-10c malformed/lost write receipts are unknown and never retried
ok 5 - C2-10c malformed/lost write receipts are unknown and never retried
---
duration_ms: 2.737076
type: 'test'
...
# Subtest: C2-10c room receipts reject coerced member keys and duplicate grouped ids
not ok 6 - C2-10c room receipts reject coerced member keys and duplicate grouped ids
---
duration_ms: 1.75248
type: 'test'
location: '/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/webui/tests/room-http.test.mjs:95:1'
failureType: 'testCodeFailure'
error: |-
Expected values to be strictly equal:
200 !== 503
code: 'ERR_ASSERTION'
name: 'AssertionError'
expected: 503
actual: 200
operator: 'strictEqual'
stack: |-
TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/packages/webui/tests/room-http.test.mjs:99:10)
process.processTicksAndRejections (node:internal/process/task_queues:104:5)
async Test.run (node:internal/test_runner/test:1409:7)
async Test.processPendingSubtests (node:internal/test_runner/test:974:7)
...
# Subtest: C2-10c granted-user room calls never borrow the owner transport
ok 7 - C2-10c granted-user room calls never borrow the owner transport
---
duration_ms: 0.878763
type: 'test'
...
1..7
# tests 7
# suites 0
# pass 6
# fail 1
# cancelled 0
# skipped 0
# todo 0
# duration_ms 141.250822
@@ -0,0 +1,146 @@
[
{
"step": "test-auth",
"command": [
"bash",
"/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/scripts/test-auth.sh"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266",
"outerSeconds": 1200,
"exit": 0,
"seconds": 0.866,
"cleanupSignals": []
},
{
"step": "test-conductor",
"command": [
"bash",
"/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/scripts/test-conductor.sh"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266",
"outerSeconds": 1200,
"exit": 0,
"seconds": 7.53,
"cleanupSignals": []
},
{
"step": "test-config",
"command": [
"bash",
"/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/scripts/test-config.sh"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266",
"outerSeconds": 1200,
"exit": 0,
"seconds": 2.72,
"cleanupSignals": []
},
{
"step": "test-discord",
"command": [
"bash",
"/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/scripts/test-discord.sh"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266",
"outerSeconds": 1200,
"exit": 0,
"seconds": 8.131,
"cleanupSignals": []
},
{
"step": "test-extension-package",
"command": [
"bash",
"/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/scripts/test-extension-package.sh"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266",
"outerSeconds": 1200,
"exit": 0,
"seconds": 1.467,
"cleanupSignals": []
},
{
"step": "test-federation-acceptance",
"command": [
"bash",
"/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/scripts/test-federation-acceptance.sh"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266",
"outerSeconds": 1200,
"exit": 0,
"seconds": 3.972,
"cleanupSignals": []
},
{
"step": "test-foundation",
"command": [
"bash",
"/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/scripts/test-foundation.sh"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266",
"outerSeconds": 1200,
"exit": 0,
"seconds": 38.592,
"cleanupSignals": []
},
{
"step": "test-land-work",
"command": [
"bash",
"/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/scripts/test-land-work.sh"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266",
"outerSeconds": 1200,
"exit": 0,
"seconds": 12.039,
"cleanupSignals": []
},
{
"step": "test-push-check",
"command": [
"bash",
"/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/scripts/test-push-check.sh"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266",
"outerSeconds": 1200,
"exit": 0,
"seconds": 38.944,
"cleanupSignals": []
},
{
"step": "test-queue",
"command": [
"bash",
"/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/scripts/test-queue.sh"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266",
"outerSeconds": 1200,
"exit": 0,
"seconds": 21.708,
"cleanupSignals": []
},
{
"step": "test-release",
"command": [
"bash",
"/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/scripts/test-release.sh"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266",
"outerSeconds": 1200,
"exit": 0,
"seconds": 2.92,
"cleanupSignals": []
},
{
"step": "test-task",
"command": [
"bash",
"/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/scripts/test-task.sh"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266",
"outerSeconds": 1200,
"exit": 0,
"seconds": 13.793,
"cleanupSignals": []
}
]
@@ -0,0 +1,46 @@
TAP version 13
# Subtest: C2-03b T6: the slot before any chief evidence, then the listed chief's live grant
ok 1 - C2-03b T6: the slot before any chief evidence, then the listed chief's live grant
---
duration_ms: 27.654269
type: 'test'
...
# Subtest: C2-03b T7: a chief revoked through grants.revoke or fired through instance.fire refuses, and the fallback stays ended
ok 2 - C2-03b T7: a chief revoked through grants.revoke or fired through instance.fire refuses, and the fallback stays ended
---
duration_ms: 293.65964
type: 'test'
...
# Subtest: C2-03b T7 choice checks: delisted, a fire under way and held each refuse; a rehire lists the chief again
ok 3 - C2-03b T7 choice checks: delisted, a fire under way and held each refuse; a rehire lists the chief again
---
duration_ms: 34.60293
type: 'test'
...
# Subtest: C2-03b T8: a chief grant on another project ends the fallback, and two listed chiefs refuse library-fetch-no-grant
ok 4 - C2-03b T8: a chief grant on another project ends the fallback, and two listed chiefs refuse library-fetch-no-grant
---
duration_ms: 30.656128
type: 'test'
...
# Subtest: C2-03b departure (sage-2928): with no chief entry, any Gitea grant evidence refuses
ok 5 - C2-03b departure (sage-2928): with no chief entry, any Gitea grant evidence refuses
---
duration_ms: 16.276807
type: 'test'
...
# Subtest: C2-03b T9 runtime: the chief's store file and user, then a real revoke that runs no git with the slot at 0000
ok 6 - C2-03b T9 runtime: the chief's store file and user, then a real revoke that runs no git with the slot at 0000
---
duration_ms: 789.168747
type: 'test'
...
1..6
# tests 6
# suites 0
# pass 6
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 1315.368631
@@ -0,0 +1,46 @@
TAP version 13
# Subtest: C2-03b T6: the slot before any chief evidence, then the listed chief's live grant
ok 1 - C2-03b T6: the slot before any chief evidence, then the listed chief's live grant
---
duration_ms: 27.978617
type: 'test'
...
# Subtest: C2-03b T7: a chief revoked through grants.revoke or fired through instance.fire refuses, and the fallback stays ended
ok 2 - C2-03b T7: a chief revoked through grants.revoke or fired through instance.fire refuses, and the fallback stays ended
---
duration_ms: 304.610774
type: 'test'
...
# Subtest: C2-03b T7 choice checks: delisted, a fire under way and held each refuse; a rehire lists the chief again
ok 3 - C2-03b T7 choice checks: delisted, a fire under way and held each refuse; a rehire lists the chief again
---
duration_ms: 33.464243
type: 'test'
...
# Subtest: C2-03b T8: a chief grant on another project ends the fallback, and two listed chiefs refuse library-fetch-no-grant
ok 4 - C2-03b T8: a chief grant on another project ends the fallback, and two listed chiefs refuse library-fetch-no-grant
---
duration_ms: 30.002925
type: 'test'
...
# Subtest: C2-03b departure (sage-2928): with no chief entry, any Gitea grant evidence refuses
ok 5 - C2-03b departure (sage-2928): with no chief entry, any Gitea grant evidence refuses
---
duration_ms: 16.524439
type: 'test'
...
# Subtest: C2-03b T9 runtime: the chief's store file and user, then a real revoke that runs no git with the slot at 0000
ok 6 - C2-03b T9 runtime: the chief's store file and user, then a real revoke that runs no git with the slot at 0000
---
duration_ms: 754.840215
type: 'test'
...
1..6
# tests 6
# suites 0
# pass 6
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 1293.310491
@@ -0,0 +1,46 @@
TAP version 13
# Subtest: C2-03b T6: the slot before any chief evidence, then the listed chief's live grant
ok 1 - C2-03b T6: the slot before any chief evidence, then the listed chief's live grant
---
duration_ms: 34.452051
type: 'test'
...
# Subtest: C2-03b T7: a chief revoked through grants.revoke or fired through instance.fire refuses, and the fallback stays ended
ok 2 - C2-03b T7: a chief revoked through grants.revoke or fired through instance.fire refuses, and the fallback stays ended
---
duration_ms: 299.162474
type: 'test'
...
# Subtest: C2-03b T7 choice checks: delisted, a fire under way and held each refuse; a rehire lists the chief again
ok 3 - C2-03b T7 choice checks: delisted, a fire under way and held each refuse; a rehire lists the chief again
---
duration_ms: 35.484814
type: 'test'
...
# Subtest: C2-03b T8: a chief grant on another project ends the fallback, and two listed chiefs refuse library-fetch-no-grant
ok 4 - C2-03b T8: a chief grant on another project ends the fallback, and two listed chiefs refuse library-fetch-no-grant
---
duration_ms: 31.417755
type: 'test'
...
# Subtest: C2-03b departure (sage-2928): with no chief entry, any Gitea grant evidence refuses
ok 5 - C2-03b departure (sage-2928): with no chief entry, any Gitea grant evidence refuses
---
duration_ms: 16.905839
type: 'test'
...
# Subtest: C2-03b T9 runtime: the chief's store file and user, then a real revoke that runs no git with the slot at 0000
ok 6 - C2-03b T9 runtime: the chief's store file and user, then a real revoke that runs no git with the slot at 0000
---
duration_ms: 766.473551
type: 'test'
...
1..6
# tests 6
# suites 0
# pass 6
# fail 0
# cancelled 0
# skipped 0
# todo 0
# duration_ms 1302.772185
@@ -0,0 +1,17 @@
OK status with missing harness credential exits 3 and still lists accounts
OK status reports harness credential (read-only) + mosaic accounts
OK api key material never reaches output
OK oauth token material never reaches output
OK unparseable credential file exits 2
OK symlinked credential file exits 4
OK env-side credential names reported
OK env var values never reach output
OK accounts without an accounts dir reports none and creates nothing
OK accounts lists files and marks the active one
OK loose account perms flagged in listing
OK agent --auth with missing account file refuses (exit 4)
OK agent --auth with non-0600 account file refuses
OK agent --auth with invalid account name refuses
OK auth.sh without valid config refuses
selftest: 15 passed, 0 failed
@@ -0,0 +1,23 @@
On branch fethry/row266
Your branch is up to date with 'origin/fethry/row266'.
nothing to commit, working tree clean
OK dry-run: allowed change, exit 0, nothing committed (exit 0)
OK dry-run committed nothing
OK apply: allowed change exits 0 (exit 0)
OK apply: attribution in commit subject
OK apply: target tree clean after commit
OK disallowed path refused (exit 1)
OK disallowed path: target untouched
OK syntax gate refused broken .mjs (exit 1)
OK syntax gate: target untouched
OK suite failure refused (exit 1)
OK suite failure: target reverted to clean
OK disabled policy refused (exit 2)
OK disabled policy: target untouched
OK failed run refused (exit 1)
OK failed run: target untouched
OK missing run exits 4 (exit 4)
OK invalid policy exits 2 (exit 2)
selftest: 17 passed, 0 failed
@@ -0,0 +1,57 @@
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
selftest: 55 passed, 0 failed
@@ -0,0 +1,86 @@
toolchain: node v26.8.1
OK syntax: packages/discord/src/approvals.mjs
OK syntax: packages/discord/src/authorize.mjs
OK syntax: packages/discord/src/binding.mjs
OK syntax: packages/discord/src/cli.mjs
OK syntax: packages/discord/src/connector.mjs
OK syntax: packages/discord/src/context.mjs
OK syntax: packages/discord/src/engine-pi.mjs
OK syntax: packages/discord/src/errors.mjs
OK syntax: packages/discord/src/gateway.mjs
OK syntax: packages/discord/src/git.mjs
OK syntax: packages/discord/src/journal.mjs
OK syntax: packages/discord/src/notify.mjs
OK syntax: packages/discord/src/processing.mjs
OK syntax: packages/discord/src/rest.mjs
OK syntax: packages/discord/src/setspark.mjs
OK syntax: packages/discord/src/tools.mjs
OK syntax: packages/discord/src/web.mjs
OK syntax: packages/discord/bin/git-credential.mjs
OK syntax: packages/discord/extension/tools.mjs
OK syntax: packages/discord/tests/approvals.test.mjs
OK syntax: packages/discord/tests/authorize.test.mjs
OK syntax: packages/discord/tests/binding.test.mjs
OK syntax: packages/discord/tests/connector.test.mjs
OK syntax: packages/discord/tests/context.test.mjs
OK syntax: packages/discord/tests/copy-service.test.mjs
OK syntax: packages/discord/tests/engine.test.mjs
OK syntax: packages/discord/tests/fake-pi.mjs
OK syntax: packages/discord/tests/gateway.test.mjs
OK syntax: packages/discord/tests/git.test.mjs
OK syntax: packages/discord/tests/helpers.mjs
OK syntax: packages/discord/tests/journal.test.mjs
OK syntax: packages/discord/tests/library-seat.test.mjs
OK syntax: packages/discord/tests/notify.test.mjs
OK syntax: packages/discord/tests/offline-check.test.mjs
OK syntax: packages/discord/tests/processing-stop.test.mjs
OK syntax: packages/discord/tests/processing.test.mjs
OK syntax: packages/discord/tests/recover.test.mjs
OK syntax: packages/discord/tests/rest.test.mjs
OK syntax: packages/discord/tests/setspark.test.mjs
OK syntax: packages/discord/tests/tools.test.mjs
OK syntax: packages/discord/tests/web.test.mjs
OK syntax: packages/discord/fixtures/claim-worker.mjs
OK syntax: packages/discord/fixtures/legacy-owner-worker.mjs
OK syntax: scripts/discord.sh
OK syntax: scripts/discord-service.sh
OK packages/discord declares no dependencies
OK no bot-token-shaped string in packages/discord
OK fixture binding uses placeholder ids only
OK fixture binding validates
OK real pi with the extension exposes exactly list_dir, read_file, search and no built-in tool
OK real pi with a writable root exposes exactly the three reads plus write_file and edit_file, and writes nothing at start
OK real pi with a web key exposes the three reads plus web_fetch and web_search, and no write tool without a writable root
OK real pi with a git root exposes the reads, writes and the four git verbs, commits nothing at start, and never shows the token
OK real pi with protocol vault adds reserve_id to the git verbs
OK real pi with a setspark key exposes the reads and the eight record verbs, no counters, and never shows the key
OK real pi refuses a git key on a read-only root (fail closed)
OK real pi with the pilot flags (--no-tools) exposes no tool at all
OK real pi exits non-zero without MOSAIC_DISCORD_TOOLS: no session, no tools (fail closed)
OK a failing nested test fails the run under a parent runner's NODE_TEST_CONTEXT
OK node --test packages/discord/tests/ (ℹ pass 200)
OK scripts/discord.sh --help exits 0
OK scripts/discord.sh check without a binding exits 4
OK scripts/discord.sh recover without a binding exits 4
OK scripts/discord.sh reload without a binding exits 4
OK scripts/discord-service.sh without a command exits 4
OK service unit renders with the repository path, a supervised run as the main process, exit 3 never retried, and reload as SIGHUP
OK service install writes the rendered unit (0644) and leaves no temp file
OK service install a second time reports unchanged
OK systemd-analyze verify accepts the rendered unit
OK service uninstall removes the unit file
OK service install with an unknown flag exits 4
OK service install with USER unset finishes and names the account for lingering
OK pinned render runs copy CLI with copy cwd/repo and no checkout executable
OK pinned install writes the rendered unit in a temporary unit directory
OK pinned install refuses short prerequisite and writes no unit
OK pinned install refuses missing prerequisite and writes no unit
OK pinned install refuses cli prerequisite and writes no unit
OK pinned install refuses pi prerequisite and writes no unit
OK status names the copy from fake systemctl effective cwd
OK checkout install explicitly recommends --copy
OK wrapper check --offline passes local fixture and makes no network call
OK wrapper run --offline refuses usage
discord suite: 82 passed, 0 failed
@@ -0,0 +1,21 @@
OK initial ordinary-file install
OK installed tree matches canonical source
OK installed tree has no symlinks
OK check detects installation drift
OK sync refuses to overwrite installation drift
OK check detects an extra destination file
OK check detects an extra destination directory
OK check rejects a destination symlink
OK sync accepts a canonical source update
OK updated installation matches canonical source
/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266/scripts/test-extension-package.sh: line 14: 2236844 Killed "$@" > /dev/null 2>&1
OK forced interruption kills the replacing process
OK next invocation recovers old consistent installation
OK interrupted replacement rolled back
OK sync succeeds after interruption recovery
OK unlocked stale lock file does not block
OK active lock refuses a concurrent sync
OK source symlink fails closed
OK nested second entrypoint fails closed
extension package selftest: 18 passed, 0 failed
@@ -0,0 +1,10 @@
✔ FED R7 scratch two-instance acceptance (3582.728896ms)
ℹ tests 1
ℹ suites 0
ℹ pass 1
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 3676.59229
R7 cleanup: no child groups, ports or sockets remain; no units created
@@ -0,0 +1,53 @@
toolchain: node v26.8.1, python 3.12.8, jsonschema 4.26.0
OK syntax: scripts/foundation-inspect.mjs
OK syntax: scripts/foundation/strict-json.mjs
OK syntax: scripts/foundation/canonical.mjs
OK syntax: scripts/foundation/resolve.mjs
OK syntax: scripts/foundation/validate-record.mjs
OK syntax: scripts/foundation/fixtures/build-fixtures.mjs
OK syntax: scripts/foundation/canonical.test.mjs
OK syntax: scripts/foundation/cli.test.mjs
OK syntax: scripts/foundation/fixtures.test.mjs
OK syntax: scripts/foundation/resolve.test.mjs
OK syntax: scripts/foundation/strict-json.test.mjs
OK syntax: scripts/foundation/verify-schema.py (ast only; no bytecode written)
OK fixture generator runs
OK checked-in fixtures/bundles equal a fresh generation
OK checked-in fixtures/raw equal a fresh generation
OK checked-in fixtures/index.json equal a fresh generation
OK checked-in demo bundles equal a fresh generation
OK a failing nested test fails the run under a parent runner's NODE_TEST_CONTEXT
OK node --test scripts/foundation/ (ℹ pass 80)
OK differential schema oracle: PASS: differential schema oracle (finite corpus; compatibility evidence, not equivalence proof)
platform witness: strftime('%Y') for year 999 -> '999' (pinned checker refuses years 0001..0999)
node v26.8.1; corpus 1568 records (38 pinned fixtures, 478 unique bundle records, 1052 typeCase/mutation/lexical cases)
schema column: agree-valid 540, agree-invalid 991, DISAGREEMENTS 0; strict-only (parser-bound) cases: 27; unsupported-kind records not schema-assessed by the inspector: 10
profile column (schema-valid records only): profile-valid 510, profile-invalid 30
profile refusals asserted: 30 schema-agreed-valid records refused only by the strict typed-string profile (rule profile-pattern-mismatch), 12 declared by name; 73 named probes verified against declared schema/profile columns
OK oracle: zero schema-column disagreements with the pinned checker
OK oracle: strict-only profile refusals are counted and asserted
OK demo: permitted read preview exits 0 (exit 0)
OK demo: permitted file.change preview exits 0 (exit 0)
OK demo: assignment.change proposal is unresolved (exit 3) (exit 3)
OK demo: revoked registration is refused (exit 3) (exit 3)
OK demo: message is not authority (exit 3) (exit 3)
OK usage: no arguments exits 2 (exit 2)
OK io: missing file exits 4 (exit 4)
OK io: directory exits 4 (exit 4)
OK io: symlink exits 4 (O_NOFOLLOW) (exit 4)
OK bound: oversize fixture exits 2 (exit 2)
OK profile: one final LF in a typed selection id is refused before admission (exit 2) (exit 2)
OK profile: two final LFs fail the schema pattern itself (exit 2) (exit 2)
OK profile: escaped newlines in free-form text stay allowed (exit 0) (exit 0)
OK profile refusal is invalid-request/profile-pattern-mismatch with selection and operation withheld, value not echoed
OK text output starts with the disclaimer
OK json output is valid JSON with result allowed and exactly the charter §7 fields
OK json golden matches byte-for-byte
OK sandboxed bundle run (env -i, PATH=/nonexistent) produced the unresolved proposal
OK sandbox inventory (path/type/size/mode/uid/gid/inode/mtime/sha256) unchanged by runs
OK canary never printed (bundle run and credential-file run)
OK a non-bundle JSON file is refused at the shape gate, not read into output
OK no field of the non-bundle file is echoed
selftest: 44 passed, 0 failed
@@ -0,0 +1,88 @@
OK args: exit 2, target-branch
OK args: exit 2, target-branch
OK args: exit 4
OK args: exit 4
OK args: exit 4
OK --base next refuses before the config is read (got 2)
OK a missing system config exits 3 (got 3)
OK nobus: exit 3
OK schema-table: exit 2, bus-schema
OK schema-meta: exit 2, bus-schema
OK openBus opens the database read-only
OK other-business: exit 2, decision-not-found
OK no-raise: exit 2, decision-not-found
OK not-a-merge: exit 2, not-a-merge
OK open: exit 2, not-resolved
OK withdrawn: exit 2, not-resolved
OK by-agent: exit 2, not-human
OK via-webui: exit 2, not-human
OK no-answer: exit 2, not-human
OK answer-role: exit 2, not-human
OK answer-run: exit 2, not-human
OK answer-choice: exit 2, not-human
OK two-answers: exit 2, not-human
OK arbiter-cross: exit 2, not-human
OK arbiter-cited: exit 2, not-human
OK chose-no: exit 2, not-merge-option
OK two-refs: exit 2, work-ref
OK bad-ref: exit 2, work-ref
OK task-ref-disagrees: exit 2, work-ref
OK raise-task-disagrees: exit 2, work-ref
OK target-main: exit 2, target-branch
OK superseded-question: exit 2, superseded
OK superseded-task: exit 2, superseded
OK superseded-by: exit 2, superseded
OK no-verdict: exit 2, no-verdict
OK changes-later: exit 2, not-approved
OK short-commit: exit 2, not-approved
OK wrong-task-body: exit 2, not-approved
OK args: exit 2, decision-not-found
OK earlier-merge: exit 0
OK ref-moved: exit 2, ref-moved
OK root-top: exit 2, root-file
OK root-newdir: exit 2, root-file
OK root-src: exit 2, root-file
OK unrelated: exit 2, base-conflict
OK empty: exit 2, base-conflict
OK an empty reviewed diff says so
OK dirty-changed: exit 2, checkout-dirty
OK dirty-staged: exit 2, checkout-dirty
OK dirty-untracked: exit 2, checkout-dirty
OK conflict: exit 2, base-conflict
OK a refusal after the worktree is added leaves no worktree or scratch
OK cleanup looks for the worktree's Docker network
OK dirty-during: exit 2, checkout-dirty
OK a reviewed path dirtied during the gate moves no ref
OK drift: exit 2, patch-drift
OK patch-drift leaves no worktree or scratch
OK gate-pkg: exit 2, gate-failed
OK gate-failed names the failing step's log, and it exists
OK gate-failed leaves no worktree or scratch
OK gate-script: exit 2, gate-failed
OK a failing scripts/test-*.sh fails the gate
OK a failed gate moves no ref
OK nomods: exit 4
OK a target without node_modules leaves no worktree or scratch
OK moved: exit 2, base-moved
OK base-moved keeps the base where it moved to
OK dry: exit 0
OK --dry-run writes no ref
OK --dry-run prints the commit with --subject and --attribution
OK --dry-run runs the gate
OK --dry-run leaves no worktree or scratch
OK land: exit 0
OK the landing is one commit on the old base
OK its diff is the reviewed diff by patch-id
OK its tree is the dry run's
OK the message has the option's subject, the citations and the attribution last
OK it prints the line for the PM
OK the checked-out base has the reviewed paths and keeps the unrelated edit
OK only refs/heads/refactor exists in the target
OK the work ref is unchanged
OK the bus database is unchanged
OK the gate ran each package suite but queue, and each scripts/test-*.sh
OK the landing leaves no worktree or scratch
OK the target's node_modules is still there, with its contents
OK the worktree's Docker network is removed
---
land-work selftests: 86 passed, 0 failed
@@ -0,0 +1,7 @@
PASS push-check 38 checks
KILLED skip-hash
KILLED accept-changes
KILLED earlier-round
KILLED working-tree
KILLED no-row
KILLED skip-nul-scan
@@ -0,0 +1,36 @@
toolchain: node v26.8.1, git version 2.55.0
OK syntax: packages/queue/src/cli.mjs
OK syntax: packages/queue/src/errors.mjs
OK syntax: packages/queue/src/io.mjs
OK syntax: packages/queue/src/lock.mjs
OK syntax: packages/queue/src/queue.mjs
OK syntax: packages/queue/src/review.mjs
OK syntax: packages/queue/src/store.mjs
OK syntax: packages/queue/tests/commit.test.mjs
OK syntax: packages/queue/tests/data.test.mjs
OK syntax: packages/queue/tests/dispatch.test.mjs
OK syntax: packages/queue/tests/gate-owner.test.mjs
OK syntax: packages/queue/tests/helpers.mjs
OK syntax: packages/queue/tests/lock.test.mjs
OK syntax: packages/queue/tests/migration.test.mjs
OK syntax: packages/queue/tests/review.test.mjs
OK syntax: packages/queue/tests/store.test.mjs
OK syntax: packages/queue/tests/write.test.mjs
OK syntax: packages/queue/tests/fixtures/fake-gitea.mjs
OK syntax: packages/queue/tests/fixtures/kill-at.mjs
OK syntax: packages/queue/tests/fixtures/lock-child.mjs
OK syntax: packages/queue/tests/fixtures/mosaic-pre-a2.sh
OK syntax: scripts/queue-commit.sh
OK syntax: scripts/git-hooks/pre-commit
OK syntax: scripts/mosaic
OK queue-commit.sh, the guard and scripts/mosaic are executable
OK packages/queue declares no dependencies
ℹ tests 156
ℹ pass 156
ℹ fail 0
OK node --test packages/queue/tests/
OK scripts/mosaic queue help
skip queue verify and render --check: this checkout (/home/jwoltje/.t3/worktrees/mosaic-stack/fethry-row266) is not the queue's canonical root (/mnt/storage/src/mosaic-stack)
queue suite: 28 passed, 0 failed
@@ -0,0 +1,17 @@
OK valid RELEASE resolves (exit 0)
OK invalid RELEASE exits 1 (exit 1)
OK missing RELEASE exits 1 (exit 1)
OK valid RELEASE leaves image tag consistent with version
OK status safe on empty state (exit 0)
OK status created no pointer
OK fault-injected activation refuses (exit 1)
OK refused activation wrote no pointer
OK refusal logged exactly once with valid fields
OK healthy activation succeeds (exit 0)
OK pointer written with valid fields
OK repeat activation succeeds (log grows) (exit 0)
OK log is append-only across activations
OK rollback without previous refuses (exit 1)
OK compose network made under the run's project and removed after the run
selftest: 15 passed, 0 failed
@@ -0,0 +1,97 @@
OK valid task validates (exit 0)
OK unknown task key exits 2 (exit 2)
OK unsupported taskVersion exits 2 (exit 2)
OK invalid task id exits 2 (exit 2)
OK empty prompt exits 2 (exit 2)
OK NUL in expectExact exits 2 (exit 2)
OK out-of-range timeout exits 2 (exit 2)
OK missing mission file exits 4 (exit 4)
OK task with valid mission validates (exit 0)
OK invalid mission exits 2 (exit 2)
OK validate missing task exits 4 (exit 4)
OK validation does not modify the task file
OK prune dry-run exits 0 (exit 0)
OK dry-run deleted nothing
OK prune --keep=2 --yes removes oldest (exit 0)
OK kept exactly 2 newest runs
OK newest run kept, oldest pruned
OK append-only receipt written (3 entries)
OK sessions/workspaces untouched by prune
OK prune with invalid keep exits 4 (exit 4)
OK mock adapter: gate passes on matching mock response (exit 0)
OK mock adapter: expect-mismatch recorded (exit 1)
OK mismatch reason recorded
OK unknown adapter fails closed (exit 1)
OK mission task runs via mock adapter (exit 0)
OK mission section injected into generated prompt
OK retry of mission run succeeds (exit 0)
OK retriedFrom lineage recorded
OK mission section present after retry (relative path resolved)
OK retry of missing run exits 4 (exit 4)
OK skill install bundled ms-tools (exit 0)
OK installed to skills-available
OK double install refuses (exit 1)
OK activate enables skill (exit 0)
OK enabled dir populated
OK uninstall while enabled refuses (exit 1)
OK deactivate moves back to available (exit 0)
OK uninstall removes from available (exit 0)
OK seat with enabled skill launches
OK skill path delivered to adapter
OK shipped researcher contract resolves (ceiling + network)
OK resolve-role refuses a non-role document (conductor policy) (exit 2)
OK resolve-role refuses name/filename mismatch (exit 2)
OK resolve-role refuses unknown network declaration (exit 2)
OK resolve-role refuses duplicate role tool (exit 2)
OK resolve-role refuses unsupported tool (exit 2)
OK resolve-role refuses missing contract file (exit 4)
OK version 1 role prints no contract line
OK shipped version 2 roles resolve with their contracts (pm, cto, coder, reviewer)
OK resolve-role accepts a minimal version 2 role (exit 0)
OK resolve-role refuses an action outside the vocabulary (exit 2)
OK resolve-role refuses a gated-only action in a role file (exit 2)
OK resolve-role refuses a Vikunja verb no role may hold (exit 2)
OK resolve-role refuses a version 2 role whose contract is missing (exit 2)
OK resolve-role refuses a contract that is a symbolic link (exit 2)
OK seat launches under role ceiling
OK role ceiling narrows seat tools (read,write,bash -> read,bash)
OK narrowing recorded loudly
OK missing role contract refuses launch (exit 2)
OK missing-contract refusal names the role
OK empty ceiling intersection -> tool-free seat
OK tool-free outcome recorded loudly
OK overridden agents dir without seat definition refuses (exit 4)
OK seat-resolution refusal names the seat
OK policy: mission only -> mission tools
OK policy: task only -> task tools
OK policy: both -> intersection (task narrowed)
OK policy: empty intersection -> tool-free
OK invalid mission capabilities rejected (exit 2)
mosaic-task: unsupported mission tool: "sudo" (supported: read, write, edit, bash, grep, find, ls)
OK task run with user layer present (exit 0)
OK user context dispatched into generated prompt
OK workspace+tools task runs via mock (exit 0)
OK workspace path + tools delivered to adapter
OK persistent workspace created on host
OK plain task still runs (no workspace/tools) (exit 0)
OK workspace var present but empty when absent
OK tools empty when absent
OK unknown tool exits 2 (exit 2)
OK workspace traversal exits 2 (exit 2)
OK hello task succeeds with exact marker
OK result.json written in run dir
OK result.json contents are correct
OK wrong expectExact fails with exit 1 (reason: expect-mismatch)
OK each run gets a distinct run dir (no clobber)
OK list shows both runs
skip live provider cases (row 244: no provider call in the gate)
OK onboard without name exits 4 (non-interactive) (exit 4)
OK onboard --name renders profile (exit 0)
OK profile written
OK canon structure: required filled, optional placeholdered
OK canon sections present
skip live provider cases (row 244: no provider call in the gate)
OK no agent identity on headless run
OK compose network made under the run's project and removed after the run
selftest: 92 passed, 0 failed
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,10 @@
db30ea0f64bd72a5e263d8ea699d5ae561e3c2f6d3f9d1e80a035823078e1531 packages/bus/src/broker.mjs
dac7cdd892b9965c64b16d138a49e4a0c4f5fd2189359780daf97ab7271c1938 packages/bus/tests/room-check.test.mjs
789132601745a94027f9e9184e7fef1f70cff0cba450afed5cca647f683591f4 packages/plugins/channel/webui/index.mjs
ea7fc5cb5bba4569a733f30bc185f81f917a0405b22e106cc3e03120a2322388 packages/plugins/tests/room-channel.test.mjs
3a5321a5f492a98d342e4ddcc1e9da3522cfff89a4f9bc3f51d2ab1426d3de1b packages/webui/src/chat-http.mjs
fe2072a7198771a82f58dca5fc05aa4d697dd3db25a206fb2a24c8514010b069 packages/webui/src/chat.mjs
c02235d52dc4884a8d49b279b1724274627ad027304c255ebaebd0bc198788a4 packages/webui/src/public/chat.css
abfed92be8c57024ee590a7669cdc7cabfbfece88f92c953a3bef2bedba412dd packages/webui/src/public/chat.js
92c0e956ef076af21c986b52e6f461f711b0b0e9115956cb1bcbeac0942a153c packages/webui/tests/room-browser.test.mjs
5b79a7523f087bec91d5c8a31ad59d9b34b21716a7032e120a4fe8358c72b5ce packages/webui/tests/room-http.test.mjs
+78
View File
@@ -0,0 +1,78 @@
#!/usr/bin/env python3
"""Isolated room mutants. Own worktree dependencies, assertion kills only, killpg after each run."""
import argparse, hashlib, json, os, signal, subprocess, tarfile, tempfile, time
from pathlib import Path
ROOT = Path(__file__).resolve().parents[4]
UI = 'packages/webui/src/public/chat.js'
HTTP = 'packages/webui/src/chat-http.mjs'
BROKER = 'packages/bus/src/broker.mjs'
PLUGIN = 'packages/plugins/channel/webui/index.mjs'
SEAM = 'packages/webui/src/chat.mjs'
BROWSER_TEST = 'packages/webui/tests/room-browser.test.mjs'
HTTP_TEST = 'packages/webui/tests/room-http.test.mjs'
BUS_TEST = 'packages/bus/tests/room-check.test.mjs'
PLUGIN_TEST = 'packages/plugins/tests/room-channel.test.mjs'
MUTANTS = [
('M01-plugin', PLUGIN, ' "room.open",\n', '', PLUGIN_TEST),
('M02-seam-body', SEAM, "channel('room.send', { project, body })", "channel('room.send', { project, body: body.trim() })", HTTP_TEST),
('M03-page-cursor', HTTP, 'value.at(-1)?.ids.at(-1)', 'value.at(-1)?.id', HTTP_TEST),
('M04-room-status', HTTP, 'Object.keys(ROOM_LINES).map(code => [code, 409])', 'Object.keys(ROOM_LINES).map(code => [code, 400])', HTTP_TEST),
('M05-strict-body', HTTP, "!exact(v, ['body']) || ", '', HTTP_TEST),
('M06-receipt-type', HTTP, "typeof t.instance === 'string' && ", '', HTTP_TEST),
('M07-room-check', BROKER, 'return entries.map((m) => this.#withCheck(m));', 'return entries;', BUS_TEST),
('M08-room-last', BROKER, "['thread.messages', 'room.read'].includes(request.verb)", "['thread.messages'].includes(request.verb)", BUS_TEST),
('M09-browser-body', UI, 'request(`rooms/${c.id}/messages`, { body })', 'request(`rooms/${c.id}/messages`, { body: body.trim() })', BROWSER_TEST),
('M10-members', UI, 'catalog.rows.filter(m => threads.rows.some(t => t.project === id && t.instance === m.instance && t.name === m.instance))', 'catalog.rows', BROWSER_TEST),
('M11-checked-render', UI, 'messageBody({ ...m, from_role:', 'messageBody({ ...m, check: null, from_role:', BROWSER_TEST),
('M12-leading-tags', UI, 'let body = input.trimStart();', 'let body = input;', BROWSER_TEST),
('M13-readonly', UI, 'if (!roomOwner() || !c.canSend || !c.roomReady || out())', 'if (!roomOwner() || !c.roomReady || out())', BROWSER_TEST),
('M14-uncertainty', HTTP, 'write ? sendOutcome(err) :', "write ? { code: 'invalid-request', sent: false } :", HTTP_TEST),
('M15-pending', UI, ' if (s.pending) return;', '', BROWSER_TEST),
('M16-body-dedup', UI, 'new Map((after ? [...s.rows, ...page.rows] : page.rows).map(m => [m.id, m]))', 'new Map((after ? [...s.rows, ...page.rows] : page.rows).map(m => [m.body, m]))', BROWSER_TEST),
]
def sha(p): return hashlib.sha256(p.read_bytes()).hexdigest()
def main():
p=argparse.ArgumentParser(); p.add_argument('--output',type=Path,required=True);p.add_argument('--only');a=p.parse_args()
names=set(a.only.split(',')) if a.only else {m[0] for m in MUTANTS}
assert names <= {m[0] for m in MUTANTS}
assert not subprocess.check_output(['git','status','--porcelain','--','packages'],cwd=ROOT,text=True).strip(),'Commit tested packages first'
assert (ROOT/'node_modules').is_dir() and not (ROOT/'node_modules').is_symlink(),'Local install required'
before={f:sha(ROOT/f) for f in {m[1] for m in MUTANTS}}
head=subprocess.check_output(['git','rev-parse','HEAD'],cwd=ROOT,text=True).strip()
a.output.mkdir(parents=True,exist_ok=True);results=[]
with tempfile.TemporaryDirectory(prefix='fethry266-mutants-') as temp:
temp=Path(temp);archive=temp/'source.tar'
with archive.open('wb') as stream:
subprocess.run(['git','archive','HEAD','packages','roles','contracts','tasks','missions','package.json','RELEASE'],cwd=ROOT,stdout=stream,check=True)
for name,target,old,new,test in MUTANTS:
if name not in names:continue
tree=temp/name;tree.mkdir()
with tarfile.open(archive) as bundle:bundle.extractall(tree,filter='data')
(tree/'node_modules').symlink_to(ROOT/'node_modules',target_is_directory=True)
path=tree/target;source=path.read_text();hits=source.count(old)
assert hits==1,(name,'anchor hits',hits)
path.write_text(source.replace(old,new,1));limit=240 if test==BROWSER_TEST else 120
cmd=['timeout','-k','10',str(limit),'node','--test','--test-reporter=tap','--test-concurrency=1','--test-timeout=30000',test]
signals=[];started=time.monotonic()
with (a.output/(name+'.tap')).open('w') as log:
child=subprocess.Popen(cmd,cwd=tree,env={**os.environ,'MOSAIC_REQUIRE_EDITOR_BUILD':'1'},stdout=log,stderr=subprocess.STDOUT,start_new_session=True)
try:code=child.wait(timeout=limit+15)
except subprocess.TimeoutExpired:os.killpg(child.pid,signal.SIGKILL);signals.append('KILL');code=child.wait()
finally:
try:
os.killpg(child.pid,signal.SIGTERM);signals.append('TERM');time.sleep(.2)
try:os.killpg(child.pid,signal.SIGKILL);signals.append('KILL')
except ProcessLookupError:pass
except ProcessLookupError:pass
path.write_text(source)
restored=sha(path)==hashlib.sha256(source.encode()).hexdigest();unchanged=before=={f:sha(ROOT/f) for f in before}
assert restored and unchanged,(name,'restore changed')
output=(a.output/(name+'.tap')).read_text()
killed=code==1 and 'ERR_ASSERTION' in output and 'not ok ' in output and "failureType: 'hookFailed'" not in output and '# cancelled 0\n' in output and '# skipped 0\n' in output
result={'mutant':name,'test':test,'exit':code,'killed':killed,'hits':hits,'restored':restored,'candidateUnchanged':unchanged,'seconds':round(time.monotonic()-started,3),'cleanupSignals':signals}
results.append(result);print(json.dumps(result),flush=True)
if not killed:break
report={'source':head,'selected':sorted(names),'candidateUnchanged':before=={f:sha(ROOT/f) for f in before},'results':results}
(a.output/'summary.json').write_text(json.dumps(report,indent=2)+'\n')
if len(results)!=len(names) or not all(r['killed'] for r in results):raise SystemExit(1)
if __name__=='__main__':main()
@@ -0,0 +1,19 @@
packages/webui/src/public/chat.js: old=52828c03b618e3754f0e59a395f4bcc16d1c9d8db01d403406a67ca0934f0188 new=abfed92be8c57024ee590a7669cdc7cabfbfece88f92c953a3bef2bedba412dd
packages/webui/tests/chat.test.mjs:319: for (const name of ['chat.js', 'chat.css']) {
packages/webui/tests/browser.test.mjs:21: // Rows 129, 154, 191, 194 and 294: chat.js, editor.js, processing.js, agents.js and federation.js are the scripts added, same origin; the list is the pin, so another script is a visible change.
packages/webui/tests/browser.test.mjs:22: assert.deepEqual(await b.evaluate('[...document.querySelectorAll("script")].map(s => s.getAttribute("src"))'), ['/editor.js', '/processing.js', '/federation.js', '/brand.js', '/app.js', '/markdown
packages/webui/tests/browser.test.mjs:24: assert.equal(await b.evaluate(`document.querySelectorAll('script[src="/chat.js"]').length`), 1);
packages/webui/tests/chat-sessions-access.test.mjs:34: if(url.pathname === '/') {res.writeHead(200,{'content-type':'text/html'});res.end('<!doctype html><title>Session access fixture</title><div id="view"></div><script src="/chat.js"></script>');retur
packages/webui/tests/chat-sessions-access.test.mjs:35: if(url.pathname === '/chat.js') {res.writeHead(200,{'content-type':'text/javascript'});res.end(readFileSync(new URL('../src/public/chat.js',import.meta.url)));return;}
packages/webui/tests/thread-sharing-fixture.mjs:52: const source = readFileSync(new URL('../src/public/chat.js', import.meta.url), 'utf8');
packages/webui/tests/thread-sharing-fixture.mjs:69: if (url.pathname === '/chat.js') { res.writeHead(200, { 'content-type': 'text/javascript' }); return res.end(chatSource); }
packages/webui/tests/thread-sharing-fixture.mjs:72: return res.end('<!doctype html><title>Sharing fixture</title><div id="view"></div><script src="/chat.js"></script>');
literal old/current 64-hex hits in tests: []
packages/webui/src/chat-http.mjs: old=854c86ae3fa6bfcdcfedbf49c2d3b50815a3ca6ce5849ff5f1c56d1aa1a55288 new=3a5321a5f492a98d342e4ddcc1e9da3522cfff89a4f9bc3f51d2ab1426d3de1b
packages/webui/tests/chat.test.mjs:273: const { chatHTTP } = await import('../src/chat-http.mjs');
packages/webui/tests/thread-sharing-fixture.mjs:9: import { chatHTTP } from '../src/chat-http.mjs';
literal old/current 64-hex hits in tests: []
packages/plugins/channel/webui/index.mjs: old=718139cae4a0bcd10bab4b334f560c28911509e4875b04618e6880d1579d9466 new=789132601745a94027f9e9184e7fef1f70cff0cba450afed5cca647f683591f4
packages/plugins/tests/room-channel.test.mjs:3: import { dispatch } from '../channel/webui/index.mjs';
packages/cli/tests/fixtures/federation-host.mjs:51: `export * from ${JSON.stringify(new URL('../../../plugins/channel/webui/index.mjs', import.meta.url).href)};`)),
literal old/current 64-hex hits in tests: []
@@ -0,0 +1,3 @@
packages/webui/src/public/chat.js 52828c03b618e3754f0e59a395f4bcc16d1c9d8db01d403406a67ca0934f0188
packages/webui/src/chat-http.mjs 854c86ae3fa6bfcdcfedbf49c2d3b50815a3ca6ce5849ff5f1c56d1aa1a55288
packages/plugins/channel/webui/index.mjs 718139cae4a0bcd10bab4b334f560c28911509e4875b04618e6880d1579d9466
+41
View File
@@ -0,0 +1,41 @@
#!/usr/bin/env python3
"""Owned worktree gate, with a fresh process group and bounded cleanup per command."""
import json, os, signal, subprocess, sys, time
from pathlib import Path
root = Path(__file__).resolve().parents[4]
scratch = Path(sys.argv[1]); scratch.mkdir(parents=True, exist_ok=True)
env = {**os.environ, 'TMPDIR': str(scratch), 'MOSAIC_REQUIRE_EDITOR_BUILD': '1'}
env.pop('MOSAIC_LIVE_PROVIDER', None)
node = ['node', '--test', '--test-reporter=tap', '--test-concurrency=1', '--test-timeout=30000']
steps = [('editor-build', 120, ['npm', 'run', 'build:editor'], root / 'packages/webui'),
('webui-full', 900, node + ['packages/webui/tests/'], root),
('plugins-full', 300, node + ['packages/plugins/tests/'], root),
('bus-full', 1200, node + ['packages/bus/tests/'], root)]
steps += [(p.stem, 1200, ['bash', str(p)], root) for p in sorted((root / 'scripts').glob('test-*.sh'))]
if '--scripts-only' in sys.argv[2:]:
steps = [step for step in steps if step[0].startswith('test-')]
if '--t9-reruns' in sys.argv[2:]:
steps = [(f't9-rerun-{i}', 120, node + ['packages/bus/tests/library-credential.test.mjs'], root) for i in range(1, 4)] + [('bus-rerun', 1200, node + ['packages/bus/tests/'], root)]
results = []
summary = scratch / ('scripts-summary.json' if '--scripts-only' in sys.argv[2:] else 'rerun-summary.json' if '--t9-reruns' in sys.argv[2:] else 'gate-summary.json')
for name, limit, command, cwd in steps:
started = time.monotonic(); signals = []
with (scratch / (name + '.tap')).open('w') as log:
child = subprocess.Popen(['timeout', '-k', '10', str(limit), *command], cwd=cwd, env=env,
stdout=log, stderr=subprocess.STDOUT, start_new_session=True)
try:
code = child.wait(timeout=limit + 15)
except subprocess.TimeoutExpired:
os.killpg(child.pid, signal.SIGKILL); signals.append('KILL'); code = child.wait()
finally:
# This group was created for this command; never signal any other seat's group.
try:
os.killpg(child.pid, signal.SIGTERM); signals.append('TERM'); time.sleep(.2)
try: os.killpg(child.pid, signal.SIGKILL); signals.append('KILL')
except ProcessLookupError: pass
except ProcessLookupError: pass
entry = {'step': name, 'command': command, 'cwd': str(cwd), 'outerSeconds': limit,
'exit': code, 'seconds': round(time.monotonic()-started, 3), 'cleanupSignals': signals}
results.append(entry); summary.write_text(json.dumps(results, indent=2) + '\n')
print(json.dumps(entry), flush=True)
if code: sys.exit(code if 0 < code < 126 else 1)
-193
View File
@@ -1,193 +0,0 @@
# Row214 C2-11a work record
Assignment sage-2794 at2026-10-22T16:33:20Z, Q220/mos-1301, issue#1715.
New isolated branch herb/row214 on aca16404c. The earlier197/215 worktrees
and their dirty/untracked historical packets are untouched. node_modules is
the required plain symlink to /mnt/storage/src/mosaic-stack/node_modules.
Read C2-11a in both pinned briefs. The section is unchanged at51cc0445c;
Q222 changes C2-06's reply-limit settings, not wikilinks. The editor model,
entry, view, existing model/browser/provenance tests, build/toolchain and
vendored markdown parser/serializer were read. No third_party source changes.
## Static finding and authored work
model.mjs stores a canonical sig and the raw original block, and serialise
returns raw when the sig matches. The vendored text writer escapes brackets
(to_markdown.ts:433-437). It is therefore possible for no-edit round-trips
to pass while dirty-block output escapes a wikilink. This is a source-based
hypothesis, not a measured result. Both outcomes are in DESIGN.md.
Authored, unrun: the pinned-bundle measurement; ten fixture round-trips;
three browser regressions; inert wikilink schema/tokenizer/serializer. The
schema includes headings, and front matter remains raw. The serializer
validates its spelling before bypassing escaping. HTML/entity-like targets
stay text under the existing escaping rules. No clicking or resolution.
Local static git diff --check is clean. No Node, npm, compiler, browser,
measurement, test, Docker, HTTPS Git or push has run. The queue claim waits
for a gap because scripts/mosaic invokes Node. No candidate or pass claim.
Only design/path documents may be committed before the granted red/green
checks; product, tests and measurement remain uncommitted until validated.
## Next granted steps
1. Claim from canonical during a CLEAR/gap.
2. Run measure.mjs against aca16404c's pinned Git blobs; save JSON unchanged.
3. Run the structural/edit regression alone on the baseline bundle (red).
4. Install the already-pinned esbuild0.28.2 in this worktree's packages/webui
with npm ci --ignore-scripts --no-audit --no-fund; no root install or lock edit.
5. Build with the existing editor/build.mjs, then the whole new test file and
existing editor, editor-browser and editor-provenance files, each singly.
6. Kill the serializer-removal mutant, restore, rebuild, focused green.
7. Commit only after the applicable checks, push only when Sage clears HTTPS
Git, send Filbert and Mos the candidate SHA/hash manifest directly, cc Sage.
8. After253 lands, new branch on its tip preserving all landed changes.
9. Filbert and Sage's whole webui and scripts gate finish the row.
All runs wait for explicit Sage CLEAR. Gander's row253 run5 owns the slot.
The whole suite gate and any unexpected failure use mos-0823's stop rule.
Proposed SESSIONS text for Sage's post-253 doc sweep (do not append here):
2026-10-22 | Herb (gpt-6.1-sol, f6cf4287) | row214 C2-11a editor wikilinks authoring | On herb/row214 at aca16404c, authored baseline round-trip measurement, designs for equal/unequal results, inert inline node and regression tests under sage-2794/Q220. Claim, runs and pushes held while253 owns the slot; measurement and test results unavailable.
## Filbert static design/path review accepted, R1 and R2 required
Review at2026-10-22T16:43:35Z read dee9f3d8d's packet only, no product or
runs. R1 is now in the plan: set MOSAIC_REQUIRE_EDITOR_BUILD=1 on focused
provenance and whole webui runs, grep ^# skip plus TAP/spec skip directives,
and name every skip. Missing/wrong pinned esbuild must fail, not skip.
R2: baseline no-edit roundTrips are expected to pass. They test retention
of raw bytes and are not red evidence for the node. Only the baseline
same-block structural/edit regression is expected red.
Two added fixtures cover a reference-definition collision and an atom
inside ordinary link text, taking the planned file to10 no-edit tests and
3 browser tests. The explicit & exclusion preserves the existing escaped
HTML/entity writer for dirty blocks; Q&A stays text and is a known limit.
Measurement VM setup matches loadEditor. Browser TMPDIR must use the short
non-/tmp scratch root. Sweep Node/Chromium after mutant/timeout and at clear.
All remain authored and unrun while253 owns the slot.
Filbert follow-up at2026-10-22T16:45:34Z: the authored N3 browser fixture
now explicitly asserts the separate reference-definition block ends in its
original exact bytes after the same-block edit. This test change is unrun
and uncommitted with the other product/test authoring, pending CLEAR.
## R2 restart on current refactor, sage-4164
New worktree: /home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2.
Branch herb/row214-r2, base487500a16f4ab5902c318509fdec6acc56a543ca.
Carried dee9f3d8d and e2710e92a as67ac3c25a andde42a59d4. Copied only
Herb's local model, new editor test/helper, measure.mjs and pending BUILD
note. The old worktree remains untouched. No stash or force push.
The current editor model/build/toolchain/BUILD.json/shipped bundle and
loader are identical to the old base. Entry/view and package dependencies
are unchanged. The current test fixture adds configDirectory:root; its
landed change is retained. The C2-11a brief section is unchanged. The
visual-mode condition now lives at public/bus.js:1054. No product behavior
beyond the accepted inert inline node is added by the rebase.
Row266 overlap: none. Our paths do not touch chat*.mjs, chat.js or chat.css,
and the intersection with origin/fethry/row266's actual diff is empty.
HASH-PINS.json records that ref's SHA and merge base.
Hash audit: grepped packages/*/tests for each actual/planned changed file
and filename, and scanned495 test/fixture files for literal prior SHA256
or Git-blob pins. No such pins found. Existing editor-provenance checks
read BUILD.json dynamically; regenerating it and the bundle is required.
The loader and browser/route tests use editor.js but pin no source hash.
No tests or pin asserts were weakened. The complete references and planned
generated paths are in HASH-PINS.json.
Sage-4164 explicitly permits the unrun node/tests to be committed now. This
supersedes the earlier packet's instruction to keep them uncommitted until
green. Static authoring is not a tested candidate. SOURCE.json records its
source hashes and the unbuilt generated-output status. The measurement now
pins this current execution base, not the historical accepted-doc base.
No Node, npm, measurement, compiler, test, browser, Docker or mutant has
run. Claim already succeeded at rev3234 on10-22; no new queue move is
needed. Push authorization is only herb/row214-r2. Row257's landing gate
and then266 own the slot; all execution remains held for Sage's CLEAR.
Planned focused grant: baseline measurement; the same-block structural
red; pinned npm ci/build; whole editor-wikilink.test.mjs (10 no-edit tests
with/without a final newline and3 browser tests), editor.test.mjs,
editor-browser.test.mjs and editor-provenance.test.mjs singly; one
serializer-removal mutant and restored focused green. Set
MOSAIC_REQUIRE_EDITOR_BUILD=1 for provenance and the later whole webui
gate. Capture all skip names, raw logs, short scratch TMPDIR and final
Node/Chromium process sweep. Two failures stop a gate; no rerun after an
out-of-row failure without reporting to Sage.
## Filbert R2 static B1 fixed before execution
Review at2026-10-24T17:14:55Z confirmed a defect in the authored invalid
atom path: state.text alone lacks the text-node override's HTML/entity
escaping. Factored that existing policy into escapedText and reused it for
invalid atoms. Extended the test payload/assertions to cover both <img and
&copy;. Valid atom behavior is unchanged. Excluded backticks from atom
recognition and added a text/code precedence fixture for N1.
Requested focused-grant addition: a second mutant that swaps only the
invalid-atom escapedText call for vendored state.text, dropping the <&
escape for this path. The existing malformed-attrs browser test must kill
it. The original serializer-removal mutant is still required. No runs,
checks, installation or rebuild have occurred; all remain held for CLEAR.
## Granted execution and candidate, sage-4286, 2026-10-24
Granted lane B until22:40Z. Ran on2ec3f5b5d's source in this worktree.
Every child inherited TMPDIR=/mnt/storage/scratch/tmp/g49X, obtained by
mktemp -d /mnt/storage/scratch/tmp/gXXX, never /tmp. Each command used
`nice -n "$((19 - $(nice)))" timeout -k 10 ...` with pipefail and tee;
raw logs record actual absolute nice19 and MOSAIC_REQUIRE_EDITOR_BUILD=1.
Node test concurrency was1 for each focused whole file and2 for webui.
Measurement22:07:22Z: all10 baseline forms round-trip byte for byte. The
JSON is copied unchanged to measurement.json. Adopted outcome A: no
measured file falls to Source just because of its wikilink. The atom is
proved by structure and same-block edits, not no-edit raw retention.
Baseline structural case:0/1 expected red, no atom in old shipped bundle.
Pinned npm ci --ignore-scripts --no-audit --no-fund succeeded locally in
packages/webui, then editor/build.mjs ran with esbuild0.28.2. The existing
upstream sideEffects warning for mark.ts appeared; no vendored file changed.
No package/lockfile change. Rebuild provenance ran and passed, not skipped.
| Whole file | Pass/fail | Wall seconds |
| --- | ---: | ---: |
| editor-wikilink.test.mjs | 13/0 | 2.348 |
| editor.test.mjs | 5/0 | 2.053 |
| editor-browser.test.mjs | 16/0 | 14.984 |
| editor-provenance.test.mjs | 6/0 | 0.343 |
Two mutants, each independently restored and rebuilt: serializer removal
failed the structural case0/1, restore1/0; invalid-path escapedText swapped
for vendored state.text failed malformed attrs0/1, restore1/0. The model
and generated outputs match their original good hashes after both.
Post-mutant cwd/temp-root sweep0. Both failures are expected evidence.
Full webui: exactly69 files,455/0,0 skipped/cancelled,174.189s, ended
22:12:48.880975Z. The log contains the required-build env and nice19.
Skip scan for ^# skip, TAP # SKIP and spec skipped-test lines found none,
so skip names are []. A preliminary command mistakenly selected7 files;
its28/0 in17.787s is archived as webui-whole.log and explicitly NOT used
as full gate evidence. The corrected69-file run is webui-69.log.
Final cwd/TMPDIR/argv sweep22:13:17.560692Z:0 processes. No owned Node or
Chromium remains. Removed the private TMPDIR only after that zero sweep.
Clear was sent to Sage as herb-0102 at22:13:46Z; no further execution.
Bundle SHA256 bd167899a551c70dc07e500fcdd1853d7fb710b23c217ba5b42daf5785c38a72.
CSS SHA2568654ac57d1e7a561110138ecd7f701c34a074017ff8c4cd2768d8083908ee61f,
byte-identical to2ec3f5b5d. BUILD.json outputs match those hashes. Source
commit a530a60798bf48eb18bb9e225d099faf5c2975cf adds generated outputs and
an append-only phase log; packet changes follow separately. No code or
assertion changed after these results. The webui gate requirement is met
on this tree; Filbert review and every scripts/test-*.sh remain pending.
Sage re-pinned the brief to case2-rows.md blob85e6fe2e under sage-4286;
its C2-11a section is unchanged. No case1-accept file was in any run.
-168
View File
@@ -1,168 +0,0 @@
# C2-11a: an inert editor wikilink node
Base: aca16404c. Owner: Herb. Reviewer: Filbert. Issue: #1715.
Authority: sage-2794, Q220/mos-1301. The assignment permits authoring the
node and tests before the measurement slot. Runs, claim and pushes wait
for Sage's CLEAR. After row253 lands, a new branch will carry the change
onto its landing with every landed hunk retained.
## Measurement before choosing the explanation
Run agents/herb/work/queue-214/measure.mjs only on a granted slot. It loads
aca16404c's editor.js and markdown-preview.js directly from local Git
objects. It verifies the editor bundle hash against that base's BUILD.json.
It cannot accidentally measure a candidate rebuild. Its JSON records the
full baseline SHA, bundle hash, timestamp, input, output and equality for
each fixture. The first five are the brief's plain, labelled, heading,
list and front-matter cases; extra cases cover a heading block, combined
heading/label, Unicode/spacing, adjacency and an inert embed. No result is
available yet. Static reasoning is not a measurement.
Outcome A, every baseline round-trip is equal: record that wikilinks do
not trigger Source fallback for the measured inputs. Do not claim that
bug exists. The source's raw/sig cache explains why an unchanged block can
keep its bytes even when its canonical serializer escapes brackets. Add
the node for structured wikilinks and dirty-block preservation, as the
brief requests. A baseline structural/edit regression must fail even if
all unchanged-file checks pass.
Outcome B, one or more differ: record the exact differing bytes and affected
contexts. Keep the existing Source fallback fail-closed. The node restores
the required spellings where the block is structured. Retain the same
no-edit and dirty-block regressions. If the mismatch comes from a separate
block, line-ending or front-matter defect, report it before widening scope.
## Representation and conversion
The schema gains one inline atom, wikilink, with a single source attribute.
Its source is the complete spelling, not reconstructed target/label parts.
It has no href, navigation, fetch or click behavior. A span with data-source
and a text child displays the spelling. Heading content includes the new
atom; paragraphs, quotes and lists already accept inline content.
One markdown-it inline rule runs before ordinary links, after escapes and
backticks. A sticky match reads a complete single-line [[...]] or ![[...]]
without copying every suffix or crossing state.posMax. The node writer
writes its validated spelling without bracket escaping, so editing adjacent
text cannot rewrite a wikilink. Front matter remains a raw block. No new
file-read, save, routing, documentPath or target-resolution behavior is added.
The accepted atom grammar excludes brackets within the body, line breaks,
angle brackets and ampersands. This is an editor representation boundary,
not a library resolver or a refusal to open such a file. Malformed,
HTML/entity-like and code syntax stays under the existing text/raw rules.
This preserves the existing escaping of HTML/entities when a block changes.
DOM paste accepts only that same grammar. Invalid attributes constructed
programmatically are flattened to one line and escaped by the text writer.
No input string is parsed as HTML and embeds never load an image.
## Acceptance and review
The measurement JSON goes in BUILD.md and the final manifest packet.
Ten fixture round-trips run with and without a final newline. A browser
test inspects real ProseMirror atom types and attributes, edits the same
block and reparses it, for each fixture. Two more browser tests cover
code/escape/malformed/hostile syntax and DOM/programmatic-attribute safety.
Tests use the existing fixture and Chromium harness and the shipped bundle.
They do not export new production APIs just for testing.
Before rebuilding, run only the structural regression against the baseline
bundle and observe it fail. Rebuild the candidate with the exact pinned
esbuild0.28.2 binary, run the whole new test file, existing editor tests,
editor browser tests and provenance test. Remove only the wikilink serializer
handler for one mutant; the dirty-block assertion must fail. Restore, rebuild
and rerun the focused regression. All execution needs Sage's CLEAR, including
installation, checks, builds, browser tests and the measurement.
The checked-in bundle and editor/BUILD.json must be regenerated by the
existing build script. No hand edits of generated JavaScript or provenance.
The current shared esbuild is0.28.1 and the local webui install is absent.
A granted npm ci --ignore-scripts --no-audit --no-fund in packages/webui is
needed before building; the root node_modules remains its plain symlink.
No dependency or lockfile change is planned.
Final gate: Filbert approves the manifest, then the whole webui suite and
every scripts/test-*.sh on Sage's slot. Two failures stop a gate. A failure
outside this row is reported to Sage before any rerun. Source, generated
output, mode/hash manifest and raw granted logs identify the candidate.
## Static review follow-through (Filbert, 2026-10-22T16:43:35Z)
R1: the focused editor-provenance run and Sage's whole webui gate must set
MOSAIC_REQUIRE_EDITOR_BUILD=1. A missing, wrong-version or unpinned binary
then fails. Check every log for ^# skip, as well as TAP # SKIP directives
and the spec reporter's skipped-test lines; record each skipped name and
reason. A skipped rebuild is not proof of bundle reproducibility. The CSS
output must stay byte-identical and match BUILD.json.
R2: no-edit roundTrip checks are expected to pass on the baseline because
parse sets sig=canonical and an unchanged serialise returns lead+raw. Their
green result is compatibility evidence, never evidence that the atom was
needed or installed. The same-block edit/structural regression is the red
that proves the new node. The required measurement still runs and is kept.
N1: bus.js checks visual mode at949 on this base and also requires
MosaicMarkdown. The measurement uses the existing helper's bare-window VM
shape, markdown-preview.js first, then editor.js, both from pinned Git blobs.
N2: the exclusion of & and angle brackets is deliberate: the existing
text serializer escapes entities/HTML when it rewrites a block for another
renderer. An atom's verbatim writer must not bypass that rule, including
for pasted/programmatic values. This keeps those targets as ordinary text;
[[Q&A]] will still be escaped if its own block changes. It is a known
representation limit beyond the five brief cases, not a resolver change.
It is included among the text-only cases. Unedited bytes remain intact.
N3: the reference-definition fixture [[a]] with [a]: u deliberately becomes
one inert wikilink rather than a bracket around a reference link. Literal
spelling and the separate definition block remain intact.
N4: [x [[a]]](u) is an explicit fixture. The atom inherits the enclosing
ordinary link mark, whose existing target gate still applies. The atom
itself supplies no href or new click behavior; the fixture checks its
structure and spelling before/after a same-block edit.
N6: every granted browser/test process gets TMPDIR from
mktemp -d /mnt/storage/scratch/tmp/gXXX. Never /tmp. Sweep owned Chromium
and Node processes by cwd and the temp-root path after the mutant, after
any timeout, and before clearing the slot. Retain/report uncertain owners.
## R2 current-base check, sage-4164 (2026-10-24)
The execution base is now487500a16, on herb/row214-r2, not the historical
aca16404c above. The two accepted document commits were cherry-picked
cleanly. The model, build script, toolchain, BUILD.json, editor.js, view,
entry and editor test loader are byte-identical between those bases. The
current fixture's new configDirectory isolation is retained; it is not
copied from the old worktree. The visual-mode check is now bus.js:1054.
The current C2-11a brief section is unchanged. Row266's chat modules,
public/chat.js and public/chat.css are outside this row, with no overlap.
measure.mjs now pins487500a16's Git objects and BUILD.json. The baseline
bundle still lacks the atom, and the first executed structural regression
will use it before any rebuild. The required measurement, red/green, pinned
rebuild, mutant kill and full gate remain unrun and required. Runtime
validation is not inferred from the unchanged source or this static check.
Sage-4164 explicitly authorizes committing the preserved local node/tests
on the new branch before execution. The authored source commit is static
work, not a green candidate. No Node, npm, rebuild or browser starts until
Sage sends CLEAR. HASH-PINS.json records the test-tree audit and row266
intersection. The gate still requires MOSAIC_REQUIRE_EDITOR_BUILD=1, a
named skip list, whole webui and every scripts/test-*.sh.
## R2 static follow-up, Filbert B1/N1 (2026-10-24T17:14:55Z)
B1: state.text(..., true) escapes Markdown punctuation, not HTML/entities.
The invalid-atom writer now calls the same escapedText helper as ordinary
text nodes, including the <& step. Valid atoms still preserve their source
verbatim. The malformed-attribute regression now asserts both an escaped
<img and an escaped &copy;, plus flattened line breaks. A second mutant
will replace only the invalid atom's escapedText call with state.text,
leaving normal text escaping intact; this browser regression must kill it.
This additional mutant needs Sage's grant alongside the serializer-removal
mutant. No runtime result is claimed for either.
N1: backticks are excluded from the atom body, preserving code-span
precedence. The text-only fixture includes [[a`]]` and must produce no
wikilink atom. All other malformed/HTML/entity boundaries remain as before.
-572
View File
@@ -1,572 +0,0 @@
{
"grant": "sage-4286",
"candidateBeforeBuild": "2ec3f5b5ddab0cb5f2716f8164c25861b741213e",
"nice": 19,
"tmpRoot": "/mnt/storage/scratch/tmp/g49X",
"requireEditorBuild": "1",
"measurement": {
"base": "487500a16f4ab5902c318509fdec6acc56a543ca",
"bundleSha256": "9c881b13740fae2408717ad75fa1d85bfcfe3fa8b3af0f1b3f2e706c90e80fee",
"measuredAt": "2026-10-24T22:07:22.210Z",
"allEqual": true,
"results": [
{
"name": "plain",
"input": "[[a]]\n",
"output": "[[a]]\n",
"equal": true
},
{
"name": "labelled",
"input": "[[a|b]]\n",
"output": "[[a|b]]\n",
"equal": true
},
{
"name": "heading target",
"input": "[[a#h]]\n",
"output": "[[a#h]]\n",
"equal": true
},
{
"name": "list item",
"input": "- [[a]]\n",
"output": "- [[a]]\n",
"equal": true
},
{
"name": "next to front matter",
"input": "---\nrelated: \"[[metadata]]\"\n---\n\n[[a]]\n",
"output": "---\nrelated: \"[[metadata]]\"\n---\n\n[[a]]\n",
"equal": true
},
{
"name": "heading block and combined label",
"input": "# See [[a#h|Title]]\n",
"output": "# See [[a#h|Title]]\n",
"equal": true
},
{
"name": "spaces, Unicode and adjacent links",
"input": "See [[ H\u00e9llo there # A heading | a label ]][[next]]\n",
"output": "See [[ H\u00e9llo there # A heading | a label ]][[next]]\n",
"equal": true
},
{
"name": "reference-definition collision",
"input": "[[a]]\n\n[a]: u\n",
"output": "[[a]]\n\n[a]: u\n",
"equal": true
},
{
"name": "inside an ordinary link",
"input": "[x [[a]]](u)\n",
"output": "[x [[a]]](u)\n",
"equal": true
},
{
"name": "inert embed",
"input": "![[cover.png]]\n",
"output": "![[cover.png]]\n",
"equal": true
}
]
},
"results": [
{
"name": "measurement",
"argv": [
"node",
"agents/herb/work/queue-214/measure.mjs"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2",
"rc": 0,
"wallSeconds": 0.093,
"counts": {},
"nice": 19,
"tmpRoot": "/mnt/storage/scratch/tmp/g49X",
"requireEditorBuild": "1",
"timeoutSeconds": 60,
"ended": "2026-10-24T22:07:22.215700+00:00"
},
{
"name": "baseline-red",
"argv": [
"node",
"--test",
"--test-concurrency=1",
"--test-name-pattern=wikilinks are inline atoms and survive",
"packages/webui/tests/editor-wikilink.test.mjs"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2",
"rc": 1,
"wallSeconds": 1.151,
"counts": {
"tests": 1,
"pass": 0,
"fail": 1,
"cancelled": 0,
"skipped": 0
},
"nice": 19,
"tmpRoot": "/mnt/storage/scratch/tmp/g49X",
"requireEditorBuild": "1",
"timeoutSeconds": 180,
"ended": "2026-10-24T22:07:27.998436+00:00"
},
{
"name": "npm-ci",
"argv": [
"npm",
"ci",
"--ignore-scripts",
"--no-audit",
"--no-fund"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2/packages/webui",
"rc": 0,
"wallSeconds": 0.514,
"counts": {},
"nice": 19,
"tmpRoot": "/mnt/storage/scratch/tmp/g49X",
"requireEditorBuild": "1",
"timeoutSeconds": 240,
"ended": "2026-10-24T22:07:41.534116+00:00"
},
{
"name": "build",
"argv": [
"node",
"editor/build.mjs"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2/packages/webui",
"rc": 0,
"wallSeconds": 0.108,
"counts": {},
"nice": 19,
"tmpRoot": "/mnt/storage/scratch/tmp/g49X",
"requireEditorBuild": "1",
"timeoutSeconds": 120,
"ended": "2026-10-24T22:07:44.654385+00:00"
},
{
"name": "wikilink-green",
"argv": [
"node",
"--test",
"--test-concurrency=1",
"packages/webui/tests/editor-wikilink.test.mjs"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2",
"rc": 0,
"wallSeconds": 2.348,
"counts": {
"tests": 13,
"pass": 13,
"fail": 0,
"cancelled": 0,
"skipped": 0
},
"nice": 19,
"tmpRoot": "/mnt/storage/scratch/tmp/g49X",
"requireEditorBuild": "1",
"timeoutSeconds": 180,
"ended": "2026-10-24T22:07:52.583345+00:00"
},
{
"name": "editor-green",
"argv": [
"node",
"--test",
"--test-concurrency=1",
"packages/webui/tests/editor.test.mjs"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2",
"rc": 0,
"wallSeconds": 2.053,
"counts": {
"tests": 5,
"pass": 5,
"fail": 0,
"cancelled": 0,
"skipped": 0
},
"nice": 19,
"tmpRoot": "/mnt/storage/scratch/tmp/g49X",
"requireEditorBuild": "1",
"timeoutSeconds": 240,
"ended": "2026-10-24T22:07:59.286086+00:00"
},
{
"name": "editor-browser-green",
"argv": [
"node",
"--test",
"--test-concurrency=1",
"packages/webui/tests/editor-browser.test.mjs"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2",
"rc": 0,
"wallSeconds": 14.984,
"counts": {
"tests": 16,
"pass": 16,
"fail": 0,
"cancelled": 0,
"skipped": 0
},
"nice": 19,
"tmpRoot": "/mnt/storage/scratch/tmp/g49X",
"requireEditorBuild": "1",
"timeoutSeconds": 240,
"ended": "2026-10-24T22:08:20.029050+00:00"
},
{
"name": "provenance-green",
"argv": [
"node",
"--test",
"--test-concurrency=1",
"packages/webui/tests/editor-provenance.test.mjs"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2",
"rc": 0,
"wallSeconds": 0.343,
"counts": {
"tests": 6,
"pass": 6,
"fail": 0,
"cancelled": 0,
"skipped": 0
},
"nice": 19,
"tmpRoot": "/mnt/storage/scratch/tmp/g49X",
"requireEditorBuild": "1",
"timeoutSeconds": 180,
"ended": "2026-10-24T22:08:39.003420+00:00"
},
{
"name": "serializer-removal-build",
"argv": [
"node",
"editor/build.mjs"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2/packages/webui",
"rc": 0,
"wallSeconds": 0.093,
"counts": {},
"nice": 19,
"tmpRoot": "/mnt/storage/scratch/tmp/g49X",
"requireEditorBuild": "1",
"timeoutSeconds": 90,
"ended": "2026-10-24T22:08:51.422097+00:00"
},
{
"name": "serializer-removal-red",
"argv": [
"node",
"--test",
"--test-concurrency=1",
"--test-name-pattern=wikilinks are inline atoms and survive",
"packages/webui/tests/editor-wikilink.test.mjs"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2",
"rc": 1,
"wallSeconds": 0.887,
"counts": {
"tests": 1,
"pass": 0,
"fail": 1,
"cancelled": 0,
"skipped": 0
},
"nice": 19,
"tmpRoot": "/mnt/storage/scratch/tmp/g49X",
"requireEditorBuild": "1",
"timeoutSeconds": 180,
"ended": "2026-10-24T22:08:52.340936+00:00"
},
{
"name": "serializer-removal-restore-build",
"argv": [
"node",
"editor/build.mjs"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2/packages/webui",
"rc": 0,
"wallSeconds": 0.115,
"counts": {},
"nice": 19,
"tmpRoot": "/mnt/storage/scratch/tmp/g49X",
"requireEditorBuild": "1",
"timeoutSeconds": 90,
"ended": "2026-10-24T22:08:52.498613+00:00"
},
{
"name": "serializer-removal-restore-green",
"argv": [
"node",
"--test",
"--test-concurrency=1",
"--test-name-pattern=wikilinks are inline atoms and survive",
"packages/webui/tests/editor-wikilink.test.mjs"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2",
"rc": 0,
"wallSeconds": 0.979,
"counts": {
"tests": 1,
"pass": 1,
"fail": 0,
"cancelled": 0,
"skipped": 0
},
"nice": 19,
"tmpRoot": "/mnt/storage/scratch/tmp/g49X",
"requireEditorBuild": "1",
"timeoutSeconds": 180,
"ended": "2026-10-24T22:08:53.514962+00:00"
},
{
"name": "invalid-escaping-build",
"argv": [
"node",
"editor/build.mjs"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2/packages/webui",
"rc": 0,
"wallSeconds": 0.102,
"counts": {},
"nice": 19,
"tmpRoot": "/mnt/storage/scratch/tmp/g49X",
"requireEditorBuild": "1",
"timeoutSeconds": 90,
"ended": "2026-10-24T22:08:53.655583+00:00"
},
{
"name": "invalid-escaping-red",
"argv": [
"node",
"--test",
"--test-concurrency=1",
"--test-name-pattern=wikilink DOM paste accepts",
"packages/webui/tests/editor-wikilink.test.mjs"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2",
"rc": 1,
"wallSeconds": 0.979,
"counts": {
"tests": 1,
"pass": 0,
"fail": 1,
"cancelled": 0,
"skipped": 0
},
"nice": 19,
"tmpRoot": "/mnt/storage/scratch/tmp/g49X",
"requireEditorBuild": "1",
"timeoutSeconds": 180,
"ended": "2026-10-24T22:08:54.668225+00:00"
},
{
"name": "invalid-escaping-restore-build",
"argv": [
"node",
"editor/build.mjs"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2/packages/webui",
"rc": 0,
"wallSeconds": 0.105,
"counts": {},
"nice": 19,
"tmpRoot": "/mnt/storage/scratch/tmp/g49X",
"requireEditorBuild": "1",
"timeoutSeconds": 90,
"ended": "2026-10-24T22:08:54.809629+00:00"
},
{
"name": "invalid-escaping-restore-green",
"argv": [
"node",
"--test",
"--test-concurrency=1",
"--test-name-pattern=wikilink DOM paste accepts",
"packages/webui/tests/editor-wikilink.test.mjs"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2",
"rc": 0,
"wallSeconds": 0.985,
"counts": {
"tests": 1,
"pass": 1,
"fail": 0,
"cancelled": 0,
"skipped": 0
},
"nice": 19,
"tmpRoot": "/mnt/storage/scratch/tmp/g49X",
"requireEditorBuild": "1",
"timeoutSeconds": 180,
"ended": "2026-10-24T22:08:55.831793+00:00"
},
{
"name": "webui-whole",
"argv": [
"node",
"--test",
"--test-concurrency=2",
"tests/agents-browser.test.mjs",
"tests/agents.test.mjs",
"tests/board-held.test.mjs",
"tests/browser-edge.test.mjs",
"tests/browser.test.mjs",
"tests/bus-browser.test.mjs",
"tests/bus.test.mjs"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2/packages/webui",
"rc": 0,
"wallSeconds": 17.787,
"counts": {
"tests": 28,
"pass": 28,
"fail": 0,
"cancelled": 0,
"skipped": 0
},
"nice": 19,
"tmpRoot": "/mnt/storage/scratch/tmp/g49X",
"requireEditorBuild": "1",
"timeoutSeconds": 600,
"ended": "2026-10-24T22:09:39.039897+00:00"
},
{
"name": "webui-69",
"argv": [
"node",
"--test",
"--test-concurrency=2",
"tests/agents-browser.test.mjs",
"tests/agents.test.mjs",
"tests/assistant.test.mjs",
"tests/board-held.test.mjs",
"tests/browser-edge.test.mjs",
"tests/browser.test.mjs",
"tests/bus-browser.test.mjs",
"tests/bus.test.mjs",
"tests/channel-chat.test.mjs",
"tests/chat-browser.test.mjs",
"tests/chat-instances.test.mjs",
"tests/chat-replies-browser.test.mjs",
"tests/chat-sessions-access.test.mjs",
"tests/chat.test.mjs",
"tests/conversation.test.mjs",
"tests/decide-browser.test.mjs",
"tests/decide-sso.test.mjs",
"tests/decision-http.test.mjs",
"tests/discord.test.mjs",
"tests/docs-browser.test.mjs",
"tests/editor-browser.test.mjs",
"tests/editor-provenance.test.mjs",
"tests/editor-wikilink.test.mjs",
"tests/editor.test.mjs",
"tests/granted-user.test.mjs",
"tests/history-return-flow.test.mjs",
"tests/instances-browser.test.mjs",
"tests/instances.test.mjs",
"tests/library-cli.test.mjs",
"tests/library-routes.test.mjs",
"tests/library-status.test.mjs",
"tests/limits-browser.test.mjs",
"tests/limits-route.test.mjs",
"tests/markdown-preview.test.mjs",
"tests/messages.test.mjs",
"tests/pinned-copy.test.mjs",
"tests/preview.test.mjs",
"tests/processing-browser.test.mjs",
"tests/processing-ui.test.mjs",
"tests/processing.test.mjs",
"tests/project-file.test.mjs",
"tests/project-name-repo.test.mjs",
"tests/proof-cli.test.mjs",
"tests/proof.test.mjs",
"tests/reads.test.mjs",
"tests/relaunch.test.mjs",
"tests/return-flow.test.mjs",
"tests/routes-browser.test.mjs",
"tests/routes.test.mjs",
"tests/send-browser.test.mjs",
"tests/send.test.mjs",
"tests/serve.test.mjs",
"tests/service.test.mjs",
"tests/settings-form.test.mjs",
"tests/settings-write.test.mjs",
"tests/shell.test.mjs",
"tests/sso-browser.test.mjs",
"tests/sso.test.mjs",
"tests/tester-browser.test.mjs",
"tests/tester-cli.test.mjs",
"tests/tester-listener.test.mjs",
"tests/tester-socket.test.mjs",
"tests/thread-claims-browser.test.mjs",
"tests/thread-claims.test.mjs",
"tests/thread-sharing.test.mjs",
"tests/usage-browser.test.mjs",
"tests/usage.test.mjs",
"tests/user-option-swap.test.mjs",
"tests/views.test.mjs"
],
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2/packages/webui",
"rc": 0,
"wallSeconds": 174.189,
"counts": {
"tests": 455,
"pass": 455,
"fail": 0,
"cancelled": 0,
"skipped": 0
},
"nice": 19,
"tmpRoot": "/mnt/storage/scratch/tmp/g49X",
"requireEditorBuild": "1",
"timeoutSeconds": 600,
"ended": "2026-10-24T22:12:48.880975+00:00"
}
],
"mutants": [
{
"name": "serializer-removal",
"killed": true,
"restored": true,
"restoredHashesEqual": true
},
{
"name": "invalid-escaping",
"killed": true,
"restored": true,
"restoredHashesEqual": true
}
],
"skipNames": [],
"sweep": {
"at": "2026-10-24T22:13:17.560692+00:00",
"count": 0,
"processes": []
},
"generated": {
"src/public/editor.js": {
"sha256": "bd167899a551c70dc07e500fcdd1853d7fb710b23c217ba5b42daf5785c38a72",
"bytes": 759959
},
"src/public/editor.css": {
"sha256": "8654ac57d1e7a561110138ecd7f701c34a074017ff8c4cd2768d8083908ee61f",
"bytes": 4462
}
},
"unchangedCss": true,
"modelRestored": true,
"notes": [
"webui-whole was an accidental seven-file subset, 28/0, not gate evidence; superseded by webui-69 455/0",
"no scripts/test-*.sh ran in this grant; later gate remains pending"
],
"tmpRemoved": true
}
-323
View File
@@ -1,323 +0,0 @@
{
"base": "487500a16f4ab5902c318509fdec6acc56a543ca",
"testFilesScanned": 495,
"plannedPaths": [
"packages/webui/editor/model.mjs",
"packages/webui/tests/editor-wikilink.test.mjs",
"packages/webui/tests/helpers/wikilink-cases.mjs",
"agents/herb/work/queue-214/measure.mjs",
"agents/herb/work/queue-214/DESIGN.md",
"agents/herb/work/queue-214/MANIFEST.md",
"agents/herb/work/queue-214/BUILD.md",
"packages/webui/src/public/editor.js",
"packages/webui/editor/BUILD.json",
"agents/herb/work/queue-214/HASH-PINS.json"
],
"literalPriorBlobPins": [],
"pathReferences": [
{
"test": "packages/webui/tests/editor-wikilink.test.mjs",
"line": 6,
"text": "import { WIKILINK_CASES } from './helpers/wikilink-cases.mjs';"
},
{
"test": "packages/webui/tests/browser.test.mjs",
"line": 21,
"text": "// Rows 129, 154, 191, 194 and 294: chat.js, editor.js, processing.js, agents.js and federation.js are the scripts added, same origin; the list is the pin, so another script is a visible change."
},
{
"test": "packages/webui/tests/browser.test.mjs",
"line": 22,
"text": "assert.deepEqual(await b.evaluate('[...document.querySelectorAll(\"script\")].map(s => s.getAttribute(\"src\"))'), ['/editor.js', '/processing.js', '/federation.js', '/brand.js', '/app.js', '/markdown-preview.js', '/chat.js', '/agents.js', '/bus.js']);"
},
{
"test": "packages/webui/tests/sso.test.mjs",
"line": 1,
"text": "// Q175 phase 1 (#1690, design agents/sage/work/q175-sso/DESIGN.md section 9): the Console as an"
},
{
"test": "packages/webui/tests/user-option-swap.test.mjs",
"line": 133,
"text": "['GET', '/app.js'], ['GET', '/bus.js'], ['GET', '/agents.js'], ['GET', '/editor.js'], ['GET', '/shared/app.css'], ['GET', '/index.html'],"
},
{
"test": "packages/webui/tests/serve.test.mjs",
"line": 38,
"text": "for (const path of ['/', '/app.js', '/brand.js', '/console.css', '/live.css', '/editor.js', '/editor.css', '/shared/app.css', '/assets/fonts/manrope-400.woff2']) {"
},
{
"test": "packages/webui/tests/editor-provenance.test.mjs",
"line": 18,
"text": "const build = JSON.parse(readFileSync(join(webui, 'editor/BUILD.json'), 'utf8'));"
},
{
"test": "packages/webui/tests/editor-provenance.test.mjs",
"line": 92,
"text": "const bundle = readFileSync(join(webui, 'src/public/editor.js'), 'utf8');"
},
{
"test": "packages/webui/tests/editor-provenance.test.mjs",
"line": 167,
"text": "const info = await run(out, join(out, 'BUILD.json'));"
},
{
"test": "packages/webui/tests/editor-provenance.test.mjs",
"line": 171,
"text": "assert.equal(readFileSync(join(out, 'BUILD.json'), 'utf8'), readFileSync(join(webui, 'editor/BUILD.json'), 'utf8'));"
},
{
"test": "packages/webui/tests/editor-browser.test.mjs",
"line": 103,
"text": "assert.equal(await h.q('typeof window.MosaicEditor.mount'), 'function', 'editor.js ran under script-src self');"
},
{
"test": "packages/webui/tests/editor-browser.test.mjs",
"line": 423,
"text": "// (The editor's own reading of a file can give a single line break in a title or alt, never a blank line; see BUILD.md.)"
},
{
"test": "packages/webui/tests/granted-user.test.mjs",
"line": 231,
"text": "['GET', '/app.js'], ['GET', '/bus.js'], ['GET', '/agents.js'], ['GET', '/editor.js'], ['GET', '/shared/app.css'], ['GET', '/index.html'],"
},
{
"test": "packages/webui/tests/editor.test.mjs",
"line": 20,
"text": "for (const [path, type] of [['/editor.js', 'text/javascript'], ['/editor.css', 'text/css']]) {"
},
{
"test": "packages/webui/tests/editor.test.mjs",
"line": 29,
"text": "assert.ok(index.indexOf('src=\"/editor.js\"') < index.indexOf('src=\"/bus.js\"'), 'the editor loads before the page script, so bus.js can mount it');"
},
{
"test": "packages/webui/tests/editor.test.mjs",
"line": 60,
"text": "for (const file of ['entry.mjs', 'model.mjs', 'view.mjs']) {"
},
{
"test": "packages/webui/tests/editor.test.mjs",
"line": 64,
"text": "const bundle = readFileSync(join(webui, 'src/public/editor.js'), 'utf8');"
},
{
"test": "packages/webui/tests/editor.test.mjs",
"line": 65,
"text": "assert.doesNotMatch(bundle, /\\beval\\s*\\(|\\bnew\\s+Function\\b/, 'src/public/editor.js');"
},
{
"test": "packages/webui/tests/editor.test.mjs",
"line": 69,
"text": "const model = readFileSync(join(webui, 'editor/model.mjs'), 'utf8');"
},
{
"test": "packages/webui/tests/helpers/editor-bundle.mjs",
"line": 1,
"text": "// Loads src/public/editor.js (and markdown-preview.js, the link gate it needs) into a vm context with a"
},
{
"test": "packages/webui/tests/helpers/editor-bundle.mjs",
"line": 15,
"text": "for (const f of ['markdown-preview.js', 'editor.js']) vm.runInContext(readFileSync(join(pub, f), 'utf8'), sandbox, { filename: f });"
},
{
"test": "packages/plugins/tests/harness.test.mjs",
"line": 44,
"text": "// pi 0.85.1 --thinking and claude 2.1.302 --effort, as probed (BUILD.md); claude has no off or minimal."
},
{
"test": "packages/bus/tests/revoke-window.test.mjs",
"line": 4,
"text": "// a limit stub and a usage stub for the limit stop. BUILD.md (agents/morgana/work/queue-306) names"
},
{
"test": "packages/bus/tests/access-revoke.test.mjs",
"line": 5,
"text": "// lstat key; `edit` changes the document and the stamp together, as a hand edit does. BUILD.md"
},
{
"test": "packages/bus/tests/land.test.mjs",
"line": 410,
"text": "// landHeld still counts it, so it stays listed (BUILD.md follow-up 5)."
},
{
"test": "packages/bus/tests/session-clear.test.mjs",
"line": 13,
"text": "// docs/plans/2026-10-21_t1-sessions.md, the contract in agents/gizmoduck/work/queue-271/BUILD.md."
},
{
"test": "packages/bus/tests/grant-executor.test.mjs",
"line": 1027,
"text": "// credential-unavailable; BUILD.md records the difference)."
},
{
"test": "packages/bus/tests/host-run.test.mjs",
"line": 343,
"text": "// the options are checked here and the call runs with an alias no user file holds (BUILD.md)."
},
{
"test": "packages/business/tests/workflow-roles.test.mjs",
"line": 123,
"text": "// of staff launches it. The broker and launcher states are row 137's tests (BUILD.md, round 3)."
},
{
"test": "packages/business/tests/access.test.mjs",
"line": 1,
"text": "// FED R1 (#414, row 201): the access file loader and validator, DESIGN.md"
},
{
"test": "packages/cli/tests/revoke-window.test.mjs",
"line": 9,
"text": "// poll, with threadsState replaced by the caller. BUILD.md (agents/morgana/work/queue-306) names the"
},
{
"test": "packages/cli/tests/stack-instances.test.mjs",
"line": 3,
"text": "// T table: agents/darkwing/work/queue-190/DESIGN.md D7. The unit, port and release cases are T56 in"
},
{
"test": "packages/cli/tests/session-launch.test.mjs",
"line": 297,
"text": "// Q2 (BUILD.md:177-179, t1-sessions.md:109): an earlier host's sessionless run of the instance is"
},
{
"test": "packages/cli/tests/case1-accept.test.mjs",
"line": 2,
"text": "// (agents/darkwing/work/queue-195/DESIGN.md); deviations in agents/darkwing/work/queue-195/BUILD.md."
},
{
"test": "packages/cli/tests/stack-release.test.mjs",
"line": 4,
"text": "// agents/darkwing/work/queue-162/BUILD.md. Every run uses a temp data root, temp units and stand-in"
},
{
"test": "packages/cli/tests/stack-release.test.mjs",
"line": 915,
"text": "// COUNTED or dropped from it shows here. Row 181's BUILD.md names each writer."
},
{
"test": "packages/cli/tests/stack-release.test.mjs",
"line": 928,
"text": "task_comment_cursors:'no time column; a restore drops its advances uncounted (BUILD.md)',"
},
{
"test": "packages/cli/tests/stack-release.test.mjs",
"line": 1668,
"text": "// refusal is the guard for a file that changes after that (BUILD.md, round 2)."
},
{
"test": "packages/cli/tests/stack-release.test.mjs",
"line": 2331,
"text": "// agents/darkwing/work/queue-190/DESIGN.md. T-I1, T-I2, T-I5, T-I10 and the loader half of T-I7 are in"
},
{
"test": "packages/cli/tests/publish-socket.test.mjs",
"line": 236,
"text": "// sage-1440 on BUILD.md 14: a push between checkPublish and the git push refuses, with one code"
},
{
"test": "packages/cli/tests/stack-upgrade.test.mjs",
"line": 3,
"text": "// agents/darkwing/work/queue-195/DESIGN.md, as the I3 brief changes them; deviations:"
},
{
"test": "packages/cli/tests/stack-upgrade.test.mjs",
"line": 4,
"text": "// agents/darkwing/work/queue-233/BUILD.md. The stand-ins and the module fixture are"
},
{
"test": "packages/cli/tests/stack-release-external.test.mjs",
"line": 2,
"text": "// test list, agents/darkwing/work/queue-195/DESIGN.md; deviations: agents/darkwing/work/queue-232/BUILD.md."
},
{
"test": "packages/cli/tests/case1-hostcheck.test.mjs",
"line": 3,
"text": "// (agents/darkwing/work/queue-195/DESIGN.md at b7239bb66). Every case copies the script into a scratch"
},
{
"test": "packages/cli/tests/thread-revoke.test.mjs",
"line": 5,
"text": "// The bus half is packages/bus/tests/access-revoke.test.mjs; BUILD.md"
},
{
"test": "packages/cli/tests/access.test.mjs",
"line": 308,
"text": "// outside R5 (BUILD.md). The test pins it, and nothing is written."
},
{
"test": "packages/cli/tests/access.test.mjs",
"line": 316,
"text": "// Row 193c (#1705): `user add` and `user remove`. BUILD.md (agents/megavolt/work/queue-207) names"
},
{
"test": "packages/cli/tests/access.test.mjs",
"line": 455,
"text": "// refuses access.reload alone, as a bus would refuse a call it can't take. BUILD.md"
},
{
"test": "packages/cli/tests/launcher.test.mjs",
"line": 799,
"text": "// The run directory exists by then (BUILD.md residual); the persona is read before any bundle file."
},
{
"test": "packages/cli/tests/lifecycle.test.mjs",
"line": 778,
"text": "// N6 (sage-2246, DESIGN.md:118-120): an end signals the runs the verb named and the instance's runs"
}
],
"row266": {
"ref": "origin/fethry/row266",
"tip": "6418ec063389728e0d8883c94812b12d2074eb43",
"diffBase": "487500a16f4ab5902c318509fdec6acc56a543ca",
"overlap": []
},
"interpretation": "No literal SHA256 or Git-blob hash pins found for planned changed files. Editor provenance compares generated output to BUILD.json and requires regeneration/rebuild, not an external fixed hash.",
"postBuildAudit": {
"paths": [
"BUILD-LOG.md",
"agents/herb/work/queue-214/BUILD.md",
"agents/herb/work/queue-214/DESIGN.md",
"agents/herb/work/queue-214/EVIDENCE.json",
"agents/herb/work/queue-214/HASH-PINS.json",
"agents/herb/work/queue-214/MANIFEST.md",
"agents/herb/work/queue-214/SOURCE.json",
"agents/herb/work/queue-214/granted-4286/baseline-red.log",
"agents/herb/work/queue-214/granted-4286/build.log",
"agents/herb/work/queue-214/granted-4286/editor-browser-green.log",
"agents/herb/work/queue-214/granted-4286/editor-green.log",
"agents/herb/work/queue-214/granted-4286/final-sweep.json",
"agents/herb/work/queue-214/granted-4286/invalid-escaping-build.log",
"agents/herb/work/queue-214/granted-4286/invalid-escaping-red.log",
"agents/herb/work/queue-214/granted-4286/invalid-escaping-restore-build.log",
"agents/herb/work/queue-214/granted-4286/invalid-escaping-restore-green.log",
"agents/herb/work/queue-214/granted-4286/measurement.log",
"agents/herb/work/queue-214/granted-4286/mutants.json",
"agents/herb/work/queue-214/granted-4286/mutants.py",
"agents/herb/work/queue-214/granted-4286/npm-ci.log",
"agents/herb/work/queue-214/granted-4286/post-mutant-sweep.json",
"agents/herb/work/queue-214/granted-4286/provenance-green.log",
"agents/herb/work/queue-214/granted-4286/results.jsonl",
"agents/herb/work/queue-214/granted-4286/serializer-removal-build.log",
"agents/herb/work/queue-214/granted-4286/serializer-removal-red.log",
"agents/herb/work/queue-214/granted-4286/serializer-removal-restore-build.log",
"agents/herb/work/queue-214/granted-4286/serializer-removal-restore-green.log",
"agents/herb/work/queue-214/granted-4286/settings.json",
"agents/herb/work/queue-214/granted-4286/skips.json",
"agents/herb/work/queue-214/granted-4286/step.py",
"agents/herb/work/queue-214/granted-4286/webui-69.log",
"agents/herb/work/queue-214/granted-4286/webui-files.txt",
"agents/herb/work/queue-214/granted-4286/webui-whole.log",
"agents/herb/work/queue-214/granted-4286/wikilink-green.log",
"agents/herb/work/queue-214/measure.mjs",
"agents/herb/work/queue-214/measurement.json",
"packages/webui/editor/BUILD.json",
"packages/webui/editor/model.mjs",
"packages/webui/src/public/editor.js",
"packages/webui/tests/editor-wikilink.test.mjs",
"packages/webui/tests/helpers/wikilink-cases.mjs"
],
"literalCurrentOrPriorHashPins": [],
"buildOutputsValidated": true
}
}
-42
View File
@@ -1,42 +0,0 @@
# Row214 candidate manifest
Owner: Herb. Reviewer: Filbert. Issue#1715, C2-11a. Execution base
487500a16f4ab5902c318509fdec6acc56a543ca on herb/row214-r2. Current
brief blob85e6fe2e has the same C2-11a section as the accepted old pin.
Source commit a530a60798bf48eb18bb9e225d099faf5c2975cf.
| Path | Final change |
| --- | --- |
| packages/webui/editor/model.mjs | inert inline atom, heading content, tokenizer and validated serializer; invalid attrs share complete text escaping |
| packages/webui/tests/editor-wikilink.test.mjs | ten byte round-trips and three browser regressions, including same-block edits and malformed attrs |
| packages/webui/tests/helpers/wikilink-cases.mjs | exact fixtures shared with measurement |
| packages/webui/src/public/editor.js | generated with pinned esbuild0.28.2 |
| packages/webui/editor/BUILD.json | generated provenance and output hashes |
| BUILD-LOG.md | one append-only phase receipt |
| agents/herb/work/queue-214/measure.mjs | baseline measurement from pinned Git blobs |
| agents/herb/work/queue-214/measurement.json | unchanged measurement JSON,10/10 equal |
| agents/herb/work/queue-214/DESIGN.md | accepted design, both outcomes and static review follow-through |
| agents/herb/work/queue-214/BUILD.md | rulings, actual granted commands, timings and limits |
| agents/herb/work/queue-214/HASH-PINS.json | static hash-pin/row266 audit, repeated after build |
| agents/herb/work/queue-214/SOURCE.json | actual source/output hashes and unchanged CSS dependency |
| agents/herb/work/queue-214/EVIDENCE.json | grant, exact argv/counts, measurement, mutants, skips and sweeps |
| agents/herb/work/queue-214/granted-4286/ | raw tee logs, commands, file list and sweep/skip/mutant records |
The CSS output is byte-identical and matches BUILD.json. No entry/view,
third_party, dependency/lockfile, library, route, save, click or documentPath
change. No row266 chat path changes. No test assertion changed after runs.
Outcome A: all ten measured no-edit cases were already preserved by the
baseline's raw/sig behavior. Their green result is compatibility evidence,
not proof of the node. The baseline structural case was0/1 expected red.
Grant sage-4286: four whole editor files40/0; whole webui69 files455/0
in174.189s; zero skips/cancellations. Both named mutants killed0/1,
each restored/rebuilt and focused1/0 green. Absolute nice19, required-build
env and short scratch TMPDIR are in raw logs. Provenance rebuilt, not
skipped. Final process sweep0, TMPDIR removed. The mistaken seven-file
subset28/0 is archived but excluded from gate evidence.
The candidate hash manifest is rebuilt from the pushed tip outside its
own path set. Filbert's candidate review and every scripts/test-*.sh gate
remain pending. No Case1 acceptance test was run. The row is not done.
-49
View File
@@ -1,49 +0,0 @@
{
"base": "487500a16f4ab5902c318509fdec6acc56a543ca",
"status": "focused and 69-file webui green under sage-4286; candidate review and shell gate pending",
"sourcePaths": [
{
"path": "packages/webui/editor/model.mjs",
"mode": "100644",
"sha256": "81ac44d852cb54213a9644ebbde26630ec49614e468f376d71b471395e3dd9f7"
},
{
"path": "packages/webui/tests/editor-wikilink.test.mjs",
"mode": "100644",
"sha256": "e144e7dbf23c68c136eef8f0fb2e8979c27e908c7cc14ee4ab4f722220e67d77"
},
{
"path": "packages/webui/tests/helpers/wikilink-cases.mjs",
"mode": "100644",
"sha256": "afa4dc7188548457b2d1966b9437561ba411d7bc9aaaa38bff626c235a64e19c"
},
{
"path": "agents/herb/work/queue-214/measure.mjs",
"mode": "100644",
"sha256": "f81987cdae5c4f7e5ce353162674b3c3510e44f22d6d3beb262a5d198db4e88d"
},
{
"path": "packages/webui/src/public/editor.js",
"mode": "100644",
"sha256": "bd167899a551c70dc07e500fcdd1853d7fb710b23c217ba5b42daf5785c38a72"
},
{
"path": "packages/webui/editor/BUILD.json",
"mode": "100644",
"sha256": "4d73af728cea60eaa6fadb4650b9d42b663c90ef7f59bb2b787e1f3d9acd8278"
},
{
"path": "BUILD-LOG.md",
"mode": "100644",
"sha256": "30cc179e2b76c5aceeec35d5ab20339988241a4cb04d26d1cc9b2a5437796236"
}
],
"pendingGeneratedPaths": [],
"unchangedGeneratedCss": {
"path": "packages/webui/src/public/editor.css",
"sha256": "8654ac57d1e7a561110138ecd7f701c34a074017ff8c4cd2768d8083908ee61f",
"mode": "100644"
},
"runtimeEvidence": "agents/herb/work/queue-214/EVIDENCE.json",
"sourceCommit": "a530a60798bf48eb18bb9e225d099faf5c2975cf"
}
@@ -1,38 +0,0 @@
# grant sage-4286; nice 19; TMPDIR /mnt/storage/scratch/tmp/g49X; MOSAIC_REQUIRE_EDITOR_BUILD 1
✖ wikilinks are inline atoms and survive a neighbouring edit in every required context (932.607342ms)
ℹ tests 1
ℹ suites 0
ℹ pass 0
ℹ fail 1
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 1108.548729
✖ failing tests:
test at packages/webui/tests/editor-wikilink.test.mjs:35:1
✖ wikilinks are inline atoms and survive a neighbouring edit in every required context (932.607342ms)
AssertionError [ERR_ASSERTION]: plain
+ actual - expected
+ []
- [
- {
- atom: true,
- inline: true,
- source: '[[a]]'
- }
- ]
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2/packages/webui/tests/editor-wikilink.test.mjs:39:12)
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
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: [],
expected: [ { source: '[[a]]', atom: true, inline: true } ],
operator: 'deepStrictEqual',
diff: 'simple'
}
@@ -1,15 +0,0 @@
# grant sage-4286; nice 19; TMPDIR /mnt/storage/scratch/tmp/g49X; MOSAIC_REQUIRE_EDITOR_BUILD 1
▲ [WARNING] Ignoring this import because "third_party/editor/prosemirror-transform/src/mark.ts" was marked as having no side effects [ignored-bare-import]
third_party/editor/prosemirror-transform/src/index.ts:10:7:
10 │ import "./mark"
╵ ~~~~~~~~
"sideEffects" is false in the enclosing "package.json" file:
third_party/editor/prosemirror-transform/package.json:13:2:
13 │ "sideEffects": false,
╵ ~~~~~~~~~~~~~
editor.js bd167899a551c70dc07e500fcdd1853d7fb710b23c217ba5b42daf5785c38a72 (133 inputs)
editor.css 8654ac57d1e7a561110138ecd7f701c34a074017ff8c4cd2768d8083908ee61f
@@ -1,25 +0,0 @@
# grant sage-4286; nice 19; TMPDIR /mnt/storage/scratch/tmp/g49X; MOSAIC_REQUIRE_EDITOR_BUILD 1
✔ the Console's CSP stands and the editor runs under it; hostile markdown on the load path runs and loads nothing (928.130513ms)
✔ hostile content pasted into the editor runs and loads nothing, and a bad link target is refused in the link bar (803.464018ms)
✔ a pasted image span is kept only for a target the link gate accepts, and a save writes only those (635.018754ms)
✔ a switch of view reads nothing; a reload, and a trip away and back, each read the file exactly once (2555.185634ms)
✔ an edit rewrites only the block touched; a save sends the rest byte for byte; the Source view carries the draft (1077.608366ms)
✔ a file the editor cannot write back byte for byte opens as Source, says so, cannot save, and the Visual button works once it can (2053.81983ms)
✔ a link title pasted with line breaks in it is written on one line, so no HTML block comes of it (761.717564ms)
✔ an image alt pasted with line breaks in it is written on one line, so no HTML block comes of it (677.209658ms)
✔ an image title pasted with line breaks in it is written on one line, so no HTML block comes of it (681.501055ms)
✔ a code block info string pasted with line breaks in it is written on one line, so no HTML block comes of it (664.552078ms)
✔ a link title holding a quote after a backslash then a tag is written with the backslash escaped, so the title stays closed (653.763504ms)
✔ an image title holding a quote after a backslash then a tag is written with the backslash escaped, so the title stays closed (680.145608ms)
✔ a link title holding a trailing backslash is written with the backslash escaped, so the title stays closed (681.870693ms)
✔ an image title holding a trailing backslash is written with the backslash escaped, so the title stays closed (686.810545ms)
✔ a code block info string with a backtick, pasted, is dropped on Save, so the fence stays closed (631.067849ms)
✔ a code block info string with a backtick, as a tilde fence can have, is kept as source, not rewritten without it (631.071266ms)
ℹ tests 16
ℹ suites 0
ℹ pass 16
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 14945.374491
@@ -1,14 +0,0 @@
# grant sage-4286; nice 19; TMPDIR /mnt/storage/scratch/tmp/g49X; MOSAIC_REQUIRE_EDITOR_BUILD 1
✔ the editor routes serve the built files with their types and no cache (36.796766ms)
✔ open and save with no edit writes the same bytes: the goals review and a doc with every element (16.912796ms)
✔ open and save with no edit writes the same bytes: every repository doc under docs/ and spec/ (1791.779235ms)
✔ the editor source builds markup only with DOM calls, and the bundle has no eval (2.568423ms)
✔ the link gate and the image rule are the preview's (0.573105ms)
ℹ tests 5
ℹ suites 0
ℹ pass 5
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 2016.291596
@@ -1,5 +0,0 @@
{
"at": "2026-10-24T22:13:17.560692+00:00",
"count": 0,
"processes": []
}
@@ -1,15 +0,0 @@
# grant sage-4286; nice 19; TMPDIR /mnt/storage/scratch/tmp/g49X; MOSAIC_REQUIRE_EDITOR_BUILD 1
▲ [WARNING] Ignoring this import because "third_party/editor/prosemirror-transform/src/mark.ts" was marked as having no side effects [ignored-bare-import]
third_party/editor/prosemirror-transform/src/index.ts:10:7:
10 │ import "./mark"
╵ ~~~~~~~~
"sideEffects" is false in the enclosing "package.json" file:
third_party/editor/prosemirror-transform/package.json:13:2:
13 │ "sideEffects": false,
╵ ~~~~~~~~~~~~~
editor.js 52c00310b3c32b2f5ca99243f9bbe54f8a76ef0a87f597d8a2220cf1baaa8adc (133 inputs)
editor.css 8654ac57d1e7a561110138ecd7f701c34a074017ff8c4cd2768d8083908ee61f
@@ -1,30 +0,0 @@
# grant sage-4286; nice 19; TMPDIR /mnt/storage/scratch/tmp/g49X; MOSAIC_REQUIRE_EDITOR_BUILD 1
✖ wikilink DOM paste accepts only bounded single-line inert syntax; malformed attrs serialise as escaped text (780.97333ms)
ℹ tests 1
ℹ suites 0
ℹ pass 0
ℹ fail 1
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 939.392901
✖ failing tests:
test at packages/webui/tests/editor-wikilink.test.mjs:65:1
✖ wikilink DOM paste accepts only bounded single-line inert syntax; malformed attrs serialise as escaped text (780.97333ms)
AssertionError [ERR_ASSERTION]: The input was expected to not match the regular expression /(?<!\\)<img/. Input:
'\\[\\[a\\]\\] <img src=x onerror=alert(1)>&copy;\n'
at TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2/packages/webui/tests/editor-wikilink.test.mjs:78:10)
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
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: '\\[\\[a\\]\\] <img src=x onerror=alert(1)>&copy;\n',
expected: /(?<!\\)<img/,
operator: 'doesNotMatch',
diff: 'simple'
}
@@ -1,15 +0,0 @@
# grant sage-4286; nice 19; TMPDIR /mnt/storage/scratch/tmp/g49X; MOSAIC_REQUIRE_EDITOR_BUILD 1
▲ [WARNING] Ignoring this import because "third_party/editor/prosemirror-transform/src/mark.ts" was marked as having no side effects [ignored-bare-import]
third_party/editor/prosemirror-transform/src/index.ts:10:7:
10 │ import "./mark"
╵ ~~~~~~~~
"sideEffects" is false in the enclosing "package.json" file:
third_party/editor/prosemirror-transform/package.json:13:2:
13 │ "sideEffects": false,
╵ ~~~~~~~~~~~~~
editor.js bd167899a551c70dc07e500fcdd1853d7fb710b23c217ba5b42daf5785c38a72 (133 inputs)
editor.css 8654ac57d1e7a561110138ecd7f701c34a074017ff8c4cd2768d8083908ee61f
@@ -1,10 +0,0 @@
# grant sage-4286; nice 19; TMPDIR /mnt/storage/scratch/tmp/g49X; MOSAIC_REQUIRE_EDITOR_BUILD 1
✔ wikilink DOM paste accepts only bounded single-line inert syntax; malformed attrs serialise as escaped text (752.4905ms)
ℹ tests 1
ℹ suites 0
ℹ pass 1
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 941.178679
@@ -1,68 +0,0 @@
{
"base": "487500a16f4ab5902c318509fdec6acc56a543ca",
"bundleSha256": "9c881b13740fae2408717ad75fa1d85bfcfe3fa8b3af0f1b3f2e706c90e80fee",
"measuredAt": "2026-10-24T22:07:22.210Z",
"allEqual": true,
"results": [
{
"name": "plain",
"input": "[[a]]\n",
"output": "[[a]]\n",
"equal": true
},
{
"name": "labelled",
"input": "[[a|b]]\n",
"output": "[[a|b]]\n",
"equal": true
},
{
"name": "heading target",
"input": "[[a#h]]\n",
"output": "[[a#h]]\n",
"equal": true
},
{
"name": "list item",
"input": "- [[a]]\n",
"output": "- [[a]]\n",
"equal": true
},
{
"name": "next to front matter",
"input": "---\nrelated: \"[[metadata]]\"\n---\n\n[[a]]\n",
"output": "---\nrelated: \"[[metadata]]\"\n---\n\n[[a]]\n",
"equal": true
},
{
"name": "heading block and combined label",
"input": "# See [[a#h|Title]]\n",
"output": "# See [[a#h|Title]]\n",
"equal": true
},
{
"name": "spaces, Unicode and adjacent links",
"input": "See [[ Héllo there # A heading | a label ]][[next]]\n",
"output": "See [[ Héllo there # A heading | a label ]][[next]]\n",
"equal": true
},
{
"name": "reference-definition collision",
"input": "[[a]]\n\n[a]: u\n",
"output": "[[a]]\n\n[a]: u\n",
"equal": true
},
{
"name": "inside an ordinary link",
"input": "[x [[a]]](u)\n",
"output": "[x [[a]]](u)\n",
"equal": true
},
{
"name": "inert embed",
"input": "![[cover.png]]\n",
"output": "![[cover.png]]\n",
"equal": true
}
]
}
@@ -1,14 +0,0 @@
[
{
"name": "serializer-removal",
"killed": true,
"restored": true,
"restoredHashesEqual": true
},
{
"name": "invalid-escaping",
"killed": true,
"restored": true,
"restoredHashesEqual": true
}
]
@@ -1,26 +0,0 @@
from pathlib import Path
import subprocess,sys,json,hashlib
out=Path(__file__).parent;root=Path('/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2');model=root/'packages/webui/editor/model.mjs';good=model.read_bytes();(out/'model.good.mjs').write_bytes(good)
initial={str(p.relative_to(root)):hashlib.sha256(p.read_bytes()).hexdigest() for p in [model,root/'packages/webui/src/public/editor.js',root/'packages/webui/editor/BUILD.json',root/'packages/webui/src/public/editor.css']}
def step(name,cwd,cap,args):return subprocess.run([sys.executable,str(out/'step.py'),name,str(cwd),str(cap),*args]).returncode
specs=[('serializer-removal','wikilinks are inline atoms and survive'),('invalid-escaping','wikilink DOM paste accepts')]
results=[]
for name,pattern in specs:
changed=good.decode()
if name=='serializer-removal':
start=changed.index(' wikilink(state, node) {');end=changed.index(' raw_block(state, node)',start);changed=changed[:start]+changed[end:]
else:
old="else escapedText(state, oneLine(String(source ?? '')));";assert changed.count(old)==1;changed=changed.replace(old,"else state.text(oneLine(String(source ?? '')));")
try:
model.write_text(changed)
assert step(name+'-build',root/'packages/webui',90,['node','editor/build.mjs'])==0
rc=step(name+'-red',root,180,['node','--test','--test-concurrency=1','--test-name-pattern='+pattern,'packages/webui/tests/editor-wikilink.test.mjs'])
if rc!=1:raise RuntimeError('mutant not killed or timed out: '+str(rc))
finally:
model.write_bytes(good)
if step(name+'-restore-build',root/'packages/webui',90,['node','editor/build.mjs'])!=0:raise RuntimeError('restore build failed')
assert step(name+'-restore-green',root,180,['node','--test','--test-concurrency=1','--test-name-pattern='+pattern,'packages/webui/tests/editor-wikilink.test.mjs'])==0
for p,h in initial.items():assert hashlib.sha256((root/p).read_bytes()).hexdigest()==h,p
results.append({'name':name,'killed':True,'restored':True,'restoredHashesEqual':True})
(out/'mutants.json').write_text(json.dumps(results,indent=2)+'\n')
print('MUTANT_COMPLETE',name,flush=True)
@@ -1,3 +0,0 @@
# grant sage-4286; nice 19; TMPDIR /mnt/storage/scratch/tmp/g49X; MOSAIC_REQUIRE_EDITOR_BUILD 1
added 2 packages in 425ms
@@ -1,4 +0,0 @@
{
"count": 0,
"processes": []
}
@@ -1,27 +0,0 @@
# grant sage-4286; nice 19; TMPDIR /mnt/storage/scratch/tmp/g49X; MOSAIC_REQUIRE_EDITOR_BUILD 1
✔ the imported source is the tagged upstream source plus the recorded local changes, and nothing else (27.800323ms)
✔ every package names its origin and license, and NOTICE lists each (0.831005ms)
✔ the build reads only imported source and the editor's own files; the bundle is the recorded build (7.478515ms)
✔ MOSAIC_REQUIRE_EDITOR_BUILD: a missing or wrong esbuild skips without it and fails with it; a wrong binary always fails (6.189875ms)
✔ the toolchain check, run as a program, exits non-zero without esbuild when the build is required (143.672155ms)
▲ [WARNING] Ignoring this import because "third_party/editor/prosemirror-transform/src/mark.ts" was marked as having no side effects [ignored-bare-import]
third_party/editor/prosemirror-transform/src/index.ts:10:7:
10 │ import "./mark"
╵ ~~~~~~~~
"sideEffects" is false in the enclosing "package.json" file:
third_party/editor/prosemirror-transform/package.json:13:2:
13 │ "sideEffects": false,
╵ ~~~~~~~~~~~~~
✔ rebuilding from the source gives the same bytes (needs the pinned esbuild; MOSAIC_REQUIRE_EDITOR_BUILD=1 makes its absence a failure) (67.600627ms)
ℹ tests 6
ℹ suites 0
ℹ pass 6
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 305.965249
@@ -1,18 +0,0 @@
{"name": "measurement", "argv": ["node", "agents/herb/work/queue-214/measure.mjs"], "cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2", "rc": 0, "wallSeconds": 0.093, "counts": {}, "nice": 19, "tmpRoot": "/mnt/storage/scratch/tmp/g49X", "requireEditorBuild": "1", "timeoutSeconds": 60, "ended": "2026-10-24T22:07:22.215700+00:00"}
{"name": "baseline-red", "argv": ["node", "--test", "--test-concurrency=1", "--test-name-pattern=wikilinks are inline atoms and survive", "packages/webui/tests/editor-wikilink.test.mjs"], "cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2", "rc": 1, "wallSeconds": 1.151, "counts": {"tests": 1, "pass": 0, "fail": 1, "cancelled": 0, "skipped": 0}, "nice": 19, "tmpRoot": "/mnt/storage/scratch/tmp/g49X", "requireEditorBuild": "1", "timeoutSeconds": 180, "ended": "2026-10-24T22:07:27.998436+00:00"}
{"name": "npm-ci", "argv": ["npm", "ci", "--ignore-scripts", "--no-audit", "--no-fund"], "cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2/packages/webui", "rc": 0, "wallSeconds": 0.514, "counts": {}, "nice": 19, "tmpRoot": "/mnt/storage/scratch/tmp/g49X", "requireEditorBuild": "1", "timeoutSeconds": 240, "ended": "2026-10-24T22:07:41.534116+00:00"}
{"name": "build", "argv": ["node", "editor/build.mjs"], "cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2/packages/webui", "rc": 0, "wallSeconds": 0.108, "counts": {}, "nice": 19, "tmpRoot": "/mnt/storage/scratch/tmp/g49X", "requireEditorBuild": "1", "timeoutSeconds": 120, "ended": "2026-10-24T22:07:44.654385+00:00"}
{"name": "wikilink-green", "argv": ["node", "--test", "--test-concurrency=1", "packages/webui/tests/editor-wikilink.test.mjs"], "cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2", "rc": 0, "wallSeconds": 2.348, "counts": {"tests": 13, "pass": 13, "fail": 0, "cancelled": 0, "skipped": 0}, "nice": 19, "tmpRoot": "/mnt/storage/scratch/tmp/g49X", "requireEditorBuild": "1", "timeoutSeconds": 180, "ended": "2026-10-24T22:07:52.583345+00:00"}
{"name": "editor-green", "argv": ["node", "--test", "--test-concurrency=1", "packages/webui/tests/editor.test.mjs"], "cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2", "rc": 0, "wallSeconds": 2.053, "counts": {"tests": 5, "pass": 5, "fail": 0, "cancelled": 0, "skipped": 0}, "nice": 19, "tmpRoot": "/mnt/storage/scratch/tmp/g49X", "requireEditorBuild": "1", "timeoutSeconds": 240, "ended": "2026-10-24T22:07:59.286086+00:00"}
{"name": "editor-browser-green", "argv": ["node", "--test", "--test-concurrency=1", "packages/webui/tests/editor-browser.test.mjs"], "cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2", "rc": 0, "wallSeconds": 14.984, "counts": {"tests": 16, "pass": 16, "fail": 0, "cancelled": 0, "skipped": 0}, "nice": 19, "tmpRoot": "/mnt/storage/scratch/tmp/g49X", "requireEditorBuild": "1", "timeoutSeconds": 240, "ended": "2026-10-24T22:08:20.029050+00:00"}
{"name": "provenance-green", "argv": ["node", "--test", "--test-concurrency=1", "packages/webui/tests/editor-provenance.test.mjs"], "cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2", "rc": 0, "wallSeconds": 0.343, "counts": {"tests": 6, "pass": 6, "fail": 0, "cancelled": 0, "skipped": 0}, "nice": 19, "tmpRoot": "/mnt/storage/scratch/tmp/g49X", "requireEditorBuild": "1", "timeoutSeconds": 180, "ended": "2026-10-24T22:08:39.003420+00:00"}
{"name": "serializer-removal-build", "argv": ["node", "editor/build.mjs"], "cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2/packages/webui", "rc": 0, "wallSeconds": 0.093, "counts": {}, "nice": 19, "tmpRoot": "/mnt/storage/scratch/tmp/g49X", "requireEditorBuild": "1", "timeoutSeconds": 90, "ended": "2026-10-24T22:08:51.422097+00:00"}
{"name": "serializer-removal-red", "argv": ["node", "--test", "--test-concurrency=1", "--test-name-pattern=wikilinks are inline atoms and survive", "packages/webui/tests/editor-wikilink.test.mjs"], "cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2", "rc": 1, "wallSeconds": 0.887, "counts": {"tests": 1, "pass": 0, "fail": 1, "cancelled": 0, "skipped": 0}, "nice": 19, "tmpRoot": "/mnt/storage/scratch/tmp/g49X", "requireEditorBuild": "1", "timeoutSeconds": 180, "ended": "2026-10-24T22:08:52.340936+00:00"}
{"name": "serializer-removal-restore-build", "argv": ["node", "editor/build.mjs"], "cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2/packages/webui", "rc": 0, "wallSeconds": 0.115, "counts": {}, "nice": 19, "tmpRoot": "/mnt/storage/scratch/tmp/g49X", "requireEditorBuild": "1", "timeoutSeconds": 90, "ended": "2026-10-24T22:08:52.498613+00:00"}
{"name": "serializer-removal-restore-green", "argv": ["node", "--test", "--test-concurrency=1", "--test-name-pattern=wikilinks are inline atoms and survive", "packages/webui/tests/editor-wikilink.test.mjs"], "cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2", "rc": 0, "wallSeconds": 0.979, "counts": {"tests": 1, "pass": 1, "fail": 0, "cancelled": 0, "skipped": 0}, "nice": 19, "tmpRoot": "/mnt/storage/scratch/tmp/g49X", "requireEditorBuild": "1", "timeoutSeconds": 180, "ended": "2026-10-24T22:08:53.514962+00:00"}
{"name": "invalid-escaping-build", "argv": ["node", "editor/build.mjs"], "cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2/packages/webui", "rc": 0, "wallSeconds": 0.102, "counts": {}, "nice": 19, "tmpRoot": "/mnt/storage/scratch/tmp/g49X", "requireEditorBuild": "1", "timeoutSeconds": 90, "ended": "2026-10-24T22:08:53.655583+00:00"}
{"name": "invalid-escaping-red", "argv": ["node", "--test", "--test-concurrency=1", "--test-name-pattern=wikilink DOM paste accepts", "packages/webui/tests/editor-wikilink.test.mjs"], "cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2", "rc": 1, "wallSeconds": 0.979, "counts": {"tests": 1, "pass": 0, "fail": 1, "cancelled": 0, "skipped": 0}, "nice": 19, "tmpRoot": "/mnt/storage/scratch/tmp/g49X", "requireEditorBuild": "1", "timeoutSeconds": 180, "ended": "2026-10-24T22:08:54.668225+00:00"}
{"name": "invalid-escaping-restore-build", "argv": ["node", "editor/build.mjs"], "cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2/packages/webui", "rc": 0, "wallSeconds": 0.105, "counts": {}, "nice": 19, "tmpRoot": "/mnt/storage/scratch/tmp/g49X", "requireEditorBuild": "1", "timeoutSeconds": 90, "ended": "2026-10-24T22:08:54.809629+00:00"}
{"name": "invalid-escaping-restore-green", "argv": ["node", "--test", "--test-concurrency=1", "--test-name-pattern=wikilink DOM paste accepts", "packages/webui/tests/editor-wikilink.test.mjs"], "cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2", "rc": 0, "wallSeconds": 0.985, "counts": {"tests": 1, "pass": 1, "fail": 0, "cancelled": 0, "skipped": 0}, "nice": 19, "tmpRoot": "/mnt/storage/scratch/tmp/g49X", "requireEditorBuild": "1", "timeoutSeconds": 180, "ended": "2026-10-24T22:08:55.831793+00:00"}
{"name": "webui-whole", "argv": ["node", "--test", "--test-concurrency=2", "tests/agents-browser.test.mjs", "tests/agents.test.mjs", "tests/board-held.test.mjs", "tests/browser-edge.test.mjs", "tests/browser.test.mjs", "tests/bus-browser.test.mjs", "tests/bus.test.mjs"], "cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2/packages/webui", "rc": 0, "wallSeconds": 17.787, "counts": {"tests": 28, "pass": 28, "fail": 0, "cancelled": 0, "skipped": 0}, "nice": 19, "tmpRoot": "/mnt/storage/scratch/tmp/g49X", "requireEditorBuild": "1", "timeoutSeconds": 600, "ended": "2026-10-24T22:09:39.039897+00:00"}
{"name": "webui-69", "argv": ["node", "--test", "--test-concurrency=2", "tests/agents-browser.test.mjs", "tests/agents.test.mjs", "tests/assistant.test.mjs", "tests/board-held.test.mjs", "tests/browser-edge.test.mjs", "tests/browser.test.mjs", "tests/bus-browser.test.mjs", "tests/bus.test.mjs", "tests/channel-chat.test.mjs", "tests/chat-browser.test.mjs", "tests/chat-instances.test.mjs", "tests/chat-replies-browser.test.mjs", "tests/chat-sessions-access.test.mjs", "tests/chat.test.mjs", "tests/conversation.test.mjs", "tests/decide-browser.test.mjs", "tests/decide-sso.test.mjs", "tests/decision-http.test.mjs", "tests/discord.test.mjs", "tests/docs-browser.test.mjs", "tests/editor-browser.test.mjs", "tests/editor-provenance.test.mjs", "tests/editor-wikilink.test.mjs", "tests/editor.test.mjs", "tests/granted-user.test.mjs", "tests/history-return-flow.test.mjs", "tests/instances-browser.test.mjs", "tests/instances.test.mjs", "tests/library-cli.test.mjs", "tests/library-routes.test.mjs", "tests/library-status.test.mjs", "tests/limits-browser.test.mjs", "tests/limits-route.test.mjs", "tests/markdown-preview.test.mjs", "tests/messages.test.mjs", "tests/pinned-copy.test.mjs", "tests/preview.test.mjs", "tests/processing-browser.test.mjs", "tests/processing-ui.test.mjs", "tests/processing.test.mjs", "tests/project-file.test.mjs", "tests/project-name-repo.test.mjs", "tests/proof-cli.test.mjs", "tests/proof.test.mjs", "tests/reads.test.mjs", "tests/relaunch.test.mjs", "tests/return-flow.test.mjs", "tests/routes-browser.test.mjs", "tests/routes.test.mjs", "tests/send-browser.test.mjs", "tests/send.test.mjs", "tests/serve.test.mjs", "tests/service.test.mjs", "tests/settings-form.test.mjs", "tests/settings-write.test.mjs", "tests/shell.test.mjs", "tests/sso-browser.test.mjs", "tests/sso.test.mjs", "tests/tester-browser.test.mjs", "tests/tester-cli.test.mjs", "tests/tester-listener.test.mjs", "tests/tester-socket.test.mjs", "tests/thread-claims-browser.test.mjs", "tests/thread-claims.test.mjs", "tests/thread-sharing.test.mjs", "tests/usage-browser.test.mjs", "tests/usage.test.mjs", "tests/user-option-swap.test.mjs", "tests/views.test.mjs"], "cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2/packages/webui", "rc": 0, "wallSeconds": 174.189, "counts": {"tests": 455, "pass": 455, "fail": 0, "cancelled": 0, "skipped": 0}, "nice": 19, "tmpRoot": "/mnt/storage/scratch/tmp/g49X", "requireEditorBuild": "1", "timeoutSeconds": 600, "ended": "2026-10-24T22:12:48.880975+00:00"}
@@ -1,31 +0,0 @@
# grant sage-4286; nice 19; TMPDIR /mnt/storage/scratch/tmp/g49X; MOSAIC_REQUIRE_EDITOR_BUILD 1
✖ wikilinks are inline atoms and survive a neighbouring edit in every required context (698.378144ms)
ℹ tests 1
ℹ suites 0
ℹ pass 0
ℹ fail 1
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 850.87157
✖ failing tests:
test at packages/webui/tests/editor-wikilink.test.mjs:35:1
✖ wikilinks are inline atoms and survive a neighbouring edit in every required context (698.378144ms)
Error: Uncaught: Error: Token type `wikilink` not supported by Markdown renderer
at MarkdownSerializerState.render (http://127.0.0.1:43723/editor.js:18015:17)
at progress (http://127.0.0.1:43723/editor.js:18096:18)
at _Fragment.forEach (http://127.0.0.1:43723/editor.js:484:9)
at _Node.forEach (http://127.0.0.1:43723/editor.js:1178:20)
at MarkdownSerializerState.renderInline (http://127.0.0.1:43723/editor.js:18101:14)
at Object.paragraph (http://127.0.0.1:43723/editor.js:17859:13)
at MarkdownSerializerState.render (http://127.0.0.1:43723/editor.js:18012:35)
at http://127.0.0.1:43723/editor.js:18025:44
at _Fragment.forEach (http://127.0.0.1:43723/editor.js:484:9)
at _Node.forEach (http://127.0.0.1:43723/editor.js:1178:20)
at Object.evaluate (file:///home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2/packages/webui/tests/browser.mjs:49:35)
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
at async TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2/packages/webui/tests/editor-wikilink.test.mjs:38:5)
at async Test.run (node:internal/test_runner/test:1409:7)
at async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3)
@@ -1,15 +0,0 @@
# grant sage-4286; nice 19; TMPDIR /mnt/storage/scratch/tmp/g49X; MOSAIC_REQUIRE_EDITOR_BUILD 1
▲ [WARNING] Ignoring this import because "third_party/editor/prosemirror-transform/src/mark.ts" was marked as having no side effects [ignored-bare-import]
third_party/editor/prosemirror-transform/src/index.ts:10:7:
10 │ import "./mark"
╵ ~~~~~~~~
"sideEffects" is false in the enclosing "package.json" file:
third_party/editor/prosemirror-transform/package.json:13:2:
13 │ "sideEffects": false,
╵ ~~~~~~~~~~~~~
editor.js bd167899a551c70dc07e500fcdd1853d7fb710b23c217ba5b42daf5785c38a72 (133 inputs)
editor.css 8654ac57d1e7a561110138ecd7f701c34a074017ff8c4cd2768d8083908ee61f
@@ -1,10 +0,0 @@
# grant sage-4286; nice 19; TMPDIR /mnt/storage/scratch/tmp/g49X; MOSAIC_REQUIRE_EDITOR_BUILD 1
✔ wikilinks are inline atoms and survive a neighbouring edit in every required context (782.721982ms)
ℹ tests 1
ℹ suites 0
ℹ pass 1
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 940.955124
@@ -1,6 +0,0 @@
{
"root": "/home/jwoltje/.t3/worktrees/mosaic-stack/herb-row214-r2",
"tmp": "/mnt/storage/scratch/tmp/g49X",
"grant": "sage-4286",
"candidate": "2ec3f5b5ddab0cb5f2716f8164c25861b741213e"
}
@@ -1,4 +0,0 @@
{
"grep": "^# skip plus # SKIP and spec skipped-test lines",
"names": []
}
@@ -1,19 +0,0 @@
import os,sys,subprocess,pathlib,json,time,datetime,shlex,re
out=pathlib.Path(__file__).parent;s=json.loads((out/'settings.json').read_text());name=sys.argv[1];cwd=sys.argv[2];cap=int(sys.argv[3]);argv=sys.argv[4:]
left=datetime.datetime(2026,10,24,22,40,tzinfo=datetime.timezone.utc).timestamp()-time.time()-20
if left<15:raise SystemExit('hard-stop cleanup margin reached')
limit=min(cap,int(left));env=os.environ.copy();env.pop('NODE_TEST_CONTEXT',None)
env.update(TMPDIR=s['tmp'],TMP=s['tmp'],TEMP=s['tmp'],MOSAIC_REQUIRE_EDITOR_BUILD='1',MOSAIC_GATE_LANE='b',MOSAIC_GATE_STATE='/mnt/storage/scratch/mosaic-gate-lanes',NO_COLOR='1',MOSAIC_CONFIG=s['tmp']+'/missing-config.json',XDG_CACHE_HOME=s['tmp']+'/cache',JITI_FS_CACHE=s['tmp']+'/jiti')
header='' if name=='measurement' else 'printf "# grant sage-4286; nice %s; TMPDIR %s; MOSAIC_REQUIRE_EDITOR_BUILD %s\\n" "$(nice)" "$TMPDIR" "$MOSAIC_REQUIRE_EDITOR_BUILD"; '
inner=header+'exec "$@"'
log=out/(name+'.log');command='nice -n "$((19 - $(nice)))" timeout -k 10 '+str(limit)+' bash -c '+shlex.quote(inner)+' gate-run '+shlex.join(argv)+' 2>&1 | tee '+shlex.quote(str(log))
begin=time.time();print('START',name,datetime.datetime.now(datetime.timezone.utc).isoformat(),flush=True)
r=subprocess.run(['bash','-o','pipefail','-c',command],cwd=cwd,env=env,stdout=subprocess.DEVNULL)
text=log.read_text();counts={}
for key in ['tests','pass','fail','cancelled','skipped']:
hits=re.findall(r'^[ℹ#] '+key+r' (\d+)',text,re.M)
if hits:counts[key]=int(hits[-1])
record={'name':name,'argv':argv,'cwd':cwd,'rc':r.returncode,'wallSeconds':round(time.time()-begin,3),'counts':counts,'nice':19,'tmpRoot':s['tmp'],'requireEditorBuild':'1','timeoutSeconds':limit,'ended':datetime.datetime.now(datetime.timezone.utc).isoformat()}
with (out/'results.jsonl').open('a') as f:f.write(json.dumps(record)+'\n')
print(json.dumps(record),flush=True);print('\n'.join(text.splitlines()[-20:]),flush=True)
raise SystemExit(r.returncode)
@@ -1,489 +0,0 @@
# grant sage-4286; nice 19; TMPDIR /mnt/storage/scratch/tmp/g49X; MOSAIC_REQUIRE_EDITOR_BUILD 1
✔ row 194 T16 Settings Agents: unavailable read-only, launch follows its request, confirms, reason and refusal (17431.415001ms)
✔ row 256 T7 T8 the human page offers Delete on a creative instance, the tester page never does (1196.894618ms)
✔ row 194 T16: each agent action makes one call with only its keys, logs the user and answers the request (25.920868ms)
✔ row 194 T16: the boundary refuses before any bus call (13.773722ms)
✔ row 194 T16: read-only when send is off or no writer is wired; no route has a --send exception (6.006105ms)
✔ row 194 T16: a bus refusal names its reason and nothing changed; an unknown outcome or a bad shape is never retried (4.80649ms)
✔ row 194 T16: the request read takes one id, adds the refusal reason and refuses an unexpected shape (9.010999ms)
✔ row 194 T16: delete joins add and change on /api/instances with only revision, instance and op (4.535523ms)
✔ row 194 T16 D4.1: the tester listener launches, terminates and reads requests; regenerate, veto and delete are refused with no call (6.985924ms)
✔ row 194 N5: agents.js is served as JavaScript and index.html loads it once (2.138169ms)
✔ row 239 T6: a delete closed -revoked says the tokens may already be revoked, and outcome-unknown-revoked is an open outcome (3.807253ms)
✔ Q169 the signed-in human names a seat and stops the assistant, one bus call each, logged with the user (20.467126ms)
✔ Q169 the name and stop routes need send on, the public name, the user, the exact Origin and same-origin Fetch Metadata (10.75691ms)
✔ Q169 the name and stop routes take JSON within 4 KiB and only their own keys, all text (7.456ms)
✔ Row 167 a null body on the name and stop routes is 400 invalid-request with no write, and the next request is answered (4.218653ms)
✔ Q169 a bus refusal says nothing changed; a lost or odd answer says the change may have been made (6.353476ms)
✔ Q169 the names read is a bus read like the others (1.642206ms)
✔ the Board: held roles with no machine sessions, a claim with no address, the toggle kept across a reload, and Message addressed to the role (6930.836448ms)
✔ a Seen click while a Board read is in flight waits for that read, then posts (1178.550164ms)
✔ a redirect answer on a Board read, a bus read, a conversation read, a board POST, a module read and a send signs the page out: one line, nothing stale, no further reads (5341.444261ms)
✔ browser edge states: loading, empty, malformed, stale, hostile/long values, in-flight reply and appearance fallback (1618.401633ms)
Rendered contrast: {"failures":[],"count":330,"lowest":4.504658476260286}
✔ served Console browser: real board fixtures, keyboard, drafts, receipts, themes, 320px and failures (1723.682265ms)
✔ the README says a refused field table names the file or the key at fault, never a path (6.362709ms)
✔ S5 pages in a browser: real broker rows, inert text, Copy, routes, failures, layout and no writes (3554.138366ms)
✔ bus routes serve the four reads from the reader view, unescaped JSON for the page to escape (124.549917ms)
✔ decisions route serves the roles and recent lists from the reader view (46.444658ms)
✔ credentials route serves the broker credential status from the reader view (19.448846ms)
✔ replies route serves the replies to one message from the reader view (45.806351ms)
✔ bus routes are GET-only, have no write verb, and keep the same-origin checks (55.698955ms)
✔ bus refusals map to statuses and never carry a path or a stack (27.537764ms)
✔ humanCall speaks the human transport protocol without blocking the server (1707.350793ms)
✔ busReader takes --business, else the live bus host, else refuses (257.530467ms)
✔ humanCall kills a transport that runs past its timeout (529.025642ms)
✔ serve refuses a --business value that is not a business id (463.414608ms)
✔ WebUI channel off returns 503 and named recovery for every chat route without a chat operation (38.716248ms)
✔ WebUI only selection keeps web chat enabled while retaining the old read envelope (2.635502ms)
✔ WebUI channel-disabled recovery text is fixed and never echoes transport text (1.545115ms)
✔ chat browser: list/create named projects and threads, hostile labels inert and no implicit writes (836.234777ms)
✔ chat browser: thread drafts, receipts and cursor history stay isolated; refresh never writes (1150.355116ms)
✔ chat browser: uncertain writes retain draft, ownership refusal clears it, read-only cannot send (1316.24955ms)
✔ chat browser: a late read from A cannot paint B; sign-out clears private state and stops reads (1284.31592ms)
✔ chat browser: page forward and deduplicate replies; pending and byte-limit submissions do not duplicate (953.60414ms)
✔ chat browser: scrolled history stays put, New messages and an own send return to the tail (923.155974ms)
✔ chat browser: automatic polling follows a reply without a POST or a lost draft (10953.35212ms)
✔ chat browser: display stays bounded while every forward page remains reachable (1095.68322ms)
✔ chat browser: a confirmed visible message replaces its pending receipt; malformed receipts stay unknown (963.350843ms)
✔ chat browser: a refusal elsewhere forgets private chat drafts (882.872916ms)
✔ chat browser: a late project creation receipt cannot navigate away from another thread (1050.661257ms)
✔ C2-09a picker: no silent choice, duplicate hostile labels stay inert, selection survives refresh and reaches POST (1062.688519ms)
✔ C2-09a picker: metadata failure, empty set and removed pick explain disabled state and recover without switching (924.988913ms)
✔ C2-09a picker: a single instance is chosen explicitly but read-only mode cannot create a thread (781.216726ms)
✔ 264e chooser: two sessions keep drafts, cursors, deep links and counts independent (921.256121ms)
✔ 264e clear confirmation and status never resend, force-stop or change selection (1103.840292ms)
✔ 264e new session keeps its operation key after an unknown response and uses no implicit open (1124.509192ms)
✔ 264e cancel shows before/after retirement and never starts or replays work (1599.216909ms)
✔ 272 B1: a bad-session deep link preserves the draft and lost clear operation on A (1281.091753ms)
✔ C2-09a metadata uses the human listener bus, projects labels only and refuses unauthenticated reads (23.460794ms)
✔ C2-09a metadata uses the private tester listener own bus and no human transport (5.122028ms)
✔ C2-09a metadata refuses missing or malformed reads and never echoes untrusted fields (5.504868ms)
✔ C2-09a metadata stays behind the SSO session check and a GET never refreshes session activity (4.184632ms)
✔ chat replies: free text, cites with badges, the agent label, changed since and safe links (898.153564ms)
✔ chat replies: a write notice reads as its line with a Revert; a refused revert shows its code (1170.744713ms)
✔ chat replies: a read-only Console shows the notice with Revert disabled (850.32112ms)
✔ chat status line: served commit and age, divergence, fetch error and the problems one click away (897.997997ms)
✔ chat status line: limits when the status carries them, no problems, and refusals (1133.380317ms)
✔ chat status line: a project with no repository link reads no library status (854.88335ms)
✔ chat status line: unreadable reply limits show their problem and both fallback keys (882.924328ms)
✔ chat replies: unchanged file at a different library commit and incomplete checks stay unmarked (768.120005ms)
✔ chat status line: an invalid library mapping remains visible for diagnosis (737.619858ms)
✔ chat replies: a checked notice-shaped agent message is plain text with no Revert (725.56059ms)
✔ chat replies: owner-only without a sent field is a definite Revert refusal (811.129366ms)
✔ 272 fallback: granted legacy route keeps default history, send and open without session controls (715.832685ms)
✔ 272 fallback guard: granted explicit-session route refuses without default history or writes (631.667619ms)
✔ 272 fallback guard: human-required catalog failure never enables default-thread access (663.54337ms)
✔ 272 fallback guard: timeout catalog failure never enables default-thread access (537.528495ms)
✔ 272 fallback guard: no-bus-host catalog failure never enables default-thread access (622.030953ms)
✔ 272 fallback guard: malformed catalog failure never enables default-thread access (624.379398ms)
✔ 272 fallback guard: owner route retains chooser and explicit default-session addressing (635.748276ms)
✔ chat reads map only fixed verbs, strict forward paging and pure GET (40.110234ms)
✔ chat refuses malformed and repeated query/id values before transport (7.000459ms)
✔ chat project.create: one verified write, fixed identity/class and private log (2.986922ms)
✔ chat project.create: each existing Console write fence makes zero bus calls (8.933369ms)
✔ chat project.create: refusal or lost/malformed receipt never retries or invents success (5.056788ms)
✔ chat thread.create: one verified write, fixed identity/class and private log (1.581993ms)
✔ chat thread.create: each existing Console write fence makes zero bus calls (8.197701ms)
✔ chat thread.create: refusal or lost/malformed receipt never retries or invents success (3.965463ms)
✔ chat thread.send: one verified write, fixed identity/class and private log (1.353806ms)
✔ chat thread.send: each existing Console write fence makes zero bus calls (6.740756ms)
✔ chat thread.send: refusal or lost/malformed receipt never retries or invents success (4.970022ms)
✔ chat thread.open: one verified write, fixed identity/class and private log (1.438093ms)
✔ chat thread.open: each existing Console write fence makes zero bus calls (6.978012ms)
✔ chat thread.open: refusal or lost/malformed receipt never retries or invents success (3.64445ms)
✔ chat createThread receipt requires an instance even when its id is valid (2.535217ms)
✔ chat write receipts expose only the fields belonging to their operation (3.886809ms)
✔ chat validates names, body, project and strict empty open payload (5.948932ms)
✔ chat read failures redact ownership and refuse invalid transport arrays (7.572799ms)
✔ REQ-USER-2 real broker: owned catalog, create/name/filter, isolated history and 403/404 without mutations (108.639676ms)
✔ chat repeats every POST boundary even when called behind an admitted request (1.210711ms)
✔ configured Console process injects chat through its existing human transport (201.842342ms)
✔ chat assets, GET purity, method and unknown-route refusals are explicit (15.908528ms)
✔ the chat seam names the transport it is given: the human one and the tester one both pass, anything else is a TypeError (0.594861ms)
✔ C2-09a createThread forwards an explicit instance through the existing channel (4.877049ms)
✔ C2-09a malformed instance and extra thread fields refuse before the channel write (4.621594ms)
✔ 264e session catalog/create and explicit selectors keep the human transport and strict keys (6.446ms)
✔ 264e session writes retain Origin/identity fences and explicit selector errors (3.221617ms)
✔ 264e clear envelope is projected, pending is preserved and GET never repeats the clear (5.920053ms)
✔ 264e cancel is an authenticated, confirmed human write and retains retirement distinction (7.831208ms)
✔ 272 N1: malformed clear/cancel write receipts get one redacted outcome-unknown audit line (5.831884ms)
✔ conversation view: full history, collapsed tools, hidden thinking, inert hostile content, malformed and reconcile markers (1306.1032ms)
✔ conversation view: a fork keeps the open branch, says so, and opens the new one on request (1836.119679ms)
✔ conversation view: a newer session with no readable history keeps the marker (1285.484193ms)
✔ conversation view: seats without history say so and offer no reply (1047.035848ms)
✔ J16: no controls without sso and decide, read-only reasons, terminal lines kept, and only an eligible grant gets the panel (5771.215266ms)
✔ J17: one POST per click, confirm then answer, cancel, refusals and an unknown outcome never retry (5272.178631ms)
✔ a sign-in redirect at either step signs the page out and answers nothing (1989.670657ms)
✔ a signed-in owner confirms and answers, with the session's provider, issuer and sub as the subject (213.942672ms)
✔ the listener gates: no session, a cross-origin page, a loopback Host, a GET, and a sign-out between the steps (77.826712ms)
✔ J16: without a decision transport the routes are read-only and /api/config says no; startServer refuses decide without sso or send (481.428976ms)
✔ J19: a granted user's session gets decide false and the user page config, and a decision POST stops at owner-only (54.985489ms)
✔ N4: decision.resolve has no Console route, the --send caller names no decision verb, and consoleCall takes only the two console verbs (80.240021ms)
✔ a confirmation then a resolve answers once with the held choice and digest, and a second resolve refuses (3.814984ms)
✔ deny resolves without a grant field (0.482281ms)
✔ the gates before the body: method, read-only, sign-in and same origin (0.49765ms)
✔ a bad body, id or content type refuses before the bus (0.762162ms)
✔ a choice that is neither key is decision-stale, and a malformed preview is confirmation-unavailable (0.681931ms)
✔ bus refusals map by code, and an unknown or missing code is unavailable at preview and outcome-unknown at resolve (2.862415ms)
✔ a confirmation binds the session, decision and choice, and any mismatch spends it (0.81855ms)
✔ a session that ends between the steps refuses before the bus (0.438239ms)
✔ confirmations expire after the TTL, cap at the limit without dropping a live one, and are one use (0.323839ms)
✔ Discord row through real board/WebUI: independent brake/liveness, no Reply, literal content (1065.529279ms)
✔ the editor: the list, hostile markdown that runs nothing, the draft, and each save receipt (2140.805191ms)
✔ the Console's CSP stands and the editor runs under it; hostile markdown on the load path runs and loads nothing (1354.955091ms)
✔ hostile content pasted into the editor runs and loads nothing, and a bad link target is refused in the link bar (1547.923208ms)
✔ a pasted image span is kept only for a target the link gate accepts, and a save writes only those (1266.979424ms)
✔ a switch of view reads nothing; a reload, and a trip away and back, each read the file exactly once (2940.297024ms)
✔ an edit rewrites only the block touched; a save sends the rest byte for byte; the Source view carries the draft (1214.212642ms)
✔ a file the editor cannot write back byte for byte opens as Source, says so, cannot save, and the Visual button works once it can (2204.177601ms)
✔ a link title pasted with line breaks in it is written on one line, so no HTML block comes of it (954.989036ms)
✔ an image alt pasted with line breaks in it is written on one line, so no HTML block comes of it (876.671026ms)
✔ an image title pasted with line breaks in it is written on one line, so no HTML block comes of it (876.342459ms)
✔ a code block info string pasted with line breaks in it is written on one line, so no HTML block comes of it (851.548483ms)
✔ a link title holding a quote after a backslash then a tag is written with the backslash escaped, so the title stays closed (973.526659ms)
✔ an image title holding a quote after a backslash then a tag is written with the backslash escaped, so the title stays closed (730.164235ms)
✔ a link title holding a trailing backslash is written with the backslash escaped, so the title stays closed (705.431094ms)
✔ an image title holding a trailing backslash is written with the backslash escaped, so the title stays closed (716.592245ms)
✔ a code block info string with a backtick, pasted, is dropped on Save, so the fence stays closed (764.08523ms)
✔ a code block info string with a backtick, as a tilde fence can have, is kept as source, not rewritten without it (846.538059ms)
✔ the imported source is the tagged upstream source plus the recorded local changes, and nothing else (26.175796ms)
✔ every package names its origin and license, and NOTICE lists each (1.097644ms)
✔ the build reads only imported source and the editor's own files; the bundle is the recorded build (8.957963ms)
✔ MOSAIC_REQUIRE_EDITOR_BUILD: a missing or wrong esbuild skips without it and fails with it; a wrong binary always fails (7.544758ms)
✔ the toolchain check, run as a program, exits non-zero without esbuild when the build is required (302.664165ms)
▲ [WARNING] Ignoring this import because "third_party/editor/prosemirror-transform/src/mark.ts" was marked as having no side effects [ignored-bare-import]
third_party/editor/prosemirror-transform/src/index.ts:10:7:
10 │ import "./mark"
╵ ~~~~~~~~
"sideEffects" is false in the enclosing "package.json" file:
third_party/editor/prosemirror-transform/package.json:13:2:
13 │ "sideEffects": false,
╵ ~~~~~~~~~~~~~
✔ rebuilding from the source gives the same bytes (needs the pinned esbuild; MOSAIC_REQUIRE_EDITOR_BUILD=1 makes its absence a failure) (172.641917ms)
✔ wikilink round-trip: plain (9.175577ms)
✔ wikilink round-trip: labelled (1.129295ms)
✔ wikilink round-trip: heading target (1.25613ms)
✔ wikilink round-trip: list item (1.645832ms)
✔ wikilink round-trip: next to front matter (1.202128ms)
✔ wikilink round-trip: heading block and combined label (1.18696ms)
✔ wikilink round-trip: spaces, Unicode and adjacent links (2.377579ms)
✔ wikilink round-trip: reference-definition collision (2.902031ms)
✔ wikilink round-trip: inside an ordinary link (4.241793ms)
✔ wikilink round-trip: inert embed (0.63341ms)
✔ wikilinks are inline atoms and survive a neighbouring edit in every required context (1556.425084ms)
✔ code, escaped openers, malformed syntax and HTML-like targets stay outside wikilink atoms (1452.825353ms)
✔ wikilink DOM paste accepts only bounded single-line inert syntax; malformed attrs serialise as escaped text (1000.711061ms)
✔ the editor routes serve the built files with their types and no cache (46.893995ms)
✔ open and save with no edit writes the same bytes: the goals review and a doc with every element (21.572081ms)
✔ open and save with no edit writes the same bytes: every repository doc under docs/ and spec/ (2160.196477ms)
✔ the editor source builds markup only with DOM calls, and the bundle has no eval (4.311024ms)
✔ the link gate and the image rule are the preview's (1.175245ms)
✔ R6 G1 a granted user signs in, gets the user page and reaches the broker as itself (172.773172ms)
▶ R6 G2 a subject with no live grant in this business is refused subject-unknown
✔ a listed user with no grant (92.602053ms)
✔ a grant in another business (104.491345ms)
✔ an expired grant (114.256083ms)
✔ another user's grant (55.98006ms)
✔ a sub in no file (64.883816ms)
✔ a file the loader refuses (90.210241ms)
✔ R6 G2 a subject with no live grant in this business is refused subject-unknown (523.697455ms)
▶ R6 G3 a revoke counts on the next request: 401 and the session is gone
✔ grant removed (62.972504ms)
✔ subject removed (93.888865ms)
✔ grant expired (106.472694ms)
✔ file now refused (112.582013ms)
✔ R6 G3 a revoke counts on the next request: 401 and the session is gone (377.178827ms)
✔ R6 G4 every owner route answers 403 owner-only before any bus call (127.865636ms)
✔ R6 G5 the bus refuses every owner verb over the user transport on its own (123.119351ms)
✔ R6 G9 a user chat sends only the plugins read over the owner transport (130.557956ms)
✔ R6 G6 the user page holds the notice word for word (75.808533ms)
✔ R6 G7 the hub label and plain peer links render from config on both pages (984.121102ms)
✔ R6 G8 userCall spawns user-cli directly with the user nonce, no human nonce, and the user request (51.702992ms)
✔ return flow through the conversation view: send, tool call, delayed result, peer message, exact long answers, relaunch (52842.755773ms)
✔ row 165 Settings: role instances read, add with a restart named, change without one, a refusal keeps the draft (2069.883646ms)
✔ row 165 Console: the signed-in human adds an instance through a real broker; validate exits 0, the log names the human and no restart is needed (row 194) (261.303304ms)
✔ row 165 Console: the instance write needs send on, the public name, the user, the exact Origin and same-origin Fetch Metadata (10.054646ms)
✔ row 165 Console: the instance write takes JSON within 16 KiB and only its own keys; holder, credentials and an actor are refused (9.747938ms)
✔ row 165 Console: a bus refusal says nothing changed; a lost or odd answer says the change may have been made (15.879235ms)
✔ row 165 Console: the instances read takes no arguments, needs a bus and refuses an answer without a revision (6.37516ms)
✔ C2-04 CLI: both listener callback pairs dispatch library verbs with their own transport (208.823243ms)
✔ a signed-in same-origin revert reaches exactly one library.revert and returns the new commit (25.090439ms)
✔ a revert needs send, the named Host, the user, the exact Origin and same-origin Fetch Metadata (8.67138ms)
✔ a revert takes a project and a 40-hex commit, nothing else, before the bus is asked (7.475126ms)
✔ a bus refusal is reported as not reverted with its code; before C2-02 that is the verb refusal (9.725112ms)
✔ a revert whose answer is lost or unusable is reported unknown and is never retried (7.701918ms)
✔ the status read takes one project query and answers the bus result for that project (4.432751ms)
✔ a status answer for another project or of the wrong shape is refused; a refusal keeps its status (9.479692ms)
✔ the status read needs no send; a read-only Console still has no revert (2.316938ms)
✔ library routes are the owner's: a granted user is refused them, and the tester never reverts (0.874467ms)
✔ the page gets the one library renderer, byte for byte, as a JavaScript module (1.946831ms)
✔ a revert receipt for another project is unknown and is never retried (1.698516ms)
✔ a granted-user HTTP session cannot reach owner library callbacks (2.11729ms)
✔ a configured revert callback remains unreachable when send is off (1.619535ms)
✔ row 254: each library sync code maps to its status (0.875525ms)
✔ REQ-LIMIT-3 REQ-LIMIT-4 Settings shows token limits counted, not enforced and check failed; Reset posts one path; a save keeps the token limits (1283.613274ms)
✔ Row 167 with an assistant draft open, a token limit reset gives the assistant submit its revision (951.959609ms)
✔ REQ-LIMIT-3 limits read returns only the token rows; no query or write is accepted (36.003397ms)
✔ REQ-LIMIT-3 a limits answer without a token list is refused, not shown as no limits (11.374745ms)
2026-10-24T22:11:16.186Z settings user="jason" changed
✔ REQ-LIMIT-3 a Settings reset reaches the human write with its paths; a reset alone is enough (7.465903ms)
✔ REQ-LIMIT-3 the Console reader asks the bus limits verb with no arguments (0.460687ms)
✔ the preview source names none of the four string-to-markup sinks (1.2239ms)
✔ headings, paragraphs, emphasis and inline code render (1.52146ms)
✔ lists, block quotes and code blocks render (0.569678ms)
✔ a link is made for http, https and relative targets, with rel and the target shown (1.167267ms)
✔ a link with any other scheme, or an evasion of the scheme, stays source text (1.071465ms)
✔ an image shows alt text and URL, is never an img element and never loads (0.176798ms)
✔ raw HTML, entities and unsupported blocks show as source text, never as elements (0.390592ms)
✔ markup inside code and inside link text stays text (0.199256ms)
✔ hostile and pathological input stays within its look-ahead budget and under the nesting cap (48.760884ms)
✔ trailing blanks and closing hashes are cut by a walk from the end, not a regex that retries inside a blank run (35.531804ms)
✔ a link opener with no closer searches at most SPAN characters ahead (188.875275ms)
✔ the look-ahead work of one render is a fixed multiple of the text, whatever the opener (848.275978ms)
✔ past the budget an opener is source text, through the path all other text takes (17.235886ms)
✔ a normal 200 KiB document renders exactly as it did without a budget, and spends little of it (25.044171ms)
✔ a line separator inside a heading, a list item or a fence line does not end the marker line (0.595681ms)
✔ a thematic-break line is a paragraph, every other marker line opens a list (0.433323ms)
✔ every short line over space, tab, - * _ and a letter is a break exactly when the old regex said so (48.393695ms)
✔ one line of marks does not throw, at 4 MiB, whatever the mark or the spacing (7867.726504ms)
✔ CRLF and tabs are read like LF and spaces; empty input renders nothing (0.182135ms)
✔ messages HTTP read pages and preserves metadata; bad arguments refuse before a read; other reads unchanged (114.721485ms)
✔ Console Messages lists late unsolicited messages on polling with sender class time read state and trail; nav count includes beyond the page; reads never deliver (1227.204744ms)
✔ Messages nav count polls on Tasks and Board and clears on a Board refusal; messages 403 refuses local pages (2003.078514ms)
✔ copy writes the Console paths at the full id, read-only, and leaves an existing copy alone (1488.436066ms)
✔ copy refuses a commit off refactor, an unknown one, a worktree and a bad copies directory (1597.975802ms)
✔ copy writes nothing when an archived path is missing at the commit (579.510216ms)
✔ a copy that loses the rename race leaves no read-only temp directory behind (673.135629ms)
✔ a copy whose rename fails with no target refuses, writes no copy and leaves no temp directory (710.289827ms)
✔ a copy that meets a target holding files says exists: and moves nothing into it (732.806597ms)
✔ a copy that meets an empty target directory replaces it by rename, not by moving into it (612.835517ms)
✔ serve runs from a copy: /healthz 200, the config check, roles and RELEASE from the copy, the queue from --checkout (1149.224132ms)
✔ serve refuses a --checkout that is not an absolute directory path (375.216061ms)
✔ consoleReads runs the queue read under queueRoot and reads RELEASE under root (69.061909ms)
✔ preview options are all three or none, and each is checked (11.596651ms)
✔ the CLI refuses a partial or invalid preview flag set at start (945.562554ms)
✔ the CLI with all three flags serves the preview mode (193.560054ms)
✔ a request for the public name needs the header equal to the user id, else 401 and nothing read (21.565508ms)
✔ the header name matches without regard to case, and the value compare is exact (3.95808ms)
✔ the public name with the header reads the bus views, and the Host and Origin are checked first (33.216972ms)
✔ in preview mode every write answers 403 read-only, from the public name and loopback, and reaches nothing (13.946391ms)
✔ loopback requests are unchanged in preview mode, and the bus views work with the board down (21.317768ms)
✔ a proxy that rewrites Host to the loopback port gets 403 on its first request, whatever the user (20.422653ms)
✔ a repeated Host is 400 before any other check, in preview mode and without it (11.215391ms)
✔ without the preview flags the public name is refused and writes still reach the board (5.587922ms)
✔ processing browser: keyboard Stop, confirmed Resume, unknown outcome and persistent banner (718.01676ms)
✔ processing browser: Q175 read-only interim keeps both writes disabled and names CLI recovery at 320px (695.148762ms)
✔ processing browser: sign-out from config redirect blocks later refresh and writes (824.165228ms)
✔ processing browser: sign-out from state redirect blocks later refresh and writes (860.253673ms)
✔ processing browser: sign-out from write redirect blocks later refresh and writes (806.441355ms)
✔ processing browser: sign-out from config sign-in required blocks later refresh and writes (864.004948ms)
✔ processing browser: sign-out from state sign-in required blocks later refresh and writes (886.919472ms)
✔ processing browser: sign-out from write sign-in required blocks later refresh and writes (960.067268ms)
ROW191_LAYOUT {"width":400,"height":1000,"controls":97,"tree":324.0625,"main":1450.703125,"top":181.5,"bottom":217.5,"barBottom":129,"projectsTop":352.59375,"order":"0","visible":true}
ROW191_LAYOUT {"width":1440,"height":1000,"controls":127,"tree":914,"main":914,"top":135.5,"bottom":171.5,"barBottom":53,"projectsTop":636.59375,"order":"0","visible":true}
ROW191_LAYOUT {"width":1440,"height":420,"controls":127,"tree":334,"main":907.734375,"top":135.5,"bottom":171.5,"barBottom":53,"projectsTop":636.59375,"order":"0","visible":true}
ROW191_LAYOUT {"width":800,"height":420,"controls":127,"tree":334,"main":1131.65625,"top":135.5,"bottom":171.5,"barBottom":53,"projectsTop":618.59375,"order":"0","visible":true}
✔ processing browser: static nav controls keep Stop visible, ordered and keyboard reachable (764.42746ms)
✔ interim read-only controls show CLI recovery, disable both writes and retain a halted banner across views (8.191348ms)
✔ Stop sends one empty halt and Resume confirms before sending the displayed generation (2.947603ms)
✔ a cancelled resume never calls the writer (1.219134ms)
✔ unknown writes are not retried or displayed as success and partial stops remain explicit (2.112188ms)
✔ the persistent shell loads the control outside route-specific content with accessible status and native buttons (0.471441ms)
✔ read-only Console can read processing state but neither human control writes without --send (23.636966ms)
✔ Console halt and generation-bound resume use only the management writer and keep partial stops honest (4.923203ms)
✔ processing write fences refuse cross-site, wrong origin, unnamed host, duplicate identity and bad payload before writer (7.499038ms)
✔ tester cannot invoke either control writer and failures never echo backend text (5.000005ms)
✔ processing writes use the existing SSO signer and still require --send and same-origin (5.29471ms)
✔ processing handler independently refuses wrong origin and cross-site before its writer (0.741847ms)
✔ a signed-in same-origin save reaches exactly one human operation and returns the new commit (22.355345ms)
✔ a save needs send, the named Host, the user, the exact Origin and same-origin Fetch Metadata (8.492884ms)
✔ a save validates JSON, strict keys, text values and the 1 MiB body before the bus is asked (19.453599ms)
✔ a body that is JSON but not an object is refused 400, not thrown on (5.777613ms)
✔ the 1 MiB limit is this route only; Settings and messages keep 16 KiB (2.581226ms)
✔ a bus refusal is reported as not saved with its own status; stale-base tells the user to reload (6.148622ms)
✔ a save whose answer is lost or unusable is reported unknown and is never retried (3.873987ms)
✔ the file list and one file read take strict queries and arrive in the expected shape (4.947705ms)
✔ reads work without --send; an unusable bus answer is a bad response, a refusal keeps its status (3.061043ms)
✔ /api/config says edit only where a save can pass (2.093648ms)
✔ a repository-name project refusal is an HTTP conflict (0.589542ms)
✔ proof startup refuses partial flags non-preview and invalid fixture file metadata or bytes (1372.358151ms)
✔ serve argv carries only fixture proof path and header; startup explicitly reports proof on or off (296.532456ms)
✔ CLI applies proof on the main listener and rejects that header on its tester listener (281.757503ms)
✔ proxy proof admits named reads and sends, reads its fixture once, and never exposes the value (34.129527ms)
✔ proxy proof refuses missing wrong short or repeated proof before auth and before any read (10.977149ms)
✔ proxy proof header is refused on other Hosts and on the tester listener (5.374102ms)
✔ proof options reject unsafe or colliding header names without disclosing file contents (0.797857ms)
✔ redactor: config, dataRoot, any absolute path, Discord ids and the JSON parser quote (1.703483ms)
✔ credential state from the date alone, as the bus states it (0.208011ms)
✔ queue: rows, one row, ids and methods, notes; no path or id from a row (414.58832ms)
✔ queue: a refused read fails closed with the store's text, redacted (210.374206ms)
✔ queue: a store that fails to load, or a child that dies, gives a fixed message with no path or stack (858.43953ms)
✔ business: names, vars on the allowlist, authority, credential metadata only (17.500331ms)
✔ business: missing or invalid file refuses with the module's text, redacted (8.383354ms)
✔ business without --business: the live bus host, else no-bus-host; no system config: not-configured (8.244873ms)
✔ settings: release, board, loopback address, notifier binding name only (129.222379ms)
✔ task fields: the committed table with no reads configured, GET only; a bad table refuses with no path (18.325509ms)
✔ bus-status: a refused boot shows reason, file and last good load; a live host or an ok boot clears it (8.620563ms)
✔ both presentations replace old activity with relaunch notice, label retained history, then resume after new activity (912.269858ms)
✔ reported return flow and relative Age: reply sent from the inspector, then the new answer appears there without manual refresh (20871.244615ms)
organization: {"event":"reload-needs-restart","business":"acme"}
organization: {"event":"reload-needs-restart","business":"acme"}
✔ row 65 Settings: the routing table lists every instance, saves a harness, model, thinking and fallback to the file, and keeps the draft on each refusal (1456.057342ms)
organization: {"event":"reload-needs-restart","business":"acme"}
✔ row 65 Console: the signed-in human saves a route through a real broker; each refusal says nothing changed and leaves the file and the log (124.733405ms)
✔ row 65 Console: the routes write needs send on, a writer, the public name, the user, the exact Origin and same-origin Fetch Metadata (7.984846ms)
✔ row 65 Console: the routes write takes JSON within 16 KiB with a revision and routes only; an actor is refused and routes are never logged (9.931147ms)
✔ row 65 Console: a bus refusal maps to its status and says nothing changed; a lost or odd answer says the change may have been made (24.176558ms)
✔ row 65 Console: the routes read takes no arguments, needs a bus and refuses an odd answer (7.91025ms)
✔ the send box: held roles, the draft and caret across a refresh, each receipt, one POST per Send, and the trail link; the board Reply on a 4xx and a 5xx (2577.785116ms)
✔ a sent receipt lists its replies as the page refreshes, oldest first and capped, and marks none delivered or read (11216.600397ms)
✔ startServer takes send only as a function and only with the preview mode (8.305533ms)
✔ the CLI refuses --send without the preview flags, and without a configured bus (622.972543ms)
✔ the CLI with --send and a configured bus sends through the human transport and logs one line (188.71069ms)
✔ without --send the route is read-only like every other write, and config says no send (10.412469ms)
✔ with --send every other write is still 403 read-only, and nothing reaches the board or bus (8.881331ms)
✔ config says send only on the public name with --send on (4.624696ms)
✔ a send without the signed-in user is 401 and is neither sent nor logged, loopback included (6.736458ms)
✔ each request check refuses before anything is sent, and logs the refusal without the body (23.776724ms)
✔ a send passes exactly to, body and in_reply_to, answers the id, and logs it (3.435425ms)
✔ a crafted role name cannot forge a log line (2.520457ms)
✔ a bus refusal is not sent, with its status; an outcome the bus could not confirm is unknown and never retried (8.782419ms)
✔ through the human transport the request is exactly the business, message.send and the keys (100.281561ms)
✔ against a real broker: the message is written once as a human send, and its refusals map (31.579317ms)
✔ loopback host and board origin fail closed (6.349957ms)
✔ real board fixture passes through WebUI; assets and isolated seen/reply work (85.238919ms)
✔ proxy preserves exact request bytes, status and receipt, rejects forms and malformed JSON, never follows redirect (49.199627ms)
✔ unreachable board reports URL; CLI rejects unsupported options (479.978274ms)
✔ tester service render carries the tester port alongside existing flags (134.959305ms)
✔ tester service refuses forwarded 7332 even with another main port (111.314937ms)
✔ tester service invalid ports refuse render and install with exit 4 and leave the unit alone (1140.951065ms)
✔ tester service counts the digits as written before it strips leading zeros (106.037477ms)
✔ tester service install and status show the tester port without changing send reporting (550.730447ms)
✔ render prints the unit without the preview flags (50.043501ms)
✔ render carries every serve flag, the preview set included (48.3057ms)
✔ a partial preview set is refused (116.014202ms)
✔ a value the unit cannot carry is refused, for every flag (2672.644014ms)
✔ the rendered unit names none of the human proof agent markers and sets no agent variable (239.356908ms)
✔ install into --dir with --no-reload writes the file whole, then reports unchanged (287.45407ms)
✔ install without --no-reload runs daemon-reload and nothing that starts the unit (62.23267ms)
✔ uninstall refuses while the unit is running, with or without --no-reload, and removes it once it is not (564.150662ms)
✔ status prints the unit state and GET /healthz on the installed port (418.000891ms)
✔ usage: an unknown verb or flag, and start or enable, exit 4 (748.152129ms)
✔ without --send, render is the template with its placeholders filled, byte for byte (191.946387ms)
✔ render --send with the preview set ends ExecStart with --send and changes nothing else (314.493899ms)
✔ --send without the whole preview set is refused and writes nothing (731.918561ms)
✔ install --send into --dir with --no-reload writes the sending unit, and status says whether it sends (513.043402ms)
✔ uninstall and status take no --send (164.863424ms)
✔ install refuses while the unit is running, in any state but inactive or failed, and changes nothing (697.765957ms)
✔ when the state read fails, install and uninstall refuse with one line and change nothing (238.392922ms)
✔ install needs --copy naming a copy that exists, and refuses outside the canonical checkout without --allow-worktree (355.132277ms)
✔ install refuses unless the bus unit runs from the same copy, naming both paths, and changes nothing (735.389915ms)
✔ render --copy runs the copy and reads the queue in the checkout; without --copy the unit is unchanged (114.218835ms)
✔ the uid header takes only an Authentik uid; the username header still takes a username (2531.254234ms)
✔ a preview value cannot start with - or . (295.955168ms)
✔ status names the copy and whether refactor has moved past it, and says when the unit runs from no copy (877.622422ms)
✔ proxy proof render carries both flags but never opens the fixture file (89.223556ms)
✔ proxy proof render refuses incomplete non-preview missing unsafe-mode and repo/copy paths (565.728452ms)
✔ proxy proof status retains send and tester reporting with both proof flags (170.319152ms)
✔ row196 socket flag renders only for supporting targets and refuses mixed transports (114.439527ms)
✔ Settings form shows every scope and held role; gated save, exact payload, retained draft and no automatic retry (1360.394114ms)
✔ Q169 Assistant section: gated, changed fields only, name and stop posts, retained draft and no automatic retry (1339.787079ms)
✔ Row 167 a refused names read gives the refused usage page; another names failure keeps the Assistant section (1001.13625ms)
✔ Row 167 with a limits draft open, an assistant save gives the limits submit its revision and the typed limit stays (961.46178ms)
✔ Row 167 with an assistant draft open, a launch save gives the assistant submit its revision, and reload reads the current one (919.499255ms)
2026-10-24T22:12:18.574Z settings user="jason" changed
✔ REQ-WEB-1 signed-in same-origin Settings write reaches exactly one human operation (20.814698ms)
✔ REQ-WEB-1 Settings writes require enabled send, named Host, identity, exact Origin and same-origin Fetch Metadata (7.338296ms)
✔ REQ-WEB-1 Settings validates JSON, size, revision and strict writable keys before broker call (5.704514ms)
✔ Q169 a Console change of the assistant reaches the human operation unchanged, and the log names the signed-in user (3.12922ms)
✔ tokens.css and icons.svg are byte copies of docs/design (2.466959ms)
✔ JetBrains Mono files match the digests in their sources file, with the OFL text (2.202837ms)
✔ shipped strings are unchanged, and the web keeps its write boundary (3.483166ms)
ROW191_LAYOUT {"width":1440,"height":1000,"controls":212.5,"tree":914,"main":914}
✔ shell in a browser: System default, seeded states, 400px, focus and the Ctrl+K palette (5724.337234ms)
✔ five states on Board, Inbox, Tasks, Agents and Trail (2781.461551ms)
✔ a 401 sign-in required on each fetch path signs the page out with a sign-in link and stops the refresh; another 401 stays an error (5951.403032ms)
✔ the Sign out form shows only when /api/config says sso, and posts to /auth/logout (1240.276745ms)
✔ positive: an RS256 provider signs in and sends one message, and the session reads (144.348303ms)
✔ positive: an ES256 provider signs in and sends (20.592669ms)
✔ positive: two providers each sign in their own subjects, and one provider's subject is unknown to the other (61.371982ms)
✔ 1: a forged x-authentik header without a cookie is 401 on the API and a sign-in redirect on a page (43.593455ms)
✔ 2: an HS256 ID token keyed with the client secret and a real RSA kid is refused (73.089469ms)
✔ 3: a wrong aud, and an aud list holding another client with no azp, are refused (33.086381ms)
✔ 4: a token that expired 10 minutes ago is refused (63.584637ms)
✔ 5: another issuer, and the issuer without its trailing slash, are refused (48.311745ms)
✔ 6: a nonce mismatch and a missing nonce are refused (27.913813ms)
✔ 7: state mismatch, no login cookie, a replay, an expired record and two login cookies are refused (67.213632ms)
✔ 8: the token request carries the PKCE verifier, and the OP refuses a wrong one (46.450232ms)
✔ 9: alg none, a changed payload under a real kid, and an unknown kid even after the refetch are refused (208.50079ms)
✔ 10: a valid token for a subject not configured is 403 with one subject-unknown line (114.43639ms)
✔ 11: start refusals: HS or none algs, reserved names, HS-only discovery, an empty JWKS, no S256, an issuer mismatch, a short RSA key (276.730279ms)
✔ 11: slot files: a symlink, mode 0644, mode 0640 and a file under the repository are refused, and no message holds the value (2.126877ms)
✔ 11: the CLI refuses --sso with the old flags and without console.sso, and starts with a good one (1317.326217ms)
✔ 12: under --sso the tester listener refuses each kind of sign-in, has no /auth, and startServer refuses tester with sso (61.815926ms)
✔ 13: idle and absolute expiry, logout then reuse, a cross-origin logout, and background reads that don't keep a session (112.338051ms)
✔ 13: the CSP lets the Sign out form reach the provider's end-session origin, and only under --sso (136.264868ms)
✔ 14: open redirects land on /, and a path on the Console lands there (125.077087ms)
✔ 15: a callback for A carrying B's code and iss, and a provider= query, is refused (114.160441ms)
✔ 16: a provider with RS256 and ES256 takes either, and refuses PS256 with a usable PS256 key in the JWKS (111.659664ms)
✔ 17: 33 started logins leave 32 records, and the first one's callback finds none (59.820684ms)
✔ 18: after a key rotation a sign-in works through one refetch, and the removed kid is refused (119.662583ms)
✔ 20 and 21: the store holds no raw session id, and the cookie strings are exact (36.447359ms)
✔ 22: a loopback Host is 403 on a page, a read and a write; /healthz on loopback is 200; a redirect_uri never comes from the Host (64.398495ms)
✔ 23: a provider down at start leaves the Console up and 503, and the retry makes sign-in work (225.671097ms)
✔ 19: no captured log line holds a token, code, state, nonce, verifier, client secret or session id (4.654356ms)
✔ tester Console banner exposes only instance route and name editors and saves a route as tester (1004.885424ms)
✔ row 177: the tester Console chat composer is enabled and a send shows in its own thread (882.644221ms)
✔ tester-port validates range tunnel main port and requires configured bus before listening (1166.339822ms)
✔ CLI tester listener binds a private Unix socket and spawns TESTER_CLI for every Console bus read (4245.099179ms)
✔ main listener refuses x-mosaic-tester before any board or bus read for every Host (28.708091ms)
✔ tester listener rejects preview binding and requires its fixed logical Host and no proxy auth header (145.683675ms)
✔ tester listener writes only instances routes and names with tester receipts and actor (158.995936ms)
✔ tester listener refuses every human-only write with no bus call (108.260486ms)
✔ tester-off and tester-required reads return HTTP 403 (109.020476ms)
✔ tester credentials routes and committed project reads keep secrets and paths bounded (194.378994ms)
✔ row 177 W1: the tester chat makes, sends to, opens and reads its own thread as tester (30.75864ms)
✔ row 177 W2: tester chat writes refuse a missing or foreign Origin, cross-site, text/plain and the proxy header with no bus call (16.544702ms)
✔ row 177 W3: the human thread through the tester chat is thread-not-owned, and bus.tester off answers tester-off (38.09277ms)
✔ row 177 W4: the main listener refuses x-mosaic-tester on chat reads and writes before the chat (3.174145ms)
✔ Row 252: the tester listener has no decision answer routes, and its config never offers them (115.156837ms)
✔ private tester HTTP serves on 0600 socket in 0700 parent and fixed origin (92.027264ms)
✔ private tester refuses symlink, unsafe parent and long path without repairs (1.361981ms)
✔ tester cleanup must leave a replacement inode untouched (1.910765ms)
✔ row278 browser lists held claims and release preserves role rows and totals (847.359938ms)
✔ row278 browser claims 403 stays local and role section remains byte-equal (894.870976ms)
✔ row278 browser renders only four escaped claim fields and never instance or other extras (843.980149ms)
✔ row278 browser sign-out removes claims and prevents reuse of cached answers (893.668522ms)
✔ row278 tester browser keeps role rows without requesting the owner claims section (787.543169ms)
✔ row278 browser discards a late claims answer after sign-out (921.720447ms)
✔ row278 HTTP read returns held claims without send and refuses arguments before the bus (53.230904ms)
✔ row278 HTTP read preserves bus refusal and rejects a malformed result (16.041697ms)
✔ row278 tester socket refuses thread claims explicitly with zero bus calls (7.920469ms)
✔ row278 Console adapter calls argument-free thread.claims through the normal transport (234.138591ms)
✔ 193d HTTP shares use the caller, plain/shared lists, exact args and write fences (101.289213ms)
✔ 193d config supplies only the signed-in user live collaborator scopes and updates on downgrade (42.033352ms)
✔ 193d viewer UI has no composer, resume, share, session mutations or create controls (924.760539ms)
✔ 193d mixed grants keep viewer project read-only and collaborator own thread writable; downgrade hides controls (953.979736ms)
✔ 193d owner has share controls on own threads and shared threads remain read-only (790.551799ms)
✔ 193d bypassed UI checks still reach a refusing bus for every viewer write (788.861611ms)
✔ 193d collaborator shares stay read-only and never expose reshare or wake controls (581.454324ms)
✔ REQ-LIMIT-4 Settings shows all token kinds and unknown turns beside every total, as a read-only separate section (995.953487ms)
✔ REQ-WEB-1 usage read keeps unknown counts and each token kind; no query or write is accepted (45.120159ms)
✔ REQ-WEB-1 malformed usage is refused instead of shown as zero (8.503528ms)
✔ R6-N1 with the userRoute gate open, a user session reaches no owner option over HTTP (253.639899ms)
✔ Queue, Business and Settings in their five states, with no move button (3486.52394ms)
✔ seeded secrets, Discord ids and paths reach no response and no page; business refusals in the module's words (1584.02624ms)
✔ the server log names no config path when the system config refuses (369.222452ms)
ℹ tests 455
ℹ suites 0
ℹ pass 455
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 174122.853398
@@ -1,69 +0,0 @@
tests/agents-browser.test.mjs
tests/agents.test.mjs
tests/assistant.test.mjs
tests/board-held.test.mjs
tests/browser-edge.test.mjs
tests/browser.test.mjs
tests/bus-browser.test.mjs
tests/bus.test.mjs
tests/channel-chat.test.mjs
tests/chat-browser.test.mjs
tests/chat-instances.test.mjs
tests/chat-replies-browser.test.mjs
tests/chat-sessions-access.test.mjs
tests/chat.test.mjs
tests/conversation.test.mjs
tests/decide-browser.test.mjs
tests/decide-sso.test.mjs
tests/decision-http.test.mjs
tests/discord.test.mjs
tests/docs-browser.test.mjs
tests/editor-browser.test.mjs
tests/editor-provenance.test.mjs
tests/editor-wikilink.test.mjs
tests/editor.test.mjs
tests/granted-user.test.mjs
tests/history-return-flow.test.mjs
tests/instances-browser.test.mjs
tests/instances.test.mjs
tests/library-cli.test.mjs
tests/library-routes.test.mjs
tests/library-status.test.mjs
tests/limits-browser.test.mjs
tests/limits-route.test.mjs
tests/markdown-preview.test.mjs
tests/messages.test.mjs
tests/pinned-copy.test.mjs
tests/preview.test.mjs
tests/processing-browser.test.mjs
tests/processing-ui.test.mjs
tests/processing.test.mjs
tests/project-file.test.mjs
tests/project-name-repo.test.mjs
tests/proof-cli.test.mjs
tests/proof.test.mjs
tests/reads.test.mjs
tests/relaunch.test.mjs
tests/return-flow.test.mjs
tests/routes-browser.test.mjs
tests/routes.test.mjs
tests/send-browser.test.mjs
tests/send.test.mjs
tests/serve.test.mjs
tests/service.test.mjs
tests/settings-form.test.mjs
tests/settings-write.test.mjs
tests/shell.test.mjs
tests/sso-browser.test.mjs
tests/sso.test.mjs
tests/tester-browser.test.mjs
tests/tester-cli.test.mjs
tests/tester-listener.test.mjs
tests/tester-socket.test.mjs
tests/thread-claims-browser.test.mjs
tests/thread-claims.test.mjs
tests/thread-sharing.test.mjs
tests/usage-browser.test.mjs
tests/usage.test.mjs
tests/user-option-swap.test.mjs
tests/views.test.mjs
@@ -1,38 +0,0 @@
# grant sage-4286; nice 19; TMPDIR /mnt/storage/scratch/tmp/g49X; MOSAIC_REQUIRE_EDITOR_BUILD 1
✔ row 194 T16 Settings Agents: unavailable read-only, launch follows its request, confirms, reason and refusal (13526.912326ms)
✔ row 256 T7 T8 the human page offers Delete on a creative instance, the tester page never does (917.27163ms)
✔ row 194 T16: each agent action makes one call with only its keys, logs the user and answers the request (26.28546ms)
✔ row 194 T16: the boundary refuses before any bus call (13.102463ms)
✔ row 194 T16: read-only when send is off or no writer is wired; no route has a --send exception (6.394437ms)
✔ row 194 T16: a bus refusal names its reason and nothing changed; an unknown outcome or a bad shape is never retried (4.282632ms)
✔ row 194 T16: the request read takes one id, adds the refusal reason and refuses an unexpected shape (5.922485ms)
✔ row 194 T16: delete joins add and change on /api/instances with only revision, instance and op (2.724511ms)
✔ row 194 T16 D4.1: the tester listener launches, terminates and reads requests; regenerate, veto and delete are refused with no call (4.723645ms)
✔ row 194 N5: agents.js is served as JavaScript and index.html loads it once (1.551741ms)
✔ row 239 T6: a delete closed -revoked says the tokens may already be revoked, and outcome-unknown-revoked is an open outcome (2.702385ms)
✔ the Board: held roles with no machine sessions, a claim with no address, the toggle kept across a reload, and Message addressed to the role (3264.641316ms)
✔ a Seen click while a Board read is in flight waits for that read, then posts (1197.183961ms)
✔ a redirect answer on a Board read, a bus read, a conversation read, a board POST, a module read and a send signs the page out: one line, nothing stale, no further reads (5156.528249ms)
✔ browser edge states: loading, empty, malformed, stale, hostile/long values, in-flight reply and appearance fallback (1309.276425ms)
Rendered contrast: {"failures":[],"count":330,"lowest":4.504658476260286}
✔ served Console browser: real board fixtures, keyboard, drafts, receipts, themes, 320px and failures (1518.992742ms)
✔ the README says a refused field table names the file or the key at fault, never a path (104.682461ms)
✔ S5 pages in a browser: real broker rows, inert text, Copy, routes, failures, layout and no writes (3538.625499ms)
✔ bus routes serve the four reads from the reader view, unescaped JSON for the page to escape (83.53196ms)
✔ decisions route serves the roles and recent lists from the reader view (37.23684ms)
✔ credentials route serves the broker credential status from the reader view (13.661469ms)
✔ replies route serves the replies to one message from the reader view (37.146766ms)
✔ bus routes are GET-only, have no write verb, and keep the same-origin checks (57.970332ms)
✔ bus refusals map to statuses and never carry a path or a stack (25.682155ms)
✔ humanCall speaks the human transport protocol without blocking the server (1672.176975ms)
✔ busReader takes --business, else the live bus host, else refuses (188.376745ms)
✔ humanCall kills a transport that runs past its timeout (527.833381ms)
✔ serve refuses a --business value that is not a business id (331.000231ms)
ℹ tests 28
ℹ suites 0
ℹ pass 28
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 17747.118568
@@ -1,22 +0,0 @@
# grant sage-4286; nice 19; TMPDIR /mnt/storage/scratch/tmp/g49X; MOSAIC_REQUIRE_EDITOR_BUILD 1
✔ wikilink round-trip: plain (5.135516ms)
✔ wikilink round-trip: labelled (0.532763ms)
✔ wikilink round-trip: heading target (0.47601ms)
✔ wikilink round-trip: list item (0.674052ms)
✔ wikilink round-trip: next to front matter (0.620153ms)
✔ wikilink round-trip: heading block and combined label (0.718517ms)
✔ wikilink round-trip: spaces, Unicode and adjacent links (0.543729ms)
✔ wikilink round-trip: reference-definition collision (1.267657ms)
✔ wikilink round-trip: inside an ordinary link (0.565479ms)
✔ wikilink round-trip: inert embed (0.373131ms)
✔ wikilinks are inline atoms and survive a neighbouring edit in every required context (773.2922ms)
✔ code, escaped openers, malformed syntax and HTML-like targets stay outside wikilink atoms (686.084659ms)
✔ wikilink DOM paste accepts only bounded single-line inert syntax; malformed attrs serialise as escaped text (675.536422ms)
ℹ tests 13
ℹ suites 0
ℹ pass 13
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 2305.540306
-27
View File
@@ -1,27 +0,0 @@
// Run only under Sage's explicit CLEAR. Reads the pinned baseline Git objects,
// not the edited model or rebuilt candidate bundle. Never writes product files.
import { execFileSync } from 'node:child_process';
import { createHash } from 'node:crypto';
import { fileURLToPath } from 'node:url';
import { dirname, resolve } from 'node:path';
import vm from 'node:vm';
import { WIKILINK_CASES } from '../../../../packages/webui/tests/helpers/wikilink-cases.mjs';
const repo = resolve(dirname(fileURLToPath(import.meta.url)), '../../../..');
const base = '487500a16f4ab5902c318509fdec6acc56a543ca';
const git = (...args) => execFileSync('git', args, { cwd: repo, encoding: 'utf8', maxBuffer: 16 * 1024 * 1024 });
const read = path => git('show', `${base}:${path}`);
const source = read('packages/webui/src/public/editor.js');
const build = JSON.parse(read('packages/webui/editor/BUILD.json'));
const sha256 = createHash('sha256').update(source).digest('hex');
if (sha256 !== build.outputs['src/public/editor.js'].sha256) throw Error('baseline bundle differs from its recorded build');
const context = { console }; context.window = context; context.globalThis = context;
vm.createContext(context);
for (const [name, text] of [['markdown-preview.js', read('packages/webui/src/public/markdown-preview.js')], ['editor.js', source]])
vm.runInContext(text, context, { filename: name });
const results = WIKILINK_CASES.map(({ name, text }) => {
const output = context.MosaicEditor.roundTrip(text);
return { name, input: text, output, equal: output === text };
});
console.log(JSON.stringify({ base: git('rev-parse', base).trim(), bundleSha256: sha256,
measuredAt: new Date().toISOString(), allEqual: results.every(r => r.equal), results }, null, 2));
@@ -1,68 +0,0 @@
{
"base": "487500a16f4ab5902c318509fdec6acc56a543ca",
"bundleSha256": "9c881b13740fae2408717ad75fa1d85bfcfe3fa8b3af0f1b3f2e706c90e80fee",
"measuredAt": "2026-10-24T22:07:22.210Z",
"allEqual": true,
"results": [
{
"name": "plain",
"input": "[[a]]\n",
"output": "[[a]]\n",
"equal": true
},
{
"name": "labelled",
"input": "[[a|b]]\n",
"output": "[[a|b]]\n",
"equal": true
},
{
"name": "heading target",
"input": "[[a#h]]\n",
"output": "[[a#h]]\n",
"equal": true
},
{
"name": "list item",
"input": "- [[a]]\n",
"output": "- [[a]]\n",
"equal": true
},
{
"name": "next to front matter",
"input": "---\nrelated: \"[[metadata]]\"\n---\n\n[[a]]\n",
"output": "---\nrelated: \"[[metadata]]\"\n---\n\n[[a]]\n",
"equal": true
},
{
"name": "heading block and combined label",
"input": "# See [[a#h|Title]]\n",
"output": "# See [[a#h|Title]]\n",
"equal": true
},
{
"name": "spaces, Unicode and adjacent links",
"input": "See [[ Héllo there # A heading | a label ]][[next]]\n",
"output": "See [[ Héllo there # A heading | a label ]][[next]]\n",
"equal": true
},
{
"name": "reference-definition collision",
"input": "[[a]]\n\n[a]: u\n",
"output": "[[a]]\n\n[a]: u\n",
"equal": true
},
{
"name": "inside an ordinary link",
"input": "[x [[a]]](u)\n",
"output": "[x [[a]]](u)\n",
"equal": true
},
{
"name": "inert embed",
"input": "![[cover.png]]\n",
"output": "![[cover.png]]\n",
"equal": true
}
]
}
Loaded 100 of 116 files, more files were not shown because too many files have changed in this diff. Show more