Skip to content

feat(mcp): adopt canonical MCP JSON-RPC bodies over NATS - #514

Merged
yordis merged 16 commits into
mainfrom
yordis/mcp-2026-07-28-upgrade
Jul 30, 2026
Merged

feat(mcp): adopt canonical MCP JSON-RPC bodies over NATS#514
yordis merged 16 commits into
mainfrom
yordis/mcp-2026-07-28-upgrade

Conversation

@yordis

@yordis yordis commented Jul 29, 2026

Copy link
Copy Markdown
Member
  • MCP's 2026-07-28 transport model requires custom transports to preserve the JSON-RPC message format and treat the body as the source of truth, which ADR#0011's content-mode encoding cannot satisfy.
  • Making the NATS body canonical JSON-RPC lets MCP messages traverse generic JSON-RPC infrastructure and custom transports without a private reconstruction step, while the subject and Mcp-* headers stay derived projections that must agree with the body.
  • Scoped to MCP only so ACP and A2A keep the existing content-mode codec until their own migration is evaluated.

yordis added 2 commits July 28, 2026 17:20
…astructure

Squashes the telegram branch history into one commit so it lands as a single reviewable unit rather than 113 incremental commits accumulated during development.

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
The MCP 2026-07-28 transport model requires custom transports to
preserve the JSON-RPC message format and treat the body as the source
of truth, which the prior content-mode encoding cannot satisfy. Making
the NATS body canonical JSON-RPC lets MCP messages pass through generic
JSON-RPC infrastructure without a private reconstruction step.

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

cursor Bot commented Jul 29, 2026

Copy link
Copy Markdown

PR Summary

High Risk
MCP NATS wire is not backward-compatible with content-mode publishers and changes HTTP proxy header forwarding; coordinated rollout is required.

