The gap
Two template rules are in direct conflict, and the combination breaks the first prose gh call of every cycle in every instance that has an attribution hook installed.
Half one — the examples carry no sign-off. Every gh issue create / gh pr create / gh pr comment example in the template composes a body with no attribution sign-off. Repositories with an attribution hook reject those calls outright, so the first prose call of a cycle fails and the loop has to rediscover the requirement each time.
Reported independently by at least 8 instances: apex-dev-loop#3, money-calculator-dev-loop#3, text-tool-dev-loop#3, viron-dev-loop#20, fishe-dev-loop#20, minecraft-nodes-dev-loop#1, roam-website-dev-loop#5, dans-spawn-system-dev-loop#6, py-env-lib-dev-loop#4.
Half two — the fix prescribed for a different problem defeats the sign-off. PR #93 replaced the heredoc body form with --body-file <path>, because some command classifiers reject $(...) command substitution outright. That fix is correct for the classifier problem, but the attribution hook inspects the command string, not the file the command points at. With --body-file, a body containing a perfectly correct sign-off is still rejected, because the hook cannot see it.
Evidence
Observed directly while opening a retrofit PR. --body-file was used with a body whose final line was exactly the required sign-off; the hook rejected the call. The same body inlined via --body "$(cat <<'EOF' ... EOF)" was accepted and the PR was created.
A second-order effect is worth recording: the hook rejects the entire Bash invocation, so chaining git work and the gh call in one && compound means none of it runs — including the commit and push. The git work and the gh call must be separate invocations, or a hook rejection silently discards the staging work too.
Suggested resolution
These cannot be resolved independently — a rule that says "use --body-file" and a rule that says "the sign-off must be in the body" are jointly unsatisfiable under a command-string-reading hook. Suggested template text:
- Keep
--body-file as the default for bodies with no attribution requirement.
- Where the target repo has an attribution hook, use the inline heredoc form and place the sign-off as the last line of the body, accepting the command-substitution risk (a hook rejection is visible and recoverable; a silently-dropped sign-off is not).
- Detect rather than assume: if a
gh prose call is rejected with an attribution message, re-issue it inline rather than treating the repo as blocked.
- State explicitly that git operations and prose
gh calls belong in separate invocations, because a hook rejects the whole compound command.
- Every prose
gh example in the template should carry the sign-off, so the rendered instance is correct by default.
drafted by Claude on behalf of Daniel Stephenson
The gap
Two template rules are in direct conflict, and the combination breaks the first prose
ghcall of every cycle in every instance that has an attribution hook installed.Half one — the examples carry no sign-off. Every
gh issue create/gh pr create/gh pr commentexample in the template composes a body with no attribution sign-off. Repositories with an attribution hook reject those calls outright, so the first prose call of a cycle fails and the loop has to rediscover the requirement each time.Reported independently by at least 8 instances:
apex-dev-loop#3,money-calculator-dev-loop#3,text-tool-dev-loop#3,viron-dev-loop#20,fishe-dev-loop#20,minecraft-nodes-dev-loop#1,roam-website-dev-loop#5,dans-spawn-system-dev-loop#6,py-env-lib-dev-loop#4.Half two — the fix prescribed for a different problem defeats the sign-off. PR #93 replaced the heredoc body form with
--body-file <path>, because some command classifiers reject$(...)command substitution outright. That fix is correct for the classifier problem, but the attribution hook inspects the command string, not the file the command points at. With--body-file, a body containing a perfectly correct sign-off is still rejected, because the hook cannot see it.Evidence
Observed directly while opening a retrofit PR.
--body-filewas used with a body whose final line was exactly the required sign-off; the hook rejected the call. The same body inlined via--body "$(cat <<'EOF' ... EOF)"was accepted and the PR was created.A second-order effect is worth recording: the hook rejects the entire Bash invocation, so chaining git work and the
ghcall in one&&compound means none of it runs — including the commit and push. The git work and theghcall must be separate invocations, or a hook rejection silently discards the staging work too.Suggested resolution
These cannot be resolved independently — a rule that says "use
--body-file" and a rule that says "the sign-off must be in the body" are jointly unsatisfiable under a command-string-reading hook. Suggested template text:--body-fileas the default for bodies with no attribution requirement.ghprose call is rejected with an attribution message, re-issue it inline rather than treating the repo as blocked.ghcalls belong in separate invocations, because a hook rejects the whole compound command.ghexample in the template should carry the sign-off, so the rendered instance is correct by default.drafted by Claude on behalf of Daniel Stephenson