Skip to content

feat(decider): run compiled wasm deciders in the production runtime#461

Merged
yordis merged 5 commits into
mainfrom
yordis/feat-wasm-decider-runtime
Jul 3, 2026
Merged

feat(decider): run compiled wasm deciders in the production runtime#461
yordis merged 5 commits into
mainfrom
yordis/feat-wasm-decider-runtime

Conversation

@yordis

@yordis yordis commented Jul 2, 2026

Copy link
Copy Markdown
Member
  • PR feat(decider): compile deciders to WASM/WIT components #384 made decider purity enforceable by compiling deciders to zero-import WASM components, but those components could only run in the sim and the conformance CLI; production command execution still required a native Rust decider, so the sandboxing guarantees never reached the event store.
  • Execution composes through the storage-neutral ports of trogon-decider-runtime instead of the typed Decider trait, because guest session state lives behind a wasmtime store handle and per-command write preconditions come from the module descriptor, shapes the trait cannot express without erasing its error types.
  • Zero-import enforcement is structural (an empty component linker) rather than the sim's wasm-tools shell-out, because production hosts cannot depend on a dev-time binary to uphold a safety contract.
  • The guest never folds decided events back into session state, so snapshots are captured only after re-evolving them; skipping that would make snapshot-resumed sessions silently diverge from full replay.

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
@cursor

cursor Bot commented Jul 2, 2026

Copy link
Copy Markdown

PR Summary

High Risk
New command execution path touches event-store appends, snapshot consistency, and sandbox limits; correctness bugs could corrupt streams or accept stale snapshots.

Overview
Introduces trogon-decider-wasm-runtime, a production host that runs compiled trogon:decider WASM components against the same storage ports as native CommandExecution, without going through the typed Decider trait.

Loading and routing: Components are compiled with wasmtime, rejected if they declare any import (empty linker), and probed once for descriptor(). A DeciderRegistry maps command types to modules and rejects collisions. WasmSnapshotId embeds {module}@{version}/{stream_id} so version bumps invalidate old snapshots without migration.

Execution: WasmCommandExecution resolves stream id, replays history (or resumes from snapshot), calls guest decide, appends events with descriptor-driven write preconditions, and optionally schedules opaque snapshot writes. With snapshots enabled, decided events are re-evolved into the session before snapshot() so resumed state matches full replay. The engine applies per-call fuel and memory limits; replay fuel scales with event count.

CI: The wasm-decider workflow now runs cargo test -p trogon-decider-wasm-runtime, including schedules WASM integration tests.

Reviewed by Cursor Bugbot for commit 6444b37. Bugbot is set up for automated code reviews on this repo. Configure here.

@coderabbitai

coderabbitai Bot commented Jul 2, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@yordis, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 35 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 9b8a4e3c-f010-4a05-b235-446bd5480c48

📥 Commits

Reviewing files that changed from the base of the PR and between 338acf3 and 6444b37.

📒 Files selected for processing (13)
  • rsworkspace/crates/trogon-decider-wasm-runtime/src/command_spec.rs
  • rsworkspace/crates/trogon-decider-wasm-runtime/src/execution.rs
  • rsworkspace/crates/trogon-decider-wasm-runtime/src/execution/tests.rs
  • rsworkspace/crates/trogon-decider-wasm-runtime/src/lib.rs
  • rsworkspace/crates/trogon-decider-wasm-runtime/src/module.rs
  • rsworkspace/crates/trogon-decider-wasm-runtime/src/module/tests.rs
  • rsworkspace/crates/trogon-decider-wasm-runtime/src/module_name.rs
  • rsworkspace/crates/trogon-decider-wasm-runtime/src/module_name/tests.rs
  • rsworkspace/crates/trogon-decider-wasm-runtime/src/module_version.rs
  • rsworkspace/crates/trogon-decider-wasm-runtime/src/module_version/tests.rs
  • rsworkspace/crates/trogon-decider-wasm-runtime/src/registry.rs
  • rsworkspace/crates/trogon-decider-wasm-runtime/src/registry/tests.rs
  • rsworkspace/crates/trogon-decider-wasm-runtime/src/snapshot_id.rs

Walkthrough

Adds a new trogon-decider-wasm-runtime crate for loading, validating, routing, and executing compiled WASM decider components, with snapshot support, engine configuration, identifier wrappers, tests, and CI coverage.

Changes

WASM Decider Runtime Crate

Layer / File(s) Summary
Crate scaffolding and CI wiring
.github/workflows/ci-rust.yml, rsworkspace/Cargo.toml, rsworkspace/crates/trogon-decider-wasm-runtime/Cargo.toml, rsworkspace/crates/trogon-decider-wasm-runtime/src/lib.rs
Adds the crate manifest and workspace dependency entry, a CI step running crate tests, and lib.rs module declarations plus public re-exports of the runtime API surface.
Validated identifier types
rsworkspace/crates/trogon-decider-wasm-runtime/src/command_type.rs, .../src/module_name.rs, .../src/module_version.rs
Adds validated string wrappers for command types, module names, and module versions, along with conversion traits, error enums, and unit tests.
Domain error detail type
rsworkspace/crates/trogon-decider-wasm-runtime/src/domain_error_detail.rs
Adds DomainErrorDetail with code/message, Display/Error behavior, and conversion from the WIT host domain error.
Wasm engine configuration
rsworkspace/crates/trogon-decider-wasm-runtime/src/engine.rs, .../src/engine/tests.rs
Adds WasmEngineConfig, GuestState memory limits, and WasmDeciderEngine for a fuel/component-configured Wasmtime engine and per-session stores.
Opaque snapshot payload and snapshot id
rsworkspace/crates/trogon-decider-wasm-runtime/src/opaque_snapshot.rs, .../src/snapshot_id.rs
Adds OpaqueSnapshotPayload for byte snapshots and WasmSnapshotId for rendered module-and-stream snapshot identity, with tests.
Module loading and descriptor validation
rsworkspace/crates/trogon-decider-wasm-runtime/src/module.rs, .../src/module/tests.rs, .../src/test_fixture.rs
Adds WasmDeciderModule::load with zero-import enforcement, descriptor probing, name/version/command-type validation, accessors, and tests, plus the shared WASM test fixture loader.
Command-type routing registry
rsworkspace/crates/trogon-decider-wasm-runtime/src/registry.rs, .../src/registry/tests.rs
Adds DeciderRegistry and DeciderRegistryBuilder for routing modules by CommandType, rejecting duplicate registrations, with tests.
Command execution engine
rsworkspace/crates/trogon-decider-wasm-runtime/src/execution.rs, .../src/execution/tests.rs
Implements WasmCommandExecution with and without snapshot-store flows, event encoding, precondition resolution, snapshot validation and scheduling, and execution error mapping, with unit tests.
End-to-end scheduler execution integration tests
rsworkspace/crates/trogon-decider-wasm-runtime/tests/schedules_execution.rs, .../tests/support/mod.rs
Adds in-memory event and snapshot stores plus end-to-end tests for create/pause flows, snapshot behavior, write-precondition behavior, unknown commands, and fuel exhaustion.

Estimated code review effort: 4 (Complex) | ~75 minutes

Possibly related PRs

Poem

A rabbit hops through fuel and byte,
Zero imports, checked just right 🐇
Snapshots stashed, events replayed,
Commands routed, none delayed.
Through Wasmtime's warren, safe and sound —
Another crate, new burrow found! 🥕

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main change: running compiled WASM deciders in the production runtime.
Description check ✅ Passed The description matches the changeset and explains the production WASM decider runtime design and execution flow.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch yordis/feat-wasm-decider-runtime

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 6

🧹 Nitpick comments (5)
rsworkspace/crates/trogon-decider-wasm-runtime/src/opaque_snapshot.rs (1)

55-63: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Unnecessary thread_local for a constant value.

snapshot_type() still .clone()s the cached value on every call (Line 35), so the thread_local only avoids re-validating a fixed literal — a cost that's already negligible. A plain construction inline (or a process-wide LazyLock if reuse across many calls truly matters) is simpler and avoids the extra #[allow(clippy::unwrap_used)] indirection.

♻️ Simplify by dropping the thread_local
 impl SnapshotType for OpaqueSnapshotPayload {
     type Error = std::convert::Infallible;
 
     fn snapshot_type() -> Result<SnapshotTypeName, Self::Error> {
-        Ok(SNAPSHOT_TYPE_NAME.with(|name| name.clone()))
+        #[allow(
+            clippy::unwrap_used,
+            reason = "fixed non-empty ASCII literal without control characters; construction cannot fail"
+        )]
+        Ok(SnapshotTypeName::new("wasm-decider-opaque.v1").unwrap())
     }
 }
-
-thread_local! {
-    static SNAPSHOT_TYPE_NAME: SnapshotTypeName = {
-        #[allow(
-            clippy::unwrap_used,
-            reason = "fixed non-empty ASCII literal without control characters; construction cannot fail"
-        )]
-        SnapshotTypeName::new("wasm-decider-opaque.v1").unwrap()
-    };
-}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@rsworkspace/crates/trogon-decider-wasm-runtime/src/opaque_snapshot.rs` around
lines 55 - 63, The `SNAPSHOT_TYPE_NAME` thread_local in `opaque_snapshot.rs` is
unnecessary because `snapshot_type()` only clones a fixed value and the extra
caching adds avoidable `clippy::unwrap_used` suppression. Simplify
`snapshot_type()` by constructing
`SnapshotTypeName::new("wasm-decider-opaque.v1")` directly where it is used, or
switch to a `LazyLock` only if shared reuse is actually needed. Remove the
`thread_local!` block and keep the logic centered around `snapshot_type()` and
`SnapshotTypeName::new`.
rsworkspace/crates/trogon-decider-wasm-runtime/Cargo.toml (1)

1-29: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

LGTM overall; minor inconsistency in chrono dependency.

Every other dependency uses { workspace = true }, but chrono (Line 24) pins a bare version. Consider adding it to the workspace dependency table for consistent version management.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@rsworkspace/crates/trogon-decider-wasm-runtime/Cargo.toml` around lines 1 -
29, The dependency list in the wasm runtime manifest is inconsistent because
`chrono` is pinned directly while the other shared crates use workspace-managed
versions. Update the `chrono` entry to use the same workspace dependency pattern
as the surrounding dependencies, and ensure the workspace dependency table
includes `chrono` so version management stays centralized in the manifest for
`trogon-decider-wasm-runtime`.
rsworkspace/crates/trogon-decider-wasm-runtime/src/module_name.rs (1)

12-83: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Duplicate newtype pattern across three identifier types.

