| 1 | # Harness chat presentation port |
| 2 | |
| 3 | Reference: DeepSeek Harness `c291e7961a515f6d7af9304e7fd1d257929aef26`. |
| 4 | The source inventory and license are in |
| 5 | [`harness-chat/README.md`](../desktop/frontend/src/components/harness-chat/README.md). |
| 6 | |
| 7 | ## Delivered behavior |
| 8 | |
| 9 | - One natural-flow conversation surface, with compact process rows and a |
| 10 | standalone final answer. Completed processes show call/message counts and |
| 11 | retain a failed-call count when recovery succeeded. Interrupted or terminally |
| 12 | failed turns remain visible. |
| 13 | - Tools expand inline into the Harness terminal, diff, source-list or generic |
| 14 | input/output presentation. An inspection action opens the existing isolated |
| 15 | detail drawer. Long content loads on request; malformed results preserve a |
| 16 | retryable preview instead of enabling copy of an incomplete result. |
| 17 | - Thinking uses the first nonempty line after completion and the latest line |
| 18 | while running. Expanded thinking does not duplicate its text in the header. |
| 19 | - System and permission receipts are compact disclosures. Uninformative empty |
| 20 | completion summaries are omitted. Markdown headings, tables and spacing use |
| 21 | the adapted Harness styles; Reasonix's parsing and security remain in place. |
| 22 | - Copy, conversation fork, usage breakdown, duration and timestamps remain. |
| 23 | Voting controls are omitted. Missing historical usage is not fabricated. |
| 24 | - Settings no longer expose Standard/Deep conversation presentation. New |
| 25 | sessions default to Workspace write. Persisted legacy fields are retained only |
| 26 | for compatibility and do not select a second chat implementation. |
| 27 | |
| 28 | The port retains Reasonix theme/font settings, composer, approvals, host-safe |
| 29 | links, Markdown workers, history APIs and backend ownership. It does not import |
| 30 | Cordis or the Harness server. Tool result shapes that cannot be mapped reliably |
| 31 | use the generic card. This is not a claim that the entire Harness application |
| 32 | or every plugin-specific renderer is embedded in Reasonix. |
| 33 | |
| 34 | ## Verification on macOS arm64 |
| 35 | |
| 36 | Frontend build passed hooks lint, typecheck, CSS/theme checks, the single scroll |
| 37 | writer contract and unchanged bundle budgets (render-blocking CSS 3.8 KiB against |
| 38 | 4.0 KiB). Transcript, settings, stream, app lifecycle, remote and composer suites |
| 39 | passed. The full-content race test also covers invalid results and retry. |
| 40 | |
| 41 | Production-path fixture replay results: |
| 42 | |
| 43 | | Runtime | 240 turns input P95 | 1,000 turns input P95 | Max long task at 1,000 | Switch P95 | |
| 44 | | --- | ---: | ---: | ---: | ---: | |
| 45 | | Chromium 153 | 56.3 ms | 120.7 ms | 138 ms | 32.8 ms | |
| 46 | | WebKit 26.6 | 46 ms | 103 ms | Unavailable | 40 ms | |
| 47 | | Electron 44.2.0 | 58.4 ms | 43.4 ms | 142 ms | 20.3 ms | |
| 48 | |
| 49 | All three exercised 60 consecutive streaming size changes, manual upward |
| 50 | scrolling, prepend, process disclosure, drawer focus restoration and queue |
| 51 | convergence. Stream anchor drift was 0 px; prepend drift was 0.094 px. Chromium |
| 52 | released heap growth across 20 switches was 125,396 bytes. The weather fixture |
| 53 | verifies 24 px tool rows, collapsed permission bodies and no mounted tool |
| 54 | subtrees in a folded process. WebKit does not expose the Long Tasks API. |
| 55 | |
| 56 | Raw results and screenshots: [`evidence/harness-chat-port`](evidence/harness-chat-port). |
| 57 | Fixtures contain synthetic weather data. Native verification additionally |
| 58 | opened the user's existing weather turn and the settings screen in the final |
| 59 | packaged app. Package identity and native smoke details are in |
| 60 | [`design-qa.md`](../design-qa.md). |
| 61 | |
| 62 | The test build is installed at `~/Applications/Reasonix-Canary/Reasonix.app` |
| 63 | with the isolated `Reasonix-Test-ChatRefactor` profile. Native WebView hosts on |
| 64 | other platforms, exposed native scrollbar dragging, extended native IME soak |
| 65 | and fully expanded 1,000-turn stress were not rerun for this presentation pass. |
| 66 | No release was published or PR merged. |
| 67 | - The right-side turn rail replaces the top dropdown. Harness fixed-pitch |
| 68 | marks, active state, hover/focus previews and independent overflow scrolling |
| 69 | are adapted to the existing ChatScrollController. Pointer/keyboard activation |
| 70 | enters reading mode; return-to-latest restores follow. Only loaded turns are |
| 71 | listed and prepend extends the rail. Preview subscribes only to its user and |
| 72 | answer nodes. Navigation stays available in narrow workbenches. |
| 73 |