Files

Console service

Use consoleClient and consoleQuery from @/service/console in Server and Client Components. Calls use the appropriate HTTP transport for the Python Console API.

Policy ownership

Shared operation defaults belong in query-policies.ts. Call sites own inputs, execution conditions, projections, and interaction feedback. A local option overrides the corresponding default; callbacks are not composed automatically. When a mutation uses shared onSettled invalidation, keep local toast, close, and navigation behavior in onSuccess / onError. Do not override onSettled without preserving that cache contract. The returned invalidation promise keeps the mutation pending until active consumers have refreshed.

List affected generated keys inline in the owning operation's policy. Whether invalidation runs after an error depends on the write contract: a rejected request does not imply the server rolled back. Record that decision per module. Do not add an invalidation helper to hide the cache dependencies.

Use generated options and types directly. A feature-owned options factory is appropriate only when it owns a shared request policy or a composed query; forwarding hooks and handwritten API DTOs create a second owner.