# Merge queue evidence

Run seed.sh from each unchanged checkout after vp i. Keep github-fixture.mjs alongside it. Set EVIDENCE_ROOT to a scratch output parent. The script makes a new timestamped run, creates a synthetic repository, seeds a project through the real project service, and starts the app. The captured runs added the same demo project using Add project > Local folder instead; there is no copied database or client response override.

The Node preload intercepts only the server's outbound api.github.com fetches. It supplies synthetic GitHub wire responses: WRITE permission, clean mergeability, no autoMergeRequest, isInMergeQueue true, queue position 1, AWAITING_CHECKS. The actual application reads, normalizes, transports, renders and mutates this state. Unexpected mutations are blocked. DequeuePullRequest changes subsequent responses to unqueued. This proves the app's dequeue request, not GitHub's live mutation acceptance.

## Web (both commits)

Chromium on Linux, 1440 x 1000 CSS pixels, dark appearance, same browser profile. PNGs are 1920 x 1334 physical pixels. Pair with the isolated server and open the printed PR path. Hide the main sidebar and maximize the PR panel. In More pull request actions select Squash and merge. Move the pointer to blank space.

Record the same sequence:
1. Show the settled summary and primary control.
2. Open More pull request actions.
3. Click Refresh and wait for the settled detail.
4. Open More pull request actions again.
5. If Remove from queue is available, click it and wait for the settled result. On base it is absent, which is the observed failure.

Before each still, take two PNGs at least 500 ms apart and compare with ImageMagick `compare -metric AE first.png second.png null:`. Keep only zero-difference pairs. Open every retained image. Review each recording through frame contact sheets.

Base: Squash and merge remains visible, no Queued status, no removal item.
Head: Queued (#1, awaiting checks) replaces the primary merge button. The menu offers Remove from queue. Clicking it sends DequeuePullRequest with PR_synthetic_7, clears Queued, and restores Squash and merge.

## Native Android

Both captures: Android Pixel 9, 1080 x 2424 pixels, dark appearance, same development client and device; each checkout has its own Metro and isolated backend.

Use the pool's Pixel 9 and this checkout's cached development client, served by its own Metro. Pair with the corresponding isolated backend. Open the same synthetic PR using the app's existing pull-requests deep link. The PR route is `t3code-dev://pull-requests/<environmentId>/<projectId>/queue-evidence%2Fdemo/7?host=github.com`.

Inspect the merge label, open Merge options, and choose Remove from queue when available; inspect and confirm its dialog. Never confirm a real merge on base. No production repository is written.

The native captures followed the commands in capture-native.py interactively: show primary, open Merge options, choose removal if present, inspect confirmation, confirm, then wait for Squash and merge. Base has no removal entry; head shows Queued (#1), Remove from queue and Remove from queue?, then clears the queue after confirmation. Every retained still passed the same zero-difference comparison. Both native recordings were opened as contact sheets before upload.

The original GitHub-backed report used a READ-only account; these runs deliberately use the same WRITE-permission upstream fixture on both commits to expose the primary-button defect without changing an organization repository. Electron and iOS were not independently exercised. Live GitHub mutation acceptance is not established.

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