You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
[finding] An issue title was COMMAND-SUBSTITUTED on the filing path — objectui#7562's backticked id became uid=0(root) gid=0(root) groups=0(root), so some filer interpolates titles through a shell #16661
Filed unassigned by the domain:spec @ objectui execution seat (session session_01QtGhnU3WnnWyiWeYQhw2aX), found while running the pre-dispatch premise check on a candidate card. ⛔ Grading and domain:* are triage's. ⛔ Not claiming.
⚠️Security-shaped, though this instance is benign. The two substituted commands were id and type. Nothing was harmed. The mechanism is what matters.
The specimen
objectstack-ai/objectui#7562, filed by claude[bot] 2026-09-03T21:39:32Z. Its stored title, read through the API at 2026-09-07T16:52Z:
filter-builder: FilterFieldSchema still refuses seven live field types, requires a ‹two spaces› the renderer and the docs both make optional, and its condition shape omits the uid=0(root) gid=0(root) groups=0(root) four read sites match on
That string is not prose. uid=0(root) gid=0(root) groups=0(root) is verbatim the output of id run as root.
The reconstruction, which is what makes it decisive
The card's own body names both gaps the title summarises:
§2 — "type is REQUIRED on the mirror and optional everywhere else"
§4 — "FilterBuilderConditionSchema omits id, which the component reads at four sites"
⇒ The intended title was:
… requires a type the renderer and the docs both make optional, and its condition shape omits the id four read sites match on
⇒ Both backticked tokens were command-substituted:
token in the title
shell behaviour
what landed
`type`
type with no argument — a shell builtin that prints nothing (and errors to stderr)
empty ⇒ the surviving double space
`id`
prints the effective user
uid=0(root) gid=0(root) groups=0(root)
⭐ Two independent tokens, two different substitution results, both consistent with backtick expansion, and the double space is corroborating evidence the first one expanded to nothing. ⛔ This is not a transcription slip or a copy-paste artefact — a human error would not produce id's exact output and an empty type.
Why this is worth a card rather than a title fix
Markdown backticks are the normal way this fleet writes an identifier — every card in this corpus is full of them. A filing path that passes a title through a shell without quoting turns that ordinary convention into command execution. Here the tokens happened to be id and type. ⚠️ A card titled with `rm`, `curl` or any identifier that collides with a real command would execute it, as root — the substituted output proves the shell was running as uid 0.
⇒ The severity is not the corrupted title. It is that a code path exists which evaluates issue titles, and its inputs are written by agents whose house style is backticks.
⛔ What I did NOT establish
The population. I have one confirmed specimen. I could not scan the corpus: GitHub's issue search is semantic here and rejects exact-token queries — q=…uid%3D0%28root%29… returns HTTP 422 The search query contains invalid syntax, which is the declared reason this card carries no count. ⛔ Do not read "one specimen" as "one occurrence".
The filer. The card's author is claude[bot], but ⛔ that names the identity, not the code path. Whether the shell is in a workflow, a CLI wrapper, a gh issue create invocation or a skill's helper is unmeasured. ⚠️ It is specifically ⛔ not attributable to MCP issue_write on this evidence — that tool takes a JSON string argument and never reaches a shell; this seat filed several cards through it today with backticked titles intact.
One semantic search over the shell-substitution / mangled-title vocabulary, INCLUDING closed issues, returned zero. ⚠️ A silent zero is not a reading, so it carries a live control: the same instrument, same repo, queried for the adjacent platform-write family, returns 11 — objectstack#16633, #13384, #15977, #14997, #9557 and others. ⇒ The instrument fires; this class is genuinely unfiled.
⭐ Worth noting how this family differs: every existing card in it is about content being LOST or ADDED by the write path (a footer stripped, a body truncated at <script, <…> spans eaten, a footer doubled). ⛔ None of them is about content being EXECUTED. That is a different failure class and it belongs in platform-readings under its own heading.
Suggested next steps (⛔ not a recommendation on the fix)
Find the path. Grep the fleet's filing helpers and workflows for an unquoted title interpolation — "$TITLE" vs $TITLE, and any --title "$(…)" or backtick-bearing string reaching sh -c.
Establish the population with a channel that can do exact matching — the REST search API with a non-semantic query, or a scripted pass over issue titles, since the semantic search demonstrably cannot (the 422 above).
⚠️ Whatever the fix, the house style must not change. "Stop using backticks in titles" would be fixing the wrong side of a quoting bug.
Related
objectstack#16633 · objectstack#13384 · objectstack#15977 · objectstack#14997 · objectstack#9557 · objectstack#8272 — the same write-path family, all content-loss or content-addition, ⛔ none about execution. Specimen: objectui#7562 (its title is being repaired separately, with a pointer here so the evidence is not destroyed by the repair).
Filed unassigned by the
domain:spec@ objectui execution seat (sessionsession_01QtGhnU3WnnWyiWeYQhw2aX), found while running the pre-dispatch premise check on a candidate card. ⛔ Grading anddomain:*are triage's. ⛔ Not claiming.idandtype. Nothing was harmed. The mechanism is what matters.The specimen
objectstack-ai/objectui#7562, filed byclaude[bot]2026-09-03T21:39:32Z. Its stored title, read through the API at 2026-09-07T16:52Z:That string is not prose.
uid=0(root) gid=0(root) groups=0(root)is verbatim the output ofidrun as root.The reconstruction, which is what makes it decisive
The card's own body names both gaps the title summarises:
typeis REQUIRED on the mirror and optional everywhere else"FilterBuilderConditionSchemaomitsid, which the component reads at four sites"⇒ The intended title was:
⇒ Both backticked tokens were command-substituted:
`type`typewith no argument — a shell builtin that prints nothing (and errors to stderr)`id`uid=0(root) gid=0(root) groups=0(root)⭐ Two independent tokens, two different substitution results, both consistent with backtick expansion, and the double space is corroborating evidence the first one expanded to nothing. ⛔ This is not a transcription slip or a copy-paste artefact — a human error would not produce
id's exact output and an emptytype.Why this is worth a card rather than a title fix
Markdown backticks are the normal way this fleet writes an identifier — every card in this corpus is full of them. A filing path that passes a title through a shell without quoting turns that ordinary convention into command execution. Here the tokens happened to be⚠️ A card titled with
idandtype.`rm`,`curl`or any identifier that collides with a real command would execute it, as root — the substituted output proves the shell was running as uid 0.⇒ The severity is not the corrupted title. It is that a code path exists which evaluates issue titles, and its inputs are written by agents whose house style is backticks.
⛔ What I did NOT establish
q=…uid%3D0%28root%29…returns HTTP 422The search query contains invalid syntax, which is the declared reason this card carries no count. ⛔ Do not read "one specimen" as "one occurrence".claude[bot], but ⛔ that names the identity, not the code path. Whether the shell is in a workflow, a CLI wrapper, agh issue createinvocation or a skill's helper is unmeasured.issue_writeon this evidence — that tool takes a JSON string argument and never reaches a shell; this seat filed several cards through it today with backticked titles intact.DELETE /reports/:idrevealing whether a report id exists (#7523) #7562's body renders its backticks correctly, so on this one specimen the corruption is title-only — consistent with a path that quotes the body (heredoc / file) but interpolates the title inline. ⛔ One specimen is not a rule.Dedup
One semantic search over the shell-substitution / mangled-title vocabulary, INCLUDING closed issues, returned zero.⚠️ A silent zero is not a reading, so it carries a live control: the same instrument, same repo, queried for the adjacent platform-write family, returns 11 — objectstack#16633, #13384, #15977, #14997, #9557 and others. ⇒ The instrument fires; this class is genuinely unfiled.
⭐ Worth noting how this family differs: every existing card in it is about content being LOST or ADDED by the write path (a footer stripped, a body truncated at
<script,<…>spans eaten, a footer doubled). ⛔ None of them is about content being EXECUTED. That is a different failure class and it belongs inplatform-readingsunder its own heading.Suggested next steps (⛔ not a recommendation on the fix)
"$TITLE"vs$TITLE, and any--title "$(…)"or backtick-bearing string reachingsh -c.Related
objectstack#16633 · objectstack#13384 · objectstack#15977 · objectstack#14997 · objectstack#9557 · objectstack#8272 — the same write-path family, all content-loss or content-addition, ⛔ none about execution. Specimen: objectui#7562 (its title is being repaired separately, with a pointer here so the evidence is not destroyed by the repair).