Skip to content

gh prose examples carry no attribution sign-off, and --body-file paths must be literal (a shell variable is invisible to the hook) #122

Description

@dmccoystephenson

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    template-ruleShould be promoted into create-dev-loop.md

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions