- 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
5.2 KiB
5.2 KiB
Meta / Rule file naming
Binding for files inside docs/rules/. Adding, renaming, or
splitting a rule file follows this document.
Layout
docs/rules/- binding rules (this folder): reproducible conventions on HOW work is done. Reference content that supports a rule also lives here, named<rule>-reference.md.docs/specs/- the pipeline task specifications (WHAT to build: tasks 01-11, their inputs, outputs, and dependencies). Binding for scope and deliverables, but conventions that span tasks are codified indocs/rules/.docs/examples/- imported reference materials (master plan, ontology). Descriptive, not binding.
Files live flat at the top level of docs/rules/. No subfolders.
Naming
<domain>-<subdomain>-<topic>[-<aspect>].md
- Lowercase, dashes between segments. No underscores, no CamelCase.
- Max 4 segments. Most general first.
- Reading the filename should answer: category -> subcategory -> topic.
Approved domain prefixes
| Prefix | Covers |
|---|---|
bench- |
Benchmark execution, resource measurement, extrapolation, reporting methodology |
build- |
Pipeline task orchestration: the ./out/ tree, .done markers, task order |
code- |
General code style across languages (Python, SQL, PowerShell): comments, formatting, error handling, configuration |
data- |
The simulated dataset: determinism, identifiers, units, column naming |
db- |
SQLite / PostgreSQL benchmark target schemas, loading, indexing |
meta- |
Rules about the rules system and working conventions |
obs- |
Observability and logging |
test- |
Validation gates, checksums, pytest conventions |
Don't invent a new prefix without adding it to this table in the same commit.
Subdomains (second / third segment)
Within a domain, the second segment is a recognised tool, subsystem, or concern; the third is the concrete topic. Established families:
db-sql-*- relational benchmark targets (SQLite, PostgreSQL): schema, loading, indexing.data-*- dataset conventions (data-determinism,data-naming-units).bench-*- measurement methodology (bench-methodology).build-pipeline-*- task orchestration and artifact layout.code-*- general code style (comments, formatting, error handling, config, Python style).meta-*- rules about the rules system and working conventions.obs-*- observability and logging (obs-python-logging).test-*- validation and testing (test-pipeline-validation).
Examples
| Good | Reads as |
|---|---|
data-determinism.md |
Data -> deterministic generation |
db-sql-schema.md |
DB -> SQL -> schema conventions |
bench-methodology.md |
Benchmarks -> measurement methodology |
code-python-style.md |
Code -> Python -> style |
obs-python-logging.md |
Observability -> Python logging |
meta-rules-naming.md |
Meta -> rules system -> naming |
| Bad | Why |
|---|---|
BenchMethodology.md |
CamelCase forbidden |
data_determinism.md |
Underscores forbidden |
sqlite-loading-conventions.md |
Use db- prefix, drop redundant conventions |
bench-execution-measurement-rules-doc.md |
5+ segments + redundant rules suffix |
Adding a rule
- Pick the domain prefix; add new ones to the table above first.
- Check
ls docs/rules/- extend a sibling rule before creating a new one. - Create the file with binding content, examples, and exceptions.
- Add a row for the new file to the rule-trigger table in the root
CLAUDE.mdin the same commit. - If replacing an older doc,
git mvto preserve history andGrepthe repo for the old path.
Rules vs specs vs memory files
Three homes for a statement; pick by its kind:
| Source | Stores |
|---|---|
docs/rules/<name>.md |
A reproducible, mandatory behaviour - the same answer for every contributor on every task within the topic. |
docs/specs/NN_<task>.md |
The definition of one pipeline task: scope, inputs, outputs, dependencies. |
memory/<name>.md |
A fact about this user, this project, or the current moment - preferences, ongoing initiatives, locked decisions, infra specifics. |
- A convention that must hold across several tasks ->
docs/rules/. - A deliverable of one task -> its spec in
docs/specs/. - A fact about the user or the present state of things ->
memory/.
A rule file may reference a spec or a memory note for context, but the binding convention lives in the rule file. When a rule and a spec disagree on a convention (naming, formats, thresholds), the rule wins and the spec is updated to match.
Anti-patterns
- Duplicating rule content across rule files - pick one canonical location and cross-link from siblings instead of copying.
- Restating a whole spec inside a rule - the rule codifies the reusable convention and links the spec for task detail.
- Adding rules to the body of CLAUDE.md instead of creating a rule file - CLAUDE.md carries only the trigger table, the project preamble, and the canonical-source-of-truth note.
- Naming a file after the implementation instead of the domain
(
oxigraph-loading.mdvsdb-rdf-loading.md) - the implementation may be replaced; the topic endures.