CLAUDE.md
Luria is a CLI that keeps a project’s memory — and this repository is its
own first user: the record here is scaffolded, generated, and linted by
the code in luria/. This file is a map, not a manual; when it disagrees
with luria --help or the docs, it is this file that is wrong.
Orient first:
- Run
luria --help— the live command surface; every command takes--help. - Project memory — the model: sources vs. generated views, schemes, journals, fragments, remotes, and how references are checked.
- The record — this project’s own configuration, generated: what kinds of entry exist and what to type to file one.
- Decisions and design principles — why things are the way they are. Check here before re-deriving or re-litigating a choice.
- Comment directives — how to acknowledge a lint finding deliberately instead of working around it.
Working agreements
- Work goes to a branch and a pull request, never straight to
main. The record is the deliverable; it needs a chance to be read before it becomes what the project believes. - File the record entry in the same contribution as the work
(
luria new): a changelog fragment for the change, a devlog entry for anything the next person would otherwise rediscover, a decision document when a real alternative was rejected. Filed with context loaded it costs a paragraph; re-derived cold it costs a session. - Never edit a generated file. Anything stamped
GENERATED— the decision index, tag pages,docs/design-principles.md, journal books, reports,docs/record.md,docs/configuration.md, the README badge region — is rebuilt byluria index. Edit the sources, rerun it. - Never hand-write a link target for a code. Write the bare code and
run
luria link --fix; record prose renders into views in other directories, so only the fixer knows the frame a target must resolve from. Codes in backticks are mentions, not citations, and are left alone. - A guard that keeps catching you is a bug report about the workflow. One catch is the net working; the same catch twice means the hazard is upstream, and the fix is to remove what generates the mistake, not to keep thanking the net.
Developing the package
python -m pytest tests -q plus luria lint is what CI runs. A new check
joins the lint only if the violation is always wrong and mechanically
fixable; anything needing judgement is a report with an acknowledgement
directive. Fire any new guard once on a real case before trusting it, and
say so in the devlog.