Architecture Decision Records
Format: Status, Context, Decision, Consequences, References. An accepted ADR is never rewritten: it is superseded by a new ADR (Superseded by ADR-XXXX). All ADRs were translated from French to English on 2026-10-08 (project rule: English everywhere); on 2026-10-13 their Context sections were reworded so that they state the Product Owner's decisions without quoting them. The decisions are unchanged. Number 0036 is not used: it was taken on the F10 feature branch and never accepted (ADR-0037).
| ADR | Title | Status |
|---|---|---|
| 0001 | Geometric scope: segments and circular arcs | Accepted |
| 0002 | Everything is a path, except text | Accepted |
| 0003 | Integer model, derived geometry | Accepted, partly superseded by 0031, 0034 and 0035 |
| 0004 | Orthogonal pipes only | Accepted |
| 0005 | Parametric pipeline: numbers → maths → SVG | Accepted |
| 0006 | Non-destructive boolean operations | Accepted |
| 0007 | Corner radius clamping: local proportional reduction | Accepted |
| 0008 | Instance rotation by quarter turns | Accepted |
| 0009 | Toolchain: TypeScript 6, Vite, Vitest, ESLint, Prettier, VitePress | Accepted |
| 0010 | Strictness carried by ESLint first, TypeScript second | Accepted |
| 0011 | Function kinds: @kind tag and per-kind limits | Accepted |
| 0012 | One index.ts per folder, canonical import paths | Accepted |
| 0013 | Prettier next to ESLint, not inside it | Accepted |
| 0014 | Functional core, imperative shell | Accepted |
| 0015 | One export per file, named like the file | Superseded by ADR-0019 |
| 0016 | Explicit inputs: no default nor optional parameter in the library | Accepted |
| 0017 | Agile backlog kept in the repository | Accepted |
| 0018 | Bézier curves allowed in static drawings only | Accepted |
| 0019 | Kebab-case file names, one export per file | Accepted |
| 0020 | Every feature starts with a research spike and ends with an audit | Accepted |
| 0021 | Agent working environment: skills, rules, hooks and an independent auditor | Accepted, partly superseded by 0038 and 0040 |
| 0022 | Property-based tests, weekly link check, mutation tool deferred | Accepted |
| 0023 | Inspection cadence: demo at each feature, review and retrospective at each epic | Accepted |
| 0024 | Session journal and transcript search instead of a database | Accepted, partly superseded by 0039 |
| 0025 | A portable core: any JavaScript engine, transcribable to another language | Accepted |
| 0026 | Contributions through issues only; the agent writes every change | Accepted |
| 0027 | Acceptance criteria as requirements, tests traced to them, a test report per release | Accepted |
| 0028 | Feature branches and autonomous runs: stories merge into their feature, the Product Owner merges the feature | Accepted, partly superseded by 0038 |
| 0029 | One requested corner radius per vertex in the model | Accepted, superseded by 0033 for free shapes |
| 0030 | A finished free V1, then new features in a paid edition | Accepted |
| 0031 | A free shape keeps the fractional vertices of a converted polygon | Accepted, partly superseded by 0034 |
| 0032 | The rectangle is a free shape, stretched by its width and height | Accepted, partly superseded by 0033 and 0035 |
| 0033 | A free shape of corners, fractions until edited, points typed in the SVG's coordinates | Accepted, partly superseded by 0035 |
| 0034 | Only the coordinate typed is an integer; edits keep the fractions | Accepted, partly superseded by 0035 |
| 0035 | An angle and a position for every shape | Accepted |
| 0037 | A stretched option for the regular polygon | Accepted |
| 0038 | A develop branch, checks run locally, one CI on the pull request into main | Accepted |
| 0039 | A local library of the sources read: SQLite full-text search behind an MCP server | Accepted |
| 0040 | AGENTS.md holds the rules for any coding agent | Accepted |