# Catalog Extension Examples

Concrete worked examples of the four catalog `kind`s admitted by
[ADR-034](../../.ontoref/adrs/adr-034-catalog-extensibility-beyond-rust.ncl):

| Path | Kind | Status | When to use |
| --- | --- | --- | --- |
| [`01-rust/`](01-rust/) | `'Rust` | Executable today (default) | Piloto ops co-developed with the daemon |
| [`02-sidecar/`](02-sidecar/) | `'Sidecar` | Phase A — implementable today | Shared-domain Level-3 instances (ADR-030 mechanism #6) |
| [`03-ncl-transform/`](03-ncl-transform/) | `'NclTransform` | Phase B — declarable, exec deferred | Trivial CRUD ops once the interpreter backend lands |
| [`04-wasm/`](04-wasm/) | `'Wasm` | Phase B — declarable, exec deferred | Non-Rust authors, sandboxed ops (T3/T4/T5 triggers) |

## What this folder demonstrates

Each subfolder contains one minimal, self-contained example for a single
`kind`. The catalog declarations typecheck against
[`schema-future.ncl`](schema-future.ncl) — a forward-looking copy of the
post-migration-0025 schema co-located with the examples so all four
paths verify today even though migrations 0024 and 0025 are still
`'Proposed` at the protocol level.

## Forward-looking schema

[`schema-future.ncl`](schema-future.ncl) models the contract that
`.ontoref/catalog/schema.ncl` will adopt once migration 0025 lands. It
declares:

- `OpKind = [| 'Rust, 'NclTransform, 'Wasm, 'Sidecar |]`
- Per-kind body shapes (`NclTransformBody`, `WasmBody`, `SidecarBody`)
- The `OndaodPreRequired` contract enforcing that non-Rust ops include
  `evaluate_ondaod` in `constraints.pre`
- The extended `OperationDecl` admitting `kind` and `body`

After migration 0025 is applied to your project, replace
`import "../../schema-future.ncl"` with
`import "../../../.ontoref/catalog/schema.ncl"` and the examples keep
working.

## Verify all examples typecheck

```sh
nickel typecheck examples/catalog-extension/01-rust/greet_actor.ncl                     --import-path examples/catalog-extension
nickel typecheck examples/catalog-extension/02-sidecar/catalog/send_email_notification.ncl --import-path examples/catalog-extension
nickel typecheck examples/catalog-extension/03-ncl-transform/rename_ontology_node.ncl   --import-path examples/catalog-extension
nickel typecheck examples/catalog-extension/04-wasm/render_provisioning_report.ncl      --import-path examples/catalog-extension
```

All four MUST pass; the `'Rust` example passes without `evaluate_ondaod`
in pre-validators (Rust ops can synthesise the ondaod context inline);
the other three include `"evaluate_ondaod"` in `constraints.pre` per
[ADR-034 constraint
`non-rust-kinds-require-ondaod-pre`](../../.ontoref/adrs/adr-034-catalog-extensibility-beyond-rust.ncl).

## Runtime status

| Kind | Daemon dispatches today? | Awaits |
| --- | --- | --- |
| `'Rust` | Yes (inventory + `#[onto_operation]`) | — |
| `'Sidecar` | Soon (ADR-030 Phase A, ~80 LOC proxy handler) | Mechanism #6 land |
| `'NclTransform` | No — returns HTTP 501 | ADR-030 T-trigger: expressive-power proof for ≥3 real ops |
| `'Wasm` | No — returns HTTP 501 | ADR-030 T3/T4/T5 trigger |

A daemon built without the corresponding executive feature flag returns
501 Not Implemented when a non-`'Rust` op is invoked. See ADR-034
constraint `non-rust-kinds-declarable-not-executable-without-flag`.

## References

- [ADR-024 — Operations Layer](../../.ontoref/adrs/adr-024-operations-layer-agent-action-boundary.ncl)
- [ADR-026 — Three-planes validation](../../.ontoref/adrs/adr-026-validation-architecture-three-planes-sla-per-op.ncl)
- [ADR-028 — Ontology-Layer Separation](../../.ontoref/adrs/adr-028-ontology-layer-separation-from-project-layer.ncl)
- [ADR-029 — Tier coexistence permanent](../../.ontoref/adrs/adr-029-tier-coexistence-as-permanent-design.ncl)
- [ADR-030 — Catalog discovery cross-project](../../.ontoref/adrs/adr-030-catalog-discovery-cross-project.ncl)
- [ADR-034 — Catalog extensibility beyond Rust](../../.ontoref/adrs/adr-034-catalog-extensibility-beyond-rust.ncl)
- [`reflection/qa.ncl::ontoref-catalog-extension-howto`](../../.ontoref/reflection/qa.ncl)
- [`reflection/qa.ncl::ontoref-catalog-discovery-shared-domain`](../../.ontoref/reflection/qa.ncl)
