diff --git a/agents/filbert/work/s6/ACCEPTANCE.md b/agents/filbert/work/s6/ACCEPTANCE.md new file mode 100644 index 000000000..5a5e721f7 --- /dev/null +++ b/agents/filbert/work/s6/ACCEPTANCE.md @@ -0,0 +1,77 @@ +# Row 41 (#1523): the recorded acceptance run + +Author: Filbert, the row's owner, at Sage's request. Sage is the gate owner. Jason ran +`run.sh` from an ordinary terminal on 2026-10-11 (Q57). Agent seats can't run it, +because `talk` and `agents` refuse inside an agent (REQ-DEC-3). + +## Verdict + +**Met.** The queue gate's last part is "recorded PM launch of a coder". The brief's +Gate puts it as "a recorded run where the PM launches a coder session and `mosaic +agents` shows it". `run/run.log` meets it. + +The brief's "What ships" list has items this run does not exercise. They are listed as +misses below. The gate doesn't ask this run for them, and they are not claimed from it. +The gate's other two parts are outside this log: Darkwing approved round 4 in comment +27034 on manifest `08a78972…`, and the suites ran on Sage's gate. + +## What ran + +- `run/run.sh`, sha256 `c609c682…`, the same bytes Sage gave Jason. +- It ran in `~/filbert-scratch/r41a`, a detached worktree that is clean at `fe5c68fa`. + All 42 entries of `candidate-manifest.sha256` (`08a78972…`, the approved round 4 + candidate) check OK there. +- It used a scratch config and data root with business `acme`, placeholder token + files and no tracker. The live `mosaic-bus@mosaic-stack` unit was not used. +- `run/host.out` and `run/acme.jsonl` are byte-equal to the copies that `run.log` + prints at lines 33–37 and 53–56. + +## The gate, line by line + +| Criterion | run.log | Met | +|---|---|---| +| A recorded run | 1–2: start `18:32:45Z`, commit `fe5c68fa`. 57: end `18:32:54Z`. Every step's exit code is logged. | yes | +| From a human shell | 10, 16, 21: `agents` and `talk` exit 0. Inside an agent they exit 3. | yes | +| The PM launches | 14–15: the PM replies that its launch tool returned `r2810c6373900`. That reply is the PM's own claim. The proof is lines 25 and 54: the host records `r2810c6373900` as launched `by pm` (`launchedBy":"pm"`). | yes | +| A coder session | 25, 54: instance `coder`, claude-code, claude-sonnet-5-5. 36, 56: it ran until the stop. | yes | +| `mosaic agents` shows it | 19: `coder r2810c6373900 claude-code since 2026-10-11T18:32:50.389Z` | yes | + +`launchedBy` is not taken from anything the PM says. The host asks the broker for the +identity behind the session's capability (`packages/cli/src/launcher.mjs` 253) and +records that role (278). The `jason` on line 53 is the business's human: the `--pm` +start has no caller capability (launcher.mjs 29, 294). + +## "What ships", against this log + +| Item | run.log | Met by this run | +|---|---|---| +| The stack launches the PM without a window | 4–6: `bus start acme --pm` gives `launched pm: run r4ce932f8e049`. 53: launched by `jason`. | yes | +| `mosaic talk` reaches it | 12–16: sent `6af7087a`, RESULT `7ec84e44` in reply, exit 0 | yes | +| Every launch logged | 53–56: both launches and both ends. Lines 24–25 agree. | yes, for the two launches in this run | +| The PM launches through the broker, within `launch` | 25, 54: the launch went through the host and was allowed. No refusal, and no `launch.max` limit, was exercised. | only the allowed path | +| Role instances only; at most 4 Opus and 4 Sonnet | none | no | +| One word from Jason stops new launches (`mosaic launches off`) | none | no | +| `mosaic stop` ends a running session | none. Line 28 is `mosaic bus stop`, which stops the host and every session (35–36), not `mosaic stop `. | no | +| Founder credentials only: the session stops (REQ-CRED-2) | none | no | +| Bundles for Pi, then Claude Code | 6, 25: Claude Code only. No Pi session ran. | Claude Code only | +| Sage's T3 thread hands over; the product no longer depends on T3 | none. This run shows the mechanism (lines 4–16) but not a handover. | no | + +The run also left nothing behind: 40 no process names the scratch root, 43 `no +sessions`, 47–49 host none, socket absent, writer.lock absent. 55–56: both sessions +ended `stopped` with exit 0. + +## Files + +The copies are byte-equal to the originals in `~/filbert-scratch/r41run/`. Before +committing, I checked each copy in-process against all 18 placeholder token files under +the scratch `secrets/` directories (this run and the dry run). No token value appears +in any copy, and none was printed. There are no UUIDs, tracker hosts, email addresses or +IP addresses. The only "token" match is run.sh's comment "placeholder token files". The +home path in socket paths is the same one already in many committed records. + +``` +c609c682002c7801727e915a1e6376998652f4146e5485189643e0b1e19924a3 run/run.sh +a1197cddb549f3ee75f856ff8aff579d28f90ffac836af6ccba4daa31f918480 run/run.log +1d14be21cec0d5fafd01d304662ed29cfa38a9ab2d7600b9230a2e539b76628b run/host.out +d3496d18cd2ff19f7e4d7f09afb3a49288201825012c59379ebd3494349feaa7 run/acme.jsonl +``` diff --git a/agents/filbert/work/s6/run/acme.jsonl b/agents/filbert/work/s6/run/acme.jsonl new file mode 100644 index 000000000..ff969441a --- /dev/null +++ b/agents/filbert/work/s6/run/acme.jsonl @@ -0,0 +1,4 @@ +{"at":"2026-10-11T18:32:45.919Z","event":"launch","instance":"pm","run":"r4ce932f8e049","launchedBy":"jason","harness":"claude-code","model":"claude-sonnet-5-5","family":"sonnet","pid":1413455,"runnerPid":1413459,"manifest":"/home/jwoltje/filbert-scratch/r41run/run/data/launches/acme/r4ce932f8e049/bundle/manifest.json"} +{"at":"2026-10-11T18:32:50.375Z","event":"launch","instance":"coder","run":"r2810c6373900","launchedBy":"pm","harness":"claude-code","model":"claude-sonnet-5-5","family":"sonnet","pid":1416072,"runnerPid":1416073,"manifest":"/home/jwoltje/filbert-scratch/r41run/run/data/launches/acme/r2810c6373900/bundle/manifest.json"} +{"at":"2026-10-11T18:32:53.525Z","event":"end","instance":"pm","run":"r4ce932f8e049","reason":"stopped","exitCode":0,"signal":null} +{"at":"2026-10-11T18:32:53.535Z","event":"end","instance":"coder","run":"r2810c6373900","reason":"stopped","exitCode":0,"signal":null} diff --git a/agents/filbert/work/s6/run/host.out b/agents/filbert/work/s6/run/host.out new file mode 100644 index 000000000..f7ffeec71 --- /dev/null +++ b/agents/filbert/work/s6/run/host.out @@ -0,0 +1,5 @@ +bus host up: business acme, socket /home/jwoltje/filbert-scratch/r41run/run/data/bus/broker.sock, notifier off +launched pm: run r4ce932f8e049, claude-code claude-sonnet-5-5 +mosaic-bus: run r4ce932f8e049 (pm) ended: stopped +mosaic-bus: run r2810c6373900 (coder) ended: stopped +bus host stopped (0) diff --git a/agents/filbert/work/s6/run/run.log b/agents/filbert/work/s6/run/run.log new file mode 100644 index 000000000..896b23204 --- /dev/null +++ b/agents/filbert/work/s6/run/run.log @@ -0,0 +1,57 @@ +2026-10-11T18:32:45Z +fe5c68fa031923ff79cbd8aeebb4c8925eb5af23 + +$ scripts/mosaic bus start acme --pm & +bus host up: business acme, socket /home/jwoltje/filbert-scratch/r41run/run/data/bus/broker.sock, notifier off +launched pm: run r4ce932f8e049, claude-code claude-sonnet-5-5 + +$ scripts/mosaic agents +pm r4ce932f8e049 claude-code since 2026-10-11T18:32:45.955Z +(exit 0) + +$ scripts/mosaic talk pm Launch the coder instance with your launch tool. Then reply with the run id the tool returned. --wait 300 +sent 6af7087a to pm +pm (RESULT, re 6af7087a) 7ec84e44: +The launch tool returned run id **r2810c6373900**. It started the coder instance on the claude-code harness with model claude-sonnet-5-5. +(exit 0) + +$ scripts/mosaic agents +coder r2810c6373900 claude-code since 2026-10-11T18:32:50.389Z +pm r4ce932f8e049 claude-code since 2026-10-11T18:32:45.955Z +(exit 0) + +$ scripts/mosaic launches list +r4ce932f8e049 acme/pm claude-code claude-sonnet-5-5 by jason since 2026-10-11T18:32:45.918Z running +r2810c6373900 acme/coder claude-code claude-sonnet-5-5 by pm since 2026-10-11T18:32:50.375Z running +(exit 0) + +$ scripts/mosaic bus stop +stopped bus host for acme (pid 1413128) +(exit 0) + +$ cat host.out +bus host up: business acme, socket /home/jwoltje/filbert-scratch/r41run/run/data/bus/broker.sock, notifier off +launched pm: run r4ce932f8e049, claude-code claude-sonnet-5-5 +mosaic-bus: run r4ce932f8e049 (pm) ended: stopped +mosaic-bus: run r2810c6373900 (coder) ended: stopped +bus host stopped (0) + +$ ps (processes naming the scratch root) +none + +$ scripts/mosaic launches list +no sessions +(exit 0) + +$ scripts/mosaic bus status +host: none +socket: absent +writer.lock: absent +(exit 0) + +$ cat launches/acme.jsonl +{"at":"2026-10-11T18:32:45.919Z","event":"launch","instance":"pm","run":"r4ce932f8e049","launchedBy":"jason","harness":"claude-code","model":"claude-sonnet-5-5","family":"sonnet","pid":1413455,"runnerPid":1413459,"manifest":"/home/jwoltje/filbert-scratch/r41run/run/data/launches/acme/r4ce932f8e049/bundle/manifest.json"} +{"at":"2026-10-11T18:32:50.375Z","event":"launch","instance":"coder","run":"r2810c6373900","launchedBy":"pm","harness":"claude-code","model":"claude-sonnet-5-5","family":"sonnet","pid":1416072,"runnerPid":1416073,"manifest":"/home/jwoltje/filbert-scratch/r41run/run/data/launches/acme/r2810c6373900/bundle/manifest.json"} +{"at":"2026-10-11T18:32:53.525Z","event":"end","instance":"pm","run":"r4ce932f8e049","reason":"stopped","exitCode":0,"signal":null} +{"at":"2026-10-11T18:32:53.535Z","event":"end","instance":"coder","run":"r2810c6373900","reason":"stopped","exitCode":0,"signal":null} +2026-10-11T18:32:54Z diff --git a/agents/filbert/work/s6/run/run.sh b/agents/filbert/work/s6/run/run.sh new file mode 100644 index 000000000..59dfdcd33 --- /dev/null +++ b/agents/filbert/work/s6/run/run.sh @@ -0,0 +1,49 @@ +#!/bin/sh +# Row 41 (#1523) recorded acceptance run. Run it from a human shell, not +# inside Claude Code, T3, Codex or pi: `talk` and `agents` refuse inside an +# agent (REQ-DEC-3), and the broker checks the whole process ancestry. +# sh ~/filbert-scratch/r41run/run.sh +# Scratch data root, business acme with placeholder token files, no tracker. +# Not the live mosaic-bus@mosaic-stack unit. Everything goes to run.log. +set -u +W=/home/jwoltje/filbert-scratch/r41a # detached worktree of fe5c68fa +S=${R41_ROOT:-/home/jwoltje/filbert-scratch/r41run/run} # scratch config and data root +L=${R41_LOG:-/home/jwoltje/filbert-scratch/r41run/run.log} +export MOSAIC_CONFIG="$S/config/config.json" MOSAIC_ROLES_DIR="$S/roles" +cd "$W" || exit 1 +: > "$L" +step() { + printf '\n$ %s\n' "$*" | tee -a "$L" + "$@" > "$S/step.out" 2>&1 + rc=$? + cat "$S/step.out" | tee -a "$L" + echo "(exit $rc)" | tee -a "$L" +} +date -u +%FT%TZ | tee -a "$L" +git rev-parse HEAD | tee -a "$L" +printf '\n$ scripts/mosaic bus start acme --pm &\n' | tee -a "$L" +scripts/mosaic bus start acme --pm > "$S/host.out" 2>&1 & +HOST=$! +i=0 +until grep -q '^launched pm' "$S/host.out" 2>/dev/null; do + i=$((i + 1)) + if [ "$i" -gt 60 ] || ! kill -0 "$HOST" 2>/dev/null; then cat "$S/host.out" | tee -a "$L"; kill "$HOST" 2>/dev/null; exit 1; fi + sleep 0.5 +done +cat "$S/host.out" | tee -a "$L" +step scripts/mosaic agents +echo "(talk waits up to 300 s for the PM's reply)" +step scripts/mosaic talk pm "Launch the coder instance with your launch tool. Then reply with the run id the tool returned." --wait 300 +step scripts/mosaic agents +step scripts/mosaic launches list +step scripts/mosaic bus stop +wait "$HOST" +printf '\n$ cat host.out\n' | tee -a "$L"; cat "$S/host.out" | tee -a "$L" +printf '\n$ ps (processes naming the scratch root)\n' | tee -a "$L" +left=$(ps -eo pid,args | grep -F "$S/" | grep -v grep) +echo "${left:-none}" | tee -a "$L" +step scripts/mosaic launches list +step scripts/mosaic bus status +printf '\n$ cat launches/acme.jsonl\n' | tee -a "$L"; cat "$S/data/launches/acme.jsonl" | tee -a "$L" +date -u +%FT%TZ | tee -a "$L" +echo "done: $L"