filbert: row 90 round 2 static review, full gate pending reserved slot
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
"""Full row 90 round 2 gate. Wait for Sage's slot-clear before executing."""
|
||||
import os, subprocess, signal, pathlib, json, hashlib, datetime
|
||||
root=pathlib.Path.home()/'filbert-scratch/r90-r2-review/wt'
|
||||
out=root.parent/'gate';out.mkdir(exist_ok=True)
|
||||
env=dict(os.environ,TMPDIR=str(pathlib.Path.home()/'filbert-scratch/tmp'),DOCKER_HOST='unix:///nonexistent.sock')
|
||||
seats=['darkwing','dewey','rocko','researcher','sage']
|
||||
other=[str(pathlib.Path.home()/f'{seat}-scratch') for seat in seats]+[str(pathlib.Path('/mnt/storage/scratch')/seat) for seat in seats]
|
||||
def quiet():
|
||||
busy=[]
|
||||
for p in pathlib.Path('/proc').iterdir():
|
||||
if not p.name.isdigit():continue
|
||||
try:
|
||||
cwd=str((p/'cwd').resolve(strict=True))
|
||||
if any(cwd==x or cwd.startswith(x+'/') for x in other):busy.append((p.name,cwd))
|
||||
except (OSError,RuntimeError):pass
|
||||
if busy:raise SystemExit('Other scratch processes active: '+repr(busy))
|
||||
def matches():
|
||||
m=pathlib.Path('/mnt/storage/src/mosaic-stack/agents/dewey/work/queue-90/r2/candidate-manifest.sha256')
|
||||
for line in m.read_text().splitlines():
|
||||
sha,path=line.split();assert hashlib.sha256((root/path).read_bytes()).hexdigest()==sha,path
|
||||
quiet();matches();rows=[]
|
||||
def run(cmd,cwd,log):
|
||||
quiet();start=datetime.datetime.now(datetime.timezone.utc).isoformat()
|
||||
with log.open('w') as f:
|
||||
p=subprocess.Popen(cmd,cwd=cwd,env=env,stdout=f,stderr=subprocess.STDOUT,start_new_session=True)
|
||||
try:p.wait(timeout=300);rc=p.returncode
|
||||
except subprocess.TimeoutExpired:
|
||||
try:os.killpg(p.pid,signal.SIGKILL)
|
||||
except ProcessLookupError:pass
|
||||
p.wait();rc='timeout'
|
||||
return rc,start
|
||||
for package in ['tasks','bus','harness','webui','cli','business','seat','control-board']:
|
||||
cwd=root/'packages'/package
|
||||
files=['tests/'] if package in ['seat','webui'] else [str(p.relative_to(cwd)) for p in sorted((cwd/'tests').glob('*.test.mjs'))]
|
||||
log=out/f'node-{package}.log';rc,start=run(['node','--test',*files],cwd,log)
|
||||
stats=[s for s in log.read_text().splitlines() if s.startswith(('ℹ tests ','ℹ pass ','ℹ fail ','# tests ','# pass ','# fail '))]
|
||||
row={'suite':package,'rc':rc,'started':start,'stats':stats};rows.append(row);print(json.dumps(row),flush=True)
|
||||
(out/'summary.json').write_text(json.dumps(rows,indent=2)+'\n')
|
||||
for script in sorted((root/'scripts').glob('test-*.sh')):
|
||||
log=out/f'{script.stem}.log';rc,start=run(['bash',str(script)],root,log)
|
||||
row={'suite':script.stem,'rc':rc,'started':start,'last':log.read_text().splitlines()[-1:]};rows.append(row);print(json.dumps(row),flush=True)
|
||||
(out/'summary.json').write_text(json.dumps(rows,indent=2)+'\n')
|
||||
matches();print('manifest 21/21 after full gate',flush=True)
|
||||
raise SystemExit(any(r['rc']!=0 for r in rows))
|
||||
@@ -0,0 +1,11 @@
|
||||
# Row 90 round 2 review, full gate pending
|
||||
|
||||
Candidate 95611274ff1c5d022f958f6158c5bde8f9482fa11dc6820cc749402ef326022b, 21 paths, detached base b8539480. Reconstructed under ~/filbert-scratch/r90-r2-review/wt with Dewey's r2 build.patch applied by git apply --index and node_modules symlinked. Manifest 21/21, no drift on candidate paths, no whitespace errors (static-receipt.json).
|
||||
|
||||
Static rebase and sandbox review complete, no blocking finding. Eighteen paths have exactly the same added/removed patch lines as round 1. verbs.test.mjs also has identical added/removed lines; its changed world import is context from row 63 (SCOPES retained). The README keeps both the requirement/request sentences and the project sentences, rewrapped. The new sandbox.mjs patch adds exactly one read-only RUNNER_FILES dependency, packages/tasks/src/requirements.mjs, as decision 127 authorizes.
|
||||
|
||||
The dependency chain is runner to client to broker to requirements.mjs. Importing requirements.mjs initializes constants and function declarations but does not load requirements.json. loadRequirements is called by the host Broker constructor and host task verbs; the runner constructs neither. The data file remains unmounted. RUNNER_FILES is still a reviewed explicit list rather than a directory bind, and sandbox.test.mjs's exact import-walk comparison covers the new dependency. Full runtime integration verification is still required; the prior twenty-path run's cli/seat failures demonstrate why static drift checks alone are insufficient.
|
||||
|
||||
Decision 127 requires every suite on this 21-path candidate, harness included. gate.py is prepared to run tasks, bus, harness, webui, cli, business, seat and control-board sequentially, then every scripts/test-*.sh, with DOCKER_HOST=unix:///nonexistent.sock throughout and both-root /proc cwd busy checks before every run. Its syntax was checked. No round 2 suite has been run by this review yet and no verdict is posted. The three round 1 follow-ups stay out of this candidate.
|
||||
|
||||
Slot authorization: Darkwing's row 91 run first, then Sage's row 69 landing gate, then this full row 90 gate, then Dewey's row 94. Sage will send gate-clear; do not infer authorization from a momentary quiet interval before that message. The next step is to run the prepared full gate on that clearance and report any failures before posting a verdict.
|
||||
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"candidate": "95611274ff1c5d022f958f6158c5bde8f9482fa11dc6820cc749402ef326022b",
|
||||
"base": "b8539480",
|
||||
"head_at_check": "c6711453b726f7628c388f2aa02e03afff464ca7",
|
||||
"manifest_matches": {
|
||||
"packages/bus/README.md": true,
|
||||
"packages/bus/src/broker.mjs": true,
|
||||
"packages/bus/tests/requirements.test.mjs": true,
|
||||
"packages/harness/src/bundle.mjs": true,
|
||||
"packages/harness/src/runner.mjs": true,
|
||||
"packages/harness/src/tools.mjs": true,
|
||||
"packages/harness/tests/bundle.test.mjs": true,
|
||||
"packages/harness/tests/runner.test.mjs": true,
|
||||
"packages/harness/tests/tools.test.mjs": true,
|
||||
"packages/seat/src/sandbox.mjs": true,
|
||||
"packages/tasks/README.md": true,
|
||||
"packages/tasks/requirements.json": true,
|
||||
"packages/tasks/src/requirements.mjs": true,
|
||||
"packages/tasks/src/verbs.mjs": true,
|
||||
"packages/tasks/tests/adapter.test.mjs": true,
|
||||
"packages/tasks/tests/fields.test.mjs": true,
|
||||
"packages/tasks/tests/requirements.test.mjs": true,
|
||||
"packages/tasks/tests/shapes.test.mjs": true,
|
||||
"packages/tasks/tests/sync.test.mjs": true,
|
||||
"packages/tasks/tests/verbs.test.mjs": true,
|
||||
"roles/pm.md": true
|
||||
},
|
||||
"drift_paths": []
|
||||
}
|
||||
Reference in New Issue
Block a user