|
2 | 2 |
|
3 | 3 | ## Spec-driven development |
4 | 4 |
|
5 | | -- Specs in `specs/` are the source of truth. Code conforms to specs, |
6 | | - not the other way around. |
| 5 | +- Specs in `specs/` are the source of truth. Code conforms to specs, not the |
| 6 | + other way around. |
7 | 7 |
|
8 | | -- Never add, remove, or change a public API in code without first |
9 | | - updating the relevant spec and getting explicit approval from the |
10 | | - user. This includes changes to `Term`, `createTerm`, `render()`, |
11 | | - directive constructors (`open`, `close`, `text`), sizing helpers |
12 | | - (`grow`, `fixed`, `fit`), and any future spec'd interfaces. |
| 8 | +- Never add, remove, or change a public API in code without first updating the |
| 9 | + relevant spec and getting explicit approval from the user. This includes |
| 10 | + changes to `Term`, `createTerm`, `render()`, directive constructors (`open`, |
| 11 | + `close`, `text`), sizing helpers (`grow`, `fixed`, `fit`), and any future |
| 12 | + spec'd interfaces. |
13 | 13 |
|
14 | | -- The workflow is: propose the spec change, wait for approval, |
15 | | - then implement. Do not combine spec changes with implementation |
16 | | - in a single step. |
| 14 | +- The workflow is: propose the spec change, wait for approval, then implement. |
| 15 | + Do not combine spec changes with implementation in a single step. |
17 | 16 |
|
18 | | -- The renderer and input parser are specified separately |
19 | | - (`renderer-spec.md` and `input-spec.md`). They are architecturally |
20 | | - independent. Do not introduce dependencies between them. |
| 17 | +- The renderer and input parser are specified separately (`renderer-spec.md` and |
| 18 | + `input-spec.md`). They are architecturally independent. Do not introduce |
| 19 | + dependencies between them. |
21 | 20 |
|
22 | | -- Each test file tests exactly one spec. Do not put tests for one |
23 | | - spec into another spec's test file. |
| 21 | +- Each test file tests exactly one spec. Do not put tests for one spec into |
| 22 | + another spec's test file. |
24 | 23 |
|
25 | 24 | ## Rendering invariants |
26 | 25 |
|
27 | | -- The renderer MUST NOT perform IO. It produces bytes; the caller |
28 | | - writes them. |
| 26 | +- The renderer MUST NOT perform IO. It produces bytes; the caller writes them. |
29 | 27 |
|
30 | | -- The renderer MUST NOT manage terminal state (alternate buffer, |
31 | | - cursor visibility, mouse reporting, keyboard protocol modes). |
| 28 | +- The renderer MUST NOT manage terminal state (alternate buffer, cursor |
| 29 | + visibility, mouse reporting, keyboard protocol modes). |
32 | 30 |
|
33 | | -- Each frame is a complete snapshot. The renderer carries no UI tree |
34 | | - state between frames — only cell buffers for diffing. |
| 31 | +- Each frame is a complete snapshot. The renderer carries no UI tree state |
| 32 | + between frames — only cell buffers for diffing. |
35 | 33 |
|
36 | | -- Directives are plain objects. No classes, no methods, no prototype |
37 | | - chains. The flat array pattern is normative. |
| 34 | +- Directives are plain objects. No classes, no methods, no prototype chains. The |
| 35 | + flat array pattern is normative. |
0 commit comments