61442d801c
Both halves are on bcaf0cc. The review lease renewed once to 22:56:10Z, since
the agent's 02:12 output was real progress against its launch baseline, so the
recovery lands twenty minutes later than the handoff first said.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011xsXyr5J1RACo71YeKG3Pu
192 lines
8.1 KiB
Markdown
192 lines
8.1 KiB
Markdown
# 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 | `bcaf0cc` | installed 02:32:37, sha256 verified |
|
|
|
|
Branch `webui-and-audit-reconciliation`, HEAD `bcaf0cc`.
|
|
|
|
```text
|
|
revision bcaf0cc2851734f97105beb1cd608fda4e271964
|
|
sha256 7f2bee3d3c45a347d2f747b1aed624b3e45f8d255a47aaf710daad6fd10bc5d3
|
|
```
|
|
|
|
**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. It renewed once to `22:56:10Z` (02:56
|
|
local), because the agent's 02:12 output counted as real progress against its
|
|
launch baseline. The next renewal window opens around 02:46 and must be refused,
|
|
since the pane has not moved since.
|
|
|
|
On expiry 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. Confirm the installed worker checksum matches the revision above.
|
|
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.
|