# signal.family — the law
The market is noise. This is the signal. One tape of every swap the site can read on
HyperEVM, seen by everyone at the same moment; one tap to buy or sell; one sentence — a
signal — saying why, signed by your wallet, scored from the price the tape stamped, not by a
moderator. Everything below exists to keep that promise.
Each law names the end it serves, the two ways of failing it (too much, too little), and
the test that tells you which side you fell on. A law without a test is a mood. The
receipts at the bottom say what each law cost us to learn. Tests marked **[built]** run in
`prove.py` today; tests marked **[to build]** are the next pass's work and are listed
under Operation so they cannot quietly stay unbuilt.
## I. Ends
**1. The telos law — every part serves an act.**
*Statement.* Nothing ships until it names the act it enables (read, compare, buy, sell, say
why, launch, claim) and the person who performs it. A part with no act is decoration; a
feature with no person is a stunt.
*Logic.* The end is one of a thing's causes (Physics II.3, 194b32), and a part is defined
by its function and capacity — a hand that can no longer do a hand's work is a hand in name
only, like one carved in stone (Politics I.2, 1253a20–25; De Anima II.1, 412b12–17, the
axe). A screen is not a picture; it is an instrument, and an instrument is judged by the
act it makes possible, as a saw is judged by cutting (Physics II.9, 200a10–13). What
enables no act is a part in name only: there is no standard by which it could be kept, so
it is cut.
*Excess.* Features stacked because they were possible.
*Deficiency.* Acts the person needs that no part enables — a market with no way to compare,
a signal with no way to see its score.
*Test.* For every element on a screen, finish the sentence "this lets a person ___." No
verb, delete it. **[built as review discipline; mechanical form is law 3's `decor` allowlist, to build]**
**2. Character is habit — the product is what a person does daily.**
*Statement.* Judge every feature by whether it can be repeated tomorrow, not by how it
demos today. The site is a place people return to; a return needs a reason that renews
itself: prints that keep landing, bags that keep moving, signals that keep being scored.
*Logic.* We become just by doing just acts and brave by doing brave acts; a state of
character grows out of like activities (NE II.1, 1103a31–b25). ("We are what we repeatedly
do; excellence is a habit, not an act" is Will Durant's 1926 gloss on this chapter — ours
to keep, not Aristotle's line.) A product is likewise not its feature list but the acts it
makes habitual; a feature that cannot become an act repeated is a demonstration.
*Excess.* Compulsion — the return extracted rather than chosen: streaks, badges, pings,
loss-aversion dressed as a reason.
*Deficiency.* A beautiful room nobody has a reason to re-enter.
*Test.* Name the reason a person who used it today opens it tomorrow. "To see what changed"
is the feed's reason; "to see my score" is the signals'. No reason, not finished. **[review discipline]**
**3. The first minute and the thousandth.**
*Statement.* A stranger's first screen answers two questions and asks nothing: *what is
this* (the hero line) and *what do I do* (a live print, a buy button) — no modal, no tour,
no sign-in gate before the first fact. A returning person's first screen is *what changed
since they left*: a line at the top of the feed ("312 trades since you left"), their bags
repriced from the newest print, their signals' scores with the change since last visit —
computed from the browser's own last-seen stamp, so it works signed out and costs the
server nothing.
*Logic.* All learning runs from what is clearer to us toward what is clearer by nature
(Physics I.1, 184a16–21; NE I.4, 1095b2–4). On the first visit nothing is clear to the
reader but the words they brought, so the screen starts there. On the thousandth visit
the site itself is what is known, and the only new thing is the change — and a return is
worth making exactly when the change is legible (law 2). A welcome card and a tour confuse
the two visits: they explain to the returning person what they know and delay the stranger
from the one fact that would teach them.
*Excess.* Onboarding tours, welcome cards, "what's new" modals — ceremony in front of the tape.
*Deficiency.* A returning reader who has to reconstruct what happened by scrolling and memory.
*Test.* `first-visit`: a 390×844 shot with a cleared profile — the first viewport holds the
hero, at least one print, a visible buy control, and no element with `role=dialog`.
`return-visit`: seed `localStorage.lastSeen` = now−1h and reload — the first viewport holds
a "since you left" line whose count equals the tape rows since that stamp, and no dialog.
**[built 08-25: `first-visit`, `return-visit`; the "since you left" line ships with them]**
## II. Form
**4. Clarity is the mean between clutter and riddle.**
*Statement.* Less is the feature — but "less" is a mean, not a direction. Remove what
carries no fact; keep what a stranger needs to know what they are looking at.
*Logic.* Every virtue of character is a mean between two vices (NE II.6, 1106b36–1107a2):
courage between cowardice and rashness (II.7, 1107a33–b4). We had forbidden only the
excess (clutter) and so drifted unopposed into the deficiency (riddle) — the drift
Aristotle named: the extreme nearer the mean passes for the mean, rashness for courage,
riddle for minimalism (NE II.8, 1108b30–1109a19), so the cure is to lean toward the far
side, as one straightens a bent stick (II.9, 1109b1–7). Removing information is not the
same act as removing noise.
*Excess.* Two marks for one fact; color where a word would do; a chip for every statistic.
*Deficiency.* A word the reader has never met in a place where nothing can teach it.
*Test.* Riddle side: every chrome string passes law 5's `chrome-allowlist`, and every voice
word (tape, born, bag, signal, curve) appears only inside a sentence element —
`voice-in-sentences` fails on a voice word inside nav, h2, button or a column head.
Clutter side: every figure or mark on a screen is bound to an API field or listed in a
`decor` allowlist that must stay under ten entries. **[built 08-25: `voice-in-sentences`, `chrome-allowlist`; `decor` to build]**
**5. Two registers — chrome speaks plain, sentences speak ours.**
*Statement.* Wayfinding (tabs, page titles, section headers, buttons, filter labels, column
heads) uses the reader's words: *live, market, launch, profile, buy, sell, price, mcap*.
The voice (*the tape, born, bag, signal, the curve*) lives only in sentences,
where the sentence itself teaches the word.
*Logic.* The virtue of style is to be clear, neither flat nor above the dignity of the
matter (Rhetoric III.2, 1404b1–4). Metaphor is the pleasantest way to learn, because it
makes the mind see one thing through another (Rhetoric III.10, 1410b10–15); one metaphor
in a sentence clarifies (III.2, 1405a8), but a diction made wholly of metaphors is a riddle
(Poetics 22, 1458a22–26), and the cure is the mixture — ordinary words for clarity, our own
for distinction (Poetics 22, 1458a31–34). A sentence can carry a metaphor because it
supplies the context that unpacks it: "$46 of PURR **bought** · mcap $83m" teaches *mcap*
by placing it. A tab cannot; it is a single word with no context, read in half a second,
by someone deciding whether to leave.
*Excess.* Explaining the voice everywhere until it stops being a voice.
*Deficiency.* Voice in the chrome: a tab a stranger cannot name.
*Test.* `chrome-allowlist`: every string inside nav, h1/h2, button, column head and filter
chip must appear in the LEXICON 08-25 chrome table or the plain-English allowlist (live,
market, launch, profile, about, buy, sell, price, mcap, volume 24h, liquidity, trades,
signals, find, top, gainers, buying, just born, watching, share, copy). One miss fails.
`stranger-read`: crop the tab bar and section headers from 390×844 and 1200×860 shots and
ask a model with no repo context to name where each leads; every answer must match. A
person reading the same crops is the gold standard, run once per pass by Red. **[built 08-25: `chrome-allowlist`; `stranger-read` stays a review step]**
**6. Form follows the act: sentences where a person reads, columns where a person compares.**
*Statement.* The feed is read in time order — one sentence per print, one fact per line.
The market is scanned across tokens — aligned columns with named heads, sortable. A chart
is a column laid along time. Neither form is superior; each belongs to a different act.
*Logic.* The form of a thing is its capacity for its work, as the form of an eye is sight,
and an eye that cannot see is an eye in name only (De Anima II.1, 412b18–22; Meteorology
IV.12, 390a10–13). Reading is a sequence, so its form is a sequence of sentences.
Comparing is a simultaneity — the eye must hold many values at once and rank them — so its
form is alignment, because alignment lets the eye compare without counting. Sentences
forced onto comparison make the reader do arithmetic the layout should have done; columns
forced onto a feed turn a story into a ledger nobody reads.
*Excess.* Grids where nothing is compared; charts of one number.
*Deficiency.* Prose where a stranger wanted a column to sort.
*Test.* Ask what the eye does on this screen: down, or across? Down → sentences, one line
each on phones, two at most. Across → columns, heads named, at most eight on desktop and
the two that matter most on a phone. Mechanically: `feed-lines` — no print row taller than
2.2 line-heights at 390 wide; `market-heads` — at most 8 column heads at 1200. **[built 08-25]**
**7. A number is named by what it measures.**
*Statement.* Every figure on the screen carries the name of the quantity it actually is —
not the quantity it resembles or hopes to imply. "live · 1.2s" is our distance behind the
chain head; if a figure is the age of the newest print, it says "last trade 4.6s ago" or
is removed.
*Logic.* A definition is the account of what a thing *is*, not of what it is like (Topics
I.5, 101b38; Metaphysics Z.4, 1029b13–1030a6), and a name is the sign of that account
(Z.4, 1030a7–9). A label is a name, and so stands for a definition; a label that names a
neighbor of the quantity is a false definition and will be believed, because numbers are
believed.
*Excess.* The figure claims more than was measured — six decimals on a rounded oracle;
"live" on a print's age.
*Deficiency.* The figure claims less than is known — a number whose unit or referent the
reader must guess.
*Test.* For every figure, write the formula that produced it next to its label. If the
label and the formula name different things, the label is wrong. **[review discipline; the
chip itself: `/api/live` heartbeats `lag`, built 08-25]**
**8. Time is a fact — staleness is shown, motion marks arrival.**
*Statement.* A live surface has three named states and always says which it is in:
**live** (≤15s behind the chain — the chip reads "live"), **behind** (15s–5min — the chip
reads "behind · Ns", the tape keeps its ink), **stale** (>5min or feed dead — the tape
dims and the whisper reads "chain feed unavailable — retrying"). The only motion on the
page is the arrival of a fact: a new print may move once, ≤300ms, into place; nothing else
animates, and `prefers-reduced-motion` turns even that into a plain insert.
*Logic.* Time is the number of motion with respect to before and after (Physics IV.11,
219b1–2): a tape that does not say how far behind it is has removed the number and kept
the motion, and a reader will believe a frozen tape is a quiet chain. Motion is perceived
as change (De Anima II.5); when things move that have not changed, the eye is taught to
ignore movement, and then it misses the print that did land.
*Excess.* Skeleton shimmer, pulsing dots, a chip ticking every 100ms — motion pretending to
be liveness.
*Deficiency.* A dead feed wearing a green "live" chip; a stale price with no age on it.
*Test.* `stale-honesty`: run the kill-indexer drill; at +30s the chip must read "behind",
at +6min "unavailable", and the chip must agree with `/api/health` to within 5s.
`motion-budget`: with reduced motion emulated, `document.getAnimations().length === 0`;
without it, at most one animation, each ≤300ms. **[chip states + `motion-budget` built 08-25 — the breathing dot, view transitions and chart
pulses were cut; `stale-honesty` to build]**
**9. The thumb and the failure.**
*Statement.* On a phone every act (buy, sell, post a signal, the tabs, max, slippage) sits
in the lower 60% of the viewport and is at least 44px tall; the upper 40% is for reading.
A print row is 44–56px on a phone, so ten fit a screen and none is mis-tappable. When an
act fails, the page says two things in lexicon words and nothing else: the fact that
failed, with its number, and the next act — "route did not fill at 2% — try 5%", "not
enough HYPE — you have 0.31", "chain did not answer — try again"; never a code, never a
revert string, never "something went wrong".
*Logic.* The instrument is judged by the hand that uses it (law 1 applied to the body): a
knife with the edge at the handle is not a worse knife but a different object. An error is
the moment the practical syllogism broke (NE VII.3): the person held a premise — *I can buy
this* — that turned out false; the only useful reply names which premise failed and
supplies the true one, so the next act follows from it.
*Excess.* Everything in a bottom sheet; error prose that explains the EVM.
*Deficiency.* A buy button in the top corner; a failure that names nothing.
*Test.* `thumb-reach`: at 390×844 no act control sits above 40% of the viewport or under
44px tall (the sticky trade panel on the token page is the one argued exception: the buy
button is reachable, the chart scrolls beneath it). `row-density`: every print row between
44 and 56px. `error-copy`: every user-facing string in a catch path appears in the LEXICON
error table, contains a digit or a lexicon noun, and never matches /something went
wrong|error:|failed|0x[0-9a-f]{8}/i. **[built 08-25: `thumb-reach`, `row-density`, `error-copy`]**
## III. Truth
**10. Nothing between the person and the block.**
*Statement.* The site reads swap events raw off HyperEVM, derives prices from the pools
themselves (wrapped HYPE and the stablecoins it has seen trade on-chain), and serves its
own HTML. Named exceptions, and only these: token icons from a CDN (a face, not a fact);
fonts; the sign-in provider that mints a wallet the person can export, and its funding
bridge on `/fund` (money in, never data out), and — X sign-ins only, on the claim screen,
one tap — the profile photo Privy already points at (X's image CDN, a face the person owns,
copied once into our store, never re-read); an RPC endpoint — ours on the 5090 first, a
public one only as the shadow fallback, and `/api/health.push_age_s` says which is feeding
the page; one outbound "dexscreener ↗" link on a token page, a door out, not a fact in.
*Logic.* To know a thing is to know the cause on account of which it is (Posterior
Analytics I.2, 71b9–12); knowing *that* is less than knowing *why* (I.13, 78a22–b4). A
price quoted from a vendor is known only that it was quoted; a price re-derived from the
pool's own state is known by its cause, and can be checked by anyone with the same block.
A law with unnamed exceptions is a lie in waiting; the exceptions are therefore named
here, so the next one must be argued, not slipped in.
*Excess.* Refusing a vendor for what is not a fact — a face, a font — and calling it purity.
*Deficiency.* A vendor in the path of any number the reader acts on.
*Test.* Every fact on the page traces to a block, a log, or an eth_call, and `prove.py`
re-derives it independently — receipts vs chain, the HYPE oracle vs pool state, mcap
re-derived, routes simulated from a funded account. **[built: 13 live checks]**
**11. On-chain words.**
*Statement.* What the site says about a token — name, symbol, supply, description, image,
links — is what the chain says: the metadata the token contract itself returns, and our
launchpad's own record. Missing stays missing: never guessed, never filled from a vendor.
One named exception: a token's icon is a social object — the image the market already
recognizes shows first, the one written at launch is the fallback. Words are never excepted.
*Logic.* Law 10 applied to words instead of numbers. Our own births put the words on-chain,
inline, because the chain is the only place where "what this token is" cannot be edited by
whoever holds a login.
*Excess.* Rendering the chain's raw junk unedited — a 4KB description, a 40-character
symbol — because "the chain said it".
*Deficiency.* A field filled from someone's database, or guessed when the chain is silent.
*Test.* `chain-words`: for a sample of token pages, read name/symbol/supply/description via
eth_call and assert the rendered strings equal them after length truncation; a field the
chain lacks renders empty, with no placeholder text. **[built 08-25: `chain-words`, 3 tokens]**
**12. Truthfulness is a habit — claim, check, print the score.**
*Statement.* Anything the site asserts about itself (routes fill, sells are reachable, the
oracle matches the pool, the tape has no duplicates) is a check the server runs on itself
on a loop, and the score is printed on the page. Every incident becomes a replay the same
day, so it can never return unnoticed.
*Logic.* Law 2 applied to honesty, which Aristotle counts as a virtue of character in its
own right — truthfulness, the mean between the boaster who claims more than is there and
the mock-modest who claims less (NE IV.7, 1127a13–b32): a truthful product is not one that
was checked once but one that checks itself repeatedly. In the practical syllogism the
universal premise survives — the akratic still knows that dry food is good for a man; what
he loses hold of is the particular, *this is dry food*, and he recites the universal like a
drunk reciting Empedocles (NE VII.3, 1147a24–b12). The site's universals do not drift; its
particulars do — *this route fills, this pool is the oracle, this tape has no duplicates* —
and `prove.py` is how the particular premise is re-perceived on a loop after the code
changes under it.
*Excess.* The page claims more than the prover proves — the boaster: a claim with no check
behind it, or a check that passes by construction and so proves nothing.
*Deficiency.* The prover knows more than the page says — a green line no reader can see, a
failure logged and never printed.
*Test.* Every claim sentence on the about page carries `data-check="<name>"`; `about-claims`
fails if a name has no check, if its check last ran red, or if a claim ("always", "never",
"every", a number) carries no name. The footer stamp shows passed over claimed. **[built 08-25: `about-claims`; the stamp also names any red check]**
## IV. People
**13. The family sees the same thing at the same time.**
*Statement.* No premium tier, no faster feed for big wallets, no hidden allocation at a
launch. The alpha is the shared tape.
*Logic.* Friendship of virtue holds among equals (NE VIII.3, 1156b7–32; VIII.5, 1157b36),
and friends spend their days doing the one thing together — drinking, dicing, hunting,
philosophizing (NE IX.12, 1171b29–1172a8); brothers are the family case of equals, and a
brotherhood is a comradeship (VIII.11, 1161a25–27). A market where some see first is a
friendship of utility — each valuing the other for what he yields (VIII.3, 1156a10–19) —
wearing a family's name. The product's whole claim, signal against noise, collapses if the
signal is sold in tiers.
*Excess.* Leveling that hides earned difference — a scoreboard with no scores, a name with
no record. (A browser-local watch list is not a tier; nothing leaves the phone.)
*Deficiency.* Any reader who sees a print, a price, or an allocation before the rest.
*Test.* `same-tape`: fetch `/api/tape`, `/api/tokens` and the first five `/api/live` events
signed out and signed in; bodies and order must be identical, and no data route in `pve.py`
branches on identity. **[built 08-25: `same-tape`]**
**14. A launch is a birth, not an exit.**
*Statement.* Tokens born here open on the curve in front of everyone from block one: no
launch fee beyond gas, no allocation, a pool fee of 1% or 2% chosen at launch and split 70%
to whoever launched it (or to the holders they chose) and 30% to Signal protocol fees,
counted after the venue keeps one seventh, liquidity locked forever at graduation. Launches
before Sep 4 keep the 50/50 they were born with: terms are snapshotted at birth. In the chrome it is
"launch" (law 5); on the tape it is "born," because a sentence can carry the word.
*Logic.* The end of a launch is a token that lives, and a thing lives by being sustained,
not by being extracted from once. Makers love their work as parents love children, because
the work is the maker in activity (NE IX.7, 1167b31–1168a9); the fee that keeps paying
whoever launched it keeps the maker's stake in the thing's life, which is what "birth"
means as against "exit".
*Excess.* Protection that becomes a cage — lockups, cooldowns, sell taxes on holders;
ceremony (countdowns, whitelists, "fair launch" badges) that adds nothing the contract
does not already enforce.
*Deficiency.* Extraction — an allocation, a launcher's discount, a fee that stops when the
launcher leaves, any path by which the launcher or Signal can take from a curve what
the family cannot.
*Test.* At block one, can a stranger buy and sell on the same curve at the same terms as
whoever launched it? `forge test` proves birth with zero HYPE mints nothing to the
launcher, every fee splits by the terms stamped at birth (70/30 since Sep 4, 50/50 for the
launches before it), and the locker's bytecode holds no withdraw selector — "locked forever"
is a fact of the code, not a promise. **[built: 44 forge tests
incl. 2 mainnet-fork; the locker selector grep to add to `prove.py`]**
**15. Rest is a virtue of the instrument.**
*Statement.* Decisions about the site made past midnight or in the hours after a losing
trade are drafts. The law is amended by day, with the receipt that provoked it written
next to the change.
*Logic.* Deliberation ends where action begins — what is last in analysis is first in
doing, and the search stops once the first step is in our own hands (NE III.3, 1112b23–24,
1113a2–12); deliberate slowly, act quickly (NE VI.9, 1142b2–6). Good deliberation also
needs the deliberator intact: the man asleep, drunk, or in a passion has his knowledge and
does not use it (NE VII.3, 1147a10–18), and anger hears reason the way a hasty servant
hears an order — it runs off on the first half (NE VII.6, 1149a25–b3). A law changed in
anger is a mood with a commit hash.
*Excess.* A law amended on every receipt — nothing settled, deliberation re-opened nightly.
*Deficiency.* A law never amended, still standing after the receipt that broke it.
*Test.* `git log --format='%ad %h' -- PHILOSOPHY.md LEXICON.md`: any commit stamped
00:00–06:00 local must either add a line under Receipts or be reverted by the next
daylight session. **[built: it is a git command]**
**16. One explainer per screen.**
*Statement.* A screen carries at most one explainer sentence — the hero sub on live, the em
line elsewhere. Every other string is a title, a label, a value, a state, or an act. Whispers
exist only for empty, boot and error states. A caption on data says the unit and the time,
nothing else. The about page is the one screen whose job is explaining; it is exempt by name.
*Logic.* The virtue of style is clarity (Rhetoric III.2, 1404b1–4), and clarity is a mean
(NE II.6, 1106b36–1107a2): law 5's "sentences speak ours" has an excess of its own, and it
is a screen that keeps talking — the same fact explained in the hero, again in a whisper
under the rail, again in three gate rows. Law 4 forbade two marks for one fact; it never
capped the number of sentences allowed to say it. What is said once and placed well is
learned; what is said three times is read as noise and skipped, including the once.
*Excess.* Explainers stacked: hero sub + rail whisper + gate rows; two captions under one chart.
*Deficiency.* A data block with no unit and no time — a number nobody can place.
*Test.* `explainers` (`prove --dom`): per view, count the visible elements matching
`.hero-line, .whisper:not(.bad), .login-sub, .proof-note, .record-line, [class*=explain]`
that are not an empty/boot/error state (a whisper that ends in "…" or says nothing yet /
no … yet / retrying, or that is the sole child of a data container) — more than one on a
view fails with the offenders. `/about` is skipped by name. **[built 08-25 late]**
**17. Every string wears its role.**
*Statement.* Five roles, five treatments, no two alike. **Title** (the h1 thesis, h2 section
titles): sans, 600, ink — an h2 is 15px sans 600 ink, letter-spacing 0, never mono grey.
**Label** (column heads, captions, chip words, units): mono 11px, ghost, lowercase.
**Value** (numbers, symbols, prices): mono, ink, tabular; big values 600. **State** (live /
behind / stale, reading…, copied ✓, landed, pending): mono 11–12px with a glyph or dot and a
role color — flame-ink good, clay bad, ghost waiting — never italic. **Hint** (placeholders;
empty, boot and error whispers): sans italic ghost, only inside an input or as a whisper in
an empty/boot/error state.
*Logic.* Aristotle's first sorting of words is by kind, not by content: an expression said
without combination signifies a substance, a quantity, a quality, a relation… (Categories 4,
1b25–2a4), and it is the kind, not the particular, that fixes what may be said of it (1a20–b9).
The inference we draw — that the eye should read a string's kind before the mind reads its
content — is ours, not his; what is his is that kind comes first in the order of saying. A
title dressed as a caption is therefore a category mistake made before reading begins. And
the cure for one look everywhere is the same as law 5's: the mixture — ordinary and
distinctive together — is what gives distinction without riddle (Poetics 22, 1458a31–34).
*Excess.* Five fonts and five colors per screen — decoration that reintroduces law 4's clutter.
*Deficiency.* One grey lowercase mono for everything — titles, captions, states and chips
alike — which is what the profile looked like on 08-25 evening.
*Test.* `roles` (`prove --dom`): on every view, computed styles of visible `h2` (sans face,
weight ≥600, color = `--ink`); of `.mc`, `.ago`, `th` (mono face, color = `--ghost`); of
`input::placeholder` and `.whisper` (italic); of `.feed`, `.name-stat`, `#status`,
`.fd-landed` (mono, not italic, color ∈ {`--flame-ink`, `--clay`, `--ghost`}). Any collision —
a title wearing the label's exact face+color, a state in italic — fails with the offenders.
**[built 08-25 late]**
**18. Character serves the trade.**
*Statement.* The brand lives where the eye *rests* — the hero, the em lines, a signal's
thesis, the acting surfaces (trade panel, buy bar, sheets), empty states — and never where
the eye *works*: rows, columns, charts, numbers, labels. In the resting places the site
may be itself: the kit's serif italic for the voice, deep teal under the hands, the flame as
a mark and a watermark, a static mint glow. In the working places it is a trader's tool:
mono tabular numbers, aligned columns, the same density and sort as yesterday, nothing
behind the data.
*Logic.* Style must fit its subject — neither mean nor above the dignity of the matter
(Rhetoric III.2, 1404b1–4), and propriety is a virtue of style in its own right: the
language should match the thing it is about (Rhetoric III.7, 1408a10–14). Distinction comes
from the mixture of ordinary words with distinctive ones, not from making every word
distinctive (Poetics 22, 1458a31–34) — applied to a page, the mixture is *where*: character
concentrated in the places a person pauses, absent from the places a person scans. The
division into resting and working places is ours; what is Aristotle's is that ornament
belongs to the matter and to the moment, and that a style which decorates everything
distinguishes nothing.
*Excess.* Costume — a serif in a price column, a watermark behind the tape, a glow that
moves, a dark surface where a person reads: decoration that costs a scan.
*Deficiency.* Template — a page that could be any exchange's, where the only sign of the
brand is the favicon; competent and forgettable, which is what the site was on 08-25 evening
by a designer's honest word.
*Test.* `character-budget` (`prove --dom`): inside `#tape`, `#toks`, `#mkt-head`, `#t-chart`,
`.stat-grid`, `#t-tape` no element resolves to the serif face; no element with opacity < 1
sits behind those regions; every element whose background resolves to the deep teal is a
button, `#t-trade`, `#minibuy`, `#login`, `#funds` or carries `data-act`; `row-density`,
`market-heads`, `feed-lines` and `motion-budget` must still pass in the same run. **[built 08-25
late: scans every view at 390 plus `/` and `/t` at 1280; prints the offenders]**
## Materials
- Type: **Familjen Grotesk** for sentences and chrome; **Spline Sans Mono** for anything
that counts.
- Ground `#EEF4F0` · ink `#0E241D` · family green `#0B9D74` · clay `#B0532C`. Daylight,
not a dark terminal: trading sites are black because they are built for 3am; a family
buys in the morning. Green for buys and life; clay for sells — rare, never shouted.
- Signature: the tape of living sentences. Everything else stays quiet so it can speak.
## Operation
- One Python file (`pve.py`, stdlib): indexer + server on :8860. One HTML file. Low code is
a discipline: one file is one place to be wrong, and every dependency refused is one
fewer way to break — and one fewer reason a fork can't run. The named exceptions
(`export.html`, `fund.html`) exist because Privy's key export and funding live only in
their React SDK — receipts in `pad/FUNDS-EXPORT.md`.
- `python3 prove.py` must stay green; `--replay` runs the incident replays alone.
- `/api/tape` recent prints · `/api/tokens` 24h aggregates · `/api/live` prints + `lag`
heartbeats · `/api/health` — the proof stamp lives there and in the footer.
- **Tests built 08-25 evening** (`python3 prove.py --dom`, Mac only — the Railway container has
no browser and reports `dom: skipped`): `chrome-allowlist`, `voice-in-sentences`, `feed-lines`,
`market-heads`, `thumb-reach`, `row-density`, `error-copy`, `motion-budget`, `first-visit`,
`return-visit`, `same-tape`, `chain-words`, `about-claims` — 13/13 at first green.
Added 08-25 late for laws 16–17: `explainers` (≤1 explainer per view) and `roles`
(computed-style role audit) — 15 in the group. Added 08-25 late for law 18: `character-budget`
(serif face / translucent layer / deep surface audit of the working regions, gated on the
density checks) — 16 in the group.
- **Still [to build]**: `stale-honesty` (needs the kill-indexer drill wired to a shot) and `decor`
(the ≤10-entry allowlist). A test listed here for more than one pass without being built is
law 15's deficiency.
## Receipts (why each law exists)
- Laws 4–5: 08-25, Red: "the name tape, birth… you? who's you?" — one day after a
21-rename lexicon pass had made the chrome *more* poetic. The excess had been policed; the
deficiency had not.
- Law 6 replaced "no cards, no grids", which forbade a form instead of asking what the act
was: 08-25 the market was thirty prose sentences in two columns and nobody could rank
anything. Replaced with one aligned, sortable list.
- Law 7: 08-25, the header chip read "live · 4.6s" — the age of the newest print, not lag.
Fixed the same day: `/api/live` now heartbeats the true distance behind the head.
- Law 2: 08-25, signals were live but nobody posted twice — the score was not yet visible,
comparable, or cumulative.
- Law 3: 08-25, Red killed the welcome card ("the page with your name is the welcome"); the
hero collapses after the first visit.
- Law 18: 08-25 late, Red's designer friend: "it needs more creativity, more brand vibe";
Red: "we need it for traders — can't go too fancy or unfunctional." Both true at once, so
the law is a *where*, not a *how much*.
- Law 8: 08-25, the chip fix showed the page had no named "behind" state at all; the same evening
the motion budget cut the breathing dot, the view transitions and the chart pulses.
- Law 12: 08-22 ("data validates your pride"); 08-24 the first prover run caught three wrong
assumptions in the prover itself.
- Law 10's named exceptions: 08-24 audit — "no third-party APIs" was already false (icons,
fonts), and an unnamed exception is how the next one slips in; 08-25 the list was
incomplete again on the day it was written (public-RPC shadow, `/fund`, the dexscreener
link), so all five are now named.
- Laws 16–17: 08-25 evening, Red: "too verbose… hard to tell placeholder vs titles" —
measured on prod the same night: "a signal" explained twice on live, three gate rows on the
profile, two captions under one chart; and h2s, captions, states and chips all mono grey
lowercase while placeholders were sans grey. Four roles, one look.
- This file, 08-25: three critics (citations, operability, a stranger) reviewed the first
draft — Durant's line was cited as Aristotle's, NE VII.3 was mapped backwards, five laws
lacked their two failures. Fixed before shipping; that is law 12 applied to the law.
## Law — real assets (Red, 2026-09-07)
**Real assets are never burned or locked away from people; only the launched token may be burned.**
Stocks, HYPE, BTC, stables: every unit that enters a Signal contract has an exit to a person or a working
pool (holders' wallets, redemption, liquidity anyone can trade against). A vault nobody can withdraw from is
a burn with a nicer name. Thin-air tokens (the launched meme) may be burned. Every fee mode, contract and
feature is checked against this line, by Claude and by Codex.