# No-project automatic load balancing: manual web proof

AI-assisted; verified with the tests and tools listed above.

## Environment

Two fresh environments per revision, each using that revision's server and web client.
All four T3 homes were outside Git worktrees. No production state was copied.
Replay (dev) was the only enabled agent. Browser viewport: 1280 × 800 CSS pixels,
light theme. Environment labels were synthetic: Primary and Secondary.

Base: b3fdf2b10fb92e5dbc71a83381c602a8a464bbca
Head: 46796c3dd465cd2ba181747a6fdaa8848df6f01b

## Seed/launch helper

The accompanying start-app-proof.ts is the actual scenario start-app.ts helper used
for the manual run, with synthetic host labels, allowed loopback browser origins,
and PROOF_BACKEND_ONLY to run the second environment without a second Vite process.
Copy it to scripts/scenarios/start-app.ts in the revision under test, after vp i.
Run each command from that revision's checkout, using a new external scratch home:

    T3CODE_DEV_SEED=0 node scripts/scenarios/start-app.ts web <scratch>/primary 127.0.0.1 <web-port>
    T3CODE_DEV_SEED=0 PROOF_BACKEND_ONLY=1 node scripts/scenarios/start-app.ts web <scratch>/secondary 127.0.0.1 <unused-web-port>

The manual runs used web ports 41000 and 42000. The second environment's actual
backend port is the Listening on line in its output, not its unused web port.
Open the primary's pairing-path at its web origin. For the secondary, use its
pairing-path with the actual backend origin. Pairing paths contain credentials;
they are deliberately excluded from the evidence.

## Same browser interactions on both revisions

1. Finish the Welcome screen by clicking Start.
2. Settings → Environments → Add environment: paste the secondary pairing URL into Host and add it.
3. Expand Load balancing, enable Automatically balance load, choose Less often for Primary and Prefer for Secondary.
4. Close Settings and wait for the Home view. Press Ctrl+Alt+N.
5. Wait for routing to settle, then open Run on.
6. Capture the picker. Base: Primary selected, only Primary and Secondary options. Head: Auto balance selected, with Auto balance, Primary, and Secondary options.

The recordings cover closing Settings, the no-project shortcut and opening Run on.
The effective shortcut was repeated on base after the first press arrived during
Settings dismissal and had no effect. It created only one no-project draft.
Two screenshots of each final picker, separated by over 500 ms, were pixel-identical.
Both stills and contact sheets of both recordings were opened and inspected.

## Read-only runtime corroboration

Before the shortcut, Secondary had zero project rows on both revisions.
After the shortcut, base Secondary still had zero projects. Head Secondary had
one project, titled No project. The head draft's environmentId and
loadBalancedEnvironmentId both matched Secondary's discovery environmentId, and
its projectId matched that new project. Its environmentSelection was auto.
The base draft stayed in Primary and had no loadBalancedEnvironmentId.

As a supplemental check on head, sending a synthetic message from that draft
completed through Replay and displayed Secondary in the thread sidebar and
run-context panel. This was not a paid model run or a unit-test result.
