- adapt meta-/code-/obs- rules to the local Python benchmark pipeline - replace db-sql-ddl, code-config-env-scope, test-e2e-pytest with pipeline equivalents - add code-python-style, data-determinism, data-naming-units, bench-methodology, build-pipeline-tasks - normalize specs and README typography to ASCII per code-data-formatting - rewrite root CLAUDE.md trigger table; add .cursorrules and .gitignore - specs: pipeline plan and task specs 00-11 - rules: 19 binding rule files adapted for this project - docs: CLAUDE.md rule-trigger table - config: .cursorrules commit convention, .gitignore excluding out/ and .venv/ - docs: rewrite README.md with pipeline diagrams, setup guide, result placeholders - config: requirements.txt for the closed dependency list - datagen: make_lab_config.py writes out/config/lab_config.yaml and .done marker
4.3 KiB
Meta / Git commits - never on behalf of the user
Binding for every contributor (human or AI agent) touching this repository. Applies to all git history-modifying operations.
1. The rule
Never create a git commit on behalf of the user. Ever. The user is the only entity allowed to materialize a commit in this repo.
This covers, without exception:
git commit(with or without-a,-m,--amend)git merge- never finalize onegit rebase(interactive or otherwise) - never start onegit revert- never run; the user decides whether a change is undonegit cherry-pickgit stashgit tag(annotated or lightweight)git pushof any kind - pushing is the user's callgit reset/git checkoutthat changes the working tree or refs- Any wrapper script or
ghAPI call that would create a commit / tag / merge on the user's behalf
For an AI agent, git is read-only: reading history (git log,
git diff, git status, git show) and inspecting branches is fine;
anything that writes to the index, refs, or objects/ - including
git add - is left to the user. (This matches the machine-level
enforcement: git write commands by the agent are denied by a hook.)
2. Why
- Commit authorship and message wording are decisions the user owns - they are durable, public, and signed against the user's name and email.
- "Tiny" commits that look harmless ("fix typo", "delete unused file") still rewrite history and cannot be quietly reversed once pushed.
- Generated data and measured results in this project take hours to rebuild; what enters history and when is a conscious decision, not a side effect.
3. What to do instead
- Make the working-tree changes.
- Report what changed and offer a draft commit message as plain text in the
conversation, together with the exact
git add/git commitcommands for the user to run themselves.
4. Commit-message format
When you draft a message, follow this project's convention:
- First line -
type(scope): description, lowercase imperative summary in English, under 72 chars, no trailing period. - Types (closed list) -
feat fix perf refactor security docs ci chore test. - Scopes (closed list, owner-approved 2026-07-11) -
specs rules docs config datagen convert bench report tools all. Pick by the area of the changed files:specs=docs/specs/**rules=docs/rules/**docs= other prose docs (README.md, rootCLAUDE.md,docs/examples/**)config= configuration files (.gitignore,.cursorrules, editable YAML defaults such as hardware prices)datagen= lab-configuration and data-generation code (tasks 01-03:lab_configgeneration, process diagrams,generate_data.py)convert= format converters (tasks 04-07: JSON-LD, SQLite, PostgreSQL, RDF)bench= benchmark queries, runner, and extrapolation (tasks 08-10)report= reporting code and templates (task 11)tools= helper scripts undertools/all= multiple areas or in doubt
- Coverage - multi-area diffs get a blank line and a 2-6 bullet body covering every meaningful changed area; split unrelated work.
- Special forms -
Merge ...andrelease(scope): vX.Y.Zare allowed as-is.
No commit-msg hook is installed in this repository yet; the convention is
enforced by review. If a hook is added later, it must implement exactly this
format and this file must be updated in the same change. The same convention
is mirrored into .cursorrules for Cursor's built-in commit-message
generator - see meta-cursor-rules.md.
5. Anti-patterns
- "I'll just commit it so we have a checkpoint." No. Working-tree state is the checkpoint; the user decides when it becomes history.
- Amending the user's last commit to fix something you noticed. No. Surface the issue, let the user choose between amend and new commit.
- Suggesting
git add -Ain the draft commands. List explicitly named files, so the user sees exactly what would land. - Vague subjects (
Update files,Improve project,clarify rules). Say what changed and where.
6. Exception (closed list)
There are no exceptions. If a workflow seems to require a commit, pause, explain the dependency, and let the user run the git command.