Date. 2026-08-13 · CR. change-requests/cr-2026-208-loomworks-message-order-default-v0_1.
State. Built and tested. HALTED before tag and push, per the Checkpoint A instruction. Surface main local commit 00ed2f2 (NOT pushed; no tag). Engine untouched, as ruled (§1.C).
Baseline note (Step 0). The CR states baseline 7ac3cb2; the tree stood at b3b01d7 — exactly one commit ahead (CR-2026-207, the candidate-commit banner, engagement-page-side; no overlap with the conversation pane). Built on b3b01d7. Tree was clean.
ORDER_DEFAULT flips to "newest_first" (conversation-order.ts), aligning the surface baseline with the engine default key (person_settings.py: conversation.message_order default newest_first — confirmed at Step 1). Stored preferences untouched and still win.ConversationPane places its input zone (mic, interpretation toggle, textarea, attach, suggestion chips — one flex block, no absolutely-positioned dependents, confirmed at Step 1) ABOVE the transcript for newest_first, BELOW for oldest_first. One JSX value placed structurally — no duplicated markup; the seam border flips side with it (border-b on top, border-t on bottom). The transcript's scroll discipline already followed the order (scrollTop = 0 for newest-first) — now the composer does too.tune_setting writes untouched; orient wording derives from the effective value (value_formatting.py) so it stays truthful under the new default — verified, no wording change needed.
New ConversationPane.order.test.tsx: ORDER_DEFAULT === "newest_first"; DOM order asserted both ways (the oldest_first composer-below case is the fence that the toggle still means something); the bar-moves-as-a-unit assertion. The two ruled-in failures were observed failing before the flip; the fence passed before AND after, as it must. Full suite 780/780 green; tsc clean.
Performed with a minted dev session for the repro persona (ff532bf0…, active on E0027, no stored conversation.message_order) against localhost:3001:
/tmp/cr208-fresh-newest-first.png).
Cleanup performed per the e2e cleanup rule: the oldest_first row the toggle wrote for the repro persona was deleted, restoring its no-preference state (DELETE 1).
ConversationPane NEVER renders on mobile: MobileSurface renders ConversationTranscript directly plus an engagement-wide bottom bar that serves all five slots (Companion + four rooms — hint line, attach, composer, mic). The conditional placement therefore applies to the desktop pane only. Moving the mobile bar per-slot (top on the Companion slot under newest_first, bottom on rooms) would make the bar jump on swipe and is a design question the CR does not rule on — left unbuilt, flagged here rather than decided piecemeal. On mobile under newest_first the transcript reads newest-at-top while the composer stays at the bottom bar.oldest_first preference loads, then the input zone remounts below — a one-time jump on page load for stored-oldest-first accounts. Inherent to "the composer moves with the order" + async preference read; the draft (controlled textarea) survives the remount. Two existing tests held DOM references across that remount and were fixed to settle/re-query (voicePlaceholder, micTiming) — idiom fixes, the guarantees under test are unchanged.person_settings holds conversation.message_order = "oldest_first" for the Operator persona, written 2026-08-12 15:27 (during the walk arc). The deploy-day flip governs no-preference accounts; the Operator sees oldest-first until they clear or toggle it. Named so the post-deploy eye-test isn't misread as a failed flip.Kind C as expected: a surface default and a layout rule. No seed-adjacent surface touched; null finding recorded as an entry, per §4.
Push 00ed2f2; watch the run; redeploy; post-deploy eye-test on a no-preference account (NOT the Operator's own — finding 3).
DUNIN7 — Done In Seven LLC — Miami, Florida — CR-2026-208 Checkpoint A — v0.1 — 2026-08-13 The transcript and the composer agree about where "newest" is.