# Issue 25644 evidence

Server-only visual matrix: EMPTY. Runtime transcript supplied instead.

Worktree: /home/ubuntu/wt/issue-25644
Branch: fix/issue-25644
Base: a54ba53a5c
Before implementation: f0d7dfdd89 (test-only commit, original implementation)
After implementation and unchanged worktree HEAD: f0c4840a83a496a5b7aff4425156e7e42a723087

## Reproduction and exit statuses

Run `python /home/ubuntu/evidence-25644/run-evidence.py` from this machine.
The runner invokes `vp test run --config /home/ubuntu/evidence-25644/vite.config.ts`
with EVIDENCE_REVISION and EVIDENCE_MODE as recorded in each log and manifest.
Original regression adds `-t 'moves a queued message ahead of queued delegated completions'`.

- red-original.log: original test source from f0d7dfdd89 and implementation from that revision; exit 1. Rejects the user correction reorder with `Queued messages cannot be reordered ahead of automatic completion delivery.`
- green-original.log: exactly the same original regression test, head implementation; exit 0, 1 passed (other tests filtered).
- red-runtime.log: scratch runtime driver, original implementation; exit 1 on the same reorder rejection; legacy fixture passes. This is not a successful reordered promotion transcript.
- green-runtime.log: scratch runtime driver, head implementation; exit 0, 2 passed.

Each final log records the command, full revision, worktree HEAD, and exit status. Source overlay lines record SHA-256 hashes of the three implementation modules. The implementation differences between revisions are exactly Orchestrator.ts, QueuedRunOrder.ts and contracts orchestrationV2.ts; remaining differences are test files. All three implementation files are loaded with git show for both revisions. No file or HEAD substitution occurs on disk. Vitest fsModuleCache is disabled to ensure loader output is used.

## Observed runtime behavior

Uses real RuntimeLayer.layer, RuntimeLayer.layerEventSink / EventSinkV2 and SQLite layerMemory, with the existing runtimeLayer.test.ts layerTest dependencies. Provider registry/adapter is stubbed. This proves orchestration promotion, not provider execution.

1. A is starting and blocks C1, C2, U, V. Each completion is eligible via a persisted parent delegatedCompletion delivery generation. U is reordered before C1, then C3 is enqueued. Persisted projection shows U position 1 and queuedAheadOfCompletions true. Terminal event writes and persisted run.updated starting events show actual promotions U, C1, C2, C3, V.
2. C2 before C1 is rejected with `Automatic completion deliveries cannot be reordered.` Full persisted runs and thread event sequence are equal before/after rejection. No accepted event is appended; rejection receipt bookkeeping is outside this unchanged-runs assertion.
3. Legacy fixture is persisted via EventSinkV2 writes with U=1, C1=2, C2=3, marker absent. It never reorders U. Terminal A yields actual promotions C1, C2, U.

Queue.take and Deferred event-stream barriers synchronize writes and observations. No sleeps or polling. Snapshots after each promotion assert exactly one starting. Every run is completed at the end and no run remains queued or starting. trace-audit.json independently checks the complete logged transitions into starting (including A; same-status metadata updates are not promotions), uniqueness/order of event sequence numbers, and final completed statuses. There are no skipped or duplicate promotions. Logs map aliases to run IDs and include ordinal, queue position, status, marker and persisted event sequence.

## Limits

No real provider session is opened, no provider turn is executed, and no provider/network/UI behavior is claimed. Terminal completion events are injected through the real EventSinkV2, rather than produced by a provider. Legacy state is constructed through real persistence, not loaded from an old user's database. SQLite is in-memory; process restart/disk durability is not tested. The runtime effect worker is not executing provider start effects. This is a focused queue-promotion proof using the real runtime reactor and persistence path, not an end-to-end provider proof.

## FRICTION

- Initial scratch config prepended the package root to already absolute setup paths; corrected outside the repository.
- Initial scratch driver had one extra closing parenthesis; corrected outside the repository.
- Vitest 5 filesystem module cache reused transformed overlay modules between revisions. Those comparisons are discarded and are not evidence. The final config disables fsModuleCache, and all four final captures were rerun with per-module revision/hash output. No shared cache was deleted.
- Trace auditing initially counted same-status starting metadata updates on A as promotions. Corrected the audit to detect transitions into starting; the raw events remain visible.

No children, new worktrees, commits, pushes, PRs, browsers or live T3 database access. Scratch files remain outside the repository. manifest.json records identical clean before/after status and unchanged HEAD. No repository source was modified.
