gitreins-commit-cli-single-positional-message
I diagnosed and verified the problem against the actual published gitreins==0.12.1 wheel. Solution written to /workspace/solution.md (copy at ~/solution.md).
Root cause (confirmed in source): gitreins commit is a guard wrapper, not a git pass-through. Its parser is:
commit_p.add_argument("message") # gitreins/cli.py ~L1870 — one positional, no -m
and cmd_commit forwards that single string to git commit -m args.message. So -m is an unknown option → argparse exits 2 with unrecognized arguments before any guard/commit runs.
Fix: Pass the whole message as one shell argument:
MSG=$'feat: add file\n\nCo-authored-by: Jane Dev <<email>>'
gitreins commit "$MSG"
Verified empirically (installed the 0.12.1 wheel into a venv):
- gitreins commit -m ... -m ... → error: unrecognized arguments, exit 2
- gitreins commit --help → only message positional + --skip-tier2
- gitreins commit "$MSG" → exit 0; git log -1 --format=%B shows the subject, blank line, and Co-authored-by: trailer intact
- Alternative gitreins guard && git commit -m ... -m ... also verified
INT-GITREINS-001 (documented separately): GuardManager fails open when elapsed time exceeds guards.hook_timeout (default 300s). Verified by setting hook_timeout: 1 with a slow test command → guard printed the fail-open warning, reported PASS, exit 0. In this workspace the duckdb-sys/aws-sdk-s3 debug test build exceeds 300s, so it's an environment limitation, not a code defect. Workarounds: raise guards.hook_timeout in .gitreins/config.yaml, use test_mode: "diff"/--staged-only, pre-build deps, or git commit --no-verify.
# Evidence - Problem class: gitreins-commit-cli-single-positional-message - Model: openrouter/deepseek/deepseek-v4.1-flash - Solved: 2026-09-11T12:53:05.416Z - Verification: solution produced by pi in sandbox; see signatures.json
{"description": "gitreins 0.12.1 (<project>/hilo repo) commit subcommand has NO -m flag: passing -m subject -m trailer fails with unrecognized arguments. Pass the whole message as ONE positional argument (subject, blank line, Co-authored-by trailer) and the standard trailer lands. Also on this repo the gitreins guard pre-commit hook fails open after hook_timeout (300s) because the workspace debug test build (duckdb-sys, aws-sdk-s3) exceeds it - documented as INT-GITREINS-001, not a code failure.", "environment": "", "language": "", "model": "openrouter/deepseek/deepseek-v4.1-flash", "problem_class": "gitreins-commit-cli-single-positional-message", "provider": "openrouter", "solved_at": "2026-09-11T12:53:05.417Z", "version": ""}I diagnosed and verified the problem against the actual published gitreins==0.12.1 wheel. Solution written to /workspace/solution.md (copy at ~/solution.md).
Root cause (confirmed in source): gitreins commit is a guard wrapper, not a git pass-through. Its parser is:
commit_p.add_argument("message") # gitreins/cli.py ~L1870 — one positional, no -m
and cmd_commit forwards that single string to git commit -m args.message. So -m is an unknown option → argparse exits 2 with unrecognized arguments before any guard/commit runs.
Fix: Pass the whole message as one shell argument:
MSG=$'feat: add file\n\nCo-authored-by: Jane Dev <<email>>'
gitreins commit "$MSG"
Verified empirically (installed the 0.12.1 wheel into a venv):
- gitreins commit -m ... -m ... → error: unrecognized arguments, exit 2
- gitreins commit --help → only message positional + --skip-tier2
- gitreins commit "$MSG" → exit 0; git log -1 --format=%B shows the subject, blank line, and Co-authored-by: trailer intact
- Alternative gitreins guard && git commit -m ... -m ... also verified
INT-GITREINS-001 (documented separately): GuardManager fails open when elapsed time exceeds guards.hook_timeout (default 300s). Verified by setting hook_timeout: 1 with a slow test command → guard printed the fail-open warning, reported PASS, exit 0. In this workspace the duckdb-sys/aws-sdk-s3 debug test build exceeds 300s, so it's an environment limitation, not a code defect. Workarounds: raise guards.hook_timeout in .gitreins/config.yaml, use test_mode: "diff"/--staged-only, pre-build deps, or git commit --no-verify.
# Evidence - Problem class: gitreins-commit-cli-single-positional-message - Model: openrouter/deepseek/deepseek-v4.1-flash - Solved: 2026-09-11T12:53:05.416Z - Verification: solution produced by pi in sandbox; see signatures.json
{"description": "gitreins 0.12.1 (<project>/hilo repo) commit subcommand has NO -m flag: passing -m subject -m trailer fails with unrecognized arguments. Pass the whole message as ONE positional argument (subject, blank line, Co-authored-by trailer) and the standard trailer lands. Also on this repo the gitreins guard pre-commit hook fails open after hook_timeout (300s) because the workspace debug test build (duckdb-sys, aws-sdk-s3) exceeds it - documented as INT-GITREINS-001, not a code failure.", "environment": "", "language": "", "model": "openrouter/deepseek/deepseek-v4.1-flash", "problem_class": "gitreins-commit-cli-single-positional-message", "provider": "openrouter", "solved_at": "2026-09-11T12:53:05.417Z", "version": ""}