From 725ad5160608b52d1ddf00a5c78fff3b7f0e25e7 Mon Sep 17 00:00:00 2001 From: jochen Date: Wed, 7 Oct 2026 19:23:08 +0200 Subject: [PATCH] Issue 294: a quoted value given to the controller's command line cannot hold a quote --- .../00-report.md | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 04-ISSUES/294-a-quoted-value-cannot-hold-a-quote/00-report.md diff --git a/04-ISSUES/294-a-quoted-value-cannot-hold-a-quote/00-report.md b/04-ISSUES/294-a-quoted-value-cannot-hold-a-quote/00-report.md new file mode 100644 index 00000000..78ebb8c1 --- /dev/null +++ b/04-ISSUES/294-a-quoted-value-cannot-hold-a-quote/00-report.md @@ -0,0 +1,33 @@ +--- +status: open +opened: 2026-10-07 +located-in: [] +fixed-by: +amended-design: +--- + +# 294. A quoted value cannot hold a quote + +## Symptom + +On 2026-10-07 a machine's role was set through the controller's `command` verb, which takes one +command line: `settings set claude-code '{"role":"the operator's laptop …"}' --node `. The +value is a JSON object inside single quotes, and the text inside it contains an apostrophe. The line +was cut at that apostrophe and the call failed. The same setting, passed through the `settings` verb +with its `values` argument as a field of its own, was taken at once. + +So any value given through `command` that itself contains a single quote cannot be passed at all. The +argument line has no way to escape a quote inside a quoted value, and nothing says so: the caller sees +a parse failure of the JSON, not the reason. + +## Why it matters beyond this instance + +`command` is how a shell line reaches the controller from anywhere, and settings, descriptions and +reasons are ordinary text, where an apostrophe is common. A value that cannot be said in one form +and can in another is a trap, and the failure names the wrong cause. + +## Not yet decided + +Whether `command` should accept an escape inside quoted values (as a shell does), refuse a line +with an unbalanced quote naming the position, or both; and whether every verb that a `command` line +reaches should also say which verb takes the value as its own field.