Part of #6.
The reply-splitting behaviour is the one mechanic on the page that a visitor cannot infer from what is shown. Both exchanges in the demo section are a single short ask and a single short answer, so nothing on the page shows what arrives when the answer is long: three texts, then the tail waiting behind more. That is the detail that makes the thin-link pitch concrete, and it is currently only prose.
What is there today
- The
exchangesarray holds exactly two entries, each one ask and one reply, with a one-line note:resources/views/index.stx#L19-L30, notes atresources/views/index.stx#L23andresources/views/index.stx#L28. - The split is asserted in the fourth how-it-works step, "split into at most three messages":
resources/views/index.stx#L36. - It is asserted again in the bento cell, "A long reply is split into three texts, and the rest waits until you send more":
resources/views/index.stx#L281. moreis listed in the keyword table with the gloss "the rest of a long reply", which names the word without showing it:resources/views/index.stx#L43.- The demo section is a
@foreachover the array, so it already renders any number of entries, withu-revealon the ask andu-reveal-lateon the reply:resources/views/index.stx#L224-L236. - Those two classes are defined once, inside the reduced-motion media query and an
@supports (animation-timeline: view())guard, so a new entry needs no new CSS:resources/views/index.stx#L162-L169. - The satellite prefix is added by the template, not stored in the data:
resources/views/index.stx#L231. - The section header promises real texts with a real date: "Two real texts, answered." and "Replies from September 27, 2026, exactly as Uplink sends them":
resources/views/index.stx#L221-L222. - The real behaviour: the reply is chunked, the first
maxPartsparts go out now, the rest is stored on the conversation, and the last sent part gets a line appended reading(N more, text "more"):app/Uplink/uplink.ts#L436-L446, marker atapp/Uplink/uplink.ts#L443. - Defaults that decide the shape of a real capture:
replyPrefixis the satellite glyph plus a space,maxCharsis 1200 andmaxPartsis 3:app/Uplink/config.ts#L58-L60. - The chunker cuts at a paragraph, then a line, then a sentence, then a word boundary, and rejects a boundary inside the first third of the window:
app/Uplink/format.ts#L38-L47andapp/Uplink/format.ts#L56-L58. moreis matched only as a whole message, withcontinue replyas its alias:app/Uplink/commands.ts#L19-L20,app/Uplink/commands.ts#L24-L27.- The hero image is already the element the page loads first, at
fetchpriority="high":resources/views/index.stx#L206-L215. public/videos/contains only a README, so no video asset exists yet.
Proposal
- Widen the entry shape in
resources/views/index.stx#L19-L30so one entry can carry a sequence of turns rather than a fixed ask and reply, keeping the two existing entries expressible in the new shape with no copy change. - Add a third entry with the turns of one real run: the long ask, the parts that actually went out with the marker line on the last one, the literal
more, and the continuation. - Loop the turns inside the article at
resources/views/index.stx#L224-L236, so themoreturn and its continuation stay in the same article rather than being pushed apart by thespace-y-14gap atresources/views/index.stx#L224. Each ask keepsu-reveal, each reply keepsu-reveal-late. - Write the third note in the same shape as
resources/views/index.stx#L23andresources/views/index.stx#L28: what the run did, how many parts it produced, how long it took. - Update the header at
resources/views/index.stx#L221, since "Two real texts" stops being true, and keep the date sentence atresources/views/index.stx#L222true for the new capture. - Do not shoot a screen recording for this. It carries no information the bubbles do not, the hero at
resources/views/index.stx#L206-L215is already the first paint, and a video needs a poster plus a reduced-motion story that the file's own no-client-script constraint atresources/views/index.stx#L12-L13does not want. If a moving image is wanted later, the candidate is a muted looping WebM of the menubar flow in the download section withpreload="none"and the existingpublic/images/menubar-setup.pngas its poster, whichresources/views/index.stx#L344already ships.
Requirements
- The text is a capture, not a mock-up. Run a real long task through Uplink and paste what Messages received. The header at
resources/views/index.stx#L222says "exactly as Uplink sends them", and that sentence is the page's whole credibility. - Do not fake the cut. The chunker never breaks a word and prefers a paragraph, line or sentence boundary, per
app/Uplink/format.ts#L38-L47. A cut mid-word or an invented ellipsis would contradict the code. - The marker is verbatim. The last sent part ends with a newline and
(N more, text "more")exactly as written atapp/Uplink/uplink.ts#L443, with the real count. The reply bubble iswhitespace-pre-lineatresources/views/index.stx#L231, so the newline renders as written. - Leave the prefix out of the data.
resources/views/index.stx#L231prepends the satellite glyph, so each part rendered as its own bubble gets it, which matches what really arrives. Both existing entries already store unprefixed text. - The
morebubble is the bare word.app/Uplink/commands.ts#L24-L27matches only a whole message, so showing anything longer thanmorein that bubble would show something that would have gone to the agent as a task instead. - Keep the whole entry in one article. Two array entries would read as two unrelated conversations across the
space-y-14gap, which loses the point that the continuation belongs to the reply above it. - No new CSS and no script. Reuse
u-revealandu-reveal-latefromresources/views/index.stx#L167-L168. No new keyframes, no new media query, no<script>. - No em-dash or en-dash.
app/Uplink/format.ts#L25converts both to a spaced hyphen on the way out, so a genuine capture already complies. Do not reintroduce one in the note or the new header.
Acceptance
resources/views/index.stxis the only file changed, and nothing is added underpublic/.- The demo section renders three entries, and the third shows a truncated reply carrying the marker line, a
morefrom the user, and the continuation. - Feeding the third entry's reply text through
toPlainTextandchunkwithmaxChars1200 minus the prefix length reproduces the parts shown, and the marker matchesapp/Uplink/uplink.ts#L443including the count. - The section header no longer says "Two", and the date sentence is true of all three entries.
- The built page adds no
<script>, no<video>and no@keyframesrelative to the current build. - With
prefers-reduced-motion: reduce, and in a browser withoutanimation-timeline: view(), the third entry is fully visible and static. grep -nP '\x{2014}|\x{2013}' resources/views/index.stxreturns nothing.