Visai įdomų commit'ams tekstą užmačiau tarp codex "pamąstymų" :) Gal visgi pradeda multi-vendor harness'o taisyklės veikt :)
## Commit Message Format
```
<type>: <description>
<optional body>
Co-Authored-By: Claude Opus 4.7 <[el. paštas paslėptas]>
```
Types: feat, fix, refactor, docs, test, chore, perf, ci, build, style, revert
### A LONG message goes in a FILE, never on the command line (measured 2026-07-29)
agent-git.js commit accepts --message-file <path>, and almost nothing points agents at it: it
appears 7 times in tools/scripts/agent-git.js and 0 times in this rule or CLAUDE.md. One
session burned hours on the three traps it removes, then amended around them:
| Trap on the command line | What it costs |
|---|---|
| backticks are command-substituted by bash | words silently vanish from the committed message; `` to
`` became nothing |
| a body line starting with -- | parsed as a flag; the whole invocation dies |
| very long --message + long --paths | the shell invocation is killed with exit 1 and zero output |
And the workaround is worse than the traps. Reaching for git commit --amend -m to fix a
message has two failure modes of its own:
1. it commits the shared index, so a peer's staged file lands in your commit under your subject;
2. it replaces the whole message, stripping the Agent-ID: / Session-ID: trailers that
agent-git appended - which breaks GR-71 attribution and makes unlanded-fix-check report your
landed files as never-committed (measured: 4 of 5 commits lost the trailer; 16 files misreported).
Do this instead:
```bash
MSG=$(node tools/scripts/agent-git.js scratch-path --agent claude_code) # collision-free path
cat > "$MSG" <<'EOF'
fix(area): one-line summary
Body with backticks, --flags at line start, whatever you need.
EOF
node tools/scripts/agent-git.js commit --agent claude_code \
--paths "a.js,b.js" --message-file "$MSG"
```
Use scratch-path rather than inventing one: agents in a session share a scratchpad directory, so
generic basenames (msg.txt, commit-msg.md) race each other and a commit can ship the WRONG
message. agent-git refuses those basenames outright for that reason (measured: aaf5edfdc).
Tracked: problem:harness.git-commit-amend-strips-session-attribution.
## Commit Quality Gate - industry standard (CEO directive 2026-06-08: commits are a CTO decision)
Commits follow Conventional Commits (conventionalcommits.org) + MPRO conventions. Enforced by
tools/eidos/commit-quality-check.js (gate item commit_quality; advisory by default,
MPRO_COMMIT_GATE_BLOCKING=1 to enforce). The CTO owns commit hygiene - the CEO does not.
Never ask the (non-technical) CEO to TRIGGER a commit (CEO directive 2026-06-27: "who should
request commits? non technical ceo?"). Committing is a CTO decision - when work is done and proven,
COMMIT IT yourself; do NOT end the turn with "say commit", "run /commit", "let me know to commit",
or "want me to commit?". That punts a technical decision onto someone who should not have to make it.
Enforced: tools/eidos/commit-punt-check.js (runCommitPuntCheck) -> gate item commit_punt_to_ceo
(-2), wired in BOTH runAgentMode + runAgentModeQuick (fail-open). RELEASED only for a genuine
production deploy/release needing business sign-off, or a Tier-1 (C51) critical-file commit the CEO
must approve. (This is the commit-specific face of the empty-question ban / do-it-dont-offer.md.)
## Commit Message Format
```
<type>: <description>
<optional body>
Co-Authored-By: Claude Opus 4.7 <[el. paštas paslėptas]>
```
Types: feat, fix, refactor, docs, test, chore, perf, ci, build, style, revert
### A LONG message goes in a FILE, never on the command line (measured 2026-07-29)
agent-git.js commit accepts --message-file <path>, and almost nothing points agents at it: it
appears 7 times in tools/scripts/agent-git.js and 0 times in this rule or CLAUDE.md. One
session burned hours on the three traps it removes, then amended around them:
| Trap on the command line | What it costs |
|---|---|
| backticks are command-substituted by bash | words silently vanish from the committed message; `` to
`` became nothing |
| a body line starting with -- | parsed as a flag; the whole invocation dies |
| very long --message + long --paths | the shell invocation is killed with exit 1 and zero output |
And the workaround is worse than the traps. Reaching for git commit --amend -m to fix a
message has two failure modes of its own:
1. it commits the shared index, so a peer's staged file lands in your commit under your subject;
2. it replaces the whole message, stripping the Agent-ID: / Session-ID: trailers that
agent-git appended - which breaks GR-71 attribution and makes unlanded-fix-check report your
landed files as never-committed (measured: 4 of 5 commits lost the trailer; 16 files misreported).
Do this instead:
```bash
MSG=$(node tools/scripts/agent-git.js scratch-path --agent claude_code) # collision-free path
cat > "$MSG" <<'EOF'
fix(area): one-line summary
Body with backticks, --flags at line start, whatever you need.
EOF
node tools/scripts/agent-git.js commit --agent claude_code \
--paths "a.js,b.js" --message-file "$MSG"
```
Use scratch-path rather than inventing one: agents in a session share a scratchpad directory, so
generic basenames (msg.txt, commit-msg.md) race each other and a commit can ship the WRONG
message. agent-git refuses those basenames outright for that reason (measured: aaf5edfdc).
Tracked: problem:harness.git-commit-amend-strips-session-attribution.
## Commit Quality Gate - industry standard (CEO directive 2026-06-08: commits are a CTO decision)
Commits follow Conventional Commits (conventionalcommits.org) + MPRO conventions. Enforced by
tools/eidos/commit-quality-check.js (gate item commit_quality; advisory by default,
MPRO_COMMIT_GATE_BLOCKING=1 to enforce). The CTO owns commit hygiene - the CEO does not.
Never ask the (non-technical) CEO to TRIGGER a commit (CEO directive 2026-06-27: "who should
request commits? non technical ceo?"). Committing is a CTO decision - when work is done and proven,
COMMIT IT yourself; do NOT end the turn with "say commit", "run /commit", "let me know to commit",
or "want me to commit?". That punts a technical decision onto someone who should not have to make it.
Enforced: tools/eidos/commit-punt-check.js (runCommitPuntCheck) -> gate item commit_punt_to_ceo
(-2), wired in BOTH runAgentMode + runAgentModeQuick (fail-open). RELEASED only for a genuine
production deploy/release needing business sign-off, or a Tier-1 (C51) critical-file commit the CEO
must approve. (This is the commit-specific face of the empty-question ban / do-it-dont-offer.md.)