# Runtime evidence for issue [#19728](https://git.cafe/pingdotgg/t3code/issues/19728)

The real isolated app automatically settled `triage-19728-open` while both synced pull requests stayed open. Before: null settledOverride/settledAt. After: settledOverride=`settled`, settledAt=`2026-10-21T22:37:53.943Z`, its creation/activity anchor. Persisted `orchestration_events` sequence 15 is `thread.settled`, command `server:auto-settle:triage-19728-open:ff7ec8d5-8232-4ca6-ae94-c1d8c0decc25`, actor server, occurred_at `2026-10-25T23:00:07.712Z`. The authoritative V2 thread projection agrees. This is automatic inactivity settlement, with no terminal PR snapshot and no manual-settle command.

The fixture links [#23124](https://git.cafe/pingdotgg/t3code/pulls/23124) (source manual) and [#23117](https://git.cafe/pingdotgg/t3code/pulls/23117) (source stack). Both baseline and final snapshots are open with null mergedAt/closedAt and identical sync timestamps. Those persisted snapshots, rather than a new forge query, establish the server's decision inputs. These PRs are fixture data, not PRs worked on by this evidence task.

## Revision and runtime provenance

Primary requested final revision [496acd1a37](https://git.cafe/pingdotgg/t3code/commit/496acd1a37ef189204504f8f6729ab0ecb344cd7), base [70e5e384da](https://git.cafe/pingdotgg/t3code/commit/70e5e384da). During extraction the shared checkout was already at merge commit [d60a779427](https://git.cafe/pingdotgg/t3code/commit/d60a7794274d91642eaa1aaa37786144c9ed4dc3). Tracked source was clean. The settlement implementation and both focused test files have identical Git blobs at requested and observed revisions; hashes are in the JSON. The focused test run therefore records the observed merge head, not an independently checked-out run of the requested pre-merge head. No source or checkout edits were made by this evidence agent.

Primary reports restoring the coherent isolated backup `/tmp/issue-19728-baseline.sqlite` while the server was stopped, then launching final-head server session 57635. Primary also reports fixture creation via ordinary app RPC and manual command-palette linking. This agent did not perform or witness those setup actions. Persisted baseline `thread.created` (createdBy=user, creationSource=web), stack-link/sync events, and matching fixture identity corroborate the resulting fixture state. This agent only observed the already-running server and read saved state; no server was started or stopped.

Observed invocation chain: `vp run dev` → `node scripts/dev-runner.ts dev` → server `node --watch --watch-path=src --watch-path=../../packages --watch-path=package.json src/bin.ts`. The server child cwd is `/home/ubuntu/wt/issue-19728/apps/server`, with `T3CODE_HOME=/home/ubuntu/wt/issue-19728/.t3` and `NODE_OPTIONS=--require=/tmp/issue-19728-clock.cjs`. The dev-runner log identifies worktree mode, that same baseDir, serverPort=14283 and webPort=6243. Parent ambient home is overridden by the worktree runner. Only the isolated worktree database and saved backup were read.

## Clock disclosure and eligibility

This is a real dev-server execution with an external clock harness, not four naturally elapsed days. The preload sets `Date.now = () => realNow() + 4 * 86400000`. Date construction and console log wall-clock formatting are not themselves overridden. The same offset is reported in the supplied baseline evidence. Event occurred_at is used as a decision-time proxy because the exact resolver clock sample was not logged. At the settlement event the fixture's anchor was approximately 4.015 days old, safely beyond the three-day threshold; the JSON records the exact calculation.

Settings were read from `.t3/userdata/settings.json`, decoded with the actual `ServerSettings` schema, and resolved for project `07785c16-71cb-4deb-8dc3-5be97abaf809` with `resolveProjectSettings`. The file contains only projectSettingsFolded=true, so settlement defaults apply: threshold=3 days, keepPullRequests=false, settleOnMerge=true. There are no project overrides; all three setting sources resolve to environment. This is a read-only decode, not a call to the settlement policy. Historical settings at launch are primary-reported and consistent with this observed resolution; no historical settings snapshot was saved by this agent.

Baseline candidate: not deleted, archived, explicitly overridden, pinned, disabled, or snoozed; zero runs, runtime requests, messages, provider threads, and turn items. Thus status=idle, no queued turn, activity run, pending runtime request or background task; activity timestamps are null and creation time is the anchor. UpdatedAt/lastVisitedAt are not activity anchors. Final is excluded from future candidates by its settled override. The extraction JSON includes counts and null guard fields, not user message bodies.

The unlinked control `thread:project:6f773628-b49c-42ce-9e87-47d5de7211a2:425a3b00-129c-49ff-9932-e2558d87b1f8` is settled in both baseline and final, with settledAt=`2026-10-21T22:34:24.129Z`. It was already settled in the restored baseline; no second control transition is claimed.

## Reproduction and inspection commands

Run from `/home/ubuntu/wt/issue-19728`:

```sh
git rev-parse HEAD
git status --porcelain --untracked-files=no
git diff 496acd1a37ef189204504f8f6729ab0ecb344cd7 HEAD -- apps/server/src/orchestration-v2/ThreadSettlementService.ts apps/server/src/orchestration-v2/ThreadSettlementService.test.ts apps/server/src/orchestration-v2/ProjectionSettlement.test.ts
PATH=$PWD/node_modules/.bin:$HOME/.bun/bin:$PATH vp test run apps/server/src/orchestration-v2/ThreadSettlementService.test.ts apps/server/src/orchestration-v2/ProjectionSettlement.test.ts
python3 /tmp/issue-19728-extract.py
```

The uploaded extraction script opens both databases using SQLite URI `mode=ro`, sets `PRAGMA query_only=ON`, and uses one read transaction per database. It reads only the target/control projections, related counts, and their event streams; all uploaded JSON is an allowlisted subset. Settings decode was run from apps/server using `Schema.decodeUnknownSync(ServerSettings)(raw)` followed by `resolveProjectSettings(decoded, projectId)`; only the three settlement settings, sources, and empty project overrides were retained. The raw runtime log was not uploaded: it contains a pairing link. No database, auth table, environment file, session token, or unrelated user data is included.

## Proof limits

The supplied red artifact is a summarized earlier run at the test-only commit on unchanged base production policy: keep=false failed, keep=true passed. It was not independently rerun by this agent, and later mixed-state/unsynced assertions are not claimed to have individually failed on base. The fresh focused green artifact records execution against observed merge head. Runtime launch/restoration and original UI interactions remain primary-reported; persisted app events and projections are independently extracted here. Clock simulation is explicit. No client rendering, provider turn, remote/tunnel delivery, naturally elapsed four-day observation, or additional runtime fixture coverage is claimed. Visual matrix [] was audited in proof-audit-pass1; no recordings, screenshots or render diffs were needed.

## FRICTION

- tool: web fetch could not access the matrix; curl fetched it successfully. Initial scratch extractor encountered a nullable stack value and was corrected before artifact generation; no database writes occurred.
- brief: requested head advanced concurrently to a merge commit. Settlement implementation/test blobs are identical; observed revision is disclosed. Primary must decide whether a fresh exact-head runtime is needed for pass 2.
- runbook: no blocker; server-only red test plus runtime transcript rule applies.
- infra: focused tests take several minutes while other work shares the machine; no server process was disturbed.
- forge: no forge CLI reads or mutations; links were fixture data only.
- policy: no conflict; no browsers, server lifecycle changes, source edits, or screenshot assets.
- model: no model-related blocker.
- other: raw runtime log deliberately withheld because it contains a pairing link.
