Ledger current through F42. Handoff records the two defects found in the completion tail, the deployed revisions, and the two links the tail still cannot reach because test-e2e has no gate and no delivery configuration. PLAN-SPEC-DESIGN.md is the operator-approved design for the ACE-FCA plan gap, committed as a note. No implementation yet, by instruction. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CVbaKucEYBjMqVeUgJUsc1
7.9 KiB
Handoff: run 5 reached TaskCompleted, plan machinery is designed and frozen
Written 2026-08-28, 06:55 local (02:55 UTC). Read with BURNIN.md (the ledger,
now current through F42), PLAN-SPEC-DESIGN.md (the locked design for the next
change), HANDOFF-2026-08-28-burnin-4.md (the session before this one),
AUDIT.md and CLAUDE.md.
Everything below was observed live unless it says otherwise.
The headline
Run 5 finished. Task 06G4A4F0TFXKZHJE48N05XN1HG, issue kami/test-e2e#5,
reached TaskCompleted at 06:48 after two defects were found and fixed in the
completion tail.
frame -> research -> plan -> implement -> review -> done -> finalise -> pushed -> completed
Two defects, both live-proven fixed:
- F41: harness chrome counted as agent progress, so a stalled lease renewed without bound.
- F42: the result commit refused the completion marker, so completion could never happen.
Deployed state
| Half | Revision | Evidence |
|---|---|---|
| Worker, workpc systemd | dcd9af4 |
PID 3634937, started 06:47:50, sha256 25b41562…, journal prints the revision at startup |
| Coordinator, homesrv container | bcaf0cc |
stale, see below |
Branch webui-and-audit-reconciliation, HEAD dcd9af4.
revision dcd9af4806376caf091e18f669ab52f1ba0dc9df
sha256 25b415629d4a02dca7abe202245ac13f5bdb43b501bc17e371dba75b44f6cebb
Confirm the running worker, not the installed file. Two restarts silently
did not happen tonight. sudo install landed the new binary while the old
process kept serving from the unlinked inode. /proc/<pid>/exe showed
(deleted) and the old hash both times. Check
sha256sum /proc/$(systemctl show -p MainPID --value orchestra-worker)/exe,
never just the path.
The second missed restart cost run 5 its retry budget: the pre-F42 worker kept
failing until the router marked the task failed.
The coordinator is behind, deliberately
2417a39 moved lease TTL to 5 minutes via domain.LeaseTTL, and the
coordinator issues the initial lease at internal/router/router.go:318. That
half still runs bcaf0cc, so new leases arrive with a 30-minute TTL. Worker
renewals send ttl=300 explicitly, which is why run 5 recovered anyway.
Rebuild when convenient, from a detached worktree, never with
docker compose build:
git worktree add --detach /tmp/orchestra-build-dcd9af4 dcd9af4
docker build --build-arg BUILD_REVISION=dcd9af4… -f $T/Dockerfile.api -t orchestra-web-ui-orchestra-api $T
docker compose up -d --no-deps orchestra-api
What this session found
F41, harness chrome counted as progress
The 02:46 renewal was granted against a pane idle since 02:12. Reproduced the
worker's stored progress_sha byte for byte from the live pane, so the branch
taken was progress != l.ProgressSHA, not IsBusy and not an empty baseline.
PaneProgress hashed Claude Code's status footer, whose usage percentage,
context counter and version notice all move on their own schedule.
Fixed in 2417a39. Live-proven in both directions on the first window after
deployment: renewal at 03:13:48, refusal at 03:16:13, expiry at 03:18:43,
relaunch at 03:20:14.
F42, the result commit refused the completion marker
.orchestra/.gitignore contains *, so .orchestra/done is ignored, and git
refuses an add whose pathspec names an ignored path. The staging step named the
marker. Every completion attempt failed, once every five seconds, for 22
minutes.
Fixed in dcd9af4 by excluding the directory rather than the file. Reproduced
both forms in a scratch repo on git 2.55.0 before changing anything.
F18 is now the clear top item
Both defects tonight were five-second retry loops whose only trace was the
journal, because each identical error overwrote the single last_error slot.
health in the worker state file was {} throughout. The bounded
recent-observation ring described in the previous handoff is the fix. This
session adds a second concrete instance of the cost.
Where the completion tail stops
Proven: review, done recognised, agent confirmed idle, finalise, result branch
pushed, TaskCompleted.
Not proven, and not defects:
- No quality gate ran. The deployed
test-e2eproject declares onlyid,machine_affinity,repoandworktree_root. - No PR was opened. The deployed
config.jsonchas nosourcesand nodeliverykeys.internal/provider/gitea_pr.goimplements PR creation, but nothing points this project at a Gitea remote.
Submission, human PR review and merge need registry configuration, not code. That is the cheapest remaining burn-in, and it is a config edit plus one task.
The next change is designed and frozen
PLAN-SPEC-DESIGN.md holds the operator-approved design for the ACE-FCA plan
gap. No implementation exists yet, by explicit instruction: the design must not
land while the completion tail is still being observed.
Shape, in one paragraph each:
plan.md, sealed through the existing path and referenced by the existingt.PlanRef. 128 KiB total bound, structural validation by required headings and phase blocks, no per-line cap.DecodePlankeeps the JSON path for refs already in the CAS.- Research ids.
Finding{ID, Claim, Evidence, Confidence}, unique ids, confidence limited tofact|inference|assumption. The schema atagentctx.go:167already promises these and the struct drops them today. - Progress that Orchestra establishes. The implementer may write only
status: "ready_for_verification". The worker reads that phase's automated verification from the accepted plan, runs it, and recordsPlanPhaseVerified. An agent cannot writeverified. - Verification allowlist. Plan commands are argv, executed without a shell, matched against a per-project policy. Absent policy refuses everything.
- Mismatch as a typed request.
PlanMismatchRequestsupersedes or reopens research and planning. No new agent-askable backward transition.
The live proof ladder is in the note. Steps 1 and 3 are the rungs that matter for smaller local models. The implement launch contains the plan verbatim, and a rotated successor still receives it whole with phase state intact.
Things that will bite
- Verify the running worker binary, not the installed one. Twice tonight.
- The worker state file is a cache, not truth. It read
state failedfor run 5 while the coordinator still held the task as leasable. I reported the cache as fact. The coordinator disagreed and was right. rmandcpare interactive in this shell. A plainrmprompts, appears to succeed, and leaves the file. Use/bin/rm -fandinstall.- Another session owns 20-plus uncommitted paths, including
AUDIT.md,deploy/build.sh,web/andinternal/authn/. Commit by path. Nevergit add -A. - No network from this sandbox.
curlto raw.githubusercontent.com times out.WebFetchagainst agithub.com/blob/...URL works. - Secrets are guarded. Reading
.envorprintenvof a token through the shell is blocked. The working recipe is expanding the token inside the container in a single remote command, asHANDOFF-2026-08-28-burnin-4.mdrecords. /tmpis tmpfs with a 10-day sweep. Check/tmp/test-e2eand/tmp/test-e2e-worktreesexist before every run.- Two stale monitors may still be armed from this session, tailing the worker journal. They are session-local and die with it.
What I would do next, in order
- Rebuild
orchestra-apiatdcd9af4so the 5-minute TTL applies at issuance. - Fix F18 as a bounded observation ring, since two more instances landed tonight.
- Configure
test-e2ewith a Gitea remote and a quality gate, then run one task to prove submission, human review and merge. - Implement
PLAN-SPEC-DESIGN.mdexactly as written, including the allowlist.
Steps 1 through 3 are burn-in and observability. Step 4 is the only new behaviour, and its design no longer needs an architecture pass.