identity config¶
Project identity resolves from the portable dashboard title/icon fields; gateway identity resolves from one host config under SPEXCODE_HOME.
Identity has exactly two authored sources. A project's human-readable source is its committed
spexcode.json dashboard.title and dashboard.icon; the gateway icon is the one host-level
gateway.icon value in SPEXCODE_HOME/config.json. Neither value is copied into the other tier.
Backends and the host catalog carry only a resolved {title, icon} projection. Missing values receive
stable defaults. Every backend registers the actual git tree it serves: a linked worktree gets its own
encoded endpoint/catalog id and cannot overwrite the main checkout's slot. The live instance answer repeats
that actual root, so merely claiming another checkout cannot pass validation.
The host exposes narrow, admin-authorized structured icon writes. A project write revision-checks and
updates only dashboard.icon in that project's portable JSON, including while its backend is offline; a
gateway write revision-checks and updates only the host config. Both accept the shared resolver's registry
ids and well-formed Iconify names and are atomic. Raw project-config editing remains the general settings
surface, not a second identity store; arbitrary legacy emoji/URL values remain readable without becoming
new structured-write choices.