Package-level declarations
Types
A shared dashboard: its id and its title.
Answers which shared dashboards reference a view: the view store's own snapshot query, kept behind this port so the domain does not depend on the query stack. The service binds it.
A saved view. It belongs to its tenant and its owner, which is its audience: the kernel refuses a command whose owner is not the view's, whose expected version is stale, or that addresses a deleted view; the view refuses one from another application as not found.
Moves a view to the owner its audience now names (the owner changes only through wow.lifecycle.TransferOwner): (shared) once it is shared, the claiming user once it is claimed. The command keeps the commit's scope and operator, and a derived command is not checked against the target's scope. A caller who waits for the move asks for Wow-Wait: handled(ViewAudienceSaga.onAudienceChanged)>snapshot.
The only checks the server makes of a view's config: its kind is a view kind, it is no larger than MAX_CONFIG_BYTES, and the paths a store queries hold what a store can index (referenceProblem). The engine admits its meaning when it opens it.
The view store's reads of views that ViewStoreRoutes answers: the snapshot queries and the configured system views, kept behind this port so the domain does not depend on the query stack. The service binds it. Every read is of one application: a view another application wrote reads as none.
The view store's own reads, in the caller's tenant and application (me.ahoo.wow.api.caller.Caller.app; refused with view-store.app-required without one), through reads.
The 9.x records of a view, read as revision 2: 9.x recorded no kind, which it defined as the config's own kind (its ViewKind), so the upgrade takes it from there. A 9.x config without a kind, or with one that is no ViewKind, fails the read: the view is not guessed into a kind, and the read names the view.