# Cursor rules for LabDataStorageEvaluation

## Commit messages (mandatory format)

Every commit message you generate MUST follow this convention exactly.

### Source of truth (staged diff only)

Base the message ONLY on `git diff --cached` (the index / staged changes).
Do not use unstaged working-tree diffs, untracked files, recent commit
messages, or chat context.

- Mention only paths that appear in the staged diff.
- If the index is empty, output exactly: `No staged changes`
- Never mention a file (e.g. README.md) that is not in the staged diff.

First line: type(scope): description
- lowercase imperative English summary, under 72 characters, no trailing period
- type is one of (closed list): feat fix perf refactor security docs ci chore test
- scope is one of (closed list): specs rules docs config datagen convert bench report tools all

Scope selection by changed files:
- specs   = docs/specs/**
- rules   = docs/rules/**
- docs    = other prose docs (README.md, CLAUDE.md, docs/examples/**)
- config  = configuration files (.gitignore, .cursorrules, editable YAML defaults)
- datagen = lab-configuration and data-generation code (tasks 01-03:
  make_lab_config.py, make_process_flow.py, generate_data.py)
- convert = format converters: JSON-LD, SQLite, PostgreSQL, RDF (tasks 04-07)
- bench   = benchmark queries, runner, extrapolation (tasks 08-10)
- report  = reporting code and templates (task 11)
- tools   = helper scripts under tools/
- all     = multiple areas, or when no narrower scope honestly fits

Body: the subject is only a title. If the diff touches more than one area,
add a blank line and 2-6 concise bullets covering every meaningful changed
area. Split unrelated work into separate commits.

Special forms allowed as-is: "Merge ..." commits; "release(scope): vX.Y.Z".

Never emit vague or unprefixed subjects such as: "Update files",
"Improve project", "clarify rules", "changes".

Examples of good subjects:
- feat(datagen): stream friction cycle rows during CSV generation
- fix(convert): match sqlite row counts against MANIFEST before commit
- docs(rules): add benchmark methodology rule
- chore(config): ignore out/ artifact tree

## Typography

Use plain ASCII typography in everything you write into this repository:
hyphen-minus instead of en/em dashes, straight quotes, three dots instead
of the ellipsis character. See docs/rules/code-data-formatting.md.

## Python

Python code in this repository uses TABS for indentation. See
docs/rules/code-python-style.md for the closed dependency list.
