Filed unassigned from the domain:cli lane execution seat (session session_019bmVFqoQPq63zhKrxdYG1r), recording only. Surfaced by the #10675 dev seat; I am filing it because it is a tooling hazard for every seat, not a defect in that card.
What is already known, and why it is too narrow
Several seats have hit "the os-dev-report HTML-comment marker does not survive GitHub's sanitizer" and worked around it by posting the marker as literal text. That workaround is real and it works — but the diagnosis behind it is incomplete, and the incomplete version is dangerous because it makes the marker look like the only casualty.
The actual rule, measured today
The #10675 report comment (5368832679) was posted with a literal-text marker — the known workaround — and was still destroyed. Its JSON is unparseable because the body is cut off.
The cause: the summary contained the fragment
<object> is a real HTML element name. The sanitizer consumed it and every byte after it. The marker survived; the report did not. The live report had to be re-posted as 5368859088.
So the rule is not "the HTML-comment marker gets stripped." It is:
Any angle-bracket fragment naming an HTML element truncates the comment body from that point to the end.
<object>, <link>, <style>, <form>, <input>, <select>, <option>, <title>, <data>, <output>, <meta>, <base>, <map>, <track>, <source> — all are ordinary words an agent report might wrap in angle brackets when describing a type, a generic parameter, or a value. Promise<object>, Array<link>, Record<string, object> are exactly the shapes that appear in a summary or tests field.
⚠️ Note this is a content-dependent failure. A fenced code block does not protect it — the fragment above was inside the JSON string of a fenced block and was still consumed.
Why this is worse than a stripped marker
A stripped marker is loud in the one way that matters: a marker scan finds nothing, so somebody notices. Truncation is silent and asymmetric:
- the marker survives, so every scan keyed on the marker reports the comment as present and well-formed;
- the JSON is cut mid-string, so a parser fails — but only a consumer that actually parses it learns anything;
- a human skimming sees a report that starts correctly and simply appears to end.
The three re-posts today (#10179 ×2, #10317, #10453, #10675) were all caught by hand. Nothing systematic catches this.
Suggested shape (grading input, not a prescription)
- Read-back must check the TAIL, not the marker. The current convention — "post, then read the comment back to confirm the marker survived" — verifies precisely the byte that is most likely to survive. The check that would have caught today's case is: read back and confirm the body ends where you expected (parse the JSON, or compare the last N bytes against what was sent).
- Escape at the source. A report writer should render angle brackets in prose/JSON as
</>, or avoid the <word> spelling entirely (this.error(the error object) costs nothing). - Whichever is chosen, the dispatch/report convention documenting the marker workaround should be corrected — it currently teaches a rule that is true but too narrow, and the narrowness is what let this through.
Not a duplicate
The existing marker-stripping knowledge is about the <!-- … --> marker specifically. This is the same sanitizer, a different and larger blast radius: the marker case loses one line, this case loses the entire remainder of the body.
Filed unassigned from the
domain:clilane execution seat (sessionsession_019bmVFqoQPq63zhKrxdYG1r), recording only. Surfaced by the #10675 dev seat; I am filing it because it is a tooling hazard for every seat, not a defect in that card.What is already known, and why it is too narrow
Several seats have hit "the
os-dev-reportHTML-comment marker does not survive GitHub's sanitizer" and worked around it by posting the marker as literal text. That workaround is real and it works — but the diagnosis behind it is incomplete, and the incomplete version is dangerous because it makes the marker look like the only casualty.The actual rule, measured today
The #10675 report comment (
5368832679) was posted with a literal-text marker — the known workaround — and was still destroyed. Its JSON is unparseable because the body is cut off.The cause: the summary contained the fragment
<object>is a real HTML element name. The sanitizer consumed it and every byte after it. The marker survived; the report did not. The live report had to be re-posted as5368859088.So the rule is not "the HTML-comment marker gets stripped." It is:
<object>,<link>,<style>,<form>,<input>,<select>,<option>,<title>,<data>,<output>,<meta>,<base>,<map>,<track>,<source>— all are ordinary words an agent report might wrap in angle brackets when describing a type, a generic parameter, or a value.Promise<object>,Array<link>,Record<string, object>are exactly the shapes that appear in asummaryortestsfield.Why this is worse than a stripped marker
A stripped marker is loud in the one way that matters: a marker scan finds nothing, so somebody notices. Truncation is silent and asymmetric:
The three re-posts today (#10179 ×2, #10317, #10453, #10675) were all caught by hand. Nothing systematic catches this.
Suggested shape (grading input, not a prescription)
</>, or avoid the<word>spelling entirely (this.error(the error object)costs nothing).Not a duplicate
The existing marker-stripping knowledge is about the
<!-- … -->marker specifically. This is the same sanitizer, a different and larger blast radius: the marker case loses one line, this case loses the entire remainder of the body.