# s2 — execution semantics + one-shot/pulse idiom **Protected property:** from the surfaces alone a consumer can learn (a) what the strategy's output stream means, (b) how it is executed against a protective stop, and (c) the signal-side idiom the surfaces recommend when a held one-shot / pulse behaviour is wanted — and can author that idiom to a green run. ## What the surfaces say - `aura --help`: "a strategy emits a bias in [-1,+1] per cycle, held as the continuously-tracked target position; a protective stop defines the risk unit R, and signal quality is measured in R." - Node schemas make the execution layer concrete: `Bias` (clamp to [-1,+1]), `FixedStop` (`price → stop_distance`, defines R), `PositionManagement` (`bias + price + stop_distance + size → managed position in R`). The built-in `run`/`sweep` harness supplies this risk executor automatically. - The scaffolded `CLAUDE.md`: "Entry signals become held state via the signal-side latch/edge-pulse idiom (see `aura graph introspect --vocabulary`)." ## Authored idioms (both build + validate green) - `latch_hold.oplist.json` — momentary crossover events → held state via `Latch` (`set = fast>slow`, `reset = slow>fast`), held level → `Bias`. Runs green (2543 trades over EURUSD 2020-01..03). - `edge_pulse.oplist.json` — the complementary one-shot pulse, built as the first-difference of the latched level (`Delay(lag=1)` + `Sub`) fed to `Bias` (+1 on entry edge, −1 on exit edge, 0 held). Builds + validates green. ## Friction recorded The `CLAUDE.md` names the "latch/edge-pulse idiom" and points to `graph introspect --vocabulary`, but that surface only lists node one-liners — it lists `Latch` but no `edge`/`pulse` primitive and no composition recipe. The pulse *is* constructible (Latch→Delay→Sub→Bias), but the consumer must infer the first-difference recipe; the pointer resolves to a list, not a recipe.