# Path A — `kind = 'Rust`

Default path. The op is compiled into the daemon binary via
`inventory::collect!` at link time. Full Rust type safety; replay-
deterministic by construction; zero runtime overhead.

## Files

| File | Purpose |
| --- | --- |
| [`greet_actor.ncl`](greet_actor.ncl) | Catalog declaration — typechecks against `schema-future.ncl` |
| [`greet_actor.rs`](greet_actor.rs) | Handler — copies to `crates/ontoref-ops/src/ops/greet_actor.rs` |

## How to integrate into ontoref-el-proyecto

1. Copy the catalog declaration:

       cp examples/catalog-extension/01-rust/greet_actor.ncl \
          .ontoref/catalog/operations/greet_actor.ncl

   (Remove the `kind = 'Rust` line if migration 0025 is not yet applied —
   the current schema doesn't accept the field but defaults the
   behaviour to Rust.)

2. Copy the Rust handler:

       cp examples/catalog-extension/01-rust/greet_actor.rs \
          crates/ontoref-ops/src/ops/greet_actor.rs
       echo 'pub mod greet_actor;' >> crates/ontoref-ops/src/ops/mod.rs

3. Author the matching validators (out of scope of this example):
   `actor_exists`, `tone_in_allowed_set`, `greeting_recorded` — each as
   a `#[onto_validator]` function. See
   `crates/ontoref-ops/src/precondition/` for the pattern.

4. Build and test:

       cargo build -p ontoref-daemon
       cargo test -p ontoref-ops greet_actor

5. Dispatch:

       curl -X POST http://127.0.0.1:7891/ops/greet_actor \
         -H "Authorization: Bearer $ONTOREF_TOKEN" \
         -d '{"actor_id":"jpl","tone":"dao"}'

## Key properties

- **Witness coverage**: the daemon signs the canonical serialisation of
  the state delta (the new `current_state` value in the `actor-greeting`
  FSM dimension). The signature attests the in-process computation.
- **No `evaluate_ondaod` required in pre-validators**: Rust ops can
  invoke `dispatch::call("evaluate_ondaod", …)` inline when needed.
  The schema-level Hard constraint
  [`non-rust-kinds-require-ondaod-pre`](../../../.ontoref/adrs/adr-034-catalog-extensibility-beyond-rust.ncl)
  only applies to `kind != 'Rust`.
- **Backward-compatible**: omitting `kind` in the declaration is
  equivalent to declaring `'Rust` (default).
