# Where a change belongs

Trace a user action from its web controller or browser module into its application owner before editing.
Folder names alone do not prove ownership: Runtime deliberately compiles several root source trees.

| Capability | Primary source locations | Contract to preserve |
| --- | --- | --- |
| Public catalog, discovery, profiles | `src/DrakimaCore.Public.Web`, `Services/Discovery` | Publication and audience filters; bounded queries |
| Staff CMS and release review | `src/DrakimaCore.Studio.Web/Areas/Admin`, `Services/Editorial` | Draft/review/approval/publish lifecycle and assignments |
| Page builder Phase 0 study | Studio `PageBuilderPrototypeController`, `wwwroot/js/page-builder-prototype`, `docs/design/studio-page-builder` | Disposable public-copy fixtures; staff entry; no server drafts or publication writes; see [Phase 0](page-builder-phase-zero.md) |
| Persistent page drafts | Domain/Application `Pages`, Runtime-linked `Infrastructure/Pages`, Core `Models/Pages` and Studio `PagesController` | Conditional immutable checkpoints, exact candidate bindings, current editorial assignments and protected page images; authoring and public serving have independent switches |
| Saved page rendering and previews | Application `PageRenderer`, Runtime `PageMarkdown` / `PublicPageSources`, Studio `PagePreviewsController`, Web.Shared `Views/Shared/Pages` and `page-content` CSS/JS | Exact retained revision/hash; authenticated private previews; existing catalog eligibility; shared component markup; admitted public releases use the same renderer |
| Visual page authoring | Domain `PageTemplates`, Studio `PagesController`, `Views/Pages`, `wwwroot/js/page-editor` and `page-editor` CSS | Current author assignment and optional Admin pilot; serialized conditional saves, explicit local recovery, private owned images, exact saved preview and opt-in Admin numeric editor measurements |
| Page releases and recovery | Application `PagePublicationChecks` / `PagePublicDelivery`, focused Core page adapters, Studio release panel and Public `SitePagesController` | Exact revision/path approval, conditional atomic activation and outbox, retained release rollback, restore to a new draft, withdrawal/archive/export; default-closed Public serving; read-only approved-release views and guarded images |
| Existing Home and Site Guide conversion | Domain `PageSurfaceRegistry`, Application `PageSurfaceBaselines` / `PageSurfaceDelivery`, focused route-mode adapter, Public `HomeController` / `PageSurfaceMediaController`, shared native page presentations | Explicit one-time private import and provenance; fixed routes; Legacy/Builder/Unavailable modes; per-route admission; no implicit fallback; existing catalog/account/welcome owners; see [conversion guide](page-builder-existing-pages.md) |
| Page menus, discovery and Akari | Application `PagePublicCatalog` / `PageAuthoredText` / `PageProjectionDispatcher`, focused catalog/outbox adapters, discovery snapshot owner, shared `PageNavigation`, Studio release panel, Akari projection/context/retrieval | Explicit menu references; release metadata and bounded discovery; current render/dependency admission; deterministic prose/current-owner links; leased event retries and lag diagnostics; stale page evidence withheld |
| Page operations and maintenance | Application `PageOperations` / `PageCheckpointRetention` / `PageMaintenance` / `PageDiagnostics`, focused Core operations adapter and writer barrier, private image inventory/quarantine, Studio operations/maintenance controllers, Web.Shared response timing filter | Admin reports and complete owned-image verification; constrained per-checkpoint pruning with immutable transaction receipts; recoverable orphan quarantine and grace-gated final removal under writer exclusion; mutation defaults closed |
| Private Gynoid conversations | `src/DrakimaCore.GynoidConversations.Application`, `src/DrakimaCore.GynoidConversations.Infrastructure`, `src/DrakimaCore.GynoidConversations.Web` | Account-owned sessions, full selected history, idempotent operations |
| Character identity and room presentation | `Services/Gynoids`, `Content/Gynoids`, shared webroot manifests | Explicit identity/outfit defaults; immutable retained releases |
| Akari guidance, retrieval, support | `Services/Akari`, `Composition` | Audience-filtered sources and separate role/context budgets |
| AI transport and planning | `src/DrakimaCore.Infrastructure`, `src/DrakimaCore.Application`, Runtime adapters | Cancellation, provider limits, bounded admission |
| Interview Studio | `src/DrakimaCore.InterviewStudio.Web`, application/infrastructure InterviewStudio folders | Curriculum and adaptive session ownership |
| VN Maker and published VNs | Studio/Public Web, `Services/VisualNovel`, Application visual-novel contracts | Draft versus immutable release; explicit AI bridge |
| Drakima Arcade | Application/Infrastructure `Arcade`, `Composition/DrakimaArcadeComposition`, Public `ArcadeController` | Published local quartet, independent visibility allowlist, permanent campaign ownership, predecessor completion, exact owned run/checkpoint and reward evidence; preserve retained pins; see [Arcade](arcade.md) |
| Valkyrie player assistance and controllers | Public Web `visual-novel/battle-assistance.js`, `console-gamepad.js`, `active-battle-player.js` | Device preferences use existing pause/command protocols; no client-owned outcomes; see [development program](valkyrie-development.md) |
| Credits and payments | `src/DrakimaCore.Credits`, `Infrastructure/Credits`, commerce services | Stable ledger keys, one settlement, retained financial history |
| Public Store | Public Commerce `StoreController`, `Views/Store`, `store.css`, `CommerceCatalogService` | `/Store` lists active priced credit plans and published purchasable albums; existing cart/checkout and album owners retain purchase authority |
| Media discussion and community | `Services/Videos`, `Services/Community`, Public Media/Journal/Novels controllers | Published description, public cast/lore and linked lyrics; bounded source context; complete reviewed replies; private cards/history remain separate |
| Accounts, continuation, notifications and support | Shared Identity, Public account/Continue/SupportDesk controllers, `Security` | Current account/role checks, unavailable registration/checkout states, clear notifications without leaving the page, private support visibility |
| Artwork and public media | `Tools/AssetPipeline`, Infrastructure storage/media adapters | Separate source/private/public bytes and canonical manifests |
| Character turnarounds | Application `IGynoidTurnaroundLibrary` / `IGynoidTurnaroundEditor`, Infrastructure `GynoidTurnaroundLibrary` / `TurnaroundAuthoringStore`, Studio Admin `Turnarounds` | Packaged baseline plus durable staff edits, stable character/version pairs, ordered views, revision checks and recoverable deletion |
| Installed sprite editing | `Application/Artwork`, `Infrastructure/Media/InstalledGynoidSpriteEditor`, Studio `InstalledGynoidSprites` | Registered image selection, fixed canvas, shared-slot disclosure, revision recovery |
| Local artwork production | `Tools/Drakima.GynoidCreationCore`, `Libraries/Drakima.CreationCore.*` | Creator-PC compute/storage; explicit approved exports; no website dependency |
| Background work | `hosts/DrakimaCore.Workers`, capability registrations in `Composition` | Owned cancellation, recovery and effective feature availability |
| Engineering documentation | `docs/current`, `Services/Engineering`, Engineering/Admin Web areas | One reviewed handbook source, deliberate public/staff audience |

