logo SERENITY
Game Systems Foundation
Search Results for

    Show / Hide Table of Contents

    Namespace Serenity.Hub.Infrastructure.Editor

    Classes

    SerenityHubStatus

    Read-only status aggregator for the Serenity Hub. Produces three rows — required Unity packages, installation wiring, and overall project validation health — by reusing the same checks the standalone package installer and the project validators already perform. Never mutates project state; every row that needs a fix carries a deep-link menu path instead of fixing anything itself.

    Slice 6.4 migration: Serenity.Hub.Infrastructure.Editor.SerenityHubStatus.BuildWiringHealthRow(Serenity.Hub.Infrastructure.Editor.Services.SerenityHubValidationCache) no longer calls RunAll(string) synchronously — it reads TryReadSummary(string, out SerenityHubValidationSummary) and renders a "not yet run" state when nothing has been cached this session (spec §3 non-functional requirement: "no synchronous full-project scan on any view open"; design ADR-7). The cache is populated by the Validate view's on-demand "Everything" report card, not by this method.

    SerenityHubStatusRow

    One dumb status row for the Hub: a state, a human-readable message, and an optional deep-link menu path the Hub can execute to let the user act on it. Carries no logic of its own.

    SerenityHubStatusRowIds

    Stable status row identifiers, shared by SerenityHubStatusRowRegistry's registering assemblies and by SerenityHubFinishSetupBannerPolicy — both sides of the "finish setup" banner decision always agree on the same strings, the way SerenityHubViewIds does for sidebar views.

    SerenityHubStatusRowRegistry

    Registration seam for a status row whose assembly the Hub cannot reference (design ADR-1, mirrored from SerenityHubViewRegistry — e.g. the CreateGame editor assembly references this one, never the reverse). A registering assembly's own [InitializeOnLoad] static constructor calls Register(string, Func<SerenityHubStatusRow>) on every domain reload; registration is idempotent per row id so that rerun never accumulates duplicate entries. This dictionary is process state that survives every domain reload once populated — the same contract SerenityHubViewRegistry carries.

    SerenityHubValidationRunnerRegistry

    Registration seam for a project validator whose assembly the Hub cannot reference (design ADR-1, mirrored from SerenityHubStatusRowRegistry — e.g. the Localization editor assembly references this one, never the reverse). A registering assembly's own [InitializeOnLoad] static constructor calls Register(string, Action<SerenityValidationReport>) on every domain reload; registration is idempotent per validator id so that rerun never accumulates duplicate entries, and RegisteredValidatorIds keeps first-registration order so the set a report describes reads the same on every domain load. This dictionary is process state that survives every domain reload once populated — the same contract SerenityHubViewRegistry carries. SerenityProjectValidationRunner resolves through TryGet(string, out Action<SerenityValidationReport>) and skips a validator that never registered rather than throwing.

    SerenityHubWindow

    The Serenity Hub — the single "start here" front door for the package. A UI Toolkit workspace with a persistent sidebar (Home, Create, Validate, Browse, Learn, Advanced) and a swappable content panel, replacing the previous single-scroll-view IMGUI layout (spec §2, design ADR-2, migration note).

    The Hub never fixes anything itself: every card and every launcher button opens a real tool via SerenityHubLauncher (UnityEditor.EditorApplication.ExecuteMenuItem(System.String)) or a real asset. Hosted alongside SerenityProjectValidationRunner and SerenityValidateEverythingWindow in the Hub's own editor assembly, which sits above every module's editor assembly and is referenced by none of them — the direction that keeps CreateGame → Hub one-way and the registries below necessary (design ADR-1).

    SerenityHubWindowStyles

    USS class name constants for the Hub window's own chrome — toolbar, sidebar, content host, search results, footer — sibling to SerenityHubCardStyles (card-level) and SerenityHubViewStyles (view-level), so SerenityHub.uss has one stable selector surface for every layer of the window (Slice 6, design ADR-2).

    SerenityProjectValidationRunner

    Runs Serenity's project-integrity validators (Health Check, Missing References, Localization Keys, Install Order, Addressables Tagging, Addressable Keys, Audio Registration, Branding, HUD Bindings, Achievements) and reports the combined result — interactively (a menu item that writes JSON) or headlessly (ValidateFromCommandLine()), so CI or an AI agent can confirm a project is correctly wired and self-correct. Hosted in the Hub assembly because the Hub is the only editor assembly that references every module's validator engine; Global cannot, because each of those modules already references Global.

    catalog (Hub catalog-staleness) is standalone-only, deliberately excluded from all: it is catalog-hygiene, not project-wiring health, and must never run on any Hub window-open path.

    Localization Keys is the one validator this assembly does not reference directly — the Localization editor assembly references the Hub instead and publishes its validator through SerenityHubValidationRunnerRegistry (design ADR-1).

    SerenityValidateEverythingWindow

    One aggregated dashboard over every Serenity project validator (RunAll(string)): Health Check, Missing References, Localization Keys, Addressables Tagging, Audio Registration, HUD Bindings, and Achievements. Issues are grouped per validator with a Ping button when an asset path resolves. Addressables and Audio Registration findings that have a mechanical fix also get a per-row "Fix" button and a per-group "Fix all safe" button; every fix previews exactly which asset(s) will change via a confirmation dialog, applies the fix through the validator's own UnityEditor.AssetDatabase / UnityEditor.Undo-backed API, then re-scans automatically. Health Check, Missing References, and Localization Keys findings are report-only: they require a human decision, so their rows only offer Ping. This window is intentionally dumb — it contains no validation or fixing logic of its own, only calls into the runner and the two fixable validators. Hosted alongside SerenityProjectValidationRunner (rather than in the Global validator-engine folder) for the same reason the runner itself lives here: this assembly already references the Global validator engines and owns the localization one, so hosting the aggregated view here avoids a circular assembly reference back into Global.

    Enums

    SerenityHubStatusState

    State of a single SerenityHubStatusRow.

    In this article
    © 2026 Serenity. All Rights Reserved