For agents, on top of README.md, which they read first.
Notes for agents
Keep view::page pure. No worker type, no clock, no request in it: the tests call
it natively and read the string, and that is the only test of the page there is.
A picture is added in content.rs and nowhere else. SHOTS is what the page draws,
FILES what the router serves and Route::of what the log names; all three read the
same Shots. Its width and height are the SVG's own (a test reads them back).
No inline script, ever. policy() does not allow it and must not start to: the
page needs none. If a feature needs script, it is a file the site serves.
page.css uses the shared sheet's tokens (var(--ink), var(--display), ...). No
colour written as a number, no font named here.
The card's size is declared twice on purpose: content::CARD_WIDTH/CARD_HEIGHT
are what the page's tags say, and bin/card.rs asserts the drawing is that size.
src/bin/ has no chapter of its own. It is one file, described here.
Never write a plan on the map that nobody wrote down. hooks.rs's ideas are
ideas the owner has recorded; an event without one says "nothing yet", and that is the
truth the page is for. Do not invent one to fill a row, and do not add a _ arm to
hook: a new event must stop the build until it is placed.
"Built" comes from HookEvent::role, never from this crate. Hook::state derives
it; a today sentence exists exactly for the events the plugin handles
(built_is_what_the_plugin_says_is_built). Change what the plugin does in
jevhooks-events and the page follows.
Never type how a case ends. rules.rs's cases give an answer and a sentence; the
word on the chip is ended(&next), from running the plugin's network on that answer.
A case whose sentence no longer matches its chip means the rules changed: rewrite the
sentence, never the outcome (the_command_cases_end_every_way_a_command_can,
the_other_cases_end_as_they_say).
A case's numbers go through Asked::made_up, which writes a response body and
reads it the way a real one is read. Do not learn Jev's facts by hand here: the
thresholds would be skipped, and the drawing could show a state no answer produces.
A rule's label has about 35 characters before it runs under the number a deciding
rule carries (rete-draw's rule box is 262 wide at 11px mono), and a fact's name
shares 150 with its value. Names are jevhooks-rules' (RULES, fact_name,
end_name); when one is too long, shorten it there, never by changing rete-draw,
whose markup lmjtfy holds byte for byte.