ModuleName here, along with ModuleVersion (rsworkspace/crates/trogon-decider-wasm-runtime/src/module_version.rs) and CommandType, implement virtually identical validation (is_empty/is_control checks), FromStr/TryFrom<String>/TryFrom<&str>/Display/Borrow<str>/AsRef<str> impls, and error enums differing only by name/messages. Consider extracting a shared macro or generic validated-string wrapper to reduce duplication while preserving each type's distinct identity.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@rsworkspace/crates/trogon-decider-wasm-runtime/src/module_name.rs` around
lines 12 - 83, The `ModuleName` newtype is duplicating the same validated-string
pattern used by `ModuleVersion` and `CommandType`, including the `new`
validation, `FromStr`/`TryFrom`/`Display`/`Borrow<str>`/`AsRef<str>` impls, and
near-identical error enums. Extract the shared logic into a reusable macro or
generic wrapper that centralizes the empty/control-character validation and
common trait impls, then keep `ModuleName` as a thin type-specific wrapper with
its own name and error type.
rsworkspace/crates/trogon-decider-wasm-runtime/src/execution.rs (2)

227-231: 🩺 Stability & Availability | 🔵 Trivial | 💤 Low value

Session handle not dropped on error paths.

If replay_events or decide return Err (lines 228-229, 294), the function returns early via ? without calling host::drop_session. Since a fresh Store is created per execute() call (line 206/280) and dropped at function-scope end regardless of the return path, the guest resource table is torn down along with it either way, so this isn't a cross-call leak — but any guest-side resource destructor logic (if the WIT session resource has one) never runs on these paths. Worth a defensive cleanup (e.g., a small RAII guard or explicit drop-on-error) if resource destructors gain side effects later.

