docs(row253): record green run5 whole gate and forty kills
This commit is contained in:
1 parent
dd9d519b11
commit
3b91cfdaf1
335 files changed
+33004
-41
No files matched your search
@@ -316,3 +316,8 @@ M38 drops setsid but a blocking signals query can still fail closed with inner-t
|
||||
### Run5 busy guard refusal, sage-2786
|
||||
|
||||
Fresh on48e450ce8/591020a1. Both intendedREDs observed; touched whole43/0/0 and34/0/0; all6base PID/SID equalities passed. Controls13/0, M1-M31 killed; no survivor, timeout or unexpected red. External SSH docker-compose process tripped busy guard before M32 base; no bypass/retry. M32-M40 and full whole stages NOTRUN; M38 assertion kill remains unproven. Wall425.340s,0skips,N9passed. Byte restoration verified; sweep0run-created leftovers. Reported unplaced for classification/resume direct to Duckworth/Mos, cc Sage in gander-0121 and returned slot. run5-gate/ preserves exact raw records.
|
||||
|
||||
|
||||
### Run5 GREEN, sage-2786 plus sage-2811 same-run resume
|
||||
|
||||
Candidate48e450ce8,source14e460061,manifest591020a1,baseaca16404c. CLI whole55files861/0/0;WebUI whole58files345/0/1;bus rebase union20files240/0/0;ten shells425/0 self-assertions. Separate touched whole77/0/0, intendedREDs2/2;20fresh controls passed. M1-M40 killed40 with exact restoration,0timeouts. M38 dies by required new PID/SID equality ERR_ASSERTION at203:10; all6base cases pass. No other round carries; foreign SSH busy refusal classified in sage-2811, freshM32base on resume. Stages wall sums1253.715/267.028/46.282/140.514s;active windows425.340+2106.873s. N9passed verbatim inRESULTS. Named skips: pinned-esbuild rebuild, noncanonical queue verify/render, two live-provider cases; exact lines in run5-gate/RESULTS.md. Manifest and shell hashes verify; sweep0run-created leftovers. Raw commands,logs,full counts and kill table retained. No product/test change during gate.
|
||||
@@ -0,0 +1,114 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Run explicit row253 changes only under Sage's grant. --static runs no tests."""
|
||||
import argparse
|
||||
import hashlib
|
||||
import json
|
||||
import os
|
||||
from pathlib import Path
|
||||
import signal
|
||||
import subprocess
|
||||
import time
|
||||
|
||||
HERE = Path(__file__).resolve().parent
|
||||
REPO = HERE.parents[3]
|
||||
|
||||
def digest(data):
|
||||
return hashlib.sha256(data).hexdigest()
|
||||
|
||||
def busy():
|
||||
p = subprocess.run(['bash', '/mnt/storage/scratch/sage-busy-now.sh'], text=True, capture_output=True)
|
||||
if p.returncode or p.stdout.splitlines()[-1:] != ['CLEAR']:
|
||||
raise RuntimeError('busy refusal: ' + p.stdout + p.stderr)
|
||||
|
||||
def run(command, path, seconds=60):
|
||||
if command[:2] == ['node', '--test']:
|
||||
limits = json.loads((HERE/'WHOLE-GATE-LIMITS.json').read_text())['files']
|
||||
limit = limits.get(command[-1], 900)
|
||||
command = ['timeout','-k','10',str(limit),*command]
|
||||
seconds = limit + 30
|
||||
busy()
|
||||
started = time.monotonic()
|
||||
command_file = path.with_suffix('.command.json')
|
||||
command_file.write_text(json.dumps(command))
|
||||
# Keep command text out of wrapper argv: the busy guard scans every argv.
|
||||
# launch.py execs the structured command. bash owns a pipefail/tee pipeline.
|
||||
p = subprocess.Popen(['bash','-o','pipefail','-c',
|
||||
'python3 "$1" "$2" 2>&1 | tee "$3"', '--',str(HERE/'launch.py'),str(command_file),str(path)],
|
||||
cwd=REPO,start_new_session=True)
|
||||
expired = False
|
||||
try:
|
||||
code = p.wait(timeout=seconds)
|
||||
expired = code in (124, 137)
|
||||
except subprocess.TimeoutExpired:
|
||||
expired = True
|
||||
os.killpg(p.pid, signal.SIGKILL)
|
||||
code = p.wait()
|
||||
finally:
|
||||
try:
|
||||
os.killpg(p.pid, signal.SIGKILL)
|
||||
except ProcessLookupError:
|
||||
pass
|
||||
return dict(code=code, timeout=expired, seconds=round(time.monotonic()-started, 3), log=str(path))
|
||||
|
||||
def main():
|
||||
ap = argparse.ArgumentParser()
|
||||
ap.add_argument('--static', action='store_true')
|
||||
ap.add_argument('--grant')
|
||||
ap.add_argument('--out', type=Path)
|
||||
args = ap.parse_args()
|
||||
definitions = json.loads((HERE/'changes.json').read_text())
|
||||
checked = []
|
||||
for d in definitions:
|
||||
original = (REPO/d['file']).read_bytes()
|
||||
count = original.count(d['old'].encode())
|
||||
if count != 1:
|
||||
raise RuntimeError(f"{d['id']}: target occurs {count} times")
|
||||
changed = original.replace(d['old'].encode(), d['new'].encode(), 1)
|
||||
checked.append(dict(id=d['id'], file=d['file'], occurrences=count,
|
||||
before=digest(original), after=digest(changed)))
|
||||
if args.static:
|
||||
print(json.dumps(checked, indent=2))
|
||||
return
|
||||
if not args.grant or not args.out:
|
||||
ap.error('execution needs --grant and --out')
|
||||
if not os.environ.get('TMPDIR', '').startswith('/mnt/storage/scratch/tmp/g'):
|
||||
raise RuntimeError('TMPDIR must be the granted scratch directory')
|
||||
status = subprocess.check_output(['git','status','--porcelain','--untracked-files=no'],cwd=REPO)
|
||||
args.out.mkdir(parents=True, exist_ok=True)
|
||||
results = dict(grant=args.grant, static=checked, bases={}, changes=[])
|
||||
failures = 0
|
||||
for d in [x for x in definitions if int(x['id'][1:]) >= 32]:
|
||||
key = d['killer']+'|'+d['pattern']
|
||||
command = ['node','--test','--test-reporter=tap','--test-name-pattern',d['pattern'],d['killer']]
|
||||
if key not in results['bases']:
|
||||
base = run(command, args.out/(d['id']+'-base.log'))
|
||||
results['bases'][key] = base
|
||||
(args.out/'results.json').write_text(json.dumps(results,indent=2)+'\n')
|
||||
if base['code'] != 0 or base['seconds'] > 30:
|
||||
raise RuntimeError('base failed or exceeded 30 seconds: '+d['id'])
|
||||
target = REPO/d['file']
|
||||
original = target.read_bytes()
|
||||
try:
|
||||
target.write_bytes(original.replace(d['old'].encode(),d['new'].encode(),1))
|
||||
pre = subprocess.run(['bash','-n',str(target)],capture_output=True)
|
||||
if pre.returncode:
|
||||
raise RuntimeError('invalid syntax: '+d['id'])
|
||||
result = run(command,args.out/(d['id']+'.log'))
|
||||
result.update(id=d['id'], base_seconds=results['bases'][key]['seconds'],
|
||||
outcome='timeout' if result['timeout'] else 'killed' if result['code'] != 0 else 'survived')
|
||||
results['changes'].append(result)
|
||||
if result['timeout']:
|
||||
raise RuntimeError('timeout requires Sage/Mos classification: '+d['id'])
|
||||
if result['outcome'] != 'killed':
|
||||
failures += 1
|
||||
finally:
|
||||
target.write_bytes(original)
|
||||
assert target.read_bytes() == original
|
||||
assert subprocess.check_output(['git','status','--porcelain','--untracked-files=no'],cwd=REPO) == status
|
||||
(args.out/'results.json').write_text(json.dumps(results,indent=2)+'\n')
|
||||
if failures >= 1:
|
||||
raise RuntimeError('first unexpected failure: end the sage-2297 window')
|
||||
print(json.dumps(results,indent=2))
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Whitespace-only changes.
@@ -0,0 +1,46 @@
|
||||
# M1-M40 kill table
|
||||
|
||||
Every base passes; each change restored exact bytes and tracked status before the next. No timeout counts as kill.
|
||||
|
||||
| Check | Named killer | Base seconds | Changed seconds | Outcome |
|
||||
|---|---|---:|---:|---|
|
||||
| M1 | row253 factory refuses retired TCP | 0.265 | 0.215 | killed |
|
||||
| M2 | library refuses a privileged-floor miss | 0.515 | 0.465 | killed |
|
||||
| M3 | factory refuses duplicate socket | 0.465 | 0.616 | killed |
|
||||
| M4 | row253 installer refuses unsafe location and query facts | 4.073 | 5.778 | killed |
|
||||
| M5 | row253 installer refuses unsafe location and query facts | 4.073 | 3.923 | killed |
|
||||
| M6 | row253 installer refuses unsafe location and query facts | 4.073 | 0.565 | killed |
|
||||
| M7 | row253 protected homes | 0.214 | 0.265 | killed |
|
||||
| M8 | row253 installer refuses unsafe location and query facts | 4.073 | 3.172 | killed |
|
||||
| M9 | row253 installer refuses unsafe location and query facts | 4.073 | 2.87 | killed |
|
||||
| M10 | row253 installer refuses unsafe location and query facts | 4.073 | 4.023 | killed |
|
||||
| M11 | row253 installer refuses unsafe location and query facts | 4.073 | 3.973 | killed |
|
||||
| M12 | a bad args file refuses | 0.365 | 0.264 | killed |
|
||||
| M13 | a bad args file refuses | 0.365 | 1.116 | killed |
|
||||
| M14 | a bad args file refuses | 0.365 | 1.217 | killed |
|
||||
| M15 | row253 acceptance rejects bad config | 2.069 | 2.369 | killed |
|
||||
| M16 | row253 P8 refuses | 2.069 | 1.016 | killed |
|
||||
| M17 | row253 P10 refuses unsafe metadata | 13.144 | 1.016 | killed |
|
||||
| M18 | row253 P10 refuses unsafe metadata | 13.144 | 2.47 | killed |
|
||||
| M19 | row253 P10 refuses unsafe metadata | 13.144 | 6.328 | killed |
|
||||
| M20 | row253 P10 refuses unsafe metadata | 13.144 | 4.624 | killed |
|
||||
| M21 | row253 P10 refuses unsafe metadata | 13.144 | 8.683 | killed |
|
||||
| M22 | row253 P10 refuses unsafe metadata | 13.144 | 8.283 | killed |
|
||||
| M23 | row253 P10 refuses unsafe metadata | 13.144 | 11.038 | killed |
|
||||
| M24 | row253 factory socket uses actual config | 0.615 | 0.315 | killed |
|
||||
| M25 | row253 socket observation uses configured root | 1.116 | 1.017 | killed |
|
||||
| M26 | row253 P10 refuses unsafe metadata | 13.144 | 13.244 | killed |
|
||||
| M27 | row253 socket observation uses configured root | 1.116 | 1.117 | killed |
|
||||
| M28 | row253 installer refuses unsafe location and query facts | 4.073 | 3.171 | killed |
|
||||
| M29 | row253 installer refuses unsafe location and query facts | 4.073 | 2.269 | killed |
|
||||
| M30 | row253 installer refuses unsafe location and query facts | 4.073 | 0.866 | killed |
|
||||
| M31 | row253 config parser is strict | 0.214 | 0.265 | killed |
|
||||
| M32 | row253 C4 overflow is output-limit | 0.866 | 0.565 | killed |
|
||||
| M33 | row253 query reaps its group | 0.365 | 0.866 | killed |
|
||||
| M34 | row253 C4 signals query | 11.189 | 7.28 | killed |
|
||||
| M35 | row253 C4 stalled supervisor | 14.395 | 9.735 | killed |
|
||||
| M36 | row253 C4 member query | 11.088 | 7.28 | killed |
|
||||
| M37 | row253 C4 overflow is output-limit | 0.866 | 0.515 | killed |
|
||||
| M38 | row253 C4 signals query | 11.189 | 5.275 | killed |
|
||||
| M39 | row253 C4 inline supervisor is byte-identical | 0.215 | 0.214 | killed |
|
||||
| M40 | row253 C4 cleanup budget starts after inventory pass one | 0.265 | 0.214 | killed |
|
||||
@@ -0,0 +1 @@
|
||||
sage-2824,16:53:55Z: Sage self-reports one canonical scripts/mosaic queue --help at16:53:3xZ, under1s, no tests or queue write, gone. Classified benign by Sage; continue grants2786/2811. No guard refusal from this call observed by this seat.
|
||||
@@ -1,47 +1,168 @@
|
||||
# Run5 busy refusal before M32
|
||||
# Row253 whole gate RESULTS
|
||||
|
||||
HEAD48e450ce8, manifest591020a1, sage-2786. Nothing carried.
|
||||
HEAD 48e450ce8fbb10df0beabc8da67ab90ea14587ea, product 14e46006171ef700a72f971fda5cb3a0b8dcc4f2, manifest 591020a1096a1606c11f2ee34b37243acddf83d91c69922ccc5cfe22d6180d3a.
|
||||
|
||||
Both intendedREDs observed. Installer whole43/0/0 in70.670s; acceptance whole34/0/0 in126.752s. All six kind/mode PID/SID equalities passed on base. Controls13/0; M1-M31 killed, M32-M40 and all full package/union/shell stages NOTRUN. No timeout, unexpected red or survivor. Gate wall425.340s.
|
||||
48e450ce8..actual record HEAD name-only outside agents/gander/:
|
||||
|
||||
Busy guard matched PID1196971, an external-project SSH command running docker compose exec under /opt/setspark-ops. It refused before M32 base. No bypass or retry. Raw controller.log preserved. Reported direct to Duckworth and Mos, cc Sage in gander-0121; slot returned. Classification/resume pending.
|
||||
```text
|
||||
```
|
||||
|
||||
Source restored and all7manifest entries verified; tracked status clean. Sweep0 run-created leftovers;9 known pre-existing infrastructure processes excluded.
|
||||
All listed whole files ran, with no unlisted-file coverage claim. Intended REDs and focused repeats are separate from package totals. Bus coverage is the20-file rebase union, not a bus-whole claim.
|
||||
|
||||
N9 passed, no skip:
|
||||
| Whole file | Pass/fail/skip | Wall seconds | Limit seconds |
|
||||
|---|---:|---:|---:|
|
||||
| packages/cli/tests/access.test.mjs | 22/0/0 | 6.178 | 900 |
|
||||
| packages/cli/tests/app.test.mjs | 30/0/0 | 15.149 | 900 |
|
||||
| packages/cli/tests/boot-status.test.mjs | 3/0/0 | 1.668 | 900 |
|
||||
| packages/cli/tests/case1-accept.test.mjs | 34/0/0 | 123.341 | 418 |
|
||||
| packages/cli/tests/case1-hostcheck.test.mjs | 16/0/0 | 2.721 | 900 |
|
||||
| packages/cli/tests/case2-persona-import.test.mjs | 14/0/0 | 3.221 | 900 |
|
||||
| packages/cli/tests/case2-unit.test.mjs | 43/0/0 | 71.568 | 320 |
|
||||
| packages/cli/tests/channel-cli.test.mjs | 2/0/0 | 0.214 | 900 |
|
||||
| packages/cli/tests/channel-recovery.test.mjs | 1/0/0 | 2.569 | 900 |
|
||||
| packages/cli/tests/cli.test.mjs | 12/0/0 | 0.415 | 900 |
|
||||
| packages/cli/tests/config.test.mjs | 6/0/0 | 0.465 | 900 |
|
||||
| packages/cli/tests/credentials.test.mjs | 5/0/0 | 0.315 | 900 |
|
||||
| packages/cli/tests/follow.test.mjs | 6/0/0 | 0.716 | 900 |
|
||||
| packages/cli/tests/format.test.mjs | 4/0/0 | 0.114 | 900 |
|
||||
| packages/cli/tests/gate-lane-auth.test.mjs | 5/0/0 | 19.407 | 900 |
|
||||
| packages/cli/tests/gate-lane-fixtures.test.mjs | 8/0/0 | 0.465 | 900 |
|
||||
| packages/cli/tests/gate-lane-image.test.mjs | 13/0/0 | 0.415 | 900 |
|
||||
| packages/cli/tests/gate-lane-state.test.mjs | 14/0/0 | 2.17 | 900 |
|
||||
| packages/cli/tests/gate-lane.test.mjs | 13/0/0 | 0.665 | 900 |
|
||||
| packages/cli/tests/git-socket.test.mjs | 24/0/0 | 18.905 | 900 |
|
||||
| packages/cli/tests/grants.test.mjs | 6/0/0 | 0.365 | 900 |
|
||||
| packages/cli/tests/host.test.mjs | 43/0/0 | 13.795 | 900 |
|
||||
| packages/cli/tests/hosts.test.mjs | 8/0/0 | 0.315 | 900 |
|
||||
| packages/cli/tests/instances.test.mjs | 14/0/0 | 3.07 | 900 |
|
||||
| packages/cli/tests/launch-account.test.mjs | 7/0/0 | 0.365 | 900 |
|
||||
| packages/cli/tests/launch-limit-checks.test.mjs | 5/0/0 | 0.315 | 900 |
|
||||
| packages/cli/tests/launch-limits.test.mjs | 1/0/0 | 0.265 | 900 |
|
||||
| packages/cli/tests/launch-routes.test.mjs | 9/0/0 | 0.415 | 900 |
|
||||
| packages/cli/tests/launcher.test.mjs | 34/0/0 | 30.18 | 900 |
|
||||
| packages/cli/tests/lifecycle.test.mjs | 24/0/0 | 15.148 | 160 |
|
||||
| packages/cli/tests/limits-tokens.test.mjs | 5/0/0 | 0.215 | 900 |
|
||||
| packages/cli/tests/limits.test.mjs | 5/0/0 | 0.415 | 900 |
|
||||
| packages/cli/tests/mark-read.test.mjs | 6/0/0 | 0.966 | 900 |
|
||||
| packages/cli/tests/names.test.mjs | 2/0/0 | 0.265 | 900 |
|
||||
| packages/cli/tests/notifier.test.mjs | 27/0/0 | 0.766 | 900 |
|
||||
| packages/cli/tests/other-tree.test.mjs | 4/0/0 | 0.265 | 900 |
|
||||
| packages/cli/tests/processing-cli.test.mjs | 4/0/0 | 0.265 | 900 |
|
||||
| packages/cli/tests/project-name-repo.test.mjs | 2/0/0 | 0.315 | 900 |
|
||||
| packages/cli/tests/project.test.mjs | 4/0/0 | 0.565 | 900 |
|
||||
| packages/cli/tests/publish-socket.test.mjs | 9/0/0 | 7.23 | 900 |
|
||||
| packages/cli/tests/stack-copy.test.mjs | 17/0/0 | 17.403 | 900 |
|
||||
| packages/cli/tests/stack-instances.test.mjs | 24/0/0 | 4.073 | 900 |
|
||||
| packages/cli/tests/stack-release-external.test.mjs | 25/0/0 | 99.183 | 900 |
|
||||
| packages/cli/tests/stack-release.test.mjs | 218/0/0 | 683.647 | 1871 |
|
||||
| packages/cli/tests/stack-upgrade.test.mjs | 21/0/0 | 70.916 | 900 |
|
||||
| packages/cli/tests/tester-http.test.mjs | 2/0/0 | 0.164 | 900 |
|
||||
| packages/cli/tests/tester-reads.test.mjs | 6/0/0 | 2.469 | 900 |
|
||||
| packages/cli/tests/tester-threads.test.mjs | 5/0/0 | 2.971 | 900 |
|
||||
| packages/cli/tests/tester.test.mjs | 11/0/0 | 0.365 | 900 |
|
||||
| packages/cli/tests/thread-cli.test.mjs | 11/0/0 | 1.868 | 126 |
|
||||
| packages/cli/tests/thread-launch.test.mjs | 11/0/0 | 17.303 | 170 |
|
||||
| packages/cli/tests/trackers-boot.test.mjs | 2/0/0 | 0.916 | 900 |
|
||||
| packages/cli/tests/transport.test.mjs | 3/0/0 | 2.369 | 900 |
|
||||
| packages/cli/tests/usage.test.mjs | 2/0/0 | 0.365 | 900 |
|
||||
| packages/cli/tests/verbs.test.mjs | 9/0/0 | 3.522 | 900 |
|
||||
| packages/webui/tests/agents-browser.test.mjs | 2/0/0 | 14.396 | 900 |
|
||||
| packages/webui/tests/agents.test.mjs | 8/0/0 | 0.315 | 900 |
|
||||
| packages/webui/tests/assistant.test.mjs | 6/0/0 | 0.214 | 900 |
|
||||
| packages/webui/tests/board-held.test.mjs | 3/0/0 | 9.54 | 900 |
|
||||
| packages/webui/tests/browser-edge.test.mjs | 1/0/0 | 1.669 | 900 |
|
||||
| packages/webui/tests/browser.test.mjs | 1/0/0 | 1.818 | 900 |
|
||||
| packages/webui/tests/bus-browser.test.mjs | 2/0/0 | 3.572 | 900 |
|
||||
| packages/webui/tests/bus.test.mjs | 10/0/0 | 3.171 | 900 |
|
||||
| packages/webui/tests/channel-chat.test.mjs | 3/0/0 | 0.265 | 900 |
|
||||
| packages/webui/tests/chat-browser.test.mjs | 11/0/0 | 18.958 | 900 |
|
||||
| packages/webui/tests/chat.test.mjs | 23/0/0 | 0.615 | 122 |
|
||||
| packages/webui/tests/conversation.test.mjs | 4/0/0 | 4.626 | 900 |
|
||||
| packages/webui/tests/discord.test.mjs | 1/0/0 | 0.966 | 900 |
|
||||
| packages/webui/tests/docs-browser.test.mjs | 1/0/0 | 1.97 | 900 |
|
||||
| packages/webui/tests/editor-browser.test.mjs | 16/0/0 | 14.747 | 900 |
|
||||
| packages/webui/tests/editor-provenance.test.mjs | 5/0/1 | 0.315 | 900 |
|
||||
| packages/webui/tests/editor.test.mjs | 5/0/0 | 1.969 | 900 |
|
||||
| packages/webui/tests/history-return-flow.test.mjs | 1/0/0 | 52.48 | 900 |
|
||||
| packages/webui/tests/instances-browser.test.mjs | 1/0/0 | 1.518 | 900 |
|
||||
| packages/webui/tests/instances.test.mjs | 5/0/0 | 0.515 | 900 |
|
||||
| packages/webui/tests/library-cli.test.mjs | 1/0/0 | 0.365 | 900 |
|
||||
| packages/webui/tests/library-status.test.mjs | 1/0/0 | 0.114 | 900 |
|
||||
| packages/webui/tests/limits-browser.test.mjs | 2/0/0 | 2.169 | 900 |
|
||||
| packages/webui/tests/limits-route.test.mjs | 4/0/0 | 0.265 | 900 |
|
||||
| packages/webui/tests/markdown-preview.test.mjs | 19/0/0 | 8.734 | 900 |
|
||||
| packages/webui/tests/messages.test.mjs | 3/0/0 | 3.071 | 900 |
|
||||
| packages/webui/tests/pinned-copy.test.mjs | 10/0/0 | 7.48 | 900 |
|
||||
| packages/webui/tests/preview.test.mjs | 11/0/0 | 1.167 | 900 |
|
||||
| packages/webui/tests/processing-browser.test.mjs | 9/0/0 | 7.331 | 900 |
|
||||
| packages/webui/tests/processing-ui.test.mjs | 5/0/0 | 0.164 | 900 |
|
||||
| packages/webui/tests/processing.test.mjs | 6/0/0 | 0.215 | 900 |
|
||||
| packages/webui/tests/project-file.test.mjs | 10/0/0 | 0.265 | 900 |
|
||||
| packages/webui/tests/project-name-repo.test.mjs | 1/0/0 | 0.164 | 900 |
|
||||
| packages/webui/tests/proof-cli.test.mjs | 3/0/0 | 2.219 | 900 |
|
||||
| packages/webui/tests/proof.test.mjs | 4/0/0 | 0.315 | 900 |
|
||||
| packages/webui/tests/reads.test.mjs | 11/0/0 | 1.818 | 900 |
|
||||
| packages/webui/tests/relaunch.test.mjs | 1/0/0 | 1.117 | 900 |
|
||||
| packages/webui/tests/return-flow.test.mjs | 1/0/0 | 21.111 | 900 |
|
||||
| packages/webui/tests/routes-browser.test.mjs | 1/0/0 | 1.568 | 900 |
|
||||
| packages/webui/tests/routes.test.mjs | 5/0/0 | 0.415 | 900 |
|
||||
| packages/webui/tests/send-browser.test.mjs | 2/0/0 | 13.895 | 900 |
|
||||
| packages/webui/tests/send.test.mjs | 13/0/0 | 1.018 | 900 |
|
||||
| packages/webui/tests/serve.test.mjs | 4/0/0 | 0.866 | 900 |
|
||||
| packages/webui/tests/service.test.mjs | 32/0/0 | 13.593 | 900 |
|
||||
| packages/webui/tests/settings-form.test.mjs | 5/0/0 | 5.327 | 900 |
|
||||
| packages/webui/tests/settings-write.test.mjs | 4/0/0 | 0.265 | 900 |
|
||||
| packages/webui/tests/shell.test.mjs | 5/0/0 | 8.735 | 900 |
|
||||
| packages/webui/tests/sso-browser.test.mjs | 2/0/0 | 7.129 | 900 |
|
||||
| packages/webui/tests/sso.test.mjs | 28/0/0 | 3.522 | 900 |
|
||||
| packages/webui/tests/tester-browser.test.mjs | 2/0/0 | 2.119 | 900 |
|
||||
| packages/webui/tests/tester-cli.test.mjs | 2/0/0 | 4.074 | 900 |
|
||||
| packages/webui/tests/tester-listener.test.mjs | 10/0/0 | 0.916 | 900 |
|
||||
| packages/webui/tests/tester-socket.test.mjs | 3/0/0 | 0.215 | 900 |
|
||||
| packages/webui/tests/thread-claims-browser.test.mjs | 6/0/0 | 4.875 | 900 |
|
||||
| packages/webui/tests/thread-claims.test.mjs | 4/0/0 | 0.417 | 900 |
|
||||
| packages/webui/tests/usage-browser.test.mjs | 1/0/0 | 0.966 | 900 |
|
||||
| packages/webui/tests/usage.test.mjs | 2/0/0 | 0.265 | 900 |
|
||||
| packages/webui/tests/views.test.mjs | 3/0/0 | 5.125 | 900 |
|
||||
| packages/bus/tests/account-migration.test.mjs | 3/0/0 | 0.415 | 122 |
|
||||
| packages/bus/tests/chief-of-staff.test.mjs | 42/0/0 | 2.419 | 127 |
|
||||
| packages/bus/tests/comment-migration.test.mjs | 5/0/0 | 0.666 | 122 |
|
||||
| packages/bus/tests/end-launch.test.mjs | 7/0/0 | 0.515 | 122 |
|
||||
| packages/bus/tests/fire-revokes-grants.test.mjs | 22/0/0 | 3.722 | 130 |
|
||||
| packages/bus/tests/gitea-grant.test.mjs | 49/0/0 | 9.534 | 146 |
|
||||
| packages/bus/tests/gitea-migration.test.mjs | 5/0/0 | 0.465 | 122 |
|
||||
| packages/bus/tests/grant-executor.test.mjs | 42/0/0 | 22.312 | 185 |
|
||||
| packages/bus/tests/grant-migration.test.mjs | 6/0/0 | 0.565 | 122 |
|
||||
| packages/bus/tests/lifecycle-revoke.test.mjs | 8/0/0 | 0.766 | 122 |
|
||||
| packages/bus/tests/message-filter.test.mjs | 6/0/0 | 0.565 | 122 |
|
||||
| packages/bus/tests/name-migration.test.mjs | 1/0/0 | 0.265 | 121 |
|
||||
| packages/bus/tests/schema.test.mjs | 1/0/0 | 0.214 | 121 |
|
||||
| packages/bus/tests/sessions.test.mjs | 7/0/0 | 0.665 | 122 |
|
||||
| packages/bus/tests/spec-migration.test.mjs | 1/0/0 | 0.215 | 121 |
|
||||
| packages/bus/tests/tester-writes.test.mjs | 8/0/0 | 0.515 | 122 |
|
||||
| packages/bus/tests/thread-claims.test.mjs | 6/0/0 | 0.315 | 121 |
|
||||
| packages/bus/tests/thread-migration.test.mjs | 3/0/0 | 0.415 | 122 |
|
||||
| packages/bus/tests/threads.test.mjs | 17/0/0 | 1.52 | 124 |
|
||||
| packages/bus/tests/usage-migration.test.mjs | 1/0/0 | 0.214 | 121 |
|
||||
| scripts/test-auth.sh | 15/0/0 | 1.067 | 126 |
|
||||
| scripts/test-conductor.sh | 17/0/0 | 6.529 | 145 |
|
||||
| scripts/test-config.sh | 31/0/0 | 1.968 | 130 |
|
||||
| scripts/test-discord.sh | 81/0/0 | 8.033 | 147 |
|
||||
| scripts/test-extension-package.sh | 18/0/0 | 1.617 | 130 |
|
||||
| scripts/test-foundation.sh | 44/0/0 | 49.367 | 240 |
|
||||
| scripts/test-land-work.sh | 86/0/0 | 16.854 | 158 |
|
||||
| scripts/test-queue.sh | 28/0/0 | 35.155 | 191 |
|
||||
| scripts/test-release.sh | 14/0/0 | 3.271 | 157 |
|
||||
| scripts/test-task.sh | 91/0/0 | 16.653 | 231 |
|
||||
|
||||
`ok 43 - inside a session's sandbox a bind below 1024 fails with EACCES, and a bind on a free high port succeeds`
|
||||
N9 verbatim: ok 43 - inside a session's sandbox a bind below 1024 fails with EACCES, and a bind on a free high port succeeds
|
||||
|
||||
| Variant | Outcome | Base seconds | Variant seconds |
|
||||
|---|---|---:|---:|
|
||||
| M1 | killed | 0.265 | 0.215 |
|
||||
| M2 | killed | 0.515 | 0.465 |
|
||||
| M3 | killed | 0.465 | 0.616 |
|
||||
| M4 | killed | 4.073 | 5.778 |
|
||||
| M5 | killed | 4.073 | 3.923 |
|
||||
| M6 | killed | 4.073 | 0.565 |
|
||||
| M7 | killed | 0.214 | 0.265 |
|
||||
| M8 | killed | 4.073 | 3.172 |
|
||||
| M9 | killed | 4.073 | 2.870 |
|
||||
| M10 | killed | 4.073 | 4.023 |
|
||||
| M11 | killed | 4.073 | 3.973 |
|
||||
| M12 | killed | 0.365 | 0.264 |
|
||||
| M13 | killed | 0.365 | 1.116 |
|
||||
| M14 | killed | 0.365 | 1.217 |
|
||||
| M15 | killed | 2.069 | 2.369 |
|
||||
| M16 | killed | 2.069 | 1.016 |
|
||||
| M17 | killed | 13.144 | 1.016 |
|
||||
| M18 | killed | 13.144 | 2.470 |
|
||||
| M19 | killed | 13.144 | 6.328 |
|
||||
| M20 | killed | 13.144 | 4.624 |
|
||||
| M21 | killed | 13.144 | 8.683 |
|
||||
| M22 | killed | 13.144 | 8.283 |
|
||||
| M23 | killed | 13.144 | 11.038 |
|
||||
| M24 | killed | 0.615 | 0.315 |
|
||||
| M25 | killed | 1.116 | 1.017 |
|
||||
| M26 | killed | 13.144 | 13.244 |
|
||||
| M27 | killed | 1.116 | 1.117 |
|
||||
| M28 | killed | 4.073 | 3.171 |
|
||||
| M29 | killed | 4.073 | 2.269 |
|
||||
| M30 | killed | 4.073 | 0.866 |
|
||||
| M31 | killed | 0.214 | 0.265 |
|
||||
Every named skip:
|
||||
|
||||
- packages/webui/tests/editor-provenance.test.mjs: ok 6 - rebuilding from the source gives the same bytes (needs the pinned esbuild; MOSAIC_REQUIRE_EDITOR_BUILD=1 makes its absence a failure) # SKIP esbuild 0.28.1 is installed at /mnt/storage/src/mosaic-stack/node_modules/esbuild; the editor rebuild needs exactly 0.28.2 (npm ci --ignore-scripts in packages/webui) (set MOSAIC_REQUIRE_EDITOR_BUILD=1 to fail instead of skip)
|
||||
- scripts/test-queue.sh: skip queue verify and render --check: this checkout (/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196) is not the queue's canonical root (/mnt/storage/src/mosaic-stack)
|
||||
- scripts/test-task.sh: skip live provider cases (row 244: no provider call in the gate)
|
||||
- scripts/test-task.sh: skip live provider cases (row 244: no provider call in the gate)
|
||||
|
||||
|
||||
Same-run resume under sage-2811 after classified external-process guard refusal. No other round carries. Actual record HEADdd9d519b1 differs from candidate48e450ce8 only under agents/gander/. Stage measured wall sums: CLI1253.715s,WebUI267.028s,bus union46.282s,shells140.514s; control20/0 in64.223s; variants40/40 killed in128.497s. Active window walls425.340s and2106.873s, excluding the classified gap. M21 named P10 assertion kill; M38 ERR_ASSERTION strictEqual at case2-unit.test.mjs:203:10, signals/exec PID1298470 vs SID1298319. Both scripts match candidate; all7manifest checks pass. Sweep0run-created leftovers.
|
||||
@@ -0,0 +1 @@
|
||||
sage-2811 classifies the external busy refusal as unrelated and clears this same run5 from M32 with fresh bases. resume5.py is driver.py with only its execution loop filtered to M32-M40; static uniqueness still checks all40, run()/busy()/restoration unchanged. Candidate48e450ce8; actual record HEADdd9d519b1 differs only in agents/gander/. No other round carries.
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1 @@
|
||||
["timeout", "-k", "10", "320", "node", "--test", "--test-reporter=tap", "--test-name-pattern", "row253 C4 overflow is output-limit", "packages/cli/tests/case2-unit.test.mjs"]
|
||||
@@ -0,0 +1,16 @@
|
||||
TAP version 13
|
||||
# Subtest: row253 C4 overflow is output-limit in both sudo modes
|
||||
ok 1 - row253 C4 overflow is output-limit in both sudo modes
|
||||
---
|
||||
duration_ms: 625.994428
|
||||
type: 'test'
|
||||
...
|
||||
1..1
|
||||
# tests 1
|
||||
# suites 0
|
||||
# pass 1
|
||||
# fail 0
|
||||
# cancelled 0
|
||||
# skipped 0
|
||||
# todo 0
|
||||
# duration_ms 760.206204
|
||||
@@ -0,0 +1 @@
|
||||
["timeout", "-k", "10", "320", "node", "--test", "--test-reporter=tap", "--test-name-pattern", "row253 C4 overflow is output-limit", "packages/cli/tests/case2-unit.test.mjs"]
|
||||
@@ -0,0 +1,37 @@
|
||||
TAP version 13
|
||||
# Subtest: row253 C4 overflow is output-limit in both sudo modes
|
||||
not ok 1 - row253 C4 overflow is output-limit in both sudo modes
|
||||
---
|
||||
duration_ms: 323.005464
|
||||
type: 'test'
|
||||
location: '/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case2-unit.test.mjs:211:1'
|
||||
failureType: 'testCodeFailure'
|
||||
error: |-
|
||||
The input did not match the regular expression /^case2-unit: tester config query output-limit\n$/. Input:
|
||||
|
||||
'case2-unit: tester config query has invalid facts\n'
|
||||
|
||||
code: 'ERR_ASSERTION'
|
||||
name: 'AssertionError'
|
||||
expected:
|
||||
actual: |-
|
||||
case2-unit: tester config query has invalid facts
|
||||
|
||||
operator: 'match'
|
||||
stack: |-
|
||||
refuses (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case2-unit.test.mjs:293:10)
|
||||
TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case2-unit.test.mjs:215:49)
|
||||
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 490.238569
|
||||
@@ -0,0 +1 @@
|
||||
["timeout", "-k", "10", "320", "node", "--test", "--test-reporter=tap", "--test-name-pattern", "row253 query reaps its group", "packages/cli/tests/case2-unit.test.mjs"]
|
||||
@@ -0,0 +1,16 @@
|
||||
TAP version 13
|
||||
# Subtest: row253 query reaps its group even when a child closes stdout before the query returns
|
||||
ok 1 - row253 query reaps its group even when a child closes stdout before the query returns
|
||||
---
|
||||
duration_ms: 157.91649
|
||||
type: 'test'
|
||||
...
|
||||
1..1
|
||||
# tests 1
|
||||
# suites 0
|
||||
# pass 1
|
||||
# fail 0
|
||||
# cancelled 0
|
||||
# skipped 0
|
||||
# todo 0
|
||||
# duration_ms 283.847211
|
||||
@@ -0,0 +1 @@
|
||||
["timeout", "-k", "10", "320", "node", "--test", "--test-reporter=tap", "--test-name-pattern", "row253 query reaps its group", "packages/cli/tests/case2-unit.test.mjs"]
|
||||
@@ -0,0 +1,28 @@
|
||||
TAP version 13
|
||||
# Subtest: row253 query reaps its group even when a child closes stdout before the query returns
|
||||
not ok 1 - row253 query reaps its group even when a child closes stdout before the query returns
|
||||
---
|
||||
duration_ms: 663.440496
|
||||
type: 'test'
|
||||
location: '/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case2-unit.test.mjs:263:1'
|
||||
failureType: 'testCodeFailure'
|
||||
error: 'query descendant 1248560 still S'
|
||||
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/case2-unit.test.mjs:277:9)
|
||||
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 784.189133
|
||||
@@ -0,0 +1 @@
|
||||
["timeout", "-k", "10", "320", "node", "--test", "--test-reporter=tap", "--test-name-pattern", "row253 C4 signals query", "packages/cli/tests/case2-unit.test.mjs"]
|
||||
@@ -0,0 +1,16 @@
|
||||
TAP version 13
|
||||
# Subtest: row253 C4 signals query has exact inner reason and cleans all members
|
||||
ok 1 - row253 C4 signals query has exact inner reason and cleans all members
|
||||
---
|
||||
duration_ms: 10950.217059
|
||||
type: 'test'
|
||||
...
|
||||
1..1
|
||||
# tests 1
|
||||
# suites 0
|
||||
# pass 1
|
||||
# fail 0
|
||||
# cancelled 0
|
||||
# skipped 0
|
||||
# todo 0
|
||||
# duration_ms 11089.397589
|
||||
@@ -0,0 +1 @@
|
||||
["timeout", "-k", "10", "320", "node", "--test", "--test-reporter=tap", "--test-name-pattern", "row253 C4 signals query", "packages/cli/tests/case2-unit.test.mjs"]
|
||||
@@ -0,0 +1,37 @@
|
||||
TAP version 13
|
||||
# Subtest: row253 C4 signals query has exact inner reason and cleans all members
|
||||
not ok 1 - row253 C4 signals query has exact inner reason and cleans all members
|
||||
---
|
||||
duration_ms: 7064.848782
|
||||
type: 'test'
|
||||
location: '/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case2-unit.test.mjs:192:49'
|
||||
failureType: 'testCodeFailure'
|
||||
error: |-
|
||||
The input did not match the regular expression /^case2-unit: tester config query inner-timeout\n$/. Input:
|
||||
|
||||
'case2-unit: tester config query outer-timeout\n'
|
||||
|
||||
code: 'ERR_ASSERTION'
|
||||
name: 'AssertionError'
|
||||
expected:
|
||||
actual: |-
|
||||
case2-unit: tester config query outer-timeout
|
||||
|
||||
operator: 'match'
|
||||
stack: |-
|
||||
refuses (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case2-unit.test.mjs:293:10)
|
||||
TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case2-unit.test.mjs:201:3)
|
||||
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 7210.704044
|
||||
@@ -0,0 +1 @@
|
||||
["timeout", "-k", "10", "320", "node", "--test", "--test-reporter=tap", "--test-name-pattern", "row253 C4 stalled supervisor", "packages/cli/tests/case2-unit.test.mjs"]
|
||||
@@ -0,0 +1,16 @@
|
||||
TAP version 13
|
||||
# Subtest: row253 C4 stalled supervisor uses the outer reason and explicit residual cleanup
|
||||
ok 1 - row253 C4 stalled supervisor uses the outer reason and explicit residual cleanup
|
||||
---
|
||||
duration_ms: 14171.49424
|
||||
type: 'test'
|
||||
...
|
||||
1..1
|
||||
# tests 1
|
||||
# suites 0
|
||||
# pass 1
|
||||
# fail 0
|
||||
# cancelled 0
|
||||
# skipped 0
|
||||
# todo 0
|
||||
# duration_ms 14286.424938
|
||||
@@ -0,0 +1 @@
|
||||
["timeout", "-k", "10", "320", "node", "--test", "--test-reporter=tap", "--test-name-pattern", "row253 C4 stalled supervisor", "packages/cli/tests/case2-unit.test.mjs"]
|
||||
@@ -0,0 +1,37 @@
|
||||
TAP version 13
|
||||
# Subtest: row253 C4 stalled supervisor uses the outer reason and explicit residual cleanup
|
||||
not ok 1 - row253 C4 stalled supervisor uses the outer reason and explicit residual cleanup
|
||||
---
|
||||
duration_ms: 9539.03879
|
||||
type: 'test'
|
||||
location: '/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case2-unit.test.mjs:221:1'
|
||||
failureType: 'testCodeFailure'
|
||||
error: |-
|
||||
The input did not match the regular expression /^case2-unit: tester config query outer-timeout\n$/. Input:
|
||||
|
||||
'case2-unit: tester config query inner-command\n'
|
||||
|
||||
code: 'ERR_ASSERTION'
|
||||
name: 'AssertionError'
|
||||
expected:
|
||||
actual: |-
|
||||
case2-unit: tester config query inner-command
|
||||
|
||||
operator: 'match'
|
||||
stack: |-
|
||||
refuses (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case2-unit.test.mjs:293:10)
|
||||
TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case2-unit.test.mjs:227:3)
|
||||
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 9657.55839
|
||||
@@ -0,0 +1 @@
|
||||
["timeout", "-k", "10", "320", "node", "--test", "--test-reporter=tap", "--test-name-pattern", "row253 C4 member query", "packages/cli/tests/case2-unit.test.mjs"]
|
||||
@@ -0,0 +1,16 @@
|
||||
TAP version 13
|
||||
# Subtest: row253 C4 member query has exact inner reason and cleans all members
|
||||
ok 1 - row253 C4 member query has exact inner reason and cleans all members
|
||||
---
|
||||
duration_ms: 10905.789988
|
||||
type: 'test'
|
||||
...
|
||||
1..1
|
||||
# tests 1
|
||||
# suites 0
|
||||
# pass 1
|
||||
# fail 0
|
||||
# cancelled 0
|
||||
# skipped 0
|
||||
# todo 0
|
||||
# duration_ms 11021.001085
|
||||
@@ -0,0 +1 @@
|
||||
["timeout", "-k", "10", "320", "node", "--test", "--test-reporter=tap", "--test-name-pattern", "row253 C4 member query", "packages/cli/tests/case2-unit.test.mjs"]
|
||||
@@ -0,0 +1,37 @@
|
||||
TAP version 13
|
||||
# Subtest: row253 C4 member query has exact inner reason and cleans all members
|
||||
not ok 1 - row253 C4 member query has exact inner reason and cleans all members
|
||||
---
|
||||
duration_ms: 7081.317279
|
||||
type: 'test'
|
||||
location: '/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case2-unit.test.mjs:192:49'
|
||||
failureType: 'testCodeFailure'
|
||||
error: |-
|
||||
The input did not match the regular expression /^case2-unit: tester config query inner-timeout\n$/. Input:
|
||||
|
||||
'case2-unit: tester config query outer-timeout\n'
|
||||
|
||||
code: 'ERR_ASSERTION'
|
||||
name: 'AssertionError'
|
||||
expected:
|
||||
actual: |-
|
||||
case2-unit: tester config query outer-timeout
|
||||
|
||||
operator: 'match'
|
||||
stack: |-
|
||||
refuses (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case2-unit.test.mjs:293:10)
|
||||
TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case2-unit.test.mjs:201:3)
|
||||
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 7220.110326
|
||||
@@ -0,0 +1 @@
|
||||
["timeout", "-k", "10", "320", "node", "--test", "--test-reporter=tap", "--test-name-pattern", "row253 C4 overflow is output-limit", "packages/cli/tests/case2-unit.test.mjs"]
|
||||
@@ -0,0 +1,37 @@
|
||||
TAP version 13
|
||||
# Subtest: row253 C4 overflow is output-limit in both sudo modes
|
||||
not ok 1 - row253 C4 overflow is output-limit in both sudo modes
|
||||
---
|
||||
duration_ms: 314.41894
|
||||
type: 'test'
|
||||
location: '/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case2-unit.test.mjs:211:1'
|
||||
failureType: 'testCodeFailure'
|
||||
error: |-
|
||||
The input did not match the regular expression /^case2-unit: tester config query output-limit\n$/. Input:
|
||||
|
||||
'case2-unit: tester config query has invalid facts\n'
|
||||
|
||||
code: 'ERR_ASSERTION'
|
||||
name: 'AssertionError'
|
||||
expected:
|
||||
actual: |-
|
||||
case2-unit: tester config query has invalid facts
|
||||
|
||||
operator: 'match'
|
||||
stack: |-
|
||||
refuses (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case2-unit.test.mjs:293:10)
|
||||
TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case2-unit.test.mjs:215:49)
|
||||
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 453.186682
|
||||
@@ -0,0 +1 @@
|
||||
["timeout", "-k", "10", "320", "node", "--test", "--test-reporter=tap", "--test-name-pattern", "row253 C4 signals query", "packages/cli/tests/case2-unit.test.mjs"]
|
||||
@@ -0,0 +1,37 @@
|
||||
TAP version 13
|
||||
# Subtest: row253 C4 signals query has exact inner reason and cleans all members
|
||||
not ok 1 - row253 C4 signals query has exact inner reason and cleans all members
|
||||
---
|
||||
duration_ms: 5074.020127
|
||||
type: 'test'
|
||||
location: '/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case2-unit.test.mjs:192:49'
|
||||
failureType: 'testCodeFailure'
|
||||
error: |-
|
||||
signals/exec: direct query PID must equal its kernel SID
|
||||
+ actual - expected
|
||||
|
||||
+ 1298470
|
||||
- 1298319
|
||||
^
|
||||
|
||||
code: 'ERR_ASSERTION'
|
||||
name: 'AssertionError'
|
||||
expected: 1298319
|
||||
actual: 1298470
|
||||
operator: 'strictEqual'
|
||||
stack: |-
|
||||
TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case2-unit.test.mjs:203:10)
|
||||
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 5205.043793
|
||||
@@ -0,0 +1 @@
|
||||
["timeout", "-k", "10", "320", "node", "--test", "--test-reporter=tap", "--test-name-pattern", "row253 C4 inline supervisor is byte-identical", "packages/cli/tests/case2-unit.test.mjs"]
|
||||
@@ -0,0 +1,16 @@
|
||||
TAP version 13
|
||||
# Subtest: row253 C4 inline supervisor is byte-identical in both host scripts
|
||||
ok 1 - row253 C4 inline supervisor is byte-identical in both host scripts
|
||||
---
|
||||
duration_ms: 1.534242
|
||||
type: 'test'
|
||||
...
|
||||
1..1
|
||||
# tests 1
|
||||
# suites 0
|
||||
# pass 1
|
||||
# fail 0
|
||||
# cancelled 0
|
||||
# skipped 0
|
||||
# todo 0
|
||||
# duration_ms 137.347553
|
||||
@@ -0,0 +1 @@
|
||||
["timeout", "-k", "10", "320", "node", "--test", "--test-reporter=tap", "--test-name-pattern", "row253 C4 inline supervisor is byte-identical", "packages/cli/tests/case2-unit.test.mjs"]
|
||||
@@ -0,0 +1,202 @@
|
||||
TAP version 13
|
||||
# Subtest: row253 C4 inline supervisor is byte-identical in both host scripts
|
||||
not ok 1 - row253 C4 inline supervisor is byte-identical in both host scripts
|
||||
---
|
||||
duration_ms: 2.718028
|
||||
type: 'test'
|
||||
location: '/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case2-unit.test.mjs:235:1'
|
||||
failureType: 'testCodeFailure'
|
||||
error: |-
|
||||
Expected values to be strictly equal:
|
||||
+ actual - expected
|
||||
|
||||
"IFS= read -r -d '' TESTER_SUPERVISOR <<'MOSAIC_TESTER_SUPERVISOR' || :\n" +
|
||||
+ '# one-copy drift\n' +
|
||||
'set +m\n' +
|
||||
'seconds="$1" setsid_bin="$2" sleep_bin="$3"; shift 3\n' +
|
||||
'child="" timer="" verified=0\n' +
|
||||
'stat_fields() {\n' +
|
||||
' local pid="$1" raw="" rest\n' +
|
||||
|
||||
code: 'ERR_ASSERTION'
|
||||
name: 'AssertionError'
|
||||
expected: |-
|
||||
IFS= read -r -d '' TESTER_SUPERVISOR <<'MOSAIC_TESTER_SUPERVISOR' || :
|
||||
set +m
|
||||
seconds="$1" setsid_bin="$2" sleep_bin="$3"; shift 3
|
||||
child="" timer="" verified=0
|
||||
stat_fields() {
|
||||
local pid="$1" raw="" rest
|
||||
# EOF is expected: stat has no NUL. Decide on content, not read's status.
|
||||
IFS= read -r -d '' raw < "/proc/$pid/stat" 2>/dev/null || :
|
||||
[ -n "$raw" ] || { [ -e "/proc/$pid/stat" ] && return 1; return 3; }
|
||||
rest="${raw##*) }"
|
||||
[ "$rest" != "$raw" ] || return 1
|
||||
read -r ST_STATE ST_PARENT ST_GROUP ST_SESSION _ <<< "$rest"
|
||||
[[ "$ST_STATE" =~ ^[A-Za-z]$ && "$ST_SESSION" =~ ^[0-9]+$ && "$ST_GROUP" =~ ^[0-9]+$ ]]
|
||||
}
|
||||
clock_cs() {
|
||||
local boot spare
|
||||
read -r boot spare < /proc/uptime || return 1
|
||||
[[ "$boot" =~ ^([0-9]+)\.([0-9]{2})$ ]] || return 1
|
||||
CLOCK_CS=$((10#${BASH_REMATCH[1]} * 100 + 10#${BASH_REMATCH[2]}))
|
||||
}
|
||||
clean_session() {
|
||||
local entry pid rc live until=""
|
||||
while :; do
|
||||
live=0
|
||||
for entry in /proc/[0-9]*/stat; do
|
||||
pid="${entry%/stat}"; pid="${pid##*/}"
|
||||
rc=0; stat_fields "$pid" || rc=$?
|
||||
[ "$rc" != 3 ] || continue
|
||||
[ "$rc" = 0 ] || return 1
|
||||
[ "$ST_SESSION" = "$child" ] || continue
|
||||
case "$ST_STATE" in Z|X) continue ;; esac
|
||||
live=1
|
||||
if ! kill -KILL "$pid" 2>/dev/null; then
|
||||
rc=0; stat_fields "$pid" || rc=$?
|
||||
[ "$rc" = 3 ] || { [ "$rc" = 0 ] && { [ "$ST_STATE" = Z ] || [ "$ST_STATE" = X ]; }; } || return 1
|
||||
fi
|
||||
done
|
||||
[ "$live" != 0 ] || return 0
|
||||
clock_cs || return 1
|
||||
# Inventory pass 1 is outside the bounded confirmation/retry budget.
|
||||
[ -n "$until" ] || until=$((CLOCK_CS + 25))
|
||||
[ "$CLOCK_CS" -lt "$until" ] || return 1
|
||||
"$sleep_bin" 0.01
|
||||
done
|
||||
}
|
||||
finish() {
|
||||
local rc="$?"
|
||||
trap - EXIT HUP INT TERM
|
||||
if [ "$verified" = 1 ]; then
|
||||
clean_session || rc=86
|
||||
elif [ -n "$child" ]; then
|
||||
kill -KILL "$child" 2>/dev/null || :
|
||||
fi
|
||||
[ -z "$child" ] || wait "$child" 2>/dev/null || :
|
||||
if [ -n "$timer" ]; then kill -KILL "$timer" 2>/dev/null || :; wait "$timer" 2>/dev/null || :; fi
|
||||
exit "$rc"
|
||||
}
|
||||
trap finish EXIT
|
||||
trap 'exit 88' HUP INT TERM
|
||||
"$sleep_bin" "$seconds" & timer=$!
|
||||
"$setsid_bin" "$@" & child=$!
|
||||
# Allow session creation the whole inner budget, rather than a 200 ms margin.
|
||||
while :; do
|
||||
rc=0; stat_fields "$child" || rc=$?
|
||||
[ "$rc" = 0 ] || exit 85
|
||||
if [ "$ST_SESSION" = "$child" ]; then verified=1; break; fi
|
||||
kill -0 "$timer" 2>/dev/null || exit 81
|
||||
"$sleep_bin" 0.002
|
||||
done
|
||||
[ "$verified" = 1 ] || exit 85
|
||||
while kill -0 "$child" 2>/dev/null; do
|
||||
kill -0 "$timer" 2>/dev/null || exit 81
|
||||
"$sleep_bin" 0.01
|
||||
done
|
||||
kill -0 "$timer" 2>/dev/null || exit 81
|
||||
rc=0; wait "$child" || rc=$?
|
||||
[ "$rc" = 0 ] || exit 87
|
||||
exit 0
|
||||
MOSAIC_TESTER_SUPERVISOR
|
||||
|
||||
actual: |-
|
||||
IFS= read -r -d '' TESTER_SUPERVISOR <<'MOSAIC_TESTER_SUPERVISOR' || :
|
||||
# one-copy drift
|
||||
set +m
|
||||
seconds="$1" setsid_bin="$2" sleep_bin="$3"; shift 3
|
||||
child="" timer="" verified=0
|
||||
stat_fields() {
|
||||
local pid="$1" raw="" rest
|
||||
# EOF is expected: stat has no NUL. Decide on content, not read's status.
|
||||
IFS= read -r -d '' raw < "/proc/$pid/stat" 2>/dev/null || :
|
||||
[ -n "$raw" ] || { [ -e "/proc/$pid/stat" ] && return 1; return 3; }
|
||||
rest="${raw##*) }"
|
||||
[ "$rest" != "$raw" ] || return 1
|
||||
read -r ST_STATE ST_PARENT ST_GROUP ST_SESSION _ <<< "$rest"
|
||||
[[ "$ST_STATE" =~ ^[A-Za-z]$ && "$ST_SESSION" =~ ^[0-9]+$ && "$ST_GROUP" =~ ^[0-9]+$ ]]
|
||||
}
|
||||
clock_cs() {
|
||||
local boot spare
|
||||
read -r boot spare < /proc/uptime || return 1
|
||||
[[ "$boot" =~ ^([0-9]+)\.([0-9]{2})$ ]] || return 1
|
||||
CLOCK_CS=$((10#${BASH_REMATCH[1]} * 100 + 10#${BASH_REMATCH[2]}))
|
||||
}
|
||||
clean_session() {
|
||||
local entry pid rc live until=""
|
||||
while :; do
|
||||
live=0
|
||||
for entry in /proc/[0-9]*/stat; do
|
||||
pid="${entry%/stat}"; pid="${pid##*/}"
|
||||
rc=0; stat_fields "$pid" || rc=$?
|
||||
[ "$rc" != 3 ] || continue
|
||||
[ "$rc" = 0 ] || return 1
|
||||
[ "$ST_SESSION" = "$child" ] || continue
|
||||
case "$ST_STATE" in Z|X) continue ;; esac
|
||||
live=1
|
||||
if ! kill -KILL "$pid" 2>/dev/null; then
|
||||
rc=0; stat_fields "$pid" || rc=$?
|
||||
[ "$rc" = 3 ] || { [ "$rc" = 0 ] && { [ "$ST_STATE" = Z ] || [ "$ST_STATE" = X ]; }; } || return 1
|
||||
fi
|
||||
done
|
||||
[ "$live" != 0 ] || return 0
|
||||
clock_cs || return 1
|
||||
# Inventory pass 1 is outside the bounded confirmation/retry budget.
|
||||
[ -n "$until" ] || until=$((CLOCK_CS + 25))
|
||||
[ "$CLOCK_CS" -lt "$until" ] || return 1
|
||||
"$sleep_bin" 0.01
|
||||
done
|
||||
}
|
||||
finish() {
|
||||
local rc="$?"
|
||||
trap - EXIT HUP INT TERM
|
||||
if [ "$verified" = 1 ]; then
|
||||
clean_session || rc=86
|
||||
elif [ -n "$child" ]; then
|
||||
kill -KILL "$child" 2>/dev/null || :
|
||||
fi
|
||||
[ -z "$child" ] || wait "$child" 2>/dev/null || :
|
||||
if [ -n "$timer" ]; then kill -KILL "$timer" 2>/dev/null || :; wait "$timer" 2>/dev/null || :; fi
|
||||
exit "$rc"
|
||||
}
|
||||
trap finish EXIT
|
||||
trap 'exit 88' HUP INT TERM
|
||||
"$sleep_bin" "$seconds" & timer=$!
|
||||
"$setsid_bin" "$@" & child=$!
|
||||
# Allow session creation the whole inner budget, rather than a 200 ms margin.
|
||||
while :; do
|
||||
rc=0; stat_fields "$child" || rc=$?
|
||||
[ "$rc" = 0 ] || exit 85
|
||||
if [ "$ST_SESSION" = "$child" ]; then verified=1; break; fi
|
||||
kill -0 "$timer" 2>/dev/null || exit 81
|
||||
"$sleep_bin" 0.002
|
||||
done
|
||||
[ "$verified" = 1 ] || exit 85
|
||||
while kill -0 "$child" 2>/dev/null; do
|
||||
kill -0 "$timer" 2>/dev/null || exit 81
|
||||
"$sleep_bin" 0.01
|
||||
done
|
||||
kill -0 "$timer" 2>/dev/null || exit 81
|
||||
rc=0; wait "$child" || rc=$?
|
||||
[ "$rc" = 0 ] || exit 87
|
||||
exit 0
|
||||
MOSAIC_TESTER_SUPERVISOR
|
||||
|
||||
operator: 'strictEqual'
|
||||
stack: |-
|
||||
TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case2-unit.test.mjs:238:34)
|
||||
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 126.372046
|
||||
@@ -0,0 +1 @@
|
||||
["timeout", "-k", "10", "320", "node", "--test", "--test-reporter=tap", "--test-name-pattern", "row253 C4 cleanup budget starts after inventory pass one", "packages/cli/tests/case2-unit.test.mjs"]
|
||||
@@ -0,0 +1,16 @@
|
||||
TAP version 13
|
||||
# Subtest: row253 C4 cleanup budget starts after inventory pass one
|
||||
ok 1 - row253 C4 cleanup budget starts after inventory pass one
|
||||
---
|
||||
duration_ms: 48.881506
|
||||
type: 'test'
|
||||
...
|
||||
1..1
|
||||
# tests 1
|
||||
# suites 0
|
||||
# pass 1
|
||||
# fail 0
|
||||
# cancelled 0
|
||||
# skipped 0
|
||||
# todo 0
|
||||
# duration_ms 169.630508
|
||||
@@ -0,0 +1 @@
|
||||
["timeout", "-k", "10", "320", "node", "--test", "--test-reporter=tap", "--test-name-pattern", "row253 C4 cleanup budget starts after inventory pass one", "packages/cli/tests/case2-unit.test.mjs"]
|
||||
@@ -0,0 +1,34 @@
|
||||
TAP version 13
|
||||
# Subtest: row253 C4 cleanup budget starts after inventory pass one
|
||||
not ok 1 - row253 C4 cleanup budget starts after inventory pass one
|
||||
---
|
||||
duration_ms: 27.786408
|
||||
type: 'test'
|
||||
location: '/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case2-unit.test.mjs:241:1'
|
||||
failureType: 'testCodeFailure'
|
||||
error: |-
|
||||
Expected values to be strictly equal:
|
||||
|
||||
1 !== 0
|
||||
|
||||
code: 'ERR_ASSERTION'
|
||||
name: 'AssertionError'
|
||||
expected: 0
|
||||
actual: 1
|
||||
operator: 'strictEqual'
|
||||
stack: |-
|
||||
TestContext.<anonymous> (file:///home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/packages/cli/tests/case2-unit.test.mjs:260:9)
|
||||
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 159.852259
|
||||
@@ -0,0 +1,412 @@
|
||||
{
|
||||
"grant": "sage-2811",
|
||||
"static": [
|
||||
{
|
||||
"id": "M1",
|
||||
"file": "scripts/case2-unit.sh",
|
||||
"occurrences": 1,
|
||||
"before": "d7670bdb049ae41ba3774fc83de633636859b6723be858cfb31ea106b0e8812b",
|
||||
"after": "4de5294507816ddc4114c418a6bb7c197b3fefe92f19b3b18cb95384e23de594"
|
||||
},
|
||||
{
|
||||
"id": "M2",
|
||||
"file": "scripts/case2-unit.sh",
|
||||
"occurrences": 1,
|
||||
"before": "d7670bdb049ae41ba3774fc83de633636859b6723be858cfb31ea106b0e8812b",
|
||||
"after": "caf88ee7ad50b89169a0f57e12b696fe3828238af2ef1008ba6b6016ea7b2528"
|
||||
},
|
||||
{
|
||||
"id": "M3",
|
||||
"file": "scripts/case2-unit.sh",
|
||||
"occurrences": 1,
|
||||
"before": "d7670bdb049ae41ba3774fc83de633636859b6723be858cfb31ea106b0e8812b",
|
||||
"after": "4401886e41fdb4c27610198b66f12d0b3103c5422e0862e9cea30a6f67c93fde"
|
||||
},
|
||||
{
|
||||
"id": "M4",
|
||||
"file": "scripts/case2-unit.sh",
|
||||
"occurrences": 1,
|
||||
"before": "d7670bdb049ae41ba3774fc83de633636859b6723be858cfb31ea106b0e8812b",
|
||||
"after": "ef9a92bb24c72832bdba4d782bf4662394ee05e06a12b750a23d488d9181cd1d"
|
||||
},
|
||||
{
|
||||
"id": "M5",
|
||||
"file": "scripts/case2-unit.sh",
|
||||
"occurrences": 1,
|
||||
"before": "d7670bdb049ae41ba3774fc83de633636859b6723be858cfb31ea106b0e8812b",
|
||||
"after": "4ab80b9db782a97c935f732bec87ac3bb45b58bf9076bc9f9abb4970fef1cada"
|
||||
},
|
||||
{
|
||||
"id": "M6",
|
||||
"file": "scripts/case2-unit.sh",
|
||||
"occurrences": 1,
|
||||
"before": "d7670bdb049ae41ba3774fc83de633636859b6723be858cfb31ea106b0e8812b",
|
||||
"after": "7064e1926c77aedb5453c7771cd42091a5e90fc546821ddbb75d39e6a87c5a31"
|
||||
},
|
||||
{
|
||||
"id": "M7",
|
||||
"file": "scripts/case2-unit.sh",
|
||||
"occurrences": 1,
|
||||
"before": "d7670bdb049ae41ba3774fc83de633636859b6723be858cfb31ea106b0e8812b",
|
||||
"after": "aece2a211aefa1dc4cfb6a3540f922ee5e7f23de26ce974b7655f8fe1722ee16"
|
||||
},
|
||||
{
|
||||
"id": "M8",
|
||||
"file": "scripts/case2-unit.sh",
|
||||
"occurrences": 1,
|
||||
"before": "d7670bdb049ae41ba3774fc83de633636859b6723be858cfb31ea106b0e8812b",
|
||||
"after": "076d4f8f73570a21ad512b12eb5f6f494cb246b2a9d071fea27cc3c126efca2b"
|
||||
},
|
||||
{
|
||||
"id": "M9",
|
||||
"file": "scripts/case2-unit.sh",
|
||||
"occurrences": 1,
|
||||
"before": "d7670bdb049ae41ba3774fc83de633636859b6723be858cfb31ea106b0e8812b",
|
||||
"after": "244cee7128d3b6e380ff24ab9e31f6c456d5153dddf88bb4719028277f523276"
|
||||
},
|
||||
{
|
||||
"id": "M10",
|
||||
"file": "scripts/case2-unit.sh",
|
||||
"occurrences": 1,
|
||||
"before": "d7670bdb049ae41ba3774fc83de633636859b6723be858cfb31ea106b0e8812b",
|
||||
"after": "0e7d369f34cd41708d7b5104113093ebac0296d08902193ced03a1a2bbb83567"
|
||||
},
|
||||
{
|
||||
"id": "M11",
|
||||
"file": "scripts/case2-unit.sh",
|
||||
"occurrences": 1,
|
||||
"before": "d7670bdb049ae41ba3774fc83de633636859b6723be858cfb31ea106b0e8812b",
|
||||
"after": "84181be89249975dd48e1a5daa51eab4bae7b483ea8edf5d6c0cdf373459c046"
|
||||
},
|
||||
{
|
||||
"id": "M12",
|
||||
"file": "scripts/case1-accept.sh",
|
||||
"occurrences": 1,
|
||||
"before": "c02bef6b3495e5a4548d7b4e89675ed52be26a0c9ccce4d9d5cfc5fe2ce437bd",
|
||||
"after": "7f8b45e467b197bc00fb740a6507ee85cae332e404e8ffdd8c749b4264239e97"
|
||||
},
|
||||
{
|
||||
"id": "M13",
|
||||
"file": "scripts/case1-accept.sh",
|
||||
"occurrences": 1,
|
||||
"before": "c02bef6b3495e5a4548d7b4e89675ed52be26a0c9ccce4d9d5cfc5fe2ce437bd",
|
||||
"after": "85ec11381f4e6662ec1729d84c57022e2f573a2f4c2682250fa005803cdfd63c"
|
||||
},
|
||||
{
|
||||
"id": "M14",
|
||||
"file": "scripts/case1-accept.sh",
|
||||
"occurrences": 1,
|
||||
"before": "c02bef6b3495e5a4548d7b4e89675ed52be26a0c9ccce4d9d5cfc5fe2ce437bd",
|
||||
"after": "131f78c490b5ec26142c0703be0b5341551dd9d154c13e519604215fe1240b67"
|
||||
},
|
||||
{
|
||||
"id": "M15",
|
||||
"file": "scripts/case1-accept.sh",
|
||||
"occurrences": 1,
|
||||
"before": "c02bef6b3495e5a4548d7b4e89675ed52be26a0c9ccce4d9d5cfc5fe2ce437bd",
|
||||
"after": "077b2eb210c853a03152733f4aa99e450ef0fa17d28f97f8adb78229b02ef147"
|
||||
},
|
||||
{
|
||||
"id": "M16",
|
||||
"file": "scripts/case1-accept.sh",
|
||||
"occurrences": 1,
|
||||
"before": "c02bef6b3495e5a4548d7b4e89675ed52be26a0c9ccce4d9d5cfc5fe2ce437bd",
|
||||
"after": "2439d201b902c13fe3903a2d936c8700f0124a430b7d9b2877d485e1f381d3fb"
|
||||
},
|
||||
{
|
||||
"id": "M17",
|
||||
"file": "scripts/case1-accept.sh",
|
||||
"occurrences": 1,
|
||||
"before": "c02bef6b3495e5a4548d7b4e89675ed52be26a0c9ccce4d9d5cfc5fe2ce437bd",
|
||||
"after": "1be36e62095e97c64c0bdc5d50b4a3a2e6dd18f1c45cfe1da0fe66cbb8aebd61"
|
||||
},
|
||||
{
|
||||
"id": "M18",
|
||||
"file": "scripts/case1-accept.sh",
|
||||
"occurrences": 1,
|
||||
"before": "c02bef6b3495e5a4548d7b4e89675ed52be26a0c9ccce4d9d5cfc5fe2ce437bd",
|
||||
"after": "f5e61c286c51e5a2b26acab22fc5a32c35add0cb8126dc25b5ce747677e34888"
|
||||
},
|
||||
{
|
||||
"id": "M19",
|
||||
"file": "scripts/case1-accept.sh",
|
||||
"occurrences": 1,
|
||||
"before": "c02bef6b3495e5a4548d7b4e89675ed52be26a0c9ccce4d9d5cfc5fe2ce437bd",
|
||||
"after": "2f337c03acc60978f1850275a2c8ba6d1b2c74befeb8d73f94d2b477e43b8c56"
|
||||
},
|
||||
{
|
||||
"id": "M20",
|
||||
"file": "scripts/case1-accept.sh",
|
||||
"occurrences": 1,
|
||||
"before": "c02bef6b3495e5a4548d7b4e89675ed52be26a0c9ccce4d9d5cfc5fe2ce437bd",
|
||||
"after": "99689c22c6eb73ff9d599ba7305da552357baa99145305ca400f083017bbe3b1"
|
||||
},
|
||||
{
|
||||
"id": "M21",
|
||||
"file": "scripts/case1-accept.sh",
|
||||
"occurrences": 1,
|
||||
"before": "c02bef6b3495e5a4548d7b4e89675ed52be26a0c9ccce4d9d5cfc5fe2ce437bd",
|
||||
"after": "bff90f2b1f59086575f98ff96dbd51bacb0265342f595b4bee96cb228d67c030"
|
||||
},
|
||||
{
|
||||
"id": "M22",
|
||||
"file": "scripts/case1-accept.sh",
|
||||
"occurrences": 1,
|
||||
"before": "c02bef6b3495e5a4548d7b4e89675ed52be26a0c9ccce4d9d5cfc5fe2ce437bd",
|
||||
"after": "7a8cb7ce47774ab80a55331fc831b7458487be7187b10128746321b375dc83ff"
|
||||
},
|
||||
{
|
||||
"id": "M23",
|
||||
"file": "scripts/case1-accept.sh",
|
||||
"occurrences": 1,
|
||||
"before": "c02bef6b3495e5a4548d7b4e89675ed52be26a0c9ccce4d9d5cfc5fe2ce437bd",
|
||||
"after": "e6814801188a6eb98f705d93ac123e988e4daf43afbe96464451f925b1c98d1c"
|
||||
},
|
||||
{
|
||||
"id": "M24",
|
||||
"file": "scripts/case2-unit.sh",
|
||||
"occurrences": 1,
|
||||
"before": "d7670bdb049ae41ba3774fc83de633636859b6723be858cfb31ea106b0e8812b",
|
||||
"after": "ea8d8875f0b4503a6cf4fb96bd88184af65a7f61d1236b9b49baacc748b0c741"
|
||||
},
|
||||
{
|
||||
"id": "M25",
|
||||
"file": "scripts/case1-accept.sh",
|
||||
"occurrences": 1,
|
||||
"before": "c02bef6b3495e5a4548d7b4e89675ed52be26a0c9ccce4d9d5cfc5fe2ce437bd",
|
||||
"after": "cfed9261a03eafcdcfb903226b0ddb3fba779d1105e3b4c411b66c10e1672d11"
|
||||
},
|
||||
{
|
||||
"id": "M26",
|
||||
"file": "scripts/case1-accept.sh",
|
||||
"occurrences": 1,
|
||||
"before": "c02bef6b3495e5a4548d7b4e89675ed52be26a0c9ccce4d9d5cfc5fe2ce437bd",
|
||||
"after": "1a245b5403b1b9b5f25dfb8cc8ee24acf99121ff063277d52c928ba18543f997"
|
||||
},
|
||||
{
|
||||
"id": "M27",
|
||||
"file": "scripts/case1-accept.sh",
|
||||
"occurrences": 1,
|
||||
"before": "c02bef6b3495e5a4548d7b4e89675ed52be26a0c9ccce4d9d5cfc5fe2ce437bd",
|
||||
"after": "efaa027cf7ec3252a675be80219e40fa7b5a3317b28c21fe02363d23ec6e5323"
|
||||
},
|
||||
{
|
||||
"id": "M28",
|
||||
"file": "scripts/case2-unit.sh",
|
||||
"occurrences": 1,
|
||||
"before": "d7670bdb049ae41ba3774fc83de633636859b6723be858cfb31ea106b0e8812b",
|
||||
"after": "bb734cc1a42c0853068f77154dddaaee8eeef5696f67de2e27d1a898409f3b44"
|
||||
},
|
||||
{
|
||||
"id": "M29",
|
||||
"file": "scripts/case2-unit.sh",
|
||||
"occurrences": 1,
|
||||
"before": "d7670bdb049ae41ba3774fc83de633636859b6723be858cfb31ea106b0e8812b",
|
||||
"after": "a6f353aa419862a473eee28e41c5208b464a378ae23e14a73b62ed92bd36cd1f"
|
||||
},
|
||||
{
|
||||
"id": "M30",
|
||||
"file": "scripts/case2-unit.sh",
|
||||
"occurrences": 1,
|
||||
"before": "d7670bdb049ae41ba3774fc83de633636859b6723be858cfb31ea106b0e8812b",
|
||||
"after": "d22cf0f492178b3071604abd550355573c28bf4c26f4a3582f6895710ad3d788"
|
||||
},
|
||||
{
|
||||
"id": "M31",
|
||||
"file": "scripts/case2-unit.sh",
|
||||
"occurrences": 1,
|
||||
"before": "d7670bdb049ae41ba3774fc83de633636859b6723be858cfb31ea106b0e8812b",
|
||||
"after": "3e7450a19cf152653bf6e73be39ef9fb552ec7a656564ca35e44bc12f1586ef5"
|
||||
},
|
||||
{
|
||||
"id": "M32",
|
||||
"file": "scripts/case2-unit.sh",
|
||||
"occurrences": 1,
|
||||
"before": "d7670bdb049ae41ba3774fc83de633636859b6723be858cfb31ea106b0e8812b",
|
||||
"after": "ff11fc1013d70d861643cfd70aa964422cb6a82fb8b4b959bae04703803838b9"
|
||||
},
|
||||
{
|
||||
"id": "M33",
|
||||
"file": "scripts/case2-unit.sh",
|
||||
"occurrences": 1,
|
||||
"before": "d7670bdb049ae41ba3774fc83de633636859b6723be858cfb31ea106b0e8812b",
|
||||
"after": "1c2a58bef2369d8af90b65f9473dd7a112f484db983d8460e2524cb8a673f18b"
|
||||
},
|
||||
{
|
||||
"id": "M34",
|
||||
"file": "scripts/case2-unit.sh",
|
||||
"occurrences": 1,
|
||||
"before": "d7670bdb049ae41ba3774fc83de633636859b6723be858cfb31ea106b0e8812b",
|
||||
"after": "13c1ab861017f3c3c65f50d34a64d7028482e3bc11a8e5908632ec6685416025"
|
||||
},
|
||||
{
|
||||
"id": "M35",
|
||||
"file": "scripts/case2-unit.sh",
|
||||
"occurrences": 1,
|
||||
"before": "d7670bdb049ae41ba3774fc83de633636859b6723be858cfb31ea106b0e8812b",
|
||||
"after": "8f05c1a3a18c5294c63a5853317ce5a5066303145410039629697b5d15d99bfe"
|
||||
},
|
||||
{
|
||||
"id": "M36",
|
||||
"file": "scripts/case2-unit.sh",
|
||||
"occurrences": 1,
|
||||
"before": "d7670bdb049ae41ba3774fc83de633636859b6723be858cfb31ea106b0e8812b",
|
||||
"after": "c1247a7cab2c24e0ab017c49f66797ed16149d3f52cfa41c0968f154261d0d00"
|
||||
},
|
||||
{
|
||||
"id": "M37",
|
||||
"file": "scripts/case2-unit.sh",
|
||||
"occurrences": 1,
|
||||
"before": "d7670bdb049ae41ba3774fc83de633636859b6723be858cfb31ea106b0e8812b",
|
||||
"after": "f210b9c796322333849bc4897b9db3e44bd573fef24c4ba757151981b891f11b"
|
||||
},
|
||||
{
|
||||
"id": "M38",
|
||||
"file": "scripts/case2-unit.sh",
|
||||
"occurrences": 1,
|
||||
"before": "d7670bdb049ae41ba3774fc83de633636859b6723be858cfb31ea106b0e8812b",
|
||||
"after": "736418014b96a09ebe82d996ff6f45b9eb1f3c1e0ada274c505f89fbbd732783"
|
||||
},
|
||||
{
|
||||
"id": "M39",
|
||||
"file": "scripts/case2-unit.sh",
|
||||
"occurrences": 1,
|
||||
"before": "d7670bdb049ae41ba3774fc83de633636859b6723be858cfb31ea106b0e8812b",
|
||||
"after": "1486b8907be4f327bc17b64ddf615cd8b3db1193c185f7934bcba1c7ccc5ec31"
|
||||
},
|
||||
{
|
||||
"id": "M40",
|
||||
"file": "scripts/case2-unit.sh",
|
||||
"occurrences": 1,
|
||||
"before": "d7670bdb049ae41ba3774fc83de633636859b6723be858cfb31ea106b0e8812b",
|
||||
"after": "2f654a76d887ca62525e01c307a2a8f828ee426087dc63a2d4df6a07dc525d53"
|
||||
}
|
||||
],
|
||||
"bases": {
|
||||
"packages/cli/tests/case2-unit.test.mjs|row253 C4 overflow is output-limit": {
|
||||
"code": 0,
|
||||
"timeout": false,
|
||||
"seconds": 0.866,
|
||||
"log": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-253/run5-gate/changes-resume/M32-base.log"
|
||||
},
|
||||
"packages/cli/tests/case2-unit.test.mjs|row253 query reaps its group": {
|
||||
"code": 0,
|
||||
"timeout": false,
|
||||
"seconds": 0.365,
|
||||
"log": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-253/run5-gate/changes-resume/M33-base.log"
|
||||
},
|
||||
"packages/cli/tests/case2-unit.test.mjs|row253 C4 signals query": {
|
||||
"code": 0,
|
||||
"timeout": false,
|
||||
"seconds": 11.189,
|
||||
"log": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-253/run5-gate/changes-resume/M34-base.log"
|
||||
},
|
||||
"packages/cli/tests/case2-unit.test.mjs|row253 C4 stalled supervisor": {
|
||||
"code": 0,
|
||||
"timeout": false,
|
||||
"seconds": 14.395,
|
||||
"log": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-253/run5-gate/changes-resume/M35-base.log"
|
||||
},
|
||||
"packages/cli/tests/case2-unit.test.mjs|row253 C4 member query": {
|
||||
"code": 0,
|
||||
"timeout": false,
|
||||
"seconds": 11.088,
|
||||
"log": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-253/run5-gate/changes-resume/M36-base.log"
|
||||
},
|
||||
"packages/cli/tests/case2-unit.test.mjs|row253 C4 inline supervisor is byte-identical": {
|
||||
"code": 0,
|
||||
"timeout": false,
|
||||
"seconds": 0.215,
|
||||
"log": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-253/run5-gate/changes-resume/M39-base.log"
|
||||
},
|
||||
"packages/cli/tests/case2-unit.test.mjs|row253 C4 cleanup budget starts after inventory pass one": {
|
||||
"code": 0,
|
||||
"timeout": false,
|
||||
"seconds": 0.265,
|
||||
"log": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-253/run5-gate/changes-resume/M40-base.log"
|
||||
}
|
||||
},
|
||||
"changes": [
|
||||
{
|
||||
"code": 1,
|
||||
"timeout": false,
|
||||
"seconds": 0.565,
|
||||
"log": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-253/run5-gate/changes-resume/M32.log",
|
||||
"id": "M32",
|
||||
"base_seconds": 0.866,
|
||||
"outcome": "killed"
|
||||
},
|
||||
{
|
||||
"code": 1,
|
||||
"timeout": false,
|
||||
"seconds": 0.866,
|
||||
"log": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-253/run5-gate/changes-resume/M33.log",
|
||||
"id": "M33",
|
||||
"base_seconds": 0.365,
|
||||
"outcome": "killed"
|
||||
},
|
||||
{
|
||||
"code": 1,
|
||||
"timeout": false,
|
||||
"seconds": 7.28,
|
||||
"log": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-253/run5-gate/changes-resume/M34.log",
|
||||
"id": "M34",
|
||||
"base_seconds": 11.189,
|
||||
"outcome": "killed"
|
||||
},
|
||||
{
|
||||
"code": 1,
|
||||
"timeout": false,
|
||||
"seconds": 9.735,
|
||||
"log": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-253/run5-gate/changes-resume/M35.log",
|
||||
"id": "M35",
|
||||
"base_seconds": 14.395,
|
||||
"outcome": "killed"
|
||||
},
|
||||
{
|
||||
"code": 1,
|
||||
"timeout": false,
|
||||
"seconds": 7.28,
|
||||
"log": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-253/run5-gate/changes-resume/M36.log",
|
||||
"id": "M36",
|
||||
"base_seconds": 11.088,
|
||||
"outcome": "killed"
|
||||
},
|
||||
{
|
||||
"code": 1,
|
||||
"timeout": false,
|
||||
"seconds": 0.515,
|
||||
"log": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-253/run5-gate/changes-resume/M37.log",
|
||||
"id": "M37",
|
||||
"base_seconds": 0.866,
|
||||
"outcome": "killed"
|
||||
},
|
||||
{
|
||||
"code": 1,
|
||||
"timeout": false,
|
||||
"seconds": 5.275,
|
||||
"log": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-253/run5-gate/changes-resume/M38.log",
|
||||
"id": "M38",
|
||||
"base_seconds": 11.189,
|
||||
"outcome": "killed"
|
||||
},
|
||||
{
|
||||
"code": 1,
|
||||
"timeout": false,
|
||||
"seconds": 0.214,
|
||||
"log": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-253/run5-gate/changes-resume/M39.log",
|
||||
"id": "M39",
|
||||
"base_seconds": 0.215,
|
||||
"outcome": "killed"
|
||||
},
|
||||
{
|
||||
"code": 1,
|
||||
"timeout": false,
|
||||
"seconds": 0.214,
|
||||
"log": "/home/jwoltje/.t3/worktrees/mosaic-stack/gander-row196/agents/gander/work/queue-253/run5-gate/changes-resume/M40.log",
|
||||
"id": "M40",
|
||||
"base_seconds": 0.265,
|
||||
"outcome": "killed"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
2026-10-22T17:18:29.556861+00:00
|
||||
@@ -0,0 +1,58 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Assemble complete whole-gate evidence from retained logs only."""
|
||||
import hashlib,json,re
|
||||
from pathlib import Path
|
||||
HERE=Path(__file__).resolve().parent.parent
|
||||
RUN=HERE/'run5-gate'
|
||||
def main():
|
||||
sections={n:json.loads((RUN/n/'results.json').read_text()) for n in ['focused','changes','whole']}
|
||||
resumed=json.loads((RUN/'changes-resume/results.json').read_text())
|
||||
sections['changes']['changes'] += resumed['changes']
|
||||
sections['changes']['bases'].update(resumed['bases'])
|
||||
sections['changes']['resume_grant']='sage-2811'
|
||||
header=json.loads((RUN/'HEADER.json').read_text());lists=json.loads((RUN/'FILE-LISTS.json').read_text())
|
||||
whole=sections['whole']['steps'];expected=sum(map(len,lists.values()))+10
|
||||
assert len(whole)==expected
|
||||
assert all(s['code']==0 and not s['timeout'] for s in whole)
|
||||
focused=sections['focused']['steps']
|
||||
assert len(focused)==4 and all(not s['timeout'] and (s['code']!=0 if s['expected_red'] else s['code']==0) for s in focused)
|
||||
changes=sections['changes']['changes'];assert len(changes)==40 and all(s['outcome']=='killed' and not s['timeout'] for s in changes)
|
||||
limits=json.loads((HERE/'WHOLE-GATE-LIMITS.json').read_text())['files'];shell_limits=json.loads((HERE/'SHELL-LIMITS.json').read_text())['scripts']
|
||||
counts={};skips=[];rows=[];shells=[];n9=[]
|
||||
for package,files in lists.items():
|
||||
steps=[s for s in whole if s['name'].startswith(package+'-')]
|
||||
commands=[json.loads(Path(s['log']).with_suffix('.command.json').read_text()) for s in steps]
|
||||
assert [c[-1] for c in commands]==files
|
||||
counts[package]={k:sum(s['counts'].get(k,0) for s in steps) for k in ['pass','fail','skipped']}
|
||||
for s,c,file in zip(steps,commands,files):
|
||||
assert c==['timeout','-k','10',str(limits[file]),'node','--test','--test-reporter=tap',file]
|
||||
text=Path(s['log']).read_text(errors='replace')
|
||||
skips += [dict(file=file,line=line) for line in text.splitlines() if '# SKIP' in line]
|
||||
if file.endswith('/case2-unit.test.mjs'):n9 += [line for line in text.splitlines() if line.startswith('ok ') and "inside a session's sandbox" in line]
|
||||
rows.append(dict(file=file,counts=s['counts'],seconds=s['seconds'],limit_seconds=limits[file],log=s['log']))
|
||||
for s in whole[-10:]:
|
||||
command=json.loads(Path(s['log']).with_suffix('.command.json').read_text());file=command[-1]
|
||||
assert command==['timeout','-k','10',str(shell_limits[file]['limit_seconds']),'bash',file]
|
||||
text=Path(s['log']).read_text(errors='replace');found=re.findall(r'([^\n]*?: (\d+) passed, (\d+) failed)',text);assert found,file
|
||||
line,passed,failed=found[-1];assert int(failed)==0
|
||||
skips += [dict(file=file,line=line) for line in text.splitlines() if re.match(r'^\s*skip\b',line,re.I) or '# SKIP' in line]
|
||||
shells.append(dict(file=file,pass_count=int(passed),fail_count=int(failed),seconds=s['seconds'],limit_seconds=shell_limits[file]['limit_seconds'],summary_line=line,log=s['log']))
|
||||
assert len(n9)==1
|
||||
counts['shell_self_assertions']=dict(pass_count=sum(s['pass_count'] for s in shells),fail_count=0)
|
||||
result=dict(status='GREEN',header=header,sections=sections,counts=counts,files=rows,shells=shells,named_skips=skips,n9_exact_line=n9[0],killed=40,survived=0,timeouts=0,head_diff_outside_gander=(RUN/'HEAD-DIFF-OUTSIDE-GANDER.txt').read_text().splitlines())
|
||||
repo=HERE.parents[3]
|
||||
expected_hashes=json.loads((HERE/'CANDIDATE-SHAS.json').read_text())
|
||||
assert all(hashlib.sha256((repo/n).read_bytes()).hexdigest()==v for n,v in expected_hashes.items())
|
||||
assert all(hashlib.sha256((repo/n).read_bytes()).hexdigest()==v['script_sha256'] for n,v in shell_limits.items())
|
||||
(RUN/'SUMMARY.json').write_text(json.dumps(result,indent=2)+'\n')
|
||||
lines=['# Row253 whole gate RESULTS','','HEAD '+header['head']+', product '+header['product']+', manifest '+header['manifest']+'.','','48e450ce8..actual record HEAD name-only outside agents/gander/:','','```text',*result['head_diff_outside_gander'],'```','','All listed whole files ran, with no unlisted-file coverage claim. Intended REDs and focused repeats are separate from package totals. Bus coverage is the20-file rebase union, not a bus-whole claim.','','| Whole file | Pass/fail/skip | Wall seconds | Limit seconds |','|---|---:|---:|---:|']
|
||||
lines += [f"| {r['file']} | {r['counts']['pass']}/{r['counts']['fail']}/{r['counts']['skipped']} | {r['seconds']} | {r['limit_seconds']} |" for r in rows]
|
||||
lines += [f"| {r['file']} | {r['pass_count']}/{r['fail_count']}/0 | {r['seconds']} | {r['limit_seconds']} |" for r in shells]
|
||||
lines += ['','N9 verbatim: '+n9[0],'','Every named skip:','']+[f"- {s['file']}: {s['line']}" for s in skips]
|
||||
(RUN/'RESULTS.md').write_text('\n'.join(lines)+'\n')
|
||||
defs={d['id']:d for d in json.loads((HERE/'changes.json').read_text())}
|
||||
table=['# M1-M40 kill table','','Every base passes; each change restored exact bytes and tracked status before the next. No timeout counts as kill.','','| Check | Named killer | Base seconds | Changed seconds | Outcome |','|---|---|---:|---:|---|']
|
||||
table += [f"| {s['id']} | {defs[s['id']]['pattern']} | {s['base_seconds']} | {s['seconds']} | {s['outcome']} |" for s in changes]
|
||||
(RUN/'KILL-TABLE.md').write_text('\n'.join(table)+'\n')
|
||||
print(json.dumps(dict(counts=counts,named_skips=skips,n9=n9,killed=40),indent=2))
|
||||
if __name__=='__main__':main()
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1 @@
|
||||
{"stage": "whole", "code": 0, "wall_seconds": 2106.873}
|
||||
@@ -0,0 +1 @@
|
||||
2026-10-22T16:42:17.718084+00:00
|
||||
@@ -0,0 +1,12 @@
|
||||
import datetime,json,pathlib,subprocess,sys,time
|
||||
r=pathlib.Path(__file__).resolve().parent;p=r.parent
|
||||
start=time.monotonic()
|
||||
(r/'resume-start.txt').write_text(datetime.datetime.now(datetime.timezone.utc).isoformat()+'\n')
|
||||
print((r/'HEADER.json').read_text(),flush=True)
|
||||
print('RESUME sage-2811; candidate48e450ce8; actual record HEADdd9d519b1; only agents/gander differs',flush=True)
|
||||
for stage,command in [('changes-resume',[sys.executable,str(p/'resume5.py'),'--grant','sage-2811','--out',str(r/'changes-resume')]),('whole',[sys.executable,str(p/'window.py'),'--grant','sage-2811','--stage','whole','--out',str(r/'whole')])]:
|
||||
print('START '+stage,flush=True)
|
||||
code=subprocess.call(command)
|
||||
(r/'resume-progress.json').write_text(json.dumps(dict(stage=stage,code=code,wall_seconds=round(time.monotonic()-start,3))))
|
||||
if code:sys.exit(code)
|
||||
print('END '+stage,flush=True)
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"timestamp": "2026-10-22T16:40:27.619123+00:00",
|
||||
"timestamp": "2026-10-22T17:17:49.489308+00:00",
|
||||
"count": 0,
|
||||
"remaining": [],
|
||||
"excluded_preexisting_infrastructure": [
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
["timeout", "-k", "10", "122", "node", "--test", "--test-reporter=tap", "packages/bus/tests/account-migration.test.mjs"]
|
||||
@@ -0,0 +1,28 @@
|
||||
TAP version 13
|
||||
# Subtest: REQ-LIMIT-4 3h copy migrates to 3i: every row keeps its seq, the sequence carries over, and only the account CHECK changes
|
||||
ok 1 - REQ-LIMIT-4 3h copy migrates to 3i: every row keeps its seq, the sequence carries over, and only the account CHECK changes
|
||||
---
|
||||
duration_ms: 84.326411
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: REQ-LIMIT-4 a 3h→3i step that fails partway leaves the store at 3h with every row, the sequence and the schema intact
|
||||
ok 2 - REQ-LIMIT-4 a 3h→3i step that fails partway leaves the store at 3h with every row, the sequence and the schema intact
|
||||
---
|
||||
duration_ms: 106.635759
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: REQ-LIMIT-4 the 3h engine refuses a migrated store, migrating or not, and leaves it as it was
|
||||
ok 3 - REQ-LIMIT-4 the 3h engine refuses a migrated store, migrating or not, and leaves it as it was
|
||||
---
|
||||
duration_ms: 90.186998
|
||||
type: 'test'
|
||||
...
|
||||
1..3
|
||||
# tests 3
|
||||
# suites 0
|
||||
# pass 3
|
||||
# fail 0
|
||||
# cancelled 0
|
||||
# skipped 0
|
||||
# todo 0
|
||||
# duration_ms 362.170558
|
||||
@@ -0,0 +1 @@
|
||||
["timeout", "-k", "10", "127", "node", "--test", "--test-reporter=tap", "packages/bus/tests/chief-of-staff.test.mjs"]
|
||||
@@ -0,0 +1,271 @@
|
||||
TAP version 13
|
||||
# organization: {"event":"reload-needs-restart","business":"demo"}
|
||||
# organization: {"event":"reload-needs-restart","business":"demo"}
|
||||
# organization: {"event":"reload-needs-restart","business":"demo"}
|
||||
# organization: {"event":"reload-needs-restart","business":"demo"}
|
||||
# organization: {"event":"reload-needs-restart","business":"demo"}
|
||||
# organization: {"event":"reload-needs-restart","business":"demo"}
|
||||
# organization: {"event":"reload-needs-restart","business":"demo"}
|
||||
# organization: {"event":"reload-needs-restart","business":"demo"}
|
||||
# organization: {"event":"reload-needs-restart","business":"demo"}
|
||||
# Subtest: REQ-COS-1, REQ-ROLE-2: the chief of staff ends a run with a reason and no decision, and the reason is logged
|
||||
ok 1 - REQ-COS-1, REQ-ROLE-2: the chief of staff ends a run with a reason and no decision, and the reason is logged
|
||||
---
|
||||
duration_ms: 33.189988
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: REQ-ROLE-2: a role without role.end still needs a resolved decision to revoke
|
||||
ok 2 - REQ-ROLE-2: a role without role.end still needs a resolved decision to revoke
|
||||
---
|
||||
duration_ms: 29.798725
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: REQ-ROLE-2: storage accepts a revoke with a reason or a decision and aborts one with neither
|
||||
ok 3 - REQ-ROLE-2: storage accepts a revoke with a reason or a decision and aborts one with neither
|
||||
---
|
||||
duration_ms: 20.544341
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: REQ-ROLE-2: the chief of staff may still cite a decision, and a decision alone is the old path
|
||||
ok 4 - REQ-ROLE-2: the chief of staff may still cite a decision, and a decision alone is the old path
|
||||
---
|
||||
duration_ms: 20.046761
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: REQ-ROLE-2: a role without role.end still ends a run through a resolved decision, which is recorded and has no reason
|
||||
ok 5 - REQ-ROLE-2: a role without role.end still ends a run through a resolved decision, which is recorded and has no reason
|
||||
---
|
||||
duration_ms: 24.36214
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: REQ-ROLE-2: a reason is required, bounded, and never sent with a decision
|
||||
ok 6 - REQ-ROLE-2: a reason is required, bounded, and never sent with a decision
|
||||
---
|
||||
duration_ms: 27.539514
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: REQ-COS-1: the chief of staff cannot end its own run; its end of the assistant stops the assistant's thread run
|
||||
ok 7 - REQ-COS-1: the chief of staff cannot end its own run; its end of the assistant stops the assistant's thread run
|
||||
---
|
||||
duration_ms: 27.924042
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: REQ-LIMIT-1, REQ-COS-1: organization.set from the chief of staff reaches the shared writer, named as the actor
|
||||
ok 8 - REQ-LIMIT-1, REQ-COS-1: organization.set from the chief of staff reaches the shared writer, named as the actor
|
||||
---
|
||||
duration_ms: 22.713552
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: REQ-LIMIT-1, REQ-COS-1: a refused organization.set logs action.refused and no action.allowed, like a refused limits.set
|
||||
ok 9 - REQ-LIMIT-1, REQ-COS-1: a refused organization.set logs action.refused and no action.allowed, like a refused limits.set
|
||||
---
|
||||
duration_ms: 27.980077
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: REQ-LIMIT-1: organization.set is refused for every caller whose role file lacks organization.change
|
||||
ok 10 - REQ-LIMIT-1: organization.set is refused for every caller whose role file lacks organization.change
|
||||
---
|
||||
duration_ms: 33.865977
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: REQ-LIMIT-1: the chief of staff is logged as allowed, and organization.set takes only the human's keys
|
||||
ok 11 - REQ-LIMIT-1: the chief of staff is logged as allowed, and organization.set takes only the human's keys
|
||||
---
|
||||
duration_ms: 43.95588
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: REQ-COS-1: organization.revision answers the revision alone to the chief of staff and spends nothing
|
||||
ok 12 - REQ-COS-1: organization.revision answers the revision alone to the chief of staff and spends nothing
|
||||
---
|
||||
duration_ms: 27.703007
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: REQ-COS-1, REQ-LIMIT-1: organization.revision is refused for every caller whose role file lacks organization.change
|
||||
ok 13 - REQ-COS-1, REQ-LIMIT-1: organization.revision is refused for every caller whose role file lacks organization.change
|
||||
---
|
||||
duration_ms: 28.057528
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: REQ-ROLE-3, REQ-LIMIT-1: a chief-of-staff change is validated, written and logged like a human's; an invalid one is refused
|
||||
ok 14 - REQ-ROLE-3, REQ-LIMIT-1: a chief-of-staff change is validated, written and logged like a human's; an invalid one is refused
|
||||
---
|
||||
duration_ms: 96.290654
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: REQ-COS-1: the chief of staff reads the revision, changes the file with it, and reads again after a stale one is refused
|
||||
ok 15 - REQ-COS-1: the chief of staff reads the revision, changes the file with it, and reads again after a stale one is refused
|
||||
---
|
||||
duration_ms: 87.391751
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: Q169: the chief of staff's change of the assistant is validated, written and logged; a stale or protection-stripping one is refused
|
||||
ok 16 - Q169: the chief of staff's change of the assistant is validated, written and logged; a stale or protection-stripping one is refused
|
||||
---
|
||||
duration_ms: 84.062651
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 65, Q169: the chief's change of the assistant's route runs the routing checks, and a valid one saves as the chief
|
||||
ok 17 - row 65, Q169: the chief's change of the assistant's route runs the routing checks, and a valid one saves as the chief
|
||||
---
|
||||
duration_ms: 65.893283
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: REQ-ROLE-2, REQ-COS-1: the 3c→3d migration lets the chief of staff end a held role with a reason; neither is still refused
|
||||
ok 18 - REQ-ROLE-2, REQ-COS-1: the 3c→3d migration lets the chief of staff end a held role with a reason; neither is still refused
|
||||
---
|
||||
duration_ms: 71.80945
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 194 T10: the chief's reason end of a kept instance refuses instance-kept, holds the claim and spends nothing
|
||||
ok 19 - row 194 T10: the chief's reason end of a kept instance refuses instance-kept, holds the claim and spends nothing
|
||||
---
|
||||
duration_ms: 21.059884
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 194 T10 (Q2): a role.revoke citing a decision the human resolved still ends a kept run
|
||||
ok 20 - row 194 T10 (Q2): a role.revoke citing a decision the human resolved still ends a kept run
|
||||
---
|
||||
duration_ms: 21.845086
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 194 T10 (B7): the chief's organization.set of a kept instance's model refuses before the writer; the human's limits.set does not
|
||||
ok 21 - row 194 T10 (B7): the chief's organization.set of a kept instance's model refuses before the writer; the human's limits.set does not
|
||||
---
|
||||
duration_ms: 22.02787
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 194 T13: organization.set and limits.set refuse the launch, retired, keep and noHire keys before the writer
|
||||
ok 22 - row 194 T13: organization.set and limits.set refuse the launch, retired, keep and noHire keys before the writer
|
||||
---
|
||||
duration_ms: 26.122601
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 194 T18 (D2.4): from a chief session veto.set and instances.set refuse, and nothing reaches the writer
|
||||
ok 23 - row 194 T18 (D2.4): from a chief session veto.set and instances.set refuse, and nothing reaches the writer
|
||||
---
|
||||
duration_ms: 24.584071
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 194 T8: the chief hires with a reason and no decision, the writer gets the reason as context, and the log names it
|
||||
ok 24 - row 194 T8: the chief hires with a reason and no decision, the writer gets the reason as context, and the log names it
|
||||
---
|
||||
duration_ms: 21.667787
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 194 T11: on a bus with two businesses, the chief of one hires and fires only in its own
|
||||
ok 25 - row 194 T11: on a bus with two businesses, the chief of one hires and fires only in its own
|
||||
---
|
||||
duration_ms: 19.252327
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 194 T8: hire and fire need a reason of 1 to 500 characters and refuse a decision key
|
||||
ok 26 - row 194 T8: hire and fire need a reason of 1 to 500 characters and refuse a decision key
|
||||
---
|
||||
duration_ms: 32.74728
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 194 T8 (sage-1471): only the chief hires or fires; every other role refuses role-not-chief, even one granted the actions
|
||||
ok 27 - row 194 T8 (sage-1471): only the chief hires or fires; every other role refuses role-not-chief, even one granted the actions
|
||||
---
|
||||
duration_ms: 35.919083
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 194 T8 (sage-1471): a chief whose authority lacks role.hire or role.fire refuses decision-required before the writer
|
||||
ok 28 - row 194 T8 (sage-1471): a chief whose authority lacks role.hire or role.fire refuses decision-required before the writer
|
||||
---
|
||||
duration_ms: 51.837467
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 194 T8a: a re-hire of a fired name goes to the writer like a hire, and the writer's refusals pass through by name
|
||||
ok 29 - row 194 T8a: a re-hire of a fired name goes to the writer like a hire, and the writer's refusals pass through by name
|
||||
---
|
||||
duration_ms: 26.830905
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 194 T8b: a definition is hireable only when every action is on HIRE_ALLOWED, it is version 2, the chief lists it and noHire doesn't
|
||||
ok 30 - row 194 T8b: a definition is hireable only when every action is on HIRE_ALLOWED, it is version 2, the chief lists it and noHire doesn't
|
||||
---
|
||||
duration_ms: 754.320986
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 194 T8b: a hire without the role files configured refuses not-configured
|
||||
ok 31 - row 194 T8b: a hire without the role files configured refuses not-configured
|
||||
---
|
||||
duration_ms: 20.913229
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 194 T9: a fire revokes the claim, cancels open requests, asks the launcher to kill the runs, then delists and logs
|
||||
ok 32 - row 194 T9: a fire revokes the claim, cancels open requests, asks the launcher to kill the runs, then delists and logs
|
||||
---
|
||||
duration_ms: 24.175936
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 194 T9a (bus): a fire end's done writes lifecycle.end.killed and lifecycle.end.alive with run and pid, and an unknown stop's reason; a terminate's done or a bad stop refuses
|
||||
ok 33 - row 194 T9a (bus): a fire end's done writes lifecycle.end.killed and lifecycle.end.alive with run and pid, and an unknown stop's reason; a terminate's done or a bad stop refuses
|
||||
---
|
||||
duration_ms: 32.61146
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 194 T9: fire refusals come before step A and leave the claim, the requests and the file alone
|
||||
ok 34 - row 194 T9: fire refusals come before step A and leave the claim, the requests and the file alone
|
||||
---
|
||||
duration_ms: 23.760072
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 194 T9c: a writer failure at B leaves the instance firing, and the repeat delists and logs once
|
||||
ok 35 - row 194 T9c: a writer failure at B leaves the instance firing, and the repeat delists and logs once
|
||||
---
|
||||
duration_ms: 27.181196
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 194 T9c: a failure at C leaves the fire unlogged and the instance firing, and the repeat logs it
|
||||
ok 36 - row 194 T9c: a failure at C leaves the fire unlogged and the instance firing, and the repeat logs it
|
||||
---
|
||||
duration_ms: 32.473952
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 194 W-N1: a fire.done before a later fire.stopped of the same instance leaves it firing; another instance's done does not end it
|
||||
ok 37 - row 194 W-N1: a fire.done before a later fire.stopped of the same instance leaves it firing; another instance's done does not end it
|
||||
---
|
||||
duration_ms: 28.763745
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 194 T10: a hire or fire of a kept name refuses instance-kept before the writer
|
||||
ok 38 - row 194 T10: a hire or fire of a kept name refuses instance-kept before the writer
|
||||
---
|
||||
duration_ms: 23.713749
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 194 T10: a fire the writer's check refuses from the file stops nothing and leaves the instance launchable
|
||||
ok 39 - row 194 T10: a fire the writer's check refuses from the file stops nothing and leaves the instance launchable
|
||||
---
|
||||
duration_ms: 22.850337
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 194 T18: hire and fire take only their own keys, and a refused call writes nothing
|
||||
ok 40 - row 194 T18: hire and fire take only their own keys, and a refused call writes nothing
|
||||
---
|
||||
duration_ms: 30.46199
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 194 T8, T9, T18: through the runtime the chief hires and fires with the real writer, the receipt carries the reason, and a refusal leaves the file alone
|
||||
ok 41 - row 194 T8, T9, T18: through the runtime the chief hires and fires with the real writer, the receipt carries the reason, and a refusal leaves the file alone
|
||||
---
|
||||
duration_ms: 74.266705
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 194 W-N1: the launcher's take of a launch or regenerate of a firing instance closes it as instance-firing
|
||||
ok 42 - row 194 W-N1: the launcher's take of a launch or regenerate of a firing instance closes it as instance-firing
|
||||
---
|
||||
duration_ms: 25.754677
|
||||
type: 'test'
|
||||
...
|
||||
1..42
|
||||
# tests 42
|
||||
# suites 0
|
||||
# pass 42
|
||||
# fail 0
|
||||
# cancelled 0
|
||||
# skipped 0
|
||||
# todo 0
|
||||
# duration_ms 2335.738057
|
||||
@@ -0,0 +1 @@
|
||||
["timeout", "-k", "10", "122", "node", "--test", "--test-reporter=tap", "packages/bus/tests/comment-migration.test.mjs"]
|
||||
@@ -0,0 +1,40 @@
|
||||
TAP version 13
|
||||
# Subtest: explicit 3b copy migration preserves evidence and opens as 3g; normal startup never migrates
|
||||
ok 1 - explicit 3b copy migration preserves evidence and opens as 3g; normal startup never migrates
|
||||
---
|
||||
duration_ms: 94.206485
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: migration refuses active writers and drifted legacy schemas, with no partial upgrade
|
||||
ok 2 - migration refuses active writers and drifted legacy schemas, with no partial upgrade
|
||||
---
|
||||
duration_ms: 95.033385
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: named migration registry chains 3b through 3g to a fixture-only future version in order
|
||||
ok 3 - named migration registry chains 3b through 3g to a fixture-only future version in order
|
||||
---
|
||||
duration_ms: 88.657051
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: migration refuses mismatched source metadata without changing schema or evidence
|
||||
ok 4 - migration refuses mismatched source metadata without changing schema or evidence
|
||||
---
|
||||
duration_ms: 32.292763
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: offline command migrates only the supplied fixture root and reports usage errors
|
||||
ok 5 - offline command migrates only the supplied fixture root and reports usage errors
|
||||
---
|
||||
duration_ms: 161.569057
|
||||
type: 'test'
|
||||
...
|
||||
1..5
|
||||
# tests 5
|
||||
# suites 0
|
||||
# pass 5
|
||||
# fail 0
|
||||
# cancelled 0
|
||||
# skipped 0
|
||||
# todo 0
|
||||
# duration_ms 565.272724
|
||||
@@ -0,0 +1 @@
|
||||
["timeout", "-k", "10", "122", "node", "--test", "--test-reporter=tap", "packages/bus/tests/end-launch.test.mjs"]
|
||||
@@ -0,0 +1,52 @@
|
||||
TAP version 13
|
||||
# Subtest: endLaunch writes session.ended, releases the run claim and kills its capabilities
|
||||
ok 1 - endLaunch writes session.ended, releases the run claim and kills its capabilities
|
||||
---
|
||||
duration_ms: 22.645651
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: endLaunch refuses an unknown run, a second end and a rebind of the ended run
|
||||
ok 2 - endLaunch refuses an unknown run, a second end and a rebind of the ended run
|
||||
---
|
||||
duration_ms: 12.002293
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: a restarted broker refuses to rebind an ended run; a refused rebind leaves the run unbound
|
||||
ok 3 - a restarted broker refuses to rebind an ended run; a refused rebind leaves the run unbound
|
||||
---
|
||||
duration_ms: 16.156189
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: endLaunch leaves a claim another run took alone
|
||||
ok 4 - endLaunch leaves a claim another run took alone
|
||||
---
|
||||
duration_ms: 15.643604
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: refuse records action.refused against the caller with the code only
|
||||
ok 5 - refuse records action.refused against the caller with the code only
|
||||
---
|
||||
duration_ms: 12.387348
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: launches off refuses role.launch with launch-revoked until launches on
|
||||
ok 6 - launches off refuses role.launch with launch-revoked until launches on
|
||||
---
|
||||
duration_ms: 17.607273
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: broker process: launch ops authorize role.launch, record refusals and end runs
|
||||
ok 7 - broker process: launch ops authorize role.launch, record refusals and end runs
|
||||
---
|
||||
duration_ms: 215.095057
|
||||
type: 'test'
|
||||
...
|
||||
1..7
|
||||
# tests 7
|
||||
# suites 0
|
||||
# pass 7
|
||||
# fail 0
|
||||
# cancelled 0
|
||||
# skipped 0
|
||||
# todo 0
|
||||
# duration_ms 401.517194
|
||||
@@ -0,0 +1 @@
|
||||
["timeout", "-k", "10", "130", "node", "--test", "--test-reporter=tap", "packages/bus/tests/fire-revokes-grants.test.mjs"]
|
||||
@@ -0,0 +1,142 @@
|
||||
TAP version 13
|
||||
# Subtest: row 281 T2: a fire with host grants on two hosts and a Gitea grant answers with a job, then revokes all three
|
||||
ok 1 - row 281 T2: a fire with host grants on two hosts and a Gitea grant answers with a job, then revokes all three
|
||||
---
|
||||
duration_ms: 272.794411
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 281 T3 (sage-2575): a delete with grants takes two requests: the first starts the job, the next completes
|
||||
ok 2 - row 281 T3 (sage-2575): a delete with grants takes two requests: the first starts the job, the next completes
|
||||
---
|
||||
duration_ms: 276.243311
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 281 T3b (Q2): a delete whose job refuses on host B; the retry refuses grant-revoke-failed and revokes only B and Gitea
|
||||
ok 3 - row 281 T3b (Q2): a delete whose job refuses on host B; the retry refuses grant-revoke-failed and revokes only B and Gitea
|
||||
---
|
||||
duration_ms: 237.090531
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 281 T3b: B cleared by hand with hosts.revoke; the next delete starts a job for Gitea and the leftover line only
|
||||
ok 4 - row 281 T3b: B cleared by hand with hosts.revoke; the next delete starts a job for Gitea and the leftover line only
|
||||
---
|
||||
duration_ms: 215.967643
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 281 T3c (sage-2575 condition 4): a delete of an instance with no grant completes in one request
|
||||
ok 5 - row 281 T3c (sage-2575 condition 4): a delete of an instance with no grant completes in one request
|
||||
---
|
||||
duration_ms: 63.369791
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 281 T4: host B unreachable in a fire: the job refuses, A stays revoked, B and Gitea untouched; a repeat completes
|
||||
ok 6 - row 281 T4: host B unreachable in a fire: the job refuses, A stays revoked, B and Gitea untouched; a repeat completes
|
||||
---
|
||||
duration_ms: 209.563263
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 281 T4b (Q1): a line a manual hosts.revoke left on C is removed by the fire, with its close
|
||||
ok 7 - row 281 T4b (Q1): a line a manual hosts.revoke left on C is removed by the fire, with its close
|
||||
---
|
||||
duration_ms: 84.643578
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 281 T4b (Q1): with C unreachable, the fire completes and names the line in grantsLeft
|
||||
ok 8 - row 281 T4b (Q1): with C unreachable, the fire completes and names the line in grantsLeft
|
||||
---
|
||||
duration_ms: 91.402587
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 281 T5: Gitea's admin token can't be checked: the job refuses with the Gitea grant intact
|
||||
ok 9 - row 281 T5: Gitea's admin token can't be checked: the job refuses with the Gitea grant intact
|
||||
---
|
||||
duration_ms: 112.342702
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 281 T5b (N1): a failed token DELETE refuses gitea-left; the repeat retries only this agent's entries
|
||||
ok 10 - row 281 T5b (N1): a failed token DELETE refuses gitea-left; the repeat retries only this agent's entries
|
||||
---
|
||||
duration_ms: 305.089464
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 281 T6 (sage-2574): a host decision approved before the fire and run after it ends revoked, with nothing applied
|
||||
ok 11 - row 281 T6 (sage-2574): a host decision approved before the fire and run after it ends revoked, with nothing applied
|
||||
---
|
||||
duration_ms: 76.455592
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 281 T6b (sage-2574): a Gitea decision approved before the fire and run after it ends revoked before any Gitea write
|
||||
ok 12 - row 281 T6b (sage-2574): a Gitea decision approved before the fire and run after it ends revoked before any Gitea write
|
||||
---
|
||||
duration_ms: 114.809436
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 281 T6c: a host executor in flight aborts and ends revoked; a Gitea executor in flight is awaited and leaves no token
|
||||
ok 13 - row 281 T6c: a host executor in flight aborts and ends revoked; a Gitea executor in flight is awaited and leaves no token
|
||||
---
|
||||
duration_ms: 277.202762
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 281 T6d (B1): undecided host and Gitea decisions are in the set, and approved after the fire both end revoked
|
||||
ok 14 - row 281 T6d (B1): undecided host and Gitea decisions are in the set, and approved after the fire both end revoked
|
||||
---
|
||||
duration_ms: 110.496226
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 281 T6e (B1): a grant raise refuses instance-fired while firing and after the fire, goes through after a rehire, and refuses grant-revoke-running during a delete job
|
||||
ok 15 - row 281 T6e (B1): a grant raise refuses instance-fired while firing and after the fire, goes through after a rehire, and refuses grant-revoke-running during a delete job
|
||||
---
|
||||
duration_ms: 130.795425
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 281 T7: an instance with no grant fires as today, synchronously, with the same events
|
||||
ok 16 - row 281 T7: an instance with no grant fires as today, synchronously, with the same events
|
||||
---
|
||||
duration_ms: 67.699061
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 281 T9 (B3): one step G per agent; the manual verbs refuse while it runs, and sweep names it running
|
||||
ok 17 - row 281 T9 (B3): one step G per agent; the manual verbs refuse while it runs, and sweep names it running
|
||||
---
|
||||
duration_ms: 272.422397
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 281 T10 (B2): the fire and the delete answer while their jobs are held, and the broker answers other verbs
|
||||
ok 18 - row 281 T10 (B2): the fire and the delete answer while their jobs are held, and the broker answers other verbs
|
||||
---
|
||||
duration_ms: 237.283514
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 281 T11 (C1): a fire's job completes after the chief's run ends and processing halts
|
||||
ok 19 - row 281 T11 (C1): a fire's job completes after the chief's run ends and processing halts
|
||||
---
|
||||
duration_ms: 97.48128
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 281 T12 (C1, N7): a step B refusal in the job is fire.failed, and the repeat runs B and C synchronously
|
||||
ok 20 - row 281 T12 (C1, N7): a step B refusal in the job is fire.failed, and the repeat runs B and C synchronously
|
||||
---
|
||||
duration_ms: 87.059613
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 281 T13 (N4): a restart records each held job interrupted once, with one message each; an ended job gets none
|
||||
ok 21 - row 281 T13 (N4): a restart records each held job interrupted once, with one message each; an ended job gets none
|
||||
---
|
||||
duration_ms: 142.841798
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 281 T14 (N1, sage-2653): a host removed under an undecided decision stops the fire on host-unknown; the human's no closes it, and the repeat fire has no job
|
||||
ok 22 - row 281 T14 (N1, sage-2653): a host removed under an undecided decision stops the fire on host-unknown; the human's no closes it, and the repeat fire has no job
|
||||
---
|
||||
duration_ms: 63.476255
|
||||
type: 'test'
|
||||
...
|
||||
1..22
|
||||
# tests 22
|
||||
# suites 0
|
||||
# pass 22
|
||||
# fail 0
|
||||
# cancelled 0
|
||||
# skipped 0
|
||||
# todo 0
|
||||
# duration_ms 3657.73187
|
||||
@@ -0,0 +1 @@
|
||||
["timeout", "-k", "10", "146", "node", "--test", "--test-reporter=tap", "packages/bus/tests/gitea-grant.test.mjs"]
|
||||
@@ -0,0 +1,304 @@
|
||||
TAP version 13
|
||||
# Subtest: versionAtLeast compares numbers and refuses a prerelease of 1.27.0
|
||||
ok 1 - versionAtLeast compares numbers and refuses a prerelease of 1.27.0
|
||||
---
|
||||
duration_ms: 1.389107
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: X-G1: a raise that fails a check refuses and stores nothing
|
||||
ok 2 - X-G1: a raise that fails a check refuses and stores nothing
|
||||
---
|
||||
duration_ms: 95.809829
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: X-G1: a creative role, a role without identity and a missing or due slot refuse at raise
|
||||
ok 3 - X-G1: a creative role, a role without identity and a missing or due slot refuse at raise
|
||||
---
|
||||
duration_ms: 182.125991
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: X-G2: admin set refuses each failed check and writes nothing, then writes the slot once
|
||||
ok 4 - X-G2: admin set refuses each failed check and writes nothing, then writes the slot once
|
||||
---
|
||||
duration_ms: 149.412704
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: X-G3 to X-G8: an approve makes the user, mints the token, forks, checks reach and writes the file, record and grant.applied
|
||||
ok 5 - X-G3 to X-G8: an approve makes the user, mints the token, forks, checks reach and writes the file, record and grant.applied
|
||||
---
|
||||
duration_ms: 107.86787
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: X-G4: a user this stack did not make, an admin, a disabled user and a remade user each refuse
|
||||
ok 6 - X-G4: a user this stack did not make, an admin, a disabled user and a remade user each refuse
|
||||
---
|
||||
duration_ms: 329.856108
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: X-G6 and X-G8: the user and mint steps are written before their calls, and each result after its call
|
||||
ok 7 - X-G6 and X-G8: the user and mint steps are written before their calls, and each result after its call
|
||||
---
|
||||
duration_ms: 102.351221
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: X-G4: a fork by the seat user of another repository than the project refuses fork-foreign
|
||||
ok 8 - X-G4: a fork by the seat user of another repository than the project refuses fork-foreign
|
||||
---
|
||||
duration_ms: 81.909237
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: X-G5: a failure after the mint deletes the token, unloads nothing it did not load and leaves no file
|
||||
ok 9 - X-G5: a failure after the mint deletes the token, unloads nothing it did not load and leaves no file
|
||||
---
|
||||
duration_ms: 169.711113
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: X-G5: a token delete that fails is left at Gitea, shown by status and taken by sweep
|
||||
ok 10 - X-G5: a token delete that fails is left at Gitea, shown by status and taken by sweep
|
||||
---
|
||||
duration_ms: 146.658802
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: X-G5: a mint that fails deletes by name, and a refusal at step 0 leaves the decision unspent
|
||||
ok 11 - X-G5: a mint that fails deletes by name, and a refusal at step 0 leaves the decision unspent
|
||||
---
|
||||
duration_ms: 222.329644
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: X-G5: an agent held for an unknown token is refused at step 0 with no Gitea call
|
||||
ok 12 - X-G5: an agent held for an unknown token is refused at step 0 with no Gitea call
|
||||
---
|
||||
duration_ms: 93.51614
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: X-G5 and X-G9 (step 7): a rotation whose old-token delete fails stays applied with the old id left
|
||||
ok 13 - X-G5 and X-G9 (step 7): a rotation whose old-token delete fails stays applied with the old id left
|
||||
---
|
||||
duration_ms: 246.960267
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: X-G10: in a rotation the store file holds the new token before the old one is deleted
|
||||
ok 14 - X-G10: in a rotation the store file holds the new token before the old one is deleted
|
||||
---
|
||||
duration_ms: 195.949625
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: X-G6: a rotation cut before the rename settles back at once, and the old token stays live
|
||||
ok 15 - X-G6: a rotation cut before the rename settles back at once, and the old token stays live
|
||||
---
|
||||
duration_ms: 176.09133
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: X-G6: a rotation whose step 8 write fails is settle-pending, and a restart settles it forward
|
||||
ok 16 - X-G6: a rotation whose step 8 write fails is settle-pending, and a restart settles it forward
|
||||
---
|
||||
duration_ms: 228.479229
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: X-G6: a restart settles an open rotation back when the file still holds the old token
|
||||
ok 17 - X-G6: a restart settles an open rotation back when the file still holds the old token
|
||||
---
|
||||
duration_ms: 139.405206
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: X-G6: a restart settles an open rotation forward when the file holds the new token
|
||||
ok 18 - X-G6: a restart settles an open rotation forward when the file holds the new token
|
||||
---
|
||||
duration_ms: 136.294865
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: X-G6: a 401 on the file token loses the grant: both tokens go, the record goes and memory unloads
|
||||
ok 19 - X-G6: a 401 on the file token loses the grant: both tokens go, the record goes and memory unloads
|
||||
---
|
||||
duration_ms: 145.462482
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: X-G6: a 403, 404, 500, a hang and a dropped socket each leave the rotation settle-pending with nothing deleted
|
||||
ok 20 - X-G6: a 403, 404, 500, a hang and a dropped socket each leave the rotation settle-pending with nothing deleted
|
||||
---
|
||||
duration_ms: 1045.299273
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: X-G6: a file token no grant minted is held; the next restart says so again; a revoke clears it and takes both ids
|
||||
ok 21 - X-G6: a file token no grant minted is held; the next restart says so again; a revoke clears it and takes both ids
|
||||
---
|
||||
duration_ms: 163.866838
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: N9: a revoke of an open rotation, then a restart: no settle, no Gitea call and no message
|
||||
ok 22 - N9: a revoke of an open rotation, then a restart: no settle, no Gitea call and no message
|
||||
---
|
||||
duration_ms: 145.943814
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: N9: a 404 on a delete by id counts as done
|
||||
ok 23 - N9: a 404 on a delete by id counts as done
|
||||
---
|
||||
duration_ms: 142.881057
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: X-G6: a restart undoes each step a killed child left, and spends an approved unspent decision
|
||||
ok 24 - X-G6: a restart undoes each step a killed child left, and spends an approved unspent decision
|
||||
---
|
||||
duration_ms: 470.571476
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: X-G6: a restart with no admin slot leaves the user an orphan and the token left
|
||||
ok 25 - X-G6: a restart with no admin slot leaves the user an orphan and the token left
|
||||
---
|
||||
duration_ms: 60.248186
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: X-G7: a change to the definition, identity, publish remotes or admin slot after the raise ends decision-mismatch
|
||||
ok 26 - X-G7: a change to the definition, identity, publish remotes or admin slot after the raise ends decision-mismatch
|
||||
---
|
||||
duration_ms: 118.79729
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: X-G7 and X-G9: an admin rotate voids open decisions, and rotate --finish deletes what was left
|
||||
ok 27 - X-G7 and X-G9: an admin rotate voids open decisions, and rotate --finish deletes what was left
|
||||
---
|
||||
duration_ms: 114.580002
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: X-G9: a rotate whose name is taken refuses and writes nothing; remove takes the slot away
|
||||
ok 28 - X-G9: a rotate whose name is taken refuses and writes nothing; remove takes the slot away
|
||||
---
|
||||
duration_ms: 67.752452
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: X-G9: a slot past its rotate-by date refuses a run at step 0, leaving the decision unspent
|
||||
ok 29 - X-G9: a slot past its rotate-by date refuses a run at step 0, leaving the decision unspent
|
||||
---
|
||||
duration_ms: 57.538143
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: X-G11: run refuses every caller but the human, an unapproved, a spent and a busy decision
|
||||
ok 30 - X-G11: run refuses every caller but the human, an unapproved, a spent and a busy decision
|
||||
---
|
||||
duration_ms: 115.642626
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: kill switch (plan :16): while halted the chief still reads grants.status, and an agent grants.revoke refuses
|
||||
ok 31 - kill switch (plan :16): while halted the chief still reads grants.status, and an agent grants.revoke refuses
|
||||
---
|
||||
duration_ms: 112.116641
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: X-G11: a revoke while the executor runs aborts it and the grant ends revoked
|
||||
ok 32 - X-G11: a revoke while the executor runs aborts it and the grant ends revoked
|
||||
---
|
||||
duration_ms: 111.549218
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: X-G11: a revoke unloads memory and removes the file before its Gitea delete
|
||||
ok 33 - X-G11: a revoke unloads memory and removes the file before its Gitea delete
|
||||
---
|
||||
duration_ms: 137.407006
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: X-G11: a revoke during a rotation step 7 ends it revoked, and step 8 writes no record back
|
||||
ok 34 - X-G11: a revoke during a rotation step 7 ends it revoked, and step 8 writes no record back
|
||||
---
|
||||
duration_ms: 205.333394
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: X-G11: a revoke while a sweep settles a rotation, forward or back, ends it revoked with no record
|
||||
ok 35 - X-G11: a revoke while a sweep settles a rotation, forward or back, ends it revoked with no record
|
||||
---
|
||||
duration_ms: 361.315899
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: X-G11: a revoke during a settle whoami that finds a foreign token ends it revoked, not held
|
||||
ok 36 - X-G11: a revoke during a settle whoami that finds a foreign token ends it revoked, not held
|
||||
---
|
||||
duration_ms: 190.635822
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: X-G11: a revoke during a settle whoami that gets a 401 ends it revoked, not lost
|
||||
ok 37 - X-G11: a revoke during a settle whoami that gets a 401 ends it revoked, not lost
|
||||
---
|
||||
duration_ms: 185.480554
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: X-G12: a token that reaches wider than its forks fails with the repository named
|
||||
ok 38 - X-G12: a token that reaches wider than its forks fails with the repository named
|
||||
---
|
||||
duration_ms: 415.656657
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: X-G12: reach is paged by X-Total-Count and a count that does not add up refuses
|
||||
ok 39 - X-G12: reach is paged by X-Total-Count and a count that does not add up refuses
|
||||
---
|
||||
duration_ms: 306.65068
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: X-G13: an agent cannot record a grant event, and the trigger refuses one from any writer but the grant writer
|
||||
ok 40 - X-G13: an agent cannot record a grant event, and the trigger refuses one from any writer but the grant writer
|
||||
---
|
||||
duration_ms: 79.581731
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: X-G14: credentials delete fires the user: tokens go, login is prohibited, and grant.revoke.closed records it
|
||||
ok 41 - X-G14: credentials delete fires the user: tokens go, login is prohibited, and grant.revoke.closed records it
|
||||
---
|
||||
duration_ms: 275.310948
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: X-G14: a fire whose token delete or login PATCH fails lands it in serviceLeft
|
||||
ok 42 - X-G14: a fire whose token delete or login PATCH fails lands it in serviceLeft
|
||||
---
|
||||
duration_ms: 170.129525
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: X-G14: a fire whose user is gone or remade skips the fire steps and says why
|
||||
ok 43 - X-G14: a fire whose user is gone or remade skips the fire steps and says why
|
||||
---
|
||||
duration_ms: 305.836811
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: X-G14: a sweep retries a fire only for the user it fired: a remade or gone user is skipped and named
|
||||
ok 44 - X-G14: a sweep retries a fire only for the user it fired: a remade or gone user is skipped and named
|
||||
---
|
||||
duration_ms: 411.493295
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: X-G14: a revoke Gitea cannot reach stays open, and a restart closes it
|
||||
ok 45 - X-G14: a revoke Gitea cannot reach stays open, and a restart closes it
|
||||
---
|
||||
duration_ms: 148.33404
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 281 T8: a tester grants.revoke refuses tester-dev-only once bus.tester is off; the human revoke keeps its records and starts no job
|
||||
ok 46 - row 281 T8: a tester grants.revoke refuses tester-dev-only once bus.tester is off; the human revoke keeps its records and starts no job
|
||||
---
|
||||
duration_ms: 166.82091
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: X-G15: look-alike commit steps outside the grant writer are ignored at start, by revoke and by status
|
||||
ok 47 - X-G15: look-alike commit steps outside the grant writer are ignored at start, by revoke and by status
|
||||
---
|
||||
duration_ms: 137.700847
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: X-G15: a look-alike spend under another kind with the grant writer pair is not an open grant
|
||||
ok 48 - X-G15: a look-alike spend under another kind with the grant writer pair is not an open grant
|
||||
---
|
||||
duration_ms: 46.211743
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: status lists the slot, users, grants and nothing secret, and every grants verb needs service gitea
|
||||
ok 49 - status lists the slot, users, grants and nothing secret, and every grants verb needs service gitea
|
||||
---
|
||||
duration_ms: 142.352075
|
||||
type: 'test'
|
||||
...
|
||||
1..49
|
||||
# tests 49
|
||||
# suites 0
|
||||
# pass 49
|
||||
# fail 0
|
||||
# cancelled 0
|
||||
# skipped 0
|
||||
# todo 0
|
||||
# duration_ms 9468.066693
|
||||
@@ -0,0 +1 @@
|
||||
["timeout", "-k", "10", "122", "node", "--test", "--test-reporter=tap", "packages/bus/tests/gitea-migration.test.mjs"]
|
||||
@@ -0,0 +1,40 @@
|
||||
TAP version 13
|
||||
# Subtest: 3j copy migrates to 3k: every row kept, and sqlite_master gains only the two tables and their keys
|
||||
ok 1 - 3j copy migrates to 3k: every row kept, and sqlite_master gains only the two tables and their keys
|
||||
---
|
||||
duration_ms: 92.57512
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: a 3j→3k step that fails partway leaves the store at 3j with every row and the schema intact
|
||||
ok 2 - a 3j→3k step that fails partway leaves the store at 3j with every row and the schema intact
|
||||
---
|
||||
duration_ms: 102.278568
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: the 3j engine refuses a migrated store, migrating or not, and leaves it as it was
|
||||
ok 3 - the 3j engine refuses a migrated store, migrating or not, and leaves it as it was
|
||||
---
|
||||
duration_ms: 91.506598
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: gitea_users: one user per business and agent, an id above 0, a 16-hex nonce and a real decision
|
||||
ok 4 - gitea_users: one user per business and agent, an id above 0, a 16-hex nonce and a real decision
|
||||
---
|
||||
duration_ms: 11.936654
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: gitea_grants: one grant per agent, a projects array, a token id above 0, and only for a recorded user
|
||||
ok 5 - gitea_grants: one grant per agent, a projects array, a token id above 0, and only for a recorded user
|
||||
---
|
||||
duration_ms: 15.826027
|
||||
type: 'test'
|
||||
...
|
||||
1..5
|
||||
# tests 5
|
||||
# suites 0
|
||||
# pass 5
|
||||
# fail 0
|
||||
# cancelled 0
|
||||
# skipped 0
|
||||
# todo 0
|
||||
# duration_ms 400.3477
|
||||
@@ -0,0 +1 @@
|
||||
["timeout", "-k", "10", "185", "node", "--test", "--test-reporter=tap", "packages/bus/tests/grant-executor.test.mjs"]
|
||||
@@ -0,0 +1,262 @@
|
||||
TAP version 13
|
||||
# Subtest: row 280: an occupied TCP port is attempted, refused, and retried with our sshd
|
||||
ok 1 - row 280: an occupied TCP port is attempted, refused, and retried with our sshd
|
||||
---
|
||||
duration_ms: 98.447592
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 280: every injected picker sample is unprivileged and outside the ephemeral range
|
||||
ok 2 - row 280: every injected picker sample is unprivileged and outside the ephemeral range
|
||||
---
|
||||
duration_ms: 0.370868
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: G7: an Approve installs the tagged line, logs in with the new key, and writes the key file, record and grant.applied
|
||||
ok 3 - G7: an Approve installs the tagged line, logs in with the new key, and writes the key file, record and grant.applied
|
||||
---
|
||||
duration_ms: 708.508681
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: G7: a commands change on a live grant updates the record in one transaction and keeps the key and line
|
||||
ok 4 - G7: a commands change on a live grant updates the record in one transaction and keeps the key and line
|
||||
---
|
||||
duration_ms: 560.863117
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: G8: a failure at install or verify removes the line and leaves no record, key file or reference
|
||||
ok 5 - G8: a failure at install or verify removes the line and leaves no record, key file or reference
|
||||
---
|
||||
duration_ms: 1559.84374
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: G8: a failed remove adds hostLineLeft and tells the human to sweep
|
||||
ok 6 - G8: a failed remove adds hostLineLeft and tells the human to sweep
|
||||
---
|
||||
duration_ms: 655.562344
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: G8: a failure in step 5 before commit unlinks the key file, drops the reference and removes the line
|
||||
ok 7 - G8: a failure in step 5 before commit unlinks the key file, drops the reference and removes the line
|
||||
---
|
||||
duration_ms: 675.455365
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: G8: a store fault in the commit transaction ends host-failed with no record, key file, reference or line
|
||||
ok 8 - G8: a store fault in the commit transaction ends host-failed with no record, key file, reference or line
|
||||
---
|
||||
duration_ms: 701.212144
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: G8: a failed step 1 check spends the decision and runs nothing remote
|
||||
ok 9 - G8: a failed step 1 check spends the decision and runs nothing remote
|
||||
---
|
||||
duration_ms: 88.854318
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: G9: a registry, definition or commands change between raise and Approve ends decision-mismatch before any remote step
|
||||
ok 10 - G9: a registry, definition or commands change between raise and Approve ends decision-mismatch before any remote step
|
||||
---
|
||||
duration_ms: 544.508001
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: G9: an agent no longer a role or no longer declaring host ends with its code, spent
|
||||
ok 11 - G9: an agent no longer a role or no longer declaring host ends with its code, spent
|
||||
---
|
||||
duration_ms: 69.685141
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: G10: a second start refuses decision-consumed, and an unresolved or agent-resolved decision not-authorized, writing nothing
|
||||
ok 12 - G10: a second start refuses decision-consumed, and an unresolved or agent-resolved decision not-authorized, writing nothing
|
||||
---
|
||||
duration_ms: 534.920885
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: G15: no event, message or decision holds the private key
|
||||
ok 13 - G15: no event, message or decision holds the private key
|
||||
---
|
||||
duration_ms: 536.771599
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: G23: a revoke during install ends grant.failed revoked with no key file, no grant and no line
|
||||
ok 14 - G23: a revoke during install ends grant.failed revoked with no key file, no grant and no line
|
||||
---
|
||||
duration_ms: 533.359006
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: G23 (row 249): an add that writes after an abort's remove leaves hostLineLeft until the sweep
|
||||
ok 15 - G23 (row 249): an add that writes after an abort's remove leaves hostLineLeft until the sweep
|
||||
---
|
||||
duration_ms: 869.455692
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: G23 (row 249): an add that writes after a timed-out install's remove leaves hostLineLeft until the sweep
|
||||
ok 16 - G23 (row 249): an add that writes after a timed-out install's remove leaves hostLineLeft until the sweep
|
||||
---
|
||||
duration_ms: 876.092586
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: G23: a revoke recorded after the raise and before the start ends step 1 revoked, and a held slot ends host-busy
|
||||
ok 17 - G23: a revoke recorded after the raise and before the start ends step 1 revoked, and a held slot ends host-busy
|
||||
---
|
||||
duration_ms: 529.412732
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: G24: names at 64 characters with . and _ give distinct tags of the fixed length
|
||||
ok 18 - G24: names at 64 characters with . and _ give distinct tags of the fixed length
|
||||
---
|
||||
duration_ms: 0.638856
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: G11: a restart after install removes the line, then ends interrupted with the tag, holding the slot until then
|
||||
ok 19 - G11: a restart after install removes the line, then ends interrupted with the tag, holding the slot until then
|
||||
---
|
||||
duration_ms: 226.24599
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: G11: a restart after a new key's commit, with the key file written, ends with no key file, record, reference or line
|
||||
ok 20 - G11: a restart after a new key's commit, with the key file written, ends with no key file, record, reference or line
|
||||
---
|
||||
duration_ms: 221.761798
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: G11: a restart after a commands change's commit leaves the record as it was and asks nothing of the host
|
||||
ok 21 - G11: a restart after a commands change's commit leaves the record as it was and asks nothing of the host
|
||||
---
|
||||
duration_ms: 526.137797
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: G11 (B2): a restart before step 1, spent or not yet spent, ends interrupted and nothing runs later
|
||||
ok 22 - G11 (B2): a restart before step 1, spent or not yet spent, ends interrupted and nothing runs later
|
||||
---
|
||||
duration_ms: 74.81192
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: G11: a remote undo that fails ends interrupted with hostLineLeft and the sweep hint
|
||||
ok 23 - G11: a remote undo that fails ends interrupted with hostLineLeft and the sweep hint
|
||||
---
|
||||
duration_ms: 277.315357
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: G11: a restart leaves a finished grant alone, and the reconcile adds nothing for it
|
||||
ok 24 - G11: a restart leaves a finished grant alone, and the reconcile adds nothing for it
|
||||
---
|
||||
duration_ms: 520.235108
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: N1 (G27): the start sweep unlinks host.<id> files with no record in loaded businesses only, and refuses a store dir that is not private
|
||||
ok 25 - N1 (G27): the start sweep unlinks host.<id> files with no record in loaded businesses only, and refuses a store dir that is not private
|
||||
---
|
||||
duration_ms: 8.053326
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: G12: the human's hosts.revoke deletes the record, the key file, the reference and the line, with a closed marker
|
||||
ok 26 - G12: the human's hosts.revoke deletes the record, the key file, the reference and the line, with a closed marker
|
||||
---
|
||||
duration_ms: 669.479405
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: G12 (N4): a revoke with no record still removes the computed tag's line, with granted false; bad args refuse
|
||||
ok 27 - G12 (N4): a revoke with no record still removes the computed tag's line, with granted false; bad args refuse
|
||||
---
|
||||
duration_ms: 220.747329
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: G13: a revoke during install aborts the executor, which ends revoked, and the line goes
|
||||
ok 28 - G13: a revoke during install aborts the executor, which ends revoked, and the line goes
|
||||
---
|
||||
duration_ms: 539.581667
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: G26: the human, the assistant and the tester revoke; the chief and a pm refuse; sweep is the human's or the tester's
|
||||
ok 29 - G26: the human, the assistant and the tester revoke; the chief and a pm refuse; sweep is the human's or the tester's
|
||||
---
|
||||
duration_ms: 516.808358
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 281 T8: a tester hosts.revoke refuses tester-dev-only once bus.tester is off, and a human revoke writes no job records
|
||||
ok 30 - row 281 T8: a tester hosts.revoke refuses tester-dev-only once bus.tester is off, and a human revoke writes no job records
|
||||
---
|
||||
duration_ms: 688.408575
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: G27: a restart after step 1 sweeps the key file and runs step 3 once the bus is up; status shows the revoke until then
|
||||
ok 31 - G27: a restart after step 1 sweeps the key file and runs step 3 once the bus is up; status shows the revoke until then
|
||||
---
|
||||
duration_ms: 693.247599
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: G27: after step 2 with the host down, the restart closes the marker with hostLineLeft; a marker without a revoke id is not reopened
|
||||
ok 32 - G27: after step 2 with the host down, the restart closes the marker with hostLineLeft; a marker without a revoke id is not reopened
|
||||
---
|
||||
duration_ms: 988.184839
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: G27: a key file a revoke could not unlink is reported left and goes at the next start
|
||||
ok 33 - G27: a key file a revoke could not unlink is reported left and goes at the next start
|
||||
---
|
||||
duration_ms: 702.203491
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: G28: a commands change, then a revoke, then a restart leave no record, key, reference or line
|
||||
ok 34 - G28: a commands change, then a revoke, then a restart leave no record, key, reference or line
|
||||
---
|
||||
duration_ms: 729.536724
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: G24 (B4): hosts.sweep removes only this business's recorded tags no live grant holds, and records what it left
|
||||
ok 35 - G24 (B4): hosts.sweep removes only this business's recorded tags no live grant holds, and records what it left
|
||||
---
|
||||
duration_ms: 998.021303
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: G12: the local steps finish before the host step, so a host that hangs leaves the agent no access
|
||||
ok 36 - G12: the local steps finish before the host step, so a host that hangs leaves the agent no access
|
||||
---
|
||||
duration_ms: 711.78963
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: G23 (X5): a revoke right after the spend reaches the executor's claim, so the grant ends revoked
|
||||
ok 37 - G23 (X5): a revoke right after the spend reaches the executor's claim, so the grant ends revoked
|
||||
---
|
||||
duration_ms: 214.684402
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: G23 (X5): a revoke that lands as verify returns ends revoked with no record, key file or line
|
||||
ok 38 - G23 (X5): a revoke that lands as verify returns ends revoked with no record, key file or line
|
||||
---
|
||||
duration_ms: 653.002715
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: G13: a revoke whose host remove fails still drops the record and key, and reports the line left for a sweep
|
||||
ok 39 - G13: a revoke whose host remove fails still drops the record and key, and reports the line left for a sweep
|
||||
---
|
||||
duration_ms: 659.933018
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: G22: enroll, check, grant, host.run, a commands change the next host.run uses, and a revoke that kills a run in flight
|
||||
ok 40 - G22: enroll, check, grant, host.run, a commands change the next host.run uses, and a revoke that kills a run in flight
|
||||
---
|
||||
duration_ms: 1185.126402
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: mos-1163: a grant whose agent became a creative role after the raise ends host-creative-role at step 1, spent, with nothing remote
|
||||
ok 41 - mos-1163: a grant whose agent became a creative role after the raise ends host-creative-role at step 1, spent, with nothing remote
|
||||
---
|
||||
duration_ms: 66.900793
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: sage-1908: once the agent of an applied grant is a creative role, host.run refuses host-creative-role, runs nothing remote and keeps the record
|
||||
ok 42 - sage-1908: once the agent of an applied grant is a creative role, host.run refuses host-creative-role, runs nothing remote and keeps the record
|
||||
---
|
||||
duration_ms: 513.6272
|
||||
type: 'test'
|
||||
...
|
||||
1..42
|
||||
# tests 42
|
||||
# suites 0
|
||||
# pass 42
|
||||
# fail 0
|
||||
# cancelled 0
|
||||
# skipped 0
|
||||
# todo 0
|
||||
# duration_ms 22245.10321
|
||||
@@ -0,0 +1 @@
|
||||
["timeout", "-k", "10", "122", "node", "--test", "--test-reporter=tap", "packages/bus/tests/grant-migration.test.mjs"]
|
||||
@@ -0,0 +1,46 @@
|
||||
TAP version 13
|
||||
# Subtest: 3i copy migrates to 3j: every row kept, and sqlite_master gains only the two tables, their keys and the guard
|
||||
ok 1 - 3i copy migrates to 3j: every row kept, and sqlite_master gains only the two tables, their keys and the guard
|
||||
---
|
||||
duration_ms: 87.006874
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: a 3i→3j step that fails partway leaves the store at 3i with every row and the schema intact
|
||||
ok 2 - a 3i→3j step that fails partway leaves the store at 3i with every row and the schema intact
|
||||
---
|
||||
duration_ms: 96.365918
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: the 3i engine refuses a migrated store, migrating or not, and leaves it as it was
|
||||
ok 3 - the 3i engine refuses a migrated store, migrating or not, and leaves it as it was
|
||||
---
|
||||
duration_ms: 89.116681
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: A22b, sage-1703: a session-written grant.* row from before the step survives it, and the grant readers ignore it
|
||||
ok 4 - A22b, sage-1703: a session-written grant.* row from before the step survives it, and the grant readers ignore it
|
||||
---
|
||||
duration_ms: 72.098372
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: the guard: a grant.* action or operation on action.allowed needs the (NULL, grant) actor
|
||||
ok 5 - the guard: a grant.* action or operation on action.allowed needs the (NULL, grant) actor
|
||||
---
|
||||
duration_ms: 14.5452
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: hosts: one record per business and host, a ready host has its installer and check, grants need the host
|
||||
ok 6 - hosts: one record per business and host, a ready host has its installer and check, grants need the host
|
||||
---
|
||||
duration_ms: 11.867593
|
||||
type: 'test'
|
||||
...
|
||||
1..6
|
||||
# tests 6
|
||||
# suites 0
|
||||
# pass 6
|
||||
# fail 0
|
||||
# cancelled 0
|
||||
# skipped 0
|
||||
# todo 0
|
||||
# duration_ms 463.588911
|
||||
@@ -0,0 +1 @@
|
||||
["timeout", "-k", "10", "122", "node", "--test", "--test-reporter=tap", "packages/bus/tests/lifecycle-revoke.test.mjs"]
|
||||
@@ -0,0 +1,59 @@
|
||||
TAP version 13
|
||||
# organization: {"event":"reload-needs-restart","business":"demo"}
|
||||
# Subtest: T20 fire: a revoke that fails stops the fire with the file unchanged; one that succeeds revokes, keeps the directory and names the services outside the store
|
||||
ok 1 - T20 fire: a revoke that fails stops the fire with the file unchanged; one that succeeds revokes, keeps the directory and names the services outside the store
|
||||
---
|
||||
duration_ms: 93.274675
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: T20 fire: an instance already delisted still has its tokens revoked and the file is left alone
|
||||
ok 2 - T20 fire: an instance already delisted still has its tokens revoked and the file is left alone
|
||||
---
|
||||
duration_ms: 57.676362
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: T20 fire: with no entry in the running bus, a token on disk refuses and an empty store goes on
|
||||
ok 3 - T20 fire: with no entry in the running bus, a token on disk refuses and an empty store goes on
|
||||
---
|
||||
duration_ms: 63.340351
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: T20 delete: a revoke that fails keeps the file; one that succeeds clears the store, deletes, and names the tracker bot
|
||||
ok 4 - T20 delete: a revoke that fails keeps the file; one that succeeds clears the store, deletes, and names the tracker bot
|
||||
---
|
||||
duration_ms: 79.425748
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: T20 delete: with no entry in the running bus, a token file is cleared and the delete goes on; a file reference refuses
|
||||
ok 5 - T20 delete: with no entry in the running bus, a token file is cleared and the delete goes on; a file reference refuses
|
||||
---
|
||||
duration_ms: 63.405744
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: T21 delete: a write between the raise and the take makes the delete refuse revision-conflict before it revokes anything
|
||||
ok 6 - T21 delete: a write between the raise and the take makes the delete refuse revision-conflict before it revokes anything
|
||||
---
|
||||
duration_ms: 58.127385
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 281 T1 fire: a host.<id> or granted gitea file in the store refuses step B credential-revoke-failed, file unchanged
|
||||
ok 7 - row 281 T1 fire: a host.<id> or granted gitea file in the store refuses step B credential-revoke-failed, file unchanged
|
||||
---
|
||||
duration_ms: 55.893818
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 281 T1 start: a host grant record whose key file is gone starts and reads not-issued
|
||||
ok 8 - row 281 T1 start: a host grant record whose key file is gone starts and reads not-issued
|
||||
---
|
||||
duration_ms: 62.55636
|
||||
type: 'test'
|
||||
...
|
||||
1..8
|
||||
# tests 8
|
||||
# suites 0
|
||||
# pass 8
|
||||
# fail 0
|
||||
# cancelled 0
|
||||
# skipped 0
|
||||
# todo 0
|
||||
# duration_ms 671.935182
|
||||
@@ -0,0 +1 @@
|
||||
["timeout", "-k", "10", "122", "node", "--test", "--test-reporter=tap", "packages/bus/tests/message-filter.test.mjs"]
|
||||
@@ -0,0 +1,46 @@
|
||||
TAP version 13
|
||||
# Subtest: trail on a hidden message id answers exactly as on an unknown id, for the owner, a reader and the tester
|
||||
ok 1 - trail on a hidden message id answers exactly as on an unknown id, for the owner, a reader and the tester
|
||||
---
|
||||
duration_ms: 28.093807
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: replies on a hidden message id answers exactly as on an unknown id, for the owner, a reader and the tester
|
||||
ok 2 - replies on a hidden message id answers exactly as on an unknown id, for the owner, a reader and the tester
|
||||
---
|
||||
duration_ms: 24.35033
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: trail on a decision keeps the decision and drops the user thread messages, their deliveries and their events
|
||||
ok 3 - trail on a decision keeps the decision and drops the user thread messages, their deliveries and their events
|
||||
---
|
||||
duration_ms: 34.011659
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: replies leaves out other users thread messages and still fills a page
|
||||
ok 4 - replies leaves out other users thread messages and still fills a page
|
||||
---
|
||||
duration_ms: 172.631143
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: messages in the business human and tester threads are not hidden (row 177 unchanged)
|
||||
ok 5 - messages in the business human and tester threads are not hidden (row 177 unchanged)
|
||||
---
|
||||
duration_ms: 37.215228
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: governance pin: the owner sees decisions, inbox entries, claims, tasks and project files, but not the user messages
|
||||
ok 6 - governance pin: the owner sees decisions, inbox entries, claims, tasks and project files, but not the user messages
|
||||
---
|
||||
duration_ms: 100.140791
|
||||
type: 'test'
|
||||
...
|
||||
1..6
|
||||
# tests 6
|
||||
# suites 0
|
||||
# pass 6
|
||||
# fail 0
|
||||
# cancelled 0
|
||||
# skipped 0
|
||||
# todo 0
|
||||
# duration_ms 482.521866
|
||||
@@ -0,0 +1 @@
|
||||
["timeout", "-k", "10", "121", "node", "--test", "--test-reporter=tap", "packages/bus/tests/name-migration.test.mjs"]
|
||||
@@ -0,0 +1,16 @@
|
||||
TAP version 13
|
||||
# Subtest: 3f copy migrates to 3g preserving every old column/row, with an empty instance_names and null to_name
|
||||
ok 1 - 3f copy migrates to 3g preserving every old column/row, with an empty instance_names and null to_name
|
||||
---
|
||||
duration_ms: 92.115148
|
||||
type: 'test'
|
||||
...
|
||||
1..1
|
||||
# tests 1
|
||||
# suites 0
|
||||
# pass 1
|
||||
# fail 0
|
||||
# cancelled 0
|
||||
# skipped 0
|
||||
# todo 0
|
||||
# duration_ms 169.006815
|
||||
@@ -0,0 +1 @@
|
||||
["timeout", "-k", "10", "121", "node", "--test", "--test-reporter=tap", "packages/bus/tests/schema.test.mjs"]
|
||||
@@ -0,0 +1,16 @@
|
||||
TAP version 13
|
||||
# Subtest: v3b prototype refusals, views and append-only mutations
|
||||
ok 1 - v3b prototype refusals, views and append-only mutations
|
||||
---
|
||||
duration_ms: 86.755157
|
||||
type: 'test'
|
||||
...
|
||||
1..1
|
||||
# tests 1
|
||||
# suites 0
|
||||
# pass 1
|
||||
# fail 0
|
||||
# cancelled 0
|
||||
# skipped 0
|
||||
# todo 0
|
||||
# duration_ms 137.328413
|
||||
@@ -0,0 +1 @@
|
||||
["timeout", "-k", "10", "122", "node", "--test", "--test-reporter=tap", "packages/bus/tests/sessions.test.mjs"]
|
||||
@@ -0,0 +1,52 @@
|
||||
TAP version 13
|
||||
# Subtest: T1 REQ-ROLE-2: two sessions of one thread keep their own history, delivery and replies
|
||||
ok 1 - T1 REQ-ROLE-2: two sessions of one thread keep their own history, delivery and replies
|
||||
---
|
||||
duration_ms: 47.588897
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: T2 REQ-ROLE-2: one holder per session, generations count its claims, and a sibling session's message never reaches the other holder
|
||||
ok 2 - T2 REQ-ROLE-2: one holder per session, generations count its claims, and a sibling session's message never reaches the other holder
|
||||
---
|
||||
duration_ms: 42.331438
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: T2 sage-2257: a released or revoked run's retired generation refuses its approval, delivery and read, and writes nothing
|
||||
ok 3 - T2 sage-2257: a released or revoked run's retired generation refuses its approval, delivery and read, and writes nothing
|
||||
---
|
||||
duration_ms: 57.372264
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: session.create is idempotent on its op, refuses a reused op or a taken name, and reaches only the owner's threads
|
||||
ok 4 - session.create is idempotent on its op, refuses a reused op or a taken name, and reaches only the owner's threads
|
||||
---
|
||||
duration_ms: 38.051812
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: the 3l triggers keep sessions in their thread and session ids apart from thread ids
|
||||
ok 5 - the 3l triggers keep sessions in their thread and session ids apart from thread ids
|
||||
---
|
||||
duration_ms: 71.191846
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: T7: a 3k store migrates to 3l, each thread's default session has the thread's id, and old rows keep their seqs
|
||||
ok 6 - T7: a 3k store migrates to 3l, each thread's default session has the thread's id, and old rows keep their seqs
|
||||
---
|
||||
duration_ms: 108.858323
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: T7 D9: the 3k engine refuses a 3l store, migrating or not, and leaves it as it was
|
||||
ok 7 - T7 D9: the 3k engine refuses a 3l store, migrating or not, and leaves it as it was
|
||||
---
|
||||
duration_ms: 158.172156
|
||||
type: 'test'
|
||||
...
|
||||
1..7
|
||||
# tests 7
|
||||
# suites 0
|
||||
# pass 7
|
||||
# fail 0
|
||||
# cancelled 0
|
||||
# skipped 0
|
||||
# todo 0
|
||||
# duration_ms 606.588824
|
||||
@@ -0,0 +1 @@
|
||||
["timeout", "-k", "10", "121", "node", "--test", "--test-reporter=tap", "packages/bus/tests/spec-migration.test.mjs"]
|
||||
@@ -0,0 +1,16 @@
|
||||
TAP version 13
|
||||
# Subtest: 3e copy migrates through 3f to 3g preserving every old column/row and adding null spec citations
|
||||
ok 1 - 3e copy migrates through 3f to 3g preserving every old column/row and adding null spec citations
|
||||
---
|
||||
duration_ms: 88.005873
|
||||
type: 'test'
|
||||
...
|
||||
1..1
|
||||
# tests 1
|
||||
# suites 0
|
||||
# pass 1
|
||||
# fail 0
|
||||
# cancelled 0
|
||||
# skipped 0
|
||||
# todo 0
|
||||
# duration_ms 158.79729
|
||||
@@ -0,0 +1 @@
|
||||
["timeout", "-k", "10", "122", "node", "--test", "--test-reporter=tap", "packages/bus/tests/tester-writes.test.mjs"]
|
||||
@@ -0,0 +1,63 @@
|
||||
TAP version 13
|
||||
# organization: {"event":"reload-needs-restart","business":"demo"}
|
||||
# organization: {"event":"reload-needs-restart","business":"demo"}
|
||||
# organization: {"event":"reload-needs-restart","business":"demo"}
|
||||
# organization: {"event":"reload-needs-restart","business":"demo"}
|
||||
# organization: {"event":"reload-needs-restart","business":"demo"}
|
||||
# Subtest: row 175: TESTER_VERBS and the organization branch tester set are pinned
|
||||
ok 1 - row 175: TESTER_VERBS and the organization branch tester set are pinned
|
||||
---
|
||||
duration_ms: 1.228104
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 175: each of the six reads as the tester deep-equals the human read
|
||||
ok 2 - row 175: each of the six reads as the tester deep-equals the human read
|
||||
---
|
||||
duration_ms: 66.259871
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 175: W1-W3 as the tester land with receipt actor tester; the human still logs the human
|
||||
ok 3 - row 175: W1-W3 as the tester land with receipt actor tester; the human still logs the human
|
||||
---
|
||||
duration_ms: 71.522454
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 175: W2 as the tester refuses credentials, protected definitions, human, tester and bus.tester, and changes nothing
|
||||
ok 4 - row 175: W2 as the tester refuses credentials, protected definitions, human, tester and bus.tester, and changes nothing
|
||||
---
|
||||
duration_ms: 61.180737
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 175: the human-only actions refuse a tester tester-refused, and the file and store stay as they were
|
||||
ok 5 - row 175: the human-only actions refuse a tester tester-refused, and the file and store stay as they were
|
||||
---
|
||||
duration_ms: 59.981658
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 175: W4 as the tester writes by tester and keeps every name check
|
||||
ok 6 - row 175: W4 as the tester writes by tester and keeps every name check
|
||||
---
|
||||
duration_ms: 17.177062
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 175: W6 as the tester records created_by tester; the human records the human
|
||||
ok 7 - row 175: W6 as the tester records created_by tester; the human records the human
|
||||
---
|
||||
duration_ms: 12.161058
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 175: with bus.tester unset or not exactly true no tester binds, so no read or write runs
|
||||
ok 8 - row 175: with bus.tester unset or not exactly true no tester binds, so no read or write runs
|
||||
---
|
||||
duration_ms: 45.917174
|
||||
type: 'test'
|
||||
...
|
||||
1..8
|
||||
# tests 8
|
||||
# suites 0
|
||||
# pass 8
|
||||
# fail 0
|
||||
# cancelled 0
|
||||
# skipped 0
|
||||
# todo 0
|
||||
# duration_ms 454.820949
|
||||
@@ -0,0 +1 @@
|
||||
["timeout", "-k", "10", "121", "node", "--test", "--test-reporter=tap", "packages/bus/tests/thread-claims.test.mjs"]
|
||||
@@ -0,0 +1,46 @@
|
||||
TAP version 13
|
||||
# Subtest: T1: the human and the reader see a held thread claim; agents still lists the role only
|
||||
ok 1 - T1: the human and the reader see a held thread claim; agents still lists the role only
|
||||
---
|
||||
duration_ms: 25.941182
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: T2: a released or revoked thread claim is not listed, though its thread has an earlier claim row
|
||||
ok 2 - T2: a released or revoked thread claim is not listed, though its thread has an earlier claim row
|
||||
---
|
||||
duration_ms: 22.668306
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: T3: a role session refuses human-required and the tester refuses tester-refused
|
||||
ok 3 - T3: a role session refuses human-required and the tester refuses tester-refused
|
||||
---
|
||||
duration_ms: 19.732425
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: T4: agents answers each session the same before and after a thread run claims
|
||||
ok 4 - T4: agents answers each session the same before and after a thread run claims
|
||||
---
|
||||
duration_ms: 19.442262
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: T5: the result carries neither the thread name a user wrote nor a message body
|
||||
ok 5 - T5: the result carries neither the thread name a user wrote nor a message body
|
||||
---
|
||||
duration_ms: 18.111967
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: T6: two held sessions of one thread list as two rows, each its session's latest claim
|
||||
ok 6 - T6: two held sessions of one thread list as two rows, each its session's latest claim
|
||||
---
|
||||
duration_ms: 22.066921
|
||||
type: 'test'
|
||||
...
|
||||
1..6
|
||||
# tests 6
|
||||
# suites 0
|
||||
# pass 6
|
||||
# fail 0
|
||||
# cancelled 0
|
||||
# skipped 0
|
||||
# todo 0
|
||||
# duration_ms 213.201573
|
||||
@@ -0,0 +1 @@
|
||||
["timeout", "-k", "10", "122", "node", "--test", "--test-reporter=tap", "packages/bus/tests/thread-migration.test.mjs"]
|
||||
@@ -0,0 +1,28 @@
|
||||
TAP version 13
|
||||
# Subtest: REQ-THREAD-1 REQ-ORG-2: the 3d→3e migration adds the thread tables and leaves messages from before threads as written
|
||||
ok 1 - REQ-THREAD-1 REQ-ORG-2: the 3d→3e migration adds the thread tables and leaves messages from before threads as written
|
||||
---
|
||||
duration_ms: 95.812559
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: REQ-THREAD-1: a 3d bus with a changed schema is refused and keeps its version and tables
|
||||
ok 2 - REQ-THREAD-1: a 3d bus with a changed schema is refused and keeps its version and tables
|
||||
---
|
||||
duration_ms: 46.076971
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: REQ-THREAD-1: the offline command prints the kept-message counts before the ready line
|
||||
ok 3 - REQ-THREAD-1: the offline command prints the kept-message counts before the ready line
|
||||
---
|
||||
duration_ms: 120.706356
|
||||
type: 'test'
|
||||
...
|
||||
1..3
|
||||
# tests 3
|
||||
# suites 0
|
||||
# pass 3
|
||||
# fail 0
|
||||
# cancelled 0
|
||||
# skipped 0
|
||||
# todo 0
|
||||
# duration_ms 349.963327
|
||||
@@ -0,0 +1 @@
|
||||
["timeout", "-k", "10", "124", "node", "--test", "--test-reporter=tap", "packages/bus/tests/threads.test.mjs"]
|
||||
@@ -0,0 +1,112 @@
|
||||
TAP version 13
|
||||
# Subtest: REQ-ROLE-2 REQ-THREAD-1: one holder per thread, through the broker and the trigger
|
||||
ok 1 - REQ-ROLE-2 REQ-THREAD-1: one holder per thread, through the broker and the trigger
|
||||
---
|
||||
duration_ms: 40.152005
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: REQ-ROLE-2 REQ-THREAD-1: the 3e triggers refuse writes that skip the broker
|
||||
ok 2 - REQ-ROLE-2 REQ-THREAD-1: the 3e triggers refuse writes that skip the broker
|
||||
---
|
||||
duration_ms: 64.507026
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: REQ-MSG-1: a message to or from the assistant names its thread, or is refused
|
||||
ok 3 - REQ-MSG-1: a message to or from the assistant names its thread, or is refused
|
||||
---
|
||||
duration_ms: 32.616267
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: REQ-MSG-1: the chief of staff's reply comes back to the thread that sent the work
|
||||
ok 4 - REQ-MSG-1: the chief of staff's reply comes back to the thread that sent the work
|
||||
---
|
||||
duration_ms: 760.671835
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: REQ-MSG-1: a reply can't carry one thread instance's thread to another thread instance
|
||||
ok 5 - REQ-MSG-1: a reply can't carry one thread instance's thread to another thread instance
|
||||
---
|
||||
duration_ms: 22.131461
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: REQ-THREAD-1 REQ-USER-2: one thread's messages never reach another thread's holder
|
||||
ok 6 - REQ-THREAD-1 REQ-USER-2: one thread's messages never reach another thread's holder
|
||||
---
|
||||
duration_ms: 30.735682
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: REQ-LAUNCH-1: a message to a thread with no holder waits, and the next holder gets it
|
||||
ok 7 - REQ-LAUNCH-1: a message to a thread with no holder waits, and the next holder gets it
|
||||
---
|
||||
duration_ms: 41.300812
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: REQ-THREAD-2 REQ-LAUNCH-1: threadIdle releases only a thread with nothing waiting, and only for its holder
|
||||
ok 8 - REQ-THREAD-2 REQ-LAUNCH-1: threadIdle releases only a thread with nothing waiting, and only for its holder
|
||||
---
|
||||
duration_ms: 33.556564
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: REQ-THREAD-2 REQ-LAUNCH-1: a message delivered to a run that ended unread doesn't hold up the next holder
|
||||
ok 9 - REQ-THREAD-2 REQ-LAUNCH-1: a message delivered to a run that ended unread doesn't hold up the next holder
|
||||
---
|
||||
duration_ms: 28.199577
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: REQ-ROLE-2 REQ-THREAD-1 Q169: a role.revoke the human approved ends every thread run of the assistant
|
||||
ok 10 - REQ-ROLE-2 REQ-THREAD-1 Q169: a role.revoke the human approved ends every thread run of the assistant
|
||||
---
|
||||
duration_ms: 25.874138
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: Q169 REQ-USER-2: assistant.stop ends the human's own assistant thread runs, and only the human's
|
||||
ok 11 - Q169 REQ-USER-2: assistant.stop ends the human's own assistant thread runs, and only the human's
|
||||
---
|
||||
duration_ms: 38.551572
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: REQ-USER-2: the human verbs refuse another owner's thread
|
||||
ok 12 - REQ-USER-2: the human verbs refuse another owner's thread
|
||||
---
|
||||
duration_ms: 29.47369
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: REQ-THREAD-1: thread.create refuses when the business has no thread instance or more than one
|
||||
ok 13 - REQ-THREAD-1: thread.create refuses when the business has no thread instance or more than one
|
||||
---
|
||||
duration_ms: 24.245997
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: REQ-ORG-2: projects and threads are named once, and the repo names a business project
|
||||
ok 14 - REQ-ORG-2: projects and threads are named once, and the repo names a business project
|
||||
---
|
||||
duration_ms: 24.168059
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: REQ-THREAD-2: thread.messages returns the thread's history in pages and writes nothing
|
||||
ok 15 - REQ-THREAD-2: thread.messages returns the thread's history in pages and writes nothing
|
||||
---
|
||||
duration_ms: 81.784484
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: project.create refuses a repository name without its matching repo before any write
|
||||
ok 16 - project.create refuses a repository name without its matching repo before any write
|
||||
---
|
||||
duration_ms: 17.347949
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: project.create keeps unrelated names with and without a repository
|
||||
ok 17 - project.create keeps unrelated names with and without a repository
|
||||
---
|
||||
duration_ms: 12.922753
|
||||
type: 'test'
|
||||
...
|
||||
1..17
|
||||
# tests 17
|
||||
# suites 0
|
||||
# pass 17
|
||||
# fail 0
|
||||
# cancelled 0
|
||||
# skipped 0
|
||||
# todo 0
|
||||
# duration_ms 1405.299929
|
||||
@@ -0,0 +1 @@
|
||||
["timeout", "-k", "10", "121", "node", "--test", "--test-reporter=tap", "packages/bus/tests/usage-migration.test.mjs"]
|
||||
@@ -0,0 +1,16 @@
|
||||
TAP version 13
|
||||
# Subtest: REQ-LIMIT-4 3g copy migrates through 3h, 3i, 3j and 3k to 3l preserving every old column, row and sequence; new usage table is empty
|
||||
ok 1 - REQ-LIMIT-4 3g copy migrates through 3h, 3i, 3j and 3k to 3l preserving every old column, row and sequence; new usage table is empty
|
||||
---
|
||||
duration_ms: 84.439926
|
||||
type: 'test'
|
||||
...
|
||||
1..1
|
||||
# tests 1
|
||||
# suites 0
|
||||
# pass 1
|
||||
# fail 0
|
||||
# cancelled 0
|
||||
# skipped 0
|
||||
# todo 0
|
||||
# duration_ms 158.042094
|
||||
@@ -0,0 +1 @@
|
||||
["timeout", "-k", "10", "900", "node", "--test", "--test-reporter=tap", "packages/cli/tests/access.test.mjs"]
|
||||
@@ -0,0 +1,142 @@
|
||||
TAP version 13
|
||||
# Subtest: list prints the revision and the users
|
||||
ok 1 - list prints the revision and the users
|
||||
---
|
||||
duration_ms: 36.418344
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: grant writes one revision up, a receipt line, and the id in the file
|
||||
ok 2 - grant writes one revision up, a receipt line, and the id in the file
|
||||
---
|
||||
duration_ms: 36.033768
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: a viewer grant writes the viewer level, one revision up
|
||||
ok 3 - a viewer grant writes the viewer level, one revision up
|
||||
---
|
||||
duration_ms: 31.803819
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: a second write appends a second receipt and leaves the first intact
|
||||
ok 4 - a second write appends a second receipt and leaves the first intact
|
||||
---
|
||||
duration_ms: 65.794139
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: a stale revision refuses with revision-conflict and writes nothing
|
||||
ok 5 - a stale revision refuses with revision-conflict and writes nothing
|
||||
---
|
||||
duration_ms: 58.183038
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: a live holder's lock refuses and leaves the file and the lock alone
|
||||
ok 6 - a live holder's lock refuses and leaves the file and the lock alone
|
||||
---
|
||||
duration_ms: 26.998476
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: an empty or unreadable lock refuses, since its holder may still be writing
|
||||
ok 7 - an empty or unreadable lock refuses, since its holder may still be writing
|
||||
---
|
||||
duration_ms: 64.366519
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: a lock left by a dead pid refuses, names the pid, and is not reclaimed
|
||||
ok 8 - a lock left by a dead pid refuses, names the pid, and is not reclaimed
|
||||
---
|
||||
duration_ms: 53.073637
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: a failed rename leaves the old bytes, removes the temp file, and writes no receipt
|
||||
ok 9 - a failed rename leaves the old bytes, removes the temp file, and writes no receipt
|
||||
---
|
||||
duration_ms: 26.105967
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: a group-writable access file refuses with exit 3, names the file, and changes nothing
|
||||
ok 10 - a group-writable access file refuses with exit 3, names the file, and changes nothing
|
||||
---
|
||||
duration_ms: 29.744328
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: an agent or tester caller is refused before the context or the access file is read
|
||||
ok 11 - an agent or tester caller is refused before the context or the access file is read
|
||||
---
|
||||
duration_ms: 1.259065
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: the lock is mode 0600 while held and removed after a refused write
|
||||
ok 12 - the lock is mode 0600 while held and removed after a refused write
|
||||
---
|
||||
duration_ms: 32.115779
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: a grant naming an unknown instance is refused before any write
|
||||
ok 13 - a grant naming an unknown instance is refused before any write
|
||||
---
|
||||
duration_ms: 31.939509
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: a project name resolves to its id at grant time
|
||||
ok 14 - a project name resolves to its id at grant time
|
||||
---
|
||||
duration_ms: 33.537247
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: an unknown project name refuses before any write
|
||||
ok 15 - an unknown project name refuses before any write
|
||||
---
|
||||
duration_ms: 43.774544
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: revoke removes the user's grants and leaves a revision behind
|
||||
ok 16 - revoke removes the user's grants and leaves a revision behind
|
||||
---
|
||||
duration_ms: 90.540273
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: revoke of a user with no grant refuses and writes nothing
|
||||
ok 17 - revoke of a user with no grant refuses and writes nothing
|
||||
---
|
||||
duration_ms: 33.988188
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: an agent caller is refused before the bus is asked
|
||||
ok 18 - an agent caller is refused before the bus is asked
|
||||
---
|
||||
duration_ms: 1.310469
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: --tester is refused on every verb before the bus is asked
|
||||
ok 19 - --tester is refused on every verb before the bus is asked
|
||||
---
|
||||
duration_ms: 1.350115
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: a bus that refuses the human proof blocks the write
|
||||
ok 20 - a bus that refuses the human proof blocks the write
|
||||
---
|
||||
duration_ms: 39.519025
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: the context reads console.sso subjects and the business files, and peers stay empty
|
||||
ok 21 - the context reads console.sso subjects and the business files, and peers stay empty
|
||||
---
|
||||
duration_ms: 31.178142
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: the real human-cli, run from agent ancestry, refuses and writes nothing
|
||||
ok 22 - the real human-cli, run from agent ancestry, refuses and writes nothing
|
||||
---
|
||||
duration_ms: 5173.415666
|
||||
type: 'test'
|
||||
...
|
||||
1..22
|
||||
# tests 22
|
||||
# suites 0
|
||||
# pass 22
|
||||
# fail 0
|
||||
# cancelled 0
|
||||
# skipped 0
|
||||
# todo 0
|
||||
# duration_ms 6111.578667
|
||||
@@ -0,0 +1 @@
|
||||
["timeout", "-k", "10", "900", "node", "--test", "--test-reporter=tap", "packages/cli/tests/app.test.mjs"]
|
||||
@@ -0,0 +1,190 @@
|
||||
TAP version 13
|
||||
# Subtest: every screen and overlay fits 120x36, 80x24 and the narrow layout, row for row
|
||||
ok 1 - every screen and overlay fits 120x36, 80x24 and the narrow layout, row for row
|
||||
---
|
||||
duration_ms: 1532.643825
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: width counts terminal cells: wide CJK and emoji 2, U+FE0F after a one-cell base 1, marks 0
|
||||
ok 2 - width counts terminal cells: wide CJK and emoji 2, U+FE0F after a one-cell base 1, marks 0
|
||||
---
|
||||
duration_ms: 86.568954
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: broker text is shown, never interpreted: no raw control character or bidi override reaches the terminal
|
||||
ok 3 - broker text is shown, never interpreted: no raw control character or bidi override reaches the terminal
|
||||
---
|
||||
duration_ms: 176.767315
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: NO_COLOR: no escape codes, except reverse video on the selected row
|
||||
ok 4 - NO_COLOR: no escape codes, except reverse video on the selected row
|
||||
---
|
||||
duration_ms: 279.648544
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: 1-9 shows the decide flow's own lines and question; only y resolves
|
||||
ok 5 - 1-9 shows the decide flow's own lines and question; only y resolves
|
||||
---
|
||||
duration_ms: 70.224731
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: the app shows the same decide text as mosaic decide
|
||||
ok 6 - the app shows the same decide text as mosaic decide
|
||||
---
|
||||
duration_ms: 29.098485
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: any key but y or Y at the question answers No; nothing is sent
|
||||
ok 7 - any key but y or Y at the question answers No; nothing is sent
|
||||
---
|
||||
duration_ms: 245.313167
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: below 40x10 the question is hidden, so every key answers it No, y included (Filbert R3)
|
||||
ok 8 - below 40x10 the question is hidden, so every key answers it No, y included (Filbert R3)
|
||||
---
|
||||
duration_ms: 84.365501
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: under 40 columns a tall terminal shows the too-small screen even where the decide box would fit; y sends nothing (Filbert N10)
|
||||
ok 9 - under 40 columns a tall terminal shows the too-small screen even where the decide box would fit; y sends nothing (Filbert N10)
|
||||
---
|
||||
duration_ms: 322.43389
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: a hidden decide box names the way out, and the status line under it does not promise y (Filbert N12)
|
||||
ok 10 - a hidden decide box names the way out, and the status line under it does not promise y (Filbert N12)
|
||||
---
|
||||
duration_ms: 41.175879
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: a throw while answering the question goes to crash, sends nothing and leaves no job pending
|
||||
ok 11 - a throw while answering the question goes to crash, sends nothing and leaves no job pending
|
||||
---
|
||||
duration_ms: 26.253511
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: type-ahead never answers the question: a paste, keys typed before it is drawn, keys inside askMs
|
||||
ok 12 - type-ahead never answers the question: a paste, keys typed before it is drawn, keys inside askMs
|
||||
---
|
||||
duration_ms: 471.702899
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: quitting at the question answers No and sends nothing, armed or not
|
||||
ok 13 - quitting at the question answers No and sends nothing, armed or not
|
||||
---
|
||||
duration_ms: 53.482536
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: a timer tick reads nothing under an overlay, never answers the question, and keeps a resolved status
|
||||
ok 14 - a timer tick reads nothing under an overlay, never answers the question, and keeps a resolved status
|
||||
---
|
||||
duration_ms: 42.586629
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: a long question is cut inside the question; the action, target, choice and prompt stay (Dewey B1)
|
||||
ok 15 - a long question is cut inside the question; the action, target, choice and prompt stay (Dewey B1)
|
||||
---
|
||||
duration_ms: 57.120873
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: a decide box too big for the terminal says so, and every key answers it No, y included (Dewey B1, round 3)
|
||||
ok 16 - a decide box too big for the terminal says so, and every key answers it No, y included (Dewey B1, round 3)
|
||||
---
|
||||
duration_ms: 413.847115
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: at every size the decide box shows each line y depends on, or says it is hidden
|
||||
ok 17 - at every size the decide box shows each line y depends on, or says it is hidden
|
||||
---
|
||||
duration_ms: 10350.99217
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: outcome unknown: the CLI's sentence, no retry, then the trail or a re-read
|
||||
ok 18 - outcome unknown: the CLI's sentence, no retry, then the trail or a re-read
|
||||
---
|
||||
duration_ms: 85.759006
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: refused and failed reads keep the last list, marked stale; a refused decide says refused
|
||||
ok 19 - refused and failed reads keep the last list, marked stale; a refused decide says refused
|
||||
---
|
||||
duration_ms: 42.603372
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: help or a detail box cut to fit keeps its last line, Esc included (Dewey)
|
||||
ok 20 - help or a detail box cut to fit keeps its last line, Esc included (Dewey)
|
||||
---
|
||||
duration_ms: 33.51499
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: keys: views, moving, trail of a selection, the command line, help and quit
|
||||
ok 21 - keys: views, moving, trail of a selection, the command line, help and quit
|
||||
---
|
||||
duration_ms: 114.836631
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: one option: the status line says Press 1, not 1-1
|
||||
ok 22 - one option: the status line says Press 1, not 1-1
|
||||
---
|
||||
duration_ms: 29.837064
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: no business: the app says so and :business picks one
|
||||
ok 23 - no business: the app says so and :business picks one
|
||||
---
|
||||
duration_ms: 18.022254
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: mosaic with no argument: exit 3 in an agent run, exit 4 with the usage off a terminal, the app on one
|
||||
ok 24 - mosaic with no argument: exit 3 in an agent run, exit 4 with the usage off a terminal, the app on one
|
||||
---
|
||||
duration_ms: 2.738309
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: scripts/mosaic with no argument reaches the app entry; the seat usage it printed before has not drifted
|
||||
ok 25 - scripts/mosaic with no argument reaches the app entry; the seat usage it printed before has not drifted
|
||||
---
|
||||
duration_ms: 249.788143
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: strings to keep exactly live once, in the decide flow and the transport; the app does not restate them
|
||||
ok 26 - strings to keep exactly live once, in the decide flow and the transport; the app does not restate them
|
||||
---
|
||||
duration_ms: 0.606502
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: decide with --note still asks; a No sends nothing
|
||||
ok 27 - decide with --note still asks; a No sends nothing
|
||||
---
|
||||
duration_ms: 19.773121
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: the app's business comes from a live bus host only
|
||||
ok 28 - the app's business comes from a live bus host only
|
||||
---
|
||||
duration_ms: 1.843111
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: runApp leaves the terminal as it found it on q, end of input, SIGTERM, SIGINT, SIGHUP and an error, the first frame's included
|
||||
ok 29 - runApp leaves the terminal as it found it on q, end of input, SIGTERM, SIGINT, SIGHUP and an error, the first frame's included
|
||||
---
|
||||
duration_ms: 14.892061
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: draw is pure: same state, same frame
|
||||
ok 30 - draw is pure: same state, same frame
|
||||
---
|
||||
duration_ms: 1.02984
|
||||
type: 'test'
|
||||
...
|
||||
1..30
|
||||
# tests 30
|
||||
# suites 0
|
||||
# pass 30
|
||||
# fail 0
|
||||
# cancelled 0
|
||||
# skipped 0
|
||||
# todo 0
|
||||
# duration_ms 15067.019043
|
||||
@@ -0,0 +1 @@
|
||||
["timeout", "-k", "10", "900", "node", "--test", "--test-reporter=tap", "packages/cli/tests/boot-status.test.mjs"]
|
||||
@@ -0,0 +1,28 @@
|
||||
TAP version 13
|
||||
# Subtest: recordBootRefused keeps the last good load across refusals; recordBootOk clears the refusal
|
||||
ok 1 - recordBootRefused keeps the last good load across refusals; recordBootOk clears the refusal
|
||||
---
|
||||
duration_ms: 3.362938
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: an unknown key and a JSON syntax error each leave the bus down with the reason and path in the status
|
||||
ok 2 - an unknown key and a JSON syntax error each leave the bus down with the reason and path in the status
|
||||
---
|
||||
duration_ms: 791.414465
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: a missing file is recorded too, and a valid file clears the status on the next start
|
||||
ok 3 - a missing file is recorded too, and a valid file clears the status on the next start
|
||||
---
|
||||
duration_ms: 689.6287
|
||||
type: 'test'
|
||||
...
|
||||
1..3
|
||||
# tests 3
|
||||
# suites 0
|
||||
# pass 3
|
||||
# fail 0
|
||||
# cancelled 0
|
||||
# skipped 0
|
||||
# todo 0
|
||||
# duration_ms 1602.291306
|
||||
@@ -0,0 +1 @@
|
||||
["timeout", "-k", "10", "418", "node", "--test", "--test-reporter=tap", "packages/cli/tests/case1-accept.test.mjs"]
|
||||
@@ -0,0 +1,214 @@
|
||||
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: 980.909502
|
||||
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: 13838.500394
|
||||
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: 2243.132115
|
||||
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: 3123.981452
|
||||
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: 2057.85553
|
||||
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: 11022.472843
|
||||
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: 14323.985846
|
||||
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: 626.423511
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row253 C4 P10 inner reason holds under both sudo models
|
||||
ok 9 - row253 C4 P10 inner reason holds under both sudo models
|
||||
---
|
||||
duration_ms: 6213.425224
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row253 C4 P10 outer reason holds under both sudo models
|
||||
ok 10 - row253 C4 P10 outer reason holds under both sudo models
|
||||
---
|
||||
duration_ms: 9596.158652
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row253 C4 P10 overflow reason holds under both sudo models
|
||||
ok 11 - row253 C4 P10 overflow reason holds under both sudo models
|
||||
---
|
||||
duration_ms: 2129.054092
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: every check passing exits 0, with each P mark and counts that match the lines
|
||||
ok 12 - row 195 accept: every check passing exits 0, with each P mark and counts that match the lines
|
||||
---
|
||||
duration_ms: 1030.711311
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: exits 1 with each F check failing alone, and its line names it
|
||||
ok 13 - row 195 accept: exits 1 with each F check failing alone, and its line names it
|
||||
---
|
||||
duration_ms: 10363.436722
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: F3 fails on exit 0 with no reply line, and its evidence takes talk's error
|
||||
ok 14 - row 195 accept: F3 fails on exit 0 with no reply line, and its evidence takes talk's error
|
||||
---
|
||||
duration_ms: 1822.802284
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: F1 fails on a unit that isn't active or isn't User=mosaic
|
||||
ok 15 - row 195 accept: F1 fails on a unit that isn't active or isn't User=mosaic
|
||||
---
|
||||
duration_ms: 1663.378092
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: F2 fails when healthz doesn't answer and when another pid holds the port
|
||||
ok 16 - row 195 accept: F2 fails when healthz doesn't answer and when another pid holds the port
|
||||
---
|
||||
duration_ms: 1691.124523
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: F5 fails on unpriv_bwrap (enforce), on complain and on a trailing space
|
||||
ok 17 - row 195 accept: F5 fails on unpriv_bwrap (enforce), on complain and on a trailing space
|
||||
---
|
||||
duration_ms: 3431.279464
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: F5 fails with no bwrap of mosaic's, and passes on comm alone
|
||||
ok 18 - row 195 accept: F5 fails with no bwrap of mosaic's, and passes on comm alone
|
||||
---
|
||||
duration_ms: 1728.779323
|
||||
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 19 - row 195 accept: F6 fails on a stub that prints nothing, on a path outside claude-<pin> and on a .. segment
|
||||
---
|
||||
duration_ms: 2796.343556
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: F7 fails on two live PM launches, one for another business, and no launch.by
|
||||
ok 20 - row 195 accept: F7 fails on two live PM launches, one for another business, and no launch.by
|
||||
---
|
||||
duration_ms: 2576.75183
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: F8 fails on 0640, on another owner and on a symlink, and never prints the credential
|
||||
ok 21 - row 195 accept: F8 fails on 0640, on another owner and on a symlink, and never prints the credential
|
||||
---
|
||||
duration_ms: 2952.460918
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: F9 fails on another owner, a group-writable mode and a number for the flag
|
||||
ok 22 - row 195 accept: F9 fails on another owner, a group-writable mode and a number for the flag
|
||||
---
|
||||
duration_ms: 2895.06599
|
||||
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 23 - row 195 accept: F9 won't run --node as root off the pin path or with a writable directory above it
|
||||
---
|
||||
duration_ms: 2480.803521
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: F11 fails on one *.json under discord/ and passes on an empty directory
|
||||
ok 24 - row 195 accept: F11 fails on one *.json under discord/ and passes on an empty directory
|
||||
---
|
||||
duration_ms: 1659.210989
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: each P check reports unnamed on its fault, and the exit stays 0
|
||||
ok 25 - row 195 accept: each P check reports unnamed on its fault, and the exit stays 0
|
||||
---
|
||||
duration_ms: 8054.992104
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: P2 is unnamed with a supplementary group, and P5 names docker
|
||||
ok 26 - row 195 accept: P2 is unnamed with a supplementary group, and P5 names docker
|
||||
---
|
||||
duration_ms: 1800.23175
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: P5 is closed with no jarvis account, and P2 with an empty authorized_keys
|
||||
ok 27 - row 195 accept: P5 is closed with no jarvis account, and P2 with an empty authorized_keys
|
||||
---
|
||||
duration_ms: 1011.860363
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: P9 is unnamed once for each item missing
|
||||
ok 28 - row 195 accept: P9 is unnamed once for each item missing
|
||||
---
|
||||
duration_ms: 4709.458028
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row253 accept: P10 fails its observation with another peer; P11 with the unit disabled
|
||||
ok 29 - row253 accept: P10 fails its observation with another peer; P11 with the unit disabled
|
||||
---
|
||||
duration_ms: 1758.580533
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: every P check unnamed together still exits 0
|
||||
ok 30 - row 195 accept: every P check unnamed together still exits 0
|
||||
---
|
||||
duration_ms: 627.052274
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: a bad args file refuses with exit 2 before any check, each for its own reason
|
||||
ok 31 - row 195 accept: a bad args file refuses with exit 2 before any check, each for its own reason
|
||||
---
|
||||
duration_ms: 132.044699
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: usage errors and a run without --root as a user exit 2
|
||||
ok 32 - row 195 accept: usage errors and a run without --root as a user exit 2
|
||||
---
|
||||
duration_ms: 14.941784
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: every in-instance call goes through sudo -u mosaic -H env PATH=<node dir>:...
|
||||
ok 33 - row 195 accept: every in-instance call goes through sudo -u mosaic -H env PATH=<node dir>:...
|
||||
---
|
||||
duration_ms: 897.107512
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 195 accept: the host check runs with --check and never --enforce
|
||||
ok 34 - row 195 accept: the host check runs with --check and never --enforce
|
||||
---
|
||||
duration_ms: 883.694618
|
||||
type: 'test'
|
||||
...
|
||||
1..34
|
||||
# tests 34
|
||||
# suites 0
|
||||
# pass 34
|
||||
# fail 0
|
||||
# cancelled 0
|
||||
# skipped 0
|
||||
# todo 0
|
||||
# duration_ms 123268.643368
|
||||
@@ -0,0 +1 @@
|
||||
["timeout", "-k", "10", "900", "node", "--test", "--test-reporter=tap", "packages/cli/tests/case1-hostcheck.test.mjs"]
|
||||
@@ -0,0 +1,106 @@
|
||||
TAP version 13
|
||||
# Subtest: row 240 check: exits 0 with all seven items and a note that bubblewrap is the install pin
|
||||
ok 1 - row 240 check: exits 0 with all seven items and a note that bubblewrap is the install pin
|
||||
---
|
||||
duration_ms: 50.319832
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 240 check: exits 1 with each item failing alone, and its line names it
|
||||
ok 2 - row 240 check: exits 1 with each item failing alone, and its line names it
|
||||
---
|
||||
duration_ms: 286.435607
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 240 check: item 1 fails when a package owns the profile, when dpkg -S errs, or with no pin
|
||||
ok 3 - row 240 check: item 1 fails when a package owns the profile, when dpkg -S errs, or with no pin
|
||||
---
|
||||
duration_ms: 132.253907
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 240 check: item 2 fails on a loaded mosaic-bwrap, a missing unpriv_bwrap or a failed aa-status
|
||||
ok 4 - row 240 check: item 2 fails on a loaded mosaic-bwrap, a missing unpriv_bwrap or a failed aa-status
|
||||
---
|
||||
duration_ms: 105.675172
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 240 check: item 3 fails on a second file naming bwrap as a word, /{usr/,}bin/bwrap included
|
||||
ok 5 - row 240 check: item 3 fails on a second file naming bwrap as a word, /{usr/,}bin/bwrap included
|
||||
---
|
||||
duration_ms: 165.964621
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 240 check: item 4 reads the label under the units' no-new-privs and matches it exactly
|
||||
ok 6 - row 240 check: item 4 reads the label under the units' no-new-privs and matches it exactly
|
||||
---
|
||||
duration_ms: 189.56662
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 240 check: item 5 needs the statoverride and stat to agree
|
||||
ok 7 - row 240 check: item 5 needs the statoverride and stat to agree
|
||||
---
|
||||
duration_ms: 46.475561
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 240 check: item 6 fails on protected_hardlinks 0; item 7 fails with the floor at 732 and reads 1023 with no unit
|
||||
ok 8 - row 240 check: item 6 fails on protected_hardlinks 0; item 7 fails with the floor at 732 and reads 1023 with no unit
|
||||
---
|
||||
duration_ms: 335.031237
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 240 check: a bubblewrap version other than the install pin is a note, not a failure
|
||||
ok 9 - row 240 check: a bubblewrap version other than the install pin is a note, not a failure
|
||||
---
|
||||
duration_ms: 47.69351
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 240 enforce: a pass with no DRIFT changes nothing and exits 0
|
||||
ok 10 - row 240 enforce: a pass with no DRIFT changes nothing and exits 0
|
||||
---
|
||||
duration_ms: 52.404871
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 240 enforce: each failure exits 0, unloads the profile, closes bwrap, writes DRIFT and one log line
|
||||
ok 11 - row 240 enforce: each failure exits 0, unloads the profile, closes bwrap, writes DRIFT and one log line
|
||||
---
|
||||
duration_ms: 393.938281
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 240 enforce: with DRIFT present and every item passing, it still closes bwrap
|
||||
ok 12 - row 240 enforce: with DRIFT present and every item passing, it still closes bwrap
|
||||
---
|
||||
duration_ms: 54.758403
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 240 enforce: no unload when aa-status lists neither bwrap profile; never writes the statoverride
|
||||
ok 13 - row 240 enforce: no unload when aa-status lists neither bwrap profile; never writes the statoverride
|
||||
---
|
||||
duration_ms: 495.817198
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 240 upstream: a candidate whose profile differs prints the difference and exits 0
|
||||
ok 14 - row 240 upstream: a candidate whose profile differs prints the difference and exits 0
|
||||
---
|
||||
duration_ms: 73.504883
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 240 boot unit: a oneshot after apparmor and before the bus that runs --enforce
|
||||
ok 15 - row 240 boot unit: a oneshot after apparmor and before the bus that runs --enforce
|
||||
---
|
||||
duration_ms: 0.652154
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: row 240 pins and usage: the shipped pins are r6's, the script reads the pins beside it, and bad usage exits 2
|
||||
ok 16 - row 240 pins and usage: the shipped pins are r6's, the script reads the pins beside it, and bad usage exits 2
|
||||
---
|
||||
duration_ms: 48.194579
|
||||
type: 'test'
|
||||
...
|
||||
1..16
|
||||
# tests 16
|
||||
# suites 0
|
||||
# pass 16
|
||||
# fail 0
|
||||
# cancelled 0
|
||||
# skipped 0
|
||||
# todo 0
|
||||
# duration_ms 2621.785833
|
||||
@@ -0,0 +1 @@
|
||||
["timeout", "-k", "10", "900", "node", "--test", "--test-reporter=tap", "packages/cli/tests/case2-persona-import.test.mjs"]
|
||||
@@ -0,0 +1,94 @@
|
||||
TAP version 13
|
||||
# Subtest: stage takes each profile's SOUL.md byte for byte and prints the pairing with sizes and digests
|
||||
ok 1 - stage takes each profile's SOUL.md byte for byte and prints the pairing with sizes and digests
|
||||
---
|
||||
duration_ms: 70.554665
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: stage lists the per-channel prompts in all three places by name and byte count only
|
||||
ok 2 - stage lists the per-channel prompts in all three places by name and byte count only
|
||||
---
|
||||
duration_ms: 59.537005
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: a config key with a newline prints as one quoted line
|
||||
ok 3 - a config key with a newline prints as one quoted line
|
||||
---
|
||||
duration_ms: 62.157579
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: a read trace shows stage and the dry run open SOUL.md and config.yaml and never memory, sessions or secrets
|
||||
ok 4 - a read trace shows stage and the dry run open SOUL.md and config.yaml and never memory, sessions or secrets
|
||||
---
|
||||
duration_ms: 127.513349
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: the pairing refuses anything but two existing profiles naming Bean and Chet once each, and writes nothing
|
||||
ok 5 - the pairing refuses anything but two existing profiles naming Bean and Chet once each, and writes nothing
|
||||
---
|
||||
duration_ms: 469.331834
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: a profile with no persona refuses: no SOUL.md, a blank one, a symlink, not UTF-8
|
||||
ok 6 - a profile with no persona refuses: no SOUL.md, a blank one, a symlink, not UTF-8
|
||||
---
|
||||
duration_ms: 432.019542
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: the import applies C2-08's exported fence at its boundaries
|
||||
ok 7 - the import applies C2-08's exported fence at its boundaries
|
||||
---
|
||||
duration_ms: 433.829207
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: install writes 0600 persona files in 0700 directories whose digests match, and prints the vars
|
||||
ok 8 - install writes 0600 persona files in 0700 directories whose digests match, and prints the vars
|
||||
---
|
||||
duration_ms: 101.133736
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: install refuses an open or foreign staging file, a digest off the manifest and an existing persona
|
||||
ok 9 - install refuses an open or foreign staging file, a digest off the manifest and an existing persona
|
||||
---
|
||||
duration_ms: 570.81313
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: --dry-run writes nothing and prints only counts and the fence fault, two heading lines in a fixture counted
|
||||
ok 10 - --dry-run writes nothing and prints only counts and the fence fault, two heading lines in a fixture counted
|
||||
---
|
||||
duration_ms: 50.290632
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: --dry-run applies C2-08's fence: over it the fault prints, nothing is written and it exits 1
|
||||
ok 11 - --dry-run applies C2-08's fence: over it the fault prints, nothing is written and it exits 1
|
||||
---
|
||||
duration_ms: 94.286146
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: a directory made between the check and mkdir refuses by name, at stage and at install
|
||||
ok 12 - a directory made between the check and mkdir refuses by name, at stage and at install
|
||||
---
|
||||
duration_ms: 170.327466
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: --dry-run counts three lines naming a Hermes tool or channel and prints none of the words
|
||||
ok 13 - --dry-run counts three lines naming a Hermes tool or channel and prints none of the words
|
||||
---
|
||||
duration_ms: 52.373648
|
||||
type: 'test'
|
||||
...
|
||||
# Subtest: usage: stage needs one of --staging and --dry-run, install takes only its own options
|
||||
ok 14 - usage: stage needs one of --staging and --dry-run, install takes only its own options
|
||||
---
|
||||
duration_ms: 353.037721
|
||||
type: 'test'
|
||||
...
|
||||
1..14
|
||||
# tests 14
|
||||
# suites 0
|
||||
# pass 14
|
||||
# fail 0
|
||||
# cancelled 0
|
||||
# skipped 0
|
||||
# todo 0
|
||||
# duration_ms 3155.798424
|
||||
Loaded 100 of 335 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user