Delete TRANSCRIPT_RENDERING.md, which was all finished work

The file was a week's record of the transcript work, and everything in its
architecture, techniques and rejected sections has landed -- so it was a log
of how the code got here, which the code's own comments and AGENTS.md
already carry. Kept only what existed nowhere else: stream-bench.sh,
trace-draw.sh and the two emulator-loop traps go to AGENTS.md beside
transcript-bench.sh, along with the standing rule to run the benches either
side of a transcript change; GrapheneOS's broken System Tracing goes to
~/.claude/MACHINE.md, since it is about the phone rather than this project.

Its one unfinished item -- the reconnect loop after a restart onto a
streaming session, which may already have been fixed by the restore's
one-event-per-request fix -- moves to TODO.md.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
irisandClaude Opus 5 committed 2026-09-04 13:38:40 -04:00
1 parent 7997eeb7f8
commit 45e631ab96
3 files changed
+37 -310

No files matched your search

+24 -7
View File
@@ -5,11 +5,6 @@ replacing the Claude app for daily use. Rust/Axum backend on the desktop,
Kotlin/Compose Android app, WireGuard + pinned self-signed TLS + bearer token
between them.
**`TRANSCRIPT_RENDERING.md` is the record of the transcript work** --
measurements, techniques, the harness, and the ordered list of what is
next. Read it before touching anything under `Markdown*.kt`,
`Transcript*.kt` or `SessionScreen.kt`'s list.
**`PLAN.md` is the design source of truth.** Read it before building or
changing anything structural. It records every decision with its date, its
rationale, and the alternatives that were rejected and why — keep that habit
@@ -370,7 +365,7 @@ first if a remote spawn ever mangles an argument.
**An inline code chip is drawn behind the text** rather than as the
renderer's span background, because a span background is part of the
text's own drawing and hid the selection under it -- see
`appendCodeChip` in `MarkdownLinks.kt` and TRANSCRIPT_RENDERING.md.
`appendCodeChip` in `MarkdownLinks.kt`.
- **A session can be moved to another directory** from the settings dialog
(`POST /sessions/{id}/cwd`). It stops the process, because a working
directory is settled at spawn; the next message starts it in the new one.
@@ -523,7 +518,29 @@ first if a remote spawn ever mangles an argument.
the in-app copy button produces, whose `on screen:` line names what the
viewport was actually holding. Compare two runs of it with the same
gestures; the emulator's absolute frame times transfer nothing, the
report's accounting does.
report's accounting does. Run it either side of any change under
`Markdown*.kt`, `Transcript*.kt` or `SessionScreen.kt`'s list, and put the
report in the commit; the numbers that move first are the worst
`record: one block`, the reparse mean while streaming, and the draw
phase's accounting line.
- **`app/stream-bench.sh [-k] FILE` is that measurement for a reply still
arriving.** It opens the first session, taps "Jump to latest" so the list
is pinned to the newest end, resets the report, sends FILE, waits for the
transcript to stop growing, and prints. Both of those are corrections to a
first version that measured nothing: a transcript parked further back never
redraws while a reply streams into it, and a session is idle at *both* ends
of a turn, so polling for idle answers before the turn has started.
- **`app/trace-draw.sh` names what a scrolling frame spends inside the
framework**, from `atrace` text output with no trace processor needed. It
is how the cost of a layout node per link was attributed to the framework
rather than guessed at.
- **Two traps in the emulator bench loop**, each of which cost a run.
`adb shell pm clear` removes the enrolment and the notification permission
along with the saved anchors, so the next run measures a permission dialog
-- re-enrol with the command `ui-sandbox.sh` prints, and
`pm grant ... POST_NOTIFICATIONS`. And a saved scroll anchor is per session
id, so the only way two builds start a scroll from the same place is a
*fresh session for each*.
- **`ai-server --delay MS` holds every response back.** Over the tunnel a
phone's requests take tens to hundreds of milliseconds, and several
faults live entirely in what the app does *while* one is outstanding. On