Ferrigura / Architecture
Architecture decisions
Each record holds one decision that shapes ferrigura: what it covers, what it decides, why, and what follows from it. The records are living documents. When a decision changes, its record is edited in place; when a decision no longer holds, its record is deleted and its number is not reused. There are no dates, statuses or change logs in a record: what it says is what holds today.
A record has this outline:
- Scope: what the decision covers and, as explicitly, what it does not cover.
- Decision: the rule, worded so that it can be checked where possible.
- Why: the reasons, and the options that were weighed and not chosen.
- Consequences: what follows for the code, the tests and the users.
- Related: other records and the learnings behind it.
A new decision that is hard to reverse gets the next free number. Code comments cite a record by its number, such as decision 0009.
Project
Scroll sideways for more columns.
| Record | Decision |
|---|---|
| 0001 | Code, documentation and commit messages are written in US English |
| 0002 | The domain terms and the words to avoid |
| 0003 | Commit messages follow Conventional Commits; feat and fix are for what the packages show |
| 0004 | All crates and npm packages share one version, one changelog and one tag |
| 0005 | Every change keeps the whole suite green, and output changes are deliberate |
Architecture
Scroll sideways for more columns.
| Record | Decision |
|---|---|
| 0006 | Rust only, with no browser at run time |
| 0007 | Hand-written parsers; Mermaid's grammars are the specification |
| 0008 | A canonical model per diagram type; the configuration is resolved once and read through typed views |
| 0009 | Labels are SVG text, not HTML in foreignObject |
| 0010 | Only text is measured, with bundled fonts embedded as subsets |
| 0011 | Themes are CSS custom properties with attribute fallback |
| 0012 | Layout engines and browser arithmetic are ported to give the same numbers |
| 0013 | Ported code keeps its source's license, in a crate of its own when it differs |
| 0018 | The same input gives the same output: no randomness, screen or state from the environment |
Verification
Scroll sideways for more columns.
Distribution
Scroll sideways for more columns.
| Record | Decision |
|---|---|
| 0016 | Node.js gets a native addon built with napi-rs, in one facade and platform packages |