What the standard puts in
A generated project holds more than the code that runs. Everything else in it is there because leaving it out costs more later.
The files
Section titled “The files”| File | Why it is there |
|---|---|
.github/workflows/ci.yml |
The gate, running exactly what pnpm lint runs locally |
cliff.toml, CHANGELOG.md |
The changelog is generated from the history, so the history has to be worth generating from |
docs/adr/ |
Decisions outlive the conversation that produced them |
.editorconfig |
Indentation stops being a matter of whose editor opened the file |
.gitattributes |
eol=lf, so a tool that rewrites a file to CRLF cannot hide the real change in the diff |
components.json |
shadcn add knows where to copy a dowel primitive |
lyrn.toml |
What this was generated from, and whether it has a mark yet, for doctor and upgrade later |
The gate is one script
Section titled “The gate is one script”pnpm lint is eslint, then tsc --noEmit, then the tests. CI runs that same
script rather than its own sequence, so there is no way for the two to drift
apart and no way to be surprised by CI.
The first commit
Section titled “The first commit”lyrn does not leave an uncommitted directory behind. The project starts as a
repository on main with one Conventional Commit, because the changelog
config it ships with reads Conventional Commits — a history that starts
messy cannot be tidied retroactively.
Colour goes through the theme
Section titled “Colour goes through the theme”A component names a token and never writes a colour down, which is what lets
the theme swap it underneath and the product’s accent move. eslint enforces
it via dowel/no-raw-color, so it is a rule rather than a habit.