Skip to content

icon presets

Provenance

  • Source: .spec/spexcode/spec-cli/host-gateway/identity-config/icon-presets/spec.md
  • Source SHA-256: 41496f1f189ffd76820934fa9145155ec25a74d229d1a07b19d912e84c881724

Identity icons are named values, not page-local drawings. One browser-safe resolver owns the small featured registry's stable ids, accessible labels, palette, view box, and geometry, plus the established broad Iconify prefix:name namespace that the original tab identity accepted through api.iconify.design. Backend validation, the dashboard renderer, and the compact searchable/source-filtered chooser consume that same contract through the dedicated @spexcode/spec-core/identity package entry, never the Node core entry. The existing dashboard.icon field stores the chosen human-readable value; no catalog result is copied into another identity field. Emoji, arbitrary Iconify names, and URLs already authored directly remain valid through the adapter; structured chooser writes accept canonical registry ids and well-formed Iconify names, while rejecting other new arbitrary strings.

A registry row carries a tile colour and one default ink, and each shape may override that paint with its own, so a multi-colour mark needs no second format. Shape keys reach both a string serializer and a React renderer verbatim, so every key must be legal in both; hyphenated presentation names are not, and a shape that needs its own stroke weight is authored as a painted outline instead.

The same serializer produces browser favicon data URLs from a registry row, so the visual picker, project rows, scoped rail, global gateway mark, and browser tab cannot drift into separate variants. Missing values use the documented default; structured host writes reject malformed choices before touching disk without invalidating legacy values already authored directly.