## Browser ownership

Feature JavaScript belongs in the owning Web project. Shared utilities belong in Web.Shared only when
multiple surfaces actually use them. The room lifecycle owns listeners, abort signals, transitions and
teardown. It prevents duplicate transitions and late results from changing a newer chat. Keep speech
playback state when moving its controls between standard and VN views.

Stable JavaScript module imports and CSS URLs revalidate. Content-versioned Razor asset URLs may cache
immutably. Do not add manually dated query strings to dependency imports or duplicate module instances.
Room-only CSS belongs to the conversation feature; shared layout owns the global website background.

## Finding the exact owner

Use `rg` for the route, action, interface or browser event. Follow registration in `Composition` and
project references, then inspect the nearest tests. Search `SystemCatalog` for the matching capability
and compatibility allowance. A new interface is useful only if it gives a workflow a clear owner;
wrapping the same service without reducing dependencies does not complete a module extraction.

See [architecture](architecture.md), [rooms](rooms-and-stories.md), and [media](media-and-sprites.md).

## Gynara game and Maker owners

The sibling TheGynaraLegend repository owns engine, content, authoring, simulation and player presentation. DrakimaCore owns protected Arcade admission, publication and verification. Start with [the platform map](gynara-game-platform.md) and [release boundaries](gynara-release-engineering.md). Avoid moving website account rules into the game engine or making the portable simulation depend on WPF.
