- Words before code
- Every project starts with a file that fixes its vocabulary, including the synonyms that are not allowed. The words in that file are the words in the code, so a rename is a decision rather than a refactor.
- Decisions are written down
- Numbered decision records sit next to the source. Most of them record what was deliberately left out: no delete, no OCR, no reminders, no cross-day tracking. Knowing why something is missing is worth more than knowing it is missing.
- A pure core, an untidy shell
- The domain logic is pure functions with all of the tests. Anything that touches a network, a clock or a disk lives in a thin layer around it. A bill split can be tested without a browser and a bot can be tested without a token.
- Models are a convenience, not a dependency
- Language models parse messy input and nothing more. Their output is revalidated before it reaches storage, and every one of these tools still runs with the model turned off, at no cost.