Overview
MCP on NATS now carries full JSON-RPC 2.0 in the message body (per draft ADR#0041), instead of ADR#0011 content-mode where control fields lived in headers. jsonrpc-nats gains explicit canonical encode/decode with subject/body method mismatch checks; legacy content-mode stays for ACP/A2A.

The HTTP→NATS proxy is reworked on rmcp 3 (ServerHandler): it restores params._meta, forwards only allowlisted MCP-Protocol-Version / Mcp-* routing headers (not auth/cookies/session), and maps newer MCP flows (discover, tasks, subscriptions). NATS subjects add discover/tasks/subscription routes; unknown methods use a reversible custom.<base64> suffix.

Smaller changes: mise rust-lint mirrors CI; crate license enforcement in GitHub Actions uses Python tomllib instead of Node line parsing.

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

@coderabbitai

coderabbitai Bot commented Jul 29, 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: 24 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 Plus

Run ID: 385f8c4f-72e8-425b-9c89-353050691b32

📥 Commits

Reviewing files that changed from the base of the PR and between 7529a0c and fda0a8b.

📒 Files selected for processing (2)
  • .config/mise/tasks/rust-lint
  • .github/actions/enforce-cargo-license/action.yml

Walkthrough

This PR introduces canonical JSON-RPC bodies over NATS, typed MCP transport headers, expanded MCP method and subject routing, proxy metadata restoration, updated server-info handling, comprehensive transport tests, workspace dependency changes, ADR documentation, and a local Rust lint task.

Changes

Canonical MCP transport

Layer / File(s) Summary
Canonical JSON-RPC codec
rsworkspace/crates/platform/jsonrpc-nats/src/codec/*, src/error.rs, src/tests/*
Adds canonical body encoding/decoding, envelope and projection validation, new codec errors, header merging, and round-trip/property tests.
MCP NATS routing and metadata
rsworkspace/crates/mcp/mcp-nats/src/*, rsworkspace/crates/platform/trogon-nats/src/mocks.rs, rsworkspace/crates/mcp/mcp-nats/tests/*
Propagates allowlisted transport headers, supports custom method suffixes, updates MCP subjects and parsing tables, and expands routing coverage.
MCP proxy metadata and runtime handling
rsworkspace/crates/mcp/mcp-nats-server/src/runtime.*
Uses shared server information, restores request metadata and transport headers, forwards methods through ServerHandler, and tests HTTP-to-NATS preservation.
Workspace, documentation, and validation setup
rsworkspace/Cargo.toml, docs/adr/*, .config/mise/tasks/rust-lint, rsworkspace/crates/mcp/mcp-nats-server/Cargo.toml
Updates workspace dependencies, adds ADR references, and introduces a CI-aligned local Rust lint runner.

Estimated code review effort: 5 (Critical) | ~120 minutes

Possibly related PRs

Suggested labels: rust:coverage-baseline-reset

Suggested reviewers: copilot

Poem

I’m a rabbit hopping through NATS,
With canonical JSON in my casts.
Headers neatly aligned,
Old routes redesigned—
“Thump!” say the tests as they pass.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 52.24% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely summarizes the main change: adopting canonical MCP JSON-RPC bodies over NATS.
Description check ✅ Passed The description matches the changeset and objectives, describing the canonical MCP-over-NATS migration and its MCP-only scope.
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 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch yordis/mcp-2026-07-28-upgrade

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.

Comment thread rsworkspace/crates/mcp/mcp-nats-server/src/runtime.rs
Comment thread rsworkspace/crates/platform/jsonrpc-nats/src/codec/canonical.rs
Paramless lifecycle messages such as ping and notifications/initialized must survive a Message-based encode/decode cycle; the codec was rejecting them.

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
@yordis
yordis changed the base branch from telegram to main July 29, 2026 20:13
…-upgrade

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

# Conflicts:
#	rsworkspace/Cargo.lock
Copilot AI review requested due to automatic review settings July 29, 2026 20:16

Copilot AI 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.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

Comment thread rsworkspace/crates/chat/chat-bridge-telegram/src/pipeline.rs Outdated

@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: 16

🧹 Nitpick comments (4)
rsworkspace/crates/mcp/mcp-nats/src/transport.rs (1)

332-359: 🔒 Security & Privacy | 🔵 Trivial | 💤 Low value

Custom suffix decoding accepts base64 that decodes to a method containing subject separators or an empty-ish string.

method_from_custom_suffix returns any UTF-8 decode result, so a crafted subject can yield methods like a.b or control characters. It's currently safe because the canonical codec compares the projection against the body method, but a cheap guard keeps the invariant local (reject decoded methods that don't re-encode to the same suffix).

♻️ Optional hardening
-    String::from_utf8(bytes).map_err(|_| NatsTransportError::InvalidCustomMethodSuffix {
-        suffix: suffix.to_string(),
-    })
+    let method = String::from_utf8(bytes).map_err(|_| NatsTransportError::InvalidCustomMethodSuffix {
+        suffix: suffix.to_string(),
+    })?;
+    if custom_method_suffix(&method) != suffix {
+        return Err(NatsTransportError::InvalidCustomMethodSuffix {
+            suffix: suffix.to_string(),
+        });
+    }
+    Ok(method)
🤖 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/mcp/mcp-nats/src/transport.rs` around lines 332 - 359,
Update method_from_custom_suffix to validate the decoded method against the
canonical custom suffix representation before returning it. Re-encode the
decoded UTF-8 method with custom_method_suffix and reject the result with
InvalidCustomMethodSuffix when it differs from the input suffix, covering
separator-containing, control-character, and empty-ish decoded values while
preserving valid round trips.
rsworkspace/crates/mcp/mcp-nats-server/src/runtime/tests.rs (1)

239-245: 🚀 Performance & Scalability | 🔵 Trivial | 💤 Low value

Busy-wait burns CPU; prefer a short sleep in the poll loop.

yield_now() spins the runtime for up to a second on failure.

♻️ Sleep between polls
-            tokio::task::yield_now().await;
+            tokio::time::sleep(std::time::Duration::from_millis(5)).await;
🤖 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/mcp/mcp-nats-server/src/runtime/tests.rs` around lines 239
- 245, Replace the tokio::task::yield_now() poll in the published_headers wait
loop with a short asynchronous sleep, while keeping the existing timeout and
condition unchanged. This should avoid continuously spinning the runtime during
the wait.
rsworkspace/crates/platform/jsonrpc-nats/src/tests/prop_tests.rs (1)

59-67: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Filter excludes the paramless case this PR specifically fixes.

encode_canonical drops "params": null so paramless requests/notifications round-trip, but is_canonical_message rejects them, so the property test never exercises that path. Allowing Value::Null params keeps the filter aligned with the codec contract.

♻️ Widen the canonical filter
         Message::Request { params, .. } | Message::Notification { params, .. } => {
-            params.is_object() || params.is_array()
+            params.is_object() || params.is_array() || params.is_null()
         }
🤖 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/platform/jsonrpc-nats/src/tests/prop_tests.rs` around
lines 59 - 67, Update is_canonical_message for Message::Request and
Message::Notification so params.is_null() is accepted alongside object and array
values. Keep the existing canonical checks for success IDs and error messages
unchanged, ensuring property tests include paramless messages handled by
encode_canonical.
rsworkspace/crates/chat/trogon-chat/src/agent_port.rs (1)

45-55: 📐 Maintainability & Code Quality | 🔵 Trivial | 🏗️ Heavy lift

Split this into operation-specific traits.

AgentPort combines session creation, prompting, and cancellation. Define one trait per operation and compose them where a caller needs the full capability set.

As per coding guidelines, “Prefer one trait per operation instead of a single trait containing multiple operations.”

🤖 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/chat/trogon-chat/src/agent_port.rs` around lines 45 - 55,
Split AgentPort into separate operation-specific traits for session creation,
prompting, and cancellation, preserving each method’s signature and associated
error requirements. Define a composed capability using trait bounds or a
supertrait for callers needing all three operations, and update references to
AgentPort to use the appropriate individual or combined trait.

Source: Coding guidelines

🤖 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 `@docs/adr/0041-canonical-mcp-jsonrpc-bodies-over-nats.md`:
- Line 82: Update the superseded ADR reference in the decision text to use the
existing relative Markdown link for ADR#0011, while preserving the “for MCP
only” scope and the following ACP/A2A statement.

In `@docs/architecture/multi-channel-agent-routing.md`:
- Line 20: Update every fenced diagram in this document to specify the text
language after the opening fence, including the referenced fences, so all
diagrams satisfy markdownlint MD040 while preserving their contents.

In `@rsworkspace/crates/chat/chat-bridge-telegram/Cargo.toml`:
- Around line 27-28: Replace the testcontainers-modules dev-dependency in the
Cargo.toml [dev-dependencies] section with the trogon-nats dependency configured
with its test-support feature, so NATS tests use the shared helpers and mocks.

In `@rsworkspace/crates/chat/chat-bridge-telegram/src/acp_port.rs`:
- Around line 76-81: Update acp_port::prompt to preserve event.attachments when
constructing PromptRequest: convert each inbound attachment into the appropriate
ACP content/resource block and append those blocks alongside the existing text
block. Also update Telegram event normalization so attachments are populated
from the inbound message instead of always using Vec::new().

In `@rsworkspace/crates/chat/chat-bridge-telegram/src/config.rs`:
- Around line 26-61: Define typed BridgeConfigError variants in config.rs and
return them from from_env for missing variables, invalid Telegram user IDs, and
invalid ACP prefixes instead of dynamic or formatted errors; in main.rs lines
53-58, add a runtime error variant retaining both the stream name and JetStream
source error, and in lines 135-138, retain the ACP initialization source error
in its own runtime variant, formatting errors only at the outer logging
boundary.
- Around line 6-22: Update BridgeConfig and its from_env constructor to replace
the raw String fields chat_prefix, inbound_stream, bot_account, and agent_id
with separate domain-specific value objects. Define independent validation and
construction for each value object, then parse and validate them once in
from_env before assembling BridgeConfig. Keep bot_token and unrelated
configuration fields unchanged.

In `@rsworkspace/crates/chat/chat-bridge-telegram/src/main.rs`:
- Around line 65-68: Update the acknowledgment flow in handle_message so
long-running self.port.prompt(...) turns do not remain unacked past ack_wait and
trigger JetStream redelivery. Prefer an in-progress acknowledgment heartbeat
during the prompt, preserving the final acknowledgment after Telegram sends;
alternatively, deduplicate prompt processing by message_ref so any redelivery
cannot execute the turn twice.

In `@rsworkspace/crates/chat/chat-bridge-telegram/src/outbound.rs`:
- Around line 9-12: The Outbound trait currently erases Telegram SDK error and
response types; replace it with separate typing and text-send operation traits
using associated error and success types that preserve teloxide Requester
classifications and response values. Update TelegramOutbound and its
callers/implementations to pass through the underlying SDK results without
anyhow conversion, while retaining the existing chat_id and text inputs.

In `@rsworkspace/crates/chat/chat-bridge-telegram/src/pipeline_tests.rs`:
- Around line 10-35: Replace the local NatsServer implementation and direct
async_nats::connect setup in the Telegram pipeline tests with
trogon_nats::test_support::JetStreamTestServer, enabling the trogon-nats
test-support feature in the crate configuration. Update the affected test setup
and connection usage, including the code around the referenced later lines, to
use the helper’s provided server URL and lifecycle management.

In `@rsworkspace/crates/chat/chat-bridge-telegram/src/pipeline.rs`:
- Around line 27-29: Update the pipeline flow around ack and the
message-processing logic (including the affected 82–131 range) to persist
event-level idempotency state keyed by message_ref, propagate that idempotency
key to the agent, and prevent replay after send or acknowledgment failures.
Replace broad prompt-error retries with retries only for a typed error proving
the first prompt did not execute, and introduce/use a PipelineError enum that
preserves underlying source errors rather than formatting them into anyhow
strings; keep JetStream acknowledgment behavior consistent with the persisted
state.

In `@rsworkspace/crates/chat/chat-bridge-telegram/src/render.rs`:
- Around line 61-66: Update the buffered-output handling around the session
buffer entry to enforce a maximum size for streamed text. When appending would
exceed the limit, truncate or cancel the buffered output and record an explicit
user-visible failure, ensuring the session cannot continue growing the buffer
indefinitely.

In `@rsworkspace/crates/chat/trogon-chat/Cargo.toml`:
- Line 10: Replace the direct async-nats dependency in
rsworkspace/crates/chat/trogon-chat/Cargo.toml and refactor the chat store
construction and types in rsworkspace/crates/chat/trogon-chat/src/store.rs to
use trogon-nats’s NatsJetStreamClient and mock abstractions for JetStream/KV
behavior. In rsworkspace/crates/mcp/mcp-nats-server/Cargo.toml, remove the
async-nats dev-dependency; retain direct async-nats message/header imports in
tests while using trogon-nats mocks for client behavior.

In `@rsworkspace/crates/chat/trogon-chat/src/endpoint.rs`:
- Around line 21-42: Remove derived Deserialize from Endpoint, PrincipalId,
AgentSessionId, AgentId, ConversationId, ConversationRecord, and
InboundChatEvent at rsworkspace/crates/chat/trogon-chat/src/endpoint.rs:21-42
and :72-81, agent_port.rs:9-15, conversation.rs:7-36, event.rs:26-36, and
store.rs:71-104; introduce or reuse corresponding *Wire/separate record types
for persisted and inbound payloads, then convert them through the existing
constructors or validation paths so unsafe endpoint tokens and arbitrary
identifiers cannot enter domain types.

In `@rsworkspace/crates/chat/trogon-chat/src/store.rs`:
- Around line 117-123: The independent writes in create_conversation and
link_endpoint must become recoverable and idempotent: ensure retries reconcile
or reuse the already-created conversation/principal rather than generating or
binding a different record when the second write fails. Update both methods to
use a transactional, single-record, CAS/reread-on-failure, or equivalent
reconciliation pattern covering conversations/<id> with bindings and
principals/<principal> with endpoints.
- Around line 44-55: Update ensure_bucket so only the JetStream not-found error
from get_key_value triggers bucket creation, using the same source check as
trogon-decider-nats. Propagate communication, authorization, and other lookup
failures directly instead of mapping them to ChatStoreError::CreateBucket; keep
the existing creation path for the absent-bucket case.

In `@rsworkspace/crates/mcp/mcp-nats-server/src/runtime.rs`:
- Around line 189-194: Update unexpected_result so the client-facing ErrorData
message includes only the method and ServerResult variant name, not the full
{result:?} payload; log the complete debug representation locally for
diagnostics if existing logging facilities are available.

---

Nitpick comments:
In `@rsworkspace/crates/chat/trogon-chat/src/agent_port.rs`:
- Around line 45-55: Split AgentPort into separate operation-specific traits for
session creation, prompting, and cancellation, preserving each method’s
signature and associated error requirements. Define a composed capability using
trait bounds or a supertrait for callers needing all three operations, and
update references to AgentPort to use the appropriate individual or combined
trait.

In `@rsworkspace/crates/mcp/mcp-nats-server/src/runtime/tests.rs`:
- Around line 239-245: Replace the tokio::task::yield_now() poll in the
published_headers wait loop with a short asynchronous sleep, while keeping the
existing timeout and condition unchanged. This should avoid continuously
spinning the runtime during the wait.

In `@rsworkspace/crates/mcp/mcp-nats/src/transport.rs`:
- Around line 332-359: Update method_from_custom_suffix to validate the decoded
method against the canonical custom suffix representation before returning it.
Re-encode the decoded UTF-8 method with custom_method_suffix and reject the
result with InvalidCustomMethodSuffix when it differs from the input suffix,
covering separator-containing, control-character, and empty-ish decoded values
while preserving valid round trips.

In `@rsworkspace/crates/platform/jsonrpc-nats/src/tests/prop_tests.rs`:
- Around line 59-67: Update is_canonical_message for Message::Request and
Message::Notification so params.is_null() is accepted alongside object and array
values. Keep the existing canonical checks for success IDs and error messages
unchanged, ensuring property tests include paramless messages handled by
encode_canonical.
🪄 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 Plus

Run ID: 07160b1b-665c-44a7-b691-5a9e1979fe74

📥 Commits

Reviewing files that changed from the base of the PR and between 058b8be and fa361b0.

⛔ Files ignored due to path filters (1)
  • rsworkspace/Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (55)
  • .github/canary-container-services.json
  • .github/workflows/canary-container-images.yml
  • .gitignore
  • devops/docker/compose/compose.yml
  • devops/docker/compose/services/chat-bridge-telegram/Dockerfile
  • docs/adr/0041-canonical-mcp-jsonrpc-bodies-over-nats.md
  • docs/adr/index.md
  • docs/architecture/multi-channel-agent-routing.md
  • rsworkspace/Cargo.toml
  • rsworkspace/crates/chat/chat-bridge-telegram/Cargo.toml
  • rsworkspace/crates/chat/chat-bridge-telegram/src/acp_port.rs
  • rsworkspace/crates/chat/chat-bridge-telegram/src/config.rs
  • rsworkspace/crates/chat/chat-bridge-telegram/src/main.rs
  • rsworkspace/crates/chat/chat-bridge-telegram/src/outbound.rs
  • rsworkspace/crates/chat/chat-bridge-telegram/src/parse.rs
  • rsworkspace/crates/chat/chat-bridge-telegram/src/pipeline.rs
  • rsworkspace/crates/chat/chat-bridge-telegram/src/pipeline_tests.rs
  • rsworkspace/crates/chat/chat-bridge-telegram/src/render.rs
  • rsworkspace/crates/chat/trogon-chat/Cargo.toml
  • rsworkspace/crates/chat/trogon-chat/src/agent_port.rs
  • rsworkspace/crates/chat/trogon-chat/src/conversation.rs
  • rsworkspace/crates/chat/trogon-chat/src/endpoint.rs
  • rsworkspace/crates/chat/trogon-chat/src/event.rs
  • rsworkspace/crates/chat/trogon-chat/src/lib.rs
  • rsworkspace/crates/chat/trogon-chat/src/render.rs
  • rsworkspace/crates/chat/trogon-chat/src/store.rs
  • rsworkspace/crates/mcp/mcp-nats-server/Cargo.toml
  • rsworkspace/crates/mcp/mcp-nats-server/src/runtime.rs
  • rsworkspace/crates/mcp/mcp-nats-server/src/runtime/tests.rs
  • rsworkspace/crates/mcp/mcp-nats/Cargo.toml
  • rsworkspace/crates/mcp/mcp-nats/src/lib.rs
  • rsworkspace/crates/mcp/mcp-nats/src/mcp_transport_headers.rs
  • rsworkspace/crates/mcp/mcp-nats/src/nats/parsing.rs
  • rsworkspace/crates/mcp/mcp-nats/src/nats/parsing/tests.rs
  • rsworkspace/crates/mcp/mcp-nats/src/nats/subjects/server/discover.rs
  • rsworkspace/crates/mcp/mcp-nats/src/nats/subjects/server/mod.rs
  • rsworkspace/crates/mcp/mcp-nats/src/nats/subjects/server/subscriptions_acknowledged.rs
  • rsworkspace/crates/mcp/mcp-nats/src/nats/subjects/server/subscriptions_listen.rs
  • rsworkspace/crates/mcp/mcp-nats/src/nats/subjects/server/task_status.rs
  • rsworkspace/crates/mcp/mcp-nats/src/nats/subjects/server/update_task.rs
  • rsworkspace/crates/mcp/mcp-nats/src/nats/subjects/tests.rs
  • rsworkspace/crates/mcp/mcp-nats/src/transport.rs
  • rsworkspace/crates/mcp/mcp-nats/src/transport/tests.rs
  • rsworkspace/crates/mcp/mcp-nats/src/wire.rs
  • rsworkspace/crates/mcp/mcp-nats/src/wire/tests.rs
  • rsworkspace/crates/mcp/mcp-nats/tests/transport.rs
  • rsworkspace/crates/platform/jsonrpc-nats/src/codec/canonical.rs
  • rsworkspace/crates/platform/jsonrpc-nats/src/codec/mod.rs
  • rsworkspace/crates/platform/jsonrpc-nats/src/error.rs
  • rsworkspace/crates/platform/jsonrpc-nats/src/lib.rs
  • rsworkspace/crates/platform/jsonrpc-nats/src/tests.rs
  • rsworkspace/crates/platform/jsonrpc-nats/src/tests/prop_tests.rs
  • rsworkspace/crates/platform/jsonrpc-nats/src/transport.rs
  • rsworkspace/crates/platform/trogon-nats/src/mocks.rs
  • rsworkspace/crates/platform/trogon-telemetry/src/service_name.rs

Comment thread docs/adr/0041-canonical-mcp-jsonrpc-bodies-over-nats.md Outdated
Comment thread docs/architecture/multi-channel-agent-routing.md Outdated
Comment thread rsworkspace/crates/chat/chat-bridge-telegram/Cargo.toml Outdated
Comment thread rsworkspace/crates/chat/chat-bridge-telegram/src/acp_port.rs Outdated
Comment thread rsworkspace/crates/chat/chat-bridge-telegram/src/config.rs Outdated
Comment thread rsworkspace/crates/chat/chat-bridge-telegram/src/render.rs Outdated
Comment thread rsworkspace/crates/chat/trogon-chat/Cargo.toml Outdated
Comment thread rsworkspace/crates/chat/trogon-chat/src/endpoint.rs Outdated
Comment thread rsworkspace/crates/chat/trogon-chat/src/store.rs Outdated
Comment thread rsworkspace/crates/chat/trogon-chat/src/store.rs Outdated
Unblocks the ADR-reference and markdownlint CI checks on PR #514.

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
Copilot AI review requested due to automatic review settings July 30, 2026 01:32

Copilot AI 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.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

Comment thread .gitignore Outdated
Comment thread devops/docker/compose/compose.yml Outdated
Comment thread devops/docker/compose/compose.yml Outdated
The client-facing error embedded ServerResult debug output, which can carry tool/prompt content; keep it in a local log instead.

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
Copilot AI review requested due to automatic review settings July 30, 2026 03:19

Copilot AI 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.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@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: 1

🤖 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/mcp/mcp-nats-server/src/runtime.rs`:
- Around line 189-197: Update unexpected_result so the warning no longer logs
the full ServerResult payload via ?result; retain the method and, if useful, log
only a non-sensitive result classification. Keep the client-facing ErrorData
message unchanged.
🪄 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 Plus

Run ID: 94ae0412-8895-4a3d-a993-fc2733f2a73a

📥 Commits

Reviewing files that changed from the base of the PR and between fa361b0 and 66ee06b.

📒 Files selected for processing (3)
  • docs/adr/0041-canonical-mcp-jsonrpc-bodies-over-nats.md
  • docs/architecture/multi-channel-agent-routing.md
  • rsworkspace/crates/mcp/mcp-nats-server/src/runtime.rs

Comment thread rsworkspace/crates/mcp/mcp-nats-server/src/runtime.rs
yordis added 2 commits July 29, 2026 23:41
The unexpected-result warning logged the full ServerResult debug, which can carry tool/prompt content into centralized logs; log only the method and an opaque variant discriminant.

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
Merging main advanced acp-nats (client::run now takes Arc) and gated trogon-nats NatsJetStreamClient out of coverage builds; realign the bridge and add the missing crate licenses so build, test, and lint pass.

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
Copilot AI review requested due to automatic review settings July 30, 2026 03:41

Copilot AI 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.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@github-actions

github-actions Bot commented Jul 30, 2026

Copy link
Copy Markdown

badge

Code Coverage Summary

Details
Filename                                                                                            Stmts    Miss  Cover    Missing
------------------------------------------------------------------------------------------------  -------  ------  -------  ----------------------------------------------------------------------------------------------------------------------------------------------------------------
crates/decider/trogon-decider-runtime/src/snapshot/snapshot_type.rs                                    42       0  100.00%
crates/decider/trogon-decider-runtime/src/snapshot/mod.rs                                               3       0  100.00%
crates/decider/trogon-decider-runtime/src/snapshot/read_snapshot.rs                                     3       0  100.00%
crates/platform/trogon-gateway/src/source/discord/config.rs                                            45       0  100.00%
crates/platform/trogon-gateway/src/source/discord/gateway.rs                                          116       1  99.14%   135
crates/a2a/a2a-redaction/src/bin/sign-bundle.rs                                                         1       1  0.00%    163
crates/a2a/a2a-nats/src/nats/subjects/stream.rs                                                        50       0  100.00%
crates/acp/acp-nats/src/nats/extensions.rs                                                              3       0  100.00%
crates/acp/acp-nats/src/nats/mod.rs                                                                    61      13  78.69%   22-33, 75
crates/acp/acp-nats/src/nats/parsing.rs                                                               123       0  100.00%
crates/acp/acp-nats/src/nats/jsonrpc.rs                                                                51      11  78.43%   46, 54-55, 57-63, 81-83
crates/a2a/a2a-gateway/src/policy/tier3_redaction/mod.rs                                               33       2  93.94%   54, 58
crates/a2a/a2a-gateway/src/policy/tier3_redaction/manifest.rs                                          69       3  95.65%   112, 121, 132
crates/a2a/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/a2a-gateway/src/policy/tier3_redaction/gate.rs                                               3       0  100.00%
crates/a2a/a2a-gateway/src/policy/tier3_redaction/rewrite.rs                                           49       0  100.00%
crates/a2a/a2a-gateway/src/policy/tier3_redaction/decision.rs                                          22       0  100.00%
crates/a2a/a2a-gateway/src/policy/tier3_redaction/context.rs                                           40       0  100.00%
crates/a2a/a2a-gateway/src/policy/tier3_redaction/json_path.rs                                         84       5  94.05%   37, 49, 85, 104, 115
crates/decider/trogon-decider-sim/src/host.rs                                                          69       0  100.00%
crates/decider/trogon-decider-sim/src/ir.rs                                                           113      11  90.27%   212-214, 235, 251-253, 265-267, 283
crates/decider/trogon-decider-sim/src/native.rs                                                        81       2  97.53%   196, 214
crates/decider/trogon-decider-sim/src/scenario.rs                                                     189      12  93.65%   352-354, 366-374, 504
crates/decider/trogon-decider-sim/src/fixture.rs                                                       18       2  88.89%   33-35
crates/decider/trogon-decider-sim/src/import_check.rs                                                  52       4  92.31%   81-83, 103
crates/decider/trogon-decider-sim/src/parity.rs                                                        66       6  90.91%   91-93, 95-97
crates/decider/trogon-decider-sim/src/session.rs                                                       23       4  82.61%   47-55
crates/platform/jsonrpc-nats/src/codec/decode.rs                                                       57       0  100.00%
crates/platform/jsonrpc-nats/src/codec/canonical.rs                                                   169      22  86.98%   98, 101, 166-170, 194-196, 207, 212, 214, 231-232, 239, 243-250
crates/platform/jsonrpc-nats/src/codec/encode.rs                                                       31       0  100.00%
crates/platform/jsonrpc-nats/src/codec/reconstruct.rs                                                  90       5  94.44%   56-59, 91
crates/platform/jsonrpc-nats/src/message.rs                                                            11       3  72.73%   37-39
crates/platform/jsonrpc-nats/src/transport.rs                                                         102       4  96.08%   26, 30-31, 118
crates/platform/jsonrpc-nats/src/id.rs                                                                 62      20  67.74%   44-61, 81-82, 84-85, 91-92, 98-99, 112
crates/acp/acp-nats/src/nats/subjects/client_ops/session_update.rs                                     12       0  100.00%
crates/acp/acp-nats/src/nats/subjects/client_ops/terminal_release.rs                                   12       0  100.00%
crates/acp/acp-nats/src/nats/subjects/client_ops/terminal_output.rs                                    12       0  100.00%
crates/acp/acp-nats/src/nats/subjects/client_ops/elicitation_create.rs                                 12       0  100.00%
crates/acp/acp-nats/src/nats/subjects/client_ops/elicitation_complete.rs                               12       0  100.00%
crates/acp/acp-nats/src/nats/subjects/client_ops/fs_write_text_file.rs                                 12       0  100.00%
crates/acp/acp-nats/src/nats/subjects/client_ops/session_request_permission.rs                         12       0  100.00%
crates/acp/acp-nats/src/nats/subjects/client_ops/terminal_kill.rs                                      12       0  100.00%
crates/acp/acp-nats/src/nats/subjects/client_ops/terminal_create.rs                                    12       0  100.00%
crates/acp/acp-nats/src/nats/subjects/client_ops/fs_read_text_file.rs                                  12       0  100.00%
crates/acp/acp-nats/src/nats/subjects/client_ops/terminal_wait_for_exit.rs                             12       0  100.00%
crates/a2a/a2a-nats/src/push/dispatcher/mod.rs                                                         16       0  100.00%
crates/a2a/a2a-nats/src/push/dispatcher/http.rs                                                        19       0  100.00%
crates/a2a/a2a-nats/src/push/dispatcher/nats.rs                                                        37       0  100.00%
crates/a2a/a2a-nats/src/push/dispatcher/composite.rs                                                   15       0  100.00%
crates/a2a/a2a-nats/src/push/dispatcher/jetstream.rs                                                   45       0  100.00%
crates/scheduler/trogon-scheduler/src/commands/domain/schedule_occurrence_sequence.rs                  16       0  100.00%
crates/scheduler/trogon-scheduler/src/commands/domain/recurrence.rs                                    78       1  98.72%   99
crates/aauth/trogon-aauth-verify/src/upstream.rs                                                       20       0  100.00%
crates/aauth/trogon-aauth-verify/src/jwks_cache.rs                                                     39       0  100.00%
crates/aauth/trogon-aauth-verify/src/token.rs                                                         184       1  99.46%   181
crates/aauth/trogon-aauth-verify/src/delegation.rs                                                     53       0  100.00%
crates/aauth/trogon-aauth-verify/src/jkt.rs                                                            33       0  100.00%
crates/aauth/trogon-aauth-verify/src/test_support.rs                                                   86       0  100.00%
crates/aauth/trogon-aauth-verify/src/nats_pop.rs                                                      125       1  99.20%   313
crates/aauth/trogon-aauth-verify/src/replay.rs                                                         26       0  100.00%
crates/aauth/trogon-aauth-verify/src/challenge.rs                                                      77       0  100.00%
crates/aauth/trogon-aauth-verify/src/jwks.rs                                                           15       0  100.00%
crates/aauth/trogon-aauth-verify/src/jwks_http.rs                                                     144       0  100.00%
crates/aauth/trogon-aauth-verify/src/mission.rs                                                        33       0  100.00%
crates/aauth/trogon-aauth-verify/src/http_pop.rs                                                      268       0  100.00%
crates/aauth/trogon-aauth-verify/src/time_source.rs                                                    10       0  100.00%
crates/acp/acp-nats/src/nats/subjects/responses/prompt_response.rs                                     20       0  100.00%
crates/acp/acp-nats/src/nats/subjects/responses/response.rs                                            20       0  100.00%
crates/acp/acp-nats/src/nats/subjects/responses/ext_ready.rs                                           12       0  100.00%
crates/acp/acp-nats/src/nats/subjects/responses/update.rs                                              20       0  100.00%
crates/acp/acp-nats/src/nats/subjects/responses/cancelled.rs                                           15       0  100.00%
crates/platform/trogon-gateway/src/source/sentry/sentry_client_secret.rs                                9       0  100.00%
crates/platform/trogon-gateway/src/source/sentry/signature.rs                                           6       0  100.00%
crates/platform/trogon-gateway/src/source/sentry/server.rs                                             69       0  100.00%
crates/platform/trogon-identity-types/src/act_chain.rs                                                 13       0  100.00%
crates/a2a/a2a-redaction/src/signed_bundle/signature.rs                                                30       3  90.00%   37-39
crates/a2a/a2a-redaction/src/signed_bundle/manifest.rs                                                 56       1  98.21%   82
crates/a2a/a2a-redaction/src/signed_bundle/verify.rs                                                   64       2  96.88%   86-87
crates/a2a/a2a-redaction/src/signed_bundle/public_key.rs                                               36       2  94.44%   44-45
crates/a2a/a2a-redaction/src/signed_bundle/digest.rs                                                   26       0  100.00%
crates/acp/acp-nats-server/src/config.rs                                                               39       0  100.00%
crates/acp/acp-nats-server/src/component.rs                                                            70       0  100.00%
crates/acp/acp-nats-server/src/main.rs                                                                 31       1  96.77%   81
crates/acp/acp-nats-server/src/compat.rs                                                              174       0  100.00%
crates/a2a/a2a-nats/src/nats/subjects/agents/push/set.rs                                               12       0  100.00%
crates/a2a/a2a-nats/src/nats/subjects/agents/push/delete.rs                                            15       0  100.00%
crates/a2a/a2a-nats/src/nats/subjects/agents/push/list.rs                                              15       0  100.00%
crates/a2a/a2a-nats/src/nats/subjects/agents/push/get.rs                                               12       0  100.00%
crates/ard/ard-registry/src/bin/ard-registry-demo/main.rs                                              64      20  68.75%   13-35
crates/a2a/a2a-gateway/src/runtime/policy_stack.rs                                                     78      31  60.26%   82, 89, 101-110, 117-118, 133-143, 152-168, 173
crates/a2a/a2a-gateway/src/runtime/audit_publish.rs                                                    16       0  100.00%
crates/a2a/a2a-gateway/src/runtime/tier1.rs                                                            30       0  100.00%
crates/a2a/a2a-gateway/src/runtime/streaming.rs                                                        35       0  100.00%
crates/a2a/a2a-gateway/src/runtime/aauth_env.rs                                                       162       0  100.00%
crates/a2a/a2a-gateway/src/runtime/reply.rs                                                             5       0  100.00%
crates/a2a/a2a-gateway/src/runtime/tier1_denial.rs                                                     34       1  97.06%   60
crates/a2a/a2a-gateway/src/runtime/env.rs                                                              55       0  100.00%
crates/platform/trogonai-proto/src/agents/agents/codec.rs                                              30       0  100.00%
crates/platform/trogonai-proto/src/scheduler/schedules/codec.rs                                        57       0  100.00%
crates/platform/trogon-std/src/telemetry/http.rs                                                       58       0  100.00%
crates/ard/ard-nats/src/catalog_event.rs                                                               71       0  100.00%
crates/ard/ard-nats/src/memory_catalog_store.rs                                                        32       0  100.00%
crates/ard/ard-nats/src/store.rs                                                                        3       0  100.00%
crates/ard/ard-nats/src/catalog_subject.rs                                                             14       3  78.57%   16-18
crates/ard/ard-nats/src/catalog_index.rs                                                               82       2  97.56%   37, 104
crates/platform/trogon-nats/src/jetstream/publish.rs                                                   30       0  100.00%
crates/platform/trogon-nats/src/jetstream/mocks.rs                                                    941       1  99.89%   507
crates/platform/trogon-nats/src/jetstream/traits.rs                                                    46      34  26.09%   181-239
crates/platform/trogon-nats/src/jetstream/create_conflicts.rs                                          14       0  100.00%
crates/platform/trogon-nats/src/jetstream/object_store.rs                                              11       0  100.00%
crates/platform/trogon-nats/src/jetstream/claim_check.rs                                              104       3  97.12%   43-45
crates/platform/trogon-nats/src/jetstream/claim_retention.rs                                           10       0  100.00%
crates/platform/trogon-nats/src/jetstream/stream_max_age.rs                                             8       0  100.00%
crates/scheduler/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/scheduler/trogon-scheduler/src/processor/execution/reconciliation/schedule_key.rs               27       0  100.00%
crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/schedule_subject.rs           31       0  100.00%
crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/go_duration.rs                40       0  100.00%
crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/request.rs                   230       2  99.13%   270, 275
crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/rrule_wakeup_payload.rs       35       0  100.00%
crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/reconcile.rs                 303      13  95.71%   244-253, 318-320
crates/acp/acp-nats/src/nats/subjects/global/authenticate.rs                                            6       0  100.00%
crates/acp/acp-nats/src/nats/subjects/global/initialize.rs                                              6       0  100.00%
crates/acp/acp-nats/src/nats/subjects/global/providers_disable.rs                                       6       0  100.00%
crates/acp/acp-nats/src/nats/subjects/global/providers_list.rs                                          6       0  100.00%
crates/acp/acp-nats/src/nats/subjects/global/ext_notify.rs                                              9       0  100.00%
crates/acp/acp-nats/src/nats/subjects/global/ext.rs                                                     9       0  100.00%
crates/acp/acp-nats/src/nats/subjects/global/logout.rs                                                  6       0  100.00%
crates/acp/acp-nats/src/nats/subjects/global/providers_set.rs                                           6       0  100.00%
crates/acp/acp-nats/src/nats/subjects/global/session_list.rs                                            6       0  100.00%
crates/acp/acp-nats/src/nats/subjects/global/session_new.rs                                             6       0  100.00%
crates/scheduler/trogon-scheduler/src/processor/execution/execution_schedules/mod.rs                   82       0  100.00%
crates/a2a/a2a-nats/src/audit/envelope.rs                                                              57       0  100.00%
crates/a2a/a2a-nats/src/audit/task_lifecycle.rs                                                        17       0  100.00%
crates/a2a/a2a-nats/src/audit/emitter.rs                                                               58       0  100.00%
crates/decider/trogon-decider-runtime/src/snapshot/codec/encoded_snapshot.rs                           44       0  100.00%
crates/decider/trogon-decider-runtime/src/snapshot/codec/snapshot_payload_decode.rs                     3       0  100.00%
crates/decider/trogon-decider-runtime/src/snapshot/codec/snapshot_encode_error.rs                      16       0  100.00%
crates/decider/trogon-decider-runtime/src/snapshot/codec/snapshot_envelope_decode_error.rs              6       0  100.00%
crates/decider/trogon-decider-runtime/src/snapshot/codec/snapshot_decode_error.rs                      19       0  100.00%
crates/decider/trogon-decider-runtime/src/snapshot/codec/snapshot_envelope_encode_error.rs              3       0  100.00%
crates/acp/acp-nats/src/ext_method_name.rs                                                             18       0  100.00%
crates/acp/acp-nats/src/in_flight_slot_guard.rs                                                         9       0  100.00%
crates/acp/acp-nats/src/pending_prompt_waiters.rs                                                      68       0  100.00%
crates/acp/acp-nats/src/client_proxy.rs                                                                67       1  98.51%   57
crates/acp/acp-nats/src/req_id.rs                                                                      21       0  100.00%
crates/acp/acp-nats/src/acp_prefix.rs                                                                  13       0  100.00%
crates/acp/acp-nats/src/session_id.rs                                                                  21       0  100.00%
crates/acp/acp-nats/src/config.rs                                                                      84       0  100.00%
crates/acp/acp-nats/src/error.rs                                                                       31       0  100.00%
crates/acp/acp-nats/src/wire.rs                                                                        80      14  82.50%   38, 46-60, 103
crates/acp/acp-nats/src/agent_handler.rs                                                               28       0  100.00%
crates/acp/acp-nats/src/client_handler.rs                                                              22       0  100.00%
crates/acp/acp-nats/src/lib.rs                                                                         11       0  100.00%
crates/ard/ard-registry/src/explore_request.rs                                                         30       0  100.00%
crates/ard/ard-registry/src/lexical_rank.rs                                                            55       2  96.36%   15, 64
crates/ard/ard-registry/src/list_agents_request.rs                                                     21       0  100.00%
crates/ard/ard-registry/src/registry.rs                                                               134       3  97.76%   78, 174, 183
crates/ard/ard-registry/src/extract.rs                                                                 12       0  100.00%
crates/ard/ard-registry/src/registry_config.rs                                                         16       0  100.00%
crates/ard/ard-registry/src/router.rs                                                                  33       0  100.00%
crates/ard/ard-registry/src/search_filters.rs                                                          28       0  100.00%
crates/ard/ard-registry/src/search_request.rs                                                          32       1  96.88%   43
crates/ard/ard-registry/src/filters.rs                                                                 31       0  100.00%
crates/ard/ard-registry/src/http_error.rs                                                              17       0  100.00%
crates/ard/ard-registry/src/page_token.rs                                                              14       0  100.00%
crates/ard/ard-registry/src/source_url.rs                                                              26       1  96.15%   30
crates/ard/ard-registry/src/facet_field.rs                                                             13       0  100.00%
crates/a2a/a2a-auth-callout/src/wire/callout_auth_response_claims.rs                                   54       3  94.44%   70-72
crates/a2a/a2a-auth-callout/src/wire/nkey_seed.rs                                                      20       0  100.00%
crates/a2a/a2a-auth-callout/src/wire/nkey_public.rs                                                    83       3  96.39%   102, 118-119
crates/a2a/a2a-auth-callout/src/wire/wire_codec.rs                                                     58       0  100.00%
crates/a2a/a2a-auth-callout/src/wire/server_auth_request_envelope.rs                                   68       1  98.53%   64
crates/a2a/a2a-auth-callout/src/wire/test_encode.rs                                                    59       0  100.00%
crates/a2a/a2a-auth-callout/src/wire/bridge_adapter.rs                                                 73       0  100.00%
crates/a2a/a2a-auth-callout/src/wire/server_auth_request_claims.rs                                    100       4  96.00%   24-26, 127
crates/a2a/a2a-auth-callout/src/wire/xkey_public.rs                                                    23       0  100.00%
crates/decider/trogon-decider-nats/src/stream_store/replay.rs                                         135      10  92.59%   114, 142, 160, 216-224
crates/decider/trogon-decider-runtime/src/replay_limit.rs                                              26       0  100.00%
crates/decider/trogon-decider-runtime/src/memory.rs                                                   104       5  95.19%   77-82
crates/decider/trogon-decider-runtime/src/execution.rs                                                627       3  99.52%   73, 187-188
crates/platform/trogon-telemetry/src/log.rs                                                            36       0  100.00%
crates/platform/trogon-telemetry/src/lib.rs                                                           135      23  82.96%   119, 124, 129, 139-140, 146-164, 200, 203, 206, 212
crates/platform/trogon-telemetry/src/metric.rs                                                         18       1  94.44%   30
crates/platform/trogon-telemetry/src/service_name.rs                                                   17       0  100.00%
crates/platform/trogon-telemetry/src/trace.rs                                                          15       1  93.33%   24
crates/platform/trogon-telemetry/src/resource_attribute.rs                                             13       0  100.00%
crates/platform/trogon-nats/src/test_support.rs                                                        26       0  100.00%
crates/platform/trogon-nats/src/connect.rs                                                             26       6  76.92%   42-47
crates/platform/trogon-nats/src/client.rs                                                              22      22  0.00%    50-86
crates/platform/trogon-nats/src/messaging.rs                                                          168       2  98.81%   146, 156
crates/platform/trogon-nats/src/token.rs                                                                6       0  100.00%
crates/platform/trogon-nats/src/mocks.rs                                                              246       0  100.00%
crates/platform/trogon-nats/src/nats_token.rs                                                          56       0  100.00%
crates/platform/trogon-nats/src/server_info.rs                                                         21       3  85.71%   19-21
crates/platform/trogon-nats/src/auth.rs                                                                45       0  100.00%
crates/decider/trogon-decider-runtime/src/stream/stream_position.rs                                    26       0  100.00%
crates/decider/trogon-decider-runtime/src/stream/read_stream.rs                                         7       0  100.00%
crates/decider/trogon-decider-runtime/src/stream/append_stream.rs                                       5       0  100.00%
crates/decider/trogon-decider-guest-macros/src/lib.rs                                                 136      28  79.41%   14-19, 29-40, 116-119, 437-446, 450
crates/a2a/a2a-bridge/src/inbound.rs                                                                  326      91  72.09%   114-118, 141-143, 190-230, 291-416, 468-470, 481, 579, 630-645, 686-691
crates/a2a/a2a-bridge/src/nats_transport_harness.rs                                                    42       0  100.00%
crates/a2a/a2a-bridge/src/auth.rs                                                                      47      15  68.09%   78-99, 148
crates/a2a/a2a-bridge/src/main.rs                                                                       1       1  0.00%    199
crates/a2a/a2a-bridge/src/identity.rs                                                                  63       0  100.00%
crates/a2a/a2a-bridge/src/outbound.rs                                                                  70       7  90.00%   126, 197-209
crates/acp/acp-nats-agent/src/connection.rs                                                           482       1  99.79%   726
crates/ard/ard-catalog/src/media_type.rs                                                               20       0  100.00%
crates/ard/ard-catalog/src/catalog_manifest_schema.rs                                                  65       4  93.85%   105-106, 108-109
crates/ard/ard-catalog/src/registry_error_wire.rs                                                       8       0  100.00%
crates/ard/ard-catalog/src/trust_manifest.rs                                                           45       1  97.78%   35
crates/ard/ard-catalog/src/ard_identifier.rs                                                           54       0  100.00%
crates/ard/ard-catalog/src/catalog_host_wire.rs                                                         6       0  100.00%
crates/ard/ard-catalog/src/representative_queries.rs                                                   18       0  100.00%
crates/ard/ard-catalog/src/catalog_manifest_wire.rs                                                     3       0  100.00%
crates/ard/ard-catalog/src/metadata.rs                                                                 14       0  100.00%
crates/ard/ard-catalog/src/ard_storage_key.rs                                                          10       0  100.00%
crates/ard/ard-catalog/src/federation_mode.rs                                                           3       0  100.00%
crates/ard/ard-catalog/src/url_or_data.rs                                                              20       0  100.00%
crates/ard/ard-catalog/src/catalog_host.rs                                                             26       0  100.00%
crates/ard/ard-catalog/src/display_name.rs                                                             13       0  100.00%
crates/ard/ard-catalog/src/catalog_entry.rs                                                           107       0  100.00%
crates/ard/ard-catalog/src/catalog_entry_wire.rs                                                        3       0  100.00%
crates/ard/ard-catalog/src/catalog_manifest.rs                                                         44       0  100.00%
crates/platform/trogonai-proto/src/lib.rs                                                              20       0  100.00%
crates/platform/trogonai-proto/src/codec.rs                                                            16       0  100.00%
crates/platform/trogonai-proto/src/convert.rs                                                          53       0  100.00%
crates/scheduler/trogon-scheduler/src/commands/record_schedule_occurrence.rs                          113       1  99.12%   182
crates/scheduler/trogon-scheduler/src/commands/schedule_next_occurrence.rs                             74       0  100.00%
crates/scheduler/trogon-scheduler/src/processor/execution/checkpoints/record.rs                         6       0  100.00%
crates/scheduler/trogon-scheduler/src/processor/execution/checkpoints/store.rs                        145      16  88.97%   102, 120, 124, 131, 223-229, 278-282
crates/scheduler/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/scheduler/trogon-scheduler/src/processor/execution/checkpoints/failure.rs                       27       0  100.00%
crates/aauth/trogon-aauth-person/src/http/mod.rs                                                      213       0  100.00%
crates/a2a/a2a-nats-http/src/router.rs                                                                 55      13  76.36%   60-63, 69-79
crates/a2a/a2a-nats-http/src/rest.rs                                                                  316       8  97.47%   123-126, 282-285
crates/a2a/a2a-nats-http/src/runtime.rs                                                                 8       8  0.00%    54-124
crates/a2a/a2a-nats-http/src/sse.rs                                                                    44      27  38.64%   15-51, 61-62, 65-68
crates/a2a/a2a-nats-http/src/headers.rs                                                               129       1  99.22%   154
crates/a2a/a2a-nats-http/src/main.rs                                                                    1       0  100.00%
crates/acp/acp-nats/src/nats/subjects/commands/load.rs                                                 15       0  100.00%
crates/acp/acp-nats/src/nats/subjects/commands/cancel.rs                                               15       0  100.00%
crates/acp/acp-nats/src/nats/subjects/commands/fork.rs                                                 15       0  100.00%
crates/acp/acp-nats/src/nats/subjects/commands/prompt.rs                                               15       0  100.00%
crates/acp/acp-nats/src/nats/subjects/commands/delete.rs                                               15       0  100.00%
crates/acp/acp-nats/src/nats/subjects/commands/set_config_option.rs                                    15       0  100.00%
crates/acp/acp-nats/src/nats/subjects/commands/set_mode.rs                                             15       0  100.00%
crates/acp/acp-nats/src/nats/subjects/commands/close.rs                                                15       0  100.00%
crates/acp/acp-nats/src/nats/subjects/commands/resume.rs                                               15       0  100.00%
crates/a2a/a2a-nats/src/agent_id.rs                                                                    21       0  100.00%
crates/a2a/a2a-nats/src/gateway_ingress.rs                                                            153      21  86.27%   148-151, 155, 169, 177-183, 216, 231-237
crates/a2a/a2a-nats/src/config.rs                                                                     114       0  100.00%
crates/a2a/a2a-nats/src/context_id.rs                                                                  22       0  100.00%
crates/a2a/a2a-nats/src/a2a_prefix.rs                                                                  16       0  100.00%
crates/a2a/a2a-nats/src/task_id.rs                                                                     22       0  100.00%
crates/a2a/a2a-nats/src/wire.rs                                                                        59       2  96.61%   85, 98
crates/a2a/a2a-nats/src/req_id.rs                                                                      21       0  100.00%
crates/a2a/a2a-nats/src/jsonrpc.rs                                                                     27       0  100.00%
crates/decider/trogon-decider-wasm-runtime/src/engine.rs                                              145       0  100.00%
crates/decider/trogon-decider-wasm-runtime/src/module.rs                                               71       0  100.00%
crates/decider/trogon-decider-wasm-runtime/src/module_name.rs                                          34       0  100.00%
crates/decider/trogon-decider-wasm-runtime/src/command_type.rs                                         31       0  100.00%
crates/decider/trogon-decider-wasm-runtime/src/module_version.rs                                       34       0  100.00%
crates/decider/trogon-decider-wasm-runtime/src/test_fixture.rs                                          7       0  100.00%
crates/decider/trogon-decider-wasm-runtime/src/execution.rs                                           756      31  95.90%   134, 556, 728, 775-779, 827-831, 870-874, 933, 938-942, 1014-1018, 1106, 1127
crates/decider/trogon-decider-wasm-runtime/src/command_spec.rs                                         12       0  100.00%
crates/decider/trogon-decider-wasm-runtime/src/registry.rs                                             94       0  100.00%
crates/decider/trogon-decider-wasm-runtime/src/test_doubles.rs                                         73       5  93.15%   64, 85-87, 90
crates/decider/trogon-decider-wasm-runtime/src/domain_error_detail.rs                                   7       0  100.00%
crates/decider/trogon-decider-wasm-runtime/src/opaque_snapshot.rs                                      18       0  100.00%
crates/decider/trogon-decider-wasm-runtime/src/snapshot_id.rs                                          18       0  100.00%
crates/decider/trogon-decider/src/event/codec/event_payload_error.rs                                    5       0  100.00%
crates/decider/trogon-decider/src/event/codec/event_decode.rs                                          13       0  100.00%
crates/platform/trogon-gateway/src/source/github/server.rs                                             50       0  100.00%
crates/platform/trogon-gateway/src/source/github/config.rs                                              9       0  100.00%
crates/platform/trogon-gateway/src/source/github/signature.rs                                           9       0  100.00%
crates/a2a/a2a-redaction/src/a2a_method.rs                                                             41       0  100.00%
crates/a2a/a2a-redaction/src/skill_manifest.rs                                                        310      14  95.48%   139, 169-171, 177, 184-188, 358-360, 452
crates/a2a/a2a-redaction/src/wasm_bundle_path.rs                                                       18       0  100.00%
crates/a2a/a2a-redaction/src/skill_id.rs                                                               26       0  100.00%
crates/a2a/a2a-redaction/src/redactor.rs                                                               32       0  100.00%
crates/a2a/a2a-redaction/src/tier3_sentinel.rs                                                         12       0  100.00%
crates/a2a/a2a-gateway/src/policy/tier2_cel/evaluator.rs                                              138       0  100.00%
crates/a2a/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/a2a-gateway/src/policy/tier2_cel/compiler.rs                                                25       3  88.00%   61-63
crates/platform/trogon-identity-types/src/aauth/mod.rs                                                 69       0  100.00%
crates/platform/trogon-identity-types/src/aauth/person_server.rs                                       23       0  100.00%
crates/platform/trogon-identity-types/src/aauth/error.rs                                               14       0  100.00%
crates/platform/trogon-identity-types/src/aauth/headers.rs                                             47       0  100.00%
crates/platform/trogon-identity-types/src/aauth/login.rs                                               78       0  100.00%
crates/platform/trogon-identity-types/src/aauth/mission.rs                                             33       0  100.00%
crates/scheduler/trogon-scheduler-domain/src/commands/pause_schedule.rs                                31       0  100.00%
crates/scheduler/trogon-scheduler-domain/src/commands/resume_schedule.rs                               34       0  100.00%
crates/scheduler/trogon-scheduler-domain/src/commands/state.rs                                         82       0  100.00%
crates/scheduler/trogon-scheduler-domain/src/commands/remove_schedule.rs                               30       0  100.00%
crates/scheduler/trogon-scheduler-domain/src/commands/create_schedule.rs                               32       0  100.00%
crates/scheduler/trogon-scheduler-domain/src/commands/proto_wire.rs                                   138       1  99.28%   231
crates/scheduler/trogon-scheduler/src/processor/execution/worker/processor.rs                         308      12  96.10%   279, 339, 439-440, 446, 501-503, 535-538
crates/scheduler/trogon-scheduler/src/processor/execution/worker/consumer.rs                           77       0  100.00%
crates/scheduler/trogon-scheduler/src/processor/execution/worker/testkit.rs                           311       4  98.71%   458, 489-490, 495
crates/scheduler/trogon-scheduler/src/processor/execution/worker/dispatcher.rs                        280       1  99.64%   201
crates/scheduler/trogon-scheduler/src/telemetry/trace.rs                                               20       0  100.00%
crates/scheduler/trogon-scheduler/src/telemetry/metrics.rs                                             27       0  100.00%
crates/scheduler/trogon-scheduler/src/queries/read_model/message.rs                                    77       0  100.00%
crates/scheduler/trogon-scheduler/src/queries/read_model/schedule.rs                                   15       0  100.00%
crates/a2a/a2a-nats/src/nats/subjects/agents/tasks/get.rs                                              15       0  100.00%
crates/a2a/a2a-nats/src/nats/subjects/agents/tasks/list.rs                                             15       0  100.00%
crates/a2a/a2a-nats/src/nats/subjects/agents/tasks/cancel.rs                                           15       0  100.00%
crates/a2a/a2a-nats/src/nats/subjects/agents/tasks/resubscribe.rs                                      15       0  100.00%
crates/decider/trogon-decider-nats/src/processor.rs                                                   109      17  84.40%   85-88, 217-220, 268-270, 277, 280-282, 308-310
crates/decider/trogon-decider-nats/src/provision.rs                                                   100      22  78.00%   159, 164-172, 192, 197-208, 221
crates/decider/trogon-decider-nats/src/projector.rs                                                    88       3  96.59%   57-59
crates/decider/trogon-decider-nats/src/snapshot_store.rs                                              467      48  89.72%   34-72, 260-262, 300-303, 413-419, 501, 637, 642, 738-740, 746-748, 782-783, 793-794, 813, 841-842
crates/decider/trogon-decider-nats/src/store.rs                                                        73      45  38.36%   100-104, 151-217
crates/decider/trogon-decider-nats/src/stream_store.rs                                                252      18  92.86%   66-68, 280, 308-309, 312, 328-332, 448-449, 507, 520-524
crates/platform/trogon-gateway/src/source/datadog/datadog_webhook_token.rs                              9       0  100.00%
crates/platform/trogon-gateway/src/source/datadog/server.rs                                           108       0  100.00%
crates/platform/trogon-gateway/src/source/datadog/datadog_event_type.rs                                20       0  100.00%
crates/platform/trogon-gateway/src/source/datadog/signature.rs                                          7       0  100.00%
crates/a2a/a2a-gateway/src/policy/spicedb_tier1.rs                                                    157      13  91.72%   226-228, 381, 451, 453-461
crates/a2a/a2a-gateway/src/policy/wasmtime_substrate.rs                                                31       0  100.00%
crates/a2a/a2a-gateway/src/policy/per_skill.rs                                                         87       0  100.00%
crates/a2a/a2a-gateway/src/policy/error.rs                                                             16       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/subscribe_resource.rs                                     12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/resource_list_changed.rs                                  12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/task_status.rs                                            12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/unsubscribe_resource.rs                                   12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/list_resource_templates.rs                                12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/cancelled.rs                                              12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/subscriptions_listen.rs                                   12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/ping.rs                                                    9       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/call_tool.rs                                              12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/complete.rs                                               12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/cancel_task.rs                                            12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/progress.rs                                               12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/update_task.rs                                            12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/get_task.rs                                               12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/subscriptions_acknowledged.rs                             12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/resource_updated.rs                                       12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/discover.rs                                               12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/prompt_list_changed.rs                                    12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/list_resources.rs                                         12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/initialize.rs                                             12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/list_tools.rs                                             12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/set_logging_level.rs                                      12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/get_prompt.rs                                             12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/tool_list_changed.rs                                      12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/logging_message.rs                                        12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/list_prompts.rs                                           12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/read_resource.rs                                          12       0  100.00%
crates/platform/trogon-gateway/src/source/linear/signature.rs                                           8       1  87.50%   16
crates/platform/trogon-gateway/src/source/linear/server.rs                                             83       0  100.00%
crates/platform/trogon-gateway/src/source/linear/config.rs                                              9       0  100.00%
crates/decider/trogon-decider-wit/src/lib.rs                                                           53       1  98.11%   35
crates/mcp/mcp-nats-server/src/runtime.rs                                                             565     275  51.33%   189-202, 249-271, 284-290, 304, 308-427, 436-439, 443-515, 520, 524-541, 580-582, 600-601, 612, 645-649, 691-699, 704-739, 765-776
crates/mcp/mcp-nats-server/src/config.rs                                                               58       0  100.00%
crates/mcp/mcp-nats-server/src/allowed_host.rs                                                         52       0  100.00%
crates/mcp/mcp-nats-server/src/main.rs                                                                  1       1  0.00%    67
crates/platform/trogon-gateway/src/source/gitlab/gitlab_signing_token.rs                               30       0  100.00%
crates/platform/trogon-gateway/src/source/gitlab/signature.rs                                          13       0  100.00%
crates/platform/trogon-gateway/src/source/gitlab/server.rs                                             78       0  100.00%
crates/a2a/a2a-bridge/src/auth/callout_mint.rs                                                         49       1  97.96%   94
crates/mcp/mcp-nats/src/telemetry/transport.rs                                                          6       0  100.00%
crates/a2a/a2a-redaction/src/wasm/engine.rs                                                            62      11  82.26%   29-31, 63-64, 76-78, 82-84
crates/a2a/a2a-redaction/src/wasm/mod.rs                                                              110       9  91.82%   132-134, 147-149, 162-164
crates/acp/acp-nats/src/jetstream/consumers.rs                                                         41       0  100.00%
crates/acp/acp-nats/src/jetstream/ext_policy.rs                                                         3       0  100.00%
crates/acp/acp-nats/src/jetstream/provision.rs                                                         13       0  100.00%
crates/acp/acp-nats/src/jetstream/streams.rs                                                           18       0  100.00%
crates/platform/trogonai-proto/src/session/sessions/validate.rs                                       552       0  100.00%
crates/platform/trogonai-proto/src/session/sessions/codec.rs                                          152       0  100.00%
crates/scheduler/trogon-scheduler/src/error.rs                                                         83      12  85.54%   131-133, 152-154, 159-161, 176-180
crates/scheduler/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/scheduler/trogon-scheduler/src/config.rs                                                        27       0  100.00%
crates/scheduler/trogon-scheduler/src/nats.rs                                                          11       0  100.00%
crates/platform/trogon-gateway/src/source/slack/config.rs                                              32       0  100.00%
crates/platform/trogon-gateway/src/source/slack/signature.rs                                           17       0  100.00%
crates/platform/trogon-gateway/src/source/slack/socket_mode.rs                                        139       0  100.00%
crates/platform/trogon-gateway/src/source/slack/server.rs                                             272       0  100.00%
crates/aauth/trogon-aauth-sdk/src/exchange/challenge.rs                                                50       0  100.00%
crates/aauth/trogon-aauth-sdk/src/exchange/client.rs                                                  283       0  100.00%
crates/aauth/trogon-aauth-sdk/src/exchange/mod.rs                                                      17       0  100.00%
crates/aauth/trogon-aauth-sdk/src/exchange/core.rs                                                    138       0  100.00%
crates/mcp/mcp-nats-stdio/src/config.rs                                                                26       0  100.00%
crates/mcp/mcp-nats-stdio/src/main.rs                                                                  36       0  100.00%
crates/scheduler/trogon-scheduler-domain/src/commands/domain/schedule.rs                              383       5  98.69%   327, 335, 350-352
crates/scheduler/trogon-scheduler-domain/src/commands/domain/schedule_event_delivery.rs                14       0  100.00%
crates/scheduler/trogon-scheduler-domain/src/commands/domain/schedule_event_sampling_source.rs         11       0  100.00%
crates/scheduler/trogon-scheduler-domain/src/commands/domain/schedule_event_schedule.rs                35       0  100.00%
crates/scheduler/trogon-scheduler-domain/src/commands/domain/schedule_event_status.rs                   6       0  100.00%
crates/scheduler/trogon-scheduler-domain/src/commands/domain/schedule_id.rs                            40       0  100.00%
crates/scheduler/trogon-scheduler-domain/src/commands/domain/message.rs                               139       0  100.00%
crates/platform/trogon-std/src/dirs/fixed.rs                                                           32       0  100.00%
crates/platform/trogon-std/src/dirs/system.rs                                                          39       0  100.00%
crates/a2a/a2a-nats/src/nats/subjects/tasks/events.rs                                                  17       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/client/list_roots.rs                                             12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/client/roots_list_changed.rs                                     12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/client/create_message.rs                                         12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/client/initialized.rs                                            12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/client/create_elicitation.rs                                     12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/client/ping.rs                                                    9       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/client/cancelled.rs                                              12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/client/progress.rs                                               12       0  100.00%
crates/a2a/a2a-gateway/src/policy/tier1_declarative/bundle.rs                                          57       0  100.00%
crates/a2a/a2a-gateway/src/policy/tier1_declarative/evaluator.rs                                      158      13  91.77%   26-28, 146, 195-197, 267-271, 294
crates/a2a/a2a-gateway/src/policy/tier1_declarative/loader.rs                                          85       9  89.41%   93-95, 97-99, 124-126
crates/a2a/a2a-gateway/src/policy/tier1_declarative/time_predicate.rs                                 118       2  98.31%   103, 125
crates/a2a/a2a-nats/src/catalog/import_gate/principal.rs                                                9       0  100.00%
crates/a2a/a2a-nats/src/catalog/import_gate/allow_all.rs                                                2       0  100.00%
crates/platform/trogon-gateway/src/source/twitter/server.rs                                           144       0  100.00%
crates/platform/trogon-gateway/src/source/twitter/config.rs                                             9       0  100.00%
crates/platform/trogon-gateway/src/source/twitter/signature.rs                                         16       0  100.00%
crates/platform/trogon-service-config/src/lib.rs                                                       38       0  100.00%
crates/platform/trogon-gateway/src/source/microsoft_graph/server.rs                                    73       0  100.00%
crates/platform/trogon-gateway/src/source/microsoft_graph/client_state.rs                              14       0  100.00%
crates/acp/acp-nats/src/boundary/connection_client.rs                                                  29       0  100.00%
crates/acp/acp-nats/src/boundary/eof_signal_reader.rs                                                  20       0  100.00%
crates/acp/acp-nats/src/boundary/connect_agent_boundary.rs                                            128       0  100.00%
crates/acp/acp-nats/src/boundary/abort_on_drop.rs                                                      19       0  100.00%
crates/platform/trogon-std/src/env/read_env.rs                                                          3       0  100.00%
crates/platform/trogon-std/src/env/enumerate_env.rs                                                     6       0  100.00%
crates/platform/trogon-std/src/env/in_memory.rs                                                        30       0  100.00%
crates/platform/trogon-std/src/env/system.rs                                                           12       0  100.00%
crates/platform/trogon-gateway/src/source/incidentio/incidentio_event_type.rs                          20       0  100.00%
crates/platform/trogon-gateway/src/source/incidentio/server.rs                                         72       0  100.00%
crates/platform/trogon-gateway/src/source/incidentio/incidentio_signing_secret.rs                      22       0  100.00%
crates/platform/trogon-gateway/src/source/incidentio/signature.rs                                       8       0  100.00%
crates/aauth/trogon-aauth-sdk/src/lib.rs                                                                3       0  100.00%
crates/aauth/trogon-aauth-sdk/src/verify_response.rs                                                   70       0  100.00%
crates/aauth/trogon-aauth-sdk/src/signer.rs                                                            91       0  100.00%
crates/aauth/trogon-aauth-sdk/src/subagent.rs                                                          34       0  100.00%
crates/aauth/trogon-aauth-sdk/src/capabilities.rs                                                       7       0  100.00%
crates/aauth/trogon-aauth-sdk/src/delegation.rs                                                        15       0  100.00%
crates/scheduler/trogon-scheduler/src/processor/execution/wakeup.rs                                    91       1  98.90%   125
crates/scheduler/trogon-scheduler-domain/src/subject.rs                                                26       0  100.00%
crates/platform/trogon-nats/src/telemetry/messaging.rs                                                 37       0  100.00%
crates/platform/trogon-gateway/src/source/standard_webhooks.rs                                        138       0  100.00%
crates/aauth/trogon-aauth-person/src/login.rs                                                           3       0  100.00%
crates/aauth/trogon-aauth-person/src/mission.rs                                                        65       0  100.00%
crates/aauth/trogon-aauth-person/src/server.rs                                                        353       0  100.00%
crates/aauth/trogon-aauth-person/src/agent.rs                                                          84       0  100.00%
crates/aauth/trogon-aauth-person/src/mint.rs                                                           59       0  100.00%
crates/aauth/trogon-aauth-person/src/store.rs                                                          21       0  100.00%
crates/aauth/trogon-aauth-person/src/subagent.rs                                                       10       0  100.00%
crates/aauth/trogon-aauth-person/src/interaction.rs                                                     2       0  100.00%
crates/aauth/trogon-aauth-person/src/error.rs                                                          48       0  100.00%
crates/aauth/trogon-aauth-person/src/pending.rs                                                        73       0  100.00%
crates/a2a/a2a-nats-http/src/handlers/mod.rs                                                          185      12  93.51%   68, 88-91, 121, 155, 169-172, 185
crates/a2a/a2a-auth-callout/src/caller_jwt_header.rs                                                   20       0  100.00%
crates/a2a/a2a-auth-callout/src/test_support.rs                                                        20      20  0.00%    16-36
crates/a2a/a2a-auth-callout/src/denial_claims.rs                                                       68       0  100.00%
crates/a2a/a2a-auth-callout/src/account_resolver.rs                                                    31       0  100.00%
crates/a2a/a2a-auth-callout/src/denial_category.rs                                                     29       0  100.00%
crates/a2a/a2a-auth-callout/src/subscriber.rs                                                          96      96  0.00%    23-174
crates/a2a/a2a-auth-callout/src/denial_reason.rs                                                       15       0  100.00%
crates/a2a/a2a-auth-callout/src/error.rs                                                                3       0  100.00%
crates/a2a/a2a-auth-callout/src/main.rs                                                                 1       1  0.00%    223
crates/a2a/a2a-auth-callout/src/permissions.rs                                                         85       0  100.00%
crates/a2a/a2a-auth-callout/src/dispatcher.rs                                                          34      13  61.76%   83-112
crates/acp/acp-nats/src/client/ext.rs                                                                  62       0  100.00%
crates/acp/acp-nats/src/client/fs_write_text_file.rs                                                   43       0  100.00%
crates/acp/acp-nats/src/client/ext_session_prompt_response.rs                                          22       0  100.00%
crates/acp/acp-nats/src/client/session_update.rs                                                        8       0  100.00%
crates/acp/acp-nats/src/client/terminal_wait_for_exit.rs                                               55       0  100.00%
crates/acp/acp-nats/src/client/mod.rs                                                                 105       1  99.05%   59
crates/acp/acp-nats/src/client/terminal_kill.rs                                                        41       0  100.00%
crates/acp/acp-nats/src/client/terminal_release.rs                                                     35       0  100.00%
crates/acp/acp-nats/src/client/elicitation_complete.rs                                                  8       0  100.00%
crates/acp/acp-nats/src/client/rpc_reply.rs                                                           107      43  59.81%   45-47, 61-63, 80-120
crates/acp/acp-nats/src/client/terminal_output.rs                                                      29       0  100.00%
crates/acp/acp-nats/src/client/elicitation_create.rs                                                   41       0  100.00%
crates/acp/acp-nats/src/client/fs_read_text_file.rs                                                    27       0  100.00%
crates/acp/acp-nats/src/client/test_support.rs                                                         17       0  100.00%
crates/acp/acp-nats/src/client/request_permission.rs                                                   40       0  100.00%
crates/acp/acp-nats/src/client/terminal_create.rs                                                      41       0  100.00%
crates/platform/trogon-std/src/time/mock.rs                                                            32       0  100.00%
crates/platform/trogon-std/src/time/system.rs                                                           9       0  100.00%
crates/a2a/a2a-nats/src/client/gateway_headers.rs                                                      19       0  100.00%
crates/a2a/a2a-nats/src/client/handle.rs                                                              218       0  100.00%
crates/a2a/a2a-nats/src/client/event_stream.rs                                                         76       0  100.00%
crates/a2a/a2a-nats/src/client/resubscribe.rs                                                          28       0  100.00%
crates/a2a/a2a-nats/src/client/unary.rs                                                                39       1  97.44%   57
crates/a2a/a2a-nats/src/client/error.rs                                                                14       0  100.00%
crates/a2a/a2a-nats/src/client/streaming.rs                                                            73       0  100.00%
crates/a2a/a2a-nats/src/client/wire.rs                                                                 13       0  100.00%
crates/aauth/trogon-aauth-as/src/pending.rs                                                            26       0  100.00%
crates/aauth/trogon-aauth-as/src/mint.rs                                                               56       0  100.00%
crates/aauth/trogon-aauth-as/src/test_support.rs                                                      122       0  100.00%
crates/aauth/trogon-aauth-as/src/http.rs                                                               82       0  100.00%
crates/aauth/trogon-aauth-as/src/server.rs                                                            139       0  100.00%
crates/aauth/trogon-aauth-as/src/trust.rs                                                              60       0  100.00%
crates/aauth/trogon-aauth-as/src/verify.rs                                                             96       0  100.00%
crates/aauth/trogon-aauth-as/src/policy.rs                                                             38       0  100.00%
crates/aauth/trogon-aauth-as/src/subagent.rs                                                           10       0  100.00%
crates/platform/trogon-jwks-publisher/src/provider.rs                                                 118       0  100.00%
crates/platform/trogon-jwks-publisher/src/publisher.rs                                                 92       0  100.00%
crates/scheduler/trogon-scheduler/src/queries/get_schedule.rs                                           3       0  100.00%
crates/scheduler/trogon-scheduler/src/queries/decode.rs                                                95       0  100.00%
crates/scheduler/trogon-scheduler/src/queries/schedule_id.rs                                           28       0  100.00%
crates/acp/acp-nats/src/nats/subjects/stream.rs                                                        56       0  100.00%
crates/a2a/a2a-nats/src/server/dispatch.rs                                                             33       0  100.00%
crates/a2a/a2a-nats/src/server/handler.rs                                                              39       0  100.00%
crates/a2a/a2a-nats/src/server/tasks_list.rs                                                           12       0  100.00%
crates/a2a/a2a-nats/src/server/push_list.rs                                                            12       0  100.00%
crates/a2a/a2a-nats/src/server/push_set.rs                                                             12       0  100.00%
crates/a2a/a2a-nats/src/server/wire.rs                                                                 34       4  88.24%   21-23, 30
crates/a2a/a2a-nats/src/server/push_delete.rs                                                          12       0  100.00%
crates/a2a/a2a-nats/src/server/push_get.rs                                                             12       0  100.00%
crates/a2a/a2a-nats/src/server/message_stream.rs                                                       56       6  89.29%   154-156, 164-166
crates/a2a/a2a-nats/src/server/tasks_cancel.rs                                                         12       0  100.00%
crates/a2a/a2a-nats/src/server/test_support.rs                                                         81      25  69.14%   134-159
crates/a2a/a2a-nats/src/server/message_send.rs                                                         15       0  100.00%
crates/a2a/a2a-nats/src/server/tasks_resubscribe.rs                                                    12       0  100.00%
crates/a2a/a2a-nats/src/server/agent_card.rs                                                           16       0  100.00%
crates/a2a/a2a-nats/src/server/bridge.rs                                                               65       0  100.00%
crates/a2a/a2a-nats/src/server/tasks_get.rs                                                            12       0  100.00%
crates/mcp/mcp-nats/src/nats/parsing.rs                                                                54       1  98.15%   13
crates/mcp/mcp-nats/src/nats/mod.rs                                                                    23       0  100.00%
crates/acp/acp-nats/src/nats/subjects/subscriptions/all_session.rs                                      9       0  100.00%
crates/acp/acp-nats/src/nats/subjects/subscriptions/one_client.rs                                      15       0  100.00%
crates/acp/acp-nats/src/nats/subjects/subscriptions/global_all.rs                                       9       0  100.00%
crates/acp/acp-nats/src/nats/subjects/subscriptions/prompt_wildcard.rs                                  9       0  100.00%
crates/acp/acp-nats/src/nats/subjects/subscriptions/one_agent.rs                                       15       0  100.00%
crates/acp/acp-nats/src/nats/subjects/subscriptions/all_agent.rs                                        9       0  100.00%
crates/acp/acp-nats/src/nats/subjects/subscriptions/all_agent_ext.rs                                    9       0  100.00%
crates/acp/acp-nats/src/nats/subjects/subscriptions/one_session.rs                                     12       0  100.00%
crates/acp/acp-nats/src/nats/subjects/subscriptions/all_client.rs                                       9       0  100.00%
crates/decider/trogon-decider/src/testing/codec.rs                                                     14       0  100.00%
crates/a2a/a2a-identity-types/src/caller.rs                                                            24       0  100.00%
crates/a2a/a2a-identity-types/src/jwt.rs                                                               71       0  100.00%
crates/a2a/a2a-identity-types/src/principal.rs                                                         16       0  100.00%
crates/a2a/a2a-gateway/src/policy/tier2/mod.rs                                                         46       0  100.00%
crates/a2a/a2a-gateway/src/policy/tier2/rule_name.rs                                                   19       0  100.00%
crates/a2a/a2a-auth-callout/src/jwt/nats_permission_claims.rs                                          10       0  100.00%
crates/a2a/a2a-auth-callout/src/jwt/user_jwt_subject.rs                                                12       0  100.00%
crates/a2a/a2a-auth-callout/src/jwt/nats_user_jwt.rs                                                  187       1  99.47%   129
crates/a2a/a2a-auth-callout/src/jwt/mod.rs                                                            232       0  100.00%
crates/platform/trogon-nats/src/lease/nats_kv_lease_config.rs                                          26       0  100.00%
crates/platform/trogon-nats/src/lease/provision.rs                                                     83      10  87.95%   82-92
crates/platform/trogon-nats/src/lease/ttl.rs                                                           27       0  100.00%
crates/platform/trogon-nats/src/lease/acquire.rs                                                        5       5  0.00%    9-14
crates/platform/trogon-nats/src/lease/lease_timing.rs                                                  15       0  100.00%
crates/platform/trogon-nats/src/lease/renew.rs                                                         82      19  76.83%   23-29, 48-59
crates/platform/trogon-nats/src/lease/lease_bucket.rs                                                  19       0  100.00%
crates/platform/trogon-nats/src/lease/renew_interval.rs                                                25       0  100.00%
crates/platform/trogon-nats/src/lease/mod.rs                                                          107      13  87.85%   113-126
crates/platform/trogon-nats/src/lease/release.rs                                                        5       5  0.00%    8-12
crates/platform/trogon-nats/src/lease/lease_key.rs                                                     19       0  100.00%
crates/a2a/a2a-auth-callout/src/signing_key_source/minting_material.rs                                 18       0  100.00%
crates/a2a/a2a-auth-callout/src/signing_key_source/vault.rs                                             3       0  100.00%
crates/a2a/a2a-auth-callout/src/signing_key_source/loader.rs                                           23       0  100.00%
crates/a2a/a2a-auth-callout/src/signing_key_source/key_version.rs                                      16       0  100.00%
crates/a2a/a2a-auth-callout/src/signing_key_source/file.rs                                             38       6  84.21%   38-40, 59-61
crates/a2a/a2a-auth-callout/src/signing_key_source/static_source.rs                                    25       0  100.00%
crates/a2a/a2a-auth-callout/src/signing_key_source/signing_key_handle.rs                               15       0  100.00%
crates/a2a/a2a-auth-callout/src/signing_key_source/env.rs                                              40       0  100.00%
crates/decider/trogon-decider-runtime/src/event/stream_event.rs                                         8       0  100.00%
crates/decider/trogon-decider-runtime/src/event/event_id.rs                                            32       0  100.00%
crates/decider/trogon-decider-runtime/src/event/event_identity.rs                                       3       0  100.00%
crates/a2a/a2a-pack/src/agent_card_schema.rs                                                           40       0  100.00%
crates/a2a/a2a-pack/src/agent_card_read.rs                                                             23       0  100.00%
crates/a2a/a2a-pack/src/resource_tuples.rs                                                            152       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/subscriptions/all_client.rs                                       6       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/subscriptions/one_client.rs                                       9       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/subscriptions/one_server.rs                                       9       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/subscriptions/all_server.rs                                       6       0  100.00%
crates/a2a/a2a-nats/src/catalog/registrar.rs                                                           56       0  100.00%
crates/a2a/a2a-nats/src/catalog/store.rs                                                              117       0  100.00%
crates/a2a/a2a-nats/src/catalog/nats_kv.rs                                                              8       0  100.00%
crates/a2a/a2a-nats/src/catalog/agent_view.rs                                                          47       0  100.00%
crates/a2a/a2a-nats/src/catalog/watch.rs                                                               18       0  100.00%
crates/a2a/a2a-nats/src/catalog/spicedb_permission.rs                                                 178      17  90.45%   148-153, 172, 337-341, 370-371, 382-384, 391-393
crates/mcp/mcp-nats/src/jsonrpc.rs                                                                      5       0  100.00%
crates/mcp/mcp-nats/src/server.rs                                                                      12       0  100.00%
crates/mcp/mcp-nats/src/client.rs                                                                      12       0  100.00%
crates/mcp/mcp-nats/src/mcp_peer_id.rs                                                                 15       0  100.00%
crates/mcp/mcp-nats/src/config.rs                                                                      59       0  100.00%
crates/mcp/mcp-nats/src/mcp_prefix.rs                                                                  15       0  100.00%
crates/mcp/mcp-nats/src/mcp_transport_headers.rs                                                       53       0  100.00%
crates/mcp/mcp-nats/src/transport.rs                                                                  224      12  94.64%   246, 258-260, 345-346, 353-354, 357-358, 401-402
crates/mcp/mcp-nats/src/wire.rs                                                                        40       1  97.50%   49
crates/a2a/a2a-nats/src/push/delivery_semantics.rs                                                     98       0  100.00%
crates/a2a/a2a-nats/src/push/push_notification_config.rs                                                6       0  100.00%
crates/a2a/a2a-nats/src/push/dlq_dedup.rs                                                              51       1  98.04%   79
crates/a2a/a2a-nats/src/push/terminal_push_task_state.rs                                               17       0  100.00%
crates/a2a/a2a-nats/src/push/push_notification_config_id.rs                                            17       0  100.00%
crates/a2a/a2a-nats/src/push/nats_push_subject.rs                                                      12       0  100.00%
crates/a2a/a2a-nats/src/push/dlq.rs                                                                    56       0  100.00%
crates/a2a/a2a-nats/src/push/authentication_header.rs                                                  31       0  100.00%
crates/a2a/a2a-nats/src/push/dispatch_error.rs                                                         24       0  100.00%
crates/a2a/a2a-nats/src/push/push_idempotency_key.rs                                                   43       0  100.00%
crates/a2a/a2a-nats/src/push/push_delivery_semantics_registry.rs                                       17       0  100.00%
crates/a2a/a2a-nats/src/push/push_notification_target.rs                                               32       0  100.00%
crates/a2a/a2a-nats/src/push/caller_id.rs                                                              41       0  100.00%
crates/a2a/a2a-nats/src/push/status_transition_id.rs                                                   15       0  100.00%
crates/a2a/a2a-nats/src/push/push_payload.rs                                                           18       0  100.00%
crates/a2a/a2a-nats/src/push/target.rs                                                                 19       0  100.00%
crates/a2a/a2a-nats/src/push/idempotency_key_header.rs                                                 16       0  100.00%
crates/a2a/a2a-nats/src/nats/subjects/agents/message_stream.rs                                         15       0  100.00%
crates/a2a/a2a-nats/src/nats/subjects/agents/card.rs                                                   12       0  100.00%
crates/a2a/a2a-nats/src/nats/subjects/agents/message_send.rs                                           15       0  100.00%
crates/platform/trogon-std/src/fs/system.rs                                                            15       0  100.00%
crates/platform/trogon-std/src/fs/mem.rs                                                               85       0  100.00%
crates/platform/trogon-gateway/src/source/telegram/config.rs                                           42       0  100.00%
crates/platform/trogon-gateway/src/source/telegram/server.rs                                           53       0  100.00%
crates/platform/trogon-gateway/src/source/telegram/signature.rs                                         7       0  100.00%
crates/platform/trogon-gateway/src/source/telegram/registration.rs                                     82       0  100.00%
crates/a2a/a2a-gateway/src/gw_pull_backpressure.rs                                                    209       3  98.56%   487, 687, 700
crates/a2a/a2a-gateway/src/agent_card_surface.rs                                                        3       0  100.00%
crates/a2a/a2a-gateway/src/jwt_caller_identity.rs                                                     151       4  97.35%   164-168, 181-185
crates/a2a/a2a-gateway/src/gw_ingress_stream.rs                                                       144       4  97.22%   312-314, 529
crates/a2a/a2a-gateway/src/runtime.rs                                                                  11       0  100.00%
crates/a2a/a2a-gateway/src/config.rs                                                                   57       0  100.00%
crates/a2a/a2a-gateway/src/audit_ingress.rs                                                           110       0  100.00%
crates/a2a/a2a-gateway/src/lib.rs                                                                       3       0  100.00%
crates/a2a/a2a-gateway/src/main.rs                                                                      1       0  100.00%
crates/a2a/a2a-gateway/src/push_dlq_mirror.rs                                                         133      16  87.97%   155-159, 211, 216-219, 229, 254, 375-382
crates/a2a/a2a-gateway/src/aauth.rs                                                                   288       0  100.00%
crates/a2a/a2a-auth-callout/src/credentials/mtls.rs                                                   153      13  91.50%   71-72, 168-169, 209-213, 216-219
crates/a2a/a2a-auth-callout/src/credentials/api_key.rs                                                 46       1  97.83%   33
crates/a2a/a2a-auth-callout/src/credentials/oidc.rs                                                   188       4  97.87%   212-215
crates/platform/trogon-std/src/signal.rs                                                               22      12  45.45%   6-11, 18-25, 34
crates/platform/trogon-std/src/json.rs                                                                 23       0  100.00%
crates/platform/trogon-std/src/uuid.rs                                                                  3       0  100.00%
crates/platform/trogon-std/src/http.rs                                                                  8       0  100.00%
crates/platform/trogon-std/src/args.rs                                                                 12       9  25.00%   11-28
crates/platform/trogon-std/src/duration.rs                                                             19       0  100.00%
crates/platform/trogon-std/src/secret_string.rs                                                        13       0  100.00%
crates/a2a/a2a-nats-stdio/src/wire.rs                                                                  22       0  100.00%
crates/a2a/a2a-nats-stdio/src/io_loop.rs                                                               49       0  100.00%
crates/a2a/a2a-nats-stdio/src/dispatch.rs                                                             212       8  96.23%   119, 122-124, 232, 235-237
crates/a2a/a2a-nats-stdio/src/runtime.rs                                                               21       0  100.00%
crates/a2a/a2a-nats-stdio/src/main.rs                                                                   1       0  100.00%
crates/scheduler/trogon-scheduler/src/projections/schedules/mod.rs                                    175       3  98.29%   708-710
crates/scheduler/trogon-scheduler/src/projections/schedules/storage.rs                                  3       0  100.00%
crates/scheduler/trogon-scheduler/src/projections/schedules/twin.rs                                    53       0  100.00%
crates/decider/trogon-decider/src/act.rs                                                               62       0  100.00%
crates/decider/trogon-decider/src/decision.rs                                                          27       0  100.00%
crates/decider/trogon-decider/src/events.rs                                                            49       0  100.00%
crates/decider/trogon-decider/src/testing.rs                                                          284       0  100.00%
crates/a2a/a2a-nats/src/catalog/import_gate/spicedb/config.rs                                          70       0  100.00%
crates/a2a/a2a-nats/src/catalog/import_gate/spicedb/mod.rs                                            108       0  100.00%
crates/a2a/a2a-nats/src/catalog/import_gate/spicedb/cache.rs                                           36       0  100.00%
crates/a2a/a2a-nats/src/catalog/import_gate/spicedb/client.rs                                          29      15  48.28%   43-69, 97-99, 108-117
crates/platform/trogon-gateway/src/config.rs                                                         1198      32  97.33%   80, 724, 891, 1038, 1041, 1050, 1136-1143, 1221, 1224, 1233, 1292, 1295, 1379, 1382, 1391, 1456, 1459, 1536, 1539, 1548, 1624, 1627, 1641, 1700, 1703, 2013-2015
crates/platform/trogon-gateway/src/source_integration_id.rs                                            28       2  92.86%   58, 60
crates/platform/trogon-gateway/src/source_plugin.rs                                                   288       3  98.96%   83, 140-141
crates/platform/trogon-gateway/src/source_status.rs                                                    12       0  100.00%
crates/platform/trogon-gateway/src/streams.rs                                                           7       0  100.00%
crates/platform/trogon-gateway/src/http.rs                                                             13       0  100.00%
crates/platform/trogon-gateway/src/main.rs                                                             26       0  100.00%
crates/a2a/a2a-nats-server/src/noop_handler.rs                                                         22       0  100.00%
crates/a2a/a2a-nats-server/src/runtime.rs                                                              17       0  100.00%
crates/a2a/a2a-nats-server/src/main.rs                                                                  1       0  100.00%
crates/acp/acp-nats/src/agent/fork_session.rs                                                          16       0  100.00%
crates/acp/acp-nats/src/agent/providers_disable.rs                                                      5       0  100.00%
crates/acp/acp-nats/src/agent/set_session_mode.rs                                                      16       0  100.00%
crates/acp/acp-nats/src/agent/test_support.rs                                                         194       0  100.00%
crates/acp/acp-nats/src/agent/providers_list.rs                                                         5       0  100.00%
crates/acp/acp-nats/src/agent/new_session.rs                                                            5       0  100.00%
crates/acp/acp-nats/src/agent/close_session.rs                                                         16       0  100.00%
crates/acp/acp-nats/src/agent/providers_set.rs                                                          5       0  100.00%
crates/acp/acp-nats/src/agent/initialize.rs                                                             6       0  100.00%
crates/acp/acp-nats/src/agent/load_session.rs                                                          16       0  100.00%
crates/acp/acp-nats/src/agent/cancel.rs                                                                12       0  100.00%
crates/acp/acp-nats/src/agent/resume_session.rs                                                        16       0  100.00%
crates/acp/acp-nats/src/agent/ext_method.rs                                                            12       0  100.00%
crates/acp/acp-nats/src/agent/authenticate.rs                                                           5       0  100.00%
crates/acp/acp-nats/src/agent/js_request.rs                                                            73       6  91.78%   84-89
crates/acp/acp-nats/src/agent/prompt.rs                                                               156       7  95.51%   202-208
crates/acp/acp-nats/src/agent/ext_notification.rs                                                      12       0  100.00%
crates/acp/acp-nats/src/agent/bridge.rs                                                               138       4  97.10%   119-122
crates/acp/acp-nats/src/agent/list_sessions.rs                                                          5       0  100.00%
crates/acp/acp-nats/src/agent/logout.rs                                                                 5       0  100.00%
crates/acp/acp-nats/src/agent/rpc_call.rs                                                              23       0  100.00%
crates/acp/acp-nats/src/agent/set_session_config_option.rs                                             16       0  100.00%
crates/acp/acp-nats/src/agent/delete_session.rs                                                        16       0  100.00%
crates/acp/acp-nats-stdio/src/config.rs                                                                15       0  100.00%
crates/acp/acp-nats-stdio/src/main.rs                                                                  56       8  85.71%   58, 101-108, 120
crates/platform/trogon-gateway/src/source/notion/notion_event_type.rs                                  20       0  100.00%
crates/platform/trogon-gateway/src/source/notion/notion_verification_token.rs                           9       0  100.00%
crates/platform/trogon-gateway/src/source/notion/server.rs                                            120       4  96.67%   116-117, 136-137
crates/platform/trogon-gateway/src/source/notion/signature.rs                                           9       0  100.00%
crates/platform/trogon-gateway/src/source/notion/verification_token.rs                                 46       0  100.00%
crates/a2a/a2a-nats/src/jetstream/provision.rs                                                         16       0  100.00%
crates/a2a/a2a-nats/src/jetstream/stream_options.rs                                                    50       0  100.00%
crates/a2a/a2a-nats/src/jetstream/streams.rs                                                            9       0  100.00%
crates/a2a/a2a-nats/src/jetstream/consumers.rs                                                         50       0  100.00%
crates/decider/trogon-decider-runtime/src/headers/header_name.rs                                       28       0  100.00%
crates/decider/trogon-decider-runtime/src/headers/header_map.rs                                        54       0  100.00%
crates/decider/trogon-decider-runtime/src/headers/header_value.rs                                      34       0  100.00%
crates/scheduler/trogon-scheduler/src/processor/execution/checkpoints/codec/twin.rs                    96       0  100.00%
crates/acp/acp-nats/src/telemetry/metrics.rs                                                           22       0  100.00%
crates/a2a/a2a-nats/src/nats/subjects/subscriptions/task_all_events.rs                                  9       0  100.00%
crates/a2a/a2a-nats/src/nats/subjects/subscriptions/agent_all.rs                                       12       0  100.00%
crates/a2a/a2a-nats/src/nats/subjects/subscriptions/task_one_events.rs                                 12       0  100.00%
TOTAL                                                                                               39413    1795  95.45%

Diff against main

Filename                                                                      Stmts    Miss  Cover
--------------------------------------------------------------------------  -------  ------  --------
crates/platform/jsonrpc-nats/src/codec/canonical.rs                            +169     +22  +86.98%
crates/platform/jsonrpc-nats/src/transport.rs                                   +10      +3  -2.83%
crates/platform/trogon-nats/src/mocks.rs                                        +22       0  +100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/task_status.rs                     +12       0  +100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/subscriptions_listen.rs            +12       0  +100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/update_task.rs                     +12       0  +100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/subscriptions_acknowledged.rs      +12       0  +100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/discover.rs                        +12       0  +100.00%
crates/mcp/mcp-nats-server/src/runtime.rs                                      +297    +189  -16.58%
crates/mcp/mcp-nats/src/nats/parsing.rs                                         -44      +1  -1.85%
crates/mcp/mcp-nats/src/mcp_transport_headers.rs                                +53       0  +100.00%
crates/mcp/mcp-nats/src/transport.rs                                            -39      +2  -1.55%
crates/mcp/mcp-nats/src/wire.rs                                                 +22      +1  -2.50%
TOTAL                                                                          +550    +218  -0.50%

Results for commit: fda0a8b

Minimum allowed coverage is 95%

♻️ This comment has been updated with latest results

teloxide default features pull native-tls, which feature-unifies onto the shared reqwest across the workspace and trips the ADR#0015 native-tls/openssl ban.

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
Copilot AI review requested due to automatic review settings July 30, 2026 04:38

Copilot AI 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.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

Comment thread rsworkspace/crates/mcp/mcp-nats/src/transport.rs
…-upgrade

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

# Conflicts:
#	rsworkspace/Cargo.lock
Copilot AI review requested due to automatic review settings July 30, 2026 04:45

Copilot AI 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.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

The chat crates carried formatting drift that fails the cargo fmt --check lint gate.

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
Copilot AI review requested due to automatic review settings July 30, 2026 04:54

Copilot AI 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.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

Comment thread rsworkspace/crates/mcp/mcp-nats-server/src/runtime.rs
The branch's code predated the policy lints merged from main: extract inline test modules to files, hoist function-local use statements, and move TEXT_CHUNK_LIMIT into a constants module.

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
Copilot AI review requested due to automatic review settings July 30, 2026 05:22

Copilot AI 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.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@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.

There are 5 total unresolved issues (including 4 from previous reviews).

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 11e124d. Configure here.

Comment thread rsworkspace/crates/chat/chat-bridge-telegram/src/render.rs Outdated
Runs license, deny bans, fmt, repo dylint policy lints, and clippy workspace-wide in one command so the full lint gate can be verified locally before pushing.

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
@yordis yordis added the rust:coverage-baseline-reset Relax Rust coverage gate to establish a new baseline label Jul 30, 2026
Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
Copilot AI review requested due to automatic review settings July 30, 2026 06:06
@yordis
yordis changed the base branch from main to telegram July 30, 2026 06:06

Copilot AI 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.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@yordis
yordis changed the base branch from telegram to main July 30, 2026 06:10
Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
Copilot AI review requested due to automatic review settings July 30, 2026 06:12

Copilot AI 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.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@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: 3

🤖 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 @.config/mise/tasks/rust-lint:
- Around line 14-16: Make the workspace setup in the rust-lint script fail
closed: enable errexit or explicitly validate the `cd "$RSWS"` command, so the
script stops immediately when entering `rsworkspace` fails and never runs
subsequent cargo commands from the caller’s directory.
- Around line 69-73: Update the toolchain configuration parsing around
DYLINT_TOOLCHAIN_CONFIG to capture and validate the Python parser’s exit status
before accessing the array, and verify the required channel and components TOML
keys before continuing. On any parsing or validation failure, emit the
policy-lint step’s RESULT: FAIL message and exit through the existing failure
path. Use a Python parser compatible with the supported runtime, including
environments older than 3.11, instead of relying unconditionally on tomllib.
- Around line 43-52: Update the Cargo manifest parsing in the rust-lint
package-license check to parse TOML semantically, using the `[package].license`
value rather than matching the exact `license = "Apache-2.0"` line. Accept
equivalent formatting and inline comments, while separately rejecting manifests
that use `license.workspace = true` when a literal per-crate license declaration
is required; preserve the existing `pkg.get("license")` validation.
🪄 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 Plus

Run ID: 51ef9b73-fd21-41fa-a6a5-1b7a55fefae3

📥 Commits

Reviewing files that changed from the base of the PR and between df00c11 and 7529a0c.

⛔ Files ignored due to path filters (1)
  • rsworkspace/Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (4)
  • .config/mise/tasks/rust-lint
  • rsworkspace/Cargo.toml
  • rsworkspace/crates/mcp/mcp-nats/src/nats/parsing/tests.rs
  • rsworkspace/crates/mcp/mcp-nats/src/transport/tests.rs
💤 Files with no reviewable changes (1)
  • rsworkspace/Cargo.toml
🚧 Files skipped from review as they are similar to previous changes (2)
  • rsworkspace/crates/mcp/mcp-nats/src/nats/parsing/tests.rs
  • rsworkspace/crates/mcp/mcp-nats/src/transport/tests.rs

Comment thread .config/mise/tasks/rust-lint Outdated
Comment thread .config/mise/tasks/rust-lint Outdated
Comment thread .config/mise/tasks/rust-lint Outdated
Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
Copilot AI review requested due to automatic review settings July 30, 2026 06:47

Copilot AI 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.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@yordis
yordis merged commit e79ee79 into main Jul 30, 2026
16 checks passed
@yordis
yordis deleted the yordis/mcp-2026-07-28-upgrade branch July 30, 2026 07:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

rust:coverage-baseline-reset Relax Rust coverage gate to establish a new baseline

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants