Skip to content

fix(rust): close the gaps between a verified credential and a trusted one - #531

Merged
yordis merged 32 commits into
mainfrom
yordis/davao-v1
Aug 8, 2026
Merged

fix(rust): close the gaps between a verified credential and a trusted one#531
yordis merged 32 commits into
mainfrom
yordis/davao-v1

Conversation

@yordis

@yordis yordis commented Aug 7, 2026

Copy link
Copy Markdown
Member

Summary

Every change here came out of auditing our own credential surfaces against the siblings we had already hardened, and finding places where a successful verification did not establish what the code downstream assumed it had established. The gaps were consistent in shape: a signature covering less than the request it arrived with, a publisher's declared key purpose accepted but never honored, a token free to nominate the algorithm that verifies it, a fail-open path where the operator had explicitly asked for verification, and a dedup window keyed on something a replay could vary.

Note

ADR 0053 records the external federation surface these verifiers now front, and the edits to the existing ADRs bring the corpus back in line with what is actually built rather than what was once planned.

yordis added 9 commits August 7, 2026 18:11
… was sent with

The signature bound only the Content-Digest header string, so the digest a
peer signed was never checked against the bytes that arrived.

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
A JWKS publisher that sets use, key_ops, or alg has stated the key's purpose,
and ignoring that lets a key be conscripted into a job it was never offered for.

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
…t one that does not

The docs promised a JetStream-backed production store in trogon-aauth-person;
no such implementation ships, which understates the multi-replica gap.

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
…hed confirmation claim

Three mint sites embedded a caller-supplied JWK verbatim into cnf and signed
it, so one careless caller could publish a private key in a token.

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
Dedup keyed on an unsigned header an attacker can vary freely, and the stream
had no duplicate window, so the guarantee was absent rather than weak.

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
…was asked for

A typo in the signing key parsed to None and read as verification-not-wanted,
so the misconfiguration silently cost the very check it was meant to enable.

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
Code signing is the wrong place to accept the permissive default, which lets
one signature validate under more than one public key.

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

The validator was built from the token's own header, so its algorithm check
compared the header against itself and admitted whatever was asserted.

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
…he corpus claims exists

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

cursor Bot commented Aug 7, 2026

Copy link
Copy Markdown

PR Summary

High Risk
Changes span authentication, JWT/OIDC/AAuth verification, gateway wasm policy boot, and webhook dedup—any regression could deny legitimate traffic or weaken verification; behavior changes are intentional fail-closed postures operators must understand.

Overview
Closes audit findings where verification succeeding did not imply what downstream assumed—signatures covering headers but not bodies, JWK metadata ignored, tokens picking algorithms, fail-open when operators asked for verification, and dedup keyed on attacker-controlled fields.

Verification and issuance: OIDC and AAuth JWT paths now enforce deployment algorithm allowlists and honor JWK use, key_ops, and alg so encryption or wrong-algorithm keys are not used for signature verify. HTTP AAuth PoP recomputes Content-Digest against the body when the header is present (aligned with NATS PoP). Confirmation claims are built only via Cnf::public, blocking private or symmetric JWK material at mint across Person/AS, agent provider, and tests. Wasm bundle Ed25519 checks use verify_strict.

Gateway and ingress: Tier-3 bundle signing env parsing distinguishes unset vs invalid pubkey; an invalid configured key refuses to load policy bundles instead of running unverified wasm. GitLab webhooks set JetStream Nats-Msg-Id from the signed webhook-id, reconcile duplicate_window to signature tolerance, and add stream create-or-reconcile in trogon-nats. JWKS discovery rejects duplicate or missing kid in multi-key sets at startup.

Hygiene: JWT/bearer types use redacted Debug. ADR #53 (draft) documents external OIDC federation; related ADRs are updated for discovery-mode admission, replay-store reality, RSA federation, and revocation scope.

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

@coderabbitai

coderabbitai Bot commented Aug 7, 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: 10 minutes

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

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: 3ea04fb5-217f-458e-bf8b-c88a9ad67066

📥 Commits

Reviewing files that changed from the base of the PR and between 19fe392 and b771fb5.

📒 Files selected for processing (2)
  • rsworkspace/crates/aauth/trogon-aauth-verify/src/http_pop.rs
  • rsworkspace/crates/aauth/trogon-aauth-verify/src/http_pop/tests.rs

Walkthrough

The pull request defines external OIDC federation, validates confirmation and token JWK metadata, verifies HTTP content digests, distinguishes gateway signing-key states, strengthens signed-bundle verification, redacts credential debug output, reconciles JetStream streams, and propagates signed GitLab webhook identifiers.

Changes

External OIDC federation

Layer / File(s) Summary
Federation decision and policy
docs/adr/*
The ADRs define external OIDC discovery, RSA/RS256 federation, exact issuer bindings, revocation boundaries, and related references.
OIDC algorithm and JWK validation
rsworkspace/crates/a2a/a2a-auth-callout/src/constants.rs, rsworkspace/crates/a2a/a2a-auth-callout/src/credentials/oidc.rs, rsworkspace/crates/a2a/a2a-auth-callout/src/credentials/oidc/tests.rs
OIDC verification restricts algorithms and validates JWK purpose, operations, and declared algorithms.

Confirmation-key validation

Layer / File(s) Summary
Public confirmation-key contract
rsworkspace/crates/platform/trogon-identity-types/src/aauth/*, rsworkspace/crates/platform/trogon-identity-types/src/constants.rs
Cnf::public validates public EC, RSA, and OKP JWKs.
Minting and accessor integration
rsworkspace/crates/aauth/*, rsworkspace/crates/platform/trogon-jwks-publisher/src/provider.rs, rsworkspace/crates/a2a/a2a-gateway/tests/aauth_roundtrip.rs
Minting and verification paths use Cnf::public and jwk(), and propagate CnfError.

Gateway policy verification

Layer / File(s) Summary
Tier 3 signing-key validation
rsworkspace/crates/a2a/a2a-gateway/src/runtime/*
Signing-key configuration distinguishes NotConfigured, Configured, and Invalid states. Invalid configured keys produce a no-op policy stack.
Strict signed-bundle verification
rsworkspace/crates/a2a/a2a-redaction/src/signed_bundle/verify.rs
Ed25519 signature verification uses strict validation.

AAuth request and token verification

Layer / File(s) Summary
HTTP content-digest verification
rsworkspace/crates/aauth/trogon-aauth-verify/src/http_pop*
The verifier recomputes SHA-256 digests and rejects unsupported, malformed, mismatched, or missing-body content.
Replay-store scope
rsworkspace/crates/aauth/trogon-aauth-verify/src/replay.rs
Documentation states that replay protection is process-local and has no shared-store fallback.
Resource-token JWK compatibility
rsworkspace/crates/aauth/trogon-aauth-verify/src/token*
Token verification checks JWK purpose, key_ops, and alg metadata while allowing omitted optional metadata.

GitLab webhook delivery

Layer / File(s) Summary
Verified webhook propagation and deduplication
rsworkspace/crates/platform/trogon-gateway/src/source/gitlab/*
The signed webhook ID becomes the NATS message ID and deduplication key. The idempotency key remains a separate header.
JetStream stream reconciliation
rsworkspace/crates/platform/trogon-nats/src/jetstream/*
Stream provisioning creates absent streams or merges service-owned settings into existing streams.
Bucket recovery flow
rsworkspace/crates/channel/trogon-channel/src/store.rs, rsworkspace/crates/channel/trogon-channel/src/store/tests.rs
Bucket recovery separates missing-bucket creation from other lookup failures and tests conflict handling deterministically.

Credential debug redaction

Layer / File(s) Summary
JWT and response redaction
rsworkspace/crates/a2a/a2a-auth-callout/src/{caller_jwt_header.rs,credentials/oidc.rs,jwt/*,wire/*}, rsworkspace/crates/a2a/a2a-identity-types/src/jwt*
Credential Debug implementations emit <redacted> instead of JWT or encoded response values.

JWKS publisher validation

Layer / File(s) Summary
JWK set registration validation
rsworkspace/crates/platform/trogon-jwks-publisher/src/publisher*
Publisher registration rejects duplicate key IDs and unidentified keys in multi-key sets.

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

Possibly related PRs

Poem

A rabbit checks each public key,
And keeps unsafe claims away.
Digests guard the signed request,
Webhook IDs mark each message best.
Streams reconcile, tokens hide—
Secure hops from side to side.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main change: closing security gaps between credential verification and trust.
Description check ✅ Passed The description directly explains the credential-verification gaps addressed by the changeset and references the related ADR updates.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch yordis/davao-v1

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/platform/trogon-gateway/src/source/gitlab/server.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: 6

🧹 Nitpick comments (1)
rsworkspace/crates/platform/trogon-gateway/src/source/gitlab/server/tests.rs (1)

371-371: 🗄️ Data Integrity & Integration | 🔵 Trivial | 🏗️ Heavy lift

Exercise duplicate rejection, not only header construction.

This test sends one request and inspects NATS_MESSAGE_ID. It does not send a replay or assert that JetStream suppresses the second delivery. Add a test that submits the same signed request twice within the configured duplicate window and asserts one stored delivery. Use a JetStream-backed test or a mock that models duplicate handling. The duplicate_window setting is stream-level behavior. (docs.rs)

Also applies to: 397-407

🤖 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/trogon-gateway/src/source/gitlab/server/tests.rs`
at line 371, The test dedup_id_comes_from_signed_webhook_id_not_idempotency_key
currently verifies only the NATS_MESSAGE_ID header; extend it to submit the
identical signed request twice within the configured duplicate_window and assert
that JetStream stores or delivers only one message. Use a JetStream-backed
fixture or a duplicate-aware mock, and preserve the existing assertion that the
deduplication ID comes from the signed webhook ID.

Sources: Coding guidelines, MCP tools

🤖 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/0038-agent-identity-crypto-suite.md`:
- Around line 158-170: Update the RSA-2048/RS256 profile in ADR 0038 to define
the key as signing material owned by the separate federation issuer from
ADR#0053, not as an additional key bound to an agent identity. Preserve agent
identity only in assertion claims, and add issuer-specific custody and rotation
guidance distinct from agent key management.

In `@docs/adr/0053-external-oidc-federation-surface.md`:
- Around line 144-150: Update the offboarding discussion in the paragraph
beginning “Standing across the boundary” to distinguish future exchanges from
already-issued tokens: state that assertion TTL and deletion of the Decision 3
binding bound future exchanges, while an existing external resource token
remains valid until its own expiry or revocation by the external provider.
Preserve the requirement to revoke on both planes.

In `@rsworkspace/crates/a2a/a2a-auth-callout/src/credentials/oidc.rs`:
- Around line 283-295: Replace the formatted InvalidCredentials returns in the
OIDC verification flow with dedicated typed CredentialError variants that retain
the unsupported algorithm, JWK kid, and rejection reason. Add the variants to
CredentialError and render their user-facing messages in its Display
implementation, updating the algorithm and jwk_permits_verification_with checks
without changing other credential failures.

In `@rsworkspace/crates/aauth/trogon-aauth-verify/src/http_pop.rs`:
- Around line 551-565: Update parse_sha256_content_digest to parse raw as a
complete Structured Fields Dictionary, accepting sha-256 Items with parameters
and applying last-member-wins behavior for duplicate sha-256 keys. Use the
existing Structured Fields parser if available, otherwise implement equivalent
Dictionary parsing, and add tests covering parameterized Items and duplicate
keys.

In `@rsworkspace/crates/platform/trogon-gateway/src/source/gitlab/server.rs`:
- Line 90: Update the GitLab stream setup around the get_or_create_stream call
so an existing GITLAB stream is reconciled with duplicate_window set from
config.timestamp_tolerance. When creation does not apply the value, call the
NatsJetStreamClient update_stream path for the existing stream while preserving
normal creation behavior and error propagation.

In `@rsworkspace/crates/platform/trogon-identity-types/src/aauth/mod.rs`:
- Around line 54-70: The Cnf::public constructor currently permits incomplete
public JWKs, and the public Cnf::jwk field bypasses validation. Make jwk
private, introduce a distinct input type for issuer-side construction that
converts into a typed validated public-JWK value, and validate all required
public parameters for each supported kty before constructing Cnf. Keep
peer-supplied claim deserialization separate from Cnf::public so every
issuer-created Cnf is guaranteed usable.

---

Nitpick comments:
In
`@rsworkspace/crates/platform/trogon-gateway/src/source/gitlab/server/tests.rs`:
- Line 371: The test dedup_id_comes_from_signed_webhook_id_not_idempotency_key
currently verifies only the NATS_MESSAGE_ID header; extend it to submit the
identical signed request twice within the configured duplicate_window and assert
that JetStream stores or delivers only one message. Use a JetStream-backed
fixture or a duplicate-aware mock, and preserve the existing assertion that the
deduplication ID comes from the signed webhook ID.
🪄 Autofix

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: 9aef4a2d-3713-47f2-873f-58b0a2ed70b0

📥 Commits

Reviewing files that changed from the base of the PR and between 1fac0af and 8cf3fd8.

📒 Files selected for processing (33)
  • docs/adr/0017-aauth-agent-authentication.md
  • docs/adr/0036-agent-self-certifying-identity.md
  • docs/adr/0038-agent-identity-crypto-suite.md
  • docs/adr/0049-revocation-latency-target.md
  • docs/adr/0053-external-oidc-federation-surface.md
  • docs/adr/index.md
  • rsworkspace/crates/a2a/a2a-auth-callout/src/constants.rs
  • rsworkspace/crates/a2a/a2a-auth-callout/src/credentials/oidc.rs
  • rsworkspace/crates/a2a/a2a-auth-callout/src/credentials/oidc/tests.rs
  • rsworkspace/crates/a2a/a2a-gateway/src/runtime/env.rs
  • rsworkspace/crates/a2a/a2a-gateway/src/runtime/env/tests.rs
  • rsworkspace/crates/a2a/a2a-gateway/src/runtime/policy_stack.rs
  • rsworkspace/crates/a2a/a2a-gateway/src/runtime/policy_stack/tests.rs
  • rsworkspace/crates/a2a/a2a-redaction/src/signed_bundle/verify.rs
  • rsworkspace/crates/aauth/trogon-aauth-as/src/error.rs
  • rsworkspace/crates/aauth/trogon-aauth-as/src/mint.rs
  • rsworkspace/crates/aauth/trogon-aauth-person/src/error.rs
  • rsworkspace/crates/aauth/trogon-aauth-person/src/mint.rs
  • rsworkspace/crates/aauth/trogon-aauth-verify/Cargo.toml
  • rsworkspace/crates/aauth/trogon-aauth-verify/src/http_pop.rs
  • rsworkspace/crates/aauth/trogon-aauth-verify/src/http_pop/tests.rs
  • rsworkspace/crates/aauth/trogon-aauth-verify/src/replay.rs
  • rsworkspace/crates/aauth/trogon-aauth-verify/src/token.rs
  • rsworkspace/crates/aauth/trogon-aauth-verify/src/token/tests.rs
  • rsworkspace/crates/platform/trogon-gateway/src/source/gitlab/constants.rs
  • rsworkspace/crates/platform/trogon-gateway/src/source/gitlab/server.rs
  • rsworkspace/crates/platform/trogon-gateway/src/source/gitlab/server/tests.rs
  • rsworkspace/crates/platform/trogon-gateway/src/source/gitlab/signature.rs
  • rsworkspace/crates/platform/trogon-identity-types/src/aauth/mod.rs
  • rsworkspace/crates/platform/trogon-identity-types/src/aauth/tests.rs
  • rsworkspace/crates/platform/trogon-identity-types/src/constants.rs
  • rsworkspace/crates/platform/trogon-jwks-publisher/src/provider.rs
  • rsworkspace/crates/platform/trogon-jwks-publisher/src/provider/tests.rs

Comment thread docs/adr/0038-agent-identity-crypto-suite.md
Comment thread docs/adr/0053-external-oidc-federation-surface.md Outdated
Comment thread rsworkspace/crates/a2a/a2a-auth-callout/src/credentials/oidc.rs
Comment thread rsworkspace/crates/aauth/trogon-aauth-verify/src/http_pop.rs
Comment thread rsworkspace/crates/platform/trogon-gateway/src/source/gitlab/server.rs Outdated
Comment thread rsworkspace/crates/platform/trogon-identity-types/src/aauth/mod.rs
@github-actions

github-actions Bot commented Aug 7, 2026

Copy link
Copy Markdown

badge

Code Coverage Summary

Details
Filename                                                                                            Stmts    Miss  Cover    Missing
------------------------------------------------------------------------------------------------  -------  ------  -------  ----------------------------------------------------------------------------------------------------------------------------------------------------------------
crates/acp/acp-nats/src/acp_prefix.rs                                                                  13       0  100.00%
crates/acp/acp-nats/src/in_flight_slot_guard.rs                                                         9       0  100.00%
crates/acp/acp-nats/src/config.rs                                                                      84       0  100.00%
crates/acp/acp-nats/src/req_id.rs                                                                      21       0  100.00%
crates/acp/acp-nats/src/error.rs                                                                       31       0  100.00%
crates/acp/acp-nats/src/session_id.rs                                                                  21       0  100.00%
crates/acp/acp-nats/src/ext_method_name.rs                                                             18       0  100.00%
crates/acp/acp-nats/src/lib.rs                                                                         11       0  100.00%
crates/acp/acp-nats/src/wire.rs                                                                        80      14  82.50%   38, 46-60, 103
crates/acp/acp-nats/src/pending_prompt_waiters.rs                                                      68       0  100.00%
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/client_proxy.rs                                                                67       1  98.51%   57
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/platform/trogon-std/src/env/enumerate_env.rs                                                     6       0  100.00%
crates/platform/trogon-std/src/env/system.rs                                                           12       0  100.00%
crates/platform/trogon-std/src/env/read_env.rs                                                          3       0  100.00%
crates/platform/trogon-std/src/env/in_memory.rs                                                        30       0  100.00%
crates/decider/trogon-decider-runtime/src/replay_limit.rs                                              26       0  100.00%
crates/decider/trogon-decider-runtime/src/execution.rs                                                626       3  99.52%   73, 187-188
crates/decider/trogon-decider-runtime/src/memory.rs                                                   104       5  95.19%   77-82
crates/scheduler/trogon-scheduler-domain/src/subject.rs                                                26       0  100.00%
crates/mcp/mcp-nats/src/nats/mod.rs                                                                    23       0  100.00%
crates/mcp/mcp-nats/src/nats/parsing.rs                                                                54       1  98.15%   13
crates/aauth/trogon-aauth-person/src/login.rs                                                           3       0  100.00%
crates/aauth/trogon-aauth-person/src/agent.rs                                                          84       0  100.00%
crates/aauth/trogon-aauth-person/src/pending.rs                                                        73       0  100.00%
crates/aauth/trogon-aauth-person/src/store.rs                                                          21       0  100.00%
crates/aauth/trogon-aauth-person/src/interaction.rs                                                     2       0  100.00%
crates/aauth/trogon-aauth-person/src/server.rs                                                        353       0  100.00%
crates/aauth/trogon-aauth-person/src/subagent.rs                                                       10       0  100.00%
crates/aauth/trogon-aauth-person/src/error.rs                                                          48       0  100.00%
crates/aauth/trogon-aauth-person/src/mint.rs                                                           56       0  100.00%
crates/aauth/trogon-aauth-person/src/mission.rs                                                        65       0  100.00%
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%   85-86
crates/a2a/a2a-redaction/src/signed_bundle/digest.rs                                                   26       0  100.00%
crates/a2a/a2a-redaction/src/signed_bundle/public_key.rs                                               36       2  94.44%   44-45
crates/a2a/a2a-redaction/src/signed_bundle/signature.rs                                                30       3  90.00%   37-39
crates/platform/trogon-gateway/src/source/linear/config.rs                                              9       0  100.00%
crates/platform/trogon-gateway/src/source/linear/server.rs                                             83       0  100.00%
crates/platform/trogon-gateway/src/source/linear/signature.rs                                           8       1  87.50%   16
crates/a2a/a2a-gateway/src/policy/tier1_declarative/time_predicate.rs                                 118       2  98.31%   103, 125
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-nats-stdio/src/wire.rs                                                                  22       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/io_loop.rs                                                               49       0  100.00%
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/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-gateway/src/source/twitter/server.rs                                           144       0  100.00%
crates/acp/acp-nats/src/nats/subjects/responses/cancelled.rs                                           15       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/response.rs                                            20       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/update.rs                                              20       0  100.00%
crates/decider/trogon-decider/src/testing/codec.rs                                                     14       0  100.00%
crates/a2a/a2a-nats/src/nats/subjects/stream.rs                                                        50       0  100.00%
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/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/log.rs                                                            36       0  100.00%
crates/platform/trogon-telemetry/src/resource_attribute.rs                                             13       0  100.00%
crates/platform/trogon-telemetry/src/service_name.rs                                                   18       0  100.00%
crates/platform/trogon-telemetry/src/metric.rs                                                         18       1  94.44%   30
crates/platform/trogon-telemetry/src/trace.rs                                                          15       1  93.33%   24
crates/platform/trogon-gateway/src/source/gitlab/signature.rs                                          12       0  100.00%
crates/platform/trogon-gateway/src/source/gitlab/gitlab_signing_token.rs                               30       0  100.00%
crates/platform/trogon-gateway/src/source/gitlab/server.rs                                             89       0  100.00%
crates/decider/trogon-decider-sim/src/import_check.rs                                                  52       4  92.31%   81-83, 103
crates/decider/trogon-decider-sim/src/native.rs                                                        81       2  97.53%   196, 214
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/session.rs                                                       23       4  82.61%   47-55
crates/decider/trogon-decider-sim/src/host.rs                                                          69       0  100.00%
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/parity.rs                                                        66       6  90.91%   91-93, 95-97
crates/a2a/a2a-gateway/src/policy/tier2/rule_name.rs                                                   19       0  100.00%
crates/a2a/a2a-gateway/src/policy/tier2/mod.rs                                                         46       0  100.00%
crates/channel/trogon-channel/src/event.rs                                                             99       0  100.00%
crates/channel/trogon-channel/src/store.rs                                                            154       0  100.00%
crates/channel/trogon-channel/src/command_trigger_input.rs                                             12       0  100.00%
crates/channel/trogon-channel/src/conversation.rs                                                      33       0  100.00%
crates/channel/trogon-channel/src/safe_token.rs                                                        30       0  100.00%
crates/channel/trogon-channel/src/agent_port.rs                                                        26       0  100.00%
crates/channel/trogon-channel/src/endpoint.rs                                                          64       0  100.00%
crates/channel/trogon-channel/src/command.rs                                                           33       0  100.00%
crates/channel/trogon-channel/src/command_trigger.rs                                                   13       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/client.rs                                                                      12       0  100.00%
crates/mcp/mcp-nats/src/config.rs                                                                      59       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/mcp_peer_id.rs                                                                 15       0  100.00%
crates/mcp/mcp-nats/src/wire.rs                                                                        40       1  97.50%   49
crates/mcp/mcp-nats/src/server.rs                                                                      12       0  100.00%
crates/mcp/mcp-nats/src/jsonrpc.rs                                                                      5       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/agents/push/list.rs                                              15       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/get.rs                                               12       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/message_send.rs                                           15       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/decider/trogon-decider-runtime/src/headers/header_value.rs                                      34       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_name.rs                                       28       0  100.00%
crates/scheduler/trogon-scheduler/src/processor/execution/execution_schedules/mod.rs                   82       0  100.00%
crates/a2a/a2a-nats/src/push/caller_id.rs                                                              41       0  100.00%
crates/a2a/a2a-nats/src/push/authentication_header.rs                                                  31       0  100.00%
crates/a2a/a2a-nats/src/push/push_notification_target.rs                                               32       0  100.00%
crates/a2a/a2a-nats/src/push/delivery_semantics.rs                                                     98       0  100.00%
crates/a2a/a2a-nats/src/push/dlq.rs                                                                    56       0  100.00%
crates/a2a/a2a-nats/src/push/dlq_dedup.rs                                                              51       1  98.04%   79
crates/a2a/a2a-nats/src/push/nats_push_subject.rs                                                      12       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/push/dispatch_error.rs                                                         24       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_config_id.rs                                            17       0  100.00%
crates/a2a/a2a-nats/src/push/terminal_push_task_state.rs                                               17       0  100.00%
crates/a2a/a2a-nats/src/push/status_transition_id.rs                                                   15       0  100.00%
crates/a2a/a2a-nats/src/push/push_idempotency_key.rs                                                   43       0  100.00%
crates/a2a/a2a-nats/src/push/push_notification_config.rs                                                6       0  100.00%
crates/a2a/a2a-nats/src/push/push_payload.rs                                                           18       0  100.00%
crates/platform/trogonai-proto/src/session/sessions/validate.rs                                       689       0  100.00%
crates/platform/trogonai-proto/src/session/sessions/codec.rs                                          152       0  100.00%
crates/a2a/a2a-identity-types/src/jwt.rs                                                               77       0  100.00%
crates/a2a/a2a-identity-types/src/principal.rs                                                         16       0  100.00%
crates/a2a/a2a-identity-types/src/caller.rs                                                            24       0  100.00%
crates/acp/acp-nats/src/agent/js_request.rs                                                            73       6  91.78%   84-89
crates/acp/acp-nats/src/agent/authenticate.rs                                                           5       0  100.00%
crates/acp/acp-nats/src/agent/fork_session.rs                                                          16       0  100.00%
crates/acp/acp-nats/src/agent/new_session.rs                                                            5       0  100.00%
crates/acp/acp-nats/src/agent/prompt.rs                                                               156       7  95.51%   202-208
crates/acp/acp-nats/src/agent/providers_list.rs                                                         5       0  100.00%
crates/acp/acp-nats/src/agent/test_support.rs                                                         194       0  100.00%
crates/acp/acp-nats/src/agent/ext_notification.rs                                                      12       0  100.00%
crates/acp/acp-nats/src/agent/initialize.rs                                                             6       0  100.00%
crates/acp/acp-nats/src/agent/providers_set.rs                                                          5       0  100.00%
crates/acp/acp-nats/src/agent/rpc_call.rs                                                              23       0  100.00%
crates/acp/acp-nats/src/agent/cancel.rs                                                                12       0  100.00%
crates/acp/acp-nats/src/agent/close_session.rs                                                         16       0  100.00%
crates/acp/acp-nats/src/agent/delete_session.rs                                                        16       0  100.00%
crates/acp/acp-nats/src/agent/set_session_mode.rs                                                      16       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/set_session_config_option.rs                                             16       0  100.00%
crates/acp/acp-nats/src/agent/ext_method.rs                                                            12       0  100.00%
crates/acp/acp-nats/src/agent/resume_session.rs                                                        16       0  100.00%
crates/acp/acp-nats/src/agent/load_session.rs                                                          16       0  100.00%
crates/acp/acp-nats/src/agent/providers_disable.rs                                                      5       0  100.00%
crates/scheduler/trogon-scheduler/src/processor/execution/worker/consumer.rs                           77       0  100.00%
crates/scheduler/trogon-scheduler/src/processor/execution/worker/processor.rs                         307      10  96.74%   441-442, 448, 503-505, 537-540
crates/scheduler/trogon-scheduler/src/processor/execution/worker/dispatcher.rs                        281       1  99.64%   202
crates/scheduler/trogon-scheduler/src/processor/execution/worker/testkit.rs                           312       0  100.00%
crates/a2a/a2a-auth-callout/src/account_resolver.rs                                                    31       0  100.00%
crates/a2a/a2a-auth-callout/src/denial_claims.rs                                                       68       0  100.00%
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/a2a/a2a-auth-callout/src/caller_jwt_header.rs                                                   23       0  100.00%
crates/a2a/a2a-auth-callout/src/subscriber.rs                                                          96      96  0.00%    23-174
crates/a2a/a2a-auth-callout/src/denial_category.rs                                                     29       0  100.00%
crates/a2a/a2a-auth-callout/src/test_support.rs                                                        20      20  0.00%    16-36
crates/acp/acp-nats/src/nats/extensions.rs                                                              3       0  100.00%
crates/acp/acp-nats/src/nats/jsonrpc.rs                                                                51      11  78.43%   46, 54-55, 57-63, 81-83
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/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/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/rewrite.rs                                           49       0  100.00%
crates/a2a/a2a-gateway/src/policy/tier3_redaction/mod.rs                                               33       2  93.94%   54, 58
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/a2a/a2a-gateway/src/policy/tier3_redaction/gate.rs                                               3       0  100.00%
crates/a2a/a2a-gateway/src/policy/tier3_redaction/manifest.rs                                          69       3  95.65%   112, 121, 132
crates/ard/ard-catalog/src/catalog_host_wire.rs                                                         6       0  100.00%
crates/ard/ard-catalog/src/catalog_entry.rs                                                           107       0  100.00%
crates/ard/ard-catalog/src/media_type.rs                                                               20       0  100.00%
crates/ard/ard-catalog/src/federation_mode.rs                                                           3       0  100.00%
crates/ard/ard-catalog/src/ard_identifier.rs                                                           54       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/metadata.rs                                                                 14       0  100.00%
crates/ard/ard-catalog/src/catalog_entry_wire.rs                                                        3       0  100.00%
crates/ard/ard-catalog/src/representative_queries.rs                                                   18       0  100.00%
crates/ard/ard-catalog/src/trust_manifest.rs                                                           45       1  97.78%   35
crates/ard/ard-catalog/src/ard_storage_key.rs                                                          10       0  100.00%
crates/ard/ard-catalog/src/catalog_manifest.rs                                                         44       0  100.00%
crates/ard/ard-catalog/src/display_name.rs                                                             13       0  100.00%
crates/ard/ard-catalog/src/registry_error_wire.rs                                                       8       0  100.00%
crates/ard/ard-catalog/src/url_or_data.rs                                                              20       0  100.00%
crates/ard/ard-catalog/src/catalog_manifest_wire.rs                                                     3       0  100.00%
crates/ard/ard-catalog/src/catalog_host.rs                                                             26       0  100.00%
crates/aauth/trogon-aauth-as/src/http.rs                                                               82       0  100.00%
crates/aauth/trogon-aauth-as/src/mint.rs                                                               53       0  100.00%
crates/aauth/trogon-aauth-as/src/pending.rs                                                            26       0  100.00%
crates/aauth/trogon-aauth-as/src/test_support.rs                                                      122       0  100.00%
crates/aauth/trogon-aauth-as/src/policy.rs                                                             38       0  100.00%
crates/aauth/trogon-aauth-as/src/verify.rs                                                             96       0  100.00%
crates/aauth/trogon-aauth-as/src/trust.rs                                                              60       0  100.00%
crates/aauth/trogon-aauth-as/src/server.rs                                                            139       0  100.00%
crates/aauth/trogon-aauth-as/src/subagent.rs                                                           10       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/session_request_permission.rs                         12       0  100.00%
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_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/terminal_output.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/elicitation_complete.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/fs_write_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/ard/ard-nats/src/store.rs                                                                        3       0  100.00%
crates/ard/ard-nats/src/memory_catalog_store.rs                                                        32       0  100.00%
crates/ard/ard-nats/src/catalog_event.rs                                                               71       0  100.00%
crates/ard/ard-nats/src/catalog_index.rs                                                               82       2  97.56%   37, 104
crates/ard/ard-nats/src/catalog_subject.rs                                                             14       3  78.57%   16-18
crates/acp/acp-nats/src/jetstream/streams.rs                                                           18       0  100.00%
crates/acp/acp-nats/src/jetstream/consumers.rs                                                         41       0  100.00%
crates/acp/acp-nats/src/jetstream/provision.rs                                                         13       0  100.00%
crates/acp/acp-nats/src/jetstream/ext_policy.rs                                                         3       0  100.00%
crates/decider/trogon-decider-wit/src/lib.rs                                                           53       1  98.11%   35
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/create_schedule.rs                               32       0  100.00%
crates/scheduler/trogon-scheduler-domain/src/commands/remove_schedule.rs                               30       0  100.00%
crates/scheduler/trogon-scheduler-domain/src/commands/pause_schedule.rs                                31       0  100.00%
crates/scheduler/trogon-scheduler-domain/src/commands/proto_wire.rs                                   138       1  99.28%   231
crates/acp/acp-nats/src/nats/subjects/global/session_new.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/authenticate.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/providers_disable.rs                                       6       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/session_list.rs                                            6       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/platform/trogon-gateway/src/source/notion/notion_verification_token.rs                           9       0  100.00%
crates/platform/trogon-gateway/src/source/notion/notion_event_type.rs                                  20       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/verification_token.rs                                 46       0  100.00%
crates/platform/trogon-gateway/src/source/notion/signature.rs                                           9       0  100.00%
crates/scheduler/trogon-scheduler/src/projections/schedules/mod.rs                                    176       3  98.30%   702-704
crates/scheduler/trogon-scheduler/src/projections/schedules/twin.rs                                    53       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/server_auth_request_envelope.rs                                   68       1  98.53%   64
crates/a2a/a2a-auth-callout/src/wire/nkey_seed.rs                                                      20       0  100.00%
crates/a2a/a2a-auth-callout/src/wire/bridge_adapter.rs                                                 73       0  100.00%
crates/a2a/a2a-auth-callout/src/wire/callout_auth_response_claims.rs                                   59       3  94.92%   82-84
crates/a2a/a2a-auth-callout/src/wire/test_encode.rs                                                    59       0  100.00%
crates/a2a/a2a-auth-callout/src/wire/wire_codec.rs                                                     58       0  100.00%
crates/a2a/a2a-auth-callout/src/wire/xkey_public.rs                                                    23       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-nats/src/catalog/import_gate/allow_all.rs                                                2       0  100.00%
crates/a2a/a2a-nats/src/catalog/import_gate/principal.rs                                                9       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/platform/trogon-gateway/src/source/github/config.rs                                              9       0  100.00%
crates/platform/trogon-gateway/src/source/github/server.rs                                             50       0  100.00%
crates/platform/trogon-gateway/src/source/github/signature.rs                                           9       0  100.00%
crates/aauth/trogon-aauth-sdk/src/lib.rs                                                                3       0  100.00%
crates/aauth/trogon-aauth-sdk/src/signer.rs                                                            91       0  100.00%
crates/aauth/trogon-aauth-sdk/src/delegation.rs                                                        15       0  100.00%
crates/aauth/trogon-aauth-sdk/src/verify_response.rs                                                   70       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/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/platform/trogon-gateway/src/source/sentry/sentry_client_secret.rs                                9       0  100.00%
crates/platform/trogon-gateway/src/source/sentry/server.rs                                             69       0  100.00%
crates/platform/trogon-gateway/src/source/sentry/signature.rs                                           6       0  100.00%
crates/a2a/a2a-nats/src/client/wire.rs                                                                 13       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/error.rs                                                                14       0  100.00%
crates/a2a/a2a-nats/src/client/resubscribe.rs                                                          28       0  100.00%
crates/a2a/a2a-nats/src/client/gateway_headers.rs                                                      19       0  100.00%
crates/a2a/a2a-nats/src/client/streaming.rs                                                            73       0  100.00%
crates/a2a/a2a-nats/src/client/unary.rs                                                                39       1  97.44%   57
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/a2a/a2a-gateway/src/policy/tier2_cel/compiler.rs                                                25       3  88.00%   61-63
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/decider/trogon-decider/src/event/codec/event_decode.rs                                          13       0  100.00%
crates/decider/trogon-decider/src/event/codec/event_payload_error.rs                                    5       0  100.00%
crates/scheduler/trogon-scheduler/src/processor/execution/checkpoints/store.rs                        142      16  88.73%   103, 121, 125, 132, 221-227, 276-280
crates/scheduler/trogon-scheduler/src/processor/execution/checkpoints/record.rs                         6       0  100.00%
crates/scheduler/trogon-scheduler/src/processor/execution/checkpoints/failure.rs                       27       0  100.00%
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/telemetry/metrics.rs                                             27       0  100.00%
crates/scheduler/trogon-scheduler/src/telemetry/trace.rs                                               20       0  100.00%
crates/a2a/a2a-bridge/src/nats_transport_harness.rs                                                    42       0  100.00%
crates/a2a/a2a-bridge/src/outbound.rs                                                                  70       7  90.00%   126, 197-209
crates/a2a/a2a-bridge/src/main.rs                                                                       1       1  0.00%    199
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/auth.rs                                                                      47      15  68.09%   78-99, 148
crates/a2a/a2a-bridge/src/identity.rs                                                                  63       0  100.00%
crates/platform/trogon-service-config/src/lib.rs                                                       38       0  100.00%
crates/platform/trogon-identity-types/src/act_chain.rs                                                 13       0  100.00%
crates/platform/trogon-gateway/src/source/standard_webhooks.rs                                        138       0  100.00%
crates/scheduler/trogon-scheduler-domain/src/commands/domain/message.rs                               139       0  100.00%
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.rs                              383       5  98.69%   327, 335, 350-352
crates/scheduler/trogon-scheduler-domain/src/commands/domain/schedule_id.rs                            22       0  100.00%
crates/platform/trogon-nats/src/messaging.rs                                                          168       2  98.81%   146, 156
crates/platform/trogon-nats/src/server_info.rs                                                         21       3  85.71%   19-21
crates/platform/trogon-nats/src/test_support.rs                                                        28       0  100.00%
crates/platform/trogon-nats/src/token.rs                                                                6       0  100.00%
crates/platform/trogon-nats/src/nats_token.rs                                                          56       0  100.00%
crates/platform/trogon-nats/src/client.rs                                                              22      22  0.00%    50-86
crates/platform/trogon-nats/src/connect.rs                                                             26       6  76.92%   42-47
crates/platform/trogon-nats/src/mocks.rs                                                              246       0  100.00%
crates/platform/trogon-nats/src/auth.rs                                                                45       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/config.rs                                                               39       0  100.00%
crates/acp/acp-nats-server/src/compat.rs                                                              174       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/abort_on_drop.rs                                                      19       0  100.00%
crates/acp/acp-nats/src/boundary/connect_agent_boundary.rs                                            128       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/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/http.rs                                                        19       0  100.00%
crates/a2a/a2a-nats/src/push/dispatcher/jetstream.rs                                                   45       0  100.00%
crates/a2a/a2a-nats/src/push/dispatcher/mod.rs                                                         16       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/a2a/a2a-nats/src/jetstream/consumers.rs                                                         50       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/provision.rs                                                         16       0  100.00%
crates/a2a/a2a-redaction/src/bin/sign-bundle.rs                                                         1       1  0.00%    163
crates/aauth/trogon-aauth-person/src/http/mod.rs                                                      213       0  100.00%
crates/acp/acp-nats/src/client/session_update.rs                                                        8       0  100.00%
crates/acp/acp-nats/src/client/terminal_release.rs                                                     35       0  100.00%
crates/acp/acp-nats/src/client/ext.rs                                                                  62       0  100.00%
crates/acp/acp-nats/src/client/request_permission.rs                                                   40       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_create.rs                                                      41       0  100.00%
crates/acp/acp-nats/src/client/elicitation_complete.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/elicitation_create.rs                                                   41       0  100.00%
crates/acp/acp-nats/src/client/ext_session_prompt_response.rs                                          22       0  100.00%
crates/acp/acp-nats/src/client/terminal_kill.rs                                                        41       0  100.00%
crates/acp/acp-nats/src/client/fs_write_text_file.rs                                                   43       0  100.00%
crates/acp/acp-nats/src/client/terminal_output.rs                                                      29       0  100.00%
crates/acp/acp-nats/src/client/test_support.rs                                                         17       0  100.00%
crates/acp/acp-nats/src/client/fs_read_text_file.rs                                                    27       0  100.00%
crates/acp/acp-nats/src/client/mod.rs                                                                 105       1  99.05%   59
crates/platform/trogonai-proto/src/agents/agents/codec.rs                                              30       0  100.00%
crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/reconcile.rs                 303      13  95.71%   244-253, 318-320
crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/request.rs                   221       2  99.10%   255, 260
crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/schedule_subject.rs           34       0  100.00%
crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/rrule_wakeup_payload.rs       35       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/recorded_events.rs           238      12  94.96%   196-201, 238, 246, 267, 287, 293, 299, 332, 342, 360, 444
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/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/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/platform/trogon-std/src/signal.rs                                                               22      12  45.45%   6-11, 18-25, 34
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/json.rs                                                                 23       0  100.00%
crates/platform/trogon-std/src/secret_string.rs                                                        13       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/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/wire.rs                                                                        59       2  96.61%   85, 98
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/agent_id.rs                                                                    21       0  100.00%
crates/a2a/a2a-nats/src/jsonrpc.rs                                                                     27       0  100.00%
crates/a2a/a2a-nats/src/req_id.rs                                                                      21       0  100.00%
crates/a2a/a2a-nats/src/task_id.rs                                                                     22       0  100.00%
crates/a2a/a2a-nats/src/a2a_prefix.rs                                                                  16       0  100.00%
crates/a2a/a2a-nats-http/src/headers.rs                                                               129       1  99.22%   154
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/main.rs                                                                    1       0  100.00%
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/platform/trogon-nats/src/jetstream/object_store.rs                                              20       0  100.00%
crates/platform/trogon-nats/src/jetstream/create_conflicts.rs                                          17       0  100.00%
crates/platform/trogon-nats/src/jetstream/mocks.rs                                                    971       1  99.90%   564
crates/platform/trogon-nats/src/jetstream/not_found.rs                                                 13       0  100.00%
crates/platform/trogon-nats/src/jetstream/claim_check.rs                                              136       3  97.79%   44-46
crates/platform/trogon-nats/src/jetstream/claim_bucket.rs                                              37       0  100.00%
crates/platform/trogon-nats/src/jetstream/publish.rs                                                   30       0  100.00%
crates/platform/trogon-nats/src/jetstream/traits.rs                                                    63      34  46.03%   251-309
crates/acp/acp-nats/src/nats/subjects/stream.rs                                                        56       0  100.00%
crates/a2a/a2a-nats/src/nats/subjects/tasks/events.rs                                                  17       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/platform/trogon-gateway/src/source/datadog/datadog_webhook_token.rs                              9       0  100.00%
crates/a2a/a2a-nats/src/server/dispatch.rs                                                             33       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/push_set.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/agent_card.rs                                                           16       0  100.00%
crates/a2a/a2a-nats/src/server/push_get.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_list.rs                                                            12       0  100.00%
crates/a2a/a2a-nats/src/server/bridge.rs                                                               65       0  100.00%
crates/a2a/a2a-nats/src/server/message_send.rs                                                         15       0  100.00%
crates/a2a/a2a-nats/src/server/tasks_get.rs                                                            12       0  100.00%
crates/a2a/a2a-nats/src/server/handler.rs                                                              39       0  100.00%
crates/a2a/a2a-nats/src/server/push_delete.rs                                                          12       0  100.00%
crates/a2a/a2a-nats/src/server/tasks_list.rs                                                           12       0  100.00%
crates/a2a/a2a-nats/src/server/tasks_cancel.rs                                                         12       0  100.00%
crates/a2a/a2a-nats/src/server/tasks_resubscribe.rs                                                    12       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/renew_interval.rs                                                25       0  100.00%
crates/platform/trogon-nats/src/lease/ttl.rs                                                           27       0  100.00%
crates/platform/trogon-nats/src/lease/mod.rs                                                          107      13  87.85%   113-126
crates/platform/trogon-nats/src/lease/provision.rs                                                     83      10  87.95%   82-92
crates/platform/trogon-nats/src/lease/release.rs                                                        5       5  0.00%    8-12
crates/platform/trogon-nats/src/lease/nats_kv_lease_config.rs                                          26       0  100.00%
crates/platform/trogon-nats/src/lease/lease_key.rs                                                     19       0  100.00%
crates/platform/trogon-nats/src/lease/acquire.rs                                                        5       5  0.00%    9-14
crates/platform/trogon-nats/src/lease/lease_bucket.rs                                                  19       0  100.00%
crates/platform/trogon-nats/src/lease/lease_timing.rs                                                  15       0  100.00%
crates/a2a/a2a-bridge/src/auth/callout_mint.rs                                                         49       1  97.96%   94
crates/acp/acp-nats/src/nats/subjects/commands/cancel.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/resume.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/close.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/fork.rs                                                 15       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/set_mode.rs                                             15       0  100.00%
crates/platform/trogon-std/src/telemetry/http.rs                                                       58       0  100.00%
crates/decider/trogon-decider-nats/src/projector.rs                                                    88       3  96.59%   57-59
crates/decider/trogon-decider-nats/src/provision.rs                                                    87      21  75.86%   159, 164-172, 192, 197-208
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/decider/trogon-decider-nats/src/store.rs                                                        73      45  38.36%   100-104, 151-217
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/processor.rs                                                   109      17  84.40%   85-88, 217-220, 268-270, 277, 280-282, 308-310
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/decider/trogon-decider-runtime/src/snapshot/snapshot_type.rs                                    42       0  100.00%
crates/a2a/a2a-gateway/src/aauth.rs                                                                   288       0  100.00%
crates/a2a/a2a-gateway/src/lib.rs                                                                       3       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/agent_card_surface.rs                                                        3       0  100.00%
crates/a2a/a2a-gateway/src/runtime.rs                                                                  11       0  100.00%
crates/a2a/a2a-gateway/src/gw_ingress_stream.rs                                                       144       4  97.22%   312-314, 529
crates/a2a/a2a-gateway/src/gw_pull_backpressure.rs                                                    209       3  98.56%   487, 687, 700
crates/a2a/a2a-gateway/src/config.rs                                                                   57       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/main.rs                                                                      1       0  100.00%
crates/a2a/a2a-gateway/src/audit_ingress.rs                                                           110       0  100.00%
crates/aauth/trogon-aauth-verify/src/nats_pop.rs                                                      125       1  99.20%   313
crates/aauth/trogon-aauth-verify/src/delegation.rs                                                     53       0  100.00%
crates/aauth/trogon-aauth-verify/src/http_pop.rs                                                      301       0  100.00%
crates/aauth/trogon-aauth-verify/src/jkt.rs                                                            33       0  100.00%
crates/aauth/trogon-aauth-verify/src/replay.rs                                                         26       0  100.00%
crates/aauth/trogon-aauth-verify/src/test_support.rs                                                   86       0  100.00%
crates/aauth/trogon-aauth-verify/src/token.rs                                                         206       1  99.51%   183
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/jwks.rs                                                           15       0  100.00%
crates/aauth/trogon-aauth-verify/src/mission.rs                                                        33       0  100.00%
crates/aauth/trogon-aauth-verify/src/challenge.rs                                                      77       0  100.00%
crates/aauth/trogon-aauth-verify/src/time_source.rs                                                    10       0  100.00%
crates/aauth/trogon-aauth-verify/src/jwks_http.rs                                                     144       0  100.00%
crates/mcp/mcp-nats/src/telemetry/transport.rs                                                          6       0  100.00%
crates/a2a/a2a-nats-server/src/noop_handler.rs                                                         22       0  100.00%
crates/a2a/a2a-nats-server/src/main.rs                                                                  1       0  100.00%
crates/a2a/a2a-nats-server/src/runtime.rs                                                              17       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_all_events.rs                                  9       0  100.00%
crates/a2a/a2a-nats/src/nats/subjects/subscriptions/task_one_events.rs                                 12       0  100.00%
crates/platform/trogon-nats/src/telemetry/messaging.rs                                                 37       0  100.00%
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/platform/trogon-gateway/src/source_integration_id.rs                                            28       2  92.86%   58, 60
crates/platform/trogon-gateway/src/http.rs                                                             13       0  100.00%
crates/platform/trogon-gateway/src/streams.rs                                                           7       0  100.00%
crates/platform/trogon-gateway/src/main.rs                                                             26       0  100.00%
crates/platform/trogon-gateway/src/source_plugin.rs                                                   288       3  98.96%   83, 140-141
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_status.rs                                                    12       0  100.00%
crates/platform/trogonai-proto/src/scheduler/schedules/codec.rs                                        57       0  100.00%
crates/acp/acp-nats/src/telemetry/metrics.rs                                                           22       0  100.00%
crates/platform/trogon-std/src/fs/mem.rs                                                               85       0  100.00%
crates/platform/trogon-std/src/fs/system.rs                                                            15       0  100.00%
crates/a2a/a2a-pack/src/resource_tuples.rs                                                            152       0  100.00%
crates/a2a/a2a-pack/src/agent_card_read.rs                                                             23       0  100.00%
crates/a2a/a2a-pack/src/agent_card_schema.rs                                                           40       0  100.00%
crates/a2a/a2a-nats/src/nats/subjects/agents/tasks/resubscribe.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/get.rs                                              15       0  100.00%
crates/a2a/a2a-nats/src/nats/subjects/agents/tasks/list.rs                                             15       0  100.00%
crates/a2a/a2a-redaction/src/redactor.rs                                                               32       0  100.00%
crates/a2a/a2a-redaction/src/skill_id.rs                                                               26       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/tier3_sentinel.rs                                                         12       0  100.00%
crates/a2a/a2a-redaction/src/wasm_bundle_path.rs                                                       18       0  100.00%
crates/a2a/a2a-redaction/src/a2a_method.rs                                                             41       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/acp/acp-nats-stdio/src/main.rs                                                                  56       8  85.71%   58, 101-108, 120
crates/acp/acp-nats-stdio/src/config.rs                                                                15       0  100.00%
crates/a2a/a2a-gateway/src/policy/error.rs                                                             16       0  100.00%
crates/a2a/a2a-gateway/src/policy/per_skill.rs                                                         87       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-nats-http/src/handlers/mod.rs                                                          185      12  93.51%   68, 88-91, 121, 155, 169-172, 185
crates/acp/acp-nats/src/nats/subjects/subscriptions/all_session.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_session.rs                                     12       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/all_agent.rs                                        9       0  100.00%
crates/acp/acp-nats/src/nats/subjects/subscriptions/all_client.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_agent.rs                                       15       0  100.00%
crates/acp/acp-nats/src/nats/subjects/subscriptions/one_client.rs                                      15       0  100.00%
crates/channel/channel-bridge-telegram/src/parse.rs                                                    25       0  100.00%
crates/channel/channel-bridge-telegram/src/pipeline.rs                                                154       0  100.00%
crates/channel/channel-bridge-telegram/src/render.rs                                                   43       0  100.00%
crates/channel/channel-bridge-telegram/src/main.rs                                                      1       0  100.00%
crates/channel/channel-bridge-telegram/src/acp_port.rs                                                 50       0  100.00%
crates/channel/channel-bridge-telegram/src/config.rs                                                   65       0  100.00%
crates/decider/trogon-decider-nats/src/stream_store/replay.rs                                         135      10  92.59%   114, 142, 160, 216-224
crates/a2a/a2a-nats/src/audit/emitter.rs                                                               58       0  100.00%
crates/a2a/a2a-nats/src/audit/task_lifecycle.rs                                                        17       0  100.00%
crates/a2a/a2a-nats/src/audit/envelope.rs                                                              57       0  100.00%
crates/decider/trogon-decider-runtime/src/snapshot/codec/snapshot_envelope_encode_error.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/encoded_snapshot.rs                           44       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_payload_decode.rs                     3       0  100.00%
crates/decider/trogon-decider/src/events.rs                                                            49       0  100.00%
crates/decider/trogon-decider/src/decision.rs                                                          27       0  100.00%
crates/decider/trogon-decider/src/testing.rs                                                          284       0  100.00%
crates/decider/trogon-decider/src/act.rs                                                               62       0  100.00%
crates/decider/trogon-decider-wasm-runtime/src/domain_error_detail.rs                                   7       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/test_fixture.rs                                          7       0  100.00%
crates/decider/trogon-decider-wasm-runtime/src/registry.rs                                             94       0  100.00%
crates/decider/trogon-decider-wasm-runtime/src/command_spec.rs                                         12       0  100.00%
crates/decider/trogon-decider-wasm-runtime/src/module.rs                                               71       0  100.00%
crates/decider/trogon-decider-wasm-runtime/src/engine.rs                                              145       0  100.00%
crates/decider/trogon-decider-wasm-runtime/src/module_version.rs                                       34       0  100.00%
crates/decider/trogon-decider-wasm-runtime/src/snapshot_id.rs                                          18       0  100.00%
crates/decider/trogon-decider-wasm-runtime/src/module_name.rs                                          34       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_type.rs                                         31       0  100.00%
crates/decider/trogon-decider-wasm-runtime/src/opaque_snapshot.rs                                      18       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/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/list_roots.rs                                             12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/client/progress.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/cancelled.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/server/call_tool.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/subscribe_resource.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/task_status.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/cancel_task.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/list_resource_templates.rs                                12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/read_resource.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/update_task.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/progress.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/get_prompt.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/unsubscribe_resource.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/cancelled.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/resource_list_changed.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/resource_updated.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/initialize.rs                                             12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/logging_message.rs                                        12       0  100.00%
crates/platform/trogon-gateway/src/source/discord/gateway.rs                                          116       1  99.14%   135
crates/platform/trogon-gateway/src/source/discord/config.rs                                            45       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/server.rs                                         72       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/signature.rs                                       8       0  100.00%
crates/platform/trogon-std/src/time/system.rs                                                           9       0  100.00%
crates/platform/trogon-std/src/time/mock.rs                                                            32       0  100.00%
crates/platform/trogon-gateway/src/source/slack/config.rs                                              32       0  100.00%
crates/platform/trogon-gateway/src/source/slack/server.rs                                             272       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/a2a/a2a-nats/src/catalog/registrar.rs                                                           56       0  100.00%
crates/a2a/a2a-nats/src/catalog/agent_view.rs                                                          47       0  100.00%
crates/a2a/a2a-nats/src/catalog/store.rs                                                              117       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/a2a/a2a-nats/src/catalog/nats_kv.rs                                                              8       0  100.00%
crates/scheduler/trogon-scheduler/src/processor/execution/checkpoints/codec/twin.rs                    96       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                                                            235       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/signing_key_source/static_source.rs                                    25       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/env.rs                                              40       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/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/signing_key_handle.rs                               15       0  100.00%
crates/a2a/a2a-auth-callout/src/signing_key_source/minting_material.rs                                 18       0  100.00%
crates/aauth/trogon-aauth-sdk/src/exchange/core.rs                                                    138       0  100.00%
crates/aauth/trogon-aauth-sdk/src/exchange/mod.rs                                                      17       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/acp/acp-nats-agent/src/connection.rs                                                           482       1  99.79%   726
crates/ard/ard-registry/src/bin/ard-registry-demo/main.rs                                              64      20  68.75%   13-35
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/decider/trogon-decider-runtime/src/event/stream_event.rs                                         8       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/ard/ard-registry/src/registry.rs                                                               134       3  97.76%   78, 174, 183
crates/ard/ard-registry/src/page_token.rs                                                              14       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/search_filters.rs                                                          28       0  100.00%
crates/ard/ard-registry/src/router.rs                                                                  33       0  100.00%
crates/ard/ard-registry/src/source_url.rs                                                              26       1  96.15%   30
crates/ard/ard-registry/src/list_agents_request.rs                                                     21       0  100.00%
crates/ard/ard-registry/src/http_error.rs                                                              17       0  100.00%
crates/ard/ard-registry/src/extract.rs                                                                 12       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/registry_config.rs                                                         16       0  100.00%
crates/ard/ard-registry/src/facet_field.rs                                                             13       0  100.00%
crates/platform/trogon-jwks-publisher/src/publisher.rs                                                113       0  100.00%
crates/platform/trogon-jwks-publisher/src/provider.rs                                                 117       0  100.00%
crates/platform/trogon-gateway/src/source/telegram/registration.rs                                     82       0  100.00%
crates/platform/trogon-gateway/src/source/telegram/signature.rs                                         7       0  100.00%
crates/platform/trogon-gateway/src/source/telegram/server.rs                                           53       0  100.00%
crates/platform/trogon-gateway/src/source/telegram/config.rs                                           42       0  100.00%
crates/platform/trogonai-proto/src/codec.rs                                                            16       0  100.00%
crates/platform/trogonai-proto/src/lib.rs                                                              20       0  100.00%
crates/platform/trogonai-proto/src/convert.rs                                                          53       0  100.00%
crates/scheduler/trogon-scheduler/src/processor/execution/wakeup.rs                                    91       1  98.90%   123
crates/scheduler/trogon-scheduler/src/queries/read_model/schedule.rs                                   15       0  100.00%
crates/scheduler/trogon-scheduler/src/queries/read_model/message.rs                                    77       0  100.00%
crates/scheduler/trogon-scheduler/src/mocks.rs                                                        413      51  87.65%   80, 120-123, 272, 289-292, 334-336, 350-354, 363, 416-420, 475-476, 480, 498-502, 519-522, 565-585
crates/scheduler/trogon-scheduler/src/nats.rs                                                          10       0  100.00%
crates/scheduler/trogon-scheduler/src/config.rs                                                        27       0  100.00%
crates/scheduler/trogon-scheduler/src/error.rs                                                         83      12  85.54%   131-133, 152-154, 159-161, 176-180
crates/a2a/a2a-gateway/src/runtime/audit_publish.rs                                                    16       0  100.00%
crates/a2a/a2a-gateway/src/runtime/reply.rs                                                             5       0  100.00%
crates/a2a/a2a-gateway/src/runtime/aauth_env.rs                                                       162       0  100.00%
crates/a2a/a2a-gateway/src/runtime/policy_stack.rs                                                     83      31  62.65%   85, 92, 112-121, 128-129, 144-154, 163-179, 184
crates/a2a/a2a-gateway/src/runtime/streaming.rs                                                        35       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                                                              60       0  100.00%
crates/a2a/a2a-gateway/src/runtime/tier1.rs                                                            30       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                                                   215       0  100.00%
crates/platform/trogon-identity-types/src/aauth/mod.rs                                                104       0  100.00%
crates/platform/trogon-identity-types/src/aauth/person_server.rs                                       23       0  100.00%
crates/platform/trogon-identity-types/src/aauth/login.rs                                               78       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/mission.rs                                             33       0  100.00%
TOTAL                                                                                               40603    1784  95.61%

Diff against main

Filename                                                                Stmts    Miss  Cover
--------------------------------------------------------------------  -------  ------  --------
crates/aauth/trogon-aauth-person/src/mint.rs                               -3       0  +100.00%
crates/platform/trogon-gateway/src/source/gitlab/signature.rs              -1       0  +100.00%
crates/platform/trogon-gateway/src/source/gitlab/server.rs                +11       0  +100.00%
crates/channel/trogon-channel/src/store.rs                                 +2       0  +100.00%
crates/a2a/a2a-identity-types/src/jwt.rs                                   +6       0  +100.00%
crates/a2a/a2a-auth-callout/src/caller_jwt_header.rs                       +3       0  +100.00%
crates/aauth/trogon-aauth-as/src/mint.rs                                   -3       0  +100.00%
crates/a2a/a2a-auth-callout/src/wire/callout_auth_response_claims.rs       +5       0  +0.47%
crates/platform/trogon-nats/src/jetstream/mocks.rs                        +30       0  +0.00%
crates/platform/trogon-nats/src/jetstream/traits.rs                       +17       0  +19.94%
crates/aauth/trogon-aauth-verify/src/http_pop.rs                          +33       0  +100.00%
crates/aauth/trogon-aauth-verify/src/token.rs                             +22       0  +0.06%
crates/a2a/a2a-auth-callout/src/jwt/mod.rs                                 +3       0  +100.00%
crates/platform/trogon-jwks-publisher/src/publisher.rs                    +21       0  +100.00%
crates/platform/trogon-jwks-publisher/src/provider.rs                      -1       0  +100.00%
crates/a2a/a2a-gateway/src/runtime/policy_stack.rs                         +5       0  +2.39%
crates/a2a/a2a-gateway/src/runtime/env.rs                                  +5       0  +100.00%
crates/a2a/a2a-auth-callout/src/credentials/oidc.rs                       +27      -4  +2.13%
crates/platform/trogon-identity-types/src/aauth/mod.rs                    +35       0  +100.00%
TOTAL                                                                    +217      -4  +0.03%

Results for commit: b771fb5

Minimum allowed coverage is 95%

♻️ This comment has been updated with latest results

yordis added 6 commits August 7, 2026 18:40
… log

A bearer token in a log is a usable credential for the rest of its lifetime, and these two carried a redacted Display next to a derived Debug, which is the form tracing actually records.

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
The neighbouring wire claim type already hand-redacts what it prints; the inbound assertion, the minted user JWT, and the signed response carrying it did not, and each is replayable for as long as it is valid.

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
The builder already exists so misconfiguration fails at startup rather than remotely, but it vetted only the filename, leaving a rotation that reuses or omits a kid to surface as a verification failure at the consumer with nothing visible on this side.

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

A stream created before the dedup window was paired with the signature timestamp tolerance kept JetStream's default window, so the declared bound never took effect where it mattered most: a deployment that had already been running.

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
Recording the RSA profile under a blanket agent-binding claim invited an implementation that binds one issuer key per agent, when the identity belongs in the assertion claims and the key's custody belongs to the issuer.

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

Naming TTL and unbinding as the only bounds left the residual window ambiguous, and an operator sizing an offboarding procedure from it would have underestimated how long an already-issued external token keeps working.

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
Comment thread rsworkspace/crates/platform/trogon-gateway/src/source/gitlab/server.rs Outdated
yordis added 4 commits August 7, 2026 19:36
…operator tuned

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
…an issued token

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

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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 6

♻️ Duplicate comments (1)
rsworkspace/crates/platform/trogon-identity-types/src/aauth/mod.rs (1)

73-86: 🔒 Security & Privacy | 🟠 Major | 🏗️ Heavy lift

Validate public-key material, not only member presence.

Cnf::public accepts unusable keys such as a P-256 JWK with short coordinates ("x": "AAA"), invalid base64url data, an unsupported curve, or an unusable RSA modulus. The token can then be minted successfully, but downstream key construction and proof-of-possession verification fail.

Parse and validate each supported key type during construction, or convert a distinct issuer input type into typed key-specific domain values. Keep permissive inbound claims in a separate wire type.

🤖 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/trogon-identity-types/src/aauth/mod.rs` around
lines 73 - 86, Update Cnf::public to validate complete public-key material for
each supported kty, not merely non-empty required members. Parse base64url
coordinates and modulus, reject malformed or unusable values and unsupported
curves, and ensure RSA parameters satisfy key-construction requirements before
returning Ok; keep permissive inbound claims separate from the validated typed
representation.

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 `@rsworkspace/crates/a2a/a2a-auth-callout/src/credentials/oidc/tests.rs`:
- Around line 593-596: Strengthen the debug-redaction assertions in the token
test around token and its dbg representation: verify the full compact JWT and
each unique segment (including hhh, ppp, and sss) are absent from dbg, while
retaining the assertion that <redacted> is present and the original as_str value
remains unchanged.

In `@rsworkspace/crates/platform/trogon-identity-types/src/aauth/mod.rs`:
- Around line 37-42: Replace the derived Debug implementation on Cnf with a
custom redacted formatter that never emits the embedded jwk Value or private JWK
members, while preserving the existing Clone, PartialEq, Eq, Serialize, and
Deserialize derives. Add a regression test alongside the inbound-deserialization
test that formats a Cnf containing a private key member such as d and verifies
the debug output does not contain that sensitive value.

In `@rsworkspace/crates/platform/trogon-jwks-publisher/src/publisher.rs`:
- Around line 78-114: Replace the standalone validate_selectable_by_kid function
with a PublishableJwkSet domain type whose TryFrom<JwkSet> implementation
enforces duplicate and missing key-id rules. Update JwksPublisherConfig.entries
and with_jwk_set to store and construct PublishableJwkSet values, and expose
only an immutable JwkSet view where serialization requires the raw set.

In `@rsworkspace/crates/platform/trogon-nats/src/jetstream/client.rs`:
- Around line 60-62: Update the stream reconciliation flow around cached_info,
merge, and context.update_stream so it cannot unconditionally write a stale full
configuration. Use the available conditional update mechanism, or reread the
stream and retry reconciliation when the version changes, preserving concurrent
operator-managed fields such as num_replicas, storage, and limits.

In `@rsworkspace/crates/platform/trogon-nats/src/jetstream/mocks.rs`:
- Around line 258-260: Replace the string-backed MockError constructions in the
stream-creation failure paths, including the corresponding block around the
second referenced location, with a typed MockError variant such as
MockError::SimulatedStreamCreation. Update the MockError definition if needed so
tests can structurally match this failure without relying on String payloads.

In `@rsworkspace/crates/platform/trogon-nats/src/jetstream/traits.rs`:
- Around line 41-48: Replace the orchestration-oriented
create_or_reconcile_stream method in the infrastructure trait with separate
passthrough operations for reading, creating, and updating streams, removing the
merge callback from the trait API. Move the Get-Merge-Update workflow and
merge-field ownership into the GitLab provisioning implementation, updating its
callers to compose the individual operations.

---

Duplicate comments:
In `@rsworkspace/crates/platform/trogon-identity-types/src/aauth/mod.rs`:
- Around line 73-86: Update Cnf::public to validate complete public-key material
for each supported kty, not merely non-empty required members. Parse base64url
coordinates and modulus, reject malformed or unusable values and unsupported
curves, and ensure RSA parameters satisfy key-construction requirements before
returning Ok; keep permissive inbound claims separate from the validated typed
representation.
🪄 Autofix

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: 7657b514-e1ec-435a-afea-547b68d9efc9

📥 Commits

Reviewing files that changed from the base of the PR and between 8cf3fd8 and 98f63a3.

📒 Files selected for processing (46)
  • docs/adr/0038-agent-identity-crypto-suite.md
  • docs/adr/0053-external-oidc-federation-surface.md
  • rsworkspace/crates/a2a/a2a-auth-callout/src/caller_jwt_header.rs
  • rsworkspace/crates/a2a/a2a-auth-callout/src/caller_jwt_header/tests.rs
  • rsworkspace/crates/a2a/a2a-auth-callout/src/credentials/oidc.rs
  • rsworkspace/crates/a2a/a2a-auth-callout/src/credentials/oidc/tests.rs
  • rsworkspace/crates/a2a/a2a-auth-callout/src/denial_category.rs
  • rsworkspace/crates/a2a/a2a-auth-callout/src/error.rs
  • rsworkspace/crates/a2a/a2a-auth-callout/src/jwt/mod.rs
  • rsworkspace/crates/a2a/a2a-auth-callout/src/jwt/tests.rs
  • rsworkspace/crates/a2a/a2a-auth-callout/src/wire/callout_auth_response_claims.rs
  • rsworkspace/crates/a2a/a2a-auth-callout/src/wire/callout_auth_response_claims/tests.rs
  • rsworkspace/crates/a2a/a2a-gateway/tests/aauth_roundtrip.rs
  • rsworkspace/crates/a2a/a2a-identity-types/src/jwt.rs
  • rsworkspace/crates/a2a/a2a-identity-types/src/jwt/tests.rs
  • rsworkspace/crates/aauth/trogon-aauth-as/src/pending/tests.rs
  • rsworkspace/crates/aauth/trogon-aauth-as/src/policy/tests.rs
  • rsworkspace/crates/aauth/trogon-aauth-as/src/request/tests.rs
  • rsworkspace/crates/aauth/trogon-aauth-as/src/server.rs
  • rsworkspace/crates/aauth/trogon-aauth-as/src/test_support.rs
  • rsworkspace/crates/aauth/trogon-aauth-person/src/agent/tests.rs
  • rsworkspace/crates/aauth/trogon-aauth-person/src/http/tests.rs
  • rsworkspace/crates/aauth/trogon-aauth-person/src/pending/tests.rs
  • rsworkspace/crates/aauth/trogon-aauth-person/src/server.rs
  • rsworkspace/crates/aauth/trogon-aauth-person/src/server/tests.rs
  • rsworkspace/crates/aauth/trogon-aauth-person/src/store/tests.rs
  • rsworkspace/crates/aauth/trogon-aauth-person/tests/person_server_e2e.rs
  • rsworkspace/crates/aauth/trogon-aauth-sdk/src/tests.rs
  • rsworkspace/crates/aauth/trogon-aauth-sdk/src/verify_response.rs
  • rsworkspace/crates/aauth/trogon-aauth-sdk/src/verify_response/tests.rs
  • rsworkspace/crates/aauth/trogon-aauth-verify/src/http_pop.rs
  • rsworkspace/crates/aauth/trogon-aauth-verify/src/http_pop/tests.rs
  • rsworkspace/crates/aauth/trogon-aauth-verify/src/nats_pop.rs
  • rsworkspace/crates/aauth/trogon-aauth-verify/src/token.rs
  • rsworkspace/crates/aauth/trogon-aauth-verify/tests/nats_pop_roundtrip.rs
  • rsworkspace/crates/platform/trogon-gateway/src/source/gitlab/server.rs
  • rsworkspace/crates/platform/trogon-gateway/src/source/gitlab/server/tests.rs
  • rsworkspace/crates/platform/trogon-identity-types/src/aauth/mod.rs
  • rsworkspace/crates/platform/trogon-identity-types/src/aauth/tests.rs
  • rsworkspace/crates/platform/trogon-identity-types/src/constants.rs
  • rsworkspace/crates/platform/trogon-jwks-publisher/src/provider/tests.rs
  • rsworkspace/crates/platform/trogon-jwks-publisher/src/publisher.rs
  • rsworkspace/crates/platform/trogon-jwks-publisher/src/publisher/tests.rs
  • rsworkspace/crates/platform/trogon-nats/src/jetstream/client.rs
  • rsworkspace/crates/platform/trogon-nats/src/jetstream/mocks.rs
  • rsworkspace/crates/platform/trogon-nats/src/jetstream/traits.rs
🚧 Files skipped from review as they are similar to previous changes (9)
  • rsworkspace/crates/platform/trogon-jwks-publisher/src/provider/tests.rs
  • rsworkspace/crates/aauth/trogon-aauth-verify/src/token.rs
  • rsworkspace/crates/platform/trogon-gateway/src/source/gitlab/server.rs
  • rsworkspace/crates/a2a/a2a-auth-callout/src/credentials/oidc.rs
  • rsworkspace/crates/aauth/trogon-aauth-verify/src/http_pop/tests.rs
  • rsworkspace/crates/aauth/trogon-aauth-verify/src/http_pop.rs
  • docs/adr/0038-agent-identity-crypto-suite.md
  • docs/adr/0053-external-oidc-federation-surface.md
  • rsworkspace/crates/platform/trogon-gateway/src/source/gitlab/server/tests.rs

Comment thread rsworkspace/crates/platform/trogon-identity-types/src/aauth/mod.rs Outdated
Comment thread rsworkspace/crates/platform/trogon-jwks-publisher/src/publisher.rs
Comment thread rsworkspace/crates/platform/trogon-nats/src/jetstream/client.rs Outdated
Comment thread rsworkspace/crates/platform/trogon-nats/src/jetstream/mocks.rs
Comment thread rsworkspace/crates/platform/trogon-nats/src/jetstream/traits.rs Outdated
yordis added 4 commits August 7, 2026 21:28
…on hides

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

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

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

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
yordis added 4 commits August 7, 2026 21:48
…owns

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

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
…ho wins a race

Whichever concurrent create the scheduler and the server ordered first decided
whether the arm under test ran at all, so the suite failed on CI for reasons the
code under test had nothing to do with.

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
Comment thread rsworkspace/crates/aauth/trogon-aauth-verify/src/http_pop.rs
yordis added 4 commits August 8, 2026 00:56
… to skip

The last-wins note read as a promise to recover from a member that does not
parse, and nothing held the parser to refusing one, so a later reader could
have relaxed it into burying an unreadable digest under a trailing good one.

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
…error-naming convention

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

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
…o step over

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

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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

There are 2 total unresolved issues (including 1 from previous review).

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 19fe392. Configure here.

Comment thread rsworkspace/crates/aauth/trogon-aauth-verify/src/http_pop.rs
…t-wins behind

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
@yordis
yordis merged commit a142335 into main Aug 8, 2026
16 checks passed
@yordis
yordis deleted the yordis/davao-v1 branch August 8, 2026 07:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant