Compare commits
7
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2a8281a6f0 | ||
|
|
5b63ea3236 | ||
|
|
64f6558ee4 | ||
|
|
f799e8b155 | ||
|
|
4992e49097 | ||
|
|
e86c712f5c | ||
|
|
87e67a765f |
No files matched your search
@@ -5381,11 +5381,3 @@ Gander: after Duckworth-0100 design approval with C1-C5, prepared the two host-s
|
||||
|
||||
2026-10-23T02:21:06Z | Sage, rows 270+271 landing, 571 landing, MVP rows | Before: 270 (#1775) and 271 (#1776) were approved on gizmoduck/row270-271-r4 49cee846e and 2b964a082 after combined gate C2 run 5 GREEN on 53406f3e4 (bus 873, seat 202, cli 905, ten scripts, 38/38 mutants). After: 33 commits cherry-picked onto 767bb62c7 as 7328da8ca, range-diff all "=", 40 paths identical to the candidate; 270 manifest f4174458 matches, 271 manifest 3ab1f5c8 matches on 29 paths, the other 4 moved under 270 and match its manifest. Done revs 3396/3398, #1775 c30962 and #1776 c30964 closed, P19 463 c861. 571 (Gyro, Fenton APPROVE) picked as ee5f7b9ef, 6345aae3d, 767bb62c7 (blobs 9382f85b, 7ec0897b), 1ac76a417 left out; N7 911dad2aa (Fenton-0014) picked after. Rows 293-299 added (574, FED R6, R4, R7, GitHub grant, Q228, 573), queue commit 253346e3c. Correction: the push sync step checked out O..S paths over the canonical worktree without testing for uncommitted edits, so any pending SESSIONS or BUILD-LOG line in the canonical checkout at 02:06Z would have been overwritten; the sync now skips edited paths. Schema 3n is not live (LIVE 0cbe2e9b3 at 3m).
|
||||
2026-10-23T03:59:52Z | Sage, row 293 (Vikunja 574) landing and 3m-3n live window | Before: live 0cbe2e9b3 at schema 3m; 574 approved by Filbert (c30982, cdda41f5) on gander/v574-r2 a9cae2bd6 after run 2 GREEN on 6bfab273b (four files 153/0, seat 202/0, cli 905/0, 312 flagged commits with 0 maintenance children). After: Darkwing's window put live on 464010fbe at 3n (activation 20261023T034557Z-464010fbe4c6, 26/97/5/28, Console 7332 200, W9b pm ra38826f3c6e2 left live, STATE darkwing/window-migrate-3n 8708927e5); 574's six commits cherry-picked onto 464010fbe as e51d11640, range-diff all =, patch-ids equal, only docs differ from a9cae2bd6. #1805 closed c31013, P19 386 c887 and 574 c888. Residual: queue store.mjs, discord git.mjs, harness tools.mjs commit without the maintenance flags; no whole-root test covers them yet.
|
||||
2026-10-23T05:47:17Z | Sage, row 292 (#1797) landing, idle-stop race row 302, rows 300/301, row 294 rounds 2-3 | Before: refactor 4a9c536e8; 292's gate on 0d0021454 hit one red at compactions-launch.test.mjs:229, ['session-invalid',22,null] where ['stopped',0,null] was expected, product and test unchanged. Gizmoduck read it as a race: threadIdle releases the claim, then the launcher sends SIGTERM, and a runner call in between gets not-holder and exits 22. Mos (mos-1411) rejected loosening :229, let 292 count one whole unedited green cli rerun, and allowed one rerun for that exact signature on other gates until the race row lands (hits logged on Vikunja 588). The 10-run diagnostic passed 10/10, but one runner log (r846b8d083502) showed not-holder then exit 22. After: the cli rerun was 910/910. 292 LANDED 6aab979e6 05:18Z (7 cherry-picks, range-diff all =, patch-ids equal), done rev 3447, #1797 closed c31038, Vikunja 588 c891. Briefs 86d5ac69b (R6-N1 #1807, R6-N4 #1808, rows 300/301) and e3ef1eaf6/fdedc56e2 (race, #1809, row 302). Row 302 design d1/d2 approved by Dewey with D1 (role.claim refuses a released run), c31044. Mos ruled landRelease folded in, code launcher-released, and four old-test lines moved to exact values (mos-1414/1415/1416): threads.test:394, runner.test:771-772, land.test:464. Row 294 round 2 stopped at webui G5 granted-user.test:269: max(seq) over an empty events table is NULL. Round 3 is one line, coalesce(max(seq),0) (mos-1417), Duckworth APPROVE c31045 rev 3462, gate pending. Queue commit 756284e8e (revs 3448-3456). Correction: two review-request attempts this window ran without MOSAIC_GITEA_CREDENTIAL_FILE exported and failed (3450 Launchpad, 3451/3452 Sage); the posted request was 3453/3454.
|
||||
2026-10-23T07:11:43Z | Sage, row 294 (#1800) rounds 3-4 and landing, row 219 edits 2-3, R9 transient and row 303 | Before: refactor 09d0d6faf; 294 run 3 on cb1648f3 stopped with 20 cli reds from two causes. A: the stack-release rehearsal fixture copies lacked cli access.mjs and transport.mjs, which 294's config.mjs now imports. B: the B1-B3 boot tests read warnings that now carry the fixture tracker line. Mos ruled A as two copy-list entries and B as a full pin, no filter: a TRACKER const and deepEqual (mos-1419). After: round 4 8616b9a4f, manifest a1ff5d67, Duckworth APPROVE c31053 rev 3469 with C1/C2. Run 4 from npm ci green: webui 365, cli 909, bus 873, 10 scripts, M1-M11 killed. Merged tree d3059c2c3 (11 cherry-picks, range-diff all =, patch-id 8371405a equal): stack-release-external 25/25, stack-upgrade 21/21. stack-release 223/224 on the first run, R9 at :2178: TypeError on join(r.dir) with r.dir null, so rehearse stopped before its directory and the output was lost. R9 passed 6/6 run alone on d3059c2c3, 09d0d6faf and 24b745447. Mos (mos-1422) allowed one unedited whole rerun: 224/224. 294 LANDED d3059c2c3 07:04Z, done rev 3471, #1800 closed c31068, P19 269 c895. Row 303 (#1810, Vikunja 589, brief ad6ca7930) adds an r.dir guard in R9 only. Queue commit 80793d824 (revs 3464-3473). Row 219: Rocko's second edit 7cbd839d0 (mos-1418, Dewey dewey-0883) restarted and went red at thread-launch C2-09a :489 on a legacy history path. The third edit 5f2ef92e5 (mos-1420, Dewey dewey-0885) reads the native session path. 219 now rebases onto 80793d824, because 294 overlaps its webui files. Correction: the first merged-tree check counted on the 292 drift and found an unrelated transient, and my P19 placeholder sed also rewrote the script's own guard line; the guard refused to post, and I restored the line before posting.
|
||||
|
||||
Row 299 (573, #1806, Gander, Filbert): before, the P10 band test timed a fault run minus a separate baseline run, and a loaded whole-suite run went red. Mos approved direct timing from host /proc/uptime stamps with ambient load only (mos-1409). After: rebased onto 80793d824 as ffa93b054 (range-diff 3/3 =, manifest 277ace0b unchanged). Gate 07:26Z-07:50Z: case1 whole 3x 53/0/0, cli whole 917/0/0 (59 files, load 1.54-7.17), P10 inner 2.27 s, outer 4.01 s, M1-M6 killed. M4's planned guard return then exact outer-reason failure counts as its kill (sage-3271, mos-1426). Filbert APPROVE c31084 rev 3485, N1 M1 margin 0.02 s. 299 LANDED ffb2fedfb 08:03Z, done rev 3487, #1806 closed c31087; queue commit 8a35ffadb (revs 3474-3487). Row 303: Duckworth APPROVE c31079 rev 3480 with C1, the whole-file gate. Rows 219 (bfa421b6c) and 295 r2 (b16cef1d0) rebases: Dewey static clean. Corrections: Launchpad and Gander have no token, and the CLI refuses another seat's token file, so I posted both requests as sage (c31082, c31083). My sage-3265 wording led Duckworth to poll queue show into Gander's slot (07:20Z-07:26Z); I ruled it ambient load (sage-3274).
|
||||
2026-10-23T10:48:40Z | Sage, rows 302, 295 and 219 landings, the Docker pool diagnostic, rows for Vikunja 590 and 591 | Before: refactor 1ac655005. 302 (#1809, Gizmoduck, Dewey) LANDED 3ed9fd754 08:49Z: 7 commits onto 1ac655005, range-diff all =, tree = gated merge 783602e06; queue commit 07802dc57 (revs 3488-3494). Row 219's gate went 11/3 in test-release.sh: release activate's health check failed because Docker could not create sage-diag1437_default, since all predefined address pools were used up. Under mos-1437 I reproduced it on clean 07802dc57 (11/3, the same stderr). I then removed 18 unused gate _default networks, and the rerun went 14/0 with the run-task marker ok. Mos accepted the removal and ruled that a probe that can create something waits for the go and a removal waits for the report (mos-1438). 295 (#1801, Morgana, Dewey) round 2 gate on d68b4300d (manifest e94c9aeb) was green. It LANDED 2efd127ce 10:10Z: 9 commits onto 07802dc57, HEAD~1 tree = gated a86592ffc. Done rev 3502, #1801 c31105, P19 414 c911. 219 (#1720, Rocko, Dewey): the restart on the post-295 merge 054da642f (manifest 4a2271dd, my mos-1439 call) passed node 2523/0/2 and shells 449/0, with 24 mutants killed. It LANDED 5fdfd7275 10:40Z (8 row commits plus packet-only evidence, tree e86a84a85 = gated). Done rev 3509, #1720 c31110, P19 416 c913. Queue commit 90633c864 (revs 3495-3510). Brief docs/plans/2026-10-23_gate-env-rows.md names rows for 590 (claude-session slug) and 591 (compose network cleanup), and DEFERRED.md gets 219 N1 (U6). Row 272 (Huey) conflicts with 5fdfd7275 in code, so it moves back to in-progress for a rebase. Its new fallback is bounded to a session.list access-refused on an omitted-session route (sage-3357). Corrections: my network create probe ran before Mos's go, and the removal ran before the report. My first slot-order line put the diag start at 09:44Z; it was about 09:41Z. My 219 push piped its output through grep, but the after-fetch confirmed origin. Queue commit 90633c864 also carries Huey's rev 3510 (272 back to in-progress), and its message names only 3495-3509.
|
||||
|
||||
|
||||
2026-10-23T11:03:46Z | Gyro Vikunja571 mos-1444 PRD d8 follow-on | Branch gyro/editor-571-d8 from origin/refactor c16e943b9. Both designs now keep library.convert outside ACTIONS/ROUTED and broker processing, retain REQ-WAIT-1/hard-wait test unchanged, constrain unmarked story eligibility to mapped book/playground scope, and add whole-host pre-import restore recovery from remote import manifests plus the Gitea archive commit. Lookups refuse until one current version is proven; VM1012 restore needs Jason present under Q185. W7 no longer owns hard-waits.test.mjs. Canonical queue next gyro returned nothing; direct Mos assignment governs. Static diff, exact replacement and append-only checks pass. No code, tests, build, browser, private-file or live action. Fenton re-check requested after authorized branch push.
|
||||
@@ -1,47 +0,0 @@
|
||||
{
|
||||
"authority": "mos-1409 via sage-3181",
|
||||
"base": "4a9c536e8",
|
||||
"path": "packages/cli/tests/case1-accept.test.mjs",
|
||||
"old_line_replacements": [
|
||||
{
|
||||
"old": " if(fault==='inner')assert.ok(probeSeconds>=1.25&&probeSeconds<2.75,`${mode}: probe ${probeSeconds}s after baseline ${baselineSeconds}s`);",
|
||||
"new": " if(fault==='inner')assert.ok(probeSeconds>=1.25&&probeSeconds<2.75,`${mode}: direct probe ${probeSeconds}s; baseline ${baselineSeconds}s is diagnostic only`);",
|
||||
"change": "diagnostic message only; numeric comparisons and strictness unchanged"
|
||||
},
|
||||
{
|
||||
"old": " assert.ok(probeSeconds>=3.25&&probeSeconds<4.75,`${mode}: probe ${probeSeconds}s after baseline ${baselineSeconds}s`);",
|
||||
"new": " assert.ok(probeSeconds>=3.25&&probeSeconds<4.75,`${mode}: direct probe ${probeSeconds}s; baseline ${baselineSeconds}s is diagnostic only`);",
|
||||
"change": "diagnostic message only; numeric comparisons and strictness unchanged"
|
||||
},
|
||||
{
|
||||
"old": " const probeSeconds=seconds-baselineSeconds;",
|
||||
"new": " let probeSeconds=seconds;\n if(timingFile)assert.doesNotThrow(()=>{probeSeconds=readProbeSeconds(read(timingFile));},'P10 observer pair is required');",
|
||||
"change": "approved observer plumbing or probeSeconds source"
|
||||
},
|
||||
{
|
||||
"old": "function run(h, extra = {}, argv = [\"--business\", \"mosaic-stack\", \"--args\", \"/etc/mosaic-stack/dev.args\", \"--claude-pin\", CLAUDE_PIN, \"--node-pin\", NODE_PIN, \"--root\", h.root]) {",
|
||||
"new": "function run(h, extra = {}, argv = [\"--business\", \"mosaic-stack\", \"--args\", \"/etc/mosaic-stack/dev.args\", \"--claude-pin\", CLAUDE_PIN, \"--node-pin\", NODE_PIN, \"--root\", h.root], script = SCRIPT) {",
|
||||
"change": "approved observer plumbing or probeSeconds source"
|
||||
},
|
||||
{
|
||||
"old": " const r = spawnSync(SCRIPT, argv, {",
|
||||
"new": " const r = spawnSync(script, argv, {",
|
||||
"change": "approved observer plumbing or probeSeconds source"
|
||||
},
|
||||
{
|
||||
"old": " const start=performance.now(),r=run(h),seconds=(performance.now()-start)/1000;capture();",
|
||||
"new": " const start=performance.now(),r=run(h,timingFile?{ROW299_TIMING_FILE:timingFile}:{},undefined,observedScript),seconds=(performance.now()-start)/1000;capture();",
|
||||
"change": "fault run selects private copy only for inner/outer; default SCRIPT and overflow remain"
|
||||
}
|
||||
],
|
||||
"only_removed_assertion_lines_are_two_diagnostic_messages": true,
|
||||
"numeric_bands_unchanged": {
|
||||
"inner": "[1.25,2.75)",
|
||||
"outer": "[3.25,4.75)"
|
||||
},
|
||||
"baseline_status_and_clean_session_lines_byte_identical": true,
|
||||
"all_other_original_assertion_lines_preserved": true,
|
||||
"guard_7000_unchanged": true,
|
||||
"new_assertions": "copy reversal, observer variable isolation, stream/status/EXIT preservation, strict records, required pair",
|
||||
"runtime_status": "NOT RUN; no Node or test until CLEAR"
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
{
|
||||
"row": 299,
|
||||
"issue": 1806,
|
||||
"vikunja": 573,
|
||||
"base": "4a9c536e861f1d9f9a018019b3ac4519d65eccf0",
|
||||
"branch": "gander/row299-p10",
|
||||
"status": "IMPLEMENTED STATIC; source 1ec2b9765; no Node/test/push",
|
||||
"authority": "mos-1409, sage-3181; Filbert implementation review pending",
|
||||
"files": [
|
||||
{
|
||||
"path": "packages/cli/tests/case1-accept.test.mjs",
|
||||
"git_blob": "c196b40981056963ed924a09f649cfe8e99b34c6",
|
||||
"sha256": "1e8af0656707d93dedade923bf60556022dc7121c43761876a5d7e02731c14aa"
|
||||
},
|
||||
{
|
||||
"path": "packages/cli/tests/case-sudo-fixture.mjs",
|
||||
"git_blob": "866c6c0d229a1fc1e9401ee8bb5522ac8cb01ebc",
|
||||
"sha256": "eac5c83f43056bdeb5781101307e17d4bc01f03e97e02f4f5e930436d7e43535"
|
||||
},
|
||||
{
|
||||
"path": "scripts/case1-accept.sh",
|
||||
"git_blob": "05cb249ea2217d1a542438b597d382669acf8a9b",
|
||||
"sha256": "89b45bb84e8365f32f08fd055c7db8a0259533f23fe7ab03f484acb25bee92c2"
|
||||
}
|
||||
],
|
||||
"source": "1ec2b97650849b90f41a8e1d1190f609de312d49",
|
||||
"execution": "HELD for Sage CLEAR; no stress process; ambient load >=4 is target only"
|
||||
}
|
||||
@@ -1,98 +0,0 @@
|
||||
# Row 299 / Vikunja 573: direct P10 timing
|
||||
|
||||
> Execution method: Gander implements inline after Mos's old-test ruling and Filbert's static read. No delegation. Static implementation authorized by mos-1409 / sage-3181. Every runtime step remains held for CLEAR.
|
||||
|
||||
**Goal:** Measure whether P10 takes its two-second inner path or four-second outer path under load, without subtracting unrelated work from another run.
|
||||
|
||||
**Architecture:** Add a test helper that makes a private, instrumented copy of the current acceptance script. Two root-side observer statements bracket only the P10 capture's actual bounded wait. Read a complete monotonic begin/end pair from a separate fixture file, while all existing refusal, residual and cleanup assertions still examine the real acceptance output.
|
||||
|
||||
**Tech stack:** Existing Node test runner, Bash builtins, Linux /proc/uptime. No new package, interpreter, product hook or live host action.
|
||||
|
||||
**Spec:** docs/plans/2026-10-23_mvp-readiness-rows.md, "Brief: 573, the P10 hop band"; sage-3175. Base 4a9c536e8, branch gander/row299-p10. Reviewer Filbert; gate owner Sage. Row 293 is done. Queue claim is held because it executes Node, forbidden in the present slot.
|
||||
|
||||
## Constraints and current status
|
||||
|
||||
- Static implementation only, authorized by mos-1409. No Node, tests, HTTPS Git, queue call or push has run for 299. No production edit.
|
||||
- Mos approved the measurement semantics in mos-1409 via sage-3181 under mos-1272. The numeric bands stay unchanged.
|
||||
- All script/supervisor bytes, 2/4-second budgets, 128-byte cap, exact reason assertions, no-observed assertion, hop residual assertion and cleanup assertions remain authoritative.
|
||||
- Keep the same healthy baseline status and `baseline leaves no session` assertions. It may remain as an independent healthy control and diagnostic; it no longer supplies the clock value being asserted.
|
||||
- No extra retry, smoothing, percentile selection, ignored red, clock fallback, or widened band. Missing clock evidence fails.
|
||||
- Tests use a short TMPDIR directly under /mnt/storage/scratch/tmp/gXXXXXX, never /tmp. No live units, ports, credentials or instance state.
|
||||
|
||||
## Source of the band and evidence
|
||||
|
||||
1. The original row 253 test timed the full acceptance run. Row 276 exposed it after adding stdout spooling: the old inner `<4 s` whole-run bound already failed 2/5 before that delta and 5/5 after it. Mos's mos-1350 ruled that tests 9 and 10 must measure the probe's cost, offering probe stamps or a same-mode no-fault baseline. See agents/gander/work/queue-276/BUILD.md:120-145 and ASSERTION-PRESERVATION.json.
|
||||
2. We chose baseline subtraction in 135bb8fae (original source 6f8c5653a). e06130fc0 added the required clean baseline check. Current test lines 371-388 measure two separate full runs and compute `probeSeconds=seconds-baselineSeconds`.
|
||||
3. The adopted windows are inner [1.25,2.75) and outer [3.25,4.75): 0.75 s around the configured 2/4 s budgets, with 0.5 s between windows. Duckworth-0218 accepted them; the isolated proof in queue-276/BUILD.md reported inner exec 2.033..2.171, inner hop 2.055..2.135, outer exec 3.758..3.961, outer hop 3.736..3.911. Those are historical evidence, not a new run or carried result.
|
||||
4. The recorded failure is agents/gizmoduck/work/queue-270/BUILD.md:629-636: run 3 on 53406f3e4 had CLI 904/905, inner hop estimate 1.08 below 1.25. The file was unchanged. Its isolated whole rerun passed 50/50 at load 3.19 (mos-1367). No other seat's scratch has been read for this packet.
|
||||
5. Production is scripts/case1-accept.sh:744, `tester_capture 2 4 128`. Its inner timer is after the uid drop; its outer timeout is started at :238 and waited at :244. The capture validates tools and creates its private files at :233-235, before the timer is armed. Exact refusal mapping is :224-229. The stalled-supervisor case remains an explicit same-uid residual.
|
||||
|
||||
Static mechanism: let H be the healthy probe cost, I the true faulty wait and U the rest of the full run, including scheduling delays. The current estimate is `(I + U_fault) - (H + U_baseline)`. It contains `U_fault-U_baseline-H`, so it can underestimate I when the baseline gets more delay. The 1.08 report is consistent with that mechanism; we do not invent the separate component timings absent from the committed record. A direct bracket removes the unrelated subtraction; execution must still establish its margins under the agreed load.
|
||||
|
||||
## Approaches considered
|
||||
|
||||
- Repeat baselines or use a median: reduces some noise but still subtracts two unrelated schedules and adds work to every whole-file gate. Reject as the fix.
|
||||
- Stamp in the peer Python or sudo fake: the inner/outer timer is already armed before a delayed child reaches the stamp, so it can measure only the remaining budget and undercount again. Reject.
|
||||
- **Recommend a direct root-side bracket in a private script copy.** Begin immediately before the actual outer timeout launch, after validation; end immediately after its wait, before unrelated post-checks. Includes sudo dispatch, the inner wait and its cleanup, or the outer timeout. Excludes preceding functional checks, the healthy run, metadata work before capture, and tool-validation cost. It measures the same timing distinction, using both existing fake sudo modes.
|
||||
|
||||
Mos approved this approach in mos-1409. Timing still includes kernel scheduling and inner cleanup. Arbitrary starvation cannot be given a hard wall-time guarantee; an overshoot remains a red for placement, not permission to retune.
|
||||
|
||||
## Proposed files and interfaces
|
||||
|
||||
- New packages/cli/tests/case-p10-timing-fixture.mjs: `instrumentP10Probe(source)` returns a copy of the current script with exactly two observer blocks; `readProbeSeconds(text)` returns `(end-begin)` in seconds from two validated centisecond readings.
|
||||
- Existing packages/cli/tests/case1-accept.test.mjs: an optional script-path argument to run(), defaulting to SCRIPT for every current caller. Only inner/outer P10 fault runs execute the private copy. The baseline still uses SCRIPT. Overflow stays on SCRIPT and unchanged.
|
||||
- agents/gander/work/queue-299/: plan, assertion-preservation record, manifest, raw logs, load/timing receipts and mutant records after authorization. No production path in the candidate manifest.
|
||||
|
||||
Observer details:
|
||||
|
||||
1. Locate exactly one `tester_capture() (` function, scoped before the unique row276-legacy marker. Each insertion anchor must occur once within that slice. Never apply an unscoped global replace.
|
||||
2. Just before :238 and just after :244, use shell `read` on /proc/uptime plus `printf` to append `begin <uptime>` / `end <uptime>` to ROW299_TIMING_FILE, only when `maximum` is 128. Selecting the existing probe cap, rather than the 2/4 budgets, keeps the observer active when a timer mutant changes a budget. Config query uses 4096 and emits no probe pair.
|
||||
3. Read and printf are Bash builtins: no new process or Python/Node startup inside the timed span. Preserve `$rc` and every original command, redirection and heredoc byte. Do not emit observer bytes on stdout/stderr. The file is private fixture evidence, not a product authority channel.
|
||||
4. The copy retains the original absolute /proc reads and the --root fixture seam. The script has no relative self-path imports. Write the copy under h.dir with executable mode and pass the private timing path only to that run. No product script is rewritten.
|
||||
5. Reverse the two recorded insertions and assert byte equality with freshly read SCRIPT. This applies to the current script, including a deliberately mutated source, rather than a stale frozen healthy copy. The same source/copy comparison and unique anchors fail closed on drift.
|
||||
6. Parser requires exactly one newline-terminated begin and end pair, in that order, each `<integer>.<two digits>`, and end strictly above begin. No extra pair, missing value, NaN or negative interval is accepted. Use integer centiseconds before converting to seconds. A 10 ms clock resolution is much smaller than the existing 0.5 s window gap.
|
||||
7. Keep inner [1.25,2.75) and outer [3.25,4.75) exactly. Change only the source of probeSeconds and its diagnostic description. Preserve every existing status/reason/no-observed/residual/cleanup assertion, including the healthy baseline checks. The existing 7 s fixture safety guard stays unchanged and remains cleanup only, never proof of an outer timeout. If it intervenes or masks a measurement, stop for Sage/Mos; do not silently extend it.
|
||||
|
||||
## Review focus
|
||||
|
||||
- A delayed healthy baseline cannot change the measured interval: it is diagnostic only. No baseline value enters readProbeSeconds or a timing assertion.
|
||||
- A child delayed after timer arming is not used as the start observer. The begin read precedes timer launch in the root-side capture copy.
|
||||
- Missing/duplicated/reversed records fail before a band assertion. Add named observer-record tests; no fallback to the old arithmetic.
|
||||
- A timer mutant reaches the actual observer copy. Source reconstruction and cap-based selection prevent budgets changed to 1/3 seconds from disabling observation.
|
||||
- Observer code must not change stdout, refusal status, cleanup or trust. Preserve original source bytes by inverse comparison and all original non-timing assertion lines by an assertion-preservation receipt.
|
||||
|
||||
## Implementation and evidence sequence (held)
|
||||
|
||||
- [x] Proposal sent in gander-0183; mos-1409 / sage-3181 approve the measurement change. Filbert accepts the observation points and supplies implementation checks I1-I5.
|
||||
- [x] Source 1ec2b9765 adds the helper and observer wiring, plus source/variable, streams/status/trap, and record-validation tests. ASSERTION-PRESERVATION.json lists all six old line replacements; only two original assertion messages change. No runtime or syntax claim.
|
||||
- [ ] Static review on the committed candidate and manifest. Prove scripts/case1-accept.sh and scripts/case2-unit.sh are byte-identical to the approved base, and no unrelated assertion moved. Finalize all mutant anchors with exactly-one checks.
|
||||
- [ ] On Sage CLEAR, first record a passing named base for each killer and then M1-M6 from MUTANT-PLAN.json. Report the actual assertion killed. Every restore is byte-identical and git status is checked. A timeout or survivor stops for placement, not a kill.
|
||||
- [ ] Run case1-accept.test.mjs whole at least three times under load, then CLI whole, as the brief requires. Record ambient load at each of the three starts and throughout each file; >=4 is a target, never a wait condition (mos-1409). No stress process. The whole CLI suite is the required loaded proof; record its load and all exec/hop direct intervals, plus min/max. Do not hold the slot for load.
|
||||
- [ ] Record all timeout limits before launch: per-node-file timeout -k 10; use at least ceil(3x longest receipt)+120, with 900 s for an unknown file. Whole case1 gets 1200 s from the row293 receipt; stack-release 2400 s from its 683.647 s historical receipt; recheck measured maxima before the current gate. Print the full CLI file list and run the package whole with its normal test-file concurrency, so the suite itself supplies the required loaded proof. Use timeout -k 10 5400 around that whole invocation: 3x the row293 1367.764 s CLI receipt plus 120 is 4224 s, below 5400. TMPDIR is fresh short scratch. No runs are authorized now.
|
||||
- [ ] Any old-test red, reason mismatch, fixture-guard intervention, timeout, or survivor goes to Sage/Mos before edits or retry. No carried result from row293. Commit and publish records only in Sage's gap, claimant review move only in a queue gap. Filbert reviews; Sage gates and lands.
|
||||
|
||||
## Static self-review
|
||||
|
||||
The proposal meets the brief's source/fix/mutant items and preserves the 2/4 s distinction and separated numeric windows. No runtime or load-stability claim is made. Timing-copy instrumentation is the main review risk: Filbert must approve the two exact observation points and source-byte reconstruction before execution. Mos approved the changed old-test measurement semantics in mos-1409. The 7 s whole-run fixture guard and scheduling overshoot remain explicit risks to measure, not hidden assertions to relax. No other test or supervisor repair is bundled.
|
||||
|
||||
|
||||
## Implemented static: mos-1409 / sage-3181 and Filbert I1-I5
|
||||
|
||||
Source 1ec2b9765 on base 4a9c536e8. The two observers use `read -r row299_up row299_spare < /proc/uptime`, never the fixture root. Both guard cap 128 and a nonempty `${ROW299_TIMING_FILE-}`. printf is redirected to that absolute private fixture file; grouped stderr goes to /dev/null; errors leave absent evidence which the parser refuses. No observer assigns a production capture variable, changes rc, or touches a trap. New tests assert row299-only read targets and no other assignment; preserve explicit stdout/stderr bytes, exit 87 and the EXIT trap; and reject missing begin/end, duplicate pair, reversed order, nonnumeric/equal/backward readings, and a missing/extra final newline.
|
||||
|
||||
Only inner/outer fault runs receive the absolute timing path and executable 0700 private copy. Every such run reverses its two insertions and compares to a fresh read of SCRIPT, including any timer mutant. Baseline and overflow use SCRIPT; baseline status and clean-session assertions remain unchanged. The clock pair is required by assert.doesNotThrow before applying the unchanged bands. baselineSeconds stays diagnostic only. Capture launch insertion keys on its unique LC_ALL=C prefix rather than the timeout command itself, so M4 (outer removal) reaches execution instead of an anchor refusal.
|
||||
|
||||
M1-M6 have one target each in their defined scope. M5 now suppresses only the begin printf, preserving the constant block and reversal check so the named inner test must reject an end-only record. M6 admits equal readings so the record-validation test must catch it. M1 retains the known startup-overhead risk: save its interval and stop on a survivor, without changing the ruled bands. All production/shared fixture bytes are unchanged. Manifest is the two test/helper paths only. No Node, syntax preflight, test, mutant, queue call, or HTTPS operation has run. The implementation is unverified until Filbert's static read and Sage CLEAR.
|
||||
|
||||
|
||||
## sage-3255 integration, static only
|
||||
|
||||
Rebased all three commits from 4a9c536e8 onto 80793d824 under new branch gander/row299-8079, preserving gander/row299-p10. No conflict. The range-diff has three equal pairs and all per-commit stable patch-ids match. Source is e6751ecab; both manifest blobs equal the approved 1ec2b9765 blobs, so digest 277ace0b is unchanged. Direct test/helper, product case1 script, shared CLI helper and sudo-fixture paths have zero drift over 4a9c536e8..80793d824. Row294's CLI config/access and stack-release-test changes are in the new base and covered by the required full CLI suite. No package/source/test implementation changed in this integration. Full records in integration-8079/.
|
||||
|
||||
Gate remains held for CLEAR. Ambient load >=4 remains a target, not a wait condition under mos-1409; no stress process. Record each of three whole case1 starts and the whole CLI suite's load and per-mode direct timings. Numeric windows and the 7 s guard remain fixed. Any red, guard intervention, timeout, survivor or overshoot stops to Sage for Mos before edits or retry.
|
||||
|
||||
## Gate run 1: sage-3268, 2026-10-23
|
||||
|
||||
GREEN on ffa93b054 / 277ace0b. Three whole case1 runs 53/0/0 each; whole CLI 917/0/0 across 59 files. Total 1076/0/0, no cancelled/todo. M1-M6 all killed at their intended assertions, with byte-identical clean restores. No unmutated guard intervention, external timeout, retry or carry. UTC run 07:26:52–07:50:16 (1404 s). CLI load reached 7.17; direct CLI intervals inner exec/hop 2.27/2.27, outer exec/hop 4.01/4.01.
|
||||
|
||||
M4 follows sage-3273 / mos-1426: the 7 s fixture guard returned, then exact outer-reason assertion at case1-accept.test.mjs:445 failed on probe-inner-command. No timeout or cleanup-only kill. M1 measured 1.23 s, preserving the noted narrow kill margin. Sweep found zero gate residuals; four MCP harness processes predate this run. Full records, load samples, assertion locations and named base evidence are in run1/RESULTS.md and run1/results.json. Manifest remains unchanged.
|
||||
@@ -1,2 +0,0 @@
|
||||
7ac9d29281d4076bf2e00b7a07294cd4519d7ae9f97c4f6ddc1d22440c9b071a packages/cli/tests/case-p10-timing-fixture.mjs
|
||||
685cf69c741540240c5b414e1907e624cbc59656541316f178d377472fad34a2 packages/cli/tests/case1-accept.test.mjs
|
||||
@@ -1,73 +0,0 @@
|
||||
{
|
||||
"status": "Static definitions finalized; no mutant executed",
|
||||
"mutants": [
|
||||
{
|
||||
"id": "M1",
|
||||
"path": "scripts/case1-accept.sh",
|
||||
"old": "tester_capture 2 4 128",
|
||||
"new": "tester_capture 1 4 128",
|
||||
"killer": "row253 C4 P10 inner reason holds under both sudo models",
|
||||
"expected": "exact inner-timeout reason remains valid, but direct probe interval is below 1.25 s; ERR_ASSERTION on the existing lower-band check",
|
||||
"static_anchor_count": 1,
|
||||
"source_sha256": "89b45bb84e8365f32f08fd055c7db8a0259533f23fe7ab03f484acb25bee92c2",
|
||||
"receipt_requirement": "Record direct interval even if it survives; startup overhead can erase the 0.25 s kill margin. Survivor stops to Sage/Mos; bands unchanged."
|
||||
},
|
||||
{
|
||||
"id": "M2",
|
||||
"path": "scripts/case1-accept.sh",
|
||||
"old": "tester_capture 2 4 128",
|
||||
"new": "tester_capture 3 4 128",
|
||||
"killer": "row253 C4 P10 inner reason holds under both sudo models",
|
||||
"expected": "exact inner-timeout reason remains valid, but direct interval exceeds the unchanged 2.75 s top; ERR_ASSERTION on upper-band check",
|
||||
"static_anchor_count": 1,
|
||||
"source_sha256": "89b45bb84e8365f32f08fd055c7db8a0259533f23fe7ab03f484acb25bee92c2"
|
||||
},
|
||||
{
|
||||
"id": "M3",
|
||||
"path": "scripts/case1-accept.sh",
|
||||
"old": "tester_capture 2 4 128",
|
||||
"new": "tester_capture 2 3 128",
|
||||
"killer": "row253 C4 P10 outer reason holds under both sudo models",
|
||||
"expected": "stalled supervisor still gives exact outer-timeout, but direct interval falls below 3.25 s; ERR_ASSERTION on outer lower-band check",
|
||||
"static_anchor_count": 1,
|
||||
"source_sha256": "89b45bb84e8365f32f08fd055c7db8a0259533f23fe7ab03f484acb25bee92c2"
|
||||
},
|
||||
{
|
||||
"id": "M4",
|
||||
"path": "scripts/case1-accept.sh",
|
||||
"scope": "tester_capture function only",
|
||||
"description": "Remove the trusted outer GNU timeout from the capture invocation, keeping the fixture guard",
|
||||
"killer": "row253 C4 P10 outer reason holds under both sudo models",
|
||||
"expected": "the fixture safety guard permits return but the exact probe-outer-timeout assertion fails; never count external command timeout or cleanup alone as a kill",
|
||||
"scope_begin": "tester_capture() (\n",
|
||||
"scope_end": "# row276-legacy-begin",
|
||||
"old": "LC_ALL=C \"$TS_TIMEOUT\" --verbose --signal=KILL \"${outer}s\" \"$TS_BASH\" -c ",
|
||||
"new": "LC_ALL=C \"$TS_BASH\" -c ",
|
||||
"static_anchor_count": 1,
|
||||
"source_sha256": "89b45bb84e8365f32f08fd055c7db8a0259533f23fe7ab03f484acb25bee92c2"
|
||||
},
|
||||
{
|
||||
"id": "M5",
|
||||
"path": "packages/cli/tests/case-p10-timing-fixture.mjs",
|
||||
"description": "Suppress the begin printf while retaining the inserted begin block and reversal check",
|
||||
"killer": "row253 C4 P10 inner reason holds under both sudo models",
|
||||
"expected": "the existing inner test requires a valid pair with assert.doesNotThrow; end-only evidence fails ERR_ASSERTION",
|
||||
"old": "printf 'begin %s\\\\n' \"$row299_up\" >> \"$ROW299_TIMING_FILE\";",
|
||||
"new": ":;",
|
||||
"static_anchor_count": 1,
|
||||
"source_sha256": "7ac9d29281d4076bf2e00b7a07294cd4519d7ae9f97c4f6ddc1d22440c9b071a"
|
||||
},
|
||||
{
|
||||
"id": "M6",
|
||||
"path": "packages/cli/tests/case-p10-timing-fixture.mjs",
|
||||
"description": "Accept an equal begin/end clock pair",
|
||||
"killer": "row299 P10 observer records are complete and ordered",
|
||||
"expected": "the equal-readings case in the named record test expects refusal and fails ERR_ASSERTION",
|
||||
"old": "end <= begin",
|
||||
"new": "end < begin",
|
||||
"static_anchor_count": 1,
|
||||
"source_sha256": "7ac9d29281d4076bf2e00b7a07294cd4519d7ae9f97c4f6ddc1d22440c9b071a"
|
||||
}
|
||||
],
|
||||
"restore": "Restore byte-identical source/test/helper files and require clean git status between cases. Timeout is a stop, never a kill."
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
b0ca08db7968e92d417960e58112d767d54902e4d1121f97d4eef2152a2340eb agents/gander/work/queue-299/ASSERTION-PRESERVATION.json
|
||||
3cc775b0c0e78d0aca5396aba4380a0bdd38d421b144dceea4124323ddfd1bc4 agents/gander/work/queue-299/BASE.json
|
||||
132cd793d5f9daa93c879d073dd1fa1d1568b07851b707a3c0b519ed64e9a63a agents/gander/work/queue-299/BUILD.md
|
||||
277ace0b4274970d5bd4c05cf8fe99aa1e7ebc469a719e4cefcb334a75d3865d agents/gander/work/queue-299/MANIFEST.sha256
|
||||
ff72c99b4b73cfe2acbaf79eb9aed442c855f011fe662722acba7f8a388d3f9b agents/gander/work/queue-299/MUTANT-PLAN.json
|
||||
7657e629dab262aaeb46004526ede586a167675558a72b6177abf7e646ce6885 agents/gander/work/queue-299/integration-8079/CHECKS.json
|
||||
b6632cb58ccfc79262f98322682cfd2887e102436cdd1af9e8ac37d2a482b9d8 agents/gander/work/queue-299/integration-8079/range-diff.txt
|
||||
@@ -1,35 +0,0 @@
|
||||
{
|
||||
"base": "80793d824e05baaef4820f4be7790aba55971b6f",
|
||||
"rebased_source": "e6751ecab",
|
||||
"rebased_tip_before_records": "bc7da6814",
|
||||
"conflicts": [],
|
||||
"range_diff": "all three pairs equal",
|
||||
"patch_ids": [
|
||||
{
|
||||
"old": "31c847580",
|
||||
"new": "482adc255",
|
||||
"patch_id": "224e6ce7677320cf362189ad2746c481176c3429"
|
||||
},
|
||||
{
|
||||
"old": "1ec2b9765",
|
||||
"new": "e6751ecab",
|
||||
"patch_id": "dec31bc01820a54fa4001fda4886905576a6b692"
|
||||
},
|
||||
{
|
||||
"old": "9872b5ab5",
|
||||
"new": "bc7da6814",
|
||||
"patch_id": "f335941005f9c113aa09a800a3569d2447be3464"
|
||||
}
|
||||
],
|
||||
"checked_paths": [
|
||||
"packages/cli/tests/case1-accept.test.mjs",
|
||||
"packages/cli/tests/case-p10-timing-fixture.mjs",
|
||||
"scripts/case1-accept.sh",
|
||||
"packages/cli/tests/helpers.mjs",
|
||||
"packages/cli/tests/case-sudo-fixture.mjs"
|
||||
],
|
||||
"drift": "",
|
||||
"manifest": "277ace0b4274970d5bd4c05cf8fe99aa1e7ebc469a719e4cefcb334a75d3865d",
|
||||
"test_blobs_match_static_approved_1ec2b9765": true,
|
||||
"runtime": "Not run; awaiting Sage CLEAR. No queue/Node/tests executed."
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
1: 31c847580 = 1: 482adc255 docs(row299): propose direct P10 wait timing for mos-1272 review
|
||||
2: 1ec2b9765 = 2: e6751ecab test(case): observe P10 wait directly under mos-1409
|
||||
3: 9872b5ab5 = 3: bc7da6814 docs(row299): record mos-1409 preservation and static candidate
|
||||
@@ -1 +0,0 @@
|
||||
CLEAR
|
||||
@@ -1,18 +0,0 @@
|
||||
{
|
||||
"label": "M1-syntax",
|
||||
"argv": [
|
||||
"timeout",
|
||||
"-k",
|
||||
"10",
|
||||
"120",
|
||||
"bash",
|
||||
"-n",
|
||||
"scripts/case1-accept.sh"
|
||||
],
|
||||
"limit_seconds": 120,
|
||||
"tmpdir": "/mnt/storage/scratch/tmp/gh8s2Og",
|
||||
"started_utc": "2026-10-23T07:49:28Z",
|
||||
"start_load": "1.51 2.50 2.68 3/5810 1153451",
|
||||
"log": "/mnt/storage/scratch/tmp/gABO62Q/records/M1-syntax.log",
|
||||
"expected_red": false
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
[
|
||||
{
|
||||
"wall_seconds": 0.0,
|
||||
"utc": "2026-10-23T07:49:28Z",
|
||||
"load": "1.51 2.50 2.68 2/5811 1153452"
|
||||
}
|
||||
]
|
||||
Whitespace-only changes.
@@ -1 +0,0 @@
|
||||
CLEAR
|
||||
@@ -1,21 +0,0 @@
|
||||
{
|
||||
"label": "M1",
|
||||
"argv": [
|
||||
"timeout",
|
||||
"-k",
|
||||
"10",
|
||||
"1200",
|
||||
"node",
|
||||
"--test",
|
||||
"--test-reporter=tap",
|
||||
"--test-name-pattern",
|
||||
"^row253 C4 P10 inner reason holds under both sudo models$",
|
||||
"packages/cli/tests/case1-accept.test.mjs"
|
||||
],
|
||||
"limit_seconds": 1200,
|
||||
"tmpdir": "/mnt/storage/scratch/tmp/gxjj9Vd",
|
||||
"started_utc": "2026-10-23T07:49:30Z",
|
||||
"start_load": "1.51 2.50 2.68 1/5816 1156782",
|
||||
"log": "/mnt/storage/scratch/tmp/gABO62Q/records/M1.log",
|
||||
"expected_red": true
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
[
|
||||
{
|
||||
"wall_seconds": 0.0,
|
||||
"utc": "2026-10-23T07:49:30Z",
|
||||
"load": "1.51 2.50 2.68 3/5817 1156783"
|
||||
}
|
||||
]
|
||||
@@ -1,29 +0,0 @@
|
||||
TAP version 13
|
||||
# Subtest: row253 C4 P10 inner reason holds under both sudo models
|
||||
not ok 1 - row253 C4 P10 inner reason holds under both sudo models
|
||||
---
|
||||
duration_ms: 4641.831075
|
||||
type: 'test'
|
||||
location: '/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case1-accept.test.mjs:421:49'
|
||||
failureType: 'testCodeFailure'
|
||||
error: 'exec: direct probe 1.23s; baseline 1.764558389s is diagnostic only'
|
||||
code: 'ERR_ASSERTION'
|
||||
name: 'AssertionError'
|
||||
expected: true
|
||||
actual: false
|
||||
operator: '=='
|
||||
stack: |-
|
||||
TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case1-accept.test.mjs:450:29)
|
||||
async Test.run (node:internal/test_runner/test:1409:7)
|
||||
async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3)
|
||||
...
|
||||
# {"fault":"inner","mode":"exec","baselineSeconds":1.764558389,"faultSeconds":2.8568522200000004,"probeSeconds":1.23}
|
||||
1..1
|
||||
# tests 1
|
||||
# suites 0
|
||||
# pass 0
|
||||
# fail 1
|
||||
# cancelled 0
|
||||
# skipped 0
|
||||
# todo 0
|
||||
# duration_ms 4737.590412
|
||||
@@ -1 +0,0 @@
|
||||
CLEAR
|
||||
@@ -1,18 +0,0 @@
|
||||
{
|
||||
"label": "M2-syntax",
|
||||
"argv": [
|
||||
"timeout",
|
||||
"-k",
|
||||
"10",
|
||||
"120",
|
||||
"bash",
|
||||
"-n",
|
||||
"scripts/case1-accept.sh"
|
||||
],
|
||||
"limit_seconds": 120,
|
||||
"tmpdir": "/mnt/storage/scratch/tmp/gZ30EQX",
|
||||
"started_utc": "2026-10-23T07:49:36Z",
|
||||
"start_load": "1.47 2.48 2.67 1/5822 1162481",
|
||||
"log": "/mnt/storage/scratch/tmp/gABO62Q/records/M2-syntax.log",
|
||||
"expected_red": false
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
[
|
||||
{
|
||||
"wall_seconds": 0.0,
|
||||
"utc": "2026-10-23T07:49:36Z",
|
||||
"load": "1.47 2.48 2.67 3/5823 1162482"
|
||||
}
|
||||
]
|
||||
Whitespace-only changes.
@@ -1 +0,0 @@
|
||||
CLEAR
|
||||
@@ -1,21 +0,0 @@
|
||||
{
|
||||
"label": "M2",
|
||||
"argv": [
|
||||
"timeout",
|
||||
"-k",
|
||||
"10",
|
||||
"1200",
|
||||
"node",
|
||||
"--test",
|
||||
"--test-reporter=tap",
|
||||
"--test-name-pattern",
|
||||
"^row253 C4 P10 inner reason holds under both sudo models$",
|
||||
"packages/cli/tests/case1-accept.test.mjs"
|
||||
],
|
||||
"limit_seconds": 1200,
|
||||
"tmpdir": "/mnt/storage/scratch/tmp/gYr4G6o",
|
||||
"started_utc": "2026-10-23T07:49:37Z",
|
||||
"start_load": "1.47 2.48 2.67 1/5823 1165689",
|
||||
"log": "/mnt/storage/scratch/tmp/gABO62Q/records/M2.log",
|
||||
"expected_red": true
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
[
|
||||
{
|
||||
"wall_seconds": 0.0,
|
||||
"utc": "2026-10-23T07:49:37Z",
|
||||
"load": "1.47 2.48 2.67 3/5824 1165690"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 5.001,
|
||||
"utc": "2026-10-23T07:49:42Z",
|
||||
"load": "1.43 2.45 2.66 3/5865 1168855"
|
||||
}
|
||||
]
|
||||
@@ -1,29 +0,0 @@
|
||||
TAP version 13
|
||||
# Subtest: row253 C4 P10 inner reason holds under both sudo models
|
||||
not ok 1 - row253 C4 P10 inner reason holds under both sudo models
|
||||
---
|
||||
duration_ms: 6624.625527
|
||||
type: 'test'
|
||||
location: '/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case1-accept.test.mjs:421:49'
|
||||
failureType: 'testCodeFailure'
|
||||
error: 'exec: direct probe 3.24s; baseline 1.754618234s is diagnostic only'
|
||||
code: 'ERR_ASSERTION'
|
||||
name: 'AssertionError'
|
||||
expected: true
|
||||
actual: false
|
||||
operator: '=='
|
||||
stack: |-
|
||||
TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case1-accept.test.mjs:450:29)
|
||||
async Test.run (node:internal/test_runner/test:1409:7)
|
||||
async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3)
|
||||
...
|
||||
# {"fault":"inner","mode":"exec","baselineSeconds":1.754618234,"faultSeconds":4.849417662,"probeSeconds":3.24}
|
||||
1..1
|
||||
# tests 1
|
||||
# suites 0
|
||||
# pass 0
|
||||
# fail 1
|
||||
# cancelled 0
|
||||
# skipped 0
|
||||
# todo 0
|
||||
# duration_ms 6718.852297
|
||||
@@ -1,6 +0,0 @@
|
||||
CLEAR
|
||||
/mnt/storage/scratch/sage-busy-now.sh: line 4: /proc/1169351/cmdline: No such file or directory
|
||||
/mnt/storage/scratch/sage-busy-now.sh: line 4: /proc/1169352/cmdline: No such file or directory
|
||||
/mnt/storage/scratch/sage-busy-now.sh: line 4: /proc/1169353/cmdline: No such file or directory
|
||||
/mnt/storage/scratch/sage-busy-now.sh: line 4: /proc/1169354/cmdline: No such file or directory
|
||||
/mnt/storage/scratch/sage-busy-now.sh: line 4: /proc/1169382/cmdline: No such file or directory
|
||||
@@ -1,18 +0,0 @@
|
||||
{
|
||||
"label": "M3-syntax",
|
||||
"argv": [
|
||||
"timeout",
|
||||
"-k",
|
||||
"10",
|
||||
"120",
|
||||
"bash",
|
||||
"-n",
|
||||
"scripts/case1-accept.sh"
|
||||
],
|
||||
"limit_seconds": 120,
|
||||
"tmpdir": "/mnt/storage/scratch/tmp/gwCkjzX",
|
||||
"started_utc": "2026-10-23T07:49:45Z",
|
||||
"start_load": "1.40 2.43 2.66 2/5844 1172866",
|
||||
"log": "/mnt/storage/scratch/tmp/gABO62Q/records/M3-syntax.log",
|
||||
"expected_red": false
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
[
|
||||
{
|
||||
"wall_seconds": 0.0,
|
||||
"utc": "2026-10-23T07:49:45Z",
|
||||
"load": "1.40 2.43 2.66 4/5845 1172867"
|
||||
}
|
||||
]
|
||||
Whitespace-only changes.
@@ -1,7 +0,0 @@
|
||||
CLEAR
|
||||
/mnt/storage/scratch/sage-busy-now.sh: line 4: /proc/1172650/cmdline: No such file or directory
|
||||
/mnt/storage/scratch/sage-busy-now.sh: line 4: /proc/1172687/cmdline: No such file or directory
|
||||
/mnt/storage/scratch/sage-busy-now.sh: line 4: /proc/1172732/cmdline: No such file or directory
|
||||
/mnt/storage/scratch/sage-busy-now.sh: line 4: /proc/1172780/cmdline: No such file or directory
|
||||
/mnt/storage/scratch/sage-busy-now.sh: line 4: /proc/1172825/cmdline: No such file or directory
|
||||
/mnt/storage/scratch/sage-busy-now.sh: line 4: /proc/1172863/cmdline: No such file or directory
|
||||
@@ -1,21 +0,0 @@
|
||||
{
|
||||
"label": "M3",
|
||||
"argv": [
|
||||
"timeout",
|
||||
"-k",
|
||||
"10",
|
||||
"1200",
|
||||
"node",
|
||||
"--test",
|
||||
"--test-reporter=tap",
|
||||
"--test-name-pattern",
|
||||
"^row253 C4 P10 outer reason holds under both sudo models$",
|
||||
"packages/cli/tests/case1-accept.test.mjs"
|
||||
],
|
||||
"limit_seconds": 1200,
|
||||
"tmpdir": "/mnt/storage/scratch/tmp/g6TrU8V",
|
||||
"started_utc": "2026-10-23T07:49:46Z",
|
||||
"start_load": "1.40 2.43 2.66 2/5868 1176268",
|
||||
"log": "/mnt/storage/scratch/tmp/gABO62Q/records/M3.log",
|
||||
"expected_red": true
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
[
|
||||
{
|
||||
"wall_seconds": 0.0,
|
||||
"utc": "2026-10-23T07:49:46Z",
|
||||
"load": "1.40 2.43 2.66 4/5869 1176269"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 5.001,
|
||||
"utc": "2026-10-23T07:49:51Z",
|
||||
"load": "1.44 2.42 2.65 1/5889 1179184"
|
||||
}
|
||||
]
|
||||
@@ -1,29 +0,0 @@
|
||||
TAP version 13
|
||||
# Subtest: row253 C4 P10 outer reason holds under both sudo models
|
||||
not ok 1 - row253 C4 P10 outer reason holds under both sudo models
|
||||
---
|
||||
duration_ms: 6474.774742
|
||||
type: 'test'
|
||||
location: '/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case1-accept.test.mjs:421:49'
|
||||
failureType: 'testCodeFailure'
|
||||
error: 'exec: direct probe 3.01s; baseline 1.7982556909999998s is diagnostic only'
|
||||
code: 'ERR_ASSERTION'
|
||||
name: 'AssertionError'
|
||||
expected: true
|
||||
actual: false
|
||||
operator: '=='
|
||||
stack: |-
|
||||
TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case1-accept.test.mjs:452:11)
|
||||
async Test.run (node:internal/test_runner/test:1409:7)
|
||||
async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3)
|
||||
...
|
||||
# {"fault":"outer","mode":"exec","baselineSeconds":1.7982556909999998,"faultSeconds":4.664919980999999,"probeSeconds":3.01}
|
||||
1..1
|
||||
# tests 1
|
||||
# suites 0
|
||||
# pass 0
|
||||
# fail 1
|
||||
# cancelled 0
|
||||
# skipped 0
|
||||
# todo 0
|
||||
# duration_ms 6573.218398
|
||||
@@ -1 +0,0 @@
|
||||
CLEAR
|
||||
@@ -1,18 +0,0 @@
|
||||
{
|
||||
"label": "M4-syntax",
|
||||
"argv": [
|
||||
"timeout",
|
||||
"-k",
|
||||
"10",
|
||||
"120",
|
||||
"bash",
|
||||
"-n",
|
||||
"scripts/case1-accept.sh"
|
||||
],
|
||||
"limit_seconds": 120,
|
||||
"tmpdir": "/mnt/storage/scratch/tmp/gRPd59t",
|
||||
"started_utc": "2026-10-23T07:49:54Z",
|
||||
"start_load": "1.41 2.40 2.64 3/5836 1182894",
|
||||
"log": "/mnt/storage/scratch/tmp/gABO62Q/records/M4-syntax.log",
|
||||
"expected_red": false
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
[
|
||||
{
|
||||
"wall_seconds": 0.0,
|
||||
"utc": "2026-10-23T07:49:54Z",
|
||||
"load": "1.41 2.40 2.64 7/5837 1182895"
|
||||
}
|
||||
]
|
||||
Whitespace-only changes.
@@ -1,3 +0,0 @@
|
||||
CLEAR
|
||||
/mnt/storage/scratch/sage-busy-now.sh: line 4: /proc/1182788/cmdline: No such file or directory
|
||||
/mnt/storage/scratch/sage-busy-now.sh: line 4: /proc/1182883/cmdline: No such file or directory
|
||||
@@ -1,21 +0,0 @@
|
||||
{
|
||||
"label": "M4",
|
||||
"argv": [
|
||||
"timeout",
|
||||
"-k",
|
||||
"10",
|
||||
"1200",
|
||||
"node",
|
||||
"--test",
|
||||
"--test-reporter=tap",
|
||||
"--test-name-pattern",
|
||||
"^row253 C4 P10 outer reason holds under both sudo models$",
|
||||
"packages/cli/tests/case1-accept.test.mjs"
|
||||
],
|
||||
"limit_seconds": 1200,
|
||||
"tmpdir": "/mnt/storage/scratch/tmp/gAKhO44",
|
||||
"started_utc": "2026-10-23T07:49:56Z",
|
||||
"start_load": "1.41 2.40 2.64 8/5839 1186447",
|
||||
"log": "/mnt/storage/scratch/tmp/gABO62Q/records/M4.log",
|
||||
"expected_red": true
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
[
|
||||
{
|
||||
"wall_seconds": 0.001,
|
||||
"utc": "2026-10-23T07:49:56Z",
|
||||
"load": "1.41 2.40 2.64 8/5838 1186448"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 5.001,
|
||||
"utc": "2026-10-23T07:50:01Z",
|
||||
"load": "1.54 2.41 2.64 5/5866 1190264"
|
||||
}
|
||||
]
|
||||
@@ -1,92 +0,0 @@
|
||||
TAP version 13
|
||||
# Subtest: row253 C4 P10 outer reason holds under both sudo models
|
||||
not ok 1 - row253 C4 P10 outer reason holds under both sudo models
|
||||
---
|
||||
duration_ms: 8880.927284
|
||||
type: 'test'
|
||||
location: '/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case1-accept.test.mjs:421:49'
|
||||
failureType: 'testCodeFailure'
|
||||
error: |-
|
||||
The input did not match the regular expression /P10 tester-socket-squat unnamed boundary=failed reason=probe-outer-timeout /. Input:
|
||||
|
||||
'F1 units-user pass [email protected] and mosaic-webui.service are active as mosaic (uid 997)\n' +
|
||||
'F2 console-loopback pass healthz answers, and 732 is bound to 127.0.0.1 only, by MainPID 200\n' +
|
||||
'F3 tester-reply pass chief replied to case1-accept-e61888cb4c54\n' +
|
||||
'F4 precheck pass case2-precheck.sh --profile factory exits 0\n' +
|
||||
"F5 bwrap-label pass bwrap 300 reads 'bwrap (enforce)' and its claude descendant 302 reads 'bwrap//&unpriv_bwrap (enforce)'\n" +
|
||||
"F6 claude-pin pass /opt/mosaic-stack/claude-2.1.0/node_modules/@anthropic-ai/claude-code/bin/claude.exe prints '2.1.0 (Claude Code)'\n" +
|
||||
'F7 pm-live pass one live launch: pm run r-0002\n' +
|
||||
"F8 credential-file pass /srv/mosaic/.config/mosaic-dev/secrets/claude-session.env is 'mosaic 600 regular file'\n" +
|
||||
'F9 autoupdater-off pass /etc/claude-code/managed-settings.json is root:root 0644 with env.DISABLE_AUTOUPDATER "1"\n' +
|
||||
'F10 node-pin pass /opt/mosaic-stack/node-v24.1.0/bin/node prints v24.1.0\n' +
|
||||
'F11 no-discord pass /srv/mosaic/.mosaic-dev/discord is absent\n' +
|
||||
'P1 mosaic-sudo closed sudo -l: User mosaic is not allowed to run sudo on dev-53.\n' +
|
||||
"P2 mosaic-groups-keys closed id -G is '997'; authorized_keys is absent\n" +
|
||||
'P3 localadmin-sudo accepted Q183 sudo -l -U localadmin lists 1 NOPASSWD lines\n' +
|
||||
"P4 pve-root-pbs accepted Q182+Q183 root on pve over VM 1008, and PBS backups that hold /srv/mosaic with the credential; this script can't see pve\n" +
|
||||
'P5 jarvis-reach closed jarvis is in none of sudo, docker and lxd (groups: jarvis)\n' +
|
||||
'P6 group-members closed sudo holds only localadmin, and docker and lxd have no members\n' +
|
||||
'P7 sudoers-d closed no file under /etc/sudoers.d names mosaic\n' +
|
||||
'P8 lan-listeners closed 732 is on 127.0.0.1 only by MainPID 200; no TCP listener on 7331 or 7333; tester uses /srv/mosaic/.mosaic-dev/console/tester.sock\n' +
|
||||
'P9 bwrap-userns accepted mos-1096 hostcheck items 1-6 ok, jarvis is denied bwrap, and group mosaic has no other member\n' +
|
||||
'P10 tester-socket-squat unnamed boundary=failed reason=probe-inner-command path=/srv/mosaic/.mosaic-dev/console/tester.sock MainPID=200; hostile same-uid substitution remains\n' +
|
||||
'P11 hostcheck-before-bus closed mosaic-hostcheck.service is enabled, and its Before= names [email protected]\n' +
|
||||
'count pass 11\n' +
|
||||
'count FAIL 0\n' +
|
||||
'count closed 7\n' +
|
||||
'count accepted Q182+Q183 1\n' +
|
||||
'count accepted Q183 1\n' +
|
||||
'count accepted mos-1096 1\n' +
|
||||
'count unnamed 1\n' +
|
||||
'case1-accept: every F check passes; send the whole output to Duckworth, and each unnamed line to Mos\n'
|
||||
|
||||
code: 'ERR_ASSERTION'
|
||||
name: 'AssertionError'
|
||||
expected:
|
||||
actual: |-
|
||||
F1 units-user pass [email protected] and mosaic-webui.service are active as mosaic (uid 997)
|
||||
F2 console-loopback pass healthz answers, and 732 is bound to 127.0.0.1 only, by MainPID 200
|
||||
F3 tester-reply pass chief replied to case1-accept-e61888cb4c54
|
||||
F4 precheck pass case2-precheck.sh --profile factory exits 0
|
||||
F5 bwrap-label pass bwrap 300 reads 'bwrap (enforce)' and its claude descendant 302 reads 'bwrap//&unpriv_bwrap (enforce)'
|
||||
F6 claude-pin pass /opt/mosaic-stack/claude-2.1.0/node_modules/@anthropic-ai/claude-code/bin/claude.exe prints '2.1.0 (Claude Code)'
|
||||
F7 pm-live pass one live launch: pm run r-0002
|
||||
F8 credential-file pass /srv/mosaic/.config/mosaic-dev/secrets/claude-session.env is 'mosaic 600 regular file'
|
||||
F9 autoupdater-off pass /etc/claude-code/managed-settings.json is root:root 0644 with env.DISABLE_AUTOUPDATER "1"
|
||||
F10 node-pin pass /opt/mosaic-stack/node-v24.1.0/bin/node prints v24.1.0
|
||||
F11 no-discord pass /srv/mosaic/.mosaic-dev/discord is absent
|
||||
P1 mosaic-sudo closed sudo -l: User mosaic is not allowed to run sudo on dev-53.
|
||||
P2 mosaic-groups-keys closed id -G is '997'; authorized_keys is absent
|
||||
P3 localadmin-sudo accepted Q183 sudo -l -U localadmin lists 1 NOPASSWD lines
|
||||
P4 pve-root-pbs accepted Q182+Q183 root on pve over VM 1008, and PBS backups that hold /srv/mosaic with the credential; this script can't see pve
|
||||
P5 jarvis-reach closed jarvis is in none of sudo, docker and lxd (groups: jarvis)
|
||||
P6 group-members closed sudo holds only localadmin, and docker and lxd have no members
|
||||
P7 sudoers-d closed no file under /etc/sudoers.d names mosaic
|
||||
P8 lan-listeners closed 732 is on 127.0.0.1 only by MainPID 200; no TCP listener on 7331 or 7333; tester uses /srv/mosaic/.mosaic-dev/console/tester.sock
|
||||
P9 bwrap-userns accepted mos-1096 hostcheck items 1-6 ok, jarvis is denied bwrap, and group mosaic has no other member
|
||||
P10 tester-socket-squat unnamed boundary=failed reason=probe-inner-command path=/srv/mosaic/.mosaic-dev/console/tester.sock MainPID=200; hostile same-uid substitution remains
|
||||
P11 hostcheck-before-bus closed mosaic-hostcheck.service is enabled, and its Before= names [email protected]
|
||||
count pass 11
|
||||
count FAIL 0
|
||||
count closed 7
|
||||
count accepted Q182+Q183 1
|
||||
count accepted Q183 1
|
||||
count accepted mos-1096 1
|
||||
count unnamed 1
|
||||
case1-accept: every F check passes; send the whole output to Duckworth, and each unnamed line to Mos
|
||||
|
||||
operator: 'match'
|
||||
stack: |-
|
||||
TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case1-accept.test.mjs:445:10)
|
||||
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 8984.292623
|
||||
@@ -1,2 +0,0 @@
|
||||
CLEAR
|
||||
/mnt/storage/scratch/sage-busy-now.sh: line 4: /proc/1193437/cmdline: No such file or directory
|
||||
@@ -1,18 +0,0 @@
|
||||
{
|
||||
"label": "M5-syntax",
|
||||
"argv": [
|
||||
"timeout",
|
||||
"-k",
|
||||
"10",
|
||||
"120",
|
||||
"node",
|
||||
"--check",
|
||||
"packages/cli/tests/case-p10-timing-fixture.mjs"
|
||||
],
|
||||
"limit_seconds": 120,
|
||||
"tmpdir": "/mnt/storage/scratch/tmp/g8waDyO",
|
||||
"started_utc": "2026-10-23T07:50:06Z",
|
||||
"start_load": "1.65 2.42 2.65 2/5826 1197030",
|
||||
"log": "/mnt/storage/scratch/tmp/gABO62Q/records/M5-syntax.log",
|
||||
"expected_red": false
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
[
|
||||
{
|
||||
"wall_seconds": 0.0,
|
||||
"utc": "2026-10-23T07:50:06Z",
|
||||
"load": "1.65 2.42 2.65 4/5827 1197031"
|
||||
}
|
||||
]
|
||||
Whitespace-only changes.
@@ -1,2 +0,0 @@
|
||||
CLEAR
|
||||
/mnt/storage/scratch/sage-busy-now.sh: line 4: /proc/1197017/cmdline: No such file or directory
|
||||
@@ -1,21 +0,0 @@
|
||||
{
|
||||
"label": "M5",
|
||||
"argv": [
|
||||
"timeout",
|
||||
"-k",
|
||||
"10",
|
||||
"1200",
|
||||
"node",
|
||||
"--test",
|
||||
"--test-reporter=tap",
|
||||
"--test-name-pattern",
|
||||
"^row253 C4 P10 inner reason holds under both sudo models$",
|
||||
"packages/cli/tests/case1-accept.test.mjs"
|
||||
],
|
||||
"limit_seconds": 1200,
|
||||
"tmpdir": "/mnt/storage/scratch/tmp/gdAgQSv",
|
||||
"started_utc": "2026-10-23T07:50:07Z",
|
||||
"start_load": "1.65 2.42 2.65 2/5824 1200489",
|
||||
"log": "/mnt/storage/scratch/tmp/gABO62Q/records/M5.log",
|
||||
"expected_red": true
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
[
|
||||
{
|
||||
"wall_seconds": 0.0,
|
||||
"utc": "2026-10-23T07:50:07Z",
|
||||
"load": "1.65 2.42 2.65 6/5827 1200493"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 5.001,
|
||||
"utc": "2026-10-23T07:50:12Z",
|
||||
"load": "1.60 2.40 2.64 2/5882 1203150"
|
||||
}
|
||||
]
|
||||
@@ -1,38 +0,0 @@
|
||||
TAP version 13
|
||||
# Subtest: row253 C4 P10 inner reason holds under both sudo models
|
||||
not ok 1 - row253 C4 P10 inner reason holds under both sudo models
|
||||
---
|
||||
duration_ms: 5653.123684
|
||||
type: 'test'
|
||||
location: '/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case1-accept.test.mjs:421:49'
|
||||
failureType: 'testCodeFailure'
|
||||
error: |-
|
||||
Got unwanted exception: P10 observer pair is required
|
||||
Actual message: "P10 observer needs exactly one complete ordered pair"
|
||||
code: 'ERR_ASSERTION'
|
||||
name: 'AssertionError'
|
||||
actual:
|
||||
error: 'P10 observer needs exactly one complete ordered pair'
|
||||
stack: |-
|
||||
readProbeSeconds (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case-p10-timing-fixture.mjs:56:42)
|
||||
file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case1-accept.test.mjs:448:55
|
||||
getActual (node:assert:580:5)
|
||||
strict.doesNotThrow (node:assert:748:32)
|
||||
TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case1-accept.test.mjs:448:24)
|
||||
async Test.run (node:internal/test_runner/test:1409:7)
|
||||
async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3)
|
||||
operator: 'doesNotThrow'
|
||||
stack: |-
|
||||
TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case1-accept.test.mjs:448:24)
|
||||
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 5762.289353
|
||||
@@ -1 +0,0 @@
|
||||
CLEAR
|
||||
@@ -1,18 +0,0 @@
|
||||
{
|
||||
"label": "M6-syntax",
|
||||
"argv": [
|
||||
"timeout",
|
||||
"-k",
|
||||
"10",
|
||||
"120",
|
||||
"node",
|
||||
"--check",
|
||||
"packages/cli/tests/case-p10-timing-fixture.mjs"
|
||||
],
|
||||
"limit_seconds": 120,
|
||||
"tmpdir": "/mnt/storage/scratch/tmp/gD2IEb2",
|
||||
"started_utc": "2026-10-23T07:50:15Z",
|
||||
"start_load": "1.63 2.39 2.63 1/5845 1206646",
|
||||
"log": "/mnt/storage/scratch/tmp/gABO62Q/records/M6-syntax.log",
|
||||
"expected_red": false
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
[
|
||||
{
|
||||
"wall_seconds": 0.0,
|
||||
"utc": "2026-10-23T07:50:15Z",
|
||||
"load": "1.63 2.39 2.63 4/5846 1206647"
|
||||
}
|
||||
]
|
||||
Whitespace-only changes.
@@ -1 +0,0 @@
|
||||
CLEAR
|
||||
@@ -1,21 +0,0 @@
|
||||
{
|
||||
"label": "M6",
|
||||
"argv": [
|
||||
"timeout",
|
||||
"-k",
|
||||
"10",
|
||||
"1200",
|
||||
"node",
|
||||
"--test",
|
||||
"--test-reporter=tap",
|
||||
"--test-name-pattern",
|
||||
"^row299 P10 observer records are complete and ordered$",
|
||||
"packages/cli/tests/case1-accept.test.mjs"
|
||||
],
|
||||
"limit_seconds": 1200,
|
||||
"tmpdir": "/mnt/storage/scratch/tmp/gAZq1pv",
|
||||
"started_utc": "2026-10-23T07:50:16Z",
|
||||
"start_load": "1.63 2.39 2.63 2/5837 1210084",
|
||||
"log": "/mnt/storage/scratch/tmp/gABO62Q/records/M6.log",
|
||||
"expected_red": true
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
[
|
||||
{
|
||||
"wall_seconds": 0.0,
|
||||
"utc": "2026-10-23T07:50:16Z",
|
||||
"load": "1.63 2.39 2.63 2/5838 1210085"
|
||||
}
|
||||
]
|
||||
@@ -1,29 +0,0 @@
|
||||
TAP version 13
|
||||
# Subtest: row299 P10 observer records are complete and ordered
|
||||
not ok 1 - row299 P10 observer records are complete and ordered
|
||||
---
|
||||
duration_ms: 1.544819
|
||||
type: 'test'
|
||||
location: '/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case1-accept.test.mjs:405:1'
|
||||
failureType: 'testCodeFailure'
|
||||
error: 'Missing expected exception: equal readings'
|
||||
code: 'ERR_ASSERTION'
|
||||
name: 'AssertionError'
|
||||
expected:
|
||||
operator: 'throws'
|
||||
stack: |-
|
||||
TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case1-accept.test.mjs:418:58)
|
||||
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 97.805057
|
||||
@@ -1,78 +0,0 @@
|
||||
ba45d57c9b255311bb220598f90c1a4fb01b420511974c28f102881cbd7df21a agents/gander/work/queue-299/run1/M1-syntax.busy.log
|
||||
0e86c022784e85084f08044940ec6623e736e2eea3e87afe994cebcdaa18c016 agents/gander/work/queue-299/run1/M1-syntax.command.json
|
||||
6552beee45c19264b36614eb09e49f4c24e66521732071036c194b7ab5b6c3ee agents/gander/work/queue-299/run1/M1-syntax.load.json
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 agents/gander/work/queue-299/run1/M1-syntax.log
|
||||
ba45d57c9b255311bb220598f90c1a4fb01b420511974c28f102881cbd7df21a agents/gander/work/queue-299/run1/M1.busy.log
|
||||
9bfeb9cb89dde406b0b8997250139dc1eb925fb17a7d308c59ab628bd46f175d agents/gander/work/queue-299/run1/M1.command.json
|
||||
c834b00bfe2b7fca539cd93a428b7d92b377a93d6a3aad65e33916735e4fca4e agents/gander/work/queue-299/run1/M1.load.json
|
||||
6566b6d9f613a5904d85b0d0032a0dcd29aa81dcdfd363234537594006c1c5d4 agents/gander/work/queue-299/run1/M1.log
|
||||
ba45d57c9b255311bb220598f90c1a4fb01b420511974c28f102881cbd7df21a agents/gander/work/queue-299/run1/M2-syntax.busy.log
|
||||
4c04e5dcd4e7620a50436f09b60dfb5e0177978d765e5f14fc3da301cb91c729 agents/gander/work/queue-299/run1/M2-syntax.command.json
|
||||
827351dfdde96da9bc13133600a6d2997299ed442df774e1c7718c34f02259c1 agents/gander/work/queue-299/run1/M2-syntax.load.json
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 agents/gander/work/queue-299/run1/M2-syntax.log
|
||||
ba45d57c9b255311bb220598f90c1a4fb01b420511974c28f102881cbd7df21a agents/gander/work/queue-299/run1/M2.busy.log
|
||||
4f0f7aef97edc93582921f5b15745bc72b3aae8ba7a71aaa145cd7d78b080af6 agents/gander/work/queue-299/run1/M2.command.json
|
||||
d1ccdfc399964b4a9f61f2ff8eb5304b9556033e1e255467b0887460e56f5ae0 agents/gander/work/queue-299/run1/M2.load.json
|
||||
b80762fb0b571cadaad5fcf5e43e040c533d2aca1cf939ea4247c5c8f50bd176 agents/gander/work/queue-299/run1/M2.log
|
||||
8e62af85b120ec37099cfba76475359132a1ec673b55350da4442a2356f18fb4 agents/gander/work/queue-299/run1/M3-syntax.busy.log
|
||||
019d63399b36b47bdf38730229aabd8edb5c25e27f7f78f462c70963a02aca69 agents/gander/work/queue-299/run1/M3-syntax.command.json
|
||||
d31ae584602d69e1c6d68e1186b45d518741028e5f9ca289ddba6b472638e634 agents/gander/work/queue-299/run1/M3-syntax.load.json
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 agents/gander/work/queue-299/run1/M3-syntax.log
|
||||
2d80452846bb5af54c76122f0647cb850bbf22ed114e17f9fb883b2c41f3d82e agents/gander/work/queue-299/run1/M3.busy.log
|
||||
5619bd5a00679fc783d1f0ef8111570268238fc5cfc3b0586539fece039a0d14 agents/gander/work/queue-299/run1/M3.command.json
|
||||
3ac8b2e351f5b3e016114f7ff45cc71a1d6287c4dc8d52640c6233424afdc59b agents/gander/work/queue-299/run1/M3.load.json
|
||||
d5f21e277400f33779ea94940979bc89ae54c7484a762f373027bf837b98a47a agents/gander/work/queue-299/run1/M3.log
|
||||
ba45d57c9b255311bb220598f90c1a4fb01b420511974c28f102881cbd7df21a agents/gander/work/queue-299/run1/M4-syntax.busy.log
|
||||
c6f7857ef123cddd6190eba9e6b9a3356821bb0b3a797a1b05a2e19d108c5ec7 agents/gander/work/queue-299/run1/M4-syntax.command.json
|
||||
f983475d9ea0c5cbff43d0de9f8514488d20e2d7732af8d050ca10b9fb81c061 agents/gander/work/queue-299/run1/M4-syntax.load.json
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 agents/gander/work/queue-299/run1/M4-syntax.log
|
||||
d2361f293ed1242c07568092784e830638a3da691d01019a18beaff859d96b2a agents/gander/work/queue-299/run1/M4.busy.log
|
||||
f66ae61b9ed0ea5a720f5c2457ecfb8cc610e192cd619ee5433f24af25f17f85 agents/gander/work/queue-299/run1/M4.command.json
|
||||
cd20239485328874f8bbe30acd9470c3874011ef5bb6f39f33ed210b7c4a4f27 agents/gander/work/queue-299/run1/M4.load.json
|
||||
e64c363e8f11574be893acce37a4152c90c31f5547ca6d48780160c556f0db70 agents/gander/work/queue-299/run1/M4.log
|
||||
7c3a3b6bcf027e99e0f3903215f4ffca88d8bff9fb3a8ef92d3b28bfa68ba52a agents/gander/work/queue-299/run1/M5-syntax.busy.log
|
||||
3e0f4c82616fa3fa7274ad91ec3f2baa86b7b22288d7507730e66c8e4809c681 agents/gander/work/queue-299/run1/M5-syntax.command.json
|
||||
e0093f4ad39d9d4342b43c0ed2d7671747870d6d6166d0692eecbf3dc8033645 agents/gander/work/queue-299/run1/M5-syntax.load.json
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 agents/gander/work/queue-299/run1/M5-syntax.log
|
||||
f104c336fdfa56a241f1b769938b71eafbfb237a88b3089309671eb5a8db4f0e agents/gander/work/queue-299/run1/M5.busy.log
|
||||
35f7ce5f6e56047d600633a0e27826f6f54aa585552593bfb4954f8469238f7a agents/gander/work/queue-299/run1/M5.command.json
|
||||
059de490b1a31be3a8c9a02ff49f84b744d057f66d4f55508e637e6b0896b670 agents/gander/work/queue-299/run1/M5.load.json
|
||||
42e0a43b161e61775b0d4bdde73be4c131a8d6edb4aabf14422755e553272a3f agents/gander/work/queue-299/run1/M5.log
|
||||
ba45d57c9b255311bb220598f90c1a4fb01b420511974c28f102881cbd7df21a agents/gander/work/queue-299/run1/M6-syntax.busy.log
|
||||
867359f0e7ebf5516ae1e1147327e9f6e20d48cb2993b46866f9d90a9ebdbecb agents/gander/work/queue-299/run1/M6-syntax.command.json
|
||||
8d1d69b01dffda714da78c7f08e14b7d1db12a788c812ab02d3a3faa6c52d8a6 agents/gander/work/queue-299/run1/M6-syntax.load.json
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 agents/gander/work/queue-299/run1/M6-syntax.log
|
||||
ba45d57c9b255311bb220598f90c1a4fb01b420511974c28f102881cbd7df21a agents/gander/work/queue-299/run1/M6.busy.log
|
||||
3e46e6d020a0fe9782b3e84462f634daed0885c0e992e482f7d815524fe2294e agents/gander/work/queue-299/run1/M6.command.json
|
||||
24e987a747661e01b9e2a28b0580a0be5b16fad57da5c8c35f41b82835ea76ed agents/gander/work/queue-299/run1/M6.load.json
|
||||
8a0f18ea13b69c71a742a755eb7437d06e49679b777880a8db7b4297ae9849d9 agents/gander/work/queue-299/run1/M6.log
|
||||
e8efed810462567a977a64235454f5d59e92dbfb570d5537652c8deb52b9de66 agents/gander/work/queue-299/run1/RESULTS.md
|
||||
e055720cf64d62331a1e957d285d2583bfb3708fc1b9bf951ab8a99a25c5b2e4 agents/gander/work/queue-299/run1/ambient-overlap.json
|
||||
ba45d57c9b255311bb220598f90c1a4fb01b420511974c28f102881cbd7df21a agents/gander/work/queue-299/run1/case1-whole-1.busy.log
|
||||
16ea379e1482e79b380c9a7be82703e735bea7ef80f1e785a032af9198b26c35 agents/gander/work/queue-299/run1/case1-whole-1.command.json
|
||||
d87a93023d545cd38fcf0a77577c88326897700325fbecd84fd8287a26b33864 agents/gander/work/queue-299/run1/case1-whole-1.load.json
|
||||
c4d7cf6a001a6741af3aa0e0615989327f63fe92999e8fb6d46c2d30f8c08f09 agents/gander/work/queue-299/run1/case1-whole-1.log
|
||||
ba45d57c9b255311bb220598f90c1a4fb01b420511974c28f102881cbd7df21a agents/gander/work/queue-299/run1/case1-whole-2.busy.log
|
||||
4b69775fb03d9fa56a9eef0c9dc8f3cb00013aa4d601f433519ef1dafcc2544c agents/gander/work/queue-299/run1/case1-whole-2.command.json
|
||||
62c4cc338455841d9faf1198acddc3f3204346800e2db7222d1fc33aba189fe3 agents/gander/work/queue-299/run1/case1-whole-2.load.json
|
||||
2ed90fe79a18f794363c47e34440b877a3ffa1256f9a5badb31b317ecbc2fb7b agents/gander/work/queue-299/run1/case1-whole-2.log
|
||||
56d73910ed8d6773724be75e02506a365e5e03c4c98be07a32d49957f24b3e4a agents/gander/work/queue-299/run1/case1-whole-3.busy.log
|
||||
a9225b3ae990e328d739d9259b5dfce0391d5054dedd074f53b81c92e7225c1a agents/gander/work/queue-299/run1/case1-whole-3.command.json
|
||||
dc440ef86b769bf498ed9fcaa178ef9098f7bb9233dd625579d344464c00b11a agents/gander/work/queue-299/run1/case1-whole-3.load.json
|
||||
a803a8e73902337b63d229d0703d45ec9fccd7a1930e192d322d4cc79b9774d6 agents/gander/work/queue-299/run1/case1-whole-3.log
|
||||
ba45d57c9b255311bb220598f90c1a4fb01b420511974c28f102881cbd7df21a agents/gander/work/queue-299/run1/cli-whole.busy.log
|
||||
e3ea8c0434fb979a4943f1bfab1984ff8b919bb062945803e1ddcaa61170d1a5 agents/gander/work/queue-299/run1/cli-whole.command.json
|
||||
db54ea06016fa065f25ed62f5704757a727ff37009e010fa43b1e297bfb2b51b agents/gander/work/queue-299/run1/cli-whole.load.json
|
||||
5222a0807a5ed3d8548711d09e7d3b09504f18b5f3f095c2529b4eedf5a2846b agents/gander/work/queue-299/run1/cli-whole.log
|
||||
d58a500c8e125540aeee461cde68aa6bfe65ab386ae15c9af7dfe363a73a9fd2 agents/gander/work/queue-299/run1/controller.log
|
||||
906c08da89e164e214464014edb672f8d389cb3eab70929d994bcff2794ff45a agents/gander/work/queue-299/run1/results.json
|
||||
b7450a29a470bb48c300d630cd8079be283187d372b9bafd0fbaaafb261e9639 agents/gander/work/queue-299/run1/sweep.json
|
||||
ba45d57c9b255311bb220598f90c1a4fb01b420511974c28f102881cbd7df21a agents/gander/work/queue-299/run1/syntax-1.busy.log
|
||||
03471d51f50a2607f65bc6bfc5764119421fedd003bd569b5fc9ce7fa57c6be6 agents/gander/work/queue-299/run1/syntax-1.command.json
|
||||
e429b112499bf432c8f561b02119025476f57f03208ee67a85282802a431de2d agents/gander/work/queue-299/run1/syntax-1.load.json
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 agents/gander/work/queue-299/run1/syntax-1.log
|
||||
ba45d57c9b255311bb220598f90c1a4fb01b420511974c28f102881cbd7df21a agents/gander/work/queue-299/run1/syntax-2.busy.log
|
||||
287a012953621602eaf7eb129a836b2e3be076b72d6da7131b5e605d2bb5c4ff agents/gander/work/queue-299/run1/syntax-2.command.json
|
||||
795e4a257a3836bfe65ddfa5a734ed239145d1add7d543d52263707467e2345d agents/gander/work/queue-299/run1/syntax-2.load.json
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 agents/gander/work/queue-299/run1/syntax-2.log
|
||||
13987615007f93b11780d44e827ce6a9a57e4373f0074a838ca87b762758d053 agents/gander/work/queue-299/run1/window.py
|
||||
@@ -1,38 +0,0 @@
|
||||
# Row 299 gate run 1
|
||||
|
||||
Grant sage-3268. Candidate ffa93b054f28852a75017928d8478bdf9046e717, base 80793d824, manifest 277ace0b4274970d5bd4c05cf8fe99aa1e7ebc469a719e4cefcb334a75d3865d. Run 2026-10-23T07:26:52Z to 2026-10-23T07:50:16Z, 1404 seconds by UTC timestamps. No carried result or retry.
|
||||
|
||||
The preflight passed. All three case1 files and all 59 CLI files ran whole. Unmutated total: 1076 pass, 0 fail, 0 skip, 0 cancelled, 0 todo. Mutants: 6/6 killed by named assertions, no external timeout. All six restores match their original SHA256 and have clean git status. Sweep: 0 gate residuals; four MCP harness processes predate the gate, with start times in sweep.json.
|
||||
|
||||
| Stage | Pass | Fail | Skip | Wall seconds | Start load |
|
||||
| --- | ---: | ---: | ---: | ---: | --- |
|
||||
| case1-whole-1 | 53 | 0 | 0 | 239.134 | 1.05 |
|
||||
| case1-whole-2 | 53 | 0 | 0 | 240.044 | 3.41 |
|
||||
| case1-whole-3 | 53 | 0 | 0 | 235.011 | 2.08 |
|
||||
| cli-whole | 917 | 0 | 0 | 631.848 | 1.91 |
|
||||
|
||||
CLI sampled 1-minute load range: 1.54 to 7.17. Ambient >=4 was a target, not a wait condition. No stress process. Each of the three case1 start loads and the CLI start/load samples are recorded. The direct readings below come from the test diagnostics, with fixed inner [1.25,2.75) and outer [3.25,4.75) bands.
|
||||
|
||||
| Stage | Inner exec | Inner hop | Outer exec | Outer hop |
|
||||
| --- | ---: | ---: | ---: | ---: |
|
||||
| case1-whole-1 | 2.25 | 2.27 | 4 | 4 |
|
||||
| case1-whole-2 | 2.29 | 2.28 | 4 | 4.01 |
|
||||
| case1-whole-3 | 2.25 | 2.26 | 4 | 4 |
|
||||
| cli-whole | 2.27 | 2.27 | 4.01 | 4.01 |
|
||||
|
||||
| Mutant | Named killer | Assertion | Direct interval | Wall seconds |
|
||||
| --- | --- | --- | --- | ---: |
|
||||
| M1 | row253 C4 P10 inner reason holds under both sudo models | case1-accept.test.mjs:450 lower band | 1.23 | 4.774 |
|
||||
| M2 | row253 C4 P10 inner reason holds under both sudo models | case1-accept.test.mjs:450 upper band | 3.24 | 6.768 |
|
||||
| M3 | row253 C4 P10 outer reason holds under both sudo models | case1-accept.test.mjs:452 outer lower band | 3.01 | 6.618 |
|
||||
| M4 | row253 C4 P10 outer reason holds under both sudo models | case1-accept.test.mjs:445 exact probe-outer-timeout reason | not reached | 9.023 |
|
||||
| M5 | row253 C4 P10 inner reason holds under both sudo models | case1-accept.test.mjs:448 required complete pair (doesNotThrow) | not reached | 5.816 |
|
||||
| M6 | row299 P10 observer records are complete and ordered | case1-accept.test.mjs:418 equal readings must refuse (throws) | not reached | 0.164 |
|
||||
|
||||
M1 measured 1.23 s, below 1.25 by only 0.02 s. This is the anticipated startup-overhead risk. It died at the intended lower-band assertion; no tuning or retry was used.
|
||||
|
||||
M4 classification follows sage-3271, sage-3273 and mos-1426. The unchanged 7000 ms fixture guard returned; the named outer test failed with ERR_ASSERTION / match at line 445 because P10 reported reason=probe-inner-command instead of exact reason=probe-outer-timeout. It returned rc 1 in 9.023 s including the baseline. No external command timeout or cleanup-only failure was counted. Raw evidence: M4.log, M4.command.json, results.json guard_return_receipt and clean restore.
|
||||
|
||||
sage-3274 reported a read-only canonical queue polling overlap for receipts window 07:20–07:26Z. It wrote nothing and touched no worktree or test path. This is accepted ambient load, not a rerun condition; ambient-overlap.json keeps the report.
|
||||
|
||||
All raw logs, command headers with timeout -k 10, TMPDIRs, per-stage load samples, controller, results, and restores are in this directory. Every run used a fresh short TMPDIR directly under /mnt/storage/scratch/tmp. No source or assertion changed during the gate.
|
||||
@@ -1,10 +0,0 @@
|
||||
{
|
||||
"source": "sage-3274",
|
||||
"reported_utc": "2026-10-23T07:27:24Z",
|
||||
"window_utc": [
|
||||
"2026-10-23T07:20:00Z",
|
||||
"2026-10-23T07:26:00Z"
|
||||
],
|
||||
"activity": "Read-only canonical queue show 303 every 20 seconds by Duckworth, stopped; no writes or test/worktree paths touched",
|
||||
"classification": "Allowed ambient overlap under mos-1409, no rerun or recheck"
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
CLEAR
|
||||
@@ -1,19 +0,0 @@
|
||||
{
|
||||
"label": "case1-whole-1",
|
||||
"argv": [
|
||||
"timeout",
|
||||
"-k",
|
||||
"10",
|
||||
"1200",
|
||||
"node",
|
||||
"--test",
|
||||
"--test-reporter=tap",
|
||||
"packages/cli/tests/case1-accept.test.mjs"
|
||||
],
|
||||
"limit_seconds": 1200,
|
||||
"tmpdir": "/mnt/storage/scratch/tmp/geSGqXZ",
|
||||
"started_utc": "2026-10-23T07:26:57Z",
|
||||
"start_load": "1.05 1.69 2.00 1/6640 205920",
|
||||
"log": "/mnt/storage/scratch/tmp/gABO62Q/records/case1-whole-1.log",
|
||||
"expected_red": false
|
||||
}
|
||||
@@ -1,242 +0,0 @@
|
||||
[
|
||||
{
|
||||
"wall_seconds": 0.0,
|
||||
"utc": "2026-10-23T07:26:57Z",
|
||||
"load": "1.05 1.69 2.00 5/6641 205921"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 5.001,
|
||||
"utc": "2026-10-23T07:27:02Z",
|
||||
"load": "1.05 1.68 1.99 2/6664 208983"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 10.001,
|
||||
"utc": "2026-10-23T07:27:07Z",
|
||||
"load": "1.12 1.69 1.99 4/6679 212072"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 15.001,
|
||||
"utc": "2026-10-23T07:27:12Z",
|
||||
"load": "1.19 1.69 1.99 4/6676 215231"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 20.001,
|
||||
"utc": "2026-10-23T07:27:17Z",
|
||||
"load": "1.26 1.70 1.99 2/6696 218364"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 25.002,
|
||||
"utc": "2026-10-23T07:27:22Z",
|
||||
"load": "1.24 1.69 1.99 2/6689 221537"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 30.002,
|
||||
"utc": "2026-10-23T07:27:27Z",
|
||||
"load": "1.22 1.67 1.98 2/6683 224753"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 35.002,
|
||||
"utc": "2026-10-23T07:27:32Z",
|
||||
"load": "1.36 1.70 1.99 3/6686 228651"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 40.002,
|
||||
"utc": "2026-10-23T07:27:37Z",
|
||||
"load": "1.33 1.68 1.98 3/6709 231645"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 45.003,
|
||||
"utc": "2026-10-23T07:27:42Z",
|
||||
"load": "1.22 1.66 1.97 2/6719 234495"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 50.003,
|
||||
"utc": "2026-10-23T07:27:47Z",
|
||||
"load": "1.21 1.64 1.97 3/6710 235979"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 55.003,
|
||||
"utc": "2026-10-23T07:27:52Z",
|
||||
"load": "1.27 1.65 1.97 3/6724 238345"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 60.003,
|
||||
"utc": "2026-10-23T07:27:57Z",
|
||||
"load": "1.33 1.66 1.97 4/6734 240013"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 65.004,
|
||||
"utc": "2026-10-23T07:28:02Z",
|
||||
"load": "1.38 1.66 1.97 1/6730 240697"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 70.004,
|
||||
"utc": "2026-10-23T07:28:07Z",
|
||||
"load": "1.43 1.67 1.97 4/6727 243478"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 75.004,
|
||||
"utc": "2026-10-23T07:28:12Z",
|
||||
"load": "1.48 1.67 1.97 2/6745 245706"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 80.004,
|
||||
"utc": "2026-10-23T07:28:17Z",
|
||||
"load": "1.44 1.66 1.96 2/6741 247933"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 85.005,
|
||||
"utc": "2026-10-23T07:28:22Z",
|
||||
"load": "1.48 1.67 1.97 1/6742 249267"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 90.005,
|
||||
"utc": "2026-10-23T07:28:27Z",
|
||||
"load": "1.53 1.68 1.97 1/6710 251793"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 95.005,
|
||||
"utc": "2026-10-23T07:28:32Z",
|
||||
"load": "1.48 1.66 1.96 2/6712 253250"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 100.005,
|
||||
"utc": "2026-10-23T07:28:37Z",
|
||||
"load": "1.53 1.67 1.96 4/6719 256547"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 105.006,
|
||||
"utc": "2026-10-23T07:28:42Z",
|
||||
"load": "1.56 1.68 1.96 5/6721 259938"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 110.006,
|
||||
"utc": "2026-10-23T07:28:47Z",
|
||||
"load": "1.68 1.70 1.97 4/6762 263119"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 115.006,
|
||||
"utc": "2026-10-23T07:28:52Z",
|
||||
"load": "1.86 1.74 1.98 3/6741 266483"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 120.006,
|
||||
"utc": "2026-10-23T07:28:57Z",
|
||||
"load": "2.20 1.81 2.00 2/6714 269932"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 125.006,
|
||||
"utc": "2026-10-23T07:29:02Z",
|
||||
"load": "2.42 1.86 2.02 6/6713 274031"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 130.007,
|
||||
"utc": "2026-10-23T07:29:07Z",
|
||||
"load": "2.55 1.90 2.03 3/6718 277881"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 135.007,
|
||||
"utc": "2026-10-23T07:29:12Z",
|
||||
"load": "2.58 1.91 2.03 2/6741 281990"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 140.007,
|
||||
"utc": "2026-10-23T07:29:17Z",
|
||||
"load": "2.62 1.93 2.04 4/6740 286159"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 145.007,
|
||||
"utc": "2026-10-23T07:29:22Z",
|
||||
"load": "2.73 1.97 2.05 2/6748 290530"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 150.008,
|
||||
"utc": "2026-10-23T07:29:27Z",
|
||||
"load": "2.99 2.04 2.07 2/6701 294400"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 155.008,
|
||||
"utc": "2026-10-23T07:29:32Z",
|
||||
"load": "3.07 2.07 2.08 3/6694 297610"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 160.008,
|
||||
"utc": "2026-10-23T07:29:37Z",
|
||||
"load": "3.15 2.10 2.09 5/6705 300813"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 165.008,
|
||||
"utc": "2026-10-23T07:29:42Z",
|
||||
"load": "3.05 2.10 2.09 2/6703 304321"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 170.008,
|
||||
"utc": "2026-10-23T07:29:47Z",
|
||||
"load": "3.05 2.11 2.10 3/6739 307613"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 175.009,
|
||||
"utc": "2026-10-23T07:29:52Z",
|
||||
"load": "2.97 2.11 2.10 2/6745 310850"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 180.009,
|
||||
"utc": "2026-10-23T07:29:57Z",
|
||||
"load": "2.89 2.11 2.09 4/6709 314125"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 185.009,
|
||||
"utc": "2026-10-23T07:30:02Z",
|
||||
"load": "3.14 2.17 2.12 4/6698 317556"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 190.009,
|
||||
"utc": "2026-10-23T07:30:07Z",
|
||||
"load": "3.93 2.35 2.17 2/6708 321964"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 195.009,
|
||||
"utc": "2026-10-23T07:30:12Z",
|
||||
"load": "3.93 2.38 2.18 2/6713 325120"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 200.01,
|
||||
"utc": "2026-10-23T07:30:17Z",
|
||||
"load": "3.78 2.38 2.18 3/6721 328405"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 205.01,
|
||||
"utc": "2026-10-23T07:30:22Z",
|
||||
"load": "3.80 2.40 2.19 2/6725 331643"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 210.01,
|
||||
"utc": "2026-10-23T07:30:27Z",
|
||||
"load": "3.89 2.45 2.21 5/6714 335757"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 215.01,
|
||||
"utc": "2026-10-23T07:30:32Z",
|
||||
"load": "3.74 2.44 2.21 2/6706 339141"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 220.01,
|
||||
"utc": "2026-10-23T07:30:37Z",
|
||||
"load": "3.60 2.43 2.20 3/6722 342107"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 225.011,
|
||||
"utc": "2026-10-23T07:30:42Z",
|
||||
"load": "3.63 2.46 2.21 4/6716 345179"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 230.011,
|
||||
"utc": "2026-10-23T07:30:47Z",
|
||||
"load": "3.66 2.48 2.22 2/6740 349322"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 235.011,
|
||||
"utc": "2026-10-23T07:30:52Z",
|
||||
"load": "3.53 2.47 2.22 3/6745 352500"
|
||||
}
|
||||
]
|
||||
@@ -1,332 +0,0 @@
|
||||
TAP version 13
|
||||
# Subtest: row253 socket observation uses configured root, metadata and the Console peer without sending bytes
|
||||
ok 1 - row253 socket observation uses configured root, metadata and the Console peer without sending bytes
|
||||
---
|
||||
duration_ms: 1855.818133
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row253 P10 refuses unsafe metadata, wrong peers and an unsafe Python without claiming closure
|
||||
ok 2 - row253 P10 refuses unsafe metadata, wrong peers and an unsafe Python without claiming closure
|
||||
---
|
||||
duration_ms: 29336.896059
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row253 acceptance rejects bad config and unsupported copies before talk
|
||||
ok 3 - row253 acceptance rejects bad config and unsupported copies before talk
|
||||
---
|
||||
duration_ms: 1492.589344
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row253 stalled peer observation ends within its bound without leaving a reader
|
||||
ok 4 - row253 stalled peer observation ends within its bound without leaving a reader
|
||||
---
|
||||
duration_ms: 3995.592937
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row253 P8 refuses both retired TCP and board listeners
|
||||
ok 5 - row253 P8 refuses both retired TCP and board listeners
|
||||
---
|
||||
duration_ms: 3885.105115
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row253 C4 acceptance query inner reason holds under both sudo models
|
||||
ok 6 - row253 C4 acceptance query inner reason holds under both sudo models
|
||||
---
|
||||
duration_ms: 10722.031738
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row253 C4 acceptance query outer reason discards stdout and names residual cleanup
|
||||
ok 7 - row253 C4 acceptance query outer reason discards stdout and names residual cleanup
|
||||
---
|
||||
duration_ms: 14183.471618
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row253 C4 acceptance query overflow is output-limit in both models
|
||||
ok 8 - row253 C4 acceptance query overflow is output-limit in both models
|
||||
---
|
||||
duration_ms: 492.660764
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row299 P10 timing copy preserves shipped bytes and isolates observer variables
|
||||
ok 9 - row299 P10 timing copy preserves shipped bytes and isolates observer variables
|
||||
---
|
||||
duration_ms: 0.874413
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row299 P10 observers preserve stdout stderr status and the EXIT trap
|
||||
ok 10 - row299 P10 observers preserve stdout stderr status and the EXIT trap
|
||||
---
|
||||
duration_ms: 3.117643
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row299 P10 observer records are complete and ordered
|
||||
ok 11 - row299 P10 observer records are complete and ordered
|
||||
---
|
||||
duration_ms: 0.494254
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row253 C4 P10 inner reason holds under both sudo models
|
||||
ok 12 - row253 C4 P10 inner reason holds under both sudo models
|
||||
---
|
||||
duration_ms: 11837.509919
|
||||
type: 'test'
|
||||
...
|
||||
# {"fault":"inner","mode":"exec","baselineSeconds":1.8914214159999974,"faultSeconds":3.974223306999993,"probeSeconds":2.25}
|
||||
# {"fault":"inner","mode":"hop","baselineSeconds":1.8980776110000006,"faultSeconds":4.004310756999999,"probeSeconds":2.27}
|
||||
# Subtest: row253 C4 P10 outer reason holds under both sudo models
|
||||
ok 13 - row253 C4 P10 outer reason holds under both sudo models
|
||||
---
|
||||
duration_ms: 15238.957947
|
||||
type: 'test'
|
||||
...
|
||||
# {"fault":"outer","mode":"exec","baselineSeconds":1.8725320299999875,"faultSeconds":5.715126132999998,"probeSeconds":4}
|
||||
# {"fault":"outer","mode":"hop","baselineSeconds":1.8715896639999992,"faultSeconds":5.726812752999991,"probeSeconds":4}
|
||||
# Subtest: row253 C4 P10 overflow reason holds under both sudo models
|
||||
ok 14 - row253 C4 P10 overflow reason holds under both sudo models
|
||||
---
|
||||
duration_ms: 3757.733977
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: every check passing exits 0, with each P mark and counts that match the lines
|
||||
ok 15 - row 195 accept: every check passing exits 0, with each P mark and counts that match the lines
|
||||
---
|
||||
duration_ms: 1879.003371
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: exits 1 with each F check failing alone, and its line names it
|
||||
ok 16 - row 195 accept: exits 1 with each F check failing alone, and its line names it
|
||||
---
|
||||
duration_ms: 21149.551708
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: F3 fails on exit 0 with no reply line, and its evidence takes talk's error
|
||||
ok 17 - row 195 accept: F3 fails on exit 0 with no reply line, and its evidence takes talk's error
|
||||
---
|
||||
duration_ms: 3936.849005
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: F1 fails on a unit that isn't active or isn't User=mosaic
|
||||
ok 18 - row 195 accept: F1 fails on a unit that isn't active or isn't User=mosaic
|
||||
---
|
||||
duration_ms: 3519.175544
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: F2 fails when healthz doesn't answer and when another pid holds the port
|
||||
ok 19 - row 195 accept: F2 fails when healthz doesn't answer and when another pid holds the port
|
||||
---
|
||||
duration_ms: 3846.383271
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: F5 fails on unpriv_bwrap (enforce), on complain and on a trailing space
|
||||
ok 20 - row 195 accept: F5 fails on unpriv_bwrap (enforce), on complain and on a trailing space
|
||||
---
|
||||
duration_ms: 8775.592742
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: F5 fails with no bwrap of mosaic's, and passes on comm alone
|
||||
ok 21 - row 195 accept: F5 fails with no bwrap of mosaic's, and passes on comm alone
|
||||
---
|
||||
duration_ms: 4053.330344
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: F6 fails on a stub that prints nothing, on a path outside claude-<pin> and on a .. segment
|
||||
ok 22 - row 195 accept: F6 fails on a stub that prints nothing, on a path outside claude-<pin> and on a .. segment
|
||||
---
|
||||
duration_ms: 5151.877925
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: F7 fails on two live PM launches, one for another business, and no launch.by
|
||||
ok 23 - row 195 accept: F7 fails on two live PM launches, one for another business, and no launch.by
|
||||
---
|
||||
duration_ms: 5579.901611
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: F8 fails on 0640, on another owner and on a symlink, and never prints the credential
|
||||
ok 24 - row 195 accept: F8 fails on 0640, on another owner and on a symlink, and never prints the credential
|
||||
---
|
||||
duration_ms: 5585.627061
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: F9 fails on another owner, a group-writable mode and a number for the flag
|
||||
ok 25 - row 195 accept: F9 fails on another owner, a group-writable mode and a number for the flag
|
||||
---
|
||||
duration_ms: 5536.898215
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: F9 won't run --node as root off the pin path or with a writable directory above it
|
||||
ok 26 - row 195 accept: F9 won't run --node as root off the pin path or with a writable directory above it
|
||||
---
|
||||
duration_ms: 5246.446744
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: F11 fails on one *.json under discord/ and passes on an empty directory
|
||||
ok 27 - row 195 accept: F11 fails on one *.json under discord/ and passes on an empty directory
|
||||
---
|
||||
duration_ms: 3711.063365
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: each P check reports unnamed on its fault, and the exit stays 0
|
||||
ok 28 - row 195 accept: each P check reports unnamed on its fault, and the exit stays 0
|
||||
---
|
||||
duration_ms: 16646.70564
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: P2 is unnamed with a supplementary group, and P5 names docker
|
||||
ok 29 - row 195 accept: P2 is unnamed with a supplementary group, and P5 names docker
|
||||
---
|
||||
duration_ms: 3728.983
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: P5 is closed with no jarvis account, and P2 with an empty authorized_keys
|
||||
ok 30 - row 195 accept: P5 is closed with no jarvis account, and P2 with an empty authorized_keys
|
||||
---
|
||||
duration_ms: 1843.108704
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: P9 is unnamed once for each item missing
|
||||
ok 31 - row 195 accept: P9 is unnamed once for each item missing
|
||||
---
|
||||
duration_ms: 9276.56305
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row253 accept: P10 fails its observation with another peer; P11 with the unit disabled
|
||||
ok 32 - row253 accept: P10 fails its observation with another peer; P11 with the unit disabled
|
||||
---
|
||||
duration_ms: 3822.919805
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: every P check unnamed together still exits 0
|
||||
ok 33 - row 195 accept: every P check unnamed together still exits 0
|
||||
---
|
||||
duration_ms: 1656.312404
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: a bad args file refuses with exit 2 before any check, each for its own reason
|
||||
ok 34 - row 195 accept: a bad args file refuses with exit 2 before any check, each for its own reason
|
||||
---
|
||||
duration_ms: 97.36437
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: usage errors and a run without --root as a user exit 2
|
||||
ok 35 - row 195 accept: usage errors and a run without --root as a user exit 2
|
||||
---
|
||||
duration_ms: 10.881957
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: every in-instance call goes through sudo -u mosaic -H env PATH=<node dir>:...
|
||||
ok 36 - row 195 accept: every in-instance call goes through sudo -u mosaic -H env PATH=<node dir>:...
|
||||
---
|
||||
duration_ms: 1850.760145
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: the host check runs with --check and never --enforce
|
||||
ok 37 - row 195 accept: the host check runs with --check and never --enforce
|
||||
---
|
||||
duration_ms: 1869.942933
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row276 legacy call inventory pins every production bound and the conversation contract
|
||||
ok 38 - row276 legacy call inventory pins every production bound and the conversation contract
|
||||
---
|
||||
duration_ms: 0.366334
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row276 talk legacy inner timeout cleans both sudo models
|
||||
ok 39 - row276 talk legacy inner timeout cleans both sudo models
|
||||
---
|
||||
duration_ms: 1692.158566
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row276 precheck legacy inner timeout cleans both sudo models
|
||||
ok 40 - row276 precheck legacy inner timeout cleans both sudo models
|
||||
---
|
||||
duration_ms: 1720.136504
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row276 claude-version legacy inner timeout cleans both sudo models
|
||||
ok 41 - row276 claude-version legacy inner timeout cleans both sudo models
|
||||
---
|
||||
duration_ms: 1702.886014
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row276 pm-list legacy inner timeout cleans both sudo models
|
||||
ok 42 - row276 pm-list legacy inner timeout cleans both sudo models
|
||||
---
|
||||
duration_ms: 1710.920935
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row276 node-version legacy inner timeout cleans both sudo models
|
||||
ok 43 - row276 node-version legacy inner timeout cleans both sudo models
|
||||
---
|
||||
duration_ms: 1712.683898
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row276 legacy streams and display status preserve failures without granting success
|
||||
ok 44 - row276 legacy streams and display status preserve failures without granting success
|
||||
---
|
||||
duration_ms: 2671.771328
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row276 trailer grammar cannot make supervisor failure pass
|
||||
ok 45 - row276 trailer grammar cannot make supervisor failure pass
|
||||
---
|
||||
duration_ms: 2089.079622
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row276 earlier forged trailer and appended zero remain failures
|
||||
ok 46 - row276 earlier forged trailer and appended zero remain failures
|
||||
---
|
||||
duration_ms: 513.433074
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row276 precheck outer bound discards success status and fixture cleans residual
|
||||
ok 47 - row276 precheck outer bound discards success status and fixture cleans residual
|
||||
---
|
||||
duration_ms: 2173.848153
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row276 case1 capture and legacy tools refuse unsafe system tools
|
||||
ok 48 - row276 case1 capture and legacy tools refuse unsafe system tools
|
||||
---
|
||||
duration_ms: 76.5521
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row276 stderr retention is bounded and keeps the final diagnostic
|
||||
ok 49 - row276 stderr retention is bounded and keeps the final diagnostic
|
||||
---
|
||||
duration_ms: 278.525167
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row276 version and PM checks refuse successful-looking stdout on supervisor failure
|
||||
ok 50 - row276 version and PM checks refuse successful-looking stdout on supervisor failure
|
||||
---
|
||||
duration_ms: 15.742297
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row276 full acceptance keeps all five healthy calls in both sudo models
|
||||
ok 51 - row276 full acceptance keeps all five healthy calls in both sudo models
|
||||
---
|
||||
duration_ms: 3757.894895
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row276 vanished pid stat read returns 3 with empty stderr in both scripts
|
||||
ok 52 - row276 vanished pid stat read returns 3 with empty stderr in both scripts
|
||||
---
|
||||
duration_ms: 4.785932
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row276 legacy stdout snapshot preserves exact bytes on success and command failure
|
||||
ok 53 - row276 legacy stdout snapshot preserves exact bytes on success and command failure
|
||||
---
|
||||
duration_ms: 3281.165451
|
||||
type: 'test'
|
||||
...
|
||||
1..53
|
||||
# tests 53
|
||||
# suites 0
|
||||
# pass 53
|
||||
# fail 0
|
||||
# cancelled 0
|
||||
# skipped 0
|
||||
# todo 0
|
||||
# duration_ms 239100.197017
|
||||
@@ -1 +0,0 @@
|
||||
CLEAR
|
||||
@@ -1,19 +0,0 @@
|
||||
{
|
||||
"label": "case1-whole-2",
|
||||
"argv": [
|
||||
"timeout",
|
||||
"-k",
|
||||
"10",
|
||||
"1200",
|
||||
"node",
|
||||
"--test",
|
||||
"--test-reporter=tap",
|
||||
"packages/cli/tests/case1-accept.test.mjs"
|
||||
],
|
||||
"limit_seconds": 1200,
|
||||
"tmpdir": "/mnt/storage/scratch/tmp/gd0qwWL",
|
||||
"started_utc": "2026-10-23T07:30:57Z",
|
||||
"start_load": "3.41 2.47 2.22 4/6666 357541",
|
||||
"log": "/mnt/storage/scratch/tmp/gABO62Q/records/case1-whole-2.log",
|
||||
"expected_red": false
|
||||
}
|
||||
@@ -1,247 +0,0 @@
|
||||
[
|
||||
{
|
||||
"wall_seconds": 0.0,
|
||||
"utc": "2026-10-23T07:30:57Z",
|
||||
"load": "3.41 2.47 2.22 8/6667 357542"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 5.001,
|
||||
"utc": "2026-10-23T07:31:02Z",
|
||||
"load": "3.21 2.44 2.21 6/6697 360865"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 10.001,
|
||||
"utc": "2026-10-23T07:31:07Z",
|
||||
"load": "3.44 2.50 2.23 2/6704 364103"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 15.001,
|
||||
"utc": "2026-10-23T07:31:12Z",
|
||||
"load": "3.24 2.48 2.23 2/6696 367319"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 20.001,
|
||||
"utc": "2026-10-23T07:31:17Z",
|
||||
"load": "3.14 2.47 2.23 8/6721 370622"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 25.002,
|
||||
"utc": "2026-10-23T07:31:22Z",
|
||||
"load": "3.05 2.46 2.22 3/6707 373850"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 30.002,
|
||||
"utc": "2026-10-23T07:31:27Z",
|
||||
"load": "2.89 2.44 2.22 2/6664 377071"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 35.002,
|
||||
"utc": "2026-10-23T07:31:32Z",
|
||||
"load": "2.73 2.41 2.21 2/6679 380056"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 40.002,
|
||||
"utc": "2026-10-23T07:31:37Z",
|
||||
"load": "2.52 2.37 2.20 4/6709 384877"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 45.002,
|
||||
"utc": "2026-10-23T07:31:42Z",
|
||||
"load": "2.71 2.42 2.21 3/6727 386330"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 50.003,
|
||||
"utc": "2026-10-23T07:31:47Z",
|
||||
"load": "2.58 2.39 2.21 1/6740 387775"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 55.003,
|
||||
"utc": "2026-10-23T07:31:52Z",
|
||||
"load": "2.69 2.42 2.22 9/6763 389481"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 60.003,
|
||||
"utc": "2026-10-23T07:31:57Z",
|
||||
"load": "2.56 2.39 2.21 3/6722 390241"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 65.003,
|
||||
"utc": "2026-10-23T07:32:02Z",
|
||||
"load": "2.43 2.37 2.20 4/6732 391752"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 70.004,
|
||||
"utc": "2026-10-23T07:32:07Z",
|
||||
"load": "2.40 2.36 2.20 9/6738 395390"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 75.004,
|
||||
"utc": "2026-10-23T07:32:12Z",
|
||||
"load": "2.44 2.38 2.21 6/6731 398840"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 80.004,
|
||||
"utc": "2026-10-23T07:32:17Z",
|
||||
"load": "2.57 2.40 2.22 3/6790 402895"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 85.004,
|
||||
"utc": "2026-10-23T07:32:22Z",
|
||||
"load": "2.60 2.41 2.22 1/6721 405197"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 90.005,
|
||||
"utc": "2026-10-23T07:32:27Z",
|
||||
"load": "2.48 2.39 2.21 6/6682 407571"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 95.005,
|
||||
"utc": "2026-10-23T07:32:32Z",
|
||||
"load": "2.44 2.38 2.21 3/6688 408595"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 100.005,
|
||||
"utc": "2026-10-23T07:32:37Z",
|
||||
"load": "2.32 2.36 2.21 4/6690 411784"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 105.005,
|
||||
"utc": "2026-10-23T07:32:42Z",
|
||||
"load": "2.38 2.37 2.21 2/6695 414989"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 110.006,
|
||||
"utc": "2026-10-23T07:32:47Z",
|
||||
"load": "2.27 2.35 2.20 2/6747 418296"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 115.006,
|
||||
"utc": "2026-10-23T07:32:52Z",
|
||||
"load": "2.16 2.32 2.20 3/6725 421487"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 120.006,
|
||||
"utc": "2026-10-23T07:32:57Z",
|
||||
"load": "2.31 2.35 2.21 2/6717 424642"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 125.006,
|
||||
"utc": "2026-10-23T07:33:02Z",
|
||||
"load": "2.37 2.36 2.21 2/6711 427881"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 130.007,
|
||||
"utc": "2026-10-23T07:33:07Z",
|
||||
"load": "2.34 2.36 2.21 8/6702 431078"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 135.007,
|
||||
"utc": "2026-10-23T07:33:12Z",
|
||||
"load": "2.55 2.40 2.22 4/6715 434482"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 140.007,
|
||||
"utc": "2026-10-23T07:33:17Z",
|
||||
"load": "2.59 2.41 2.23 8/6722 437629"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 145.007,
|
||||
"utc": "2026-10-23T07:33:22Z",
|
||||
"load": "3.10 2.52 2.27 5/6730 441654"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 150.008,
|
||||
"utc": "2026-10-23T07:33:27Z",
|
||||
"load": "2.93 2.50 2.26 3/6688 445391"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 155.008,
|
||||
"utc": "2026-10-23T07:33:32Z",
|
||||
"load": "2.86 2.49 2.26 2/6720 449750"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 160.008,
|
||||
"utc": "2026-10-23T07:33:37Z",
|
||||
"load": "2.63 2.45 2.24 3/6720 454134"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 165.008,
|
||||
"utc": "2026-10-23T07:33:42Z",
|
||||
"load": "2.58 2.44 2.24 3/6705 458552"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 170.008,
|
||||
"utc": "2026-10-23T07:33:47Z",
|
||||
"load": "2.53 2.43 2.24 2/6751 462649"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 175.009,
|
||||
"utc": "2026-10-23T07:33:52Z",
|
||||
"load": "2.49 2.42 2.24 2/6728 466002"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 180.009,
|
||||
"utc": "2026-10-23T07:33:57Z",
|
||||
"load": "2.37 2.40 2.23 4/6684 469149"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 185.009,
|
||||
"utc": "2026-10-23T07:34:02Z",
|
||||
"load": "2.50 2.43 2.24 10/6506 472229"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 190.009,
|
||||
"utc": "2026-10-23T07:34:07Z",
|
||||
"load": "2.78 2.49 2.26 3/6479 475928"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 195.01,
|
||||
"utc": "2026-10-23T07:34:12Z",
|
||||
"load": "2.64 2.46 2.26 3/6479 479085"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 200.01,
|
||||
"utc": "2026-10-23T07:34:17Z",
|
||||
"load": "2.51 2.44 2.25 3/6502 482380"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 205.01,
|
||||
"utc": "2026-10-23T07:34:22Z",
|
||||
"load": "2.63 2.46 2.26 4/6485 486156"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 210.01,
|
||||
"utc": "2026-10-23T07:34:27Z",
|
||||
"load": "2.50 2.44 2.25 2/6457 489465"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 215.011,
|
||||
"utc": "2026-10-23T07:34:32Z",
|
||||
"load": "2.38 2.41 2.25 2/6462 492613"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 220.011,
|
||||
"utc": "2026-10-23T07:34:37Z",
|
||||
"load": "2.27 2.39 2.24 2/6495 494796"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 225.011,
|
||||
"utc": "2026-10-23T07:34:42Z",
|
||||
"load": "2.08 2.35 2.23 1/6512 496267"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 230.011,
|
||||
"utc": "2026-10-23T07:34:47Z",
|
||||
"load": "2.00 2.33 2.22 2/6527 499579"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 235.012,
|
||||
"utc": "2026-10-23T07:34:52Z",
|
||||
"load": "2.00 2.32 2.22 2/6514 502183"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 240.012,
|
||||
"utc": "2026-10-23T07:34:57Z",
|
||||
"load": "2.00 2.32 2.22 8/6467 505173"
|
||||
}
|
||||
]
|
||||
@@ -1,332 +0,0 @@
|
||||
TAP version 13
|
||||
# Subtest: row253 socket observation uses configured root, metadata and the Console peer without sending bytes
|
||||
ok 1 - row253 socket observation uses configured root, metadata and the Console peer without sending bytes
|
||||
---
|
||||
duration_ms: 1878.940051
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row253 P10 refuses unsafe metadata, wrong peers and an unsafe Python without claiming closure
|
||||
ok 2 - row253 P10 refuses unsafe metadata, wrong peers and an unsafe Python without claiming closure
|
||||
---
|
||||
duration_ms: 29659.298682
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row253 acceptance rejects bad config and unsupported copies before talk
|
||||
ok 3 - row253 acceptance rejects bad config and unsupported copies before talk
|
||||
---
|
||||
duration_ms: 1402.898543
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row253 stalled peer observation ends within its bound without leaving a reader
|
||||
ok 4 - row253 stalled peer observation ends within its bound without leaving a reader
|
||||
---
|
||||
duration_ms: 3999.716359
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row253 P8 refuses both retired TCP and board listeners
|
||||
ok 5 - row253 P8 refuses both retired TCP and board listeners
|
||||
---
|
||||
duration_ms: 3772.509207
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row253 C4 acceptance query inner reason holds under both sudo models
|
||||
ok 6 - row253 C4 acceptance query inner reason holds under both sudo models
|
||||
---
|
||||
duration_ms: 10718.848845
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row253 C4 acceptance query outer reason discards stdout and names residual cleanup
|
||||
ok 7 - row253 C4 acceptance query outer reason discards stdout and names residual cleanup
|
||||
---
|
||||
duration_ms: 14188.226585
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row253 C4 acceptance query overflow is output-limit in both models
|
||||
ok 8 - row253 C4 acceptance query overflow is output-limit in both models
|
||||
---
|
||||
duration_ms: 508.639752
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row299 P10 timing copy preserves shipped bytes and isolates observer variables
|
||||
ok 9 - row299 P10 timing copy preserves shipped bytes and isolates observer variables
|
||||
---
|
||||
duration_ms: 0.798822
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row299 P10 observers preserve stdout stderr status and the EXIT trap
|
||||
ok 10 - row299 P10 observers preserve stdout stderr status and the EXIT trap
|
||||
---
|
||||
duration_ms: 3.117025
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row299 P10 observer records are complete and ordered
|
||||
ok 11 - row299 P10 observer records are complete and ordered
|
||||
---
|
||||
duration_ms: 0.531705
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row253 C4 P10 inner reason holds under both sudo models
|
||||
ok 12 - row253 C4 P10 inner reason holds under both sudo models
|
||||
---
|
||||
duration_ms: 12501.629468
|
||||
type: 'test'
|
||||
...
|
||||
# {"fault":"inner","mode":"exec","baselineSeconds":1.9894229939999932,"faultSeconds":4.213512103000001,"probeSeconds":2.29}
|
||||
# {"fault":"inner","mode":"hop","baselineSeconds":2.056171266999998,"faultSeconds":4.169351735999997,"probeSeconds":2.28}
|
||||
# Subtest: row253 C4 P10 outer reason holds under both sudo models
|
||||
ok 13 - row253 C4 P10 outer reason holds under both sudo models
|
||||
---
|
||||
duration_ms: 15355.835698
|
||||
type: 'test'
|
||||
...
|
||||
# {"fault":"outer","mode":"exec","baselineSeconds":1.9589971570000053,"faultSeconds":5.726783651999998,"probeSeconds":4}
|
||||
# {"fault":"outer","mode":"hop","baselineSeconds":1.879084925999996,"faultSeconds":5.732443853999998,"probeSeconds":4.01}
|
||||
# Subtest: row253 C4 P10 overflow reason holds under both sudo models
|
||||
ok 14 - row253 C4 P10 overflow reason holds under both sudo models
|
||||
---
|
||||
duration_ms: 3793.194421
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: every check passing exits 0, with each P mark and counts that match the lines
|
||||
ok 15 - row 195 accept: every check passing exits 0, with each P mark and counts that match the lines
|
||||
---
|
||||
duration_ms: 1868.627362
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: exits 1 with each F check failing alone, and its line names it
|
||||
ok 16 - row 195 accept: exits 1 with each F check failing alone, and its line names it
|
||||
---
|
||||
duration_ms: 21072.838361
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: F3 fails on exit 0 with no reply line, and its evidence takes talk's error
|
||||
ok 17 - row 195 accept: F3 fails on exit 0 with no reply line, and its evidence takes talk's error
|
||||
---
|
||||
duration_ms: 3708.467117
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: F1 fails on a unit that isn't active or isn't User=mosaic
|
||||
ok 18 - row 195 accept: F1 fails on a unit that isn't active or isn't User=mosaic
|
||||
---
|
||||
duration_ms: 3517.599317
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: F2 fails when healthz doesn't answer and when another pid holds the port
|
||||
ok 19 - row 195 accept: F2 fails when healthz doesn't answer and when another pid holds the port
|
||||
---
|
||||
duration_ms: 4025.946308
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: F5 fails on unpriv_bwrap (enforce), on complain and on a trailing space
|
||||
ok 20 - row 195 accept: F5 fails on unpriv_bwrap (enforce), on complain and on a trailing space
|
||||
---
|
||||
duration_ms: 8845.119954
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: F5 fails with no bwrap of mosaic's, and passes on comm alone
|
||||
ok 21 - row 195 accept: F5 fails with no bwrap of mosaic's, and passes on comm alone
|
||||
---
|
||||
duration_ms: 4126.5763
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: F6 fails on a stub that prints nothing, on a path outside claude-<pin> and on a .. segment
|
||||
ok 22 - row 195 accept: F6 fails on a stub that prints nothing, on a path outside claude-<pin> and on a .. segment
|
||||
---
|
||||
duration_ms: 5137.178557
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: F7 fails on two live PM launches, one for another business, and no launch.by
|
||||
ok 23 - row 195 accept: F7 fails on two live PM launches, one for another business, and no launch.by
|
||||
---
|
||||
duration_ms: 5691.366549
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: F8 fails on 0640, on another owner and on a symlink, and never prints the credential
|
||||
ok 24 - row 195 accept: F8 fails on 0640, on another owner and on a symlink, and never prints the credential
|
||||
---
|
||||
duration_ms: 5730.966972
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: F9 fails on another owner, a group-writable mode and a number for the flag
|
||||
ok 25 - row 195 accept: F9 fails on another owner, a group-writable mode and a number for the flag
|
||||
---
|
||||
duration_ms: 5621.584201
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: F9 won't run --node as root off the pin path or with a writable directory above it
|
||||
ok 26 - row 195 accept: F9 won't run --node as root off the pin path or with a writable directory above it
|
||||
---
|
||||
duration_ms: 5316.258522
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: F11 fails on one *.json under discord/ and passes on an empty directory
|
||||
ok 27 - row 195 accept: F11 fails on one *.json under discord/ and passes on an empty directory
|
||||
---
|
||||
duration_ms: 3764.13795
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: each P check reports unnamed on its fault, and the exit stays 0
|
||||
ok 28 - row 195 accept: each P check reports unnamed on its fault, and the exit stays 0
|
||||
---
|
||||
duration_ms: 16622.156132
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: P2 is unnamed with a supplementary group, and P5 names docker
|
||||
ok 29 - row 195 accept: P2 is unnamed with a supplementary group, and P5 names docker
|
||||
---
|
||||
duration_ms: 3681.147919
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: P5 is closed with no jarvis account, and P2 with an empty authorized_keys
|
||||
ok 30 - row 195 accept: P5 is closed with no jarvis account, and P2 with an empty authorized_keys
|
||||
---
|
||||
duration_ms: 1837.622854
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: P9 is unnamed once for each item missing
|
||||
ok 31 - row 195 accept: P9 is unnamed once for each item missing
|
||||
---
|
||||
duration_ms: 9351.705376
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row253 accept: P10 fails its observation with another peer; P11 with the unit disabled
|
||||
ok 32 - row253 accept: P10 fails its observation with another peer; P11 with the unit disabled
|
||||
---
|
||||
duration_ms: 3724.049411
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: every P check unnamed together still exits 0
|
||||
ok 33 - row 195 accept: every P check unnamed together still exits 0
|
||||
---
|
||||
duration_ms: 1644.081467
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: a bad args file refuses with exit 2 before any check, each for its own reason
|
||||
ok 34 - row 195 accept: a bad args file refuses with exit 2 before any check, each for its own reason
|
||||
---
|
||||
duration_ms: 93.429959
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: usage errors and a run without --root as a user exit 2
|
||||
ok 35 - row 195 accept: usage errors and a run without --root as a user exit 2
|
||||
---
|
||||
duration_ms: 10.484275
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: every in-instance call goes through sudo -u mosaic -H env PATH=<node dir>:...
|
||||
ok 36 - row 195 accept: every in-instance call goes through sudo -u mosaic -H env PATH=<node dir>:...
|
||||
---
|
||||
duration_ms: 1850.954185
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: the host check runs with --check and never --enforce
|
||||
ok 37 - row 195 accept: the host check runs with --check and never --enforce
|
||||
---
|
||||
duration_ms: 1829.605146
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row276 legacy call inventory pins every production bound and the conversation contract
|
||||
ok 38 - row276 legacy call inventory pins every production bound and the conversation contract
|
||||
---
|
||||
duration_ms: 0.390713
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row276 talk legacy inner timeout cleans both sudo models
|
||||
ok 39 - row276 talk legacy inner timeout cleans both sudo models
|
||||
---
|
||||
duration_ms: 1671.508097
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row276 precheck legacy inner timeout cleans both sudo models
|
||||
ok 40 - row276 precheck legacy inner timeout cleans both sudo models
|
||||
---
|
||||
duration_ms: 1671.245175
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row276 claude-version legacy inner timeout cleans both sudo models
|
||||
ok 41 - row276 claude-version legacy inner timeout cleans both sudo models
|
||||
---
|
||||
duration_ms: 1675.495392
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row276 pm-list legacy inner timeout cleans both sudo models
|
||||
ok 42 - row276 pm-list legacy inner timeout cleans both sudo models
|
||||
---
|
||||
duration_ms: 1661.382885
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row276 node-version legacy inner timeout cleans both sudo models
|
||||
ok 43 - row276 node-version legacy inner timeout cleans both sudo models
|
||||
---
|
||||
duration_ms: 1692.3437
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row276 legacy streams and display status preserve failures without granting success
|
||||
ok 44 - row276 legacy streams and display status preserve failures without granting success
|
||||
---
|
||||
duration_ms: 2545.7498
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row276 trailer grammar cannot make supervisor failure pass
|
||||
ok 45 - row276 trailer grammar cannot make supervisor failure pass
|
||||
---
|
||||
duration_ms: 2097.946825
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row276 earlier forged trailer and appended zero remain failures
|
||||
ok 46 - row276 earlier forged trailer and appended zero remain failures
|
||||
---
|
||||
duration_ms: 521.451262
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row276 precheck outer bound discards success status and fixture cleans residual
|
||||
ok 47 - row276 precheck outer bound discards success status and fixture cleans residual
|
||||
---
|
||||
duration_ms: 2170.592563
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row276 case1 capture and legacy tools refuse unsafe system tools
|
||||
ok 48 - row276 case1 capture and legacy tools refuse unsafe system tools
|
||||
---
|
||||
duration_ms: 76.678871
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row276 stderr retention is bounded and keeps the final diagnostic
|
||||
ok 49 - row276 stderr retention is bounded and keeps the final diagnostic
|
||||
---
|
||||
duration_ms: 261.872028
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row276 version and PM checks refuse successful-looking stdout on supervisor failure
|
||||
ok 50 - row276 version and PM checks refuse successful-looking stdout on supervisor failure
|
||||
---
|
||||
duration_ms: 16.458898
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row276 full acceptance keeps all five healthy calls in both sudo models
|
||||
ok 51 - row276 full acceptance keeps all five healthy calls in both sudo models
|
||||
---
|
||||
duration_ms: 3762.37926
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row276 vanished pid stat read returns 3 with empty stderr in both scripts
|
||||
ok 52 - row276 vanished pid stat read returns 3 with empty stderr in both scripts
|
||||
---
|
||||
duration_ms: 4.628196
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row276 legacy stdout snapshot preserves exact bytes on success and command failure
|
||||
ok 53 - row276 legacy stdout snapshot preserves exact bytes on success and command failure
|
||||
---
|
||||
duration_ms: 3223.67506
|
||||
type: 'test'
|
||||
...
|
||||
1..53
|
||||
# tests 53
|
||||
# suites 0
|
||||
# pass 53
|
||||
# fail 0
|
||||
# cancelled 0
|
||||
# skipped 0
|
||||
# todo 0
|
||||
# duration_ms 240011.017536
|
||||
@@ -1,3 +0,0 @@
|
||||
CLEAR
|
||||
/mnt/storage/scratch/sage-busy-now.sh: line 4: /proc/445652/cmdline: No such file or directory
|
||||
/mnt/storage/scratch/sage-busy-now.sh: line 4: /proc/505165/cmdline: No such file or directory
|
||||
@@ -1,19 +0,0 @@
|
||||
{
|
||||
"label": "case1-whole-3",
|
||||
"argv": [
|
||||
"timeout",
|
||||
"-k",
|
||||
"10",
|
||||
"1200",
|
||||
"node",
|
||||
"--test",
|
||||
"--test-reporter=tap",
|
||||
"packages/cli/tests/case1-accept.test.mjs"
|
||||
],
|
||||
"limit_seconds": 1200,
|
||||
"tmpdir": "/mnt/storage/scratch/tmp/gdjuph7",
|
||||
"started_utc": "2026-10-23T07:34:59Z",
|
||||
"start_load": "2.08 2.33 2.22 4/6464 509071",
|
||||
"log": "/mnt/storage/scratch/tmp/gABO62Q/records/case1-whole-3.log",
|
||||
"expected_red": false
|
||||
}
|
||||
@@ -1,237 +0,0 @@
|
||||
[
|
||||
{
|
||||
"wall_seconds": 0.0,
|
||||
"utc": "2026-10-23T07:34:59Z",
|
||||
"load": "2.08 2.33 2.22 8/6465 509072"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 5.001,
|
||||
"utc": "2026-10-23T07:35:04Z",
|
||||
"load": "2.23 2.36 2.23 4/6481 514861"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 10.001,
|
||||
"utc": "2026-10-23T07:35:09Z",
|
||||
"load": "2.13 2.33 2.22 3/6475 518876"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 15.001,
|
||||
"utc": "2026-10-23T07:35:14Z",
|
||||
"load": "2.04 2.31 2.22 3/6502 522276"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 20.001,
|
||||
"utc": "2026-10-23T07:35:19Z",
|
||||
"load": "2.04 2.31 2.22 3/6502 525490"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 25.001,
|
||||
"utc": "2026-10-23T07:35:24Z",
|
||||
"load": "2.04 2.30 2.21 5/6478 528962"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 30.002,
|
||||
"utc": "2026-10-23T07:35:29Z",
|
||||
"load": "2.03 2.30 2.21 3/6458 532409"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 35.002,
|
||||
"utc": "2026-10-23T07:35:34Z",
|
||||
"load": "2.03 2.29 2.21 2/6481 535342"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 40.002,
|
||||
"utc": "2026-10-23T07:35:39Z",
|
||||
"load": "2.03 2.29 2.21 3/6483 537759"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 45.002,
|
||||
"utc": "2026-10-23T07:35:44Z",
|
||||
"load": "1.86 2.25 2.20 5/6511 539004"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 50.003,
|
||||
"utc": "2026-10-23T07:35:49Z",
|
||||
"load": "1.72 2.21 2.19 2/6524 540002"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 55.003,
|
||||
"utc": "2026-10-23T07:35:54Z",
|
||||
"load": "1.58 2.17 2.17 2/6482 540672"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 60.003,
|
||||
"utc": "2026-10-23T07:35:59Z",
|
||||
"load": "1.53 2.15 2.17 4/6471 541194"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 65.003,
|
||||
"utc": "2026-10-23T07:36:04Z",
|
||||
"load": "1.81 2.20 2.18 2/6474 541568"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 70.003,
|
||||
"utc": "2026-10-23T07:36:09Z",
|
||||
"load": "2.31 2.30 2.21 4/6503 545391"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 75.004,
|
||||
"utc": "2026-10-23T07:36:14Z",
|
||||
"load": "2.28 2.29 2.21 4/6517 548112"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 80.004,
|
||||
"utc": "2026-10-23T07:36:19Z",
|
||||
"load": "2.42 2.32 2.22 3/6526 551314"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 85.004,
|
||||
"utc": "2026-10-23T07:36:24Z",
|
||||
"load": "2.38 2.31 2.22 23/6474 553438"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 90.004,
|
||||
"utc": "2026-10-23T07:36:29Z",
|
||||
"load": "2.27 2.29 2.21 3/6475 556781"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 95.005,
|
||||
"utc": "2026-10-23T07:36:34Z",
|
||||
"load": "2.25 2.29 2.21 4/6460 559513"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 100.005,
|
||||
"utc": "2026-10-23T07:36:39Z",
|
||||
"load": "2.79 2.40 2.25 4/6488 566252"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 105.005,
|
||||
"utc": "2026-10-23T07:36:44Z",
|
||||
"load": "2.81 2.41 2.25 4/6480 569779"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 110.005,
|
||||
"utc": "2026-10-23T07:36:49Z",
|
||||
"load": "2.66 2.39 2.25 3/6489 572874"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 115.006,
|
||||
"utc": "2026-10-23T07:36:54Z",
|
||||
"load": "2.61 2.38 2.25 3/6447 576109"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 120.006,
|
||||
"utc": "2026-10-23T07:36:59Z",
|
||||
"load": "2.64 2.39 2.25 3/6433 579360"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 125.006,
|
||||
"utc": "2026-10-23T07:37:04Z",
|
||||
"load": "2.59 2.38 2.25 6/6448 582606"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 130.006,
|
||||
"utc": "2026-10-23T07:37:09Z",
|
||||
"load": "2.54 2.38 2.25 5/6451 585750"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 135.006,
|
||||
"utc": "2026-10-23T07:37:14Z",
|
||||
"load": "2.42 2.35 2.24 3/6464 588554"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 140.007,
|
||||
"utc": "2026-10-23T07:37:19Z",
|
||||
"load": "2.31 2.33 2.23 5/6469 591375"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 145.007,
|
||||
"utc": "2026-10-23T07:37:24Z",
|
||||
"load": "2.20 2.31 2.23 3/6436 594632"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 150.007,
|
||||
"utc": "2026-10-23T07:37:29Z",
|
||||
"load": "2.10 2.29 2.22 4/6408 597793"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 155.007,
|
||||
"utc": "2026-10-23T07:37:34Z",
|
||||
"load": "2.02 2.27 2.21 6/6423 601114"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 160.008,
|
||||
"utc": "2026-10-23T07:37:39Z",
|
||||
"load": "1.93 2.24 2.21 5/6420 604470"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 165.008,
|
||||
"utc": "2026-10-23T07:37:44Z",
|
||||
"load": "1.86 2.22 2.20 4/6456 608664"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 170.008,
|
||||
"utc": "2026-10-23T07:37:49Z",
|
||||
"load": "1.87 2.22 2.20 4/6455 612187"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 175.008,
|
||||
"utc": "2026-10-23T07:37:54Z",
|
||||
"load": "2.04 2.25 2.21 4/6441 616556"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 180.009,
|
||||
"utc": "2026-10-23T07:37:59Z",
|
||||
"load": "2.36 2.31 2.23 5/6417 620859"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 185.009,
|
||||
"utc": "2026-10-23T07:38:04Z",
|
||||
"load": "2.25 2.29 2.22 4/6428 625167"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 190.009,
|
||||
"utc": "2026-10-23T07:38:09Z",
|
||||
"load": "2.15 2.27 2.21 3/6424 629560"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 195.009,
|
||||
"utc": "2026-10-23T07:38:14Z",
|
||||
"load": "2.06 2.25 2.21 3/6441 632894"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 200.009,
|
||||
"utc": "2026-10-23T07:38:19Z",
|
||||
"load": "1.97 2.22 2.20 4/6447 636095"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 205.01,
|
||||
"utc": "2026-10-23T07:38:24Z",
|
||||
"load": "1.97 2.22 2.20 3/6421 639217"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 210.01,
|
||||
"utc": "2026-10-23T07:38:29Z",
|
||||
"load": "2.06 2.23 2.20 3/6413 642341"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 215.01,
|
||||
"utc": "2026-10-23T07:38:34Z",
|
||||
"load": "1.89 2.20 2.19 2/6452 644528"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 220.01,
|
||||
"utc": "2026-10-23T07:38:39Z",
|
||||
"load": "1.98 2.21 2.20 5/6458 646052"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 225.011,
|
||||
"utc": "2026-10-23T07:38:44Z",
|
||||
"load": "1.90 2.19 2.19 3/6453 648762"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 230.011,
|
||||
"utc": "2026-10-23T07:38:49Z",
|
||||
"load": "1.99 2.20 2.19 3/6456 650851"
|
||||
}
|
||||
]
|
||||
@@ -1,332 +0,0 @@
|
||||
TAP version 13
|
||||
# Subtest: row253 socket observation uses configured root, metadata and the Console peer without sending bytes
|
||||
ok 1 - row253 socket observation uses configured root, metadata and the Console peer without sending bytes
|
||||
---
|
||||
duration_ms: 1953.256427
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row253 P10 refuses unsafe metadata, wrong peers and an unsafe Python without claiming closure
|
||||
ok 2 - row253 P10 refuses unsafe metadata, wrong peers and an unsafe Python without claiming closure
|
||||
---
|
||||
duration_ms: 29343.328577
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row253 acceptance rejects bad config and unsupported copies before talk
|
||||
ok 3 - row253 acceptance rejects bad config and unsupported copies before talk
|
||||
---
|
||||
duration_ms: 1354.971037
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row253 stalled peer observation ends within its bound without leaving a reader
|
||||
ok 4 - row253 stalled peer observation ends within its bound without leaving a reader
|
||||
---
|
||||
duration_ms: 3964.438002
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row253 P8 refuses both retired TCP and board listeners
|
||||
ok 5 - row253 P8 refuses both retired TCP and board listeners
|
||||
---
|
||||
duration_ms: 3689.613255
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row253 C4 acceptance query inner reason holds under both sudo models
|
||||
ok 6 - row253 C4 acceptance query inner reason holds under both sudo models
|
||||
---
|
||||
duration_ms: 10712.630086
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row253 C4 acceptance query outer reason discards stdout and names residual cleanup
|
||||
ok 7 - row253 C4 acceptance query outer reason discards stdout and names residual cleanup
|
||||
---
|
||||
duration_ms: 14177.055814
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row253 C4 acceptance query overflow is output-limit in both models
|
||||
ok 8 - row253 C4 acceptance query overflow is output-limit in both models
|
||||
---
|
||||
duration_ms: 492.274319
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row299 P10 timing copy preserves shipped bytes and isolates observer variables
|
||||
ok 9 - row299 P10 timing copy preserves shipped bytes and isolates observer variables
|
||||
---
|
||||
duration_ms: 0.683633
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row299 P10 observers preserve stdout stderr status and the EXIT trap
|
||||
ok 10 - row299 P10 observers preserve stdout stderr status and the EXIT trap
|
||||
---
|
||||
duration_ms: 3.307686
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row299 P10 observer records are complete and ordered
|
||||
ok 11 - row299 P10 observer records are complete and ordered
|
||||
---
|
||||
duration_ms: 0.539265
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row253 C4 P10 inner reason holds under both sudo models
|
||||
ok 12 - row253 C4 P10 inner reason holds under both sudo models
|
||||
---
|
||||
duration_ms: 11734.519359
|
||||
type: 'test'
|
||||
...
|
||||
# {"fault":"inner","mode":"exec","baselineSeconds":1.8627637730000133,"faultSeconds":3.9948855329999935,"probeSeconds":2.25}
|
||||
# {"fault":"inner","mode":"hop","baselineSeconds":1.8459824050000024,"faultSeconds":3.963717149000004,"probeSeconds":2.26}
|
||||
# Subtest: row253 C4 P10 outer reason holds under both sudo models
|
||||
ok 13 - row253 C4 P10 outer reason holds under both sudo models
|
||||
---
|
||||
duration_ms: 15259.754291
|
||||
type: 'test'
|
||||
...
|
||||
# {"fault":"outer","mode":"exec","baselineSeconds":1.8736066859999991,"faultSeconds":5.7249899409999925,"probeSeconds":4}
|
||||
# {"fault":"outer","mode":"hop","baselineSeconds":1.8894593350000068,"faultSeconds":5.709737833999999,"probeSeconds":4}
|
||||
# Subtest: row253 C4 P10 overflow reason holds under both sudo models
|
||||
ok 14 - row253 C4 P10 overflow reason holds under both sudo models
|
||||
---
|
||||
duration_ms: 3822.763403
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: every check passing exits 0, with each P mark and counts that match the lines
|
||||
ok 15 - row 195 accept: every check passing exits 0, with each P mark and counts that match the lines
|
||||
---
|
||||
duration_ms: 1879.591109
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: exits 1 with each F check failing alone, and its line names it
|
||||
ok 16 - row 195 accept: exits 1 with each F check failing alone, and its line names it
|
||||
---
|
||||
duration_ms: 20490.628667
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: F3 fails on exit 0 with no reply line, and its evidence takes talk's error
|
||||
ok 17 - row 195 accept: F3 fails on exit 0 with no reply line, and its evidence takes talk's error
|
||||
---
|
||||
duration_ms: 3653.736213
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: F1 fails on a unit that isn't active or isn't User=mosaic
|
||||
ok 18 - row 195 accept: F1 fails on a unit that isn't active or isn't User=mosaic
|
||||
---
|
||||
duration_ms: 3442.442361
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: F2 fails when healthz doesn't answer and when another pid holds the port
|
||||
ok 19 - row 195 accept: F2 fails when healthz doesn't answer and when another pid holds the port
|
||||
---
|
||||
duration_ms: 3683.514446
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: F5 fails on unpriv_bwrap (enforce), on complain and on a trailing space
|
||||
ok 20 - row 195 accept: F5 fails on unpriv_bwrap (enforce), on complain and on a trailing space
|
||||
---
|
||||
duration_ms: 8437.165336
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: F5 fails with no bwrap of mosaic's, and passes on comm alone
|
||||
ok 21 - row 195 accept: F5 fails with no bwrap of mosaic's, and passes on comm alone
|
||||
---
|
||||
duration_ms: 3900.598202
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: F6 fails on a stub that prints nothing, on a path outside claude-<pin> and on a .. segment
|
||||
ok 22 - row 195 accept: F6 fails on a stub that prints nothing, on a path outside claude-<pin> and on a .. segment
|
||||
---
|
||||
duration_ms: 4987.50038
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: F7 fails on two live PM launches, one for another business, and no launch.by
|
||||
ok 23 - row 195 accept: F7 fails on two live PM launches, one for another business, and no launch.by
|
||||
---
|
||||
duration_ms: 5425.289834
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: F8 fails on 0640, on another owner and on a symlink, and never prints the credential
|
||||
ok 24 - row 195 accept: F8 fails on 0640, on another owner and on a symlink, and never prints the credential
|
||||
---
|
||||
duration_ms: 5477.40542
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: F9 fails on another owner, a group-writable mode and a number for the flag
|
||||
ok 25 - row 195 accept: F9 fails on another owner, a group-writable mode and a number for the flag
|
||||
---
|
||||
duration_ms: 5434.786414
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: F9 won't run --node as root off the pin path or with a writable directory above it
|
||||
ok 26 - row 195 accept: F9 won't run --node as root off the pin path or with a writable directory above it
|
||||
---
|
||||
duration_ms: 5126.262984
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: F11 fails on one *.json under discord/ and passes on an empty directory
|
||||
ok 27 - row 195 accept: F11 fails on one *.json under discord/ and passes on an empty directory
|
||||
---
|
||||
duration_ms: 3711.251951
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: each P check reports unnamed on its fault, and the exit stays 0
|
||||
ok 28 - row 195 accept: each P check reports unnamed on its fault, and the exit stays 0
|
||||
---
|
||||
duration_ms: 16470.538016
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: P2 is unnamed with a supplementary group, and P5 names docker
|
||||
ok 29 - row 195 accept: P2 is unnamed with a supplementary group, and P5 names docker
|
||||
---
|
||||
duration_ms: 3660.364965
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: P5 is closed with no jarvis account, and P2 with an empty authorized_keys
|
||||
ok 30 - row 195 accept: P5 is closed with no jarvis account, and P2 with an empty authorized_keys
|
||||
---
|
||||
duration_ms: 1799.768335
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: P9 is unnamed once for each item missing
|
||||
ok 31 - row 195 accept: P9 is unnamed once for each item missing
|
||||
---
|
||||
duration_ms: 9047.041702
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row253 accept: P10 fails its observation with another peer; P11 with the unit disabled
|
||||
ok 32 - row253 accept: P10 fails its observation with another peer; P11 with the unit disabled
|
||||
---
|
||||
duration_ms: 3624.70672
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: every P check unnamed together still exits 0
|
||||
ok 33 - row 195 accept: every P check unnamed together still exits 0
|
||||
---
|
||||
duration_ms: 1628.049695
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: a bad args file refuses with exit 2 before any check, each for its own reason
|
||||
ok 34 - row 195 accept: a bad args file refuses with exit 2 before any check, each for its own reason
|
||||
---
|
||||
duration_ms: 96.211247
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: usage errors and a run without --root as a user exit 2
|
||||
ok 35 - row 195 accept: usage errors and a run without --root as a user exit 2
|
||||
---
|
||||
duration_ms: 11.078071
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: every in-instance call goes through sudo -u mosaic -H env PATH=<node dir>:...
|
||||
ok 36 - row 195 accept: every in-instance call goes through sudo -u mosaic -H env PATH=<node dir>:...
|
||||
---
|
||||
duration_ms: 1819.893166
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: the host check runs with --check and never --enforce
|
||||
ok 37 - row 195 accept: the host check runs with --check and never --enforce
|
||||
---
|
||||
duration_ms: 1818.576075
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row276 legacy call inventory pins every production bound and the conversation contract
|
||||
ok 38 - row276 legacy call inventory pins every production bound and the conversation contract
|
||||
---
|
||||
duration_ms: 0.367599
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row276 talk legacy inner timeout cleans both sudo models
|
||||
ok 39 - row276 talk legacy inner timeout cleans both sudo models
|
||||
---
|
||||
duration_ms: 1643.944453
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row276 precheck legacy inner timeout cleans both sudo models
|
||||
ok 40 - row276 precheck legacy inner timeout cleans both sudo models
|
||||
---
|
||||
duration_ms: 1647.187165
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row276 claude-version legacy inner timeout cleans both sudo models
|
||||
ok 41 - row276 claude-version legacy inner timeout cleans both sudo models
|
||||
---
|
||||
duration_ms: 1658.311785
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row276 pm-list legacy inner timeout cleans both sudo models
|
||||
ok 42 - row276 pm-list legacy inner timeout cleans both sudo models
|
||||
---
|
||||
duration_ms: 1662.34616
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row276 node-version legacy inner timeout cleans both sudo models
|
||||
ok 43 - row276 node-version legacy inner timeout cleans both sudo models
|
||||
---
|
||||
duration_ms: 1691.506329
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row276 legacy streams and display status preserve failures without granting success
|
||||
ok 44 - row276 legacy streams and display status preserve failures without granting success
|
||||
---
|
||||
duration_ms: 2558.787354
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row276 trailer grammar cannot make supervisor failure pass
|
||||
ok 45 - row276 trailer grammar cannot make supervisor failure pass
|
||||
---
|
||||
duration_ms: 1998.18351
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row276 earlier forged trailer and appended zero remain failures
|
||||
ok 46 - row276 earlier forged trailer and appended zero remain failures
|
||||
---
|
||||
duration_ms: 502.525144
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row276 precheck outer bound discards success status and fixture cleans residual
|
||||
ok 47 - row276 precheck outer bound discards success status and fixture cleans residual
|
||||
---
|
||||
duration_ms: 2166.851271
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row276 case1 capture and legacy tools refuse unsafe system tools
|
||||
ok 48 - row276 case1 capture and legacy tools refuse unsafe system tools
|
||||
---
|
||||
duration_ms: 74.697527
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row276 stderr retention is bounded and keeps the final diagnostic
|
||||
ok 49 - row276 stderr retention is bounded and keeps the final diagnostic
|
||||
---
|
||||
duration_ms: 241.007102
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row276 version and PM checks refuse successful-looking stdout on supervisor failure
|
||||
ok 50 - row276 version and PM checks refuse successful-looking stdout on supervisor failure
|
||||
---
|
||||
duration_ms: 16.132196
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row276 full acceptance keeps all five healthy calls in both sudo models
|
||||
ok 51 - row276 full acceptance keeps all five healthy calls in both sudo models
|
||||
---
|
||||
duration_ms: 3685.474118
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row276 vanished pid stat read returns 3 with empty stderr in both scripts
|
||||
ok 52 - row276 vanished pid stat read returns 3 with empty stderr in both scripts
|
||||
---
|
||||
duration_ms: 4.365639
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row276 legacy stdout snapshot preserves exact bytes on success and command failure
|
||||
ok 53 - row276 legacy stdout snapshot preserves exact bytes on success and command failure
|
||||
---
|
||||
duration_ms: 3188.820303
|
||||
type: 'test'
|
||||
...
|
||||
1..53
|
||||
# tests 53
|
||||
# suites 0
|
||||
# pass 53
|
||||
# fail 0
|
||||
# cancelled 0
|
||||
# skipped 0
|
||||
# todo 0
|
||||
# duration_ms 234980.293151
|
||||
@@ -1 +0,0 @@
|
||||
CLEAR
|
||||
@@ -1,77 +0,0 @@
|
||||
{
|
||||
"label": "cli-whole",
|
||||
"argv": [
|
||||
"timeout",
|
||||
"-k",
|
||||
"10",
|
||||
"5400",
|
||||
"node",
|
||||
"--test",
|
||||
"--test-reporter=tap",
|
||||
"packages/cli/tests/access-boot.test.mjs",
|
||||
"packages/cli/tests/access.test.mjs",
|
||||
"packages/cli/tests/app.test.mjs",
|
||||
"packages/cli/tests/boot-status.test.mjs",
|
||||
"packages/cli/tests/case1-accept.test.mjs",
|
||||
"packages/cli/tests/case1-hostcheck.test.mjs",
|
||||
"packages/cli/tests/case2-persona-import.test.mjs",
|
||||
"packages/cli/tests/case2-unit.test.mjs",
|
||||
"packages/cli/tests/channel-cli.test.mjs",
|
||||
"packages/cli/tests/channel-recovery.test.mjs",
|
||||
"packages/cli/tests/cli.test.mjs",
|
||||
"packages/cli/tests/compactions-launch.test.mjs",
|
||||
"packages/cli/tests/config.test.mjs",
|
||||
"packages/cli/tests/credentials.test.mjs",
|
||||
"packages/cli/tests/follow.test.mjs",
|
||||
"packages/cli/tests/format.test.mjs",
|
||||
"packages/cli/tests/gate-lane-auth.test.mjs",
|
||||
"packages/cli/tests/gate-lane-fixtures.test.mjs",
|
||||
"packages/cli/tests/gate-lane-image.test.mjs",
|
||||
"packages/cli/tests/gate-lane-state.test.mjs",
|
||||
"packages/cli/tests/gate-lane.test.mjs",
|
||||
"packages/cli/tests/git-socket.test.mjs",
|
||||
"packages/cli/tests/grants.test.mjs",
|
||||
"packages/cli/tests/host.test.mjs",
|
||||
"packages/cli/tests/hosts.test.mjs",
|
||||
"packages/cli/tests/instances.test.mjs",
|
||||
"packages/cli/tests/launch-account.test.mjs",
|
||||
"packages/cli/tests/launch-limit-checks.test.mjs",
|
||||
"packages/cli/tests/launch-limits.test.mjs",
|
||||
"packages/cli/tests/launch-routes.test.mjs",
|
||||
"packages/cli/tests/launcher.test.mjs",
|
||||
"packages/cli/tests/lifecycle.test.mjs",
|
||||
"packages/cli/tests/limits-tokens.test.mjs",
|
||||
"packages/cli/tests/limits.test.mjs",
|
||||
"packages/cli/tests/mark-read.test.mjs",
|
||||
"packages/cli/tests/names.test.mjs",
|
||||
"packages/cli/tests/notifier.test.mjs",
|
||||
"packages/cli/tests/other-tree.test.mjs",
|
||||
"packages/cli/tests/processing-cli.test.mjs",
|
||||
"packages/cli/tests/project-name-repo.test.mjs",
|
||||
"packages/cli/tests/project.test.mjs",
|
||||
"packages/cli/tests/publish-socket.test.mjs",
|
||||
"packages/cli/tests/session-clear.test.mjs",
|
||||
"packages/cli/tests/session-launch.test.mjs",
|
||||
"packages/cli/tests/stack-copy.test.mjs",
|
||||
"packages/cli/tests/stack-instances.test.mjs",
|
||||
"packages/cli/tests/stack-release-external.test.mjs",
|
||||
"packages/cli/tests/stack-release.test.mjs",
|
||||
"packages/cli/tests/stack-upgrade.test.mjs",
|
||||
"packages/cli/tests/tester-http.test.mjs",
|
||||
"packages/cli/tests/tester-reads.test.mjs",
|
||||
"packages/cli/tests/tester-threads.test.mjs",
|
||||
"packages/cli/tests/tester.test.mjs",
|
||||
"packages/cli/tests/thread-cli.test.mjs",
|
||||
"packages/cli/tests/thread-launch.test.mjs",
|
||||
"packages/cli/tests/trackers-boot.test.mjs",
|
||||
"packages/cli/tests/transport.test.mjs",
|
||||
"packages/cli/tests/usage.test.mjs",
|
||||
"packages/cli/tests/verbs.test.mjs"
|
||||
],
|
||||
"limit_seconds": 5400,
|
||||
"tmpdir": "/mnt/storage/scratch/tmp/gebsaIr",
|
||||
"started_utc": "2026-10-23T07:38:55Z",
|
||||
"start_load": "1.91 2.18 2.19 1/6404 656161",
|
||||
"log": "/mnt/storage/scratch/tmp/gABO62Q/records/cli-whole.log",
|
||||
"expected_red": false
|
||||
}
|
||||
@@ -1,637 +0,0 @@
|
||||
[
|
||||
{
|
||||
"wall_seconds": 0.0,
|
||||
"utc": "2026-10-23T07:38:55Z",
|
||||
"load": "1.91 2.18 2.19 4/6405 656162"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 5.001,
|
||||
"utc": "2026-10-23T07:39:00Z",
|
||||
"load": "3.52 2.51 2.29 20/6571 665258"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 10.001,
|
||||
"utc": "2026-10-23T07:39:05Z",
|
||||
"load": "4.36 2.70 2.36 17/6696 672370"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 15.001,
|
||||
"utc": "2026-10-23T07:39:10Z",
|
||||
"load": "5.05 2.88 2.41 32/6707 679808"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 20.001,
|
||||
"utc": "2026-10-23T07:39:15Z",
|
||||
"load": "5.77 3.06 2.48 20/6712 687650"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 25.002,
|
||||
"utc": "2026-10-23T07:39:20Z",
|
||||
"load": "6.59 3.28 2.55 21/6675 696103"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 30.002,
|
||||
"utc": "2026-10-23T07:39:25Z",
|
||||
"load": "6.78 3.37 2.58 13/6627 705121"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 35.002,
|
||||
"utc": "2026-10-23T07:39:30Z",
|
||||
"load": "6.56 3.38 2.59 4/6596 713973"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 40.003,
|
||||
"utc": "2026-10-23T07:39:35Z",
|
||||
"load": "6.59 3.44 2.62 4/6582 722361"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 45.003,
|
||||
"utc": "2026-10-23T07:39:40Z",
|
||||
"load": "6.71 3.52 2.64 5/6573 729968"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 50.003,
|
||||
"utc": "2026-10-23T07:39:45Z",
|
||||
"load": "6.81 3.59 2.67 9/6577 737845"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 55.003,
|
||||
"utc": "2026-10-23T07:39:50Z",
|
||||
"load": "6.67 3.62 2.69 6/6627 744813"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 60.004,
|
||||
"utc": "2026-10-23T07:39:55Z",
|
||||
"load": "7.01 3.74 2.73 4/6582 752028"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 65.004,
|
||||
"utc": "2026-10-23T07:40:00Z",
|
||||
"load": "7.17 3.83 2.76 5/6551 763533"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 70.004,
|
||||
"utc": "2026-10-23T07:40:05Z",
|
||||
"load": "7.08 3.86 2.78 5/6568 774263"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 75.004,
|
||||
"utc": "2026-10-23T07:40:10Z",
|
||||
"load": "6.99 3.90 2.80 4/6564 781529"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 80.004,
|
||||
"utc": "2026-10-23T07:40:15Z",
|
||||
"load": "6.91 3.93 2.82 4/6556 787135"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 85.005,
|
||||
"utc": "2026-10-23T07:40:20Z",
|
||||
"load": "6.68 3.93 2.82 5/6548 793267"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 90.005,
|
||||
"utc": "2026-10-23T07:40:25Z",
|
||||
"load": "6.46 3.94 2.83 2/6525 799740"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 95.005,
|
||||
"utc": "2026-10-23T07:40:30Z",
|
||||
"load": "6.19 3.92 2.83 3/6566 805494"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 100.005,
|
||||
"utc": "2026-10-23T07:40:35Z",
|
||||
"load": "7.05 4.14 2.91 4/6526 810900"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 105.006,
|
||||
"utc": "2026-10-23T07:40:40Z",
|
||||
"load": "6.57 4.09 2.90 3/6492 813663"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 110.006,
|
||||
"utc": "2026-10-23T07:40:45Z",
|
||||
"load": "6.12 4.03 2.89 6/6526 817202"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 115.006,
|
||||
"utc": "2026-10-23T07:40:50Z",
|
||||
"load": "5.71 3.98 2.88 4/6542 820365"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 120.006,
|
||||
"utc": "2026-10-23T07:40:55Z",
|
||||
"load": "5.49 3.97 2.88 3/6504 824801"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 125.006,
|
||||
"utc": "2026-10-23T07:41:00Z",
|
||||
"load": "5.13 3.92 2.87 5/6520 829672"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 130.007,
|
||||
"utc": "2026-10-23T07:41:05Z",
|
||||
"load": "4.96 3.90 2.87 5/6491 835347"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 135.007,
|
||||
"utc": "2026-10-23T07:41:10Z",
|
||||
"load": "4.81 3.89 2.87 6/6515 841325"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 140.007,
|
||||
"utc": "2026-10-23T07:41:15Z",
|
||||
"load": "4.66 3.87 2.87 3/6533 846943"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 145.007,
|
||||
"utc": "2026-10-23T07:41:20Z",
|
||||
"load": "4.53 3.86 2.87 6/6537 852457"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 150.008,
|
||||
"utc": "2026-10-23T07:41:25Z",
|
||||
"load": "4.81 3.93 2.90 5/6497 857183"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 155.008,
|
||||
"utc": "2026-10-23T07:41:30Z",
|
||||
"load": "4.74 3.93 2.91 9/6493 862111"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 160.008,
|
||||
"utc": "2026-10-23T07:41:35Z",
|
||||
"load": "4.52 3.89 2.90 3/6484 867180"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 165.008,
|
||||
"utc": "2026-10-23T07:41:40Z",
|
||||
"load": "4.88 3.98 2.93 3/6494 874705"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 170.009,
|
||||
"utc": "2026-10-23T07:41:45Z",
|
||||
"load": "4.57 3.93 2.92 5/6513 879949"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 175.009,
|
||||
"utc": "2026-10-23T07:41:50Z",
|
||||
"load": "4.36 3.90 2.92 3/6532 885364"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 180.009,
|
||||
"utc": "2026-10-23T07:41:55Z",
|
||||
"load": "4.09 3.85 2.91 4/6518 889649"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 185.009,
|
||||
"utc": "2026-10-23T07:42:00Z",
|
||||
"load": "4.33 3.90 2.93 3/6500 895045"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 190.01,
|
||||
"utc": "2026-10-23T07:42:05Z",
|
||||
"load": "4.22 3.89 2.93 5/6497 900591"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 195.01,
|
||||
"utc": "2026-10-23T07:42:10Z",
|
||||
"load": "4.28 3.91 2.94 6/6500 906203"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 200.01,
|
||||
"utc": "2026-10-23T07:42:15Z",
|
||||
"load": "4.18 3.89 2.94 3/6513 911214"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 205.01,
|
||||
"utc": "2026-10-23T07:42:20Z",
|
||||
"load": "4.00 3.86 2.94 3/6521 916524"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 210.011,
|
||||
"utc": "2026-10-23T07:42:25Z",
|
||||
"load": "4.56 3.98 2.98 4/6507 921377"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 215.011,
|
||||
"utc": "2026-10-23T07:42:30Z",
|
||||
"load": "4.84 4.04 3.01 2/6517 926031"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 220.011,
|
||||
"utc": "2026-10-23T07:42:35Z",
|
||||
"load": "4.61 4.01 3.00 2/6512 930921"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 225.011,
|
||||
"utc": "2026-10-23T07:42:40Z",
|
||||
"load": "4.72 4.04 3.02 5/6513 936830"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 230.011,
|
||||
"utc": "2026-10-23T07:42:45Z",
|
||||
"load": "5.07 4.13 3.05 6/6527 943593"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 235.012,
|
||||
"utc": "2026-10-23T07:42:50Z",
|
||||
"load": "4.90 4.11 3.05 4/6524 949131"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 240.012,
|
||||
"utc": "2026-10-23T07:42:55Z",
|
||||
"load": "4.75 4.09 3.05 3/6538 954091"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 245.012,
|
||||
"utc": "2026-10-23T07:43:00Z",
|
||||
"load": "4.53 4.05 3.04 4/6526 957569"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 250.012,
|
||||
"utc": "2026-10-23T07:43:05Z",
|
||||
"load": "4.49 4.05 3.05 4/6512 961428"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 255.013,
|
||||
"utc": "2026-10-23T07:43:10Z",
|
||||
"load": "4.21 4.00 3.04 2/6514 964580"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 260.013,
|
||||
"utc": "2026-10-23T07:43:15Z",
|
||||
"load": "4.03 3.97 3.03 3/6520 969453"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 265.013,
|
||||
"utc": "2026-10-23T07:43:20Z",
|
||||
"load": "3.95 3.95 3.03 2/6510 972206"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 270.013,
|
||||
"utc": "2026-10-23T07:43:25Z",
|
||||
"load": "3.71 3.90 3.02 4/6485 974717"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 275.013,
|
||||
"utc": "2026-10-23T07:43:30Z",
|
||||
"load": "3.49 3.85 3.01 2/6458 976947"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 280.014,
|
||||
"utc": "2026-10-23T07:43:35Z",
|
||||
"load": "3.29 3.81 3.00 2/6480 979354"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 285.014,
|
||||
"utc": "2026-10-23T07:43:40Z",
|
||||
"load": "3.11 3.76 2.99 2/6484 981777"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 290.014,
|
||||
"utc": "2026-10-23T07:43:45Z",
|
||||
"load": "2.94 3.71 2.98 9/6503 984183"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 295.014,
|
||||
"utc": "2026-10-23T07:43:50Z",
|
||||
"load": "2.86 3.68 2.97 2/6530 986646"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 300.015,
|
||||
"utc": "2026-10-23T07:43:55Z",
|
||||
"load": "2.72 3.64 2.96 2/6518 989821"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 305.015,
|
||||
"utc": "2026-10-23T07:44:00Z",
|
||||
"load": "2.66 3.61 2.95 2/6504 993303"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 310.015,
|
||||
"utc": "2026-10-23T07:44:05Z",
|
||||
"load": "2.77 3.62 2.96 3/6379 996998"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 315.015,
|
||||
"utc": "2026-10-23T07:44:10Z",
|
||||
"load": "2.78 3.61 2.96 3/6398 1000446"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 320.015,
|
||||
"utc": "2026-10-23T07:44:15Z",
|
||||
"load": "2.72 3.58 2.95 3/6378 1003966"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 325.016,
|
||||
"utc": "2026-10-23T07:44:20Z",
|
||||
"load": "2.90 3.61 2.97 1/6404 1007129"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 330.016,
|
||||
"utc": "2026-10-23T07:44:25Z",
|
||||
"load": "2.75 3.56 2.96 2/6357 1009536"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 335.016,
|
||||
"utc": "2026-10-23T07:44:30Z",
|
||||
"load": "2.69 3.54 2.95 3/6346 1011941"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 340.016,
|
||||
"utc": "2026-10-23T07:44:35Z",
|
||||
"load": "2.56 3.49 2.94 2/6359 1014274"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 345.017,
|
||||
"utc": "2026-10-23T07:44:40Z",
|
||||
"load": "2.43 3.45 2.93 2/6364 1016643"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 350.017,
|
||||
"utc": "2026-10-23T07:44:45Z",
|
||||
"load": "2.24 3.39 2.91 2/6385 1019039"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 355.017,
|
||||
"utc": "2026-10-23T07:44:50Z",
|
||||
"load": "2.14 3.35 2.90 2/6398 1021488"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 360.017,
|
||||
"utc": "2026-10-23T07:44:55Z",
|
||||
"load": "2.12 3.33 2.90 1/6372 1024145"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 365.018,
|
||||
"utc": "2026-10-23T07:45:00Z",
|
||||
"load": "2.03 3.29 2.89 2/6356 1026540"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 370.018,
|
||||
"utc": "2026-10-23T07:45:05Z",
|
||||
"load": "2.03 3.27 2.88 4/6367 1028881"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 375.018,
|
||||
"utc": "2026-10-23T07:45:10Z",
|
||||
"load": "2.03 3.25 2.88 4/6356 1031296"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 380.018,
|
||||
"utc": "2026-10-23T07:45:15Z",
|
||||
"load": "2.43 3.31 2.90 4/6364 1034002"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 385.019,
|
||||
"utc": "2026-10-23T07:45:20Z",
|
||||
"load": "2.47 3.31 2.90 4/6431 1037181"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 390.019,
|
||||
"utc": "2026-10-23T07:45:25Z",
|
||||
"load": "2.52 3.30 2.90 3/6366 1040453"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 395.019,
|
||||
"utc": "2026-10-23T07:45:30Z",
|
||||
"load": "2.71 3.33 2.91 2/6356 1043515"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 400.019,
|
||||
"utc": "2026-10-23T07:45:35Z",
|
||||
"load": "2.58 3.29 2.90 2/6353 1047043"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 405.019,
|
||||
"utc": "2026-10-23T07:45:40Z",
|
||||
"load": "2.61 3.29 2.90 3/6371 1050590"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 410.02,
|
||||
"utc": "2026-10-23T07:45:45Z",
|
||||
"load": "2.56 3.26 2.90 4/6371 1054393"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 415.02,
|
||||
"utc": "2026-10-23T07:45:50Z",
|
||||
"load": "2.44 3.23 2.89 2/6391 1057424"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 420.02,
|
||||
"utc": "2026-10-23T07:45:55Z",
|
||||
"load": "2.40 3.21 2.88 2/6381 1059953"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 425.02,
|
||||
"utc": "2026-10-23T07:46:00Z",
|
||||
"load": "2.53 3.22 2.89 6/6361 1062385"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 430.021,
|
||||
"utc": "2026-10-23T07:46:05Z",
|
||||
"load": "2.49 3.20 2.88 5/6347 1064852"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 435.021,
|
||||
"utc": "2026-10-23T07:46:10Z",
|
||||
"load": "2.37 3.16 2.87 4/6362 1067362"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 440.021,
|
||||
"utc": "2026-10-23T07:46:15Z",
|
||||
"load": "2.26 3.13 2.86 2/6373 1069948"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 445.021,
|
||||
"utc": "2026-10-23T07:46:20Z",
|
||||
"load": "2.16 3.09 2.85 2/6397 1072349"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 450.022,
|
||||
"utc": "2026-10-23T07:46:25Z",
|
||||
"load": "2.22 3.09 2.85 3/6359 1075002"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 455.022,
|
||||
"utc": "2026-10-23T07:46:30Z",
|
||||
"load": "2.21 3.07 2.85 2/6341 1077533"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 460.022,
|
||||
"utc": "2026-10-23T07:46:35Z",
|
||||
"load": "2.19 3.05 2.85 2/6351 1080042"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 465.022,
|
||||
"utc": "2026-10-23T07:46:40Z",
|
||||
"load": "2.26 3.05 2.85 2/6353 1084865"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 470.022,
|
||||
"utc": "2026-10-23T07:46:45Z",
|
||||
"load": "2.23 3.03 2.84 2/6375 1087473"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 475.023,
|
||||
"utc": "2026-10-23T07:46:50Z",
|
||||
"load": "2.30 3.03 2.84 5/6406 1090849"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 480.023,
|
||||
"utc": "2026-10-23T07:46:55Z",
|
||||
"load": "3.07 3.18 2.89 2/6380 1094664"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 485.023,
|
||||
"utc": "2026-10-23T07:47:00Z",
|
||||
"load": "3.07 3.18 2.89 4/6352 1098090"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 490.023,
|
||||
"utc": "2026-10-23T07:47:05Z",
|
||||
"load": "3.06 3.17 2.89 7/6377 1101587"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 495.024,
|
||||
"utc": "2026-10-23T07:47:10Z",
|
||||
"load": "3.06 3.17 2.89 6/6350 1104939"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 500.024,
|
||||
"utc": "2026-10-23T07:47:15Z",
|
||||
"load": "2.97 3.15 2.89 4/6368 1107224"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 505.024,
|
||||
"utc": "2026-10-23T07:47:20Z",
|
||||
"load": "2.89 3.13 2.88 2/6386 1109380"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 510.024,
|
||||
"utc": "2026-10-23T07:47:25Z",
|
||||
"load": "3.22 3.20 2.91 1/6387 1110174"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 515.024,
|
||||
"utc": "2026-10-23T07:47:30Z",
|
||||
"load": "3.12 3.18 2.90 4/6370 1111210"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 520.025,
|
||||
"utc": "2026-10-23T07:47:35Z",
|
||||
"load": "2.95 3.14 2.89 3/6330 1112228"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 525.025,
|
||||
"utc": "2026-10-23T07:47:40Z",
|
||||
"load": "2.72 3.09 2.88 1/6328 1112851"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 530.025,
|
||||
"utc": "2026-10-23T07:47:45Z",
|
||||
"load": "2.58 3.05 2.87 1/6357 1113559"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 535.025,
|
||||
"utc": "2026-10-23T07:47:50Z",
|
||||
"load": "2.45 3.02 2.86 1/6366 1114165"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 540.026,
|
||||
"utc": "2026-10-23T07:47:55Z",
|
||||
"load": "2.26 2.97 2.84 1/6356 1114925"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 545.026,
|
||||
"utc": "2026-10-23T07:48:00Z",
|
||||
"load": "2.16 2.94 2.83 3/6326 1115379"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 550.026,
|
||||
"utc": "2026-10-23T07:48:05Z",
|
||||
"load": "1.98 2.89 2.81 1/6330 1115933"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 555.026,
|
||||
"utc": "2026-10-23T07:48:10Z",
|
||||
"load": "1.90 2.86 2.80 5/6348 1117979"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 560.026,
|
||||
"utc": "2026-10-23T07:48:15Z",
|
||||
"load": "1.75 2.81 2.79 5/6352 1119958"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 565.027,
|
||||
"utc": "2026-10-23T07:48:20Z",
|
||||
"load": "1.69 2.78 2.78 3/6395 1121255"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 570.027,
|
||||
"utc": "2026-10-23T07:48:25Z",
|
||||
"load": "1.63 2.75 2.77 2/6344 1122878"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 575.027,
|
||||
"utc": "2026-10-23T07:48:30Z",
|
||||
"load": "1.58 2.72 2.76 2/6330 1125425"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 580.027,
|
||||
"utc": "2026-10-23T07:48:35Z",
|
||||
"load": "1.54 2.69 2.75 3/6307 1128035"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 585.028,
|
||||
"utc": "2026-10-23T07:48:40Z",
|
||||
"load": "1.81 2.73 2.76 3/6395 1131079"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 590.028,
|
||||
"utc": "2026-10-23T07:48:45Z",
|
||||
"load": "1.75 2.70 2.75 2/6324 1133629"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 595.028,
|
||||
"utc": "2026-10-23T07:48:50Z",
|
||||
"load": "1.77 2.69 2.75 2/6354 1135983"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 600.028,
|
||||
"utc": "2026-10-23T07:48:55Z",
|
||||
"load": "1.71 2.66 2.74 2/6317 1138250"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 605.029,
|
||||
"utc": "2026-10-23T07:49:00Z",
|
||||
"load": "1.65 2.63 2.73 2/6307 1140569"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 610.029,
|
||||
"utc": "2026-10-23T07:49:05Z",
|
||||
"load": "1.68 2.62 2.72 2/5871 1142432"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 615.029,
|
||||
"utc": "2026-10-23T07:49:10Z",
|
||||
"load": "1.70 2.61 2.72 2/5858 1144385"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 620.029,
|
||||
"utc": "2026-10-23T07:49:15Z",
|
||||
"load": "1.57 2.57 2.71 1/5860 1145308"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 625.03,
|
||||
"utc": "2026-10-23T07:49:20Z",
|
||||
"load": "1.60 2.56 2.70 2/5872 1147140"
|
||||
},
|
||||
{
|
||||
"wall_seconds": 630.03,
|
||||
"utc": "2026-10-23T07:49:25Z",
|
||||
"load": "1.55 2.53 2.69 2/5844 1149434"
|
||||
}
|
||||
]
|
||||
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
@@ -1,909 +0,0 @@
|
||||
{
|
||||
"grant": "sage-3268",
|
||||
"m4_ruling": "sage-3273 / mos-1426",
|
||||
"head": "ffa93b054f28852a75017928d8478bdf9046e717",
|
||||
"manifest": "277ace0b4274970d5bd4c05cf8fe99aa1e7ebc469a719e4cefcb334a75d3865d",
|
||||
"status": "GREEN",
|
||||
"cli_file_list": [
|
||||
"packages/cli/tests/access-boot.test.mjs",
|
||||
"packages/cli/tests/access.test.mjs",
|
||||
"packages/cli/tests/app.test.mjs",
|
||||
"packages/cli/tests/boot-status.test.mjs",
|
||||
"packages/cli/tests/case1-accept.test.mjs",
|
||||
"packages/cli/tests/case1-hostcheck.test.mjs",
|
||||
"packages/cli/tests/case2-persona-import.test.mjs",
|
||||
"packages/cli/tests/case2-unit.test.mjs",
|
||||
"packages/cli/tests/channel-cli.test.mjs",
|
||||
"packages/cli/tests/channel-recovery.test.mjs",
|
||||
"packages/cli/tests/cli.test.mjs",
|
||||
"packages/cli/tests/compactions-launch.test.mjs",
|
||||
"packages/cli/tests/config.test.mjs",
|
||||
"packages/cli/tests/credentials.test.mjs",
|
||||
"packages/cli/tests/follow.test.mjs",
|
||||
"packages/cli/tests/format.test.mjs",
|
||||
"packages/cli/tests/gate-lane-auth.test.mjs",
|
||||
"packages/cli/tests/gate-lane-fixtures.test.mjs",
|
||||
"packages/cli/tests/gate-lane-image.test.mjs",
|
||||
"packages/cli/tests/gate-lane-state.test.mjs",
|
||||
"packages/cli/tests/gate-lane.test.mjs",
|
||||
"packages/cli/tests/git-socket.test.mjs",
|
||||
"packages/cli/tests/grants.test.mjs",
|
||||
"packages/cli/tests/host.test.mjs",
|
||||
"packages/cli/tests/hosts.test.mjs",
|
||||
"packages/cli/tests/instances.test.mjs",
|
||||
"packages/cli/tests/launch-account.test.mjs",
|
||||
"packages/cli/tests/launch-limit-checks.test.mjs",
|
||||
"packages/cli/tests/launch-limits.test.mjs",
|
||||
"packages/cli/tests/launch-routes.test.mjs",
|
||||
"packages/cli/tests/launcher.test.mjs",
|
||||
"packages/cli/tests/lifecycle.test.mjs",
|
||||
"packages/cli/tests/limits-tokens.test.mjs",
|
||||
"packages/cli/tests/limits.test.mjs",
|
||||
"packages/cli/tests/mark-read.test.mjs",
|
||||
"packages/cli/tests/names.test.mjs",
|
||||
"packages/cli/tests/notifier.test.mjs",
|
||||
"packages/cli/tests/other-tree.test.mjs",
|
||||
"packages/cli/tests/processing-cli.test.mjs",
|
||||
"packages/cli/tests/project-name-repo.test.mjs",
|
||||
"packages/cli/tests/project.test.mjs",
|
||||
"packages/cli/tests/publish-socket.test.mjs",
|
||||
"packages/cli/tests/session-clear.test.mjs",
|
||||
"packages/cli/tests/session-launch.test.mjs",
|
||||
"packages/cli/tests/stack-copy.test.mjs",
|
||||
"packages/cli/tests/stack-instances.test.mjs",
|
||||
"packages/cli/tests/stack-release-external.test.mjs",
|
||||
"packages/cli/tests/stack-release.test.mjs",
|
||||
"packages/cli/tests/stack-upgrade.test.mjs",
|
||||
"packages/cli/tests/tester-http.test.mjs",
|
||||
"packages/cli/tests/tester-reads.test.mjs",
|
||||
"packages/cli/tests/tester-threads.test.mjs",
|
||||
"packages/cli/tests/tester.test.mjs",
|
||||
"packages/cli/tests/thread-cli.test.mjs",
|
||||
"packages/cli/tests/thread-launch.test.mjs",
|
||||
"packages/cli/tests/trackers-boot.test.mjs",
|
||||
"packages/cli/tests/transport.test.mjs",
|
||||
"packages/cli/tests/usage.test.mjs",
|
||||
"packages/cli/tests/verbs.test.mjs"
|
||||
],
|
||||
"cli_file_count": 59,
|
||||
"stages": [
|
||||
{
|
||||
"label": "syntax-1",
|
||||
"argv": [
|
||||
"timeout",
|
||||
"-k",
|
||||
"10",
|
||||
"120",
|
||||
"node",
|
||||
"--check",
|
||||
"packages/cli/tests/case-p10-timing-fixture.mjs"
|
||||
],
|
||||
"limit_seconds": 120,
|
||||
"tmpdir": "/mnt/storage/scratch/tmp/g6MkUyY",
|
||||
"started_utc": "2026-10-23T07:26:54Z",
|
||||
"start_load": "1.05 1.69 2.00 5/6642 199026",
|
||||
"log": "/mnt/storage/scratch/tmp/gABO62Q/records/syntax-1.log",
|
||||
"expected_red": false,
|
||||
"rc": 0,
|
||||
"wall_seconds": 0.032,
|
||||
"finished_utc": "2026-10-23T07:26:54Z",
|
||||
"end_load": "1.05 1.69 2.00 3/6641 199047",
|
||||
"counts": {},
|
||||
"metrics": [],
|
||||
"skip_lines": [],
|
||||
"external_timeout": false
|
||||
},
|
||||
{
|
||||
"label": "syntax-2",
|
||||
"argv": [
|
||||
"timeout",
|
||||
"-k",
|
||||
"10",
|
||||
"120",
|
||||
"node",
|
||||
"--check",
|
||||
"packages/cli/tests/case1-accept.test.mjs"
|
||||
],
|
||||
"limit_seconds": 120,
|
||||
"tmpdir": "/mnt/storage/scratch/tmp/gbr1O5v",
|
||||
"started_utc": "2026-10-23T07:26:55Z",
|
||||
"start_load": "1.05 1.69 2.00 2/6651 202505",
|
||||
"log": "/mnt/storage/scratch/tmp/gABO62Q/records/syntax-2.log",
|
||||
"expected_red": false,
|
||||
"rc": 0,
|
||||
"wall_seconds": 0.032,
|
||||
"finished_utc": "2026-10-23T07:26:55Z",
|
||||
"end_load": "1.05 1.69 2.00 1/6651 202515",
|
||||
"counts": {},
|
||||
"metrics": [],
|
||||
"skip_lines": [],
|
||||
"external_timeout": false
|
||||
},
|
||||
{
|
||||
"label": "case1-whole-1",
|
||||
"argv": [
|
||||
"timeout",
|
||||
"-k",
|
||||
"10",
|
||||
"1200",
|
||||
"node",
|
||||
"--test",
|
||||
"--test-reporter=tap",
|
||||
"packages/cli/tests/case1-accept.test.mjs"
|
||||
],
|
||||
"limit_seconds": 1200,
|
||||
"tmpdir": "/mnt/storage/scratch/tmp/geSGqXZ",
|
||||
"started_utc": "2026-10-23T07:26:57Z",
|
||||
"start_load": "1.05 1.69 2.00 1/6640 205920",
|
||||
"log": "/mnt/storage/scratch/tmp/gABO62Q/records/case1-whole-1.log",
|
||||
"expected_red": false,
|
||||
"rc": 0,
|
||||
"wall_seconds": 239.134,
|
||||
"finished_utc": "2026-10-23T07:30:56Z",
|
||||
"end_load": "3.41 2.47 2.22 1/6690 353962",
|
||||
"counts": {
|
||||
"tests": 53,
|
||||
"pass": 53,
|
||||
"fail": 0,
|
||||
"cancelled": 0,
|
||||
"skipped": 0,
|
||||
"todo": 0
|
||||
},
|
||||
"metrics": [
|
||||
{
|
||||
"fault": "inner",
|
||||
"mode": "exec",
|
||||
"baselineSeconds": 1.8914214159999974,
|
||||
"faultSeconds": 3.974223306999993,
|
||||
"probeSeconds": 2.25
|
||||
},
|
||||
{
|
||||
"fault": "inner",
|
||||
"mode": "hop",
|
||||
"baselineSeconds": 1.8980776110000006,
|
||||
"faultSeconds": 4.004310756999999,
|
||||
"probeSeconds": 2.27
|
||||
},
|
||||
{
|
||||
"fault": "outer",
|
||||
"mode": "exec",
|
||||
"baselineSeconds": 1.8725320299999875,
|
||||
"faultSeconds": 5.715126132999998,
|
||||
"probeSeconds": 4
|
||||
},
|
||||
{
|
||||
"fault": "outer",
|
||||
"mode": "hop",
|
||||
"baselineSeconds": 1.8715896639999992,
|
||||
"faultSeconds": 5.726812752999991,
|
||||
"probeSeconds": 4
|
||||
}
|
||||
],
|
||||
"skip_lines": [],
|
||||
"external_timeout": false
|
||||
},
|
||||
{
|
||||
"label": "case1-whole-2",
|
||||
"argv": [
|
||||
"timeout",
|
||||
"-k",
|
||||
"10",
|
||||
"1200",
|
||||
"node",
|
||||
"--test",
|
||||
"--test-reporter=tap",
|
||||
"packages/cli/tests/case1-accept.test.mjs"
|
||||
],
|
||||
"limit_seconds": 1200,
|
||||
"tmpdir": "/mnt/storage/scratch/tmp/gd0qwWL",
|
||||
"started_utc": "2026-10-23T07:30:57Z",
|
||||
"start_load": "3.41 2.47 2.22 4/6666 357541",
|
||||
"log": "/mnt/storage/scratch/tmp/gABO62Q/records/case1-whole-2.log",
|
||||
"expected_red": false,
|
||||
"rc": 0,
|
||||
"wall_seconds": 240.044,
|
||||
"finished_utc": "2026-10-23T07:34:57Z",
|
||||
"end_load": "2.00 2.32 2.22 1/6458 505199",
|
||||
"counts": {
|
||||
"tests": 53,
|
||||
"pass": 53,
|
||||
"fail": 0,
|
||||
"cancelled": 0,
|
||||
"skipped": 0,
|
||||
"todo": 0
|
||||
},
|
||||
"metrics": [
|
||||
{
|
||||
"fault": "inner",
|
||||
"mode": "exec",
|
||||
"baselineSeconds": 1.9894229939999932,
|
||||
"faultSeconds": 4.213512103000001,
|
||||
"probeSeconds": 2.29
|
||||
},
|
||||
{
|
||||
"fault": "inner",
|
||||
"mode": "hop",
|
||||
"baselineSeconds": 2.056171266999998,
|
||||
"faultSeconds": 4.169351735999997,
|
||||
"probeSeconds": 2.28
|
||||
},
|
||||
{
|
||||
"fault": "outer",
|
||||
"mode": "exec",
|
||||
"baselineSeconds": 1.9589971570000053,
|
||||
"faultSeconds": 5.726783651999998,
|
||||
"probeSeconds": 4
|
||||
},
|
||||
{
|
||||
"fault": "outer",
|
||||
"mode": "hop",
|
||||
"baselineSeconds": 1.879084925999996,
|
||||
"faultSeconds": 5.732443853999998,
|
||||
"probeSeconds": 4.01
|
||||
}
|
||||
],
|
||||
"skip_lines": [],
|
||||
"external_timeout": false
|
||||
},
|
||||
{
|
||||
"label": "case1-whole-3",
|
||||
"argv": [
|
||||
"timeout",
|
||||
"-k",
|
||||
"10",
|
||||
"1200",
|
||||
"node",
|
||||
"--test",
|
||||
"--test-reporter=tap",
|
||||
"packages/cli/tests/case1-accept.test.mjs"
|
||||
],
|
||||
"limit_seconds": 1200,
|
||||
"tmpdir": "/mnt/storage/scratch/tmp/gdjuph7",
|
||||
"started_utc": "2026-10-23T07:34:59Z",
|
||||
"start_load": "2.08 2.33 2.22 4/6464 509071",
|
||||
"log": "/mnt/storage/scratch/tmp/gABO62Q/records/case1-whole-3.log",
|
||||
"expected_red": false,
|
||||
"rc": 0,
|
||||
"wall_seconds": 235.011,
|
||||
"finished_utc": "2026-10-23T07:38:54Z",
|
||||
"end_load": "1.91 2.18 2.19 2/6403 652743",
|
||||
"counts": {
|
||||
"tests": 53,
|
||||
"pass": 53,
|
||||
"fail": 0,
|
||||
"cancelled": 0,
|
||||
"skipped": 0,
|
||||
"todo": 0
|
||||
},
|
||||
"metrics": [
|
||||
{
|
||||
"fault": "inner",
|
||||
"mode": "exec",
|
||||
"baselineSeconds": 1.8627637730000133,
|
||||
"faultSeconds": 3.9948855329999935,
|
||||
"probeSeconds": 2.25
|
||||
},
|
||||
{
|
||||
"fault": "inner",
|
||||
"mode": "hop",
|
||||
"baselineSeconds": 1.8459824050000024,
|
||||
"faultSeconds": 3.963717149000004,
|
||||
"probeSeconds": 2.26
|
||||
},
|
||||
{
|
||||
"fault": "outer",
|
||||
"mode": "exec",
|
||||
"baselineSeconds": 1.8736066859999991,
|
||||
"faultSeconds": 5.7249899409999925,
|
||||
"probeSeconds": 4
|
||||
},
|
||||
{
|
||||
"fault": "outer",
|
||||
"mode": "hop",
|
||||
"baselineSeconds": 1.8894593350000068,
|
||||
"faultSeconds": 5.709737833999999,
|
||||
"probeSeconds": 4
|
||||
}
|
||||
],
|
||||
"skip_lines": [],
|
||||
"external_timeout": false
|
||||
},
|
||||
{
|
||||
"label": "cli-whole",
|
||||
"argv": [
|
||||
"timeout",
|
||||
"-k",
|
||||
"10",
|
||||
"5400",
|
||||
"node",
|
||||
"--test",
|
||||
"--test-reporter=tap",
|
||||
"packages/cli/tests/access-boot.test.mjs",
|
||||
"packages/cli/tests/access.test.mjs",
|
||||
"packages/cli/tests/app.test.mjs",
|
||||
"packages/cli/tests/boot-status.test.mjs",
|
||||
"packages/cli/tests/case1-accept.test.mjs",
|
||||
"packages/cli/tests/case1-hostcheck.test.mjs",
|
||||
"packages/cli/tests/case2-persona-import.test.mjs",
|
||||
"packages/cli/tests/case2-unit.test.mjs",
|
||||
"packages/cli/tests/channel-cli.test.mjs",
|
||||
"packages/cli/tests/channel-recovery.test.mjs",
|
||||
"packages/cli/tests/cli.test.mjs",
|
||||
"packages/cli/tests/compactions-launch.test.mjs",
|
||||
"packages/cli/tests/config.test.mjs",
|
||||
"packages/cli/tests/credentials.test.mjs",
|
||||
"packages/cli/tests/follow.test.mjs",
|
||||
"packages/cli/tests/format.test.mjs",
|
||||
"packages/cli/tests/gate-lane-auth.test.mjs",
|
||||
"packages/cli/tests/gate-lane-fixtures.test.mjs",
|
||||
"packages/cli/tests/gate-lane-image.test.mjs",
|
||||
"packages/cli/tests/gate-lane-state.test.mjs",
|
||||
"packages/cli/tests/gate-lane.test.mjs",
|
||||
"packages/cli/tests/git-socket.test.mjs",
|
||||
"packages/cli/tests/grants.test.mjs",
|
||||
"packages/cli/tests/host.test.mjs",
|
||||
"packages/cli/tests/hosts.test.mjs",
|
||||
"packages/cli/tests/instances.test.mjs",
|
||||
"packages/cli/tests/launch-account.test.mjs",
|
||||
"packages/cli/tests/launch-limit-checks.test.mjs",
|
||||
"packages/cli/tests/launch-limits.test.mjs",
|
||||
"packages/cli/tests/launch-routes.test.mjs",
|
||||
"packages/cli/tests/launcher.test.mjs",
|
||||
"packages/cli/tests/lifecycle.test.mjs",
|
||||
"packages/cli/tests/limits-tokens.test.mjs",
|
||||
"packages/cli/tests/limits.test.mjs",
|
||||
"packages/cli/tests/mark-read.test.mjs",
|
||||
"packages/cli/tests/names.test.mjs",
|
||||
"packages/cli/tests/notifier.test.mjs",
|
||||
"packages/cli/tests/other-tree.test.mjs",
|
||||
"packages/cli/tests/processing-cli.test.mjs",
|
||||
"packages/cli/tests/project-name-repo.test.mjs",
|
||||
"packages/cli/tests/project.test.mjs",
|
||||
"packages/cli/tests/publish-socket.test.mjs",
|
||||
"packages/cli/tests/session-clear.test.mjs",
|
||||
"packages/cli/tests/session-launch.test.mjs",
|
||||
"packages/cli/tests/stack-copy.test.mjs",
|
||||
"packages/cli/tests/stack-instances.test.mjs",
|
||||
"packages/cli/tests/stack-release-external.test.mjs",
|
||||
"packages/cli/tests/stack-release.test.mjs",
|
||||
"packages/cli/tests/stack-upgrade.test.mjs",
|
||||
"packages/cli/tests/tester-http.test.mjs",
|
||||
"packages/cli/tests/tester-reads.test.mjs",
|
||||
"packages/cli/tests/tester-threads.test.mjs",
|
||||
"packages/cli/tests/tester.test.mjs",
|
||||
"packages/cli/tests/thread-cli.test.mjs",
|
||||
"packages/cli/tests/thread-launch.test.mjs",
|
||||
"packages/cli/tests/trackers-boot.test.mjs",
|
||||
"packages/cli/tests/transport.test.mjs",
|
||||
"packages/cli/tests/usage.test.mjs",
|
||||
"packages/cli/tests/verbs.test.mjs"
|
||||
],
|
||||
"limit_seconds": 5400,
|
||||
"tmpdir": "/mnt/storage/scratch/tmp/gebsaIr",
|
||||
"started_utc": "2026-10-23T07:38:55Z",
|
||||
"start_load": "1.91 2.18 2.19 1/6404 656161",
|
||||
"log": "/mnt/storage/scratch/tmp/gABO62Q/records/cli-whole.log",
|
||||
"expected_red": false,
|
||||
"rc": 0,
|
||||
"wall_seconds": 631.848,
|
||||
"finished_utc": "2026-10-23T07:49:27Z",
|
||||
"end_load": "1.55 2.53 2.69 1/5811 1150227",
|
||||
"counts": {
|
||||
"tests": 917,
|
||||
"pass": 917,
|
||||
"fail": 0,
|
||||
"cancelled": 0,
|
||||
"skipped": 0,
|
||||
"todo": 0
|
||||
},
|
||||
"metrics": [
|
||||
{
|
||||
"fault": "inner",
|
||||
"mode": "exec",
|
||||
"baselineSeconds": 2.0945929310000064,
|
||||
"faultSeconds": 4.18209504700001,
|
||||
"probeSeconds": 2.27
|
||||
},
|
||||
{
|
||||
"fault": "inner",
|
||||
"mode": "hop",
|
||||
"baselineSeconds": 1.9464092949999903,
|
||||
"faultSeconds": 4.171354483000003,
|
||||
"probeSeconds": 2.27
|
||||
},
|
||||
{
|
||||
"fault": "outer",
|
||||
"mode": "exec",
|
||||
"baselineSeconds": 1.9332695270000113,
|
||||
"faultSeconds": 5.785670190999998,
|
||||
"probeSeconds": 4.01
|
||||
},
|
||||
{
|
||||
"fault": "outer",
|
||||
"mode": "hop",
|
||||
"baselineSeconds": 1.8855918230000097,
|
||||
"faultSeconds": 5.739914212000003,
|
||||
"probeSeconds": 4.01
|
||||
}
|
||||
],
|
||||
"skip_lines": [],
|
||||
"external_timeout": false
|
||||
},
|
||||
{
|
||||
"label": "M1-syntax",
|
||||
"argv": [
|
||||
"timeout",
|
||||
"-k",
|
||||
"10",
|
||||
"120",
|
||||
"bash",
|
||||
"-n",
|
||||
"scripts/case1-accept.sh"
|
||||
],
|
||||
"limit_seconds": 120,
|
||||
"tmpdir": "/mnt/storage/scratch/tmp/gh8s2Og",
|
||||
"started_utc": "2026-10-23T07:49:28Z",
|
||||
"start_load": "1.51 2.50 2.68 3/5810 1153451",
|
||||
"log": "/mnt/storage/scratch/tmp/gABO62Q/records/M1-syntax.log",
|
||||
"expected_red": false,
|
||||
"rc": 0,
|
||||
"wall_seconds": 0.008,
|
||||
"finished_utc": "2026-10-23T07:49:28Z",
|
||||
"end_load": "1.51 2.50 2.68 1/5810 1153455",
|
||||
"counts": {},
|
||||
"metrics": [],
|
||||
"skip_lines": [],
|
||||
"external_timeout": false
|
||||
},
|
||||
{
|
||||
"label": "M1",
|
||||
"argv": [
|
||||
"timeout",
|
||||
"-k",
|
||||
"10",
|
||||
"1200",
|
||||
"node",
|
||||
"--test",
|
||||
"--test-reporter=tap",
|
||||
"--test-name-pattern",
|
||||
"^row253 C4 P10 inner reason holds under both sudo models$",
|
||||
"packages/cli/tests/case1-accept.test.mjs"
|
||||
],
|
||||
"limit_seconds": 1200,
|
||||
"tmpdir": "/mnt/storage/scratch/tmp/gxjj9Vd",
|
||||
"started_utc": "2026-10-23T07:49:30Z",
|
||||
"start_load": "1.51 2.50 2.68 1/5816 1156782",
|
||||
"log": "/mnt/storage/scratch/tmp/gABO62Q/records/M1.log",
|
||||
"expected_red": true,
|
||||
"rc": 1,
|
||||
"wall_seconds": 4.774,
|
||||
"finished_utc": "2026-10-23T07:49:34Z",
|
||||
"end_load": "1.47 2.48 2.67 2/5828 1159225",
|
||||
"counts": {
|
||||
"tests": 1,
|
||||
"pass": 0,
|
||||
"fail": 1,
|
||||
"cancelled": 0,
|
||||
"skipped": 0,
|
||||
"todo": 0
|
||||
},
|
||||
"metrics": [
|
||||
{
|
||||
"fault": "inner",
|
||||
"mode": "exec",
|
||||
"baselineSeconds": 1.764558389,
|
||||
"faultSeconds": 2.8568522200000004,
|
||||
"probeSeconds": 1.23
|
||||
}
|
||||
],
|
||||
"skip_lines": [],
|
||||
"external_timeout": false,
|
||||
"killed": true,
|
||||
"kill_test": "row253 C4 P10 inner reason holds under both sudo models",
|
||||
"mutated_sha256": "83fc6e5d93d9dbe8c40995c4e1445a3b61312df3a988a7ad0f7b63c762d2bf3f"
|
||||
},
|
||||
{
|
||||
"label": "M2-syntax",
|
||||
"argv": [
|
||||
"timeout",
|
||||
"-k",
|
||||
"10",
|
||||
"120",
|
||||
"bash",
|
||||
"-n",
|
||||
"scripts/case1-accept.sh"
|
||||
],
|
||||
"limit_seconds": 120,
|
||||
"tmpdir": "/mnt/storage/scratch/tmp/gZ30EQX",
|
||||
"started_utc": "2026-10-23T07:49:36Z",
|
||||
"start_load": "1.47 2.48 2.67 1/5822 1162481",
|
||||
"log": "/mnt/storage/scratch/tmp/gABO62Q/records/M2-syntax.log",
|
||||
"expected_red": false,
|
||||
"rc": 0,
|
||||
"wall_seconds": 0.008,
|
||||
"finished_utc": "2026-10-23T07:49:36Z",
|
||||
"end_load": "1.47 2.48 2.67 1/5822 1162485",
|
||||
"counts": {},
|
||||
"metrics": [],
|
||||
"skip_lines": [],
|
||||
"external_timeout": false
|
||||
},
|
||||
{
|
||||
"label": "M2",
|
||||
"argv": [
|
||||
"timeout",
|
||||
"-k",
|
||||
"10",
|
||||
"1200",
|
||||
"node",
|
||||
"--test",
|
||||
"--test-reporter=tap",
|
||||
"--test-name-pattern",
|
||||
"^row253 C4 P10 inner reason holds under both sudo models$",
|
||||
"packages/cli/tests/case1-accept.test.mjs"
|
||||
],
|
||||
"limit_seconds": 1200,
|
||||
"tmpdir": "/mnt/storage/scratch/tmp/gYr4G6o",
|
||||
"started_utc": "2026-10-23T07:49:37Z",
|
||||
"start_load": "1.47 2.48 2.67 1/5823 1165689",
|
||||
"log": "/mnt/storage/scratch/tmp/gABO62Q/records/M2.log",
|
||||
"expected_red": true,
|
||||
"rc": 1,
|
||||
"wall_seconds": 6.768,
|
||||
"finished_utc": "2026-10-23T07:49:44Z",
|
||||
"end_load": "1.40 2.43 2.66 5/5879 1169357",
|
||||
"counts": {
|
||||
"tests": 1,
|
||||
"pass": 0,
|
||||
"fail": 1,
|
||||
"cancelled": 0,
|
||||
"skipped": 0,
|
||||
"todo": 0
|
||||
},
|
||||
"metrics": [
|
||||
{
|
||||
"fault": "inner",
|
||||
"mode": "exec",
|
||||
"baselineSeconds": 1.754618234,
|
||||
"faultSeconds": 4.849417662,
|
||||
"probeSeconds": 3.24
|
||||
}
|
||||
],
|
||||
"skip_lines": [],
|
||||
"external_timeout": false,
|
||||
"killed": true,
|
||||
"kill_test": "row253 C4 P10 inner reason holds under both sudo models",
|
||||
"mutated_sha256": "269e550da358457cbc85df637f02c323bfc09c21cedea2bc9f4968bedd5c71a4"
|
||||
},
|
||||
{
|
||||
"label": "M3-syntax",
|
||||
"argv": [
|
||||
"timeout",
|
||||
"-k",
|
||||
"10",
|
||||
"120",
|
||||
"bash",
|
||||
"-n",
|
||||
"scripts/case1-accept.sh"
|
||||
],
|
||||
"limit_seconds": 120,
|
||||
"tmpdir": "/mnt/storage/scratch/tmp/gwCkjzX",
|
||||
"started_utc": "2026-10-23T07:49:45Z",
|
||||
"start_load": "1.40 2.43 2.66 2/5844 1172866",
|
||||
"log": "/mnt/storage/scratch/tmp/gABO62Q/records/M3-syntax.log",
|
||||
"expected_red": false,
|
||||
"rc": 0,
|
||||
"wall_seconds": 0.008,
|
||||
"finished_utc": "2026-10-23T07:49:45Z",
|
||||
"end_load": "1.40 2.43 2.66 2/5844 1172870",
|
||||
"counts": {},
|
||||
"metrics": [],
|
||||
"skip_lines": [],
|
||||
"external_timeout": false
|
||||
},
|
||||
{
|
||||
"label": "M3",
|
||||
"argv": [
|
||||
"timeout",
|
||||
"-k",
|
||||
"10",
|
||||
"1200",
|
||||
"node",
|
||||
"--test",
|
||||
"--test-reporter=tap",
|
||||
"--test-name-pattern",
|
||||
"^row253 C4 P10 outer reason holds under both sudo models$",
|
||||
"packages/cli/tests/case1-accept.test.mjs"
|
||||
],
|
||||
"limit_seconds": 1200,
|
||||
"tmpdir": "/mnt/storage/scratch/tmp/g6TrU8V",
|
||||
"started_utc": "2026-10-23T07:49:46Z",
|
||||
"start_load": "1.40 2.43 2.66 2/5868 1176268",
|
||||
"log": "/mnt/storage/scratch/tmp/gABO62Q/records/M3.log",
|
||||
"expected_red": true,
|
||||
"rc": 1,
|
||||
"wall_seconds": 6.618,
|
||||
"finished_utc": "2026-10-23T07:49:53Z",
|
||||
"end_load": "1.41 2.40 2.64 2/5827 1179333",
|
||||
"counts": {
|
||||
"tests": 1,
|
||||
"pass": 0,
|
||||
"fail": 1,
|
||||
"cancelled": 0,
|
||||
"skipped": 0,
|
||||
"todo": 0
|
||||
},
|
||||
"metrics": [
|
||||
{
|
||||
"fault": "outer",
|
||||
"mode": "exec",
|
||||
"baselineSeconds": 1.7982556909999998,
|
||||
"faultSeconds": 4.664919980999999,
|
||||
"probeSeconds": 3.01
|
||||
}
|
||||
],
|
||||
"skip_lines": [],
|
||||
"external_timeout": false,
|
||||
"killed": true,
|
||||
"kill_test": "row253 C4 P10 outer reason holds under both sudo models",
|
||||
"mutated_sha256": "21143aeb637ef864cdcb71086b3149c9817b5af752bc431e963c51a04f01b498"
|
||||
},
|
||||
{
|
||||
"label": "M4-syntax",
|
||||
"argv": [
|
||||
"timeout",
|
||||
"-k",
|
||||
"10",
|
||||
"120",
|
||||
"bash",
|
||||
"-n",
|
||||
"scripts/case1-accept.sh"
|
||||
],
|
||||
"limit_seconds": 120,
|
||||
"tmpdir": "/mnt/storage/scratch/tmp/gRPd59t",
|
||||
"started_utc": "2026-10-23T07:49:54Z",
|
||||
"start_load": "1.41 2.40 2.64 3/5836 1182894",
|
||||
"log": "/mnt/storage/scratch/tmp/gABO62Q/records/M4-syntax.log",
|
||||
"expected_red": false,
|
||||
"rc": 0,
|
||||
"wall_seconds": 0.008,
|
||||
"finished_utc": "2026-10-23T07:49:54Z",
|
||||
"end_load": "1.41 2.40 2.64 3/5840 1182903",
|
||||
"counts": {},
|
||||
"metrics": [],
|
||||
"skip_lines": [],
|
||||
"external_timeout": false
|
||||
},
|
||||
{
|
||||
"label": "M4",
|
||||
"argv": [
|
||||
"timeout",
|
||||
"-k",
|
||||
"10",
|
||||
"1200",
|
||||
"node",
|
||||
"--test",
|
||||
"--test-reporter=tap",
|
||||
"--test-name-pattern",
|
||||
"^row253 C4 P10 outer reason holds under both sudo models$",
|
||||
"packages/cli/tests/case1-accept.test.mjs"
|
||||
],
|
||||
"limit_seconds": 1200,
|
||||
"tmpdir": "/mnt/storage/scratch/tmp/gAKhO44",
|
||||
"started_utc": "2026-10-23T07:49:56Z",
|
||||
"start_load": "1.41 2.40 2.64 8/5839 1186447",
|
||||
"log": "/mnt/storage/scratch/tmp/gABO62Q/records/M4.log",
|
||||
"expected_red": true,
|
||||
"rc": 1,
|
||||
"wall_seconds": 9.023,
|
||||
"finished_utc": "2026-10-23T07:50:05Z",
|
||||
"end_load": "1.65 2.42 2.65 2/5832 1193403",
|
||||
"counts": {
|
||||
"tests": 1,
|
||||
"pass": 0,
|
||||
"fail": 1,
|
||||
"cancelled": 0,
|
||||
"skipped": 0,
|
||||
"todo": 0
|
||||
},
|
||||
"metrics": [],
|
||||
"skip_lines": [],
|
||||
"external_timeout": false,
|
||||
"guard_return_receipt": {
|
||||
"ruling": "sage-3273 / mos-1426",
|
||||
"configured_ms": 7000,
|
||||
"named_command_returned": true,
|
||||
"rc": 1,
|
||||
"wall_seconds": 9.023,
|
||||
"actual_refusal": "probe-inner-command",
|
||||
"external_timeout": false,
|
||||
"evidence": "named outer-reason ERR_ASSERTION in raw log after the unchanged safety guard returns; guard itself has no log channel"
|
||||
},
|
||||
"killed": true,
|
||||
"kill_test": "row253 C4 P10 outer reason holds under both sudo models",
|
||||
"mutated_sha256": "cde2e58596794ff7c185c46979e2f7abcb3032ec6903653b7043fe17ef54baee"
|
||||
},
|
||||
{
|
||||
"label": "M5-syntax",
|
||||
"argv": [
|
||||
"timeout",
|
||||
"-k",
|
||||
"10",
|
||||
"120",
|
||||
"node",
|
||||
"--check",
|
||||
"packages/cli/tests/case-p10-timing-fixture.mjs"
|
||||
],
|
||||
"limit_seconds": 120,
|
||||
"tmpdir": "/mnt/storage/scratch/tmp/g8waDyO",
|
||||
"started_utc": "2026-10-23T07:50:06Z",
|
||||
"start_load": "1.65 2.42 2.65 2/5826 1197030",
|
||||
"log": "/mnt/storage/scratch/tmp/gABO62Q/records/M5-syntax.log",
|
||||
"expected_red": false,
|
||||
"rc": 0,
|
||||
"wall_seconds": 0.032,
|
||||
"finished_utc": "2026-10-23T07:50:06Z",
|
||||
"end_load": "1.65 2.42 2.65 2/5838 1197071",
|
||||
"counts": {},
|
||||
"metrics": [],
|
||||
"skip_lines": [],
|
||||
"external_timeout": false
|
||||
},
|
||||
{
|
||||
"label": "M5",
|
||||
"argv": [
|
||||
"timeout",
|
||||
"-k",
|
||||
"10",
|
||||
"1200",
|
||||
"node",
|
||||
"--test",
|
||||
"--test-reporter=tap",
|
||||
"--test-name-pattern",
|
||||
"^row253 C4 P10 inner reason holds under both sudo models$",
|
||||
"packages/cli/tests/case1-accept.test.mjs"
|
||||
],
|
||||
"limit_seconds": 1200,
|
||||
"tmpdir": "/mnt/storage/scratch/tmp/gdAgQSv",
|
||||
"started_utc": "2026-10-23T07:50:07Z",
|
||||
"start_load": "1.65 2.42 2.65 2/5824 1200489",
|
||||
"log": "/mnt/storage/scratch/tmp/gABO62Q/records/M5.log",
|
||||
"expected_red": true,
|
||||
"rc": 1,
|
||||
"wall_seconds": 5.816,
|
||||
"finished_utc": "2026-10-23T07:50:13Z",
|
||||
"end_load": "1.63 2.39 2.63 2/5844 1203280",
|
||||
"counts": {
|
||||
"tests": 1,
|
||||
"pass": 0,
|
||||
"fail": 1,
|
||||
"cancelled": 0,
|
||||
"skipped": 0,
|
||||
"todo": 0
|
||||
},
|
||||
"metrics": [],
|
||||
"skip_lines": [],
|
||||
"external_timeout": false,
|
||||
"killed": true,
|
||||
"kill_test": "row253 C4 P10 inner reason holds under both sudo models",
|
||||
"mutated_sha256": "e8a42dc79c14ada3e3339b372af75f2b4688a43ec8748b4cf3acb8bec32a3a23"
|
||||
},
|
||||
{
|
||||
"label": "M6-syntax",
|
||||
"argv": [
|
||||
"timeout",
|
||||
"-k",
|
||||
"10",
|
||||
"120",
|
||||
"node",
|
||||
"--check",
|
||||
"packages/cli/tests/case-p10-timing-fixture.mjs"
|
||||
],
|
||||
"limit_seconds": 120,
|
||||
"tmpdir": "/mnt/storage/scratch/tmp/gD2IEb2",
|
||||
"started_utc": "2026-10-23T07:50:15Z",
|
||||
"start_load": "1.63 2.39 2.63 1/5845 1206646",
|
||||
"log": "/mnt/storage/scratch/tmp/gABO62Q/records/M6-syntax.log",
|
||||
"expected_red": false,
|
||||
"rc": 0,
|
||||
"wall_seconds": 0.032,
|
||||
"finished_utc": "2026-10-23T07:50:15Z",
|
||||
"end_load": "1.63 2.39 2.63 2/5845 1206656",
|
||||
"counts": {},
|
||||
"metrics": [],
|
||||
"skip_lines": [],
|
||||
"external_timeout": false
|
||||
},
|
||||
{
|
||||
"label": "M6",
|
||||
"argv": [
|
||||
"timeout",
|
||||
"-k",
|
||||
"10",
|
||||
"1200",
|
||||
"node",
|
||||
"--test",
|
||||
"--test-reporter=tap",
|
||||
"--test-name-pattern",
|
||||
"^row299 P10 observer records are complete and ordered$",
|
||||
"packages/cli/tests/case1-accept.test.mjs"
|
||||
],
|
||||
"limit_seconds": 1200,
|
||||
"tmpdir": "/mnt/storage/scratch/tmp/gAZq1pv",
|
||||
"started_utc": "2026-10-23T07:50:16Z",
|
||||
"start_load": "1.63 2.39 2.63 2/5837 1210084",
|
||||
"log": "/mnt/storage/scratch/tmp/gABO62Q/records/M6.log",
|
||||
"expected_red": true,
|
||||
"rc": 1,
|
||||
"wall_seconds": 0.164,
|
||||
"finished_utc": "2026-10-23T07:50:16Z",
|
||||
"end_load": "1.63 2.39 2.63 1/5837 1210101",
|
||||
"counts": {
|
||||
"tests": 1,
|
||||
"pass": 0,
|
||||
"fail": 1,
|
||||
"cancelled": 0,
|
||||
"skipped": 0,
|
||||
"todo": 0
|
||||
},
|
||||
"metrics": [],
|
||||
"skip_lines": [],
|
||||
"external_timeout": false,
|
||||
"killed": true,
|
||||
"kill_test": "row299 P10 observer records are complete and ordered",
|
||||
"mutated_sha256": "a4256c6ffdc55c8047693e80114361d9c9ad97898fe58125299d967f5badf417"
|
||||
}
|
||||
],
|
||||
"restores": [
|
||||
{
|
||||
"id": "M1",
|
||||
"path": "scripts/case1-accept.sh",
|
||||
"before_sha256": "89b45bb84e8365f32f08fd055c7db8a0259533f23fe7ab03f484acb25bee92c2",
|
||||
"restored_sha256": "89b45bb84e8365f32f08fd055c7db8a0259533f23fe7ab03f484acb25bee92c2",
|
||||
"git_status": "",
|
||||
"identical": true
|
||||
},
|
||||
{
|
||||
"id": "M2",
|
||||
"path": "scripts/case1-accept.sh",
|
||||
"before_sha256": "89b45bb84e8365f32f08fd055c7db8a0259533f23fe7ab03f484acb25bee92c2",
|
||||
"restored_sha256": "89b45bb84e8365f32f08fd055c7db8a0259533f23fe7ab03f484acb25bee92c2",
|
||||
"git_status": "",
|
||||
"identical": true
|
||||
},
|
||||
{
|
||||
"id": "M3",
|
||||
"path": "scripts/case1-accept.sh",
|
||||
"before_sha256": "89b45bb84e8365f32f08fd055c7db8a0259533f23fe7ab03f484acb25bee92c2",
|
||||
"restored_sha256": "89b45bb84e8365f32f08fd055c7db8a0259533f23fe7ab03f484acb25bee92c2",
|
||||
"git_status": "",
|
||||
"identical": true
|
||||
},
|
||||
{
|
||||
"id": "M4",
|
||||
"path": "scripts/case1-accept.sh",
|
||||
"before_sha256": "89b45bb84e8365f32f08fd055c7db8a0259533f23fe7ab03f484acb25bee92c2",
|
||||
"restored_sha256": "89b45bb84e8365f32f08fd055c7db8a0259533f23fe7ab03f484acb25bee92c2",
|
||||
"git_status": "",
|
||||
"identical": true
|
||||
},
|
||||
{
|
||||
"id": "M5",
|
||||
"path": "packages/cli/tests/case-p10-timing-fixture.mjs",
|
||||
"before_sha256": "7ac9d29281d4076bf2e00b7a07294cd4519d7ae9f97c4f6ddc1d22440c9b071a",
|
||||
"restored_sha256": "7ac9d29281d4076bf2e00b7a07294cd4519d7ae9f97c4f6ddc1d22440c9b071a",
|
||||
"git_status": "",
|
||||
"identical": true
|
||||
},
|
||||
{
|
||||
"id": "M6",
|
||||
"path": "packages/cli/tests/case-p10-timing-fixture.mjs",
|
||||
"before_sha256": "7ac9d29281d4076bf2e00b7a07294cd4519d7ae9f97c4f6ddc1d22440c9b071a",
|
||||
"restored_sha256": "7ac9d29281d4076bf2e00b7a07294cd4519d7ae9f97c4f6ddc1d22440c9b071a",
|
||||
"git_status": "",
|
||||
"identical": true
|
||||
}
|
||||
],
|
||||
"started_utc": "2026-10-23T07:26:52Z",
|
||||
"finished_utc": "2026-10-23T07:50:16Z"
|
||||
}
|
||||
@@ -1,38 +0,0 @@
|
||||
{
|
||||
"utc": "2026-10-23T07:50:47Z",
|
||||
"count": 0,
|
||||
"matches": [],
|
||||
"scope": "All recorded stage TMPDIRs by cwd or argv, and node/tee/FIFO commands with worktree cwd; controller ancestors excluded",
|
||||
"all_matches_count": 4,
|
||||
"preexisting_harness": [
|
||||
{
|
||||
"pid": 14082,
|
||||
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
|
||||
"cmd": "/usr/bin/node /mnt/storage/src/t3-comms/t3-code-agent-mcp/dist/cli.js ",
|
||||
"started_utc": "2026-10-23T07:10:47.750000+00:00",
|
||||
"predates_gate": true
|
||||
},
|
||||
{
|
||||
"pid": 14243,
|
||||
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
|
||||
"cmd": "node /home/jwoltje/.npm/_npx/de2bd410102f5eda/node_modules/.bin/mcp-server-sequential-thinking ",
|
||||
"started_utc": "2026-10-23T07:10:48.770000+00:00",
|
||||
"predates_gate": true
|
||||
},
|
||||
{
|
||||
"pid": 14282,
|
||||
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
|
||||
"cmd": "/usr/bin/node /home/jwoltje/.npm/_npx/15c61037b1978c83/node_modules/chrome-devtools-mcp/build/src/telemetry/watchdog/main.js --parent-pid=14259 --app-version=1.12.0 --os-type=3 ",
|
||||
"started_utc": "2026-10-23T07:10:49.120000+00:00",
|
||||
"predates_gate": true
|
||||
},
|
||||
{
|
||||
"pid": 14383,
|
||||
"cwd": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196",
|
||||
"cmd": "node /home/jwoltje/.npm/_npx/9833c18b2d85bc59/node_modules/.bin/playwright-mcp ",
|
||||
"started_utc": "2026-10-23T07:10:49.540000+00:00",
|
||||
"predates_gate": true
|
||||
}
|
||||
],
|
||||
"classification": "Four MCP harness processes predate the gate; zero gate-created residuals. No processes killed."
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
CLEAR
|
||||
@@ -1,18 +0,0 @@
|
||||
{
|
||||
"label": "syntax-1",
|
||||
"argv": [
|
||||
"timeout",
|
||||
"-k",
|
||||
"10",
|
||||
"120",
|
||||
"node",
|
||||
"--check",
|
||||
"packages/cli/tests/case-p10-timing-fixture.mjs"
|
||||
],
|
||||
"limit_seconds": 120,
|
||||
"tmpdir": "/mnt/storage/scratch/tmp/g6MkUyY",
|
||||
"started_utc": "2026-10-23T07:26:54Z",
|
||||
"start_load": "1.05 1.69 2.00 5/6642 199026",
|
||||
"log": "/mnt/storage/scratch/tmp/gABO62Q/records/syntax-1.log",
|
||||
"expected_red": false
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
[
|
||||
{
|
||||
"wall_seconds": 0.0,
|
||||
"utc": "2026-10-23T07:26:54Z",
|
||||
"load": "1.05 1.69 2.00 7/6643 199027"
|
||||
}
|
||||
]
|
||||
Whitespace-only changes.
@@ -1 +0,0 @@
|
||||
CLEAR
|
||||
@@ -1,18 +0,0 @@
|
||||
{
|
||||
"label": "syntax-2",
|
||||
"argv": [
|
||||
"timeout",
|
||||
"-k",
|
||||
"10",
|
||||
"120",
|
||||
"node",
|
||||
"--check",
|
||||
"packages/cli/tests/case1-accept.test.mjs"
|
||||
],
|
||||
"limit_seconds": 120,
|
||||
"tmpdir": "/mnt/storage/scratch/tmp/gbr1O5v",
|
||||
"started_utc": "2026-10-23T07:26:55Z",
|
||||
"start_load": "1.05 1.69 2.00 2/6651 202505",
|
||||
"log": "/mnt/storage/scratch/tmp/gABO62Q/records/syntax-2.log",
|
||||
"expected_red": false
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
[
|
||||
{
|
||||
"wall_seconds": 0.0,
|
||||
"utc": "2026-10-23T07:26:55Z",
|
||||
"load": "1.05 1.69 2.00 4/6652 202506"
|
||||
}
|
||||
]
|
||||
Whitespace-only changes.
@@ -1,104 +0,0 @@
|
||||
import os,sys,json,time,re,pathlib,subprocess,shlex,hashlib,signal
|
||||
REPO=pathlib.Path('/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196')
|
||||
ROOT=pathlib.Path(__file__).parent; OUT=ROOT/'records'; OUT.mkdir(exist_ok=True)
|
||||
CASE='packages/cli/tests/case1-accept.test.mjs'
|
||||
HELPER='packages/cli/tests/case-p10-timing-fixture.mjs'
|
||||
HEAD='ffa93b054f28852a75017928d8478bdf9046e717'
|
||||
DIGEST='277ace0b4274970d5bd4c05cf8fe99aa1e7ebc469a719e4cefcb334a75d3865d'
|
||||
FILES=sorted(str(p.relative_to(REPO)) for p in (REPO/'packages/cli/tests').glob('*.test.mjs'))
|
||||
PLAN=json.loads((REPO/'agents/gander/work/queue-299/MUTANT-PLAN.json').read_text())['mutants']
|
||||
STATE={'grant':'sage-3268','m4_ruling':'sage-3273 / mos-1426','head':HEAD,'manifest':DIGEST,'status':'PREPARED','cli_file_list':FILES,'cli_file_count':len(FILES),'stages':[],'restores':[]}
|
||||
def utc():return time.strftime('%Y-%m-%dT%H:%M:%SZ',time.gmtime())
|
||||
def git(*args):return subprocess.check_output(['git',*args],cwd=REPO,text=True).strip()
|
||||
def save(): (OUT/'results.json').write_text(json.dumps(STATE,indent=2)+'\n')
|
||||
def stop(reason):
|
||||
STATE['status']='STOP';STATE['reason']=reason;STATE['stopped_utc']=utc();save();print('STOP '+reason,flush=True);raise SystemExit(1)
|
||||
def load(): return pathlib.Path('/proc/loadavg').read_text().strip()
|
||||
def busy(label):
|
||||
r=subprocess.run(['bash','/mnt/storage/scratch/sage-busy-now.sh'],capture_output=True,text=True)
|
||||
(OUT/(label+'.busy.log')).write_text(r.stdout+r.stderr)
|
||||
if r.returncode or r.stdout.strip().splitlines()[-1:]!=['CLEAR']:stop('busy refusal before '+label)
|
||||
def parse_metrics(text):
|
||||
result=[]
|
||||
for line in text.splitlines():
|
||||
m=re.match(r'^\s*#\s*(\{.*\})\s*$',line)
|
||||
if m:
|
||||
try:
|
||||
item=json.loads(m[1])
|
||||
if 'probeSeconds' in item:result.append(item)
|
||||
except json.JSONDecodeError:pass
|
||||
return result
|
||||
def execute(label,args,limit,expected_red=False,syntax=False):
|
||||
busy(label)
|
||||
tmp=subprocess.check_output(['mktemp','-d','/mnt/storage/scratch/tmp/gXXXXXX'],text=True).strip()
|
||||
env=os.environ.copy();env['TMPDIR']=tmp
|
||||
argv=['timeout','-k','10',str(limit),*args]
|
||||
meta={'label':label,'argv':argv,'limit_seconds':limit,'tmpdir':tmp,'started_utc':utc(),'start_load':load(),'log':str(OUT/(label+'.log')),'expected_red':expected_red}
|
||||
(OUT/(label+'.command.json')).write_text(json.dumps(meta,indent=2)+'\n')
|
||||
STATE['active']=meta;save();print('START '+json.dumps(meta),flush=True)
|
||||
shell='set -o pipefail\n'+shlex.join(argv)+' 2>&1 | tee '+shlex.quote(meta['log'])
|
||||
start=time.monotonic();samples=[];p=subprocess.Popen(['bash','-c',shell],cwd=REPO,env=env,start_new_session=True)
|
||||
while True:
|
||||
samples.append({'wall_seconds':round(time.monotonic()-start,3),'utc':utc(),'load':load()})
|
||||
try:rc=p.wait(timeout=5);break
|
||||
except subprocess.TimeoutExpired:
|
||||
if time.monotonic()-start>limit+30:
|
||||
os.killpg(p.pid,signal.SIGKILL);p.wait();stop('outer controller timeout '+label)
|
||||
text=pathlib.Path(meta['log']).read_text();seconds=round(time.monotonic()-start,3)
|
||||
counts={}
|
||||
for key in ['tests','pass','fail','cancelled','skipped','todo']:
|
||||
matches=re.findall(r'^# '+key+r' (\d+)\s*$',text,re.M)
|
||||
if matches:counts[key]=int(matches[-1])
|
||||
row={**meta,'rc':rc,'wall_seconds':seconds,'finished_utc':utc(),'end_load':load(),'counts':counts,'metrics':parse_metrics(text),'skip_lines':[s for s in text.splitlines() if '# SKIP' in s],'external_timeout':rc in (124,137)}
|
||||
(OUT/(label+'.load.json')).write_text(json.dumps(samples,indent=2)+'\n')
|
||||
STATE['stages'].append(row);STATE.pop('active',None);save();print('END '+json.dumps(row),flush=True)
|
||||
if row['external_timeout']:stop('timeout '+label)
|
||||
if not expected_red and rc!=0:stop('unexpected red '+label)
|
||||
if not expected_red and not syntax:
|
||||
if len(row['metrics'])!=4:stop('missing direct P10 diagnostics '+label)
|
||||
for m in row['metrics']:
|
||||
lo,hi=(1.25,2.75) if m['fault']=='inner' else (3.25,4.75)
|
||||
if not lo<=m['probeSeconds']<hi:stop('band overshoot '+label)
|
||||
return row,text
|
||||
save()
|
||||
if len(sys.argv)<2 or sys.argv[1]!='run':sys.exit(0)
|
||||
if git('rev-parse','HEAD')!=HEAD or git('status','--porcelain'):stop('candidate/tree mismatch')
|
||||
manifest=(REPO/'agents/gander/work/queue-299/MANIFEST.sha256').read_bytes()
|
||||
if hashlib.sha256(manifest).hexdigest()!=DIGEST:stop('manifest mismatch')
|
||||
for m in PLAN:
|
||||
data=(REPO/m['path']).read_text()
|
||||
if hashlib.sha256(data.encode()).hexdigest()!=m['source_sha256']:stop('source sha mismatch '+m['id'])
|
||||
if m.get('scope_begin'):data=data[data.index(m['scope_begin']):data.index(m['scope_end'])]
|
||||
if data.count(m['old'])!=1:stop('nonunique target '+m['id'])
|
||||
STATE['status']='RUNNING';STATE['started_utc']=utc();save()
|
||||
print('PREAMBLE '+json.dumps({'head':HEAD,'manifest':DIGEST,'source':'e6751ecab','case_limit':1200,'cli_limit':5400,'cli_file_count':len(FILES),'cli_files':FILES,'ambient_load_is_target_only':True}),flush=True)
|
||||
for i,path in enumerate([HELPER,CASE]):execute('syntax-'+str(i+1),['node','--check',path],120,syntax=True)
|
||||
for i in range(1,4):execute('case1-whole-'+str(i),['node','--test','--test-reporter=tap',CASE],1200)
|
||||
execute('cli-whole',['node','--test','--test-reporter=tap',*FILES],5400)
|
||||
for m in PLAN:
|
||||
original=(REPO/m['path']).read_bytes(); before=hashlib.sha256(original).hexdigest();text=original.decode()
|
||||
if m.get('scope_begin'):
|
||||
start=text.index(m['scope_begin']);end=text.index(m['scope_end']);part=text[start:end];changed=text[:start]+part.replace(m['old'],m['new'],1)+text[end:]
|
||||
else:changed=text.replace(m['old'],m['new'],1)
|
||||
row=None;output=''
|
||||
try:
|
||||
(REPO/m['path']).write_text(changed)
|
||||
ext=m['path'].rsplit('.',1)[-1];syntax=['bash','-n',m['path']] if ext=='sh' else ['node','--check',m['path']]
|
||||
execute(m['id']+'-syntax',syntax,120,syntax=True)
|
||||
row,output=execute(m['id'],['node','--test','--test-reporter=tap','--test-name-pattern','^'+m['killer']+'$',CASE],1200,expected_red=True)
|
||||
finally:
|
||||
(REPO/m['path']).write_bytes(original)
|
||||
restored=hashlib.sha256((REPO/m['path']).read_bytes()).hexdigest();status=git('status','--porcelain')
|
||||
STATE['restores'].append({'id':m['id'],'path':m['path'],'before_sha256':before,'restored_sha256':restored,'git_status':status,'identical':before==restored});save()
|
||||
if before!=restored or status:stop('restore drift '+m['id'])
|
||||
if row is None:stop('no result '+m['id'])
|
||||
if row['rc']==0:stop('survivor '+m['id'])
|
||||
named=bool(re.search(r'^not ok \d+ - '+re.escape(m['killer'])+r'\s*$',output,re.M))
|
||||
assertion='ERR_ASSERTION' in output
|
||||
if not named or not assertion:stop('wrong failure '+m['id'])
|
||||
if m['id'] in ['M1','M2','M3'] and not ('direct probe ' in output and row['metrics']):stop('wrong timing kill '+m['id'])
|
||||
if m['id']=='M4':
|
||||
if 'probe-outer-timeout' not in output or 'probe-inner-command' not in output:stop('wrong outer-reason failure M4')
|
||||
row['guard_return_receipt']={'ruling':'sage-3273 / mos-1426','configured_ms':7000,'named_command_returned':True,'rc':row['rc'],'wall_seconds':row['wall_seconds'],'actual_refusal':'probe-inner-command','external_timeout':False,'evidence':'named outer-reason ERR_ASSERTION in raw log after the unchanged safety guard returns; guard itself has no log channel'}
|
||||
row['killed']=True;row['kill_test']=m['killer'];row['mutated_sha256']=hashlib.sha256(changed.encode()).hexdigest();save()
|
||||
STATE['status']='GREEN';STATE['finished_utc']=utc();save();print('GREEN all whole stages and M1-M6',flush=True)
|
||||
@@ -1,22 +0,0 @@
|
||||
{
|
||||
"row": 294,
|
||||
"round": 2,
|
||||
"ruling": "mos-1412 (through sage-3195): option (a) approved, (b) rejected",
|
||||
"changes": [
|
||||
{
|
||||
"file": "packages/webui/tests/browser.test.mjs",
|
||||
"line": 21,
|
||||
"kind": "comment",
|
||||
"old": " // Rows 129, 154, 191 and 194: chat.js, editor.js, processing.js and agents.js are the scripts added, same origin; the list is the pin, so another script is a visible change.",
|
||||
"new": " // 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."
|
||||
},
|
||||
{
|
||||
"file": "packages/webui/tests/browser.test.mjs",
|
||||
"line": 22,
|
||||
"kind": "assertion",
|
||||
"old": " assert.deepEqual(await b.evaluate('[...document.querySelectorAll(\"script\")].map(s => s.getAttribute(\"src\"))'), ['/editor.js', '/processing.js', '/brand.js', '/app.js', '/markdown-preview.js', '/chat.js', '/agents.js', '/bus.js']);",
|
||||
"new": " 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']);"
|
||||
}
|
||||
],
|
||||
"unchanged": "every other line of browser.test.mjs is byte-identical to c902a767d"
|
||||
}
|
||||
@@ -1,470 +0,0 @@
|
||||
# Row 294 build notes (Launchpad): FED R6, Console granted-user sign-in (#1800)
|
||||
|
||||
Brief: docs/plans/2026-10-23_mvp-readiness-rows.md, "Brief: FED R6, Console granted-user sign-in".
|
||||
Design: agents/gizmoduck/work/federation/DESIGN.md at b93f098f0 (r4.11, sha256 1bcee8df…c8e6),
|
||||
sections 3.1, 3.4, 3.7 and the R6 row of section 7. Assigned in sage-3136. Reviewer Duckworth.
|
||||
|
||||
## Base and chain
|
||||
|
||||
Branch launchpad/row294 on origin/refactor 253346e3c (270+271, schema 3n in packages/bus, and 571).
|
||||
Parents done: 192 (#412 phase 1), R1 (201), R2, R3 (274). Row 208 and R7 (296) wait on this row.
|
||||
|
||||
## Plan
|
||||
|
||||
### What the Console does today
|
||||
|
||||
- `sso.mjs` callback: a `sub` that is not in `console.sso.providers[].subjects` refuses
|
||||
`subject-unknown`. A session record is `{provider, iss, sub, name, ...}` and every signed-in
|
||||
request runs as the business human.
|
||||
- `serve.mjs`: every bus route, chat route and write uses objects built once in `cli.mjs` over the
|
||||
human transport (`busCaller` over `HUMAN_CLI`).
|
||||
- `accessContextFor` (packages/cli/src/access.mjs:62) returns `peers: []`.
|
||||
|
||||
### Build items
|
||||
|
||||
1. **Granted-user sign-in (sso.mjs).** `createSso` takes an optional `users` hook:
|
||||
`users.find({provider, sub})` returns a user id with a live grant, or null. The callback asks it
|
||||
only after the owner subjects miss, so the owner path is unchanged. A user session record carries
|
||||
`user: <id>` and `name: <id>`. A miss on both refuses `subject-unknown`, as today (the log line
|
||||
names the provider, iss and sub; no new code is needed for the refusal).
|
||||
2. **The access hook (new `packages/webui/src/access.mjs`).** `consoleAccess({ load, business })`:
|
||||
- `load` is `() => loadAccess(accessFilePath(configDir()), accessContextFor(system, env))`, R1's
|
||||
loader, called on every use, never cached.
|
||||
- `find({provider, sub})`: the user whose `subjects` hold that pair, with at least one grant in
|
||||
the Console's business that `covers` at level `viewer` (the bus's own liveness test,
|
||||
`#userGrants`). A loader throw finds nobody (fail closed).
|
||||
- `check(session)`: the same test for the session's user and its own `(provider, sub)`. A user
|
||||
whose subject was removed, whose grants were all removed or expired, or whose file now refuses
|
||||
fails it.
|
||||
- `business` resolves as `busCaller` does: `--business`, else the live host state.
|
||||
3. **Per-request re-read (sso.mjs `session()`).** For a user session, `users.check(session)` runs
|
||||
after the expiry check, before any route. A failure deletes the session record and logs
|
||||
`sso refused code=user-revoked provider=<id> user="<id>"`. The request then goes the
|
||||
signed-out way: 401 (`sign-in required`) for /api/ and writes, or the sign-in redirect for a
|
||||
page GET. The cookie is not cleared on that response; it names a session that no longer exists,
|
||||
so it signs nothing in, and the next sign-in replaces it.
|
||||
4. **A user-cli transport per session (new user-bus.mjs, cli.mjs).** `userCall({ socket,
|
||||
business, user })` spawns `USER_CLI` (packages/bus/src/user-cli.mjs) as a
|
||||
direct child of the Console with `MOSAIC_BUS_USER_NONCE` set, so user-cli does not re-exec and
|
||||
the broker's parent check (principal.mjs: parent argv[1] is webui/src/cli.mjs, argv[2] `serve`)
|
||||
sees the Console. The request on stdin is `{business, user, verb, args}`. It never sets
|
||||
`MOSAIC_BUS_CLI_NONCE` (it strips one from the inherited env) and never runs `HUMAN_CLI`.
|
||||
`startServer` takes `userOptions(session)`, a factory that builds the whole bus-backed option
|
||||
set (`consoleBus`, new console-bus.mjs) over that session's user transport, per request.
|
||||
5. **Owner-only controls hidden (serve.mjs and a user page).** A user session reaches only:
|
||||
- the chat routes (`/api/chat/*`), over its own user transport, and
|
||||
- `GET /api/config`, `/healthz`, `/auth/*`, and the user page's static files.
|
||||
Every other path answers 403 `owner-only` before any bus call. Behind that gate, a user request
|
||||
never holds a human-transport object: the handler swaps every bus-backed option (`bus`, `chat`,
|
||||
`send` and each write, `processing`, project files) for the same object built over that
|
||||
session's user transport, and nulls the ones with no bus behind them (`reads`, the board proxy),
|
||||
so with the gate removed an owner route still reaches the broker only as the user, or answers
|
||||
`not-configured`. `GET /` serves a separate page,
|
||||
`user.html` with `user.js`, that renders only projects, threads and messages (no board, inbox,
|
||||
agents, settings, editor, processing or Sign-in-as-owner controls). The owner page's assets are
|
||||
not served to a user session. The gate is one function, `userRoute(path, method)`, so the M1
|
||||
mutant removes one call.
|
||||
6. **The notice.** `user.html` holds row 193's sentence word for word in the thread view:
|
||||
"The business owner sees your thread's agent's decisions, inbox entries, claims, tasks and
|
||||
project files, but not your messages."
|
||||
7. **Hub label and peer links.** `/api/config` returns `federation: {self, peers: [{label,
|
||||
origin}]}` from `system.federation` when set, for owner and user sessions alike. Both pages show
|
||||
"This Console: <self>" and one plain `<a href="<origin>">label</a>` per peer, built with
|
||||
textContent and `setAttribute('href')`; no script, no fetch to a peer, no proxy (the hub proxy
|
||||
route is R8's).
|
||||
8. **F8 peers wiring.** `accessContextFor` returns
|
||||
`peers: (system.federation?.peers ?? []).map((p) => p.id)`, and the ACCESS_USAGE text and the
|
||||
function's comment drop "peer homes are not read yet".
|
||||
9. **Bus boot wiring (packages/cli/src/config.mjs).** `bootConfig` adds
|
||||
`access: { file: accessFilePath(configDir(env)), context: accessContextFor(system, env) }` when
|
||||
the file exists (lstat). No file: no `access` key, so no user binds, as before R6. A context
|
||||
that throws: a warning and no `access`. A file the loader refuses at boot (sage-3153): one
|
||||
warning line, which the host writes to stderr as `mosaic-bus: warning: access file refused at
|
||||
boot (<code>), no granted user binds until it is fixed: <path>`. The access stays wired, so
|
||||
the broker refuses each user bind and the owner's bus boots. R1's loader has no refusal codes,
|
||||
and its messages can quote the file (a JSON parse error, a `got "<value>"`), so the line never
|
||||
carries the message. The code comes from the loader's exit code instead: 4 (the file could not
|
||||
be opened as a regular file, including a symbolic link) is `access-unreadable`, and anything
|
||||
else is `access-invalid`.
|
||||
config.mjs now imports access.mjs, which imports config.mjs (`loadSystem`). The cycle is safe
|
||||
because neither module touches the other's exports at module top level, only inside
|
||||
functions (sage-3153).
|
||||
|
||||
### Choices and departures (for Sage and Duckworth)
|
||||
|
||||
- **C1. A separate user page, not the owner SPA with sections hidden.** "Hidden" here means never
|
||||
sent: the owner page's markup and scripts are not served to a user session. Hiding sections in
|
||||
app.js would ship the owner controls and rely on CSS. Tradeoff: a second small page to keep.
|
||||
- **C2. The Console's gate is an allowlist of user routes**, so a new owner route added later is
|
||||
owner-only by default.
|
||||
- **C2b. No human transport behind a user session.** Without the swap, M1 would send
|
||||
`/api/bus/message` through the owner's `send` over human-cli, and the bus would accept it as the
|
||||
owner. The swap is what makes "the bus refusal stands on its own" true.
|
||||
- **C3. Liveness is the bus's test** (`covers` at `viewer`, in the Console's business), so the
|
||||
Console and the broker agree on who is live. The broker still decides every verb, project,
|
||||
instance and thread (design 3.1 D4).
|
||||
- **C4. The bus's `access` boot option is wired here (sage-3142, Q2; accepted, sage-3153).** Build item 9 above.
|
||||
Sage's ruling: with the file, users bind; without it, none; with a bad file, it "refuses as R1's
|
||||
loader does"; a boot never invents a grant. My reading of "refuses": the broker's `access` is
|
||||
R1's loader, read on every user request, so a bad file refuses every user bind
|
||||
(`access-revoked`) and the owner's bus still boots. Refusing the whole boot would take the
|
||||
owner's bus down over a user file. Tests B3 pin this reading. No live unit or config changes.
|
||||
- **C5. Tests use an in-process Broker behind the user transport seam.** The broker's user
|
||||
principal needs the Console as the user-cli's parent process, which a node:test process is not.
|
||||
So the webui tests inject a `userOptions` factory over a real `Broker` with `bindUser` and an
|
||||
`access` function, and a separate transport test checks the spawn: the `USER_CLI` path, the user
|
||||
nonce variable, no human nonce, and the `{business, user, verb, args}` request. R7 runs the real
|
||||
Console process end to end.
|
||||
|
||||
- **C6. The chat's `plugins` read goes over the owner transport (accepted, sage-3153).**
|
||||
`createChat` asks the bus `plugins` first (createChannelCaller), and `plugins` is not a user
|
||||
verb, so a user chat would refuse before its first read. `createChat({ call, owner })` sends
|
||||
`owner` exactly `plugins` with `{}`, and every other verb goes over `call`. consoleBus passes
|
||||
`owner` through, and cli.mjs gives it `ownerCall`. createChannelCaller
|
||||
(plugins/src/channel.mjs:16-20) uses the answer only to gate the webui channel, server-side.
|
||||
Sage's conditions, each pinned by G9:
|
||||
- the plugins answer never appears in a user's response;
|
||||
- in a user's chat the owner transport carries only `plugins` with `{}`;
|
||||
- every chat verb goes over the user transport.
|
||||
Mutant M8 routes one more chat verb over the owner transport, and G9 kills it. A new broker
|
||||
user verb would have been a policy change, so it is out.
|
||||
- **C7. The user transport is a new file, user-bus.mjs, not a mode in bus.mjs.**
|
||||
bus/tests/channel-proof.test.mjs pins the sha256 of webui/src/bus.mjs (with human-cli.mjs,
|
||||
human.mjs and cli/src/transport.mjs). Changing bus.mjs would mean an old-test change through
|
||||
Mos. user-bus.mjs repeats the spawn and framing code (about 40 lines). bus.mjs is byte-identical
|
||||
to the base. Tradeoff: two copies of the spawn plumbing. Accepted (sage-3153).
|
||||
**Follow-up (not this row):** the next row that re-pins the channel-proof hash folds userCall
|
||||
back into bus.mjs and drops the copy.
|
||||
- **C8. console-bus.mjs.** The bus-backed option set moved out of cli.mjs into `consoleBus(call,
|
||||
{send, plugins})`, so the owner and each user session build the same set the same way. The
|
||||
agent verb lists and `agentCaller` moved with it; the tester socket still builds its own.
|
||||
- **C9. 401 and 403 from the broker.** chat-http's STATUS maps `access-refused` to 403 and
|
||||
`access-revoked` to 401, so a broker refusal reaches the browser as the right status.
|
||||
|
||||
## Exception: the owner transport in a user's chat (C6; mos-1394, sage-3157)
|
||||
|
||||
Duckworth rules on this directly. The same text goes in the manifest notes.
|
||||
|
||||
> In a granted user's chat the Console uses the owner's transport for one call: `plugins` with
|
||||
> `{}`, the channel gate read. Nothing else goes over it. Its answer stays in the Console and is
|
||||
> never sent to the user. No value from the user's session or request reaches the call. Mos ruled
|
||||
> in mos-1394 that this is not an access-rule change, because the Console reads its own channel
|
||||
> gate, and that it holds only while nothing from the user reaches the call. Every chat verb goes
|
||||
> over the user's own transport. Where: createChat's `owner` (chat.mjs) and userOptionsFor
|
||||
> (console-bus.mjs), wired with `ownerCall` in cli.mjs. Pinned by G9 and mutants M8, M10 and M11.
|
||||
> If this reads as owner authority used for the user, it goes back to Mos.
|
||||
|
||||
## Rulings (sage-3153)
|
||||
|
||||
1. Boot wiring is accepted: a bad file refuses every user bind and the owner's bus boots. Added:
|
||||
one stderr line at boot naming the path and a code, never the contents (item 9, B3, M9). The
|
||||
mutual import is fine with no top-level use (item 9).
|
||||
2. C6 is accepted under conditions: the plugins answer stays server-side, the owner transport
|
||||
carries only `plugins` with `{}`, one G test (G9) records both transports, and a mutant (M8)
|
||||
routing one more chat verb over the owner is killed.
|
||||
3. C7 is accepted, with the follow-up note under C7.
|
||||
4. Owned files are accepted. packages/cli/src/access.mjs overlaps Morgana's row 295 (527002f97),
|
||||
and merge-tree is clean. 294 lands first and 295 rebases after it. packages/cli/tests/
|
||||
access.test.mjs is now unchanged: the peer test moved to access-boot.test.mjs, so the only
|
||||
overlap is access.mjs.
|
||||
|
||||
Ruling sage-3157 (mos-1394): the boot line is accepted as built, with no codes from R1. For C6,
|
||||
G9 asserts the owner call is exactly `plugins` with exactly `{}`, and that no value from the
|
||||
session or the request reaches it. Mutants M10 (session value) and M11 (request value) are killed
|
||||
by G9. The exception is written above and goes in the manifest notes. The per-session builder
|
||||
moved into console-bus.mjs (`userOptionsFor`), so the wiring G9 runs is the same code cli.mjs
|
||||
uses, and a session value added there is a mutant G9 can kill.
|
||||
|
||||
## Owned files
|
||||
|
||||
- cli: src/config.mjs, src/access.mjs, tests/access-boot.test.mjs (new)
|
||||
- webui src: sso.mjs, access.mjs (new), console-bus.mjs (new), user-bus.mjs (new), chat.mjs,
|
||||
chat-http.mjs, cli.mjs, serve.mjs
|
||||
- webui public: user.html (new), user.js (new), federation.js (new), index.html, app.js
|
||||
- webui tests: granted-user.test.mjs (new)
|
||||
- this BUILD.md
|
||||
|
||||
No old test changes. Hash pins checked: `git grep` over 'packages/*/tests/*' for each touched
|
||||
path with a 64-hex pin found only channel-proof's bus.mjs pin, which C7 avoids.
|
||||
|
||||
## Tests
|
||||
|
||||
New file packages/webui/tests/granted-user.test.mjs, on Sage's fake OP (tests/helpers/fake-oidc.mjs)
|
||||
and an in-process Broker with an access function, like bus/tests/user-principal.test.mjs:
|
||||
|
||||
- G1 a granted user signs in: session cookie set, `/api/config` says `user`, `GET /` is the user
|
||||
page, the chat lists reach the broker as `user:<id>`.
|
||||
- G2 an ungranted `sub` is refused: a user in the file with no grant, a grant for another business,
|
||||
an expired grant, and a sub in no file; each is `subject-unknown`, no cookie, nothing bound.
|
||||
- G3 revoked mid-session: sign in, then remove the grant, remove the subject, expire the grant,
|
||||
or make the loader refuse. The next chat read is 401 with a `user-revoked` log line and no
|
||||
transport call. Restoring the grant does not bring the session back, and `GET /` redirects to
|
||||
sign-in.
|
||||
- G4 owner verbs: for each owner route (board reads under /api/bus/*, settings, names, instances,
|
||||
routes, agents, processing, project files, /api/bus/message, /api/board), a user session gets
|
||||
403 `owner-only` and the transport ran zero times.
|
||||
- G5 the bus refusal stands alone: the same session's user transport, called directly with each
|
||||
owner verb, gets `access-refused` from the broker. The only write is the broker's own refusal
|
||||
evidence: exactly one `action.refused` event per verb, the count taken from the verb list's length
|
||||
(22 today), each body exactly `{ code: 'access-refused' }`, and every other table's row count
|
||||
unchanged (round 2; run 1 placed the round 1 "events unchanged" pin as a test defect, sage-3194).
|
||||
The broker's `#refused` (bus broker.mjs:4423) writes the code alone and no verb, so the test can't
|
||||
match each event to its verb; pinning the whole body means a field added there shows up here.
|
||||
- G9 the C6 seam (sage-3153, sage-3157), with the test's userOptions built by userOptionsFor as
|
||||
cli.mjs builds them: a user session runs the chat's project list, thread create, list,
|
||||
open, send and messages. The owner transport (a recording `ownerCall`) saw only
|
||||
`['plugins', {}]`. Each chat verb went over the user transport, and `plugins` never did. A
|
||||
marker in the owner's answer appears in no response. Every owner call is exactly
|
||||
`['plugins', {}]`, and none of alice, alice-sub, the thread name, the message body, the project
|
||||
id or the thread id appears in what the owner transport received.
|
||||
- G6 the notice: the user page's notice element text equals the sentence exactly.
|
||||
- G7 hub label and peer links render from config: `/api/config` carries self and the peers'
|
||||
labels and origins; the user and owner pages show "This Console: hub" and an `<a>` per peer with
|
||||
the configured href and label (browser test, sso-browser.test.mjs style).
|
||||
- G8 the transport: `userCall` over a recording unix socket in a scratch dir. While the child
|
||||
waits for the answer, the test reads /proc/<pid>/cmdline (argv[1] is USER_CLI), environ
|
||||
(MOSAIC_BUS_USER_NONCE set; MOSAIC_BUS_CLI_NONCE absent though the parent env passed one) and
|
||||
stat (ppid is the test process, so user-cli did not re-exec). The request line is
|
||||
`{verb, args, user: {business, user, nonce, pid}}`, which user-cli builds from
|
||||
`{business, user, verb, args}`.
|
||||
|
||||
packages/cli/tests/access-boot.test.mjs (sage-3142), over bootConfig and startBroker in a scratch
|
||||
root, the boot config through a JSON round trip as over the host IPC:
|
||||
|
||||
- B1 with access.json: `access.file` and `context.peers` set; alice (home a configured peer)
|
||||
binds; bob gets `access-revoked`.
|
||||
- B2 without the file: no `access` key; alice gets `access-revoked`.
|
||||
- B3 with text that is not JSON, a home that is not a configured peer, and a symbolic link: the
|
||||
bus boots and alice gets `access-revoked`. The warnings are exactly one line, with
|
||||
`access-invalid`, `access-invalid` and `access-unreadable` and the path, and none quotes the
|
||||
file (a marker string in the file is absent from the line).
|
||||
|
||||
access-boot.test.mjs also holds the F8 peer test: a grant whose user's home is a configured peer id
|
||||
validates; an unconfigured peer id refuses `home must be a configured peer`.
|
||||
|
||||
Old tests: the sso.test.mjs and serve tests stay as they are. If one needs a change, it goes to
|
||||
Mos through Sage first (mos-1272).
|
||||
|
||||
## Mutants
|
||||
|
||||
| # | Change | Killed by | Expected |
|
||||
|---|---|---|---|
|
||||
| M1 | remove the `userRoute` gate call in serve.mjs | G4 (:239, first route answers 403 `access-refused`, not `owner-only`) | G4 red at :239 on its first route; G5 green in the same run |
|
||||
| M2 | skip `access.check(session)` per request | G3 | red |
|
||||
| M3 | change one word of the notice in user.html | G6 | red |
|
||||
| M4 | `peers: []` back in accessContextFor | the F8 peer test and B1 (access-boot.test.mjs) | red |
|
||||
| M5 | sign-in skips the grant test (any listed user signs in) | G2 | red |
|
||||
| M6 | userCall sets MOSAIC_BUS_CLI_NONCE or runs HUMAN_CLI | G8 | red |
|
||||
| M7 | bootConfig drops `access` | B1 | red |
|
||||
| M8 | chat.mjs routes `thread.list` over `owner` too | G9 | red |
|
||||
| M9 | accessFor drops the boot refusal line | B3 | red |
|
||||
| M10 | userOptionsFor passes `owner: (v, a) => owner(v, { ...a, sub: session.sub })` | G9 | red |
|
||||
| M11 | chat.mjs keeps the last request's args in `channel()` and passes them to `owner('plugins', …)` | G9 (thread create's `{project, name}` reaches owner) | red |
|
||||
|
||||
M1 is the brief's "owner verb still refused by the bus": with the Console gate gone, the owner
|
||||
verb reaches the broker over the user transport and the broker refuses it (`access-refused`, 403).
|
||||
G4 kills M1 at :239 on its first route, because it pins the Console's own code `owner-only`. The
|
||||
count and "nothing written" asserts at :242-244 come after the loop, so under M1 they never run;
|
||||
the run records G4's failure with the actual value (`access-refused`). The bus refusing on its own
|
||||
is shown by G5, green in the same M1 run. (Corrected per Duckworth C1, duckworth-0249b; the earlier
|
||||
row said G4's "refused, nothing written" stayed green, which cannot be observed under M1.)
|
||||
|
||||
## Run limits
|
||||
|
||||
Each run is `timeout -k 10 LIMIT`. TMPDIR comes from `mktemp -d /mnt/storage/scratch/tmp/gXXXXXX`. A
|
||||
timeout with no failed test goes to Sage first. A timeout in the shell phase goes to Mos unplaced
|
||||
(mos-1275). Under sage-3187, every LIMIT is at least 3x the longest recorded run, set before any run.
|
||||
The order is the webui, cli and bus suites whole, then each scripts/test-*.sh, then the mutants.
|
||||
|
||||
| Run | Longest recorded | Receipt | LIMIT |
|
||||
|---|---|---|---|
|
||||
| webui suite | 57 s | gizmoduck queue-264 BUILD.md:474 (row 278 run 3) | 600 s |
|
||||
| cli suite | 682 s | gizmoduck queue-270 BUILD.md:660 (7328da8ca) | 2100 s |
|
||||
| bus suite | 25 s | gizmoduck queue-270 BUILD.md:658 | 900 s |
|
||||
| scripts/test-auth.sh | 1.9 s | 3b91cfdaf:agents/gander/work/queue-253/run5-gate/SUMMARY.json | 126 s |
|
||||
| scripts/test-conductor.sh | 8.1 s | same | 145 s |
|
||||
| scripts/test-config.sh | 3.2 s | same | 130 s |
|
||||
| scripts/test-discord.sh | 8.8 s | same | 147 s |
|
||||
| scripts/test-extension-package.sh | 3.0 s | same | 130 s |
|
||||
| scripts/test-foundation.sh | 49.4 s | same | 269 s |
|
||||
| scripts/test-land-work.sh | 16.9 s | same | 171 s |
|
||||
| scripts/test-queue.sh | 35.2 s | same | 226 s |
|
||||
| scripts/test-release.sh | 12.2 s | same | 157 s |
|
||||
| scripts/test-task.sh | 36.8 s | same | 231 s |
|
||||
| each mutant probe (its killing file alone) | none: granted-user.test.mjs and access-boot.test.mjs are new | the first green run in the suites sets the record | 300 s |
|
||||
|
||||
The script limits are Gander's SHELL-LIMITS values (3x the longest recorded run, plus 120 s), as
|
||||
recorded in agents/gander/work/queue-276/BUILD.md. If a new file's suite time is over 100 s, its
|
||||
mutant LIMIT goes to 3x that time before the probes run.
|
||||
|
||||
## Review
|
||||
|
||||
Round 1, manifest 0b3f9c9d…94f3 (ca710eabd): Duckworth APPROVE (static), duckworth-0249b, note
|
||||
agents/duckworth/work/row294/ROUND1-ca710eabd.md on duckworth/reviews 5b7089ea1. The owner-transport
|
||||
exception is accepted and does not go to Mos.
|
||||
|
||||
- C1: the M1 row and note above are corrected. The M1 run records G4's :239 failure value and G5.
|
||||
- C2: the gate runs on Sage's CLEAR.
|
||||
- N1 (no test reaches the C2b swap): no M12 in this row. Adding one needs a new test and a new
|
||||
manifest round after approval; the brief does not require it. Left as a follow-up for Sage to
|
||||
place: a test that a user session's options carry no owner caller besides `plugins`, with an M12
|
||||
where serve.mjs keeps the owner's `send` for a user session.
|
||||
- N2, N3: accepted as they stand; no change.
|
||||
- N4: the user-bus.mjs fold-back (C7) is proposed to Sage as a queue row, for the next
|
||||
channel-proof re-pin.
|
||||
|
||||
Round 2 (Mos mos-1412 through Sage sage-3195; for Duckworth): two test changes after run 1, no
|
||||
product change. The manifest adds packages/webui/tests/browser.test.mjs (18 paths).
|
||||
|
||||
- Red 1, old test, Mos approved (a): browser.test.mjs:22 pins index.html's script list. It gains
|
||||
'/federation.js' at index 2, where 294's index.html:7 puts it, ahead of brand.js. The :21 comment
|
||||
adds row 294 and federation.js. No other assertion in the file changes. Old and new lines are in
|
||||
ASSERTION-PRESERVATION.json. (b), loading the federation view another way, was rejected.
|
||||
- Red 2, new test G5: the pin is the one in the G5 note above. Mos's suggestion is taken: the count
|
||||
is `refusals.length`, not a literal. The verb check is not possible, because the event names no
|
||||
verb; the test pins the whole body instead.
|
||||
|
||||
Round 3 (sage-3212; goes to Mos as the row's second red, sage-3211, before any push or run): one
|
||||
changed line, in new test G5. Its baseline was `SELECT max(seq) n FROM events`. The G5 fixture has
|
||||
an empty events table, so that is NULL and `seq > NULL` matches no row: run 2 read 0 events added
|
||||
where run 1's count(*) had shown 22. The line is now `SELECT coalesce(max(seq), 0) n FROM events`.
|
||||
Nothing else in G5 and no product file changes. The manifest stays 18 paths; only
|
||||
granted-user.test.mjs's hash moves. My round 2 check missed the empty-table case.
|
||||
|
||||
Round 4 (Mos mos-1419 through Sage sage-3238, after run 3's third red): two test files, no product
|
||||
file. The manifest adds packages/cli/tests/stack-release.test.mjs (19 paths).
|
||||
|
||||
- stack-release.test.mjs, an old test: the rehearsal fixture copies a fixed list of config.mjs's
|
||||
imports into each scratch copy. 294's config.mjs imports access.mjs, which imports transport.mjs
|
||||
(transport.mjs imports only errors.mjs). The :1991 list gains both, with a row 294 comment at
|
||||
:1987. No assertion changes. The real copy carries all of packages/cli/src (stack-copy.sh
|
||||
COPY_PATHS), so the product was not affected.
|
||||
- access-boot.test.mjs, new test B1-B3: the shared helpers.mjs business sets tracker.baseUrl
|
||||
without tracker.project, so bootConfig warns about it before any access line (trackerFor runs
|
||||
before accessFor in config.mjs). A TRACKER constant holds that line. B1 and B2 pin `[TRACKER]`.
|
||||
B3 pins `[TRACKER, <the access refusal line>]`, and the secret-marker check reads every warning
|
||||
joined. boot() still records every warning. Mos chose a full pin over a filter: it also catches a
|
||||
second tracker line, a reordering, and config.mjs:102's context warning. I proposed a
|
||||
startsWith('access file') filter; Sage found it would hide that :102 warning.
|
||||
- My miss: B1-B3 were new and had not run before the gate.
|
||||
|
||||
## Runs
|
||||
|
||||
### Run 1, 2026-10-23 04:57Z (sage-3187 CLEAR), head 685ff053b, manifest 0b3f9c9d…94f3
|
||||
|
||||
Before the run, the branch was rebased from 253346e3c onto c902a767d. `git range-diff -s` showed all 6
|
||||
commits "=", and the stable patch-ids matched. The head was pushed as launchpad/row294-on-c902a767d
|
||||
024499fc2. TMPDIR was under /mnt/storage/scratch/tmp. npm ci --ignore-scripts ran at the root only.
|
||||
|
||||
| Step | Result | Time | Limit |
|
||||
|---|---|---|---|
|
||||
| webui suite | 365 tests: 362 pass, 2 fail, 1 skip | 55.8 s | 600 s |
|
||||
|
||||
The driver stopped at the first red, so the cli, bus, scripts and mutants did not run. The slot was
|
||||
returned (launchpad-0060).
|
||||
|
||||
- browser.test.mjs:22, an old test, pins index.html's script list. 294 adds `/federation.js` at
|
||||
index 2. It went to Mos through Sage (sage-3192); I made no change before the ruling.
|
||||
- G5:262, a new test, failed `22 !== 0`: the broker writes one `action.refused` per refusal. This
|
||||
was placed as a test defect under mos-1272 and accepted by Sage (sage-3194). It is fixed in round 2.
|
||||
- The skip was the editor rebuild check (editor-provenance.test.mjs:162), which needs esbuild
|
||||
0.28.2 from packages/webui's own lockfile. An environment fix: the next run also runs npm ci
|
||||
--ignore-scripts in packages/webui (sage-3194).
|
||||
- The last landed whole-webui gate skipped the same test: row 264a's run, webui 345 pass of 346 with
|
||||
1 skipped, "the esbuild 0.28.1 editor rebuild" (gizmoduck queue-264 BUILD.md:516-518, DEFERRED
|
||||
264a N2). Row 270's gate ran only webui pinned-copy.test. The fresh 294 gate still runs npm ci in
|
||||
packages/webui first, so the test should run here. If it skips again, the run names it and says why.
|
||||
|
||||
### Run 2, 2026-10-23 05:33Z (sage-3199 CLEAR), head 66c181717, manifest 7ec7b1ea…315b
|
||||
|
||||
Duckworth's round 2 approve was recorded first (duckworth-0253, rev 3455, comment 31029). Drivers
|
||||
and logs are in run2/. TMPDIR was under /mnt/storage/scratch/tmp.
|
||||
|
||||
| Step | Result | Time | Limit |
|
||||
|---|---|---|---|
|
||||
| npm ci --ignore-scripts, root | ok, esbuild 0.28.1 | 2.2 s | 900 s |
|
||||
| npm ci --ignore-scripts, packages/webui | ok, esbuild 0.28.2 | 1.2 s | 900 s |
|
||||
| webui suite | 365 tests: 364 pass, 1 fail, 0 skipped | 58.2 s | 600 s |
|
||||
|
||||
The driver stopped at the first red. The slot was returned (launchpad-0070), and I made no edit.
|
||||
|
||||
- The editor rebuild check ran and passed, and browser.test.mjs passed with the round 2 pin.
|
||||
- G5:269 failed `0 !== 22`, "one event per refused verb". Every verb was still refused with
|
||||
`access-refused`. Placed as a test defect (the NULL baseline, round 3 above); as the row's
|
||||
second red it went to Mos through Sage (sage-3211) before the fix runs.
|
||||
|
||||
### Run 3, 2026-10-23 05:55Z (sage-3231 CLEAR), head f26584089, manifest cb1648f3…78de
|
||||
|
||||
Duckworth's round 3 approve was recorded first (duckworth-0255b, rev 3462, c31045). The drivers,
|
||||
summary, webui log and the cli failure section are in run3/. TMPDIR was under
|
||||
/mnt/storage/scratch/tmp.
|
||||
|
||||
| Step | Result | Time | Limit |
|
||||
|---|---|---|---|
|
||||
| npm ci --ignore-scripts, root | ok | 2.2 s | 900 s |
|
||||
| npm ci --ignore-scripts, packages/webui | ok | 2.2 s | 900 s |
|
||||
| webui suite | 365 tests: 365 pass, 0 fail, 0 skipped | 58.2 s | 600 s |
|
||||
| cli suite | 909 tests: 889 pass, 20 fail, 0 skipped | 541.5 s | 2100 s |
|
||||
|
||||
The driver stopped at the cli suite, so the bus suite, the scripts and the mutants did not run. No
|
||||
failure was compactions-launch, so the :229 rerun rule did not apply. The slot was returned
|
||||
(launchpad-0076), and I made no edit before Mos's ruling (round 4 above).
|
||||
|
||||
- stack-release.test.mjs, 17 failures: R1-R7, R9-R12, R14, R15, row 233's --backup last test, and
|
||||
row196's rehearsal test at :2586 with its socket copy and legacy copy subtests. Each rehearsal
|
||||
failed at scratch-config: "Cannot find module …/packages/cli/src/access.mjs imported from
|
||||
…/packages/cli/src/config.mjs". My launchpad-0076 put the two subtests under row 233; they are
|
||||
row196's.
|
||||
- access-boot.test.mjs B1, B2 and B3: `warnings` also held the fixture's tracker line.
|
||||
|
||||
### Run 4, 2026-10-23 06:20Z (sage-3244 CLEAR, sage-3248 go), head 8616b9a4f, manifest a1ff5d67…9b99
|
||||
|
||||
Duckworth's round 4 approve was recorded first (duckworth-0257b, rev 3469, c31053). The run started
|
||||
at 06:20:53Z, on duckworth-0257b's relay of sage-3247; sage-3248 arrived seconds later with the same
|
||||
go. TMPDIR was /mnt/storage/scratch/tmp/gd3JQ8r. Receipts are in run4/: summary.txt, the drivers,
|
||||
suite-totals.txt (the three suites' node --test totals; the whole logs stay in scratch), every
|
||||
scripts/test-*.sh log, and each mutant's diff and TAP output with mutants.json.
|
||||
|
||||
| Step | Result | Time | Limit |
|
||||
|---|---|---|---|
|
||||
| npm ci --ignore-scripts, root | ok | 1.9 s | 900 s |
|
||||
| npm ci --ignore-scripts, packages/webui | ok | 0.5 s | 900 s |
|
||||
| webui suite | 365 tests: 365 pass, 0 fail, 0 skipped | 57.9 s | 600 s |
|
||||
| cli suite | 909 tests: 909 pass, 0 fail, 0 skipped | 600.1 s | 2100 s |
|
||||
| bus suite | 873 tests: 873 pass, 0 fail, 0 skipped | 24.4 s | 900 s |
|
||||
| scripts/test-auth.sh | ok, 15 passed | 0.8 s | 126 s |
|
||||
| scripts/test-conductor.sh | ok | 6.8 s | 145 s |
|
||||
| scripts/test-config.sh | ok | 2.5 s | 130 s |
|
||||
| scripts/test-discord.sh | ok | 7.3 s | 147 s |
|
||||
| scripts/test-extension-package.sh | ok | 1.2 s | 130 s |
|
||||
| scripts/test-foundation.sh | ok | 39.1 s | 269 s |
|
||||
| scripts/test-land-work.sh | ok | 11.8 s | 171 s |
|
||||
| scripts/test-queue.sh | ok | 20.4 s | 226 s |
|
||||
| scripts/test-release.sh | ok | 2.7 s | 157 s |
|
||||
| scripts/test-task.sh | ok, 91 passed; the two live provider cases skip by design (row 244), no Docker group skipped | 13.9 s | 231 s |
|
||||
|
||||
No step was rerun, so the :229 rule was not used. The worktree was clean after the scripts and after
|
||||
every mutant restore.
|
||||
|
||||
Mutants, each its killing file alone under timeout -k 10 300, all killed (MUTANTS rc=0, 06:34:22Z):
|
||||
|
||||
| # | Seconds | Red |
|
||||
|---|---|---|
|
||||
| M1 | 1.9 | G4 only; G5 ok in the same run |
|
||||
| M2 | 2.1 | G3 |
|
||||
| M3 | 1.8 | G6, and G7 (the page text changed under it) |
|
||||
| M4 | 0.5 | the F8 peer test, B1 |
|
||||
| M5 | 2.1 | G2, G3 |
|
||||
| M6 | 2.0 | G8 |
|
||||
| M7 | 0.3 | B1, B3 |
|
||||
| M8 | 2.1 | G1, G9 |
|
||||
| M9 | 0.4 | B3 |
|
||||
| M10 | 2.0 | G9 |
|
||||
| M11 | 2.0 | G9 |
|
||||
|
||||
M1 record (Duckworth C1): G4's first failure is its first route, `GET /api/bus/inbox: 502
|
||||
{"error":"access-refused","message":"access-refused"}`, expected 403 (run4/M1.tap). The failing
|
||||
assertion is granted-user.test.mjs:241, the loop's status check. The Mutants table above says :239;
|
||||
round 2's `tables` helper moved it down two lines. With the Console gate gone, the broker refuses
|
||||
the owner verb itself, and the Console answers 502 with the broker's code. G5, the bus refusing
|
||||
every owner verb on its own, is `ok 5` in the same TAP.
|
||||
@@ -1,60 +0,0 @@
|
||||
# Row 294 (FED R6, #1800) candidate manifest, round 4
|
||||
|
||||
Round 4 (Mos mos-1419 through Sage sage-3238, after run 3's third red): two test files, no product
|
||||
file. The manifest adds packages/cli/tests/stack-release.test.mjs (19 paths).
|
||||
|
||||
- packages/cli/tests/stack-release.test.mjs (old test): the rehearsal fixture's copy list at :1991
|
||||
gains 'packages/cli/src/access.mjs' and 'packages/cli/src/transport.mjs', with a row 294 comment
|
||||
at :1987. 294's config.mjs imports access.mjs, which imports transport.mjs. No assertion changes.
|
||||
- packages/cli/tests/access-boot.test.mjs (new test): a TRACKER constant holds the tracker warning
|
||||
the shared helpers.mjs business makes. B1 and B2 pin `[TRACKER]`; B3 pins `[TRACKER, <the access
|
||||
refusal line>]` and checks the joined warnings for secret-marker. boot() is unchanged.
|
||||
|
||||
Round 3 (cb1648f3…78de) was approved by Duckworth (rev 3462, c31045). Its text follows unchanged.
|
||||
|
||||
Round 3 (sage-3212, Mos ruling pending in sage-3211): one line in granted-user.test.mjs G5. The
|
||||
baseline is `SELECT coalesce(max(seq), 0) n FROM events`, because max(seq) is NULL on the fixture's
|
||||
empty events table and run 2 read 0 events added. Only that file's hash moves; still 18 paths. Round 2
|
||||
(7ec7b1ea…315b) was approved by Duckworth (rev 3455). Its text follows unchanged.
|
||||
|
||||
|
||||
Branch launchpad/row294, base c902a767d (the round 1 head ee77b3635 rebased with range-diff all "="
|
||||
and stable patch-ids unchanged; receipts in run1/). The round 3 head is the commit that adds this
|
||||
file. MANIFEST.sha256 lists the 18 code and test paths changed from the base, hashed from that
|
||||
commit's blobs (`sha256sum -c` passes on it). BUILD.md, ASSERTION-PRESERVATION.json and run1/ are
|
||||
the row note and are not in the manifest. webui/src/bus.mjs is byte-identical to the base
|
||||
(channel-proof hash pin, C7). packages/cli/tests/access.test.mjs is unchanged;
|
||||
packages/cli/src/access.mjs overlaps row 295, which rebases after this row (sage-3153).
|
||||
|
||||
Round 1 was 0b3f9c9d…94f3, approved by Duckworth (rev 3435, duckworth-0249b). Round 2 changes two
|
||||
tests after run 1 went red, and no product file:
|
||||
|
||||
- packages/webui/tests/browser.test.mjs (new to the manifest; an old test, Mos's ruling (a) in
|
||||
mos-1412): the script-list pin at :22 gains '/federation.js' at index 2 and the :21 comment adds
|
||||
row 294. No other line changes. ASSERTION-PRESERVATION.json has the old and new lines.
|
||||
- packages/webui/tests/granted-user.test.mjs, G5 (new test, a run 1 placement Sage accepted in
|
||||
sage-3194): exactly one `action.refused` per refused verb, the count from the verb list's length,
|
||||
each body exactly `{ code: 'access-refused' }`, and every other table's row count unchanged.
|
||||
|
||||
Run 1 (webui only, stopped at the first red) is recorded in BUILD.md. The whole gate runs fresh on
|
||||
Sage's next CLEAR: npm ci --ignore-scripts at the root and in packages/webui, the webui, cli and
|
||||
bus suites, every scripts/test-*.sh, then mutants M1-M11, with the limits in BUILD.md.
|
||||
|
||||
## Exception for Duckworth to rule on: the owner transport in a user's chat (C6; mos-1394, sage-3157)
|
||||
|
||||
> In a granted user's chat the Console uses the owner's transport for one call: `plugins` with
|
||||
> `{}`, the channel gate read. Nothing else goes over it. Its answer stays in the Console and is
|
||||
> never sent to the user. No value from the user's session or request reaches the call. Mos ruled
|
||||
> in mos-1394 that this is not an access-rule change, because the Console reads its own channel
|
||||
> gate, and that it holds only while nothing from the user reaches the call. Every chat verb goes
|
||||
> over the user's own transport. Where: createChat's `owner` (chat.mjs) and userOptionsFor
|
||||
> (console-bus.mjs), wired with `ownerCall` in cli.mjs. Pinned by G9 and mutants M8, M10 and M11.
|
||||
> If this reads as owner authority used for the user, it goes back to Mos.
|
||||
|
||||
## Other choices
|
||||
|
||||
C1-C9 and rulings sage-3142, sage-3153 and sage-3157 are in BUILD.md. In short: a separate user
|
||||
page (C1); an allowlist gate of user routes (C2); every bus-backed option swapped to the user
|
||||
transport behind the gate (C2b); liveness by the broker's own `covers` test (C3); the bus boot
|
||||
`access` wiring, where a bad file refuses each user bind and writes one stderr line with the path
|
||||
and a code, never the contents (C4, item 9); and user-bus.mjs as a copy of the spawn code (C7).
|
||||
@@ -1,19 +0,0 @@
|
||||
52206bd92b0f223bf9310d50db650f36e12836691d739b499192e3eedd81401c packages/cli/src/access.mjs
|
||||
a948886a8c57d700b3d116097c9597c2b29dc7cc89ff6e18ae57436754195853 packages/cli/src/config.mjs
|
||||
b2745e1a3067d8c439de4f9c9e0df532764d3ea77639d15e5b9d949ec5cd534d packages/cli/tests/access-boot.test.mjs
|
||||
96f239dfd25cd1408d7586016154798da42b1a0f32387d14705345d0aa4db2ce packages/cli/tests/stack-release.test.mjs
|
||||
1be61ba66c3b747decdb3e12de743265b8cc7ba7cd06c033393b157ce1bc0b70 packages/webui/src/access.mjs
|
||||
954dee1535b258d9590e4d102423d081303b640b3bea750bd3653883e67bf309 packages/webui/src/chat-http.mjs
|
||||
230a5759f5027f9208c716b176f9b0a30310d5f433493bfcd8862c71abe182ae packages/webui/src/chat.mjs
|
||||
7fcb28a7a67418a8d3fd26dd157860ec1a89fe1891887f661e53a17d3b3bbc7d packages/webui/src/cli.mjs
|
||||
941c8f91ad40264c5622d60af85e00f6198db31a0504b4b0caa48312d8f57c3e packages/webui/src/console-bus.mjs
|
||||
692c5eabb0fc866240b12931418c17d3392b6097575dfacf7425a6f0127dd291 packages/webui/src/public/app.js
|
||||
c41a34a32f23f742e30ca408bc7deda0fa8feb4f8c25c7036604c336bb1545eb packages/webui/src/public/federation.js
|
||||
e7673188c1d76ecc63cdc24e7d1470922b1d69bedeb994a862e94924edfc27d2 packages/webui/src/public/index.html
|
||||
969a52284b667e075b04e3fa63d45415f3517080784ee372ee4725caf51d15d9 packages/webui/src/public/user.html
|
||||
571ce191c0b5f545e3a65f7b388f754e2ca6396a68038ccc57321d8f490cb86e packages/webui/src/public/user.js
|
||||
9343ea9edb862c1545df2886754244ffd76b714cc90d7791fc32aee4ecfec594 packages/webui/src/serve.mjs
|
||||
70b243ed9a83ff822a4c7a148528ff5153574cc87d5c776fd2e12f340762ed76 packages/webui/src/sso.mjs
|
||||
8cc1185beda9085ced62470f1b9e39d95dcca2dcc8bf9325c18c2f0b2da618dc packages/webui/src/user-bus.mjs
|
||||
58f022643839b78c0bd149927157d1f7b36977212975a4fe549c9661c31c4e40 packages/webui/tests/browser.test.mjs
|
||||
673f09560b7cf4515856ab1181fce8fcc2f70d59fb01bda9d687cc3d9b259e95 packages/webui/tests/granted-user.test.mjs
|
||||
@@ -1,6 +0,0 @@
|
||||
4abc648140eef53c8cb841ae64c22afc4211d86b
|
||||
bee007832071139bac9af318096710aeb95f1f79
|
||||
6de7443b94d28676a42630986d86bac9de1479fb
|
||||
f3ed47f0b12f628cdbf0efe66970e184eef74ae2
|
||||
3cf8180c22ed655b4f163f7a35b06deb47b54493
|
||||
d1689ae8ba689ab811560b5f8ae82d95cc745c3e
|
||||
@@ -1,6 +0,0 @@
|
||||
4abc648140eef53c8cb841ae64c22afc4211d86b
|
||||
bee007832071139bac9af318096710aeb95f1f79
|
||||
6de7443b94d28676a42630986d86bac9de1479fb
|
||||
f3ed47f0b12f628cdbf0efe66970e184eef74ae2
|
||||
3cf8180c22ed655b4f163f7a35b06deb47b54493
|
||||
d1689ae8ba689ab811560b5f8ae82d95cc745c3e
|
||||
@@ -1,6 +0,0 @@
|
||||
1: c866a8a69 = 1: df21d2f4d launchpad: row 294 FED R6 build and plan, granted-user sign-in (unrun, #1800)
|
||||
2: 338e93185 = 2: f392be6ac launchpad: row 294 rulings sage-3153 (boot refusal line, owner transport seam G9, C7 follow-up, access.test.mjs unchanged; unrun, #1800)
|
||||
3: 77514b8b9 = 3: c22dcfdd0 launchpad: row 294 BUILD.md M4 kill names the moved test
|
||||
4: 9450774cb = 4: 0622c2fc8 launchpad: row 294 sage-3157, owner-transport exception written out, userOptionsFor, G9 pins no user value, M10/M11 (unrun, #1800)
|
||||
5: ca710eabd = 5: 65f1b81f3 launchpad: row 294 round 1 manifest (17 paths from 9450774cb) and notes with the owner-transport exception
|
||||
6: ee77b3635 = 6: 024499fc2 launchpad: row 294 BUILD.md M1 expectation corrected (Duckworth C1), review recorded with N1-N4 dispositions
|
||||
@@ -1,3 +0,0 @@
|
||||
TMPDIR /mnt/storage/scratch/tmp/g8gFnfF head 685ff053b6336311668104d08826e923d9f4532d
|
||||
webui rc=1 seconds=55.787 limit=600 04:58:35Z
|
||||
STOP at webui
|
||||
@@ -1,13 +0,0 @@
|
||||
✖ served Console browser: real board fixtures, keyboard, drafts, receipts, themes, 320px and failures (3039.999029ms)
|
||||
✖ R6 G5 the bus refuses every owner verb over the user transport on its own (555.936822ms)
|
||||
ℹ tests 365
|
||||
ℹ suites 0
|
||||
ℹ pass 362
|
||||
ℹ fail 2
|
||||
ℹ cancelled 0
|
||||
ℹ skipped 1
|
||||
ℹ todo 0
|
||||
ℹ duration_ms 55747.039135
|
||||
✖ failing tests:
|
||||
✖ served Console browser: real board fixtures, keyboard, drafts, receipts, themes, 320px and failures (3039.999029ms)
|
||||
✖ R6 G5 the bus refuses every owner verb over the user transport on its own (555.936822ms)
|
||||
@@ -1,35 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
# Row 294 gate run 2, sage-3199: npm ci (root and packages/webui), suites whole, every
|
||||
# scripts/test-*.sh, then the mutants. Stops at the first red. FROM=<step> resumes at a step
|
||||
# (the mos-1411 single cli rerun uses FROM=cli TAG=-rerun).
|
||||
set -u -o pipefail
|
||||
WT=/mnt/storage/scratch/launchpad-r294/wt
|
||||
OUT=/mnt/storage/scratch/launchpad-r294/run2
|
||||
FROM=${FROM:-npm-root}; TAG=${TAG:-}
|
||||
export TMPDIR=$(mktemp -d /mnt/storage/scratch/tmp/gXXXXXX)
|
||||
echo "start $(date -u +%H:%M:%SZ) FROM=$FROM TAG=$TAG TMPDIR $TMPDIR head $(git -C $WT rev-parse HEAD)" >> $OUT/summary.txt
|
||||
[ -z "$(git -C $WT status --porcelain)" ] || { echo "STOP worktree not clean" | tee -a $OUT/summary.txt; exit 9; }
|
||||
on=0
|
||||
step() { # name limit dir cmd...
|
||||
local name=$1 limit=$2 dir=$3; shift 3
|
||||
[ $on = 1 ] || [ $name = $FROM ] || return 0; on=1
|
||||
local t0=$(date +%s%N)
|
||||
( cd $dir && timeout -k 10 $limit "$@" ) > $OUT/$name$TAG.log 2>&1
|
||||
local rc=$?
|
||||
local ms=$(( ($(date +%s%N) - t0) / 1000000 )); local dt=$((ms/1000)).$(printf %03d $((ms%1000)))
|
||||
echo "$name$TAG rc=$rc seconds=$dt limit=$limit $(date -u +%H:%M:%SZ)" | tee -a $OUT/summary.txt
|
||||
[ $rc -eq 0 ] || { echo "STOP at $name$TAG" | tee -a $OUT/summary.txt; exit $rc; }
|
||||
}
|
||||
step npm-root 900 $WT npm ci --ignore-scripts
|
||||
step npm-webui 900 $WT/packages/webui npm ci --ignore-scripts
|
||||
step webui 600 $WT/packages/webui node --test tests/
|
||||
step cli 2100 $WT/packages/cli node --test tests/*.test.mjs
|
||||
step bus 900 $WT/packages/bus node --test tests/*.test.mjs
|
||||
declare -A L=([auth]=126 [conductor]=145 [config]=130 [discord]=147 [extension-package]=130 [foundation]=269 [land-work]=171 [queue]=226 [release]=157 [task]=231)
|
||||
for s in auth conductor config discord extension-package foundation land-work queue release task; do
|
||||
step test-$s ${L[$s]} $WT bash scripts/test-$s.sh
|
||||
done
|
||||
[ -z "$(git -C $WT status --porcelain)" ] || { echo "STOP worktree dirty after the scripts" | tee -a $OUT/summary.txt; git -C $WT status --porcelain >> $OUT/summary.txt; exit 9; }
|
||||
echo "SUITES GREEN $(date -u +%H:%M:%SZ)" | tee -a $OUT/summary.txt
|
||||
python3 -B $OUT/mutants.py
|
||||
rc=$?; echo "MUTANTS rc=$rc $(date -u +%H:%M:%SZ)" | tee -a $OUT/summary.txt; exit $rc
|
||||
@@ -1,81 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
# Row 294 mutants M1-M11 (BUILD.md "Mutants"). Each mutant edits the worktree (every old text must
|
||||
# match exactly once), runs its killing file alone under timeout -k 10 300 with the TAP reporter,
|
||||
# then restores with git checkout and checks the tree is clean. Killed = the named killing test(s)
|
||||
# report "not ok". M1 also needs G5 "ok" in the same run (Duckworth C1).
|
||||
import json, os, re, subprocess, sys, time
|
||||
|
||||
WT = '/mnt/storage/scratch/launchpad-r294/wt'
|
||||
OUT = '/mnt/storage/scratch/launchpad-r294/run2'
|
||||
GU = ('packages/webui', 'tests/granted-user.test.mjs')
|
||||
AB = ('packages/cli', 'tests/access-boot.test.mjs')
|
||||
|
||||
CHAT_CALL = "verb === 'plugins' ? owner('plugins', {}) : call(verb, args)"
|
||||
MUTANTS = [
|
||||
('M1', [('packages/webui/src/serve.mjs', "if (!userRoute(path, req.method)) return json(res, 403, { error: 'owner-only'",
|
||||
"if (false) return json(res, 403, { error: 'owner-only'")], GU, ['R6 G4'], ['R6 G5']),
|
||||
('M2', [('packages/webui/src/sso.mjs', "if (s.user !== undefined && !users?.check(s)) {", "if (s.user !== undefined && false) {")], GU, ['R6 G3'], []),
|
||||
('M3', [('packages/webui/src/public/user.html', "but not your messages.", "but not your replies.")], GU, ['R6 G6'], []),
|
||||
('M4', [('packages/cli/src/access.mjs', "const peers = (system.federation?.peers ?? []).map((p) => p.id);", "const peers = [];")], AB,
|
||||
['R6 a configured peer id', 'R6 B1'], []),
|
||||
('M5', [('packages/webui/src/access.mjs', "return user && live(doc, user.id, b) ? user.id : null;", "return user ? user.id : null;")], GU, ['R6 G2'], []),
|
||||
('M6', [('packages/webui/src/user-bus.mjs', "env: { ...rest, MOSAIC_BUS_USER_NONCE", "env: { ...env, MOSAIC_BUS_USER_NONCE")], GU, ['R6 G8'], []),
|
||||
('M7', [('packages/cli/src/config.mjs', " if (access) config.access = access;\n", "")], AB, ['R6 B1'], []),
|
||||
('M8', [('packages/webui/src/chat.mjs', CHAT_CALL,
|
||||
"verb === 'plugins' ? owner('plugins', {}) : verb === 'thread.list' ? owner(verb, args) : call(verb, args)")], GU, ['R6 G9'], []),
|
||||
('M9', [('packages/cli/src/config.mjs', " warn(`access file refused at boot (${code}), no granted user binds until it is fixed: ${file}`);\n", "")],
|
||||
AB, ['R6 B3'], []),
|
||||
('M10', [('packages/webui/src/console-bus.mjs', "return session => consoleBus(transport(session.user), { send, owner });",
|
||||
"return session => consoleBus(transport(session.user), { send, owner: (v, a) => owner(v, { ...a, sub: session.sub }) });")], GU, ['R6 G9'], []),
|
||||
('M11', [('packages/webui/src/chat.mjs', "const dispatch = createChannelCaller({ name: 'webui', call: owner === null ? call : (verb, args) => " + CHAT_CALL + " });",
|
||||
"let last = {};\n const dispatch = createChannelCaller({ name: 'webui', call: owner === null ? call : (verb, args) => verb === 'plugins' ? owner('plugins', last) : call(verb, args) });"),
|
||||
('packages/webui/src/chat.mjs', " try { return await dispatch(verb, args); }", " try { last = args; return await dispatch(verb, args); }")], GU, ['R6 G9'], []),
|
||||
]
|
||||
|
||||
def git(*a):
|
||||
return subprocess.run(['git', '-C', WT, *a], capture_output=True, text=True, check=True).stdout
|
||||
|
||||
def restore(files):
|
||||
if files: git('checkout', '--', *sorted(files))
|
||||
if git('status', '--porcelain'): raise SystemExit('worktree not clean after restore')
|
||||
|
||||
def results(tap):
|
||||
# Top-level TAP test lines: "ok N - name" / "not ok N - name" at no indentation.
|
||||
return {m.group(2): m.group(1) == 'ok' for m in re.finditer(r'^(ok|not ok) \d+ - (.*)$', tap, re.M)}
|
||||
|
||||
def main():
|
||||
only = sys.argv[1:]
|
||||
if git('status', '--porcelain'): raise SystemExit('worktree not clean at start')
|
||||
env = dict(os.environ)
|
||||
summary, bad = [], 0
|
||||
for mid, edits, (pkg, test), killers, greens in MUTANTS:
|
||||
if only and mid not in only: continue
|
||||
files = set()
|
||||
try:
|
||||
for path, old, new in edits:
|
||||
p = os.path.join(WT, path); s = open(p).read()
|
||||
if s.count(old) != 1: raise SystemExit(f'{mid}: anchor count {s.count(old)} in {path}')
|
||||
open(p, 'w').write(s.replace(old, new)); files.add(path)
|
||||
diff = git('diff')
|
||||
t0 = time.time()
|
||||
r = subprocess.run(['timeout', '-k', '10', '300', 'node', '--test', '--test-reporter=tap', test],
|
||||
cwd=os.path.join(WT, pkg), capture_output=True, text=True, env=env)
|
||||
dt = round(time.time() - t0, 1)
|
||||
finally:
|
||||
restore(files)
|
||||
open(f'{OUT}/{mid}.diff', 'w').write(diff)
|
||||
open(f'{OUT}/{mid}.tap', 'w').write(r.stdout + '\n# stderr\n' + r.stderr)
|
||||
res = results(r.stdout)
|
||||
hit = lambda pre: [n for n, ok in res.items() if n.startswith(pre)]
|
||||
red = [n for n, ok in res.items() if not ok]
|
||||
killed = r.returncode not in (0, 124, 137) and all(any(not res[n] for n in hit(k)) for k in killers) \
|
||||
and all(hit(g) and all(res[n] for n in hit(g)) for g in greens)
|
||||
bad += not killed
|
||||
line = f'{mid} rc={r.returncode} seconds={dt} killed={killed} red={red}'
|
||||
print(line, flush=True)
|
||||
summary.append({'mutant': mid, 'rc': r.returncode, 'seconds': dt, 'killed': killed, 'red': red,
|
||||
'killers': killers, 'greens': greens})
|
||||
json.dump(summary, open(f'{OUT}/mutants.json', 'w'), indent=1)
|
||||
sys.exit(1 if bad else 0)
|
||||
|
||||
main()
|
||||
@@ -1,5 +0,0 @@
|
||||
start 05:33:44Z FROM=npm-root TAG= TMPDIR /mnt/storage/scratch/tmp/gbuNdnK head 66c18171766ec35d2e84440bd4e62b13cc494dc9
|
||||
npm-root rc=0 seconds=2.179 limit=900 05:33:47Z
|
||||
npm-webui rc=0 seconds=1.204 limit=900 05:33:48Z
|
||||
webui rc=1 seconds=58.219 limit=600 05:34:46Z
|
||||
STOP at webui
|
||||
Loaded 100 of 428 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user