Render the escapes in an error, and drop the manifest field nobody read
Two loose ends from the per-component work. The card's error is the tail of what the build actually printed, and a compiler marks its own errors in colour -- so it arrived as `[1;31merror`, with punctuation welded onto the one line somebody is trying to read. It now goes through the same `ansiAnnotated` the log dialog uses: the colour is drawn, and the sequences with no meaning on a phone are consumed rather than printed, so a cursor movement cannot arrive looking like corruption either. One composable covers it because every failure already went through OutputText. Selection copies AnnotatedString.text, which is the message with every escape already gone, so what lands on the clipboard is what was on screen rather than what was on the wire. And `/manifest` carried a `build` object that nothing on the phone ever parsed. It was going to be how a running build survived leaving the app; that is not built, so it is gone rather than left looking finished. `RunningBuild` went with it -- it was split out of `BuildStatus` for that one reader and had become an indirection with one user, so `status()` fills one flat struct again. `/status` is byte-identical either way, since the split was flattened on the wire; checked against the running server rather than assumed. Looked at on the emulator against a failing build: bold red `error`, blue `-->`, no escape text anywhere, and long-pressing it still raises the handles and the Copy toolbar.
This commit is contained in:
1 parent
3685ab107d
commit
aa8e2b97a5
4 files changed
+44
-70
No files matched your search
@@ -441,7 +441,7 @@ mutable at runtime from the phone.
|
||||
answer, and `claim` writes that entry synchronously under the same lock
|
||||
the route answers from -- so nothing can read a component the request
|
||||
just claimed as idle, which the phone would take for "the build is
|
||||
over". `RunningBuild::building` stays, but it means "anything at all is
|
||||
over". `BuildStatus::building` stays, but it means "anything at all is
|
||||
happening here" and is only for the controls that act on the whole
|
||||
checkout; anything about one component reads that component's `step`.
|
||||
The app mirrors the split exactly: `ProjectState` for the pull and the
|
||||
@@ -473,6 +473,14 @@ mutable at runtime from the phone.
|
||||
card that starts a selection on long-press fights the gestures it
|
||||
already has. Iris asked for exactly that line on 2026-09-01: "not the
|
||||
'failed' but the command output for build errors and stuff".
|
||||
`OutputText` also renders the ANSI escapes rather than printing them,
|
||||
through the same `ansiAnnotated` the log dialog uses -- a compiler marks
|
||||
its own errors in colour and the tail of a failed build is that output
|
||||
verbatim, so raw it arrived as `[1;31merror` with punctuation welded
|
||||
onto the one line somebody was trying to read. Selection copies
|
||||
`AnnotatedString.text`, which is the message with every escape already
|
||||
gone, so what lands on the clipboard is what was on screen rather than
|
||||
what was on the wire.
|
||||
- **A finished component shows nothing, and its button goes back to
|
||||
normal.** Iris's call, 2026-09-01: "you shouldn't see the time it took
|
||||
once it finishes, it should just go back to its normal enabled button
|
||||
|
||||
Reference in new issue
Block a user