Development record
A capture disposition's title (an issue record's first body line) reaches abcd drain --json raw, and capture surfaces other than the drain still show the ledger reader's unreadable-record error raw (only the drain's copy is masked, since iss-2610121516552317), so a repository whose issue record body or a stored value carries a control or bidi rune puts it on those streams.
A capture disposition's title (an issue record's first body line) reaches abcd drain --json raw, and capture surfaces other than the drain still show the ledger reader's unreadable-record error raw (only the drain's copy is masked, since iss-2610121516552317), so a repository whose issue record body or a stored value carries a control or bidi rune puts it on those streams.
Security scope (abcd-fixes-what-it-adds): the route does not exist without abcd. The text is echoed by abcd's own --json surface, so abcd added the route and fixes it at the boundary the text enters by; a fix changes nothing about how the repository works.
Frontmatter
| id | iss-2610121542258778 |
|---|---|
| type | issue |
| lifecycle | resolved |
| severity | minor |
.abcd/work/issues/resolved/iss-2610121542258778-a-capture-disposition-s-title-an-issue.md
open on GitHub ↗ · commit history ↗
mentions2
- iss-2610121516552317abcd drain --json echoes each issue's disposition reason straight from the ledger reader: that text includes the reader's error messages with record paths unquoted and a record's raw deferred_after value, so a repository whose ledger file name or deferred_after carries a control or bidi rune (U+202E, U+009B) puts it raw on the --json stream, and the drain copies the same text into a judgement's note in drain.json, where readDrain (since iss-2610121505153157) then refuses the whole file. Found by the implementer of iss-2610121505153157.
- iss-2610121653499543abcd capture list --json, and the other capture surfaces that emit an issue whole, echo a record's stored text raw: its body and its frontmatter strings (remedy, found_during, resolution, wontfix_reason and the rest). capture writes a body with its hidden runes percent-encoded, but the validator holds no stored string to a rune set, so a hand-edited or repository-shipped record carrying a control, bidi or zero-width rune puts it on the stream. Found while masking the skipped-record list for iss-2610121542258778; a test planting U+202E and U+034F in a record body sees them raw in capture list --json.