Namespace Serenity.Localization.Installation.Settings.Editor.Hub.Catalog
Classes
SerenityHubCatalogGroup
One named, ordered slice of catalog entries produced by SerenityHubCatalogGrouper — the unit a grouped Hub view renders as a single Foldout section (UX feedback round 4).
SerenityHubCatalogGrouper
Derives a display group for a catalog entry from its real MenuPath, so Create/Browse/Advanced can
render grouped Foldout sections instead of one flat grid (UX feedback round 4) without a new catalog field
to maintain — the existing Tools/Serenity/... menu taxonomy already encodes the domain.
Rule: split the path after Tools/Serenity/. When the first remaining segment matches the entry's own
SerenityHubCategory (the common case — a Create entry filed under
Tools/Serenity/Create/Audio/...), the group is the next segment down ("Audio"), or
GeneralGroupName when that category segment is immediately followed by the entry's own title
with no intermediate segment between them. When the first segment does NOT match the category (an Advanced
entry filed under its real home, e.g. Tools/Serenity/Docs/... or Tools/Serenity/Validate/...),
the group is that first segment itself, regardless of how many more segments the path has. A path with only
one segment after Tools/Serenity/ at all (no domain folder, e.g. Tools/Serenity/Clone
Directory) has nothing to derive a group from and falls into GeneralGroupName.
SerenityHubCatalogLookup
Resolves catalog entries back from the handles the Hub's persisted personal state carries: a recent's
MenuPath (§8, the only handle the launcher has at launch time) or a favorite's Id. A handle
that no longer matches any catalog entry (the tool was renamed or removed since it was recorded) is silently
skipped rather than surfaced as a broken row — recents/favorites are a convenience list, not a guarantee.
SerenityHubToolCatalog
The single source of truth for every catalog-driven Hub view (Create, Validate, Browse, Advanced) and for
search. Every entry mirrors a real [MenuItem("Tools/Serenity/...")] declaration in the project except
the entries excluded below — coverage is verified mechanically by
SerenityCatalogStalenessValidator, not by a hardcoded count here.
Excluded by product/structural decision, not drift: Tools/Serenity/Export Package (Asset
Store) and Tools/Serenity/Refresh Upgrade Artifacts (dev-only, being de-shipped separately), and
Tools/Serenity/Hub itself (would create a recursive self-launch card). The
isValidateFunction: true overload on ClassVirtualizer.cs's menu item collapses into the same
entry as its non-validate sibling (Serenity.Localization.Installation.Settings.Editor.Hub.Catalog.SerenityHubToolCatalog.BuildCreateEntries, "Make Class Subclass-Friendly") —
counted once, not twice.
Tools/Serenity/Install Required Unity Packages and
Tools/Serenity/Installation/Validate Installation are catalogued under
Validate as open-tool cards (ValidatorKind = null): Home's status
rows already deep-link into them, and neither fits the report+cache model (Install Packages mutates like
Migration; Validate Installation has no RunAll-reachable report engine).
The four "(JSON)" menu items (Validate/Project (JSON), Validate/Migration/Migrate to 1.3.0
(JSON), Create/UI/Theme Builder (JSON), Create/Services/Service Extension Creator (JSON))
are headless CI duplicates of an already-catalogued GUI tool, so they live under
Advanced instead of their GUI sibling's category — the same treatment the
design gives Validate/Project (JSON) as a "power-user duplicate".
Tools/Serenity/Validate/Find FoundationSettings... is catalogued under
Browse (product decision, UX feedback batch 9), NOT
Validate where its own menu path lives — it is a lookup/search tool with no
pass/fail concept, not a validator. This supersedes the original spec §5.2 open-tool-card placement; the
menu path itself is unchanged since it still lives under the real Tools/Serenity/Validate/... menu.
SerenityHubToolEntry
One immutable catalog entry describing a real Tools/Serenity/... menu item: what it is, where it
lives in the Hub sidebar, how to launch it, and how it participates in search. The sole source of truth for
every catalog-driven Hub view — no view may hardcode its own tool list.
Enums
SerenityHubCategory
The four tool-bearing Hub sidebar views a catalog entry can belong to. Home and Learn are
deliberately absent — Home renders status/recents/favorites and Learn renders curated documentation, neither
owns a slice of the tool catalog.