Skip to content

fix: the catalog tells the installed truth — licence, state, Wardrobe (v3.1.1) - #376

Merged
genwave-radio merged 2 commits into
mainfrom
fix/wardrobe-polish
Aug 6, 2026
Merged

fix: the catalog tells the installed truth — licence, state, Wardrobe (v3.1.1)#376
genwave-radio merged 2 commits into
mainfrom
fix/wardrobe-polish

Conversation

@genwave-radio

Copy link
Copy Markdown
Collaborator

Dean's T204 demo feedback + gh-#375, both halves review-gated and browser-smoked (both kinds re-encountered against the live catalog):

  • d82f870 fonts — the licence trio (OFL-1.1 · v2.000 · latin) joins the pre-install detail panel; installed-state awareness (Installed chip, Re-install, state-neutral specimen caption, local flip on success only); /library → /wardrobe rename (nav 'Wardrobe', the media-Libraries docstring disambiguated; /api/fonts + wire DTO names deliberately stay).
  • 6dbb8eb themes (gh-Theme catalog detail: no installed-state or provenance (parity with the font-pack polish) #375) — same truth-telling for themes: Installed chip + 'Imported · ⟨source⟩ · ⟨date⟩' + Re-install; installed source = the existing Station:Theme settings choices (no new route); ThemeImportResponse.ImportedAt via a store read-back (never a fabricated UtcNow — spec pins response == stored row == settings choice). Inherited debt paid: CatalogEntryResponse.UnreachableCatalog() kills the 16-null literal; the shared <Chip> replaces five duplicated chip sites.

Gates: dotnet 2,284 passed / 0 failed; jest 90 suites / 861 passed; tsc clean; failed installs flip nothing on either kind (spec-pinned both).

Closes #375. Tag v3.1.1 after merge — pin-bump PR follows the images.

…Wardrobe rename (v3.1.1 font half)

Dean's T204 demo feedback. (1) The pre-install trust surface now shows
the licence: CatalogEntryResponse projects FontLicense/Version/Subset via
the hardened serializer (all six font args passed BY NAME — the null-soup
guard), FontDetailPanel renders the same 'licence · version · subset'
line the Wardrobe page uses. (2) Installed-state truth: /api/fonts rides
the page load (fail-closed to [] — documented direction: a stale
'Install' costs an idempotent re-install; a false 'Installed' costs an
operator a missing font), Installed chip + Re-install label, the
specimen caption is state-neutral in both states, and a successful
install flips state locally (failure flips nothing). (3) /library ->
/wardrobe: nav 'Wardrobe', WardrobeClient/WardrobePage/WardrobeIcon,
media-Libraries docstring disambiguated; backend route + DTO names stay
(wire contracts don't chase UI labels).
…1.1 theme half)

Mirrors the font half (d82f870) for themes: the detail panel shows an
Installed chip + 'Imported · <source> · <date>' provenance (catalog slug
or 'file'; NULL provenance — the future authored case — renders nothing,
never 'Imported · null'), the button reads Re-install when installed, and
a successful install flips state locally (2xx only; failed installs flip
nothing — spec-pinned on BOTH kinds, closing the font-half N3 gap).
Installed source = the existing /api/settings Station:Theme choices
(importedFrom/importedAt already ride that wire — no new route), projected
to three fields before the RSC payload, fail-closed to [] with the
documented degrade direction. Inherited obligations closed:
CatalogEntryResponse.UnreachableCatalog() factory kills the 16-null
literal (CS0102 forced the name); shared <Chip> extracted and adopted at
all five duplicated sites (PersonasClient's ml-2 equivalence verified).
ThemeImportResponse carries ImportedAt via a store READ-BACK after upsert
— never a fabricated UtcNow; the spec pins response == stored row ==
settings choice, the whole gh-#375 contract in one walk.
@genwave-radio
genwave-radio merged commit 109d635 into main Aug 6, 2026
1 of 10 checks passed
@genwave-radio
genwave-radio deleted the fix/wardrobe-polish branch August 6, 2026 16:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Theme catalog detail: no installed-state or provenance (parity with the font-pack polish)

1 participant