# Proof audit pass 1

PR [#22822](https://git.cafe/pingdotgg/t3code/pull/22822) ([GitHub mirror](https://github.com/pingdotgg/t3code/pull/22822)). Branch `fix/issue-13622`, audited head [560f00f](https://github.com/pingdotgg/t3code/commit/560f00f72e466aecdc42ac11f2da3b9c086cc49c), full SHA `560f00f72e466aecdc42ac11f2da3b9c086cc49c`.

Explicitly entered `/home/ubuntu/wt/issue-13622`. Disk check before inspection: 11 GB available on `/`; no cleanup required. Read-only checkout, no browsers/dev servers, no tests launched, no gh or forge comments/mutations. This brief and its public upload are the authorized artifacts. T3 PR registration succeeded using host/repository/number after URL parsing failed.

## Findings and existing evidence

Evidence is insufficient pending captures, not a code blocker or instruction to stop the capture phase. Full task diff is `git diff origin/main...HEAD`: four files, 325 insertions / 10 deletions, merge base `e27a03e94d`. Local `main` is stale and gives unrelated changes; do not build fixtures from that comparison. Read the entire four-file task diff, the renderer and all direct callers, both round-2 reviewer reports and the fix report.

Changed files: `ChatMarkdown.tsx` (per-block native auto direction, logical alert chrome, root scope flag); `index.css` (list/quote direction propagation, per-item logical gutters, LTR code/table isolation, logical checkbox margins, cell start alignment); `TimelineUserMessageRow.tsx` (autoDirection=false); browser tests (237 lines of direction/layout/interaction coverage).

The Codex and Claude round-2 reports both find no blocking code defect and record 19/19 scoped browser tests passing. Fix report records focused lint/typecheck/format success and red/green regression checks. These are reported evidence, not reruns by this auditor. Existing desktop/narrow images are baseline-only and cannot establish appearance of this head. No current-head integrated capture manifest or committed reproducible proof fixture/seeder was established. The tests contain useful fixture strings, but do not seed the real app or prove its shells.

Accepted boundaries: native first-strong is the chosen spec, so Latin-leading Hebrew stays LTR. Nested/list-leading blockquotes may retain left-side outer chrome while text reads RTL. Capture and label these; do not silently portray them as fixed. Native mobile uses a separate renderer and is UNVERIFIED/unchanged. Electron desktop shares web code but its shell is UNVERIFIED. No sensitive surface changes were found in the diff.

## Render-path inventory and collapse

All rows below are affected (A), preserved regression controls (P), or explicitly unverified (U). Default autoDirection=true affects every ChatMarkdown caller, not only assistant text.

| Path / branch | Caller and data/props | Named fixture / obligation |
|---|---|---|
| A h1–h6, paragraphs | TimelineAssistantRows; TimelineWorkEntryRow expanded; headingLevelOffset, lineBreaks, skills; complete or streaming | F1 headings/prose and F6 streaming; include all six heading levels in fixture source, representative visible levels together |
| A ul/ol/li | Same, plus all block callers; tight vs loose; RTL/LTR first item; independent items; nested; ordered start/gutter | F2 list geometry; outside markers visible inside actual clipped narrow parent |
| A task li/input | Default read-only/disabled; FileMarkdownPreview callback enables editing; checked/unchecked | F2 read-only; F4 editable, toggle and persisted file text/reopen |
| A blockquote / alert div | Ordinary quote vs generated English alert label; NOTE/TIP/IMPORTANT/WARNING/CAUTION colors | F3 quotes; all alert types source and captures; label nested/list-leading residual |
| A th/td plus pre/code/table isolation | RTL/mixed cells, LTR table column order; inline code vs fenced block | F1 inline/code; F3 tables including alignment and overflow |
| P opt-out | TimelineUserMessageRow: autoDirection=false, lineBreaks, parseRawHtml=false, heading offset, context refs | F5 same payload in user bubble; composer draft beside it |
| A plans | ProposedPlanCard preview vs expanded, headingLevelOffset=3 | F7 collapsed/expanded plan |
| A file / attachment | FileMarkdownPreview with imageBaseDir, callback, padded max-width; AttachmentFilePreview rendered Markdown vs source | F4 editable file; F8 read-only attachment, source/render toggle |
| A pending question | ComposerPendingUserInputPanel activeQuestion.question, fold/scroll body | F7 question expanded + choose option; no sensitive permission prompt changes |
| A inline thoughts | TimelineWorkEntryRow and TimelineWorkGroupRows: inline span, parseRawHtml=false, remarkThoughtPreview; active/finished labels | F7 collapsed thinking preview and expanded work detail; preserve truncation/wrapping |
| A secondary event/inspector | TimelineV2EventRow both detail branches; V2ItemInspector text item; lineBreaks | F8 event detail and inspector, each mounted branch identified in manifest |
| A PR Markdown | PullRequestMarkdown segments, extraRemarkPlugins, githubMedia, environment/panel refs | F8 harness-only PR wrapper with synthetic data; never edit another PR to seed |
| A review-context popover | UserMessageContextChips comment.text (literal HTML, lineBreaks) / fenced non-diff; composerContextPresentation trimmed comment.text | F8 open both popovers; text and code branches; diff renderer itself unchanged |
| A workflow script | WorkflowOpeningBlock scriptMarkdown, folded vs expanded | F8 folded/expanded fenced script; code remains LTR |
| U clients | Electron shell and native iOS/Android | U1/U2 explicitly unverified; 390px web is not native-mobile proof |

Media widgets, action/link dispatch, math implementation, server/providers/contracts and transport paths do not change. Include a harmless link and skill/inline chip in F1 to detect direction interactions; no real shell/action execution needed. Existing raw-HTML true/false and lineBreaks true/false modes are represented by assistant, user and context callers; no separate exhaustive plugin matrix is justified. Heading offsets change accessibility levels, not the six visual heading styles.

## Minimum capture matrix

Q = **1440×1000 light, 1440×1000 dark, 390×844 light, 390×844 dark**, CSS pixels, default app zoom/text scale. All mandatory paragraph, bullet, mixed-inline-code, fenced-code and table rows appear in every Q member. These are viewport × theme × fixture requirements, not a demand that one unreadably scaled image contain a long page. Use ordinary scrolling and numbered overlapping frames so every required row is visible. No hidden/offscreen row counts as captured.

| ID | Status | Fixture and visible data | Minimum viewport × theme × fixture / interaction |
|---|---|---|---|
| F1 | A, pending | Hebrew and Arabic heading, paragraph with final punctuation, English control, RTL-leading sentence with Latin inline code, Latin-first Hebrew limitation, fenced JS with Hebrew string, link/chip | Q × F1; before/after paired at identical scroll and content; code copy and link focus smoke at narrow dark |
| F2 | A, pending | RTL bullets; mixed Hebrew/English ul and ol in both first-item orders; tight/loose; nested lists; ordered 98/99/100 wide marker; mixed checked/unchecked Hebrew/Arabic/English tasks | Q × F2, multiple frames as needed; marker/checkbox gutter and wrapping visible; read-only tasks stay read-only |
| F3 | A, pending | Ordinary RTL quote, five alert variants, nested quote and list-leading quote residual; mixed RTL/LTR header and body cells; English table; explicit aligned columns; long table forcing horizontal scroll | Q × F3; retain LTR column order, RTL cell alignment and LTR code; narrow table scroll endpoint frame; residual explicitly annotated in manifest |
| F4 | A, pending | Same task/list/table payload in actual editable workspace Markdown file, including long RTL task label | Q × F4 initial view; 390 dark toggle unchecked→checked→unchecked, reopen file and show content/state, rendered/source switch; before/after initial geometry |
| F5 | P, pending | Same RTL paragraph/list/task payload in user message and unsent composer; normal LTR control | Q × F5 before/after; composer cursor/edit/selection smoke at narrow dark; show original appearance retained, not newly mirrored |
| F6 | A, pending | Assistant append sequence: RTL paragraph, mixed next paragraph, partial→closed code fence, appended mixed list, complete | 1440 dark and 390 light × F6 short recordings through real timeline update path; final stills may reuse F1/F2; record actual streaming flag transition; synthetic provider explicitly labeled |
| F7 | A, pending | Plan preview/expanded, compact thought active/finished + expanded work entry, pending question fold/expanded/options | 1440 light and 390 dark × F7; all branches visible across frames; expand/collapse and question selection demonstrated. Shared prose/theme coverage from Q above |
| F8 | A, pending | Attachment preview, event detail both branches, inspector, two review-context popovers, PR wrapper, workflow script | 1440 light and 390 dark × F8; one labeled view per caller/branch, open/toggle/expand controls; harness-only variants clearly separated from integrated evidence |
| U1 | U | Electron desktop shell | Unverified; do not infer from desktop-width web |
| U2 | U | Native iOS/Android enriched Markdown | Unverified and unchanged; do not infer from narrow web |

Minimum static combinations: F1–F5 × Q = 20; F7–F8 × two specified width/theme pairs = 4; F6 = 2 recordings. This is 24 static fixture combinations plus two recordings, with extra scroll/interaction frames where needed, and matched baseline/head frames for changed geometry and preserved controls. Composite fixture pages may combine F1–F3 if full-size readable frames still satisfy every row. Secondary rows can share a fixture gallery, but each real caller must be mounted or explicitly marked harness-only. No need to multiply every secondary caller by Q after common styling is covered; their distinct containers/interactions still need the specified wide/narrow checks.

## Reproducible fixture and seeding plan for capturer

This audit does not author or commit repo files. **Before capture, capturer must commit fixture data and the seeding/replay script**, then report that commit SHA and exact command. Keep evidence-only screenshots outside the repository. Suggested location is an existing test-fixture area rather than a shipped debug feature; select the repository's conventions. A fixture must import real components/styles, never recreate their HTML/CSS. If a separate proof commit sits atop audited head, prove production diff is unchanged and identify both SHAs. Pass 2 must be able to rebuild without live user data, provider randomness or unpublished /tmp files.

1. Commit UTF-8 named Markdown payloads F1–F3 and task file F4; manifest maps each matrix row to payload section, caller, props, theme, viewport, screenshot/video and expected exception. Use fixed synthetic thread/project/item IDs and no real conversation/account data. Commit exact stream chunks and the compact/plan/question/event/context/PR model data.
2. Seeder must require an explicit isolated worktree T3 home, reject live `~/.t3/userdata`, be idempotent, and use existing supported fixture/event/command setup paths. Do not hand-edit the live database. State whether it seeds through orchestrator commands/events or uses a deterministic mock provider. No supported ready-made RTL integration seeder was established in this pass: its implementation and successful rebuild are pending, not assumed.
3. For F1–F3/F5: seed a stopped thread with one user message and assistant fixtures through the normal persisted timeline path. Seed synthetic work entries, plan, question and event details for F7/F8 through that same isolated fixture setup. Populate the composer through normal UI after loading; do not send it. Each message can be separate to make scrolling/capture deterministic.
4. For F4: script writes the synthetic Markdown file in the isolated project; open its real file preview. Verify checkbox mutation updates that file at the correct marker offset and survives reopening. F8 attachment uses the same payload as an attached Markdown file and its real rendered/source shell.
5. For F6: deterministic mock-provider replay feeds committed chunks through real timeline state and completes the turn. A direct ChatMarkdown rerender is harness-only and cannot be labeled real integrated streaming. Keep timestamps/chunks deterministic, not token timing from a live provider.
6. F7 thought/plan/question and F8 event/inspector require their actual projection/props. If supported app seeding cannot produce a branch, mount the real caller in a committed harness and record **harness-only, integrated unavailable**. PR wrapper uses synthetic data only (no forge write); review-context popovers use synthetic review comments. Do not silently substitute assistant output for a secondary caller. Workflow fixture must create a synthetic scheduled-workflow script locally, with no recurring execution.
7. Harness-only fallback also applies to any provider-specific unavailable thought/question variant and raw prop combinations not reachable from the seeded app. A fixture gallery is component proof, never desktop/native proof. List unresolved rows at handoff.
8. Baseline uses the same payload/seed commit against production base `e27a03e94d`; head uses production `560f00f` plus only committed fixture scaffolding. Capture manifest records production SHA, fixture SHA, command, viewport, theme, fixture section and interaction state. Baseline images already supplied are context only unless their data/viewport/theme are proven to match.

Suggested exact sample payload primitives (repeat enough text to wrap at 390):

```markdown
## כותרת בעברית
זהו משפט בעברית. שלום עם `const value = 1` בתוך משפט.
## عنوان بالعربية
هذه جملة عربية.
React מאפשר לבנות ממשק בעברית עם `const value = 1`.
English prose stays left to right.

- שלום.
- Hello.

98. שלום.
99. Hello.
100. עוד פריט.

- [ ] שלום עולם.
- [x] مهمة عربية.
- [ ] English task.

> שלום עולם.

> [!NOTE]
> שלום עולם.

> > שלום עולם.

> - שלום
> - עולם

| שם | Name |
| --- | --- |
| שלום. | Hello. |
```

Add an actual fenced JS block containing `const message = "שלום";`, all remaining alert kinds, headings h1–h6, reverse mixed-list order, loose/nested lists and aligned/overflow tables in the committed payloads. This sample is a seeding specification, not a claim those fixtures exist or were rendered.

## Handoff

No captures accepted in pass 1. Pending rows F1–F8 cover the required visible changes and interactions. U1/U2 remain explicit platform limitations, not silently fulfilled requirements. Captures pending alone do not stop the task; proceed to fixture/seeder commit and authorized capture phase. No sensitive-surface escalation needed.

Model/harness: GPT-6.1-sol through Codex in T3 Code.

VERDICT: INSUFFICIENT F1–F8 (captures and committed fixture/seeder pending); U1 desktop and U2 native mobile unverified
