feat(icon-registry): add spelwork-pua asset status for shipped house-style art #163

Merged
peterswimm merged 2 commits from fix/icon-registry-spelwork-pua-160 into main 2026-09-25 15:18:21 +00:00
Member

Closes #160.

assetStatus could only say "openmoji" or "pending-pua", so the registry
had no way to mark the 45 delivered house-style icons as shipped. This adds
"spelwork-pua" and moves every token except spel.tribunal.pragmatic (the
one token with no art) onto it.

What changed

  • types.ts — third assetStatus value: "spelwork-pua".
  • registry.ts — 45 of 46 tokens moved to "spelwork-pua";
    spel.tribunal.pragmatic corrected from "openmoji" (it was reusing
    spel.tribunal.frame-invariant's glyph, not really an OpenMoji choice) to
    "pending-pua". Attribution updated to "SPELWork Icon Registry" for the
    tokens moving off OpenMoji, so attribution.ts's compliance report sorts
    them correctly.
  • resolve.ts — isPlaceholder now trusts assetStatus alone; dropped the
    isPlaceholderGlyph hex-string heuristic, which would have kept the 4 seed
    PUA tokens (spel.guise, spel.bastia, spel.lineage, spel.drift)
    flagged as placeholders after their status moved, since they store
    defaultGlyph as a literal hex string (e.g. "E901").
  • registry.test.ts, resolve.test.ts — updated expectations.
    resolve.test.ts's "returns placeholder for pending-pua tokens" test moves
    its subject from spel.guise (now shipped) to spel.tribunal.pragmatic.
  • artifact.py, README.md — kept in sync with the same status values.

Deferred, not in this PR: defaultGlyph's two encodings (hex string vs.
literal character) — normalising that touches every reader of the field and
this PR removes the only place that needed it fixed. Separate issue.

Not in this PR

  • The 45 SVG assets themselves — this only changes how the registry records
    status, not what renders. Delivery is a separate step.
  • artifact.py's icon-card badges and the "0 final custom glyphs — all
    pending design" stats caption (~line 2331–2378) still assume only
    "openmoji"/"pending-pua" exist, so the generated design-tool page will
    now show a stale caption. Flagging, not fixing here — didn't want to make
    a presentation call that isn't mine to make.
  • examples.ts still uses spel.guise as its "pending-pua" demo, same
    problem resolve.test.ts had. Same reasoning: flagging rather than
    changing a file the decision comment didn't scope in.

Test status

Could not run vitest — this checkout has no Node.js installed. Changes were
reviewed by hand against every current caller of assetStatus (grep -rn
across src/); reasoning for each file is above.

Closes #160. `assetStatus` could only say `"openmoji"` or `"pending-pua"`, so the registry had no way to mark the 45 delivered house-style icons as shipped. This adds `"spelwork-pua"` and moves every token except `spel.tribunal.pragmatic` (the one token with no art) onto it. ## What changed - `types.ts` — third `assetStatus` value: `"spelwork-pua"`. - `registry.ts` — 45 of 46 tokens moved to `"spelwork-pua"`; `spel.tribunal.pragmatic` corrected from `"openmoji"` (it was reusing `spel.tribunal.frame-invariant`'s glyph, not really an OpenMoji choice) to `"pending-pua"`. Attribution updated to `"SPELWork Icon Registry"` for the tokens moving off OpenMoji, so `attribution.ts`'s compliance report sorts them correctly. - `resolve.ts` — `isPlaceholder` now trusts `assetStatus` alone; dropped the `isPlaceholderGlyph` hex-string heuristic, which would have kept the 4 seed PUA tokens (`spel.guise`, `spel.bastia`, `spel.lineage`, `spel.drift`) flagged as placeholders after their status moved, since they store `defaultGlyph` as a literal hex string (e.g. `"E901"`). - `registry.test.ts`, `resolve.test.ts` — updated expectations. `resolve.test.ts`'s "returns placeholder for pending-pua tokens" test moves its subject from `spel.guise` (now shipped) to `spel.tribunal.pragmatic`. - `artifact.py`, `README.md` — kept in sync with the same status values. **Deferred, not in this PR:** `defaultGlyph`'s two encodings (hex string vs. literal character) — normalising that touches every reader of the field and this PR removes the only place that needed it fixed. Separate issue. ## Not in this PR - The 45 SVG assets themselves — this only changes how the registry records status, not what renders. Delivery is a separate step. - `artifact.py`'s icon-card badges and the "0 final custom glyphs — all pending design" stats caption (~line 2331–2378) still assume only `"openmoji"`/`"pending-pua"` exist, so the generated design-tool page will now show a stale caption. Flagging, not fixing here — didn't want to make a presentation call that isn't mine to make. - `examples.ts` still uses `spel.guise` as its "pending-pua" demo, same problem `resolve.test.ts` had. Same reasoning: flagging rather than changing a file the decision comment didn't scope in. ## Test status Could not run `vitest` — this checkout has no Node.js installed. Changes were reviewed by hand against every current caller of `assetStatus` (`grep -rn` across `src/`); reasoning for each file is above.
feat(icon-registry): add spelwork-pua asset status for shipped house-style art
Some checks failed
PR policy check / policy-gate (pull_request) Failing after 0s
Test Generator / lint-workflows (pull_request) Successful in 27s
Security Scans / Gitleaks secret scan (pull_request) Successful in 27s
Test Generator / lint-prose (pull_request) Successful in 29s
Security Scans / Trivy filesystem scan (pull_request) Successful in 31s
UDG dist drift gate / dist/ matches dtcg + udg sources (pull_request) Failing after 14s
Copy coverage / Design copy reaching rendered HTML (pull_request) Successful in 27s
Block Validation / validate (pull_request) Successful in 1m2s
Test Generator / test (pull_request) Successful in 3m48s
ccf77e3090
Closes #160. `assetStatus` could only say "openmoji" or "pending-pua", so the
registry had no way to mark the 45 delivered house-style icons as shipped.

- types.ts: add "spelwork-pua" to the assetStatus union
- registry.ts: move all seed/stage/dimension tokens to "spelwork-pua" except
  spel.tribunal.pragmatic (the one token with no art, now "pending-pua"
  instead of incorrectly "openmoji")
- resolve.ts: trust assetStatus for isPlaceholder, drop the isPlaceholderGlyph
  hex-string heuristic (it would keep the 4 seed PUA tokens flagged as
  placeholders after their status moves, since they store defaultGlyph as a
  literal hex string)
- registry.test.ts, resolve.test.ts: updated expectations; resolve.test.ts's
  pending-pua example moves from spel.guise (now shipped) to
  spel.tribunal.pragmatic
- artifact.py, README.md: kept in sync with the same status values
test(icon-registry): fix attribution tests broken by the spelwork-pua move
Some checks failed
PR policy check / policy-gate (pull_request) Failing after 0s
UDG dist drift gate / dist/ matches dtcg + udg sources (pull_request) Failing after 14s
Test Generator / lint-workflows (pull_request) Successful in 17s
Test Generator / lint-prose (pull_request) Successful in 19s
Security Scans / Gitleaks secret scan (pull_request) Successful in 26s
Copy coverage / Design copy reaching rendered HTML (pull_request) Successful in 28s
Security Scans / Trivy filesystem scan (pull_request) Successful in 30s
Block Validation / validate (pull_request) Successful in 51s
Test Generator / test (pull_request) Successful in 3m39s
b2e01c39f9
vitest wasn't runnable in the environment that authored the previous commit
(no Node.js). Installed Node and ran the suite: 6 failures in
attribution.test.ts, all from the same cause — moving spel.consent,
spel.plurality et al. off "openmoji" attribution left zero reserved tokens
attributed to OpenMoji, so tests asserting an OpenMoji source among resolved
reserved tokens had nothing to find.

Fixed by testing the OpenMoji attribution path through a theme-defined
custom icon instead of a reserved token, since the attribution.ts logic
being tested (getAttributions/renderCredits*/getComplianceReport) works on
any resolved icon's attribution string, not specifically on reserved-token
data. 40/40 tests passing.
peterswimm deleted branch fix/icon-registry-spelwork-pua-160 2026-09-25 15:18:21 +00:00
Sign in to join this conversation.
No description provided.