Also applies to: 292-296

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@rsworkspace/crates/trogon-decider-wasm-runtime/src/execution.rs` around lines
227 - 231, The session cleanup in execute is skipped when replay_events or
decide return early, so the host::drop_session call in execution.rs only runs on
the success path. Update the flow around create_session, replay_events, decide,
and fold_decided_events to ensure the session is always released, such as by
adding a small RAII guard or explicit cleanup on error before propagating the
WasmCommandError. Keep the fix localized to the execute/session-handling path so
the session handle is dropped consistently regardless of whether replay_events
or decide fails.

199-251: 📐 Maintainability & Code Quality | 🔵 Trivial | 🏗️ Heavy lift

Significant duplication between the two execute() implementations.

The WithoutSnapshotStore and WithSnapshotStore execute() methods (lines 199-251 and 269-330) share nearly identical instantiate/stream-id/precondition/replay/decide/fold/encode/append orchestration, differing only in snapshot read/write. This duplication is exactly how the unnecessary fold_decided_events call above ended up copy-pasted into the no-snapshot path. Consider factoring the shared pipeline (instantiate → stream id → replay → decide → precondition resolution → encode → append) into a shared private helper parameterized over an optional "post-decide, pre-append" hook (fold + snapshot capture), so behavior can't silently diverge between the two builder states again.

Also applies to: 253-379

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@rsworkspace/crates/trogon-decider-wasm-runtime/src/execution.rs` around lines
199 - 251, The two `execute()` implementations in `WithoutSnapshotStore` and
`WithSnapshotStore` duplicate the same
instantiate/stream-id/read/replay/decide/append flow, which caused the stray
`fold_decided_events` call to appear in the no-snapshot path. Refactor the
shared pipeline in `execute()` into a private helper that handles the common
orchestration and accepts an optional hook for snapshot-specific work between
`decide` and `append`, so the `WithoutSnapshotStore` and `WithSnapshotStore`
variants only supply their differing snapshot behavior.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@rsworkspace/crates/trogon-decider-wasm-runtime/src/engine.rs`:
- Around line 82-88: WasmDeciderEngine::new currently leaks wasmtime::Error from
the constructor instead of using the crate’s typed error pattern. Update the
constructor in engine.rs so it returns a crate-local error type and wraps any
Engine::new failure into that error, matching the other constructor conventions
in this crate; use the WasmDeciderEngine::new and Engine::new symbols to find
the right spot.

In `@rsworkspace/crates/trogon-decider-wasm-runtime/src/execution.rs`:
- Around line 199-251: The `execute` method in `WithoutSnapshotStore`
unconditionally calls `fold_decided_events` after `decide`, even though the
folded state is never consumed before `host::drop_session`; this extra guest
`evolve` replay can waste fuel and trap valid no-snapshot commands. Update
`execute` so the fold step is only performed when a later snapshot actually
needs the session state, and keep the normal append path unchanged by relying on
the existing `create_session`, `decide`, `drop_session`, and `append_stream`
flow.

In `@rsworkspace/crates/trogon-decider-wasm-runtime/src/module.rs`:
- Around line 43-49: The guest name/version validation in the module descriptor
parsing is losing the real failure reason by mapping every `ModuleName::new` and
`ModuleVersion::new` error to
`InvalidDescriptorError::EmptyName`/`EmptyVersion`. Update the
`InvalidDescriptorError` enum in `module.rs` to carry the underlying source
error for these cases, and change the parsing logic that uses `map_err` so it
preserves and propagates the actual `ModuleName`/`ModuleVersion` validation
error instead of hardcoding “empty”.
- Around line 58-64: `WasmDeciderModule` is still storing the guest wire
`ModuleDescriptor`, so the module boundary is not holding a validated domain
object as intended. Update the `WasmDeciderModule` type and its construction
path to keep a typed descriptor or typed command list instead of the raw
descriptor, and make sure `registry.rs` no longer needs to re-parse each command
with `CommandType::new` when accessing module data.

In `@rsworkspace/crates/trogon-decider-wasm-runtime/src/registry.rs`:
- Around line 13-21: `DuplicateCommandType` is storing module identities as raw
`String` instead of the validated `ModuleName` value object. Update the
`DuplicateCommandType` variant in `registry.rs` to use `ModuleName` for both
`existing_module` and `new_module`, and adjust the places that construct this
error (including the routing conflict path around `duplicate` handling) to pass
the typed module names directly rather than calling `.name().to_string()`. Keep
`command_type` as `CommandType` so the error remains fully domain-typed and
consistent with the rest of the crate.

In `@rsworkspace/crates/trogon-decider-wasm-runtime/src/snapshot_id.rs`:
- Around line 16-28: The WasmSnapshotId::new renderer currently concatenates
ModuleName, ModuleVersion, and stream_id with “@” and “/”, which allows
collisions when those characters appear in the inputs. Update
WasmSnapshotId::new in snapshot_id.rs to escape or encode each segment before
building the snapshot id, and keep as_str unchanged for the final rendered
value. If stream_id still needs boundary guarantees, replace the raw &str
parameter with a validated identifier type so unique identifiers remain
unambiguous.

---

Nitpick comments:
In `@rsworkspace/crates/trogon-decider-wasm-runtime/Cargo.toml`:
- Around line 1-29: The dependency list in the wasm runtime manifest is
inconsistent because `chrono` is pinned directly while the other shared crates
use workspace-managed versions. Update the `chrono` entry to use the same
workspace dependency pattern as the surrounding dependencies, and ensure the
workspace dependency table includes `chrono` so version management stays
centralized in the manifest for `trogon-decider-wasm-runtime`.

In `@rsworkspace/crates/trogon-decider-wasm-runtime/src/execution.rs`:
- Around line 227-231: The session cleanup in execute is skipped when
replay_events or decide return early, so the host::drop_session call in
execution.rs only runs on the success path. Update the flow around
create_session, replay_events, decide, and fold_decided_events to ensure the
session is always released, such as by adding a small RAII guard or explicit
cleanup on error before propagating the WasmCommandError. Keep the fix localized
to the execute/session-handling path so the session handle is dropped
consistently regardless of whether replay_events or decide fails.
- Around line 199-251: The two `execute()` implementations in
`WithoutSnapshotStore` and `WithSnapshotStore` duplicate the same
instantiate/stream-id/read/replay/decide/append flow, which caused the stray
`fold_decided_events` call to appear in the no-snapshot path. Refactor the
shared pipeline in `execute()` into a private helper that handles the common
orchestration and accepts an optional hook for snapshot-specific work between
`decide` and `append`, so the `WithoutSnapshotStore` and `WithSnapshotStore`
variants only supply their differing snapshot behavior.

In `@rsworkspace/crates/trogon-decider-wasm-runtime/src/module_name.rs`:
- Around line 12-83: The `ModuleName` newtype is duplicating the same
validated-string pattern used by `ModuleVersion` and `CommandType`, including
the `new` validation, `FromStr`/`TryFrom`/`Display`/`Borrow<str>`/`AsRef<str>`
impls, and near-identical error enums. Extract the shared logic into a reusable
macro or generic wrapper that centralizes the empty/control-character validation
and common trait impls, then keep `ModuleName` as a thin type-specific wrapper
with its own name and error type.

In `@rsworkspace/crates/trogon-decider-wasm-runtime/src/opaque_snapshot.rs`:
- Around line 55-63: The `SNAPSHOT_TYPE_NAME` thread_local in
`opaque_snapshot.rs` is unnecessary because `snapshot_type()` only clones a
fixed value and the extra caching adds avoidable `clippy::unwrap_used`
suppression. Simplify `snapshot_type()` by constructing
`SnapshotTypeName::new("wasm-decider-opaque.v1")` directly where it is used, or
switch to a `LazyLock` only if shared reuse is actually needed. Remove the
`thread_local!` block and keep the logic centered around `snapshot_type()` and
`SnapshotTypeName::new`.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 1aee659b-6d9e-413a-b990-7bef8a72d408

📥 Commits

Reviewing files that changed from the base of the PR and between 8a78e90 and 557d622.

⛔ Files ignored due to path filters (1)
  • rsworkspace/Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (27)
  • .github/workflows/ci-rust.yml
  • rsworkspace/Cargo.toml
  • rsworkspace/crates/trogon-decider-wasm-runtime/Cargo.toml
  • rsworkspace/crates/trogon-decider-wasm-runtime/src/command_type.rs
  • rsworkspace/crates/trogon-decider-wasm-runtime/src/command_type/tests.rs
  • rsworkspace/crates/trogon-decider-wasm-runtime/src/domain_error_detail.rs
  • rsworkspace/crates/trogon-decider-wasm-runtime/src/domain_error_detail/tests.rs
  • rsworkspace/crates/trogon-decider-wasm-runtime/src/engine.rs
  • rsworkspace/crates/trogon-decider-wasm-runtime/src/engine/tests.rs
  • rsworkspace/crates/trogon-decider-wasm-runtime/src/execution.rs
  • rsworkspace/crates/trogon-decider-wasm-runtime/src/execution/tests.rs
  • rsworkspace/crates/trogon-decider-wasm-runtime/src/lib.rs
  • rsworkspace/crates/trogon-decider-wasm-runtime/src/module.rs
  • rsworkspace/crates/trogon-decider-wasm-runtime/src/module/tests.rs
  • rsworkspace/crates/trogon-decider-wasm-runtime/src/module_name.rs
  • rsworkspace/crates/trogon-decider-wasm-runtime/src/module_name/tests.rs
  • rsworkspace/crates/trogon-decider-wasm-runtime/src/module_version.rs
  • rsworkspace/crates/trogon-decider-wasm-runtime/src/module_version/tests.rs
  • rsworkspace/crates/trogon-decider-wasm-runtime/src/opaque_snapshot.rs
  • rsworkspace/crates/trogon-decider-wasm-runtime/src/opaque_snapshot/tests.rs
  • rsworkspace/crates/trogon-decider-wasm-runtime/src/registry.rs
  • rsworkspace/crates/trogon-decider-wasm-runtime/src/registry/tests.rs
  • rsworkspace/crates/trogon-decider-wasm-runtime/src/snapshot_id.rs
  • rsworkspace/crates/trogon-decider-wasm-runtime/src/snapshot_id/tests.rs
  • rsworkspace/crates/trogon-decider-wasm-runtime/src/test_fixture.rs
  • rsworkspace/crates/trogon-decider-wasm-runtime/tests/schedules_execution.rs
  • rsworkspace/crates/trogon-decider-wasm-runtime/tests/support/mod.rs

Comment thread rsworkspace/crates/trogon-decider-wasm-runtime/src/engine.rs Outdated
Comment thread rsworkspace/crates/trogon-decider-wasm-runtime/src/execution.rs
Comment thread rsworkspace/crates/trogon-decider-wasm-runtime/src/module.rs Outdated
Comment thread rsworkspace/crates/trogon-decider-wasm-runtime/src/module.rs
Comment thread rsworkspace/crates/trogon-decider-wasm-runtime/src/registry.rs Outdated
Comment thread rsworkspace/crates/trogon-decider-wasm-runtime/src/snapshot_id.rs
@github-actions

github-actions Bot commented Jul 2, 2026

Copy link
Copy Markdown

badge

Code Coverage Summary

Details
Filename                                                                                  Stmts    Miss  Cover    Missing
--------------------------------------------------------------------------------------  -------  ------  -------  -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
crates/acp-nats/src/jetstream/provision.rs                                                   13       0  100.00%
crates/acp-nats/src/jetstream/consumers.rs                                                   41       0  100.00%
crates/acp-nats/src/jetstream/ext_policy.rs                                                   3       0  100.00%
crates/acp-nats/src/jetstream/streams.rs                                                     18       0  100.00%
crates/acp-nats/src/nats/subjects/global/session_list.rs                                      6       0  100.00%
crates/acp-nats/src/nats/subjects/global/ext_notify.rs                                        9       0  100.00%
crates/acp-nats/src/nats/subjects/global/session_new.rs                                       6       0  100.00%
crates/acp-nats/src/nats/subjects/global/authenticate.rs                                      6       0  100.00%
crates/acp-nats/src/nats/subjects/global/initialize.rs                                        6       0  100.00%
crates/acp-nats/src/nats/subjects/global/logout.rs                                            6       0  100.00%
crates/acp-nats/src/nats/subjects/global/ext.rs                                               9       0  100.00%
crates/trogon-decider-runtime/src/stream/append_stream.rs                                     5       0  100.00%
crates/trogon-decider-runtime/src/stream/stream_position.rs                                  26       0  100.00%
crates/trogon-decider-runtime/src/stream/read_stream.rs                                       7       0  100.00%
crates/trogon-scheduler/src/config.rs                                                        27       0  100.00%
crates/trogon-scheduler/src/mocks.rs                                                        401      51  87.28%   79, 119-122, 271, 288-291, 333-335, 349-353, 362, 406-410, 462-463, 467, 485-489, 506-509, 552-572
crates/trogon-scheduler/src/error.rs                                                         83      12  85.54%   131-133, 152-154, 159-161, 176-180
crates/trogon-scheduler/src/nats.rs                                                          11       0  100.00%
crates/trogon-scheduler/src/processor/execution/reconciliation/recorded_events.rs           241      12  95.02%   200-205, 242, 250, 271, 291, 297, 303, 336, 346, 364, 448
crates/trogon-scheduler/src/processor/execution/reconciliation/request.rs                   230       2  99.13%   285, 290
crates/trogon-scheduler/src/processor/execution/reconciliation/go_duration.rs                40       0  100.00%
crates/trogon-scheduler/src/processor/execution/reconciliation/rrule_wakeup_payload.rs       35       0  100.00%
crates/trogon-scheduler/src/processor/execution/reconciliation/reconcile.rs                 303      13  95.71%   251-260, 325-327
crates/trogon-scheduler/src/processor/execution/reconciliation/schedule_key.rs               27       0  100.00%
crates/trogon-scheduler/src/processor/execution/reconciliation/schedule_subject.rs           31       0  100.00%
crates/mcp-nats/src/nats/mod.rs                                                              23       0  100.00%
crates/mcp-nats/src/nats/parsing.rs                                                          98       0  100.00%
crates/trogon-scheduler-domain/src/subject.rs                                                26       0  100.00%
crates/trogonai-proto/src/lib.rs                                                             18       0  100.00%
crates/trogonai-proto/src/codec.rs                                                           16       0  100.00%
crates/trogonai-proto/src/convert.rs                                                         53       0  100.00%
crates/trogon-gateway/src/source/slack/server.rs                                            272       0  100.00%
crates/trogon-gateway/src/source/slack/socket_mode.rs                                       139       0  100.00%
crates/trogon-gateway/src/source/slack/config.rs                                             32       0  100.00%
crates/trogon-gateway/src/source/slack/signature.rs                                          17       0  100.00%
crates/a2a-redaction/src/bin/sign-bundle.rs                                                   1       1  0.00%    163
crates/a2a-nats/src/jetstream/stream_options.rs                                              50       0  100.00%
crates/a2a-nats/src/jetstream/provision.rs                                                   16       0  100.00%
crates/a2a-nats/src/jetstream/consumers.rs                                                   50       0  100.00%
crates/a2a-nats/src/jetstream/streams.rs                                                      9       0  100.00%
crates/a2a-nats/src/nats/subjects/tasks/events.rs                                            17       0  100.00%
crates/trogon-gateway/src/config.rs                                                        1172      32  97.27%   82, 689, 856, 1003, 1006, 1015, 1101-1108, 1186, 1189, 1198, 1257, 1260, 1344, 1347, 1356, 1421, 1424, 1501, 1504, 1513, 1589, 1592, 1606, 1665, 1668, 1978-1980
crates/trogon-gateway/src/main.rs                                                            26       0  100.00%
crates/trogon-gateway/src/http.rs                                                            13       0  100.00%
crates/trogon-gateway/src/source_plugin.rs                                                  288       3  98.96%   83, 140-141
crates/trogon-gateway/src/source_status.rs                                                   12       0  100.00%
crates/trogon-gateway/src/streams.rs                                                          7       0  100.00%
crates/trogon-gateway/src/source_integration_id.rs                                           28       2  92.86%   58, 60
crates/mcp-nats/src/nats/subjects/server/get_prompt.rs                                       12       0  100.00%
crates/mcp-nats/src/nats/subjects/server/ping.rs                                              9       0  100.00%
crates/mcp-nats/src/nats/subjects/server/cancel_task.rs                                      12       0  100.00%
crates/mcp-nats/src/nats/subjects/server/complete.rs                                         12       0  100.00%
crates/mcp-nats/src/nats/subjects/server/resource_updated.rs                                 12       0  100.00%
crates/mcp-nats/src/nats/subjects/server/set_logging_level.rs                                12       0  100.00%
crates/mcp-nats/src/nats/subjects/server/call_tool.rs                                        12       0  100.00%
crates/mcp-nats/src/nats/subjects/server/list_prompts.rs                                     12       0  100.00%
crates/mcp-nats/src/nats/subjects/server/progress.rs                                         12       0  100.00%
crates/mcp-nats/src/nats/subjects/server/list_tasks.rs                                       12       0  100.00%
crates/mcp-nats/src/nats/subjects/server/cancelled.rs                                        12       0  100.00%
crates/mcp-nats/src/nats/subjects/server/tool_list_changed.rs                                12       0  100.00%
crates/mcp-nats/src/nats/subjects/server/logging_message.rs                                  12       0  100.00%
crates/mcp-nats/src/nats/subjects/server/initialize.rs                                       12       0  100.00%
crates/mcp-nats/src/nats/subjects/server/list_resource_templates.rs                          12       0  100.00%
crates/mcp-nats/src/nats/subjects/server/subscribe_resource.rs                               12       0  100.00%
crates/mcp-nats/src/nats/subjects/server/unsubscribe_resource.rs                             12       0  100.00%
crates/mcp-nats/src/nats/subjects/server/prompt_list_changed.rs                              12       0  100.00%
crates/mcp-nats/src/nats/subjects/server/get_task.rs                                         12       0  100.00%
crates/mcp-nats/src/nats/subjects/server/read_resource.rs                                    12       0  100.00%
crates/mcp-nats/src/nats/subjects/server/elicitation_completed.rs                            12       0  100.00%
crates/mcp-nats/src/nats/subjects/server/list_resources.rs                                   12       0  100.00%
crates/mcp-nats/src/nats/subjects/server/get_task_result.rs                                  12       0  100.00%
crates/mcp-nats/src/nats/subjects/server/resource_list_changed.rs                            12       0  100.00%
crates/mcp-nats/src/nats/subjects/server/list_tools.rs                                       12       0  100.00%
crates/trogon-gateway/src/source/gitlab/server.rs                                            78       0  100.00%
crates/trogon-gateway/src/source/gitlab/gitlab_signing_token.rs                              30       0  100.00%
crates/trogon-gateway/src/source/gitlab/signature.rs                                         13       0  100.00%
crates/acp-nats/src/nats/subjects/subscriptions/all_agent.rs                                  9       0  100.00%
crates/acp-nats/src/nats/subjects/subscriptions/one_client.rs                                15       0  100.00%
crates/acp-nats/src/nats/subjects/subscriptions/prompt_wildcard.rs                            9       0  100.00%
crates/acp-nats/src/nats/subjects/subscriptions/all_session.rs                                9       0  100.00%
crates/acp-nats/src/nats/subjects/subscriptions/all_client.rs                                 9       0  100.00%
crates/acp-nats/src/nats/subjects/subscriptions/one_session.rs                               12       0  100.00%
crates/acp-nats/src/nats/subjects/subscriptions/global_all.rs                                 9       0  100.00%
crates/acp-nats/src/nats/subjects/subscriptions/one_agent.rs                                 15       0  100.00%
crates/acp-nats/src/nats/subjects/subscriptions/all_agent_ext.rs                              9       0  100.00%
crates/a2a-gateway/src/policy/wasmtime_substrate.rs                                          31       0  100.00%
crates/a2a-gateway/src/policy/error.rs                                                       16       0  100.00%
crates/a2a-gateway/src/policy/spicedb_tier1.rs                                              157      13  91.72%   226-228, 381, 448, 450-458
crates/a2a-gateway/src/policy/per_skill.rs                                                   87       0  100.00%
crates/a2a-nats/src/catalog/registrar.rs                                                     56       0  100.00%
crates/a2a-nats/src/catalog/store.rs                                                        117       0  100.00%
crates/a2a-nats/src/catalog/agent_view.rs                                                    47       0  100.00%
crates/a2a-nats/src/catalog/watch.rs                                                         18       0  100.00%
crates/a2a-nats/src/catalog/nats_kv.rs                                                        8       0  100.00%
crates/a2a-nats/src/catalog/spicedb_permission.rs                                           178      17  90.45%   151-156, 175, 340-344, 373-374, 385-387, 394-396
crates/jsonrpc-nats/src/codec/reconstruct.rs                                                 90       5  94.44%   56-59, 91
crates/jsonrpc-nats/src/codec/decode.rs                                                      57       0  100.00%
crates/jsonrpc-nats/src/codec/encode.rs                                                      31       0  100.00%
crates/a2a-identity-types/src/principal.rs                                                   16       0  100.00%
crates/a2a-identity-types/src/caller.rs                                                      24       0  100.00%
crates/a2a-identity-types/src/jwt.rs                                                         71       0  100.00%
crates/a2a-nats/src/client/resubscribe.rs                                                    28       0  100.00%
crates/a2a-nats/src/client/gateway_headers.rs                                                19       0  100.00%
crates/a2a-nats/src/client/unary.rs                                                          39       1  97.44%   57
crates/a2a-nats/src/client/streaming.rs                                                      73       0  100.00%
crates/a2a-nats/src/client/handle.rs                                                        218       0  100.00%
crates/a2a-nats/src/client/error.rs                                                          14       0  100.00%
crates/a2a-nats/src/client/event_stream.rs                                                   76       0  100.00%
crates/a2a-nats/src/client/wire.rs                                                           13       0  100.00%
crates/a2a-nats/src/push/dlq_dedup.rs                                                        51       1  98.04%   79
crates/a2a-nats/src/push/push_payload.rs                                                     18       0  100.00%
crates/a2a-nats/src/push/dlq.rs                                                              56       0  100.00%
crates/a2a-nats/src/push/nats_push_subject.rs                                                12       0  100.00%
crates/a2a-nats/src/push/push_notification_config.rs                                          6       0  100.00%
crates/a2a-nats/src/push/target.rs                                                           19       0  100.00%
crates/a2a-nats/src/push/push_delivery_semantics_registry.rs                                 17       0  100.00%
crates/a2a-nats/src/push/dispatch_error.rs                                                   24       0  100.00%
crates/a2a-nats/src/push/push_notification_config_id.rs                                      17       0  100.00%
crates/a2a-nats/src/push/idempotency_key_header.rs                                           16       0  100.00%
crates/a2a-nats/src/push/push_idempotency_key.rs                                             43       0  100.00%
crates/a2a-nats/src/push/caller_id.rs                                                        41       0  100.00%
crates/a2a-nats/src/push/authentication_header.rs                                            31       0  100.00%
crates/a2a-nats/src/push/delivery_semantics.rs                                               98       0  100.00%
crates/a2a-nats/src/push/push_notification_target.rs                                         32       0  100.00%
crates/a2a-nats/src/push/terminal_push_task_state.rs                                         17       0  100.00%
crates/a2a-nats/src/push/status_transition_id.rs                                             15       0  100.00%
crates/trogon-decider-runtime/src/execution.rs                                              379       0  100.00%
crates/trogon-decider-sim/src/host.rs                                                        35       0  100.00%
crates/trogon-decider-sim/src/session.rs                                                     15       0  100.00%
crates/trogon-decider-sim/src/fixture.rs                                                     18       2  88.89%   30-32
crates/trogon-decider-sim/src/import_check.rs                                                52       4  92.31%   68-70, 90
crates/trogon-decider-sim/src/scenario.rs                                                   142       4  97.18%   152-154, 258
crates/a2a-auth-callout/src/jwt/mod.rs                                                      232       0  100.00%
crates/a2a-auth-callout/src/jwt/nats_permission_claims.rs                                    10       0  100.00%
crates/a2a-auth-callout/src/jwt/user_jwt_subject.rs                                          12       0  100.00%
crates/a2a-auth-callout/src/jwt/nats_user_jwt.rs                                            187       1  99.47%   131
crates/acp-nats-server/src/acp_connection_id.rs                                              14       0  100.00%
crates/acp-nats-server/src/config.rs                                                         39       0  100.00%
crates/acp-nats-server/src/connection.rs                                                    114      35  69.30%   90-97, 102-117, 133, 135-136, 141, 150-151, 156, 160, 164, 167, 175, 179, 182, 185-189
crates/acp-nats-server/src/transport.rs                                                    1020     107  89.51%   242, 290-292, 527, 545, 572, 626, 631, 651, 670, 713-726, 815, 838-840, 892, 909-912, 1008-1011, 1086, 1089, 1092, 1101, 1105, 1108, 1111-1114, 1132, 1165-1168, 1176-1181, 1193-1197, 1201-1210, 1222-1223, 1241-1242, 1252, 1268-1272, 1300-1306, 1326-1328, 1333-1337, 1340-1345, 1362, 1364-1365, 1447-1448, 1460-1461, 1481-1482
crates/acp-nats-server/src/main.rs                                                           68       1  98.53%   109
crates/trogon-decider/src/event/codec/event_payload_error.rs                                  5       0  100.00%
crates/trogon-decider/src/event/codec/event_decode.rs                                        13       0  100.00%
crates/trogon-gateway/src/source/datadog/datadog_webhook_token.rs                             9       0  100.00%
crates/trogon-gateway/src/source/datadog/datadog_event_type.rs                               20       0  100.00%
crates/trogon-gateway/src/source/datadog/signature.rs                                         7       0  100.00%
crates/trogon-gateway/src/source/datadog/server.rs                                          108       0  100.00%
crates/trogon-gateway/src/source/linear/signature.rs                                          8       1  87.50%   16
crates/trogon-gateway/src/source/linear/server.rs                                            83       0  100.00%
crates/trogon-gateway/src/source/linear/config.rs                                             9       0  100.00%
crates/acp-nats/src/nats/subjects/client_ops/terminal_kill.rs                                12       0  100.00%
crates/acp-nats/src/nats/subjects/client_ops/terminal_output.rs                              12       0  100.00%
crates/acp-nats/src/nats/subjects/client_ops/terminal_release.rs                             12       0  100.00%
crates/acp-nats/src/nats/subjects/client_ops/session_request_permission.rs                   12       0  100.00%
crates/acp-nats/src/nats/subjects/client_ops/fs_read_text_file.rs                            12       0  100.00%
crates/acp-nats/src/nats/subjects/client_ops/terminal_create.rs                              12       0  100.00%
crates/acp-nats/src/nats/subjects/client_ops/terminal_wait_for_exit.rs                       12       0  100.00%
crates/acp-nats/src/nats/subjects/client_ops/session_update.rs                               12       0  100.00%
crates/acp-nats/src/nats/subjects/client_ops/fs_write_text_file.rs                           12       0  100.00%
crates/trogon-nats/src/lease/acquire.rs                                                       5       5  0.00%    9-14
crates/trogon-nats/src/lease/provision.rs                                                    83      10  87.95%   82-92
crates/trogon-nats/src/lease/lease_key.rs                                                    19       0  100.00%
crates/trogon-nats/src/lease/mod.rs                                                         107      13  87.85%   113-126
crates/trogon-nats/src/lease/release.rs                                                       5       5  0.00%    8-12
crates/trogon-nats/src/lease/renew.rs                                                        82      19  76.83%   23-29, 48-59
crates/trogon-nats/src/lease/lease_bucket.rs                                                 19       0  100.00%
crates/trogon-nats/src/lease/ttl.rs                                                          27       0  100.00%
crates/trogon-nats/src/lease/nats_kv_lease_config.rs                                         26       0  100.00%
crates/trogon-nats/src/lease/renew_interval.rs                                               25       0  100.00%
crates/trogon-nats/src/lease/lease_timing.rs                                                 15       0  100.00%
crates/acp-nats/src/nats/parsing.rs                                                         113      15  86.73%   138-152, 192
crates/acp-nats/src/nats/extensions.rs                                                        3       0  100.00%
crates/acp-nats/src/nats/mod.rs                                                              61      13  78.69%   22-33, 75
crates/acp-nats/src/nats/jsonrpc.rs                                                          51      11  78.43%   46, 54-55, 57-63, 81-83
crates/trogon-gateway/src/source/telegram/config.rs                                          42       0  100.00%
crates/trogon-gateway/src/source/telegram/registration.rs                                    82       0  100.00%
crates/trogon-gateway/src/source/telegram/signature.rs                                        7       0  100.00%
crates/trogon-gateway/src/source/telegram/server.rs                                          53       0  100.00%
crates/trogon-service-config/src/lib.rs                                                      38       0  100.00%
crates/trogon-gateway/src/source/incidentio/server.rs                                        72       0  100.00%
crates/trogon-gateway/src/source/incidentio/incidentio_signing_secret.rs                     22       0  100.00%
crates/trogon-gateway/src/source/incidentio/incidentio_event_type.rs                         20       0  100.00%
crates/trogon-gateway/src/source/incidentio/signature.rs                                      8       0  100.00%
crates/a2a-nats/src/push/dispatcher/composite.rs                                             15       0  100.00%
crates/a2a-nats/src/push/dispatcher/http.rs                                                  19       0  100.00%
crates/a2a-nats/src/push/dispatcher/jetstream.rs                                             45       0  100.00%
crates/a2a-nats/src/push/dispatcher/mod.rs                                                   16       0  100.00%
crates/a2a-nats/src/push/dispatcher/nats.rs                                                  37       0  100.00%
crates/trogon-decider-runtime/src/headers/header_name.rs                                     28       0  100.00%
crates/trogon-decider-runtime/src/headers/header_value.rs                                    34       0  100.00%
crates/trogon-decider-runtime/src/headers/header_map.rs                                      54       0  100.00%
crates/ard-registry/src/bin/ard-registry-demo/main.rs                                        64      20  68.75%   13-35
crates/trogon-nats/src/jetstream/mocks.rs                                                   941       1  99.89%   507
crates/trogon-nats/src/jetstream/publish.rs                                                  30       0  100.00%
crates/trogon-nats/src/jetstream/create_conflicts.rs                                         14       0  100.00%
crates/trogon-nats/src/jetstream/claim_check.rs                                             104       3  97.12%   46-48
crates/trogon-nats/src/jetstream/traits.rs                                                   46      40  13.04%   181-251
crates/trogon-nats/src/jetstream/stream_max_age.rs                                            8       0  100.00%
crates/trogon-scheduler/src/commands/domain/recurrence.rs                                    78       1  98.72%   99
crates/trogon-scheduler/src/commands/domain/schedule_occurrence_sequence.rs                  16       0  100.00%
crates/trogon-scheduler/src/processor/execution/checkpoints/codec/twin.rs                    96       0  100.00%
crates/trogon-identity-types/src/aauth/mod.rs                                                60       4  93.33%   107-109, 154
crates/trogon-scheduler-domain/src/commands/proto_wire.rs                                   138       1  99.28%   231
crates/trogon-scheduler-domain/src/commands/create_schedule.rs                               32       0  100.00%
crates/trogon-scheduler-domain/src/commands/remove_schedule.rs                               30       0  100.00%
crates/trogon-scheduler-domain/src/commands/pause_schedule.rs                                31       0  100.00%
crates/trogon-scheduler-domain/src/commands/resume_schedule.rs                               34       0  100.00%
crates/trogon-scheduler-domain/src/commands/state.rs                                         82       0  100.00%
crates/a2a-redaction/src/signed_bundle/manifest.rs                                           56       1  98.21%   83
crates/a2a-redaction/src/signed_bundle/signature.rs                                          30       3  90.00%   37-39
crates/a2a-redaction/src/signed_bundle/digest.rs                                             26       0  100.00%
crates/a2a-redaction/src/signed_bundle/public_key.rs                                         36       2  94.44%   44-45
crates/a2a-redaction/src/signed_bundle/verify.rs                                             64       2  96.88%   90-91
crates/a2a-auth-callout/src/credentials/api_key.rs                                           46       1  97.83%   33
crates/a2a-auth-callout/src/credentials/mtls.rs                                             153      13  91.50%   71-72, 168-169, 209-213, 216-219
crates/a2a-auth-callout/src/credentials/oidc.rs                                             188       4  97.87%   212-215
crates/a2a-gateway/src/policy/tier2/rule_name.rs                                             19       0  100.00%
crates/a2a-gateway/src/policy/tier2/mod.rs                                                   46       0  100.00%
crates/trogon-scheduler/src/processor/execution/worker/testkit.rs                           311       4  98.71%   458, 489-490, 495
crates/trogon-scheduler/src/processor/execution/worker/dispatcher.rs                        280       1  99.64%   200
crates/trogon-scheduler/src/processor/execution/worker/processor.rs                         303      12  96.04%   279, 339, 437-438, 444, 499-501, 533-536
crates/trogon-scheduler/src/processor/execution/worker/consumer.rs                           77       0  100.00%
crates/trogon-gateway/src/source/twitter/config.rs                                            9       0  100.00%
crates/trogon-gateway/src/source/twitter/signature.rs                                        16       0  100.00%
crates/trogon-gateway/src/source/twitter/server.rs                                          144       0  100.00%
crates/a2a-bridge/src/auth/callout_mint.rs                                                   49       1  97.96%   94
crates/trogon-decider-runtime/src/snapshot/codec/encoded_snapshot.rs                         44       0  100.00%
crates/trogon-decider-runtime/src/snapshot/codec/snapshot_encode_error.rs                    16       0  100.00%
crates/trogon-decider-runtime/src/snapshot/codec/snapshot_decode_error.rs                    19       0  100.00%
crates/trogon-decider-runtime/src/snapshot/codec/snapshot_envelope_decode_error.rs            6       0  100.00%
crates/trogon-decider-runtime/src/snapshot/codec/snapshot_payload_decode.rs                   3       0  100.00%
crates/trogon-decider-runtime/src/snapshot/codec/snapshot_envelope_encode_error.rs            3       0  100.00%
crates/acp-nats/src/nats/subjects/responses/cancelled.rs                                     15       0  100.00%
crates/acp-nats/src/nats/subjects/responses/ext_ready.rs                                     12       0  100.00%
crates/acp-nats/src/nats/subjects/responses/prompt_response.rs                               20       0  100.00%
crates/acp-nats/src/nats/subjects/responses/response.rs                                      20       0  100.00%
crates/acp-nats/src/nats/subjects/responses/update.rs                                        20       0  100.00%
crates/a2a-nats/src/nats/subjects/agents/tasks/cancel.rs                                     15       0  100.00%
crates/a2a-nats/src/nats/subjects/agents/tasks/list.rs                                       15       0  100.00%
crates/a2a-nats/src/nats/subjects/agents/tasks/resubscribe.rs                                15       0  100.00%
crates/a2a-nats/src/nats/subjects/agents/tasks/get.rs                                        15       0  100.00%
crates/mcp-nats-server/src/main.rs                                                            1       1  0.00%    67
crates/mcp-nats-server/src/allowed_host.rs                                                   52       0  100.00%
crates/mcp-nats-server/src/config.rs                                                         58       0  100.00%
crates/mcp-nats-server/src/runtime.rs                                                       268      86  67.91%   146-164, 200-202, 220-221, 232, 265-269, 273-282, 311-319, 324-359, 385-396
crates/trogon-gateway/src/source/discord/gateway.rs                                         116       1  99.14%   137
crates/trogon-gateway/src/source/discord/config.rs                                           45       0  100.00%
crates/trogon-nats/src/telemetry/messaging.rs                                                37       0  100.00%
crates/trogon-decider-runtime/src/snapshot/read_snapshot.rs                                   3       0  100.00%
crates/trogon-decider-runtime/src/snapshot/snapshot_type.rs                                  42       0  100.00%
crates/trogon-decider-runtime/src/snapshot/mod.rs                                             3       0  100.00%
crates/trogon-std/src/telemetry/http.rs                                                      58       0  100.00%
crates/a2a-gateway/src/policy/tier2_cel/evaluator.rs                                        138       0  100.00%
crates/a2a-gateway/src/policy/tier2_cel/compiler.rs                                          25       3  88.00%   61-63
crates/a2a-gateway/src/policy/tier2_cel/bundle.rs                                           120      26  78.33%   70-72, 74-76, 86, 92, 111-113, 123-127, 158, 162-164, 166-168, 171, 178, 181
crates/a2a-nats/src/nats/subjects/subscriptions/task_all_events.rs                            9       0  100.00%
crates/a2a-nats/src/nats/subjects/subscriptions/task_one_events.rs                           12       0  100.00%
crates/a2a-nats/src/nats/subjects/subscriptions/agent_all.rs                                 12       0  100.00%
crates/a2a-nats/src/nats/subjects/stream.rs                                                  50       0  100.00%
crates/trogon-std/src/dirs/fixed.rs                                                          32       0  100.00%
crates/trogon-std/src/dirs/system.rs                                                         39       0  100.00%
crates/acp-nats/src/client/session_update.rs                                                  2       0  100.00%
crates/acp-nats/src/client/request_permission.rs                                             40       0  100.00%
crates/acp-nats/src/client/test_support.rs                                                   17       0  100.00%
crates/acp-nats/src/client/rpc_reply.rs                                                     107      43  59.81%   45-47, 61-63, 80-120
crates/acp-nats/src/client/terminal_kill.rs                                                  41       0  100.00%
crates/acp-nats/src/client/mod.rs                                                           101       1  99.01%   56
crates/acp-nats/src/client/fs_write_text_file.rs                                             43       0  100.00%
crates/acp-nats/src/client/terminal_release.rs                                               35       0  100.00%
crates/acp-nats/src/client/terminal_output.rs                                                29       0  100.00%
crates/acp-nats/src/client/terminal_wait_for_exit.rs                                         55       0  100.00%
crates/acp-nats/src/client/fs_read_text_file.rs                                              27       0  100.00%
crates/acp-nats/src/client/terminal_create.rs                                                41       0  100.00%
crates/acp-nats/src/client/ext_session_prompt_response.rs                                    22       0  100.00%
crates/acp-nats/src/client/ext.rs                                                            57       0  100.00%
crates/a2a-nats-http/src/handlers/mod.rs                                                    185      12  93.51%   68, 88-91, 121, 155, 169-172, 185
crates/trogon-scheduler/src/telemetry/metrics.rs                                             27       0  100.00%
crates/trogon-scheduler/src/telemetry/trace.rs                                               20       0  100.00%
crates/ard-nats/src/store.rs                                                                  3       0  100.00%
crates/ard-nats/src/catalog_event.rs                                                         71       0  100.00%
crates/ard-nats/src/catalog_subject.rs                                                       14       3  78.57%   19-21
crates/ard-nats/src/catalog_index.rs                                                         82       2  97.56%   37, 104
crates/ard-nats/src/memory_catalog_store.rs                                                  32       0  100.00%
crates/a2a-bridge/src/auth.rs                                                                47      15  68.09%   78-99, 148
crates/a2a-bridge/src/main.rs                                                                 1       1  0.00%    199
crates/a2a-bridge/src/outbound.rs                                                            70       7  90.00%   126, 197-209
crates/a2a-bridge/src/identity.rs                                                            63       0  100.00%
crates/a2a-bridge/src/inbound.rs                                                            326      91  72.09%   115-119, 142-144, 191-231, 292-417, 469-471, 482, 580, 631-646, 687-692
crates/a2a-bridge/src/nats_transport_harness.rs                                              42       0  100.00%
crates/trogon-gateway/src/source/github/server.rs                                            50       0  100.00%
crates/trogon-gateway/src/source/github/config.rs                                             9       0  100.00%
crates/trogon-gateway/src/source/github/signature.rs                                          9       0  100.00%
crates/trogon-std/src/json.rs                                                                23       0  100.00%
crates/trogon-std/src/uuid.rs                                                                 3       0  100.00%
crates/trogon-std/src/duration.rs                                                            15       0  100.00%
crates/trogon-std/src/secret_string.rs                                                       13       0  100.00%
crates/trogon-std/src/signal.rs                                                              22      12  45.45%   6-11, 18-25, 34
crates/trogon-std/src/args.rs                                                                12       9  25.00%   11-28
crates/trogon-std/src/http.rs                                                                 8       0  100.00%
crates/a2a-gateway/src/policy/tier3_redaction/json_path.rs                                   84       5  94.05%   37, 49, 85, 104, 115
crates/a2a-gateway/src/policy/tier3_redaction/real_gate.rs                                  138      33  76.09%   18-26, 42-44, 67, 76-80, 119, 148-152, 155-159, 170-174, 192, 265
crates/a2a-gateway/src/policy/tier3_redaction/rewrite.rs                                     49       0  100.00%
crates/a2a-gateway/src/policy/tier3_redaction/context.rs                                     40       0  100.00%
crates/a2a-gateway/src/policy/tier3_redaction/gate.rs                                         3       0  100.00%
crates/a2a-gateway/src/policy/tier3_redaction/decision.rs                                    22       0  100.00%
crates/a2a-gateway/src/policy/tier3_redaction/manifest.rs                                    69       3  95.65%   112, 121, 132
crates/a2a-gateway/src/policy/tier3_redaction/mod.rs                                         33       2  93.94%   54, 58
crates/a2a-redaction/src/skill_manifest.rs                                                  310      14  95.48%   139, 169-171, 177, 184-188, 358-360, 452
crates/a2a-redaction/src/tier3_sentinel.rs                                                   12       0  100.00%
crates/a2a-redaction/src/wasm_bundle_path.rs                                                 18       0  100.00%
crates/a2a-redaction/src/a2a_method.rs                                                       41       0  100.00%
crates/a2a-redaction/src/skill_id.rs                                                         26       0  100.00%
crates/a2a-redaction/src/redactor.rs                                                         32       0  100.00%
crates/acp-nats/src/nats/subjects/commands/cancel.rs                                         15       0  100.00%
crates/acp-nats/src/nats/subjects/commands/resume.rs                                         15       0  100.00%
crates/acp-nats/src/nats/subjects/commands/close.rs                                          15       0  100.00%
crates/acp-nats/src/nats/subjects/commands/set_config_option.rs                              15       0  100.00%
crates/acp-nats/src/nats/subjects/commands/fork.rs                                           15       0  100.00%
crates/acp-nats/src/nats/subjects/commands/set_mode.rs                                       15       0  100.00%
crates/acp-nats/src/nats/subjects/commands/prompt.rs                                         15       0  100.00%
crates/acp-nats/src/nats/subjects/commands/load.rs                                           15       0  100.00%
crates/acp-nats/src/nats/subjects/commands/set_model.rs                                      15       0  100.00%
crates/trogon-scheduler/src/processor/execution/checkpoints/codec.rs                        318      17  94.65%   340-341, 361-362, 373-377, 405-406, 412-413, 442-443, 480, 485-487
crates/trogon-scheduler/src/processor/execution/checkpoints/store.rs                        145      16  88.97%   103, 121, 125, 132, 224-230, 279-283
crates/trogon-scheduler/src/processor/execution/checkpoints/failure.rs                       27       0  100.00%
crates/trogon-scheduler/src/processor/execution/checkpoints/record.rs                         6       0  100.00%
crates/trogon-scheduler/src/projections/schedules/mod.rs                                    175       3  98.29%   708-710
crates/trogon-scheduler/src/projections/schedules/storage.rs                                  3       0  100.00%
crates/trogon-scheduler/src/projections/schedules/twin.rs                                    53       0  100.00%
crates/a2a-redaction/src/wasm/engine.rs                                                      62      11  82.26%   46-48, 80-81, 93-95, 99-101
crates/a2a-redaction/src/wasm/mod.rs                                                        110       9  91.82%   132-134, 147-149, 162-164
crates/mcp-nats/src/telemetry/transport.rs                                                    6       0  100.00%
crates/a2a-nats/src/audit/envelope.rs                                                        57       0  100.00%
crates/a2a-nats/src/audit/emitter.rs                                                         58       0  100.00%
crates/a2a-nats/src/audit/task_lifecycle.rs                                                  17       0  100.00%
crates/a2a-nats-http/src/runtime.rs                                                           8       8  0.00%    60-130
crates/a2a-nats-http/src/router.rs                                                           55      13  76.36%   60-63, 69-79
crates/a2a-nats-http/src/main.rs                                                              1       0  100.00%
crates/a2a-nats-http/src/headers.rs                                                         129       1  99.22%   159
crates/a2a-nats-http/src/rest.rs                                                            316       8  97.47%   123-126, 282-285
crates/a2a-nats-http/src/sse.rs                                                              44      27  38.64%   15-51, 61-62, 65-68
crates/mcp-nats/src/nats/subjects/subscriptions/one_client.rs                                 9       0  100.00%
crates/mcp-nats/src/nats/subjects/subscriptions/one_server.rs                                 9       0  100.00%
crates/mcp-nats/src/nats/subjects/subscriptions/all_server.rs                                 6       0  100.00%
crates/mcp-nats/src/nats/subjects/subscriptions/all_client.rs                                 6       0  100.00%
crates/mcp-nats-stdio/src/main.rs                                                            36       0  100.00%
crates/mcp-nats-stdio/src/config.rs                                                          26       0  100.00%
crates/a2a-nats/src/nats/subjects/agents/push/get.rs                                         12       0  100.00%
crates/a2a-nats/src/nats/subjects/agents/push/delete.rs                                      15       0  100.00%
crates/a2a-nats/src/nats/subjects/agents/push/list.rs                                        15       0  100.00%
crates/a2a-nats/src/nats/subjects/agents/push/set.rs                                         12       0  100.00%
crates/a2a-gateway/src/policy/tier1_declarative/evaluator.rs                                158      13  91.77%   24-26, 147, 196-198, 268-272, 295
crates/a2a-gateway/src/policy/tier1_declarative/loader.rs                                    85       9  89.41%   95-97, 99-101, 126-128
crates/a2a-gateway/src/policy/tier1_declarative/bundle.rs                                    57       0  100.00%
crates/a2a-gateway/src/policy/tier1_declarative/time_predicate.rs                           118       2  98.31%   103, 125
crates/trogon-decider-guest-macros/src/lib.rs                                               121      16  86.78%   14-19, 95-98, 413-422, 426
crates/a2a-nats-stdio/src/wire.rs                                                            22       0  100.00%
crates/a2a-nats-stdio/src/runtime.rs                                                         21       0  100.00%
crates/a2a-nats-stdio/src/dispatch.rs                                                       207       8  96.14%   116, 119-121, 229, 232-234
crates/a2a-nats-stdio/src/io_loop.rs                                                         49       0  100.00%
crates/a2a-nats-stdio/src/main.rs                                                             1       0  100.00%
crates/a2a-nats/src/catalog/import_gate/allow_all.rs                                          2       0  100.00%
crates/a2a-nats/src/catalog/import_gate/principal.rs                                          9       0  100.00%
crates/jsonrpc-nats/src/transport.rs                                                         92       1  98.91%   106
crates/jsonrpc-nats/src/message.rs                                                           11       3  72.73%   37-39
crates/jsonrpc-nats/src/id.rs                                                                62      20  67.74%   44-61, 81-82, 84-85, 91-92, 98-99, 112
crates/mcp-nats/src/nats/subjects/client/list_roots.rs                                       12       0  100.00%
crates/mcp-nats/src/nats/subjects/client/progress.rs                                         12       0  100.00%
crates/mcp-nats/src/nats/subjects/client/ping.rs                                              9       0  100.00%
crates/mcp-nats/src/nats/subjects/client/create_elicitation.rs                               12       0  100.00%
crates/mcp-nats/src/nats/subjects/client/initialized.rs                                      12       0  100.00%
crates/mcp-nats/src/nats/subjects/client/create_message.rs                                   12       0  100.00%
crates/mcp-nats/src/nats/subjects/client/roots_list_changed.rs                               12       0  100.00%
crates/mcp-nats/src/nats/subjects/client/cancelled.rs                                        12       0  100.00%
crates/trogon-telemetry/src/service_name.rs                                                  17       0  100.00%
crates/trogon-telemetry/src/lib.rs                                                          135      23  82.96%   119, 124, 129, 139-140, 146-164, 200, 203, 206, 212
crates/trogon-telemetry/src/trace.rs                                                         15       1  93.33%   24
crates/trogon-telemetry/src/metric.rs                                                        18       1  94.44%   30
crates/trogon-telemetry/src/resource_attribute.rs                                            13       0  100.00%
crates/trogon-telemetry/src/log.rs                                                           36       0  100.00%
crates/trogon-gateway/src/source/microsoft_graph/client_state.rs                             14       0  100.00%
crates/trogon-gateway/src/source/microsoft_graph/server.rs                                   73       0  100.00%
crates/trogon-nats/src/mocks.rs                                                             224       0  100.00%
crates/trogon-nats/src/token.rs                                                               6       0  100.00%
crates/trogon-nats/src/auth.rs                                                               45       0  100.00%
crates/trogon-nats/src/nats_token.rs                                                         56       0  100.00%
crates/trogon-nats/src/connect.rs                                                            26       6  76.92%   42-47
crates/trogon-nats/src/messaging.rs                                                         168       2  98.81%   146, 156
crates/trogon-nats/src/server_info.rs                                                        21       3  85.71%   19-21
crates/trogon-nats/src/client.rs                                                             22      22  0.00%    50-86
crates/a2a-pack/src/agent_card_read.rs                                                       23       0  100.00%
crates/a2a-pack/src/resource_tuples.rs                                                      152       0  100.00%
crates/a2a-pack/src/agent_card_schema.rs                                                     40       0  100.00%
crates/trogon-scheduler/src/processor/execution/execution_schedules/mod.rs                   82       0  100.00%
crates/trogon-scheduler/src/queries/decode.rs                                                95       0  100.00%
crates/trogon-scheduler/src/queries/get_schedule.rs                                           3       0  100.00%
crates/trogon-scheduler/src/queries/schedule_id.rs                                           28       0  100.00%
crates/trogon-gateway/src/source/notion/verification_token.rs                                46       0  100.00%
crates/trogon-gateway/src/source/notion/notion_event_type.rs                                 20       0  100.00%
crates/trogon-gateway/src/source/notion/signature.rs                                          9       0  100.00%
crates/trogon-gateway/src/source/notion/notion_verification_token.rs                          9       0  100.00%
crates/trogon-gateway/src/source/notion/server.rs                                           120       4  96.67%   116-117, 136-137
crates/trogon-decider/src/act.rs                                                             62       0  100.00%
crates/trogon-decider/src/events.rs                                                          49       0  100.00%
crates/trogon-decider/src/lib.rs                                                              4       0  100.00%
crates/trogon-decider/src/decision.rs                                                        27       0  100.00%
crates/trogon-decider/src/testing.rs                                                        274       0  100.00%
crates/a2a-auth-callout/src/signing_key_source/env.rs                                        40       0  100.00%
crates/a2a-auth-callout/src/signing_key_source/file.rs                                       38       6  84.21%   40-42, 61-63
crates/a2a-auth-callout/src/signing_key_source/key_version.rs                                16       0  100.00%
crates/a2a-auth-callout/src/signing_key_source/static_source.rs                              25       0  100.00%
crates/a2a-auth-callout/src/signing_key_source/minting_material.rs                           18       0  100.00%
crates/a2a-auth-callout/src/signing_key_source/vault.rs                                       3       0  100.00%
crates/a2a-auth-callout/src/signing_key_source/loader.rs                                     23       0  100.00%
crates/a2a-auth-callout/src/signing_key_source/signing_key_handle.rs                         15       0  100.00%
crates/acp-nats/src/session_id.rs                                                            21       0  100.00%
crates/acp-nats/src/lib.rs                                                                   11       0  100.00%
crates/acp-nats/src/ext_method_name.rs                                                       18       0  100.00%
crates/acp-nats/src/acp_prefix.rs                                                            13       0  100.00%
crates/acp-nats/src/client_proxy.rs                                                          63       1  98.41%   55
crates/acp-nats/src/wire.rs                                                                  80      14  82.50%   38, 46-60, 103
crates/acp-nats/src/config.rs                                                                84       0  100.00%
crates/acp-nats/src/req_id.rs                                                                21       0  100.00%
crates/acp-nats/src/pending_prompt_waiters.rs                                                68       0  100.00%
crates/acp-nats/src/in_flight_slot_guard.rs                                                   7       0  100.00%
crates/acp-nats/src/error.rs                                                                 31       0  100.00%
crates/trogon-scheduler-domain/src/commands/domain/schedule.rs                              383       5  98.69%   326, 334, 349-351
crates/trogon-scheduler-domain/src/commands/domain/message.rs                               139       0  100.00%
crates/trogon-scheduler-domain/src/commands/domain/schedule_event_sampling_source.rs         11       0  100.00%
crates/trogon-scheduler-domain/src/commands/domain/schedule_event_status.rs                   6       0  100.00%
crates/trogon-scheduler-domain/src/commands/domain/schedule_id.rs                            37       0  100.00%
crates/trogon-scheduler-domain/src/commands/domain/schedule_event_schedule.rs                35       0  100.00%
crates/trogon-scheduler-domain/src/commands/domain/schedule_event_delivery.rs                14       0  100.00%
crates/trogon-gateway/src/source/standard_webhooks.rs                                       138       0  100.00%
crates/a2a-nats/src/jsonrpc.rs                                                               27       0  100.00%
crates/a2a-nats/src/context_id.rs                                                            22       0  100.00%
crates/a2a-nats/src/a2a_prefix.rs                                                            16       0  100.00%
crates/a2a-nats/src/req_id.rs                                                                21       0  100.00%
crates/a2a-nats/src/config.rs                                                               114       0  100.00%
crates/a2a-nats/src/agent_id.rs                                                              21       0  100.00%
crates/a2a-nats/src/gateway_ingress.rs                                                      146      21  85.62%   165-168, 172, 186, 194-200, 233, 238-244
crates/a2a-nats/src/task_id.rs                                                               22       0  100.00%
crates/a2a-nats/src/wire.rs                                                                  59       2  96.61%   85, 98
crates/trogon-scheduler/src/processor/execution/wakeup.rs                                    91       1  98.90%   127
crates/acp-nats/src/telemetry/metrics.rs                                                     22       0  100.00%
crates/trogon-scheduler/src/commands/schedule_next_occurrence.rs                             74       0  100.00%
crates/trogon-scheduler/src/commands/record_schedule_occurrence.rs                          113       1  99.12%   182
crates/trogon-scheduler/src/queries/read_model/schedule.rs                                   15       0  100.00%
crates/trogon-scheduler/src/queries/read_model/message.rs                                    77       0  100.00%
crates/trogon-std/src/env/in_memory.rs                                                       30       0  100.00%
crates/trogon-std/src/env/enumerate_env.rs                                                    6       0  100.00%
crates/trogon-std/src/env/system.rs                                                          12       0  100.00%
crates/trogon-std/src/env/read_env.rs                                                         3       0  100.00%
crates/trogon-std/src/time/system.rs                                                          9       0  100.00%
crates/trogon-std/src/time/mock.rs                                                           32       0  100.00%
crates/trogonai-proto/src/scheduler/schedules/codec.rs                                       57       0  100.00%
crates/ard-catalog/src/federation_mode.rs                                                     3       0  100.00%
crates/ard-catalog/src/media_type.rs                                                         20       0  100.00%
crates/ard-catalog/src/ard_storage_key.rs                                                    10       0  100.00%
crates/ard-catalog/src/catalog_host_wire.rs                                                   6       0  100.00%
crates/ard-catalog/src/registry_error_wire.rs                                                 8       0  100.00%
crates/ard-catalog/src/display_name.rs                                                       13       0  100.00%
crates/ard-catalog/src/catalog_host.rs                                                       26       0  100.00%
crates/ard-catalog/src/metadata.rs                                                           14       0  100.00%
crates/ard-catalog/src/catalog_manifest.rs                                                   44       0  100.00%
crates/ard-catalog/src/catalog_manifest_schema.rs                                            65       4  93.85%   109-110, 112-113
crates/ard-catalog/src/trust_manifest.rs                                                     45       1  97.78%   35
crates/ard-catalog/src/catalog_entry.rs                                                     107       0  100.00%
crates/ard-catalog/src/catalog_manifest_wire.rs                                               3       0  100.00%
crates/ard-catalog/src/ard_identifier.rs                                                     54       0  100.00%
crates/ard-catalog/src/catalog_entry_wire.rs                                                  3       0  100.00%
crates/ard-catalog/src/representative_queries.rs                                             18       0  100.00%
crates/ard-catalog/src/url_or_data.rs                                                        20       0  100.00%
crates/trogon-identity-types/src/act_chain.rs                                                13       0  100.00%
crates/a2a-nats/src/nats/subjects/agents/message_send.rs                                     15       0  100.00%
crates/a2a-nats/src/nats/subjects/agents/message_stream.rs                                   15       0  100.00%
crates/a2a-nats/src/nats/subjects/agents/card.rs                                             12       0  100.00%
crates/acp-nats-stdio/src/main.rs                                                            58      11  81.03%   67, 110-117, 123-125, 142
crates/acp-nats-stdio/src/config.rs                                                          15       0  100.00%
crates/trogon-decider-wit/src/lib.rs                                                         53       1  98.11%   4
crates/trogon-std/src/fs/mem.rs                                                              85       0  100.00%
crates/trogon-std/src/fs/system.rs                                                           15       0  100.00%
crates/a2a-auth-callout/src/wire/server_auth_request_envelope.rs                             68       1  98.53%   64
crates/a2a-auth-callout/src/wire/test_encode.rs                                              59       0  100.00%
crates/a2a-auth-callout/src/wire/nkey_seed.rs                                                20       0  100.00%
crates/a2a-auth-callout/src/wire/callout_auth_response_claims.rs                             54       3  94.44%   70-72
crates/a2a-auth-callout/src/wire/bridge_adapter.rs                                           73       0  100.00%
crates/a2a-auth-callout/src/wire/nkey_public.rs                                              83       3  96.39%   102, 118-119
crates/a2a-auth-callout/src/wire/wire_codec.rs                                               58       0  100.00%
crates/a2a-auth-callout/src/wire/xkey_public.rs                                              23       0  100.00%
crates/a2a-auth-callout/src/wire/server_auth_request_claims.rs                              100       4  96.00%   24-26, 127
crates/trogon-aauth-verify/src/jwks_cache.rs                                                 39       0  100.00%
crates/trogon-aauth-verify/src/challenge.rs                                                  45       0  100.00%
crates/trogon-aauth-verify/src/nats_pop.rs                                                  125       2  98.40%   269, 332
crates/trogon-aauth-verify/src/replay.rs                                                     26       0  100.00%
crates/trogon-aauth-verify/src/jwks.rs                                                       15       0  100.00%
crates/trogon-aauth-verify/src/time_source.rs                                                10       0  100.00%
crates/trogon-aauth-verify/src/token.rs                                                     148       1  99.32%   100
crates/trogon-aauth-verify/src/jkt.rs                                                        33       0  100.00%
crates/trogon-aauth-verify/src/test_support.rs                                               86       0  100.00%
crates/trogon-decider-runtime/src/event/stream_event.rs                                       8       0  100.00%
crates/trogon-decider-runtime/src/event/event_identity.rs                                     3       0  100.00%
crates/trogon-decider-runtime/src/event/event_id.rs                                          32       0  100.00%
crates/a2a-auth-callout/src/dispatcher.rs                                                    34      13  61.76%   83-112
crates/a2a-auth-callout/src/denial_claims.rs                                                 68       0  100.00%
crates/a2a-auth-callout/src/permissions.rs                                                   85       0  100.00%
crates/a2a-auth-callout/src/caller_jwt_header.rs                                             20       0  100.00%
crates/a2a-auth-callout/src/denial_category.rs                                               29       0  100.00%
crates/a2a-auth-callout/src/main.rs                                                           1       1  0.00%    226
crates/a2a-auth-callout/src/denial_reason.rs                                                 15       0  100.00%
crates/a2a-auth-callout/src/error.rs                                                          3       0  100.00%
crates/a2a-auth-callout/src/account_resolver.rs                                              31       0  100.00%
crates/a2a-auth-callout/src/subscriber.rs                                                    96      96  0.00%    27-178
crates/a2a-auth-callout/src/test_support.rs                                                  20      20  0.00%    16-36
crates/acp-nats/src/agent/authenticate.rs                                                     5       0  100.00%
crates/acp-nats/src/agent/close_session.rs                                                   16       0  100.00%
crates/acp-nats/src/agent/ext_method.rs                                                      12       0  100.00%
crates/acp-nats/src/agent/test_support.rs                                                   194       0  100.00%
crates/acp-nats/src/agent/fork_session.rs                                                    16       0  100.00%
crates/acp-nats/src/agent/ext_notification.rs                                                12       0  100.00%
crates/acp-nats/src/agent/resume_session.rs                                                  16       0  100.00%
crates/acp-nats/src/agent/prompt.rs                                                         156       7  95.51%   201-207
crates/acp-nats/src/agent/list_sessions.rs                                                    5       0  100.00%
crates/acp-nats/src/agent/cancel.rs                                                          12       0  100.00%
crates/acp-nats/src/agent/bridge.rs                                                         124       4  96.77%   108-111
crates/acp-nats/src/agent/load_session.rs                                                    16       0  100.00%
crates/acp-nats/src/agent/rpc_call.rs                                                        23       0  100.00%
crates/acp-nats/src/agent/js_request.rs                                                      73       6  91.78%   84-89
crates/acp-nats/src/agent/set_session_config_option.rs                                       16       0  100.00%
crates/acp-nats/src/agent/initialize.rs                                                       6       0  100.00%
crates/acp-nats/src/agent/logout.rs                                                           5       0  100.00%
crates/acp-nats/src/agent/new_session.rs                                                      5       0  100.00%
crates/acp-nats/src/agent/set_session_mode.rs                                                16       0  100.00%
crates/acp-nats/src/agent/set_session_model.rs                                               16       0  100.00%
crates/acp-nats/src/nats/subjects/stream.rs                                                  56       0  100.00%
crates/a2a-nats-server/src/runtime.rs                                                        17       0  100.00%
crates/a2a-nats-server/src/main.rs                                                            1       0  100.00%
crates/a2a-nats-server/src/noop_handler.rs                                                   22       0  100.00%
crates/acp-nats-agent/src/connection.rs                                                     468       1  99.79%   704
crates/ard-registry/src/registry.rs                                                         134       3  97.76%   78, 174, 183
crates/ard-registry/src/router.rs                                                            33       0  100.00%
crates/ard-registry/src/search_request.rs                                                    32       1  96.88%   43
crates/ard-registry/src/facet_field.rs                                                       13       0  100.00%
crates/ard-registry/src/extract.rs                                                           12       0  100.00%
crates/ard-registry/src/page_token.rs                                                        14       0  100.00%
crates/ard-registry/src/registry_config.rs                                                   16       0  100.00%
crates/ard-registry/src/search_filters.rs                                                    28       0  100.00%
crates/ard-registry/src/lexical_rank.rs                                                      55       2  96.36%   15, 64
crates/ard-registry/src/http_error.rs                                                        17       0  100.00%
crates/ard-registry/src/list_agents_request.rs                                               21       0  100.00%
crates/ard-registry/src/filters.rs                                                           31       0  100.00%
crates/ard-registry/src/source_url.rs                                                        26       1  96.15%   30
crates/ard-registry/src/explore_request.rs                                                   30       0  100.00%
crates/trogon-decider-nats/src/stream_store.rs                                              267      18  93.26%   70-72, 245, 273-274, 277, 293-297, 464-465, 506, 519-523
crates/trogon-decider-nats/src/store.rs                                                      73      45  38.36%   50-54, 101-167
crates/trogon-decider-nats/src/snapshot_store.rs                                            446      27  93.95%   208-210, 248-250, 361-367, 449, 585, 590, 686-688, 694-696, 730-731, 741-742, 761, 789-790
crates/trogon-gateway/src/source/sentry/server.rs                                            69       0  100.00%
crates/trogon-gateway/src/source/sentry/signature.rs                                          6       0  100.00%
crates/trogon-gateway/src/source/sentry/sentry_client_secret.rs                               9       0  100.00%
crates/a2a-nats/src/server/message_stream.rs                                                 56       6  89.29%   155-157, 165-167
crates/a2a-nats/src/server/tasks_cancel.rs                                                   12       0  100.00%
crates/a2a-nats/src/server/dispatch.rs                                                       33       0  100.00%
crates/a2a-nats/src/server/push_get.rs                                                       12       0  100.00%
crates/a2a-nats/src/server/push_set.rs                                                       12       0  100.00%
crates/a2a-nats/src/server/message_send.rs                                                   15       0  100.00%
crates/a2a-nats/src/server/wire.rs                                                           34       4  88.24%   21-23, 30
crates/a2a-nats/src/server/push_delete.rs                                                    12       0  100.00%
crates/a2a-nats/src/server/tasks_resubscribe.rs                                              12       0  100.00%
crates/a2a-nats/src/server/agent_card.rs                                                     16       0  100.00%
crates/a2a-nats/src/server/handler.rs                                                        39       0  100.00%
crates/a2a-nats/src/server/push_list.rs                                                      12       0  100.00%
crates/a2a-nats/src/server/tasks_list.rs                                                     12       0  100.00%
crates/a2a-nats/src/server/tasks_get.rs                                                      12       0  100.00%
crates/a2a-nats/src/server/test_support.rs                                                   81      25  69.14%   134-159
crates/a2a-nats/src/server/bridge.rs                                                         65       0  100.00%
crates/trogon-decider-wasm-runtime/src/opaque_snapshot.rs                                    18       0  100.00%
crates/trogon-decider-wasm-runtime/src/domain_error_detail.rs                                 6       0  100.00%
crates/trogon-decider-wasm-runtime/src/engine.rs                                             43       0  100.00%
crates/trogon-decider-wasm-runtime/src/module_version.rs                                     34       0  100.00%
crates/trogon-decider-wasm-runtime/src/registry.rs                                           28       0  100.00%
crates/trogon-decider-wasm-runtime/src/command_spec.rs                                       12       0  100.00%
crates/trogon-decider-wasm-runtime/src/snapshot_id.rs                                        15       0  100.00%
crates/trogon-decider-wasm-runtime/src/module.rs                                             64       0  100.00%
crates/trogon-decider-wasm-runtime/src/command_type.rs                                       31       0  100.00%
crates/trogon-decider-wasm-runtime/src/test_fixture.rs                                        7       0  100.00%
crates/trogon-decider-wasm-runtime/src/module_name.rs                                        34       0  100.00%
crates/trogon-decider-wasm-runtime/src/execution.rs                                         363       0  100.00%
crates/a2a-gateway/src/gw_ingress_stream.rs                                                 144       4  97.22%   319-321, 536
crates/a2a-gateway/src/push_dlq_mirror.rs                                                   133      16  87.97%   162-166, 218, 223-226, 236, 261, 382-389
crates/a2a-gateway/src/aauth.rs                                                             199       5  97.49%   253-256, 277
crates/a2a-gateway/src/main.rs                                                                1       0  100.00%
crates/a2a-gateway/src/runtime.rs                                                            11       0  100.00%
crates/a2a-gateway/src/jwt_caller_identity.rs                                               151       4  97.35%   165-169, 182-186
crates/a2a-gateway/src/agent_card_surface.rs                                                  3       0  100.00%
crates/a2a-gateway/src/config.rs                                                             57       0  100.00%
crates/a2a-gateway/src/gw_pull_backpressure.rs                                              209       3  98.56%   504, 704, 717
crates/a2a-gateway/src/audit_ingress.rs                                                     110       0  100.00%
crates/a2a-gateway/src/lib.rs                                                                 3       0  100.00%
crates/a2a-gateway/src/runtime/audit_publish.rs                                              16       0  100.00%
crates/a2a-gateway/src/runtime/env.rs                                                        55       0  100.00%
crates/a2a-gateway/src/runtime/policy_stack.rs                                               78      31  60.26%   84, 91, 103-112, 119-120, 135-145, 154-170, 175
crates/a2a-gateway/src/runtime/reply.rs                                                       5       0  100.00%
crates/a2a-gateway/src/runtime/streaming.rs                                                  35       0  100.00%
crates/a2a-gateway/src/runtime/tier1.rs                                                      30       0  100.00%
crates/a2a-gateway/src/runtime/tier1_denial.rs                                               34       1  97.06%   60
crates/mcp-nats/src/wire.rs                                                                  18       0  100.00%
crates/mcp-nats/src/server.rs                                                                12       0  100.00%
crates/mcp-nats/src/transport.rs                                                            263      10  96.20%   244, 256-258, 376-379, 388-389
crates/mcp-nats/src/mcp_prefix.rs                                                            15       0  100.00%
crates/mcp-nats/src/mcp_peer_id.rs                                                           15       0  100.00%
crates/mcp-nats/src/client.rs                                                                12       0  100.00%
crates/mcp-nats/src/config.rs                                                                59       0  100.00%
crates/mcp-nats/src/jsonrpc.rs                                                                5       0  100.00%
crates/a2a-nats/src/catalog/import_gate/spicedb/mod.rs                                      108       0  100.00%
crates/a2a-nats/src/catalog/import_gate/spicedb/config.rs                                    70       0  100.00%
crates/a2a-nats/src/catalog/import_gate/spicedb/cache.rs                                     36       0  100.00%
crates/a2a-nats/src/catalog/import_gate/spicedb/client.rs                                    29      15  48.28%   43-69, 97-99, 108-117
TOTAL                                                                                     33234    1593  95.21%

Diff against main

Filename                                                         Stmts    Miss  Cover
-------------------------------------------------------------  -------  ------  --------
crates/trogon-decider-wit/src/lib.rs                                 0      -1  +1.89%
crates/trogon-decider-wasm-runtime/src/opaque_snapshot.rs          +18       0  +100.00%
crates/trogon-decider-wasm-runtime/src/domain_error_detail.rs       +6       0  +100.00%
crates/trogon-decider-wasm-runtime/src/engine.rs                   +43       0  +100.00%
crates/trogon-decider-wasm-runtime/src/module_version.rs           +34       0  +100.00%
crates/trogon-decider-wasm-runtime/src/registry.rs                 +28       0  +100.00%
crates/trogon-decider-wasm-runtime/src/command_spec.rs             +12       0  +100.00%
crates/trogon-decider-wasm-runtime/src/snapshot_id.rs              +15       0  +100.00%
crates/trogon-decider-wasm-runtime/src/module.rs                   +64       0  +100.00%
crates/trogon-decider-wasm-runtime/src/command_type.rs             +31       0  +100.00%
crates/trogon-decider-wasm-runtime/src/test_fixture.rs              +7       0  +100.00%
crates/trogon-decider-wasm-runtime/src/module_name.rs              +34       0  +100.00%
crates/trogon-decider-wasm-runtime/src/execution.rs               +363       0  +100.00%
TOTAL                                                             +655      -1  +0.10%

Results for commit: 6444b37

Minimum allowed coverage is 95%

♻️ This comment has been updated with latest results

yordis added 3 commits July 2, 2026 21:30
Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit cec9714. Configure here.

Comment thread rsworkspace/crates/trogon-decider-wasm-runtime/src/execution.rs
Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
@yordis yordis merged commit 345a56a into main Jul 3, 2026
8 checks passed
@yordis yordis deleted the yordis/feat-wasm-decider-runtime branch July 3, 2026 04:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant