review(41): recorded acceptance run met, ACCEPTANCE.md and run evidence (filbert)

Jason ran run.sh (sha256 c609c682) from a human shell on fe5c68fa,
2026-10-11T18:32:45Z to 18:32:54Z. The PM launched coder r2810c6373900,
recorded by pm in the launch log, and mosaic agents shows it.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
2026-10-11 13:42:00 -05:00
co-authored by Claude Opus 5.5
parent edc5de7166
commit 892e765f37
5 changed files with 192 additions and 0 deletions
+77
View File
@@ -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 <run>`. | 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
```
+4
View File
@@ -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}
+5
View File
@@ -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)
+57
View File
@@ -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
+49
View File
@@ -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"