/**
* module-registry.ts — Branch-by-Abstraction step 1 of the modules/projections refactor
* (see docs reducing-papyrus-consumer-change-amplification-with-modules--pvdo and
* papyrus-full-context-mesh-and-domain-storage-ownership-bound-qhzp).
*
* A statically registered operation descriptor replaces one entry of the central
* operation switch in src/service.ts. This is intentionally minimal for this slice:
* one registry, one contract, no dynamic loading, no migration/authority/CLI descriptors
* yet — those are separate follow-up steps. The goal is to prove the shape end-to-end
* for a real module (Notes) without changing any observable behavior.
*/
export interface OperationDefinition {
/** Dotted operation name, e.g. "notes.capture". Must be unique across every registered module. */
readonly name: string;
/** Owning module id, e.g. "notes". Used for boot diagnostics and future authority/migration scoping. */
readonly moduleId: string;
execute(input: Input): Output | Promise