Skip to main content

max / makeover-timing

Strip historical narrative from documentation Remove what a doc used to say, when it changed, the incidents that justified a rule, finished migration narration, and counts and versions that rot. State the rules in the present tense instead. Keep every instruction, prohibition and threshold, and keep the measurements that make a rule actionable. Public-facing docs keep their explanatory voice.
Co-Authored-By
Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session
https://claude.ai/code/session_01MptwXZ8k65v19rFmdGAyki
Author: Max Johnson <me@maxj.phd> · 2026-08-31 01:51 UTC
Signed with PGP, not checked
Commit: 98b7954a875f60633fcebde72ec672298e9cf35a
Parent: a6d54fc
2 files changed, +15 insertions, -25 deletions
M README.md +2 -6
@@ -31,10 +31,7 @@
31 31 differ that way. A second is a second in a browser, in egui and in a terminal,
32 32 and the reader waiting it out is the same reader.
33 33
34 - What looked like a renderer disagreement in the tree turned out to be drift.
35 - MNW debounced one typeahead at 150ms and two others at 200ms, in one repo, on
36 - one renderer, and a per-renderer table would not have caught it. So a
37 - divergence here is a bug report, not an axis.
34 + A divergence between renderers is a bug report, not an axis.
38 35
39 36 ## What is deliberately not a timing intent
40 37
@@ -106,8 +103,7 @@
106 103
107 104 ## Where the numbers came from
108 105
109 - Every value is a count from the tree, taken 2026-08-18 and re-checked
110 - 2026-08-21, not a preference:
106 + Every value is a count from the tree, not a preference:
111 107
112 108 ```text
113 109 revert 1500ms MNW: 6 hand-rolled sites, plus core/clipboard.ts's own default
M src/lib.rs +13 -19
@@ -26,22 +26,19 @@
26 26 //! An intent resolves to exactly one duration everywhere. Not one per renderer,
27 27 //! not one per theme.
28 28 //!
29 - //! The alternative was considered and rejected on 2026-08-21: a per-renderer
30 - //! table, resolving the way [`Density`](makeover_geometry::Density) resolves
31 - //! gaps. Distance has a renderer axis because a fingertip is coarser than a
32 - //! cursor and a terminal cell is coarser than a pixel — the *surface* differs.
33 - //! Time does not differ that way. A second is a second in a browser, in egui
34 - //! and in a terminal, and the reader waiting it out is the same reader. What
35 - //! looked like a renderer disagreement in the tree turned out to be drift: MNW
36 - //! debounced one typeahead at 150ms and two others at 200ms, in one repo, on
37 - //! one renderer, and no per-renderer table would have caught that.
29 + //! A per-renderer table, resolving the way
30 + //! [`Density`](makeover_geometry::Density) resolves gaps, is the wrong shape.
31 + //! Distance has a renderer axis because a fingertip is coarser than a cursor
32 + //! and a terminal cell is coarser than a pixel: the *surface* differs. Time
33 + //! does not differ that way. A second is a second in a browser, in egui and in
34 + //! a terminal, and the reader waiting it out is the same reader.
38 35 //!
39 36 //! So a divergence here is a bug report, not an axis.
40 37 //!
41 38 //! # What is deliberately not a timing intent
42 39 //!
43 - //! Three classes were measured out of scope on 2026-08-18, and leaving them
44 - //! out is most of what makes the four above coherent.
40 + //! Three classes are out of scope, and leaving them out is most of what makes
41 + //! the four above coherent.
45 42 //!
46 43 //! **A race is not an intent.** Waiting 300ms before navigating because the
47 44 //! write "should" have landed, or 150ms before closing a dropdown so a
@@ -103,8 +100,7 @@
103 100 //!
104 101 //! # Where the numbers came from
105 102 //!
106 - //! Every value below is a count from the tree, taken 2026-08-18 and re-checked
107 - //! 2026-08-21, not a preference:
103 + //! Every value below is a count from the tree, not a preference:
108 104 //!
109 105 //! ```text
110 106 //! revert 1500ms MNW: 6 hand-rolled sites, plus core/clipboard.ts's own default
@@ -118,12 +114,10 @@
118 114 //! typeaheads sit at 200ms against everything else's 150ms. 150 wins on the
119 115 //! count and on the cross-renderer agreement, and the 200s conform.
120 116 //!
121 - //! [`Cadence::Activity`] is the exception and the only rung here not counted
122 - //! off the tree, because the mark it times does not exist yet: wiki
123 - //! `loading-and-progress-standard` settled on 2026-08-26 that an unmeasured
124 - //! wait blinks rather than spins, and nothing had drawn one. Writing it here
125 - //! before the three renderers reach for it is the point of the task that added
126 - //! it. What it is answerable to is stated on the member.
117 + //! [`Cadence::Activity`] is the one rung not counted off the tree. Wiki
118 + //! `loading-and-progress-standard` rules that an unmeasured wait blinks rather
119 + //! than spins; this is the cadence it blinks at. What it is answerable to is
120 + //! stated on the member.
127 121 //!
128 122 //! # Consumers
129 123 //!