Depends on #29, #65 and #66.
#29 has the design system page state two budgets and label which is which. The
site budget is #6, and #34 has the check and the page read one file so those two
cannot differ. The other budget has no such arrangement, and it is the one that
is not about this site at all:
curl -sS https://flowfin.dev/design-system.html \
| grep -o -i -E '[0-9]+ *(ms|s|fps)\b' | sort -u | tr '\n' ' '
120ms 170ms 2 s 60 fps 7s 80 ms
Run 2026-08-08. Six numbers a client has to meet, published on a page, with no
file behind them.
#65 already answers this and the plan did not carry the answer far enough. Its
reasoning is that what the clients are held to is machine-readable data about
the project rather than a page about the project, which is why the token file
lives with the data and this repository keeps a pinned copy. A frame rate and a
latency ceiling are the same class of fact as a spacing step. They are numbers
somebody writing a client reads and has to meet, and typing them into a page
here means a client takes its conformance target from a website, which is the
arrangement #65 rejected for the tokens in the same sentence.
So they travel the way the tokens travel. The published file carries them, this
repository vendors the pinned copy #66 already keeps fresh, the page renders
them, and nothing here defines a value. Where the published file does not carry
them yet, #65's record is widened to name them rather than a second file
appearing beside it, because two files travelling the same way for the same
reason is one mechanism described twice.
The invariant row is the part that bites. #14 already refuses a token defined in
more than one place. A client budget number typed into this tree is that failure
with a different unit, and it is the harder one to see: a wrong colour shows on
the page and a wrong millisecond does not.
The site budget stays where it is. #34's numbers file is about what this build
refuses of itself, and merging the two would have a check on this site's bytes
read a file about somebody else's client.
Done when
Every client budget number on the design system page renders from the pinned
copy rather than from a template or from content/, shown by a test that
changes a value in the pinned copy and sees exactly that number change on the
page; the invariant gate refuses a client budget number written anywhere in this
tree outside the pinned copy; the page still labels which budget is which; and
decisions/0007-where-the-design-tokens-live.md names the client budget numbers
as travelling with the tokens.
Depends on #29, #65 and #66.
#29 has the design system page state two budgets and label which is which. The
site budget is #6, and #34 has the check and the page read one file so those two
cannot differ. The other budget has no such arrangement, and it is the one that
is not about this site at all:
Run 2026-08-08. Six numbers a client has to meet, published on a page, with no
file behind them.
#65 already answers this and the plan did not carry the answer far enough. Its
reasoning is that what the clients are held to is machine-readable data about
the project rather than a page about the project, which is why the token file
lives with the data and this repository keeps a pinned copy. A frame rate and a
latency ceiling are the same class of fact as a spacing step. They are numbers
somebody writing a client reads and has to meet, and typing them into a page
here means a client takes its conformance target from a website, which is the
arrangement #65 rejected for the tokens in the same sentence.
So they travel the way the tokens travel. The published file carries them, this
repository vendors the pinned copy #66 already keeps fresh, the page renders
them, and nothing here defines a value. Where the published file does not carry
them yet, #65's record is widened to name them rather than a second file
appearing beside it, because two files travelling the same way for the same
reason is one mechanism described twice.
The invariant row is the part that bites. #14 already refuses a token defined in
more than one place. A client budget number typed into this tree is that failure
with a different unit, and it is the harder one to see: a wrong colour shows on
the page and a wrong millisecond does not.
The site budget stays where it is. #34's numbers file is about what this build
refuses of itself, and merging the two would have a check on this site's bytes
read a file about somebody else's client.
Done when
Every client budget number on the design system page renders from the pinned
copy rather than from a template or from
content/, shown by a test thatchanges a value in the pinned copy and sees exactly that number change on the
page; the invariant gate refuses a client budget number written anywhere in this
tree outside the pinned copy; the page still labels which budget is which; and
decisions/0007-where-the-design-tokens-live.mdnames the client budget numbersas travelling with the tokens.