Hand off with the chain proven and run 5 parked in review

Run 5 proved frame through review with four autonomous rotations, sealed
artifacts, and an operator correction rendered above both accepted artifacts and
carried into shipped code.

It is parked on F40, which is fixed but needs the worker installed. Recovery is
the lease expiring at 22:36:06Z and review relaunching with the corrected brief.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011xsXyr5J1RACo71YeKG3Pu
This commit is contained in:
2026-08-28 02:32:47 +04:00
parent bcaf0cc285
commit 49fc9d9df1
+193
View File
@@ -0,0 +1,193 @@
# Handoff: the chain is live-proven, run 5 is mid-review
Written 2026-08-28, 02:20 local (22:20 UTC). Read with `BURNIN.md` (the ledger,
current through F40), `HANDOFF-2026-08-27-burnin-3.md` (the session before
this one), `AUDIT.md` and `CLAUDE.md`.
Everything below was observed live unless it says otherwise.
## The headline
Run 5 live-proved the whole workflow this project exists to build. Frame to
review, four autonomous rotations, sealed artifacts, and an operator correction
that reached shipped code.
```text
frame -> research -> plan -> implement -> review
```
The render order in the implement launch is the load-bearing proof:
```text
## Goal
## Acceptance
## Current human decisions <- the correction
## Current phase implement
## Repository rules
## Verified git state
## Accepted research
## Accepted plan
## Continuity from the previous session
### Dead ends already tried
```
Human correction above accepted plan, above accepted research, stale continuity
below all of them. The original failure mode is mechanically gone from this
path. A new session no longer follows whatever the handoff liked instead of the
latest human instruction.
The correction went from issue comment to live plan pane in three seconds, and
was delivered exactly once. It was cited in `plan.json` as a human decision. It
appears in the shipped script as snake_case JSON keys, with the default text
path untouched.
## Deployed state
| Half | Revision | Evidence |
|---|---|---|
| Coordinator, homesrv container | `bcaf0cc` | image `a5683b1869ae`, `/readyz` 200, embedded stamp checked |
| Worker, workpc systemd | **operator to install** | staged, see below |
Branch `webui-and-audit-reconciliation`, HEAD `bcaf0cc`.
```text
revision bcaf0cc2851734f97105beb1cd608fda4e271964
sha256 7f2bee3d3c45a347d2f747b1aed624b3e45f8d255a47aaf710daad6fd10bc5d3
staged /home/kami/orchestra-deploy/orchestra-worker.bcaf0cc
```
```bash
sudo install -m 0755 /home/kami/orchestra-deploy/orchestra-worker.bcaf0cc /usr/local/bin/orchestra-worker
sudo systemctl restart orchestra-worker
```
**Confirm the installed worker checksum before believing anything else here.**
Half of tonight's diagnosis time went to reasoning about code that was not the
code running.
## Run 5, where it stands
Task `06G4A4F0TFXKZHJE48N05XN1HG`, issue `kami/test-e2e#5`, `workpc-claude`.
It is parked in `review`. The review agent finished at 02:12 and stopped,
correctly, because nothing had told it how to finish. That is F40, fixed in
`bcaf0cc` but not deliverable to a session that already has its brief.
The recovery is the lease expiring at `22:36:06Z` (02:36 local). The task
requeues, review relaunches with the corrected brief, and the agent can write
`.orchestra/done`.
**Do not press anything into that pane.** The relaunch is the proof.
Remaining chain after that:
```text
.orchestra/done -> worker confirms idle -> finalise -> task PR -> human review -> merge -> completed
```
The implemented script is at
`/tmp/test-e2e-worktrees/06G4A4F0TFXKZHJE48N05XN1HG/scripts/orchestra_worktree_report.sh`
and satisfies the acceptance criteria and the correction.
## What this session found
Twelve defects, F29 through F40, each reachable only after the previous fix.
Tests passed throughout. Running the system is the only thing that surfaced any
of them.
```text
F28 CLOSED, live-proven both directions
F29 fixed efd0a5e, DEPLOYED, live-proven operator could not act on a leased task
F30 fixed 2dc90bd, DEPLOYED, live-proven unpushed release pinned the only slot
F31 fixed 6523002, DEPLOYED, live-proven handoff action held to half its budget
F32 fixed 92adf04, DEPLOYED, live-proven empty tmux server's reply unrecognised
F33 fixed 32220d9, DEPLOYED, live-proven launch confirmed in 7ms against an unrendered editor
F34 fixed 92f32d6, DEPLOYED, live-proven first renewal exempt, free period for a dead launch
F35 fixed 92f32d6, DEPLOYED, untested live no way to re-poke a pane
F36 fixed b9ca365, DEPLOYED, live-proven validator refused the adapter's own reason
F37 fixed cb7782d, DEPLOYED, live-proven handoff carried the write Orchestra asked for
F38 fixed 0bd86e2, DEPLOYED, live-proven brief named the artifact, never its schema
F39 fixed 0bd86e2, DEPLOYED, live-proven local refusals reached nobody
F40 fixed bcaf0cc, worker install pending terminal phase never named .orchestra/done
```
Older entries, unchanged:
```text
F15 closed by detection, transport fix pending live proof
F16 closed
F17 fixed
F18 open observability, now the highest-value open item
F19 fixed
F20 live-proven by run 5's correction
F21 exercised throughout
F22 exercised throughout
F23 live-proven by run 5's correction
F24 open correctness, dormant on current topology
F25 live-proven
F26 live-proven
F27 live-proven
```
### The pattern, worth carrying forward
Every defect tonight was a contract with two halves that named different things.
- F31: producer joined two lines, validator budgeted one
- F36: adapter emitted `phase_changed`, validator's list never gained it
- F37: prompt asked for a file, validator rejected the command that wrote it
- F38: brief named an artifact, never its schema
- F40: worker watched for `.orchestra/done`, no brief ever named it
The durable fix shape is to ask the other half rather than restate it, as
`continuity.IsCircularCommand` does. The alternative is to assert the agreement
in a test, as `TestPhaseSealSchemasDecode` and
`TestEveryReasonTheAdapterProducesIsAcceptedByTheValidator` do. Prefer either to
another matching constant.
F39 is the one that made the rest expensive. A local refusal recorded only in
worker health is a silent stall, and worker health holds one slot (F18).
## Next session, in order
1. Install the worker binary above, then confirm the checksum.
2. Let run 5's lease expire and watch the review relaunch. Do not intervene.
Expect `.orchestra/done`, an idle confirmation, then finalisation.
3. If it finalises, run 5 is a complete conformance proof. Record it and treat
remaining work as hardening rather than redesign.
4. F18 is now the highest-value open item. One error slot on the worker cost
real diagnosis time three times tonight. It is also what turns any local
refusal into a silent stall.
5. F35's `resubmit` action is deployed but never exercised live. The next stuck
pane is its proof.
## Things that will bite
- **Another session owns 22 uncommitted paths**, including `AUDIT.md`,
`deploy/build.sh`, `web/`, and new untracked `final/`, `iterations/`,
`orchestra-ui-spec.md`, `README.md`. Commit by path. Never `git add -A`.
- **Never `docker compose build`.** The build context is
`/home/kami/apps/orchestra`, the shared dirty checkout. Build from a detached
worktree, as every deploy in this session did:
`git worktree add --detach /tmp/orchestra-build-<rev> <rev>`, then
`docker build --build-arg BUILD_REVISION=... -f $T/Dockerfile.api -t orchestra-web-ui-orchestra-api $T`,
then `docker compose up -d --no-deps orchestra-api`.
- **`workpc-claude` now declares a `claude` capability** in the deployed
`config.jsonc`, added this session so an operator test can pin placement.
A task with `capability: ["claude"]` lands there deterministically.
- **The worker state file is a cache, not truth**, and editing it needs the
worker stopped. Backups from tonight are in
`/var/lib/orchestra/worker-state/`.
- **`/tmp` is tmpfs with a 10-day sweep.** Check `/tmp/test-e2e` and
`/tmp/test-e2e-worktrees` exist before every run.
- **Gitea writes need the token expanded on homesrv**:
`/usr/bin/ssh kami@192.168.1.104 'TOKEN=$(docker exec orchestra-api printenv ORCHESTRA_GITEA_TOKEN); curl -H "Authorization: token $TOKEN" ...'`.
Base `https://gitea.kvmx.ru`, owner `kami`, repo `test-e2e`.
- **The web surface is cookie-only.** No bearer token exists for it, so any
`/v1/ui/*` call needs a login through `POST /v1/ui/session`.
- **This machine is workpc**, `hostname` is `bugmachine`. homesrv is
`kami@192.168.1.104` with `/usr/bin/ssh`, not the `ssh` on PATH.
- **Worker capacity is 1 per harness.** One stuck task blocks the harness
entirely, which is what F30 did for an hour.
- **Three queued `correx` tasks will never lease.** No worker declares that
project.