Repository navigation
fix(agent): state the one-command-per-call rule in every recipe - #534
Conversation
The skill tells agents to run each Taskless command as its own shell call, but an agent deep in a recipe copies the recipe's own examples, and that is where chaining crept back in. Every standalone recipe now carries one shared paragraph beneath its header, rendered from %(ONE_COMMAND_PER_CALL)s with the resolved invocation (none under mechanics: false). The feedback-invite fragment is exempt: it is appended under a recipe that already states it. Two recipes chained a command themselves: check substituted $(git diff ...) into the command line, and create-vale-rule piped check --json into jq. The first now runs git diff separately; the second uses check --json --rule <id>, which shipped for #379. Topic versions bump so cached recipes are refetched.
|
@claude /review |
|
Claude finished @theCodeDrift's task in 3m 18s —— View job Review completeReview mode: incremental — read 0 prior review thread(s) before reviewing.
Assessment: solid, mechanical change — no correctness bugs found. What I verified:
One inline nit posted (non-blocking):
Minor, non-blocking observation (not filed inline): the new "names no invocation" test ( |
| * an `echo ======` separator as equals expansion and drops the rest of the | ||
| * line, and auto mode refuses a line that wraps the download-and-run command | ||
| * in glue it cannot scope (taskless/cli#532). One template, so the wording | ||
| * cannot drift between 27 files. |
There was a problem hiding this comment.
[New] Nit: "cannot drift between 27 files" overstates it slightly. The directory holds 27 .md files, but feedback-invite.md is exempt and never carries its own copy of this paragraph (it's appended, header-less, beneath a recipe that already states the rule). Only 26 files literally embed %(ONE_COMMAND_PER_CALL)s. Not a functional issue, just a doc-comment precision nit.
0.13.1 taught the installed skill to run each Taskless command as its own shell call. An agent deep in a recipe copies that recipe's own examples instead, and that is where chaining crept back in. This puts the rule in every recipe.
One shared paragraph. Every standalone recipe carries
%(ONE_COMMAND_PER_CALL)sdirectly beneath its# Topic:line, rendered from one function with the same invocation%(TASKLESS_CLI)sresolves to:header: falsekeeps it.mechanics: falseit says "the Taskless invocation" instead of naming one, since a caller with no CLI gets no invocations (prompts: header:false / mechanics:false still render versioned CLI invocations (0.12 nightly) #469).feedback-inviteis exempt. It is never served alone: the survey gate appends it, header-less, beneath a recipe that already states the rule.Chained examples removed.
checksubstituted$(git diff …)into the command line. It now runsgit diff --name-onlyas its own call and passes the paths it printed.create-vale-rulepipedcheck --jsonintojq, and said no single command could measure one rule.check --rule <id>shipped for check: run a single rule over the project to measure a new branch #379, so it now usescheck --json --rule <id>.Shell text in
ci.mdandhooks.mdis content the agent writes into a CI job or hook file, not a command it runs, so it stays.Versions. All 26 changed topics bump, so a cached recipe is refetched.
Tests.
prompts.test.tsasserts the paragraph on every topic and anonymous variant, with and without the header, and its invocation-free form undermechanics: false.OpenSpec change
recipe-command-per-call(ADDED requirement oncli-agent) is archived in this PR. Single-PR delivery. Patch changeset included.Fixes #532