# Settings model trait reproduction

Both commits ran as the actual web app in separate checkouts with fresh, isolated data. Browser viewport: 1280 x 800 CSS pixels, DPR 2, light theme. No agent turns were sent.

`start-app.ts` and `start-secondary.ts` are the bootstrap scripts used, with `shell.ts` alongside them. They accept a checkout, fresh home and web port (see their CLI help); the home is disposable. Use `T3CODE_DEV_SEED=0`. Install checkout dependencies first. `seed.py <home> <checkout>` registers two synthetic checkouts of the same project through the CLI. `generator-fixture.mjs` supplies the local models endpoint for the text-generator wizard, without any generation or credentials.

Load `browser-driver-final.js` into the app page through browser evaluation. Its helpers click the real rendered controls. Navigate through Settings in the UI between the following calls. The same helpers and steps were used on both sides.

1. Threads: `await proof.effort('Model', 'High')`; reload Settings, confirm High; `await proof.pick('Model')`.
2. Threads: choose Astra for Fallback model, set High, then re-pick Astra using `proof.pick`.
3. Threads: set Text generation model to Astra / High; re-pick Astra.
4. Source control: enable Review guides and the separate Review guide model. Set Astra / High; re-pick Astra.
5. Source control, Advanced: enable Source control writer model, set Astra / High; re-pick Astra.
6. Voice: enable Clean up transcripts and Cleanup model. Set Astra / High; re-pick Astra.
7. Providers: Add generator, Custom, local fixture URL, name Evidence generator, no API key. Connect. Before opening this wizard, configure the Threads text-generation model to Astra / High. In Use it, open Thread titles and other generated text, observe the checkmarked Astra, re-pick it, click Done, then inspect Text generation model under Threads.

In all seven paths the base changed High to Medium; the head retained High.

Mixed selection checks: for each of Model, Review guide model and Source control writer model, use the two checkouts of demo/model-traits, set the same Codex Astra model to High on one and Extra High on the other, then choose All checkouts. The row says Mixed. Pick Astra: both commits produce Medium, without inheriting either checkout's traits. For Fallback model, do the same using two local environments and All environments, because fallback is an environment default rather than a project setting. The recordings begin after scope setup to avoid exposing checkout paths or pairing credentials.

Different selection checks: start Model at Codex Astra / High, pick Codex Luna and observe Medium Fast. Restore Codex Astra / High, then pick Astra under Codex Second and observe Medium. Both commits clear the previous traits in these cases.

Every selected still was accepted only after two screenshots 500 ms apart were byte-identical. PNG files are original full-viewport screenshots. MP4 files record the interactions. No synthetic state was copied from a live database.
