For agents, on top of README.md, which they read first.

  • preview::Preview::tags refuses what a scraper would reject. Do not add a way around it (a new_unchecked, a path that skips Origin): a bad card that cannot be built is the point. A new constraint is a new Refused and a test.
  • preview::required is held to what tags writes by a test. A tag added to one and not the other fails it.
  • card::Chrome is lmjtfy's 600 by 315 sheet times a whole unit. Keep its measures lmjtfy's, so a site's card and lmjtfy's packages/card agree.
  • wire::json may add whitespace and nothing else: no reordered keys, no dropped or summarised fields (lmjtfy's rule). Its test parses the printed text back.
  • flow::spine draws only the rows it is given. A site builds them from the code it describes; do not give it a way to add decoration that is not a row.
  • shell::Attr::new panics on a name that could end the tag. That is deliberate: names are a site's constants and the failure is at the first render.