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
The orchestrated-coder subagent definition (subagents/orchestrated-coder.md, "Commit formatting" <HARD-GATE>, rule 1) tells the coder to render commit titles "using describe-change.sh", but it names the script in prose without giving a runnable command, and it never adopted the {platform_home_dir}/scripts/ path convention that every other consumer of the script uses. The rule also carries a silent escape hatch ("If the script is not found, fall back to the bare title") that downgrades a hard-gate requirement without surfacing the downgrade. The observed effect is commits shipping without the configured {scope}|{type}: prefix, undetected until PR review.
Context
The install-time path-resolution mechanism the original version of this ticket proposed already exists. The install pipeline expands {platform_home_dir} to the platform home (~/.claude, ~/.codex, and so on), the established convention is to invoke helper scripts as {platform_home_dir}/scripts/<script>.sh, and script-invocation-conventions.test.ts enforces that prefix on every helper-script invocation in agent and skill content. The ticket has therefore been narrowed to the one place that mechanism was never applied.
Rule 1 escaped that guard because it is a prose mention (the script name in backticks, no command), which the convention deliberately exempts. Legitimate prose mentions exist elsewhere (for example, commit/SKILL.md points readers to title-templates.md), so the guard cannot simply flag all mentions.
Every other describe-change.sh consumer (condense-branch, create-ticket, create-pr, merge-pr, and title-templates.md itself) already shows a runnable {platform_home_dir}/scripts/describe-change.sh … command. Rule 1 is the lone straggler, and the sibling resolve-frontmatter.sh call in this same file already uses the prefixed form.
The orchestrated-coder runs only inside an orchestrated dispatch, where aborting on a rendering failure would lose the run. Because the resolved path makes "script not found" a non-issue, this ticket removes the fallback rather than replacing it with failure-handling text. Verifying that referenced files are actually present after install is a separate concern, tracked in Add a validator that checks all agent- and skill-referenced files resolve after install #790.
Proposed solution
Rewrite rule 1 of the "Commit formatting" hard-gate so it provides a runnable invocation of describe-change.sh through the {platform_home_dir}/scripts/ prefix and reads commit_title from the JSON output, matching the pattern the other consumers already use. Remove the silent "fall back to the bare title" clause without adding replacement failure-handling. Drop the inaccurate cross-reference to title-templates.md (the coder derives scope, type, and title from the git commit conventions skill it already follows, and the template internals are the script's concern). Once rule 1 is a real invocation carrying the prefix, the existing convention test covers it automatically, so no new test is needed.
Acceptance criteria
Must have
orchestrated-coder.md "Commit formatting" rule 1 invokes describe-change.sh through the {platform_home_dir}/scripts/ prefix and reads commit_title from the JSON output.
The silent "fall back to the bare title" clause is removed from rule 1, with no failure-handling instruction added in its place.
No bare-name (unprefixed) reference to describe-change.sh remains in orchestrated-coder.md.
After install, the generated orchestrated-coder.md will contain an absolute, runnable describe-change.sh invocation.
Problem
The
orchestrated-codersubagent definition (subagents/orchestrated-coder.md, "Commit formatting"<HARD-GATE>, rule 1) tells the coder to render commit titles "usingdescribe-change.sh", but it names the script in prose without giving a runnable command, and it never adopted the{platform_home_dir}/scripts/path convention that every other consumer of the script uses. The rule also carries a silent escape hatch ("If the script is not found, fall back to the bare title") that downgrades a hard-gate requirement without surfacing the downgrade. The observed effect is commits shipping without the configured{scope}|{type}:prefix, undetected until PR review.Context
{platform_home_dir}to the platform home (~/.claude,~/.codex, and so on), the established convention is to invoke helper scripts as{platform_home_dir}/scripts/<script>.sh, andscript-invocation-conventions.test.tsenforces that prefix on every helper-script invocation in agent and skill content. The ticket has therefore been narrowed to the one place that mechanism was never applied.commit/SKILL.mdpoints readers totitle-templates.md), so the guard cannot simply flag all mentions.describe-change.shconsumer (condense-branch,create-ticket,create-pr,merge-pr, andtitle-templates.mditself) already shows a runnable{platform_home_dir}/scripts/describe-change.sh …command. Rule 1 is the lone straggler, and the siblingresolve-frontmatter.shcall in this same file already uses the prefixed form.orchestrated-coderruns only inside an orchestrated dispatch, where aborting on a rendering failure would lose the run. Because the resolved path makes "script not found" a non-issue, this ticket removes the fallback rather than replacing it with failure-handling text. Verifying that referenced files are actually present after install is a separate concern, tracked in Add a validator that checks all agent- and skill-referenced files resolve after install #790.Proposed solution
Rewrite rule 1 of the "Commit formatting" hard-gate so it provides a runnable invocation of
describe-change.shthrough the{platform_home_dir}/scripts/prefix and readscommit_titlefrom the JSON output, matching the pattern the other consumers already use. Remove the silent "fall back to the bare title" clause without adding replacement failure-handling. Drop the inaccurate cross-reference totitle-templates.md(the coder derives scope, type, and title from thegit commit conventionsskill it already follows, and the template internals are the script's concern). Once rule 1 is a real invocation carrying the prefix, the existing convention test covers it automatically, so no new test is needed.Acceptance criteria
Must have
orchestrated-coder.md"Commit formatting" rule 1 invokesdescribe-change.shthrough the{platform_home_dir}/scripts/prefix and readscommit_titlefrom the JSON output.describe-change.shremains inorchestrated-coder.md.orchestrated-coder.mdwill contain an absolute, runnabledescribe-change.shinvocation.