fix(scheduler): prevent identity drift across boundaries - #524
Conversation
yordis
commented
Aug 2, 2026
- 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.
PR SummaryHigh Risk Overview That same value is threaded through decider stream IDs ( The decider runtime and NATS store now require Reviewed by Cursor Bugbot for commit 8075b1c. Bugbot is set up for automated code reviews on this repo. Configure here. |
|
Warning Review limit reached
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 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 configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (2)
WalkthroughThe scheduler now enforces UUID-backed ChangesSchedule ID migration
Estimated code review effort: 5 (Critical) | ~120 minutes Possibly related PRs
Suggested reviewers: Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches 💡 1📝 Generate docstrings 💡
🧪 Generate unit tests (beta)
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. Comment |
There was a problem hiding this comment.
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
ScheduleIdacross command and query boundaries, and addmint_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.
76fa5e7 to
e88a526
Compare
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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 liftKeep the routed identifier typed.
Line 284 validates
schedule_idintoScheduleId, but Line 291 recreates aStringand stores both representations inRoutedEvent. Remove the primitive field. PassScheduleIdthrough 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 winExtract 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 aconst ID: &str = "0198fa2f6d0a7b1a8cf9f762e73a1c45";at the top of the file, mirroring the pattern already used indomain/schedule_id/tests.rs. ReferenceIDfromcreate_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 winKeep
ScheduleIdinrecurrence_event.Line 178 converts the validated ID to
Stringbefore 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
⛔ Files ignored due to path filters (2)
rsworkspace/Cargo.lockis excluded by!**/*.lockrsworkspace/crates/platform/trogon-semconv/src/gen/attribute.rsis excluded by!**/gen/**
📒 Files selected for processing (71)
otel/semconv/registry/scheduler.yamlrsworkspace/crates/decider/trogon-decider-nats/src/store.rsrsworkspace/crates/decider/trogon-decider-runtime/src/execution.rsrsworkspace/crates/scheduler/trogon-scheduler-domain/Cargo.tomlrsworkspace/crates/scheduler/trogon-scheduler-domain/src/commands/create_schedule.rsrsworkspace/crates/scheduler/trogon-scheduler-domain/src/commands/create_schedule/tests.rsrsworkspace/crates/scheduler/trogon-scheduler-domain/src/commands/domain/schedule_id.rsrsworkspace/crates/scheduler/trogon-scheduler-domain/src/commands/domain/schedule_id/tests.rsrsworkspace/crates/scheduler/trogon-scheduler-domain/src/commands/domain/schedule_id/tests/prop_tests.rsrsworkspace/crates/scheduler/trogon-scheduler-domain/src/commands/pause_schedule.rsrsworkspace/crates/scheduler/trogon-scheduler-domain/src/commands/pause_schedule/tests.rsrsworkspace/crates/scheduler/trogon-scheduler-domain/src/commands/proto_wire/tests.rsrsworkspace/crates/scheduler/trogon-scheduler-domain/src/commands/remove_schedule.rsrsworkspace/crates/scheduler/trogon-scheduler-domain/src/commands/remove_schedule/tests.rsrsworkspace/crates/scheduler/trogon-scheduler-domain/src/commands/resume_schedule.rsrsworkspace/crates/scheduler/trogon-scheduler-domain/src/commands/resume_schedule/tests.rsrsworkspace/crates/scheduler/trogon-scheduler-domain/src/commands/state/tests.rsrsworkspace/crates/scheduler/trogon-scheduler-domain/src/constants.rsrsworkspace/crates/scheduler/trogon-scheduler/Cargo.tomlrsworkspace/crates/scheduler/trogon-scheduler/src/commands/mod.rsrsworkspace/crates/scheduler/trogon-scheduler/src/commands/record_schedule_occurrence.rsrsworkspace/crates/scheduler/trogon-scheduler/src/commands/record_schedule_occurrence/tests.rsrsworkspace/crates/scheduler/trogon-scheduler/src/commands/schedule_next_occurrence.rsrsworkspace/crates/scheduler/trogon-scheduler/src/commands/schedule_next_occurrence/tests.rsrsworkspace/crates/scheduler/trogon-scheduler/src/constants.rsrsworkspace/crates/scheduler/trogon-scheduler/src/lib.rsrsworkspace/crates/scheduler/trogon-scheduler/src/mocks.rsrsworkspace/crates/scheduler/trogon-scheduler/src/mocks/tests.rsrsworkspace/crates/scheduler/trogon-scheduler/src/nats.rsrsworkspace/crates/scheduler/trogon-scheduler/src/nats/tests.rsrsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/checkpoints/codec.rsrsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/checkpoints/codec/tests.rsrsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/checkpoints/record.rsrsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/checkpoints/store.rsrsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/checkpoints/store/tests.rsrsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/execution_schedules/tests.rsrsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/nats_execution_tests.rsrsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/mod.rsrsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/reconcile/tests.rsrsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/recorded_events.rsrsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/recorded_events/tests.rsrsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/request.rsrsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/request/tests.rsrsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/rrule_wakeup_payload.rsrsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/rrule_wakeup_payload/tests.rsrsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/schedule_key.rsrsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/schedule_key/tests.rsrsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/schedule_subject.rsrsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/reconciliation/schedule_subject/tests.rsrsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/wakeup.rsrsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/wakeup/tests.rsrsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/worker/consumer.rsrsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/worker/dispatcher.rsrsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/worker/dispatcher/tests.rsrsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/worker/processor.rsrsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/worker/processor/tests.rsrsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/worker/testkit.rsrsworkspace/crates/scheduler/trogon-scheduler/src/processor/execution/worker/testkit/tests.rsrsworkspace/crates/scheduler/trogon-scheduler/src/projections/postgres/projector.rsrsworkspace/crates/scheduler/trogon-scheduler/src/projections/schedules/mod.rsrsworkspace/crates/scheduler/trogon-scheduler/src/projections/schedules/storage.rsrsworkspace/crates/scheduler/trogon-scheduler/src/projections/schedules/storage/tests.rsrsworkspace/crates/scheduler/trogon-scheduler/src/projections/schedules/tests.rsrsworkspace/crates/scheduler/trogon-scheduler/src/queries/get_schedule.rsrsworkspace/crates/scheduler/trogon-scheduler/src/queries/schedule_id.rsrsworkspace/crates/scheduler/trogon-scheduler/src/queries/schedule_id/tests.rsrsworkspace/crates/scheduler/trogon-scheduler/src/store/event_store.rsrsworkspace/crates/scheduler/trogon-scheduler/tests/integration.rsrsworkspace/crates/scheduler/trogon-scheduler/tests/postgres_projection.rsrsworkspace/crates/scheduler/trogon-scheduler/tests/postgres_projector_e2e.rsrsworkspace/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
e88a526 to
0c6b505
Compare
There was a problem hiding this comment.
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
ScheduleIdErrorderivesthiserror::Errorand marksuuid::Erroras#[source], which requiresuuid::Error: std::error::Error. In this crate’sCargo.toml,uuidis declared withdefault-features = falseand no explicitstdfeature, so whetheruuid::Errorimplementsstd::error::Errorbecomes 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 thestdfeature (or use the workspaceuuiddependency if it already standardizes onstd).
uuid = { version = "=1.24.0", default-features = false }
Code Coverage SummaryDetailsDiff against mainResults for commit: 8075b1c Minimum allowed coverage is ♻️ This comment has been updated with latest results |
0c6b505 to
68d28da
Compare
There was a problem hiding this comment.
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_subjectnow 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>
68d28da to
e91ef61
Compare
There was a problem hiding this comment.
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>
748bcf8 to
8075b1c
Compare
There was a problem hiding this comment.
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.