Skip to content

fix(scheduler): prevent identity drift across boundaries - #524

Merged
yordis merged 2 commits into
mainfrom
yordis/remove-scheduler-id-remapping
Aug 3, 2026
Merged

fix(scheduler): prevent identity drift across boundaries#524
yordis merged 2 commits into
mainfrom
yordis/remove-scheduler-id-remapping

Conversation

@yordis

@yordis yordis commented Aug 2, 2026

Copy link
Copy Markdown
Member
  • Scheduler identity must remain stable across domain, stream, storage, and projection boundaries.
  • Keeping the UUID invariant in the domain prevents infrastructure representations from defining identity.
  • A clean pre-production cutover avoids carrying compatibility paths for derived identifiers.

Copilot AI review requested due to automatic review settings August 2, 2026 09:04
@cursor

cursor Bot commented Aug 2, 2026

Copy link
Copy Markdown

PR Summary

High Risk
This is a breaking identity and storage-key change across event streams, projections, and checkpoints; environments with non-UUID schedule IDs or data keyed under derived tokens need a deliberate rebuild or cutover.

Overview
Schedule identity is now a single UUID (ScheduleId) in the scheduler domain instead of free-form strings, with validation limited to UUID parsing and canonical simple-hex display.

That same value is threaded through decider stream IDs (StreamId = ScheduleId), JetStream event subjects (scheduler.schedules.events.{uuid}), checkpoint/read-model KV keys, and execution headers (Trogon-Schedule-Id), removing the old derived ScheduleKey / read_model_key / base64 header path. OTEL semantics rename schedule_keyschedule_id.

The decider runtime and NATS store now require Display on stream/snapshot IDs rather than AsRef<str>. Tests, decider scenarios, and the schedules read-model checkpoint are bumped (v3) to match the new identifiers.

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

@coderabbitai

coderabbitai Bot commented Aug 2, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

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

Next review available in: 40 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: 7a54d9e8-41f5-4462-8a70-9150d214cb7b

📥 Commits

Reviewing files that changed from the base of the PR and between 748bcf8 and 8075b1c.

📒 Files selected for processing (2)
  • rsworkspace/crates/scheduler/trogon-scheduler-domain/src/commands/domain/schedule_id/tests.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/nats_execution_tests.rs

Walkthrough

The scheduler now enforces UUID-backed ScheduleId values across commands, event streams, subjects, headers, checkpoints, reconciliation, projections, storage, and tests. Derived schedule keys and legacy identifier headers were removed.

Changes

Schedule ID migration

Layer / File(s) Summary
Identifier contracts and decider execution
rsworkspace/crates/scheduler/trogon-scheduler-domain/..., rsworkspace/crates/decider/...
ScheduleId now wraps and validates UUID values. Decider stream and snapshot APIs use Display and typed schedule identifiers.
Subjects and reconciliation routing
rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/...
Subjects, request headers, payloads, event routing, and lane fallback use direct schedule IDs. ScheduleKey and StreamRoutingId were removed.
Execution, checkpoints, and dispatcher
rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/...
Execution, checkpoint storage, dispatcher lanes, event stores, mocks, and test kits use typed schedule streams and direct identifier keys.
Projections and integration validation
rsworkspace/crates/scheduler/trogon-scheduler/src/projections/..., rsworkspace/crates/scheduler/trogon-scheduler/tests/*
Projection KV access and subject parsing use canonical schedule IDs. Integration and PostgreSQL fixtures now use explicit UUID values.

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

Possibly related PRs

  • TrogonStack/trogonai#209: Introduced scheduler execution and checkpoint identifiers that this change replaces with typed ScheduleId values.
  • TrogonStack/trogonai#383: Added scheduler projection and storage code updated here to use direct schedule IDs.
  • TrogonStack/trogonai#173: Introduced the NATS store implementations whose stream identifier bounds change here.

Suggested reviewers: copilot

Poem

A rabbit typed each schedule bright,
UUIDs now guide the stream at night.
Keys hop away, headers align,
Checkpoints follow one clear line.
“To_string!” the bunny sings with cheer,
Canonical IDs now steer.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 76.63% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the main change: preventing scheduler identity drift across system boundaries.
Description check ✅ Passed The description directly explains the scheduler identity changes and the removal of compatibility paths for derived identifiers.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch yordis/remove-scheduler-id-remapping

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.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pull request overview

This PR makes the scheduler’s identity model canonical and stable by using a UUID-based ScheduleId end-to-end (domain, event streams, KV read-model keys, checkpoints, headers, and telemetry), removing the previous “derived key / token” indirection.

Changes:

  • Replace schedule identifiers with a UUID-backed ScheduleId across command and query boundaries, and add mint_schedule_id() to mint canonical IDs at the host boundary.
  • Remove derived key/token schemes (ScheduleKey, read_model_key, base64 ID header) and key storage/subjects/checkpoints directly by the canonical schedule id.
  • Update projections, execution worker lane routing, and extensive tests/fixtures to use fixed UUID fixtures and the new typed stream IDs.

Reviewed changes

Copilot reviewed 72 out of 73 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
rsworkspace/crates/scheduler/trogon-scheduler/tests/schedule_unit.rs Switch unit tests to fixed UUID fixtures and consistent ID parsing.
rsworkspace/crates/scheduler/trogon-scheduler/tests/postgres_projector_e2e.rs Update projector E2E tests to use canonical UUID schedule IDs.
rsworkspace/crates/scheduler/trogon-scheduler/tests/postgres_projection.rs Update Postgres projection tests to store/query by canonical UUID IDs.
rsworkspace/crates/scheduler/trogon-scheduler/tests/integration.rs Update integration tests to preserve canonical IDs through live/catch-up.
rsworkspace/crates/scheduler/trogon-scheduler/src/store/event_store.rs Change event store StreamRead/Append/Snapshot traits to use typed ScheduleId.
rsworkspace/crates/scheduler/trogon-scheduler/src/queries/schedule_id/tests.rs Update query ScheduleId tests for canonical UUID expectations.
rsworkspace/crates/scheduler/trogon-scheduler/src/queries/schedule_id.rs Ensure query ScheduleId stores the canonical string form.
rsworkspace/crates/scheduler/trogon-scheduler/src/queries/get_schedule.rs Read KV entries directly by canonical schedule id key.
rsworkspace/crates/scheduler/trogon-scheduler/src/projections/schedules/tests.rs Update projection subject parsing tests for schedule-id subjects.
rsworkspace/crates/scheduler/trogon-scheduler/src/projections/schedules/storage/tests.rs Remove tests for deleted derived read-model key scheme.
rsworkspace/crates/scheduler/trogon-scheduler/src/projections/schedules/storage.rs Remove derived read-model key function and its tests.
rsworkspace/crates/scheduler/trogon-scheduler/src/projections/schedules/mod.rs Reconcile/read/write projections keyed by schedule id; parse schedule id from subject.
rsworkspace/crates/scheduler/trogon-scheduler/src/projections/postgres/projector.rs Validate subject/payload identity using schedule id (no derived token).
rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/worker/testkit/tests.rs Update in-memory KV test to use UUID-shaped keys.
rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/worker/testkit.rs Update testkit stream events to use canonical schedule ids and new event IDs.
rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/worker/processor.rs Make processor generic over StreamRead/Append<ScheduleId>; record schedule_id telemetry.
rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/worker/dispatcher/tests.rs Update dispatcher tests to use schedule-id lanes as strings.
rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/worker/dispatcher.rs Update dispatcher lane keys/types from ScheduleKey to schedule-id string lanes.
rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/worker/consumer.rs Update docs to refer to schedule-id lanes; consumer config unchanged otherwise.
rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/wakeup/tests.rs Update wakeup processor tests for typed ScheduleId stream usage.
rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/wakeup.rs Use typed ScheduleId for stream IO and subject building.
rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/schedule_subject/tests.rs Update schedule subject tests to use schedule IDs directly.
rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/schedule_subject.rs Redefine subjects as derived from ScheduleId (no ScheduleKey).
rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/schedule_key/tests.rs Remove tests for deleted ScheduleKey derivation.
rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/schedule_key.rs Remove derived ScheduleKey and StreamRoutingId types.
rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/rrule_wakeup_payload/tests.rs Update payload tests for canonical schedule-id serialization.
rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/rrule_wakeup_payload.rs Serialize schedule_id via to_string() from typed ID.
rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/request/tests.rs Update request/header tests to carry schedule-id header (no key/b64).
rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/request.rs Replace derived-key + base64 headers with Trogon-Schedule-Id.
rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/recorded_events/tests.rs Update recorded event decoding tests to use UUID schedule IDs.
rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/recorded_events.rs Route lanes by schedule-id string; validate routing by equality with stream id.
rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/mod.rs Remove schedule_key module exports; keep ScheduleSubject.
rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/nats_execution_tests.rs Update subject resolver to resolve subjects from typed ScheduleId.
rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/execution_schedules/tests.rs Update execution schedule tests to use UUID schedule IDs.
rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/checkpoints/store/tests.rs Update checkpoint store tests to key directly by schedule id.
rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/checkpoints/store.rs Key checkpoints by schedule id string (no derived key).
rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/checkpoints/record.rs Expose checkpoint key as &ScheduleId and build subjects from it.
rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/checkpoints/codec/tests.rs Update checkpoint codec tests for schedule_id string encoding.
rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/checkpoints/codec.rs Encode checkpoint schedule_id via to_string() from typed ID.
rsworkspace/crates/scheduler/trogon-scheduler/src/nats/tests.rs Update event subject test to assert schedule_id appears directly.
rsworkspace/crates/scheduler/trogon-scheduler/src/nats.rs Publish event subjects directly using the schedule id string.
rsworkspace/crates/scheduler/trogon-scheduler/src/mocks/tests.rs Update mocks tests to use canonical UUID schedule IDs and content fixtures.
rsworkspace/crates/scheduler/trogon-scheduler/src/mocks.rs Update mock store to implement StreamRead/Append/Snapshot traits over typed ScheduleId.
rsworkspace/crates/scheduler/trogon-scheduler/src/lib.rs Re-export mint_schedule_id as part of the public API surface.
rsworkspace/crates/scheduler/trogon-scheduler/src/constants.rs Replace scheduler headers; bump read-model checkpoint key version.
rsworkspace/crates/scheduler/trogon-scheduler/src/commands/schedule_next_occurrence/tests.rs Update next-occurrence command tests for typed ScheduleId stream identity.
rsworkspace/crates/scheduler/trogon-scheduler/src/commands/schedule_next_occurrence.rs Change Decider StreamId to ScheduleId and adapt event building.
rsworkspace/crates/scheduler/trogon-scheduler/src/commands/record_schedule_occurrence/tests.rs Update record-occurrence command tests for typed ScheduleId stream identity.
rsworkspace/crates/scheduler/trogon-scheduler/src/commands/record_schedule_occurrence.rs Change Decider StreamId to ScheduleId and use to_string() in events.
rsworkspace/crates/scheduler/trogon-scheduler/src/commands/mod.rs Add mint_schedule_id() helper and test for canonical UUID v7 shape.
rsworkspace/crates/scheduler/trogon-scheduler/Cargo.toml Remove base64 dep; remove uuid v5 feature usage.
rsworkspace/crates/scheduler/trogon-scheduler-domain/src/constants.rs Remove max-length constant now that IDs are UUIDs.
rsworkspace/crates/scheduler/trogon-scheduler-domain/src/commands/state/tests.rs Update domain state tests to use UUID schedule IDs.
rsworkspace/crates/scheduler/trogon-scheduler-domain/src/commands/resume_schedule/tests.rs Update resume tests and user-facing error strings for UUID ids.
rsworkspace/crates/scheduler/trogon-scheduler-domain/src/commands/resume_schedule.rs Change Decider StreamId to ScheduleId and emit UUID schedule_id.
rsworkspace/crates/scheduler/trogon-scheduler-domain/src/commands/remove_schedule/tests.rs Update remove tests and user-facing error strings for UUID ids.
rsworkspace/crates/scheduler/trogon-scheduler-domain/src/commands/remove_schedule.rs Change Decider StreamId to ScheduleId and emit UUID schedule_id.
rsworkspace/crates/scheduler/trogon-scheduler-domain/src/commands/proto_wire/tests.rs Update proto-wire tests to expect UUID schedule IDs.
rsworkspace/crates/scheduler/trogon-scheduler-domain/src/commands/pause_schedule/tests.rs Update pause tests and user-facing error strings for UUID ids.
rsworkspace/crates/scheduler/trogon-scheduler-domain/src/commands/pause_schedule.rs Change Decider StreamId to ScheduleId and emit UUID schedule_id.
rsworkspace/crates/scheduler/trogon-scheduler-domain/src/commands/domain/schedule_id/tests/prop_tests.rs Update property tests to accept UUID inputs and normalization.
rsworkspace/crates/scheduler/trogon-scheduler-domain/src/commands/domain/schedule_id/tests.rs Replace arbitrary-string validation tests with UUID parsing/normalization tests.
rsworkspace/crates/scheduler/trogon-scheduler-domain/src/commands/domain/schedule_id.rs Redefine ScheduleId as Uuid wrapper; parse via Uuid::parse_str.
rsworkspace/crates/scheduler/trogon-scheduler-domain/src/commands/create_schedule/tests.rs Update create tests and user-facing error strings for UUID ids.
rsworkspace/crates/scheduler/trogon-scheduler-domain/src/commands/create_schedule.rs Change Decider StreamId to ScheduleId and emit UUID schedule_id.
rsworkspace/crates/scheduler/trogon-scheduler-domain/Cargo.toml Add uuid dependency for domain ScheduleId implementation.
rsworkspace/crates/platform/trogon-semconv/src/gen/attribute.rs Rename telemetry attribute from schedule_key to schedule_id.
rsworkspace/crates/decider/trogon-decider-runtime/src/execution.rs Change StreamId bounds from AsRef<str> to Display; update span recording.
rsworkspace/crates/decider/trogon-decider-nats/src/store.rs Change StreamId bounds to Display; adapt stream/snapshot key conversions.
rsworkspace/Cargo.lock Remove base64/sha1_smol path; update dependency set accordingly.
otel/semconv/registry/scheduler.yaml Rename semconv attribute schedule_key to schedule_id.
Suppressed comments (1)

rsworkspace/crates/scheduler/trogon-scheduler/src/projections/schedules/mod.rs:716

  • This error message still refers to a "routing token", but the function now extracts and validates the canonical schedule id from the subject. Updating the wording will make logs/errors easier to interpret during projection/catch-up failures.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Copilot AI review requested due to automatic review settings August 2, 2026 19:06
@yordis
yordis force-pushed the yordis/remove-scheduler-id-remapping branch from 76fa5e7 to e88a526 Compare August 2, 2026 19:06

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 72 out of 73 changed files in this pull request and generated no new comments.

Suppressed comments (2)

rsworkspace/crates/scheduler/trogon-scheduler/src/projections/schedules/mod.rs:717

  • The error message still refers to a "routing token", but this helper now parses a schedule ID from the subject. Updating the wording will make logs/errors match the current identity model and reduce confusion during debugging.

This issue also appears on line 720 of the same file.
rsworkspace/crates/scheduler/trogon-scheduler/src/projections/schedules/mod.rs:724

  • This error message still says "empty routing token", but the code is treating the last segment as a schedule ID. Renaming it to "empty schedule id" keeps diagnostics consistent with the new subject contract.

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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
rsworkspace/crates/scheduler/trogon-scheduler/src/projections/postgres/projector.rs (1)

291-295: 🗄️ Data Integrity & Integration | 🟠 Major | 🏗️ Heavy lift

Keep the routed identifier typed.

Line 284 validates schedule_id into ScheduleId, but Line 291 recreates a String and stores both representations in RoutedEvent. Remove the primitive field. Pass ScheduleId through projection logic and convert it to text only at a storage or wire boundary.

As per coding guidelines: “Prefer domain-specific value objects over primitives” and “persist only validated domain types to storage, events, and runtime state.”

🤖 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/scheduler/trogon-scheduler/src/projections/postgres/projector.rs`
around lines 291 - 295, Update the projection logic around RoutedEvent
construction to retain the validated ScheduleId from the earlier schedule_id
validation instead of converting it to String. Remove the primitive
representation and pass ScheduleId through RoutedEvent and related projection
paths, converting to text only at explicit storage or wire boundaries.

Source: Coding guidelines

🧹 Nitpick comments (2)
rsworkspace/crates/scheduler/trogon-scheduler-domain/src/commands/create_schedule/tests.rs (1)

15-26: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Extract the repeated UUID literal into a named constant.

The literal "0198fa2f6d0a7b1a8cf9f762e73a1c45" appears at Line 53 and throughout Lines 86-212 (more than a dozen call sites). Define a const ID: &str = "0198fa2f6d0a7b1a8cf9f762e73a1c45"; at the top of the file, mirroring the pattern already used in domain/schedule_id/tests.rs. Reference ID from create_schedule(ID), added(ID), ScheduleId::parse(ID), and the error-message assertions.

This reduces the risk that a future edit changes the literal in one place but not another, which would silently split a test across two different fixture identities instead of failing to compile.

Also applies to: 53-53, 86-212

🤖 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/scheduler/trogon-scheduler-domain/src/commands/create_schedule/tests.rs`
around lines 15 - 26, Define a file-level ID constant in the schedule command
tests using the repeated UUID literal, following the existing schedule_id test
pattern. Replace every matching fixture occurrence—including create_schedule,
added, ScheduleId::parse, and error-message assertions—with ID so all tests
consistently use one named identity.
rsworkspace/crates/scheduler/trogon-scheduler/src/commands/record_schedule_occurrence.rs (1)

177-182: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Keep ScheduleId in recurrence_event.

Line 178 converts the validated ID to String before calling the helper. The helper then accepts any &str, so a future caller can emit an event with an invalid schedule ID. Change the helper parameter to &ScheduleId. Serialize it only when assigning protobuf fields.

Proposed refactor
-                let follow_up = recurrence_event(
-                    &command.id.to_string(),
+                let follow_up = recurrence_event(
+                    &command.id,
                     step,
                     occurrence_sequence.as_u64(),
                     command.recorded_at,
                 )?;

-fn recurrence_event(
-    schedule_id: &str,
+fn recurrence_event(
+    schedule_id: &ScheduleId,

As per coding guidelines, “Prefer domain-specific value objects over primitives” and “persist only validated domain types to storage, events, and runtime state.”

🤖 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/scheduler/trogon-scheduler/src/commands/record_schedule_occurrence.rs`
around lines 177 - 182, Update recurrence_event to accept &ScheduleId instead of
&str, and pass the validated ScheduleId directly from the call site around
command.id. Keep the domain type through event construction, serializing it only
at the protobuf field assignment boundary; update any other callers accordingly.

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/scheduler/trogon-scheduler/src/nats.rs`:
- Around line 11-12: Update event_subject to accept &ScheduleId instead of &str,
and build the subject from the ScheduleId value while converting it to text only
at the NATS boundary. Update its callers to pass ScheduleId references,
preserving the existing subject format and avoiding arbitrary string routing
identities.

In `@rsworkspace/crates/scheduler/trogon-scheduler/src/store/event_store.rs`:
- Around line 91-104: Update the EventStore implementations of StreamRead,
StreamReadForwards, StreamReadBackwards, and StreamReadAll to be zero-cost
passthroughs: remove ScheduleId-to-String conversion and SchedulerError mapping,
pass the incoming requests directly to self.inner, and expose the underlying SDK
error and response types. Move any required identifier conversion to the
caller-side domain adapter.

---

Outside diff comments:
In
`@rsworkspace/crates/scheduler/trogon-scheduler/src/projections/postgres/projector.rs`:
- Around line 291-295: Update the projection logic around RoutedEvent
construction to retain the validated ScheduleId from the earlier schedule_id
validation instead of converting it to String. Remove the primitive
representation and pass ScheduleId through RoutedEvent and related projection
paths, converting to text only at explicit storage or wire boundaries.

---

Nitpick comments:
In
`@rsworkspace/crates/scheduler/trogon-scheduler-domain/src/commands/create_schedule/tests.rs`:
- Around line 15-26: Define a file-level ID constant in the schedule command
tests using the repeated UUID literal, following the existing schedule_id test
pattern. Replace every matching fixture occurrence—including create_schedule,
added, ScheduleId::parse, and error-message assertions—with ID so all tests
consistently use one named identity.

In
`@rsworkspace/crates/scheduler/trogon-scheduler/src/commands/record_schedule_occurrence.rs`:
- Around line 177-182: Update recurrence_event to accept &ScheduleId instead of
&str, and pass the validated ScheduleId directly from the call site around
command.id. Keep the domain type through event construction, serializing it only
at the protobuf field assignment boundary; update any other callers accordingly.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

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

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: d94d4f85-0946-4562-8345-b9cd8a4411f5

📥 Commits

Reviewing files that changed from the base of the PR and between 62d481a and e88a526.

⛔ Files ignored due to path filters (2)
  • rsworkspace/Cargo.lock is excluded by !**/*.lock
  • rsworkspace/crates/platform/trogon-semconv/src/gen/attribute.rs is excluded by !**/gen/**
📒 Files selected for processing (71)
  • otel/semconv/registry/scheduler.yaml
  • rsworkspace/crates/decider/trogon-decider-nats/src/store.rs
  • rsworkspace/crates/decider/trogon-decider-runtime/src/execution.rs
  • rsworkspace/crates/scheduler/trogon-scheduler-domain/Cargo.toml
  • rsworkspace/crates/scheduler/trogon-scheduler-domain/src/commands/create_schedule.rs
  • rsworkspace/crates/scheduler/trogon-scheduler-domain/src/commands/create_schedule/tests.rs
  • rsworkspace/crates/scheduler/trogon-scheduler-domain/src/commands/domain/schedule_id.rs
  • rsworkspace/crates/scheduler/trogon-scheduler-domain/src/commands/domain/schedule_id/tests.rs
  • rsworkspace/crates/scheduler/trogon-scheduler-domain/src/commands/domain/schedule_id/tests/prop_tests.rs
  • rsworkspace/crates/scheduler/trogon-scheduler-domain/src/commands/pause_schedule.rs
  • rsworkspace/crates/scheduler/trogon-scheduler-domain/src/commands/pause_schedule/tests.rs
  • rsworkspace/crates/scheduler/trogon-scheduler-domain/src/commands/proto_wire/tests.rs
  • rsworkspace/crates/scheduler/trogon-scheduler-domain/src/commands/remove_schedule.rs
  • rsworkspace/crates/scheduler/trogon-scheduler-domain/src/commands/remove_schedule/tests.rs
  • rsworkspace/crates/scheduler/trogon-scheduler-domain/src/commands/resume_schedule.rs
  • rsworkspace/crates/scheduler/trogon-scheduler-domain/src/commands/resume_schedule/tests.rs
  • rsworkspace/crates/scheduler/trogon-scheduler-domain/src/commands/state/tests.rs
  • rsworkspace/crates/scheduler/trogon-scheduler-domain/src/constants.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/Cargo.toml
  • rsworkspace/crates/scheduler/trogon-scheduler/src/commands/mod.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/commands/record_schedule_occurrence.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/commands/record_schedule_occurrence/tests.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/commands/schedule_next_occurrence.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/commands/schedule_next_occurrence/tests.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/constants.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/lib.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/mocks.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/mocks/tests.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/nats.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/nats/tests.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/checkpoints/codec.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/checkpoints/codec/tests.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/checkpoints/record.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/checkpoints/store.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/checkpoints/store/tests.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/execution_schedules/tests.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/nats_execution_tests.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/mod.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/reconcile/tests.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/recorded_events.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/recorded_events/tests.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/request.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/request/tests.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/rrule_wakeup_payload.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/rrule_wakeup_payload/tests.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/schedule_key.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/schedule_key/tests.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/schedule_subject.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/schedule_subject/tests.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/wakeup.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/wakeup/tests.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/worker/consumer.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/worker/dispatcher.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/worker/dispatcher/tests.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/worker/processor.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/worker/processor/tests.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/worker/testkit.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/worker/testkit/tests.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/projections/postgres/projector.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/projections/schedules/mod.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/projections/schedules/storage.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/projections/schedules/storage/tests.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/projections/schedules/tests.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/queries/get_schedule.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/queries/schedule_id.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/queries/schedule_id/tests.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/store/event_store.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/tests/integration.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/tests/postgres_projection.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/tests/postgres_projector_e2e.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/tests/schedule_unit.rs
💤 Files with no reviewable changes (6)
  • rsworkspace/crates/scheduler/trogon-scheduler/src/projections/schedules/storage/tests.rs
  • rsworkspace/crates/scheduler/trogon-scheduler-domain/src/constants.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/projections/schedules/storage.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/schedule_key.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/schedule_key/tests.rs
  • rsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/mod.rs

Comment thread rsworkspace/crates/scheduler/trogon-scheduler/src/nats.rs Outdated
Comment thread rsworkspace/crates/scheduler/trogon-scheduler/src/store/event_store.rs Outdated
Copilot AI review requested due to automatic review settings August 2, 2026 19:32
@yordis
yordis force-pushed the yordis/remove-scheduler-id-remapping branch from e88a526 to 0c6b505 Compare August 2, 2026 19:32

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 79 out of 80 changed files in this pull request and generated no new comments.

Suppressed comments (1)

rsworkspace/crates/scheduler/trogon-scheduler-domain/Cargo.toml:33

  • ScheduleIdError derives thiserror::Error and marks uuid::Error as #[source], which requires uuid::Error: std::error::Error. In this crate’s Cargo.toml, uuid is declared with default-features = false and no explicit std feature, so whether uuid::Error implements std::error::Error becomes an implicit dependency on features enabled elsewhere in the workspace. To make this crate self-contained and avoid build breakage when feature unification changes, enable the std feature (or use the workspace uuid dependency if it already standardizes on std).
uuid = { version = "=1.24.0", default-features = false }

@github-actions

github-actions Bot commented Aug 2, 2026

Copy link
Copy Markdown

badge

Code Coverage Summary

Details
Filename                                                                                            Stmts    Miss  Cover    Missing
------------------------------------------------------------------------------------------------  -------  ------  -------  ----------------------------------------------------------------------------------------------------------------------------------------------------------------
crates/mcp/mcp-nats/src/nats/subjects/client/create_elicitation.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/cancelled.rs                                              12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/client/create_message.rs                                         12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/client/roots_list_changed.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/progress.rs                                               12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/client/ping.rs                                                    9       0  100.00%
crates/platform/jsonrpc-nats/src/codec/reconstruct.rs                                                  90       5  94.44%   56-59, 91
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/decode.rs                                                       57       0  100.00%
crates/platform/jsonrpc-nats/src/codec/encode.rs                                                       31       0  100.00%
crates/platform/trogon-std/src/telemetry/http.rs                                                       58       0  100.00%
crates/decider/trogon-decider-guest-macros/src/lib.rs                                                 136      28  79.41%   14-19, 29-40, 116-119, 437-446, 450
crates/a2a/a2a-gateway/src/policy/tier2_cel/evaluator.rs                                              138       0  100.00%
crates/a2a/a2a-gateway/src/policy/tier2_cel/compiler.rs                                                25       3  88.00%   61-63
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/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/error.rs                                                          48       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/mint.rs                                                           59       0  100.00%
crates/aauth/trogon-aauth-person/src/mission.rs                                                        65       0  100.00%
crates/aauth/trogon-aauth-person/src/pending.rs                                                        73       0  100.00%
crates/aauth/trogon-aauth-person/src/subagent.rs                                                       10       0  100.00%
crates/mcp/mcp-nats/src/telemetry/transport.rs                                                          6       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/platform/trogon-gateway/src/source/twitter/config.rs                                             9       0  100.00%
crates/platform/trogon-telemetry/src/resource_attribute.rs                                             13       0  100.00%
crates/platform/trogon-telemetry/src/trace.rs                                                          15       1  93.33%   24
crates/platform/trogon-telemetry/src/log.rs                                                            36       0  100.00%
crates/platform/trogon-telemetry/src/lib.rs                                                           135      23  82.96%   119, 124, 129, 139-140, 146-164, 200, 203, 206, 212
crates/platform/trogon-telemetry/src/service_name.rs                                                   17       0  100.00%
crates/platform/trogon-telemetry/src/metric.rs                                                         18       1  94.44%   30
crates/aauth/trogon-aauth-verify/src/delegation.rs                                                     53       0  100.00%
crates/aauth/trogon-aauth-verify/src/token.rs                                                         184       1  99.46%   181
crates/aauth/trogon-aauth-verify/src/challenge.rs                                                      77       0  100.00%
crates/aauth/trogon-aauth-verify/src/test_support.rs                                                   86       0  100.00%
crates/aauth/trogon-aauth-verify/src/upstream.rs                                                       20       0  100.00%
crates/aauth/trogon-aauth-verify/src/jkt.rs                                                            33       0  100.00%
crates/aauth/trogon-aauth-verify/src/http_pop.rs                                                      268       0  100.00%
crates/aauth/trogon-aauth-verify/src/jwks_cache.rs                                                     39       0  100.00%
crates/aauth/trogon-aauth-verify/src/mission.rs                                                        33       0  100.00%
crates/aauth/trogon-aauth-verify/src/replay.rs                                                         26       0  100.00%
crates/aauth/trogon-aauth-verify/src/jwks_http.rs                                                     144       0  100.00%
crates/aauth/trogon-aauth-verify/src/jwks.rs                                                           15       0  100.00%
crates/aauth/trogon-aauth-verify/src/nats_pop.rs                                                      125       1  99.20%   313
crates/aauth/trogon-aauth-verify/src/time_source.rs                                                    10       0  100.00%
crates/platform/trogon-nats/src/messaging.rs                                                          168       2  98.81%   146, 156
crates/platform/trogon-nats/src/connect.rs                                                             26       6  76.92%   42-47
crates/platform/trogon-nats/src/nats_token.rs                                                          56       0  100.00%
crates/platform/trogon-nats/src/mocks.rs                                                              246       0  100.00%
crates/platform/trogon-nats/src/server_info.rs                                                         21       3  85.71%   19-21
crates/platform/trogon-nats/src/auth.rs                                                                45       0  100.00%
crates/platform/trogon-nats/src/client.rs                                                              22      22  0.00%    50-86
crates/platform/trogon-nats/src/token.rs                                                                6       0  100.00%
crates/platform/trogon-nats/src/test_support.rs                                                        26       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/update.rs                                              20       0  100.00%
crates/acp/acp-nats/src/nats/subjects/responses/response.rs                                            20       0  100.00%
crates/acp/acp-nats/src/nats/subjects/responses/prompt_response.rs                                     20       0  100.00%
crates/acp/acp-nats/src/nats/subjects/responses/ext_ready.rs                                           12       0  100.00%
crates/platform/trogon-gateway/src/source/datadog/datadog_webhook_token.rs                              9       0  100.00%
crates/platform/trogon-gateway/src/source/datadog/server.rs                                           108       0  100.00%
crates/platform/trogon-gateway/src/source/datadog/signature.rs                                          7       0  100.00%
crates/platform/trogon-gateway/src/source/datadog/datadog_event_type.rs                                20       0  100.00%
crates/scheduler/trogon-scheduler/src/processor/execution/checkpoints/codec/twin.rs                    96       0  100.00%
crates/a2a/a2a-nats/src/catalog/store.rs                                                              117       0  100.00%
crates/a2a/a2a-nats/src/catalog/agent_view.rs                                                          47       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/registrar.rs                                                           56       0  100.00%
crates/a2a/a2a-nats/src/catalog/nats_kv.rs                                                              8       0  100.00%
crates/a2a/a2a-nats/src/catalog/watch.rs                                                               18       0  100.00%
crates/scheduler/trogon-scheduler/src/commands/domain/recurrence.rs                                    78       1  98.72%   99
crates/scheduler/trogon-scheduler/src/commands/domain/schedule_occurrence_sequence.rs                  16       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/subagent.rs                                                          34       0  100.00%
crates/aauth/trogon-aauth-sdk/src/capabilities.rs                                                       7       0  100.00%
crates/aauth/trogon-aauth-sdk/src/verify_response.rs                                                   70       0  100.00%
crates/aauth/trogon-aauth-sdk/src/delegation.rs                                                        15       0  100.00%
crates/a2a/a2a-nats-server/src/main.rs                                                                  1       0  100.00%
crates/a2a/a2a-nats-server/src/noop_handler.rs                                                         22       0  100.00%
crates/a2a/a2a-nats-server/src/runtime.rs                                                              17       0  100.00%
crates/platform/trogon-std/src/dirs/fixed.rs                                                           32       0  100.00%
crates/platform/trogon-std/src/dirs/system.rs                                                          39       0  100.00%
crates/a2a/a2a-nats/src/nats/subjects/tasks/events.rs                                                  17       0  100.00%
crates/platform/trogonai-proto/src/agents/agents/codec.rs                                              30       0  100.00%
crates/a2a/a2a-nats-http/src/handlers/mod.rs                                                          185      12  93.51%   68, 88-91, 121, 155, 169-172, 185
crates/a2a/a2a-redaction/src/wasm/engine.rs                                                            62      11  82.26%   29-31, 63-64, 76-78, 82-84
crates/a2a/a2a-redaction/src/wasm/mod.rs                                                              110       9  91.82%   132-134, 147-149, 162-164
crates/acp/acp-nats/src/agent/resume_session.rs                                                        16       0  100.00%
crates/acp/acp-nats/src/agent/ext_notification.rs                                                      12       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/js_request.rs                                                            73       6  91.78%   84-89
crates/acp/acp-nats/src/agent/fork_session.rs                                                          16       0  100.00%
crates/acp/acp-nats/src/agent/providers_list.rs                                                         5       0  100.00%
crates/acp/acp-nats/src/agent/set_session_mode.rs                                                      16       0  100.00%
crates/acp/acp-nats/src/agent/ext_method.rs                                                            12       0  100.00%
crates/acp/acp-nats/src/agent/delete_session.rs                                                        16       0  100.00%
crates/acp/acp-nats/src/agent/logout.rs                                                                 5       0  100.00%
crates/acp/acp-nats/src/agent/providers_disable.rs                                                      5       0  100.00%
crates/acp/acp-nats/src/agent/load_session.rs                                                          16       0  100.00%
crates/acp/acp-nats/src/agent/providers_set.rs                                                          5       0  100.00%
crates/acp/acp-nats/src/agent/list_sessions.rs                                                          5       0  100.00%
crates/acp/acp-nats/src/agent/rpc_call.rs                                                              23       0  100.00%
crates/acp/acp-nats/src/agent/prompt.rs                                                               156       7  95.51%   202-208
crates/acp/acp-nats/src/agent/set_session_config_option.rs                                             16       0  100.00%
crates/acp/acp-nats/src/agent/authenticate.rs                                                           5       0  100.00%
crates/acp/acp-nats/src/agent/bridge.rs                                                               138       4  97.10%   119-122
crates/acp/acp-nats/src/agent/initialize.rs                                                             6       0  100.00%
crates/acp/acp-nats/src/agent/test_support.rs                                                         194       0  100.00%
crates/acp/acp-nats/src/agent/new_session.rs                                                            5       0  100.00%
crates/a2a/a2a-nats/src/jetstream/provision.rs                                                         16       0  100.00%
crates/a2a/a2a-nats/src/jetstream/streams.rs                                                            9       0  100.00%
crates/a2a/a2a-nats/src/jetstream/stream_options.rs                                                    50       0  100.00%
crates/a2a/a2a-nats/src/jetstream/consumers.rs                                                         50       0  100.00%
crates/platform/trogon-identity-types/src/aauth/error.rs                                               14       0  100.00%
crates/platform/trogon-identity-types/src/aauth/headers.rs                                             47       0  100.00%
crates/platform/trogon-identity-types/src/aauth/login.rs                                               78       0  100.00%
crates/platform/trogon-identity-types/src/aauth/mission.rs                                             33       0  100.00%
crates/platform/trogon-identity-types/src/aauth/mod.rs                                                 69       0  100.00%
crates/platform/trogon-identity-types/src/aauth/person_server.rs                                       23       0  100.00%
crates/a2a/a2a-nats/src/catalog/import_gate/principal.rs                                                9       0  100.00%
crates/a2a/a2a-nats/src/catalog/import_gate/allow_all.rs                                                2       0  100.00%
crates/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/acp/acp-nats/src/boundary/eof_signal_reader.rs                                                  20       0  100.00%
crates/acp/acp-nats/src/boundary/connection_client.rs                                                  29       0  100.00%
crates/acp/acp-nats/src/nats/subjects/stream.rs                                                        56       0  100.00%
crates/platform/trogon-jwks-publisher/src/publisher.rs                                                 92       0  100.00%
crates/platform/trogon-jwks-publisher/src/provider.rs                                                 118       0  100.00%
crates/scheduler/trogon-scheduler-domain/src/commands/state.rs                                         82       0  100.00%
crates/scheduler/trogon-scheduler-domain/src/commands/pause_schedule.rs                                31       0  100.00%
crates/scheduler/trogon-scheduler-domain/src/commands/create_schedule.rs                               32       0  100.00%
crates/scheduler/trogon-scheduler-domain/src/commands/proto_wire.rs                                   138       1  99.28%   231
crates/scheduler/trogon-scheduler-domain/src/commands/remove_schedule.rs                               30       0  100.00%
crates/scheduler/trogon-scheduler-domain/src/commands/resume_schedule.rs                               34       0  100.00%
crates/scheduler/trogon-scheduler-domain/src/subject.rs                                                26       0  100.00%
crates/platform/trogon-nats/src/telemetry/messaging.rs                                                 37       0  100.00%
crates/aauth/trogon-aauth-sdk/src/exchange/mod.rs                                                      17       0  100.00%
crates/aauth/trogon-aauth-sdk/src/exchange/client.rs                                                  283       0  100.00%
crates/aauth/trogon-aauth-sdk/src/exchange/challenge.rs                                                50       0  100.00%
crates/aauth/trogon-aauth-sdk/src/exchange/core.rs                                                    138       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/platform/trogon-gateway/src/source/github/config.rs                                              9       0  100.00%
crates/decider/trogon-decider-runtime/src/snapshot/mod.rs                                               3       0  100.00%
crates/decider/trogon-decider-runtime/src/snapshot/read_snapshot.rs                                     3       0  100.00%
crates/decider/trogon-decider-runtime/src/snapshot/snapshot_type.rs                                    42       0  100.00%
crates/aauth/trogon-aauth-person/src/http/mod.rs                                                      213       0  100.00%
crates/a2a/a2a-gateway/src/runtime/aauth_env.rs                                                       162       0  100.00%
crates/a2a/a2a-gateway/src/runtime/reply.rs                                                             5       0  100.00%
crates/a2a/a2a-gateway/src/runtime/streaming.rs                                                        35       0  100.00%
crates/a2a/a2a-gateway/src/runtime/tier1.rs                                                            30       0  100.00%
crates/a2a/a2a-gateway/src/runtime/audit_publish.rs                                                    16       0  100.00%
crates/a2a/a2a-gateway/src/runtime/tier1_denial.rs                                                     34       1  97.06%   60
crates/a2a/a2a-gateway/src/runtime/policy_stack.rs                                                     78      31  60.26%   82, 89, 101-110, 117-118, 133-143, 152-168, 173
crates/a2a/a2a-gateway/src/runtime/env.rs                                                              55       0  100.00%
crates/ard/ard-registry/src/http_error.rs                                                              17       0  100.00%
crates/ard/ard-registry/src/lexical_rank.rs                                                            55       2  96.36%   15, 64
crates/ard/ard-registry/src/extract.rs                                                                 12       0  100.00%
crates/ard/ard-registry/src/registry.rs                                                               134       3  97.76%   78, 174, 183
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/search_filters.rs                                                          28       0  100.00%
crates/ard/ard-registry/src/facet_field.rs                                                             13       0  100.00%
crates/ard/ard-registry/src/filters.rs                                                                 31       0  100.00%
crates/ard/ard-registry/src/list_agents_request.rs                                                     21       0  100.00%
crates/ard/ard-registry/src/page_token.rs                                                              14       0  100.00%
crates/ard/ard-registry/src/explore_request.rs                                                         30       0  100.00%
crates/ard/ard-registry/src/registry_config.rs                                                         16       0  100.00%
crates/ard/ard-registry/src/search_request.rs                                                          32       1  96.88%   43
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/queries/schedule_id.rs                                           28       0  100.00%
crates/scheduler/trogon-scheduler/src/queries/get_schedule.rs                                           3       0  100.00%
crates/scheduler/trogon-scheduler/src/queries/decode.rs                                                95       0  100.00%
crates/a2a/a2a-nats-stdio/src/main.rs                                                                   1       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/wire.rs                                                                  22       0  100.00%
crates/a2a/a2a-auth-callout/src/wire/wire_codec.rs                                                     58       0  100.00%
crates/a2a/a2a-auth-callout/src/wire/callout_auth_response_claims.rs                                   54       3  94.44%   70-72
crates/a2a/a2a-auth-callout/src/wire/nkey_public.rs                                                    83       3  96.39%   102, 118-119
crates/a2a/a2a-auth-callout/src/wire/server_auth_request_claims.rs                                    100       4  96.00%   24-26, 127
crates/a2a/a2a-auth-callout/src/wire/nkey_seed.rs                                                      20       0  100.00%
crates/a2a/a2a-auth-callout/src/wire/server_auth_request_envelope.rs                                   68       1  98.53%   64
crates/a2a/a2a-auth-callout/src/wire/bridge_adapter.rs                                                 73       0  100.00%
crates/a2a/a2a-auth-callout/src/wire/xkey_public.rs                                                    23       0  100.00%
crates/a2a/a2a-auth-callout/src/wire/test_encode.rs                                                    59       0  100.00%
crates/platform/trogon-service-config/src/lib.rs                                                       38       0  100.00%
crates/a2a/a2a-auth-callout/src/denial_reason.rs                                                       15       0  100.00%
crates/a2a/a2a-auth-callout/src/denial_category.rs                                                     29       0  100.00%
crates/a2a/a2a-auth-callout/src/error.rs                                                                3       0  100.00%
crates/a2a/a2a-auth-callout/src/caller_jwt_header.rs                                                   20       0  100.00%
crates/a2a/a2a-auth-callout/src/subscriber.rs                                                          96      96  0.00%    23-174
crates/a2a/a2a-auth-callout/src/test_support.rs                                                        20      20  0.00%    16-36
crates/a2a/a2a-auth-callout/src/denial_claims.rs                                                       68       0  100.00%
crates/a2a/a2a-auth-callout/src/main.rs                                                                 1       1  0.00%    223
crates/a2a/a2a-auth-callout/src/dispatcher.rs                                                          34      13  61.76%   83-112
crates/a2a/a2a-auth-callout/src/account_resolver.rs                                                    31       0  100.00%
crates/a2a/a2a-auth-callout/src/permissions.rs                                                         85       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/acp/acp-nats/src/jetstream/streams.rs                                                           18       0  100.00%
crates/decider/trogon-decider-runtime/src/stream/read_stream.rs                                         7       0  100.00%
crates/decider/trogon-decider-runtime/src/stream/append_stream.rs                                       5       0  100.00%
crates/decider/trogon-decider-runtime/src/stream/stream_position.rs                                    26       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-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/platform/trogon-std/src/uuid.rs                                                                  3       0  100.00%
crates/platform/trogon-std/src/signal.rs                                                               22      12  45.45%   6-11, 18-25, 34
crates/platform/trogon-std/src/http.rs                                                                  8       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-gateway/src/gw_pull_backpressure.rs                                                    209       3  98.56%   487, 687, 700
crates/a2a/a2a-gateway/src/aauth.rs                                                                   288       0  100.00%
crates/a2a/a2a-gateway/src/main.rs                                                                      1       0  100.00%
crates/a2a/a2a-gateway/src/audit_ingress.rs                                                           110       0  100.00%
crates/a2a/a2a-gateway/src/agent_card_surface.rs                                                        3       0  100.00%
crates/a2a/a2a-gateway/src/gw_ingress_stream.rs                                                       144       4  97.22%   312-314, 529
crates/a2a/a2a-gateway/src/jwt_caller_identity.rs                                                     151       4  97.35%   164-168, 181-185
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/runtime.rs                                                                  11       0  100.00%
crates/a2a/a2a-gateway/src/lib.rs                                                                       3       0  100.00%
crates/a2a/a2a-gateway/src/config.rs                                                                   57       0  100.00%
crates/a2a/a2a-auth-callout/src/credentials/oidc.rs                                                   188       4  97.87%   212-215
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/acp/acp-nats-server/src/compat.rs                                                              174       0  100.00%
crates/acp/acp-nats-server/src/component.rs                                                            70       0  100.00%
crates/acp/acp-nats-server/src/config.rs                                                               39       0  100.00%
crates/acp/acp-nats-server/src/main.rs                                                                 31       1  96.77%   81
crates/platform/trogon-nats/src/jetstream/claim_retention.rs                                           10       0  100.00%
crates/platform/trogon-nats/src/jetstream/publish.rs                                                   30       0  100.00%
crates/platform/trogon-nats/src/jetstream/traits.rs                                                    46      34  26.09%   181-239
crates/platform/trogon-nats/src/jetstream/create_conflicts.rs                                          14       0  100.00%
crates/platform/trogon-nats/src/jetstream/claim_check.rs                                              104       3  97.12%   43-45
crates/platform/trogon-nats/src/jetstream/mocks.rs                                                    941       1  99.89%   507
crates/platform/trogon-nats/src/jetstream/stream_max_age.rs                                             8       0  100.00%
crates/platform/trogon-nats/src/jetstream/object_store.rs                                              11       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/scheduler/trogon-scheduler/src/processor/execution/wakeup.rs                                    91       1  98.90%   123
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/rpc_reply.rs                                                           107      43  59.81%   45-47, 61-63, 80-120
crates/acp/acp-nats/src/client/test_support.rs                                                         17       0  100.00%
crates/acp/acp-nats/src/client/request_permission.rs                                                   40       0  100.00%
crates/acp/acp-nats/src/client/session_update.rs                                                        8       0  100.00%
crates/acp/acp-nats/src/client/fs_read_text_file.rs                                                    27       0  100.00%
crates/acp/acp-nats/src/client/terminal_kill.rs                                                        41       0  100.00%
crates/acp/acp-nats/src/client/terminal_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/elicitation_create.rs                                                   41       0  100.00%
crates/acp/acp-nats/src/client/ext.rs                                                                  62       0  100.00%
crates/acp/acp-nats/src/client/terminal_release.rs                                                     35       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_complete.rs                                                  8       0  100.00%
crates/acp/acp-nats/src/client/mod.rs                                                                 105       1  99.05%   59
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/config.rs                                                                      59       0  100.00%
crates/mcp/mcp-nats/src/mcp_transport_headers.rs                                                       53       0  100.00%
crates/mcp/mcp-nats/src/mcp_peer_id.rs                                                                 15       0  100.00%
crates/mcp/mcp-nats/src/client.rs                                                                      12       0  100.00%
crates/mcp/mcp-nats/src/jsonrpc.rs                                                                      5       0  100.00%
crates/mcp/mcp-nats/src/mcp_prefix.rs                                                                  15       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/a2a/a2a-redaction/src/bin/sign-bundle.rs                                                         1       1  0.00%    163
crates/a2a/a2a-nats/src/catalog/import_gate/spicedb/mod.rs                                            108       0  100.00%
crates/a2a/a2a-nats/src/catalog/import_gate/spicedb/cache.rs                                           36       0  100.00%
crates/a2a/a2a-nats/src/catalog/import_gate/spicedb/client.rs                                          29      15  48.28%   43-69, 97-99, 108-117
crates/a2a/a2a-nats/src/catalog/import_gate/spicedb/config.rs                                          70       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/acp/acp-nats/src/nats/subjects/commands/set_config_option.rs                                    15       0  100.00%
crates/acp/acp-nats/src/nats/subjects/commands/set_mode.rs                                             15       0  100.00%
crates/acp/acp-nats/src/nats/subjects/commands/fork.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/close.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/prompt.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/cancel.rs                                               15       0  100.00%
crates/platform/trogonai-proto/src/scheduler/schedules/codec.rs                                        57       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/rrule_wakeup_payload.rs       35       0  100.00%
crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/schedule_subject.rs           34       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/recorded_events.rs           238      12  94.96%   196-201, 238, 246, 267, 287, 293, 299, 332, 342, 360, 444
crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/request.rs                   221       2  99.10%   255, 260
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/loader.rs                                          85       9  89.41%   93-95, 97-99, 124-126
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/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/platform/trogon-std/src/fs/mem.rs                                                               85       0  100.00%
crates/platform/trogon-std/src/fs/system.rs                                                            15       0  100.00%
crates/platform/trogon-identity-types/src/act_chain.rs                                                 13       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/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/server.rs                                                            139       0  100.00%
crates/aauth/trogon-aauth-as/src/test_support.rs                                                      122       0  100.00%
crates/aauth/trogon-aauth-as/src/mint.rs                                                               56       0  100.00%
crates/aauth/trogon-aauth-as/src/trust.rs                                                              60       0  100.00%
crates/aauth/trogon-aauth-as/src/pending.rs                                                            26       0  100.00%
crates/aauth/trogon-aauth-as/src/http.rs                                                               82       0  100.00%
crates/aauth/trogon-aauth-as/src/subagent.rs                                                           10       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/scheduler/trogon-scheduler/src/processor/execution/worker/consumer.rs                           77       0  100.00%
crates/a2a/a2a-pack/src/agent_card_schema.rs                                                           40       0  100.00%
crates/a2a/a2a-pack/src/agent_card_read.rs                                                             23       0  100.00%
crates/a2a/a2a-pack/src/resource_tuples.rs                                                            152       0  100.00%
crates/scheduler/trogon-scheduler/src/processor/execution/execution_schedules/mod.rs                   82       0  100.00%
crates/a2a/a2a-nats-http/src/router.rs                                                                 55      13  76.36%   60-63, 69-79
crates/a2a/a2a-nats-http/src/rest.rs                                                                  316       8  97.47%   123-126, 282-285
crates/a2a/a2a-nats-http/src/headers.rs                                                               129       1  99.22%   154
crates/a2a/a2a-nats-http/src/main.rs                                                                    1       0  100.00%
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-auth-callout/src/signing_key_source/loader.rs                                           23       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/signing_key_handle.rs                               15       0  100.00%
crates/a2a/a2a-auth-callout/src/signing_key_source/env.rs                                              40       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/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/minting_material.rs                                 18       0  100.00%
crates/a2a/a2a-gateway/src/policy/tier3_redaction/gate.rs                                               3       0  100.00%
crates/a2a/a2a-gateway/src/policy/tier3_redaction/decision.rs                                          22       0  100.00%
crates/a2a/a2a-gateway/src/policy/tier3_redaction/mod.rs                                               33       2  93.94%   54, 58
crates/a2a/a2a-gateway/src/policy/tier3_redaction/context.rs                                           40       0  100.00%
crates/a2a/a2a-gateway/src/policy/tier3_redaction/manifest.rs                                          69       3  95.65%   112, 121, 132
crates/a2a/a2a-gateway/src/policy/tier3_redaction/json_path.rs                                         84       5  94.05%   37, 49, 85, 104, 115
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/ard/ard-nats/src/memory_catalog_store.rs                                                        32       0  100.00%
crates/ard/ard-nats/src/store.rs                                                                        3       0  100.00%
crates/ard/ard-nats/src/catalog_subject.rs                                                             14       3  78.57%   16-18
crates/ard/ard-nats/src/catalog_event.rs                                                               71       0  100.00%
crates/ard/ard-nats/src/catalog_index.rs                                                               82       2  97.56%   37, 104
crates/platform/trogon-gateway/src/source_status.rs                                                    12       0  100.00%
crates/platform/trogon-gateway/src/streams.rs                                                           7       0  100.00%
crates/platform/trogon-gateway/src/http.rs                                                             13       0  100.00%
crates/platform/trogon-gateway/src/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_integration_id.rs                                            28       2  92.86%   58, 60
crates/platform/trogon-gateway/src/main.rs                                                             26       0  100.00%
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-redaction/src/a2a_method.rs                                                             41       0  100.00%
crates/a2a/a2a-redaction/src/redactor.rs                                                               32       0  100.00%
crates/a2a/a2a-redaction/src/wasm_bundle_path.rs                                                       18       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/skill_id.rs                                                               26       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/signature.rs                                          13       0  100.00%
crates/platform/trogon-gateway/src/source/gitlab/server.rs                                             78       0  100.00%
crates/mcp/mcp-nats/src/nats/parsing.rs                                                                54       1  98.15%   13
crates/mcp/mcp-nats/src/nats/mod.rs                                                                    23       0  100.00%
crates/scheduler/trogon-scheduler-domain/src/commands/domain/schedule.rs                              383       5  98.69%   327, 335, 350-352
crates/scheduler/trogon-scheduler-domain/src/commands/domain/schedule_event_sampling_source.rs         11       0  100.00%
crates/scheduler/trogon-scheduler-domain/src/commands/domain/schedule_event_schedule.rs                35       0  100.00%
crates/scheduler/trogon-scheduler-domain/src/commands/domain/schedule_event_status.rs                   6       0  100.00%
crates/scheduler/trogon-scheduler-domain/src/commands/domain/schedule_id.rs                            22       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/message.rs                               139       0  100.00%
crates/platform/trogonai-proto/src/codec.rs                                                            16       0  100.00%
crates/platform/trogonai-proto/src/convert.rs                                                          53       0  100.00%
crates/platform/trogonai-proto/src/lib.rs                                                              20       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/list.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/resubscribe.rs                                      15       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/elicitation_create.rs                                 12       0  100.00%
crates/acp/acp-nats/src/nats/subjects/client_ops/terminal_wait_for_exit.rs                             12       0  100.00%
crates/acp/acp-nats/src/nats/subjects/client_ops/fs_read_text_file.rs                                  12       0  100.00%
crates/acp/acp-nats/src/nats/subjects/client_ops/terminal_output.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/session_update.rs                                     12       0  100.00%
crates/acp/acp-nats/src/nats/subjects/client_ops/elicitation_complete.rs                               12       0  100.00%
crates/acp/acp-nats/src/nats/subjects/client_ops/fs_write_text_file.rs                                 12       0  100.00%
crates/acp/acp-nats/src/nats/subjects/client_ops/session_request_permission.rs                         12       0  100.00%
crates/acp/acp-nats/src/nats/subjects/client_ops/terminal_release.rs                                   12       0  100.00%
crates/ard/ard-registry/src/bin/ard-registry-demo/main.rs                                              64      20  68.75%   13-35
crates/decider/trogon-decider-wasm-runtime/src/snapshot_id.rs                                          18       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/module_name.rs                                          34       0  100.00%
crates/decider/trogon-decider-wasm-runtime/src/test_fixture.rs                                          7       0  100.00%
crates/decider/trogon-decider-wasm-runtime/src/command_type.rs                                         31       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/module_version.rs                                       34       0  100.00%
crates/decider/trogon-decider-wasm-runtime/src/opaque_snapshot.rs                                      18       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/domain_error_detail.rs                                   7       0  100.00%
crates/decider/trogon-decider-wasm-runtime/src/engine.rs                                              145       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_client.rs                                       6       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/subscriptions/all_server.rs                                       6       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/subscriptions/one_client.rs                                       9       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/error.rs                                                             16       0  100.00%
crates/a2a/a2a-gateway/src/policy/wasmtime_substrate.rs                                                31       0  100.00%
crates/acp/acp-nats/src/wire.rs                                                                        80      14  82.50%   38, 46-60, 103
crates/acp/acp-nats/src/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/acp_prefix.rs                                                                  13       0  100.00%
crates/acp/acp-nats/src/config.rs                                                                      84       0  100.00%
crates/acp/acp-nats/src/in_flight_slot_guard.rs                                                         9       0  100.00%
crates/acp/acp-nats/src/lib.rs                                                                         11       0  100.00%
crates/acp/acp-nats/src/agent_handler.rs                                                               28       0  100.00%
crates/acp/acp-nats/src/error.rs                                                                       31       0  100.00%
crates/acp/acp-nats/src/client_handler.rs                                                              22       0  100.00%
crates/acp/acp-nats/src/pending_prompt_waiters.rs                                                      68       0  100.00%
crates/acp/acp-nats/src/req_id.rs                                                                      21       0  100.00%
crates/acp/acp-nats/src/client_proxy.rs                                                                67       1  98.51%   57
crates/a2a/a2a-nats/src/push/dispatcher/jetstream.rs                                                   45       0  100.00%
crates/a2a/a2a-nats/src/push/dispatcher/composite.rs                                                   15       0  100.00%
crates/a2a/a2a-nats/src/push/dispatcher/mod.rs                                                         16       0  100.00%
crates/a2a/a2a-nats/src/push/dispatcher/http.rs                                                        19       0  100.00%
crates/a2a/a2a-nats/src/push/dispatcher/nats.rs                                                        37       0  100.00%
crates/decider/trogon-decider-runtime/src/event/stream_event.rs                                         8       0  100.00%
crates/decider/trogon-decider-runtime/src/event/event_id.rs                                            32       0  100.00%
crates/decider/trogon-decider-runtime/src/event/event_identity.rs                                       3       0  100.00%
crates/decider/trogon-decider-wit/src/lib.rs                                                           53       1  98.11%   35
crates/ard/ard-catalog/src/catalog_manifest_wire.rs                                                     3       0  100.00%
crates/ard/ard-catalog/src/trust_manifest.rs                                                           45       1  97.78%   35
crates/ard/ard-catalog/src/catalog_manifest.rs                                                         44       0  100.00%
crates/ard/ard-catalog/src/ard_identifier.rs                                                           54       0  100.00%
crates/ard/ard-catalog/src/catalog_host.rs                                                             26       0  100.00%
crates/ard/ard-catalog/src/ard_storage_key.rs                                                          10       0  100.00%
crates/ard/ard-catalog/src/media_type.rs                                                               20       0  100.00%
crates/ard/ard-catalog/src/catalog_manifest_schema.rs                                                  65       4  93.85%   105-106, 108-109
crates/ard/ard-catalog/src/catalog_entry_wire.rs                                                        3       0  100.00%
crates/ard/ard-catalog/src/url_or_data.rs                                                              20       0  100.00%
crates/ard/ard-catalog/src/display_name.rs                                                             13       0  100.00%
crates/ard/ard-catalog/src/catalog_entry.rs                                                           107       0  100.00%
crates/ard/ard-catalog/src/metadata.rs                                                                 14       0  100.00%
crates/ard/ard-catalog/src/registry_error_wire.rs                                                       8       0  100.00%
crates/ard/ard-catalog/src/catalog_host_wire.rs                                                         6       0  100.00%
crates/ard/ard-catalog/src/federation_mode.rs                                                           3       0  100.00%
crates/ard/ard-catalog/src/representative_queries.rs                                                   18       0  100.00%
crates/decider/trogon-decider-nats/src/provision.rs                                                   100      22  78.00%   159, 164-172, 192, 197-208, 221
crates/decider/trogon-decider-nats/src/processor.rs                                                   109      17  84.40%   85-88, 217-220, 268-270, 277, 280-282, 308-310
crates/decider/trogon-decider-nats/src/snapshot_store.rs                                              467      48  89.72%   34-72, 260-262, 300-303, 413-419, 501, 637, 642, 738-740, 746-748, 782-783, 793-794, 813, 841-842
crates/decider/trogon-decider-nats/src/store.rs                                                        73      45  38.36%   100-104, 151-217
crates/decider/trogon-decider-nats/src/projector.rs                                                    88       3  96.59%   57-59
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/a2a/a2a-nats/src/nats/subjects/stream.rs                                                        50       0  100.00%
crates/decider/trogon-decider-runtime/src/snapshot/codec/encoded_snapshot.rs                           44       0  100.00%
crates/decider/trogon-decider-runtime/src/snapshot/codec/snapshot_payload_decode.rs                     3       0  100.00%
crates/decider/trogon-decider-runtime/src/snapshot/codec/snapshot_decode_error.rs                      19       0  100.00%
crates/decider/trogon-decider-runtime/src/snapshot/codec/snapshot_envelope_encode_error.rs              3       0  100.00%
crates/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_encode_error.rs                      16       0  100.00%
crates/platform/trogon-gateway/src/source/telegram/server.rs                                           53       0  100.00%
crates/platform/trogon-gateway/src/source/telegram/registration.rs                                     82       0  100.00%
crates/platform/trogon-gateway/src/source/telegram/config.rs                                           42       0  100.00%
crates/platform/trogon-gateway/src/source/telegram/signature.rs                                         7       0  100.00%
crates/platform/trogon-std/src/env/in_memory.rs                                                        30       0  100.00%
crates/platform/trogon-std/src/env/system.rs                                                           12       0  100.00%
crates/platform/trogon-std/src/env/read_env.rs                                                          3       0  100.00%
crates/platform/trogon-std/src/env/enumerate_env.rs                                                     6       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/prompt_wildcard.rs                                  9       0  100.00%
crates/acp/acp-nats/src/nats/subjects/subscriptions/one_client.rs                                      15       0  100.00%
crates/acp/acp-nats/src/nats/subjects/subscriptions/one_agent.rs                                       15       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.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/all_session.rs                                      9       0  100.00%
crates/acp/acp-nats/src/nats/subjects/subscriptions/global_all.rs                                       9       0  100.00%
crates/a2a/a2a-nats/src/client/streaming.rs                                                            73       0  100.00%
crates/a2a/a2a-nats/src/client/error.rs                                                                14       0  100.00%
crates/a2a/a2a-nats/src/client/gateway_headers.rs                                                      19       0  100.00%
crates/a2a/a2a-nats/src/client/event_stream.rs                                                         76       0  100.00%
crates/a2a/a2a-nats/src/client/resubscribe.rs                                                          28       0  100.00%
crates/a2a/a2a-nats/src/client/wire.rs                                                                 13       0  100.00%
crates/a2a/a2a-nats/src/client/handle.rs                                                              218       0  100.00%
crates/a2a/a2a-nats/src/client/unary.rs                                                                39       1  97.44%   57
crates/a2a/a2a-nats/src/a2a_prefix.rs                                                                  16       0  100.00%
crates/a2a/a2a-nats/src/req_id.rs                                                                      21       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/gateway_ingress.rs                                                            153      21  86.27%   148-151, 155, 169, 177-183, 216, 231-237
crates/a2a/a2a-nats/src/task_id.rs                                                                     22       0  100.00%
crates/a2a/a2a-nats/src/wire.rs                                                                        59       2  96.61%   85, 98
crates/a2a/a2a-nats/src/jsonrpc.rs                                                                     27       0  100.00%
crates/a2a/a2a-nats/src/agent_id.rs                                                                    21       0  100.00%
crates/platform/trogon-std/src/time/mock.rs                                                            32       0  100.00%
crates/platform/trogon-std/src/time/system.rs                                                           9       0  100.00%
crates/a2a/a2a-bridge/src/auth/callout_mint.rs                                                         49       1  97.96%   94
crates/acp/acp-nats-agent/src/connection.rs                                                           482       1  99.79%   726
crates/acp/acp-nats/src/telemetry/metrics.rs                                                           22       0  100.00%
crates/decider/trogon-decider-runtime/src/headers/header_name.rs                                       28       0  100.00%
crates/decider/trogon-decider-runtime/src/headers/header_map.rs                                        54       0  100.00%
crates/decider/trogon-decider-runtime/src/headers/header_value.rs                                      34       0  100.00%
crates/mcp/mcp-nats-server/src/main.rs                                                                  1       1  0.00%    67
crates/mcp/mcp-nats-server/src/allowed_host.rs                                                         52       0  100.00%
crates/mcp/mcp-nats-server/src/config.rs                                                               58       0  100.00%
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/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/scheduler/trogon-scheduler/src/projections/schedules/twin.rs                                    53       0  100.00%
crates/scheduler/trogon-scheduler/src/projections/schedules/mod.rs                                    176       3  98.30%   702-704
crates/decider/trogon-decider-nats/src/stream_store/replay.rs                                         135      10  92.59%   114, 142, 160, 216-224
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/lease_timing.rs                                                  15       0  100.00%
crates/platform/trogon-nats/src/lease/mod.rs                                                          107      13  87.85%   113-126
crates/platform/trogon-nats/src/lease/lease_bucket.rs                                                  19       0  100.00%
crates/platform/trogon-nats/src/lease/release.rs                                                        5       5  0.00%    8-12
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/provision.rs                                                     83      10  87.95%   82-92
crates/platform/trogon-nats/src/lease/ttl.rs                                                           27       0  100.00%
crates/platform/trogon-nats/src/lease/acquire.rs                                                        5       5  0.00%    9-14
crates/a2a/a2a-redaction/src/signed_bundle/signature.rs                                                30       3  90.00%   37-39
crates/a2a/a2a-redaction/src/signed_bundle/verify.rs                                                   64       2  96.88%   86-87
crates/a2a/a2a-redaction/src/signed_bundle/digest.rs                                                   26       0  100.00%
crates/a2a/a2a-redaction/src/signed_bundle/manifest.rs                                                 56       1  98.21%   82
crates/a2a/a2a-redaction/src/signed_bundle/public_key.rs                                               36       2  94.44%   44-45
crates/platform/trogon-gateway/src/source/incidentio/signature.rs                                       8       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/incidentio_signing_secret.rs                      22       0  100.00%
crates/platform/trogonai-proto/src/session/sessions/codec.rs                                          152       0  100.00%
crates/platform/trogonai-proto/src/session/sessions/validate.rs                                       677       0  100.00%
crates/platform/trogon-gateway/src/source/slack/signature.rs                                           17       0  100.00%
crates/platform/trogon-gateway/src/source/slack/server.rs                                             272       0  100.00%
crates/platform/trogon-gateway/src/source/slack/config.rs                                              32       0  100.00%
crates/platform/trogon-gateway/src/source/slack/socket_mode.rs                                        139       0  100.00%
crates/platform/trogon-gateway/src/source/microsoft_graph/server.rs                                    73       0  100.00%
crates/platform/trogon-gateway/src/source/microsoft_graph/client_state.rs                              14       0  100.00%
crates/acp/acp-nats/src/nats/subjects/global/providers_list.rs                                          6       0  100.00%
crates/acp/acp-nats/src/nats/subjects/global/providers_set.rs                                           6       0  100.00%
crates/acp/acp-nats/src/nats/subjects/global/logout.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_disable.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/session_list.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/session_new.rs                                             6       0  100.00%
crates/acp/acp-nats/src/nats/subjects/global/ext.rs                                                     9       0  100.00%
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/jsonrpc-nats/src/message.rs                                                            11       3  72.73%   37-39
crates/platform/trogon-gateway/src/source/standard_webhooks.rs                                        138       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/parsing.rs                                                               123       0  100.00%
crates/acp/acp-nats/src/nats/extensions.rs                                                              3       0  100.00%
crates/acp/acp-nats/src/nats/mod.rs                                                                    61      13  78.69%   22-33, 75
crates/decider/trogon-decider-sim/src/fixture.rs                                                       18       2  88.89%   33-35
crates/decider/trogon-decider-sim/src/session.rs                                                       23       4  82.61%   47-55
crates/decider/trogon-decider-sim/src/native.rs                                                        81       2  97.53%   196, 214
crates/decider/trogon-decider-sim/src/parity.rs                                                        66       6  90.91%   91-93, 95-97
crates/decider/trogon-decider-sim/src/scenario.rs                                                     189      12  93.65%   352-354, 366-374, 504
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/import_check.rs                                                  52       4  92.31%   81-83, 103
crates/decider/trogon-decider-sim/src/host.rs                                                          69       0  100.00%
crates/a2a/a2a-nats/src/server/message_send.rs                                                         15       0  100.00%
crates/a2a/a2a-nats/src/server/dispatch.rs                                                             33       0  100.00%
crates/a2a/a2a-nats/src/server/push_get.rs                                                             12       0  100.00%
crates/a2a/a2a-nats/src/server/handler.rs                                                              39       0  100.00%
crates/a2a/a2a-nats/src/server/tasks_list.rs                                                           12       0  100.00%
crates/a2a/a2a-nats/src/server/bridge.rs                                                               65       0  100.00%
crates/a2a/a2a-nats/src/server/test_support.rs                                                         81      25  69.14%   134-159
crates/a2a/a2a-nats/src/server/push_list.rs                                                            12       0  100.00%
crates/a2a/a2a-nats/src/server/tasks_get.rs                                                            12       0  100.00%
crates/a2a/a2a-nats/src/server/tasks_resubscribe.rs                                                    12       0  100.00%
crates/a2a/a2a-nats/src/server/agent_card.rs                                                           16       0  100.00%
crates/a2a/a2a-nats/src/server/push_delete.rs                                                          12       0  100.00%
crates/a2a/a2a-nats/src/server/push_set.rs                                                             12       0  100.00%
crates/a2a/a2a-nats/src/server/wire.rs                                                                 34       4  88.24%   21-23, 30
crates/a2a/a2a-nats/src/server/message_stream.rs                                                       56       6  89.29%   154-156, 164-166
crates/a2a/a2a-nats/src/server/tasks_cancel.rs                                                         12       0  100.00%
crates/a2a/a2a-nats/src/audit/task_lifecycle.rs                                                        17       0  100.00%
crates/a2a/a2a-nats/src/audit/emitter.rs                                                               58       0  100.00%
crates/a2a/a2a-nats/src/audit/envelope.rs                                                              57       0  100.00%
crates/mcp/mcp-nats-stdio/src/config.rs                                                                26       0  100.00%
crates/mcp/mcp-nats-stdio/src/main.rs                                                                  36       0  100.00%
crates/a2a/a2a-nats/src/push/status_transition_id.rs                                                   15       0  100.00%
crates/a2a/a2a-nats/src/push/nats_push_subject.rs                                                      12       0  100.00%
crates/a2a/a2a-nats/src/push/dlq.rs                                                                    56       0  100.00%
crates/a2a/a2a-nats/src/push/push_notification_config.rs                                                6       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/idempotency_key_header.rs                                                 16       0  100.00%
crates/a2a/a2a-nats/src/push/target.rs                                                                 19       0  100.00%
crates/a2a/a2a-nats/src/push/push_idempotency_key.rs                                                   43       0  100.00%
crates/a2a/a2a-nats/src/push/dispatch_error.rs                                                         24       0  100.00%
crates/a2a/a2a-nats/src/push/push_notification_config_id.rs                                            17       0  100.00%
crates/a2a/a2a-nats/src/push/push_payload.rs                                                           18       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/dlq_dedup.rs                                                              51       1  98.04%   79
crates/a2a/a2a-nats/src/push/push_delivery_semantics_registry.rs                                       17       0  100.00%
crates/a2a/a2a-nats/src/push/terminal_push_task_state.rs                                               17       0  100.00%
crates/a2a/a2a-bridge/src/identity.rs                                                                  63       0  100.00%
crates/a2a/a2a-bridge/src/outbound.rs                                                                  70       7  90.00%   126, 197-209
crates/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/main.rs                                                                       1       1  0.00%    199
crates/a2a/a2a-bridge/src/nats_transport_harness.rs                                                    42       0  100.00%
crates/a2a/a2a-bridge/src/auth.rs                                                                      47      15  68.09%   78-99, 148
crates/mcp/mcp-nats/src/nats/subjects/server/discover.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/list_prompts.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/call_tool.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/read_resource.rs                                          12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/list_resources.rs                                         12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/initialize.rs                                             12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/set_logging_level.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/unsubscribe_resource.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_resource_templates.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/subscribe_resource.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/tool_list_changed.rs                                      12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/subscriptions_listen.rs                                   12       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/ping.rs                                                    9       0  100.00%
crates/mcp/mcp-nats/src/nats/subjects/server/get_prompt.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/logging_message.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/resource_updated.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/subscriptions_acknowledged.rs                             12       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/nats_user_jwt.rs                                                  187       1  99.47%   129
crates/a2a/a2a-auth-callout/src/jwt/user_jwt_subject.rs                                                12       0  100.00%
crates/a2a/a2a-auth-callout/src/jwt/mod.rs                                                            232       0  100.00%
crates/decider/trogon-decider/src/testing/codec.rs                                                     14       0  100.00%
crates/platform/trogon-gateway/src/source/notion/signature.rs                                           9       0  100.00%
crates/platform/trogon-gateway/src/source/notion/verification_token.rs                                 46       0  100.00%
crates/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/notion_verification_token.rs                           9       0  100.00%
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/tier2/mod.rs                                                         46       0  100.00%
crates/a2a/a2a-gateway/src/policy/tier2/rule_name.rs                                                   19       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/list.rs                                              15       0  100.00%
crates/a2a/a2a-nats/src/nats/subjects/agents/push/set.rs                                               12       0  100.00%
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/a2a/a2a-identity-types/src/principal.rs                                                         16       0  100.00%
crates/a2a/a2a-identity-types/src/caller.rs                                                            24       0  100.00%
crates/a2a/a2a-identity-types/src/jwt.rs                                                               71       0  100.00%
crates/a2a/a2a-nats/src/nats/subjects/agents/card.rs                                                   12       0  100.00%
crates/a2a/a2a-nats/src/nats/subjects/agents/message_send.rs                                           15       0  100.00%
crates/a2a/a2a-nats/src/nats/subjects/agents/message_stream.rs                                         15       0  100.00%
crates/scheduler/trogon-scheduler/src/processor/execution/checkpoints/record.rs                         6       0  100.00%
crates/scheduler/trogon-scheduler/src/processor/execution/checkpoints/store.rs                        142      16  88.73%   103, 121, 125, 132, 221-227, 276-280
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/a2a/a2a-nats/src/nats/subjects/subscriptions/task_all_events.rs                                  9       0  100.00%
crates/a2a/a2a-nats/src/nats/subjects/subscriptions/agent_all.rs                                       12       0  100.00%
crates/a2a/a2a-nats/src/nats/subjects/subscriptions/task_one_events.rs                                 12       0  100.00%
TOTAL                                                                                               39490    1789  95.47%

Diff against main

Filename                                                                                        Stmts    Miss  Cover
--------------------------------------------------------------------------------------------  -------  ------  --------
crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/schedule_subject.rs       +3       0  +100.00%
crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/recorded_events.rs        -3       0  -0.06%
crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/request.rs                -9       0  -0.04%
crates/decider/trogon-decider-runtime/src/execution.rs                                             -1       0  -0.00%
crates/scheduler/trogon-scheduler/src/processor/execution/worker/processor.rs                      -1      -2  +0.64%
crates/scheduler/trogon-scheduler/src/processor/execution/worker/dispatcher.rs                     +1       0  +0.00%
crates/scheduler/trogon-scheduler/src/processor/execution/worker/testkit.rs                        +1      -4  +1.29%
crates/scheduler/trogon-scheduler-domain/src/commands/domain/schedule_id.rs                       -18       0  +100.00%
crates/scheduler/trogon-scheduler/src/mocks.rs                                                    +12       0  +0.37%
crates/scheduler/trogon-scheduler/src/nats.rs                                                      -1       0  +100.00%
crates/scheduler/trogon-scheduler/src/projections/schedules/mod.rs                                 +1       0  +0.01%
crates/scheduler/trogon-scheduler/src/processor/execution/checkpoints/store.rs                     -3       0  -0.23%
TOTAL                                                                                             -18      -6  +0.01%

Results for commit: 8075b1c

Minimum allowed coverage is 95%

♻️ This comment has been updated with latest results

Copilot AI review requested due to automatic review settings August 2, 2026 19:52
@yordis
yordis force-pushed the yordis/remove-scheduler-id-remapping branch from 0c6b505 to 68d28da Compare August 2, 2026 19:52

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 80 out of 81 changed files in this pull request and generated no new comments.

Suppressed comments (2)

rsworkspace/crates/scheduler/trogon-scheduler/src/projections/schedules/mod.rs:722

  • The empty-segment check describes the segment as a "routing token", but it is now expected to be the schedule ID (UUID). Aligning the message text with the new identity scheme will make logs clearer.
    rsworkspace/crates/scheduler/trogon-scheduler/src/projections/schedules/mod.rs:714
  • This error message still refers to a "routing token", but schedule_id_from_event_subject now parses a schedule ID. Updating the wording would make debugging invalid subjects less confusing.

This issue also appears on line 722 of the same file.

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
@yordis
yordis force-pushed the yordis/remove-scheduler-id-remapping branch from 68d28da to e91ef61 Compare August 2, 2026 20:11
Copilot AI review requested due to automatic review settings August 2, 2026 20:11

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 80 out of 81 changed files in this pull request and generated no new comments.

Copilot AI review requested due to automatic review settings August 3, 2026 14:50

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 77 out of 78 changed files in this pull request and generated no new comments.

Suppressed comments (2)

rsworkspace/crates/scheduler/trogon-scheduler/src/projections/schedules/mod.rs:723

  • This error message says "empty routing token", but the subject segment being validated is the schedule ID. Align the wording with the new identity scheme to avoid confusion in logs/errors.
    rsworkspace/crates/scheduler/trogon-scheduler/src/projections/schedules/mod.rs:714
  • The error message still refers to a "routing token", but this function now extracts and validates a schedule ID. Updating the wording will make failures clearer when debugging misrouted/foreign subjects.

This issue also appears on line 722 of the same file.

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
Copilot AI review requested due to automatic review settings August 3, 2026 15:10
@yordis
yordis force-pushed the yordis/remove-scheduler-id-remapping branch from 748bcf8 to 8075b1c Compare August 3, 2026 15:10

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 77 out of 78 changed files in this pull request and generated no new comments.

Suppressed comments (2)

rsworkspace/crates/scheduler/trogon-scheduler/src/projections/schedules/mod.rs:716

  • The error message still refers to a "routing token", but this helper now parses and returns a canonical ScheduleId. Updating the message will make logs/errors match the new identity scheme.

This issue also appears on line 719 of the same file.
rsworkspace/crates/scheduler/trogon-scheduler/src/projections/schedules/mod.rs:723

  • This error message mentions an "empty routing token", but the subject suffix is now expected to be a schedule id. Aligning the wording will make debugging easier when a malformed subject is encountered.

@yordis
yordis merged commit f6d3e5c into main Aug 3, 2026
16 checks passed
@yordis
yordis deleted the yordis/remove-scheduler-id-remapping branch August 3, 2026 15:39
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.

2 participants