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

Notes for agents

  • allowlist.txt is a decision, not a cache. Never admit an icon to make a test or a feature pass; the owner reviews the list, and an icon the pack adds fails tests/pack.rs until a human decides it. The only reason to exclude one is that it does not suit a young child (alcohol, money and payments, anything adult or frightening, a rude meme, interface buttons); a test pins those. Do not write legal or rights reasoning into the list or its docs.
  • IconId has no public constructor from a string that skips the allowlist. Do not add one, and do not store an icon name as a bare String anywhere (a fact, the wire, the app). Deserialising an unknown or excluded name is an error; callers that must survive a newer peer's name (the memory file) read leniently on purpose.
  • The rasteriser refuses; it does not approximate. A new shape or command the pack starts using is a deliberate extension with a test, not a fallback.
  • The pack in third-party/pixel-icons is unchanged upstream. Never edit an SVG; see its CLAUDE.md.
  • No I/O and no clock in the library (it builds for wasm: it is a dependency of whiskers-core). The file system is only in src/bin, examples and tests.
  • The generated PixelIconSet.kt is gitignored; the app's PixelIcon.kt draws it.