Skip to content

feat(acp-nats): add Bridge infrastructure for session cancel and ready#34

Merged
yordis merged 1 commit intomainfrom
feat/acp-nats-bridge-infra
Mar 14, 2026
Merged

feat(acp-nats): add Bridge infrastructure for session cancel and ready#34
yordis merged 1 commit intomainfrom
feat/acp-nats-bridge-infra

Conversation

@yordis
Copy link
Member

@yordis yordis commented Mar 14, 2026

Summary

  • Add CancelledSessions struct with TTL-based eviction for pre-flight cancel tracking
  • Add spawn_session_ready and session-ready task management to Bridge
  • Consolidate ClientMethod/ParsedClientSubject into parsing.rs, add agent/client wildcard subjects
  • Add cancel_waiter_for_session to PendingPromptWaiters for external cancellation
  • Add subject capacity validation and Config::with_prefix alias, fix min-concurrency clamping

Test plan

  • cargo check -p acp-nats passes
  • cargo test -p acp-nats — all 492 tests pass
  • cargo clippy -p acp-nats clean

@cursor
Copy link

cursor bot commented Mar 14, 2026

PR Summary

Medium Risk
Introduces new async task spawning/tracking and in-memory cancellation state guarded by Mutex, which can affect ordering and concurrency behavior around session lifecycle events. Most changes are additive and covered by new unit tests, but correctness depends on how these hooks are integrated by callers.

Overview
Adds Bridge-side infrastructure to support session lifecycle signaling and cancellation: a TTL-evicted CancelledSessions map for pre-flight cancel tracking, plus spawn_session_ready which delays then publishes agent.ext.session.ready and tracks the spawned tasks with has_pending_session_ready_tasks/await_session_ready_tasks.

Extends prompt waiter handling with cancel_waiter_for_session to resolve any in-flight prompt for a session without requiring a PromptToken. Refactors NATS subject parsing by consolidating ClientMethod/ParsedClientSubject into parsing.rs, re-exporting via nats::mod, and adds agent/client wildcard subject helpers.

Tweaks config ergonomics and safety by adding Config::with_prefix, clamping with_max_concurrent_client_tasks to a minimum of 1, and introducing SESSION_READY_DELAY for publish ordering; adds tests for the new behaviors.

Written by Cursor Bugbot for commit e17abc5. This will update automatically on new commits. Configure here.

@coderabbitai
Copy link

coderabbitai bot commented Mar 14, 2026

Caution

Review failed

Pull request was closed or merged during review

Walkthrough

Adds TTL-backed cancelled-session tracking and delayed fire-and-forget session.ready publishing with task tracking to the agent Bridge; consolidates NATS client-subject parsing (ClientMethod + ParsedClientSubject) into a single parsing module; adds wildcard subject builders; extends pending-prompt waiter cancellation; and small config API/test tweaks.

Changes

Cohort / File(s) Summary
Agent: cancellation & session-ready tasks
rsworkspace/crates/acp-nats/src/agent/mod.rs
Adds CancelledSessions<I> (Mutex<HashMap<SessionId,I>> + TTL cleanup, atomic cleanup cadence), new Bridge fields cancelled_sessions and session_ready_publish_tasks, and methods: spawn_session_ready, register_session_ready_task, has_pending_session_ready_tasks, await_session_ready_tasks. Implements delayed session.ready publish with cancellation checks and task lifecycle management.
NATS parsing & re-exports
rsworkspace/crates/acp-nats/src/nats/parsing.rs, rsworkspace/crates/acp-nats/src/nats/mod.rs, rsworkspace/crates/acp-nats/src/nats/client_method.rs, rsworkspace/crates/acp-nats/src/nats/parsed_client_subject.rs
Moves/introduces ClientMethod and ParsedClientSubject into parsing.rs (with from_subject_suffix and parse_client_subject returning ParsedClientSubject). Updates nats::mod re-exports and removes the old standalone client_method/parsed_client_subject files.
NATS subject builders (wildcards)
rsworkspace/crates/acp-nats/src/nats/subjects.rs
Adds agent::wildcards and client::wildcards helper builders for global, all-sessions, and per-session wildcard subjects plus tests.
Pending prompt waiters
rsworkspace/crates/acp-nats/src/pending_prompt_waiters.rs
Adds cancel_waiter_for_session to remove/notify a pending session prompt waiter (ignoring prompt_token), clears timed-out markers, and returns whether a waiter was found; includes tests.
Config tweaks & tests
rsworkspace/crates/acp-nats/src/config.rs
Adds with_prefix constructor, clamps with_max_concurrent_client_tasks to at least 1, returns stored value from getter, and updates tests to use the new constructor and clamping behavior.

Sequence Diagram(s)

sequenceDiagram
  participant Bridge as Bridge
  participant Clock as Clock (GetElapsed)
  participant Cancelled as CancelledSessions
  participant Spawner as Tokio TaskSpawner
  participant Nats as NatsClient

  Bridge->>Clock: read SESSION_READY_DELAY
  Bridge->>Spawner: spawn delayed task (spawn_session_ready)
  Spawner-->>Bridge: JoinHandle returned (registered)
  Note over Spawner,Bridge: task sleeps for delay
  Spawner->>Clock: check elapsed for session
  Spawner->>Cancelled: take_if_cancelled(session_id, clock)
  alt cancelled
    Cancelled-->>Spawner: Some -> exit without publish
  else not cancelled
    Spawner->>Nats: publish session.ready (ExtSessionReady)
    Nats-->>Spawner: publish ack / metrics recorded
  end
  Spawner-->>Bridge: task completes (JoinHandle later awaited/cleaned)
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

Poem

🐰 I bury bits in tidy rows,

I mark what hops were stopped, then doze,
A tiny wait, a trumpet, then — ready! — send,
Wildcards bloom, parse strings, and neatly blend,
Hop, prune, publish — code snug in my toes.

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 73.44% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely summarizes the main feature: adding Bridge infrastructure for session cancel and ready, which directly corresponds to the core changes (CancelledSessions, spawn_session_ready, and task management).
Description check ✅ Passed The description is well-structured, covering all major changes including CancelledSessions, session-ready task management, ClientMethod consolidation, wildcard subjects, waiter cancellation, and configuration updates, with a clear test plan.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat/acp-nats-bridge-infra
📝 Coding Plan
  • Generate coding plan for human review comments

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 and usage tips.

Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

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

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

Fix All in Cursor

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

Copy link

@coderabbitai coderabbitai bot left a comment

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/acp-nats/src/nats/parsing.rs (1)

3-55: ⚠️ Potential issue | 🟡 Minor

Run cargo fmt on this file.

CI is already failing rustfmt for this hunk, so it will not merge cleanly as-is.

Also applies to: 194-286

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@rsworkspace/crates/acp-nats/src/nats/parsing.rs` around lines 3 - 55, The
code in the ClientMethod enum and the parse_client_subject function is
misformatted; run rustfmt (cargo fmt) on the file to fix spacing/indentation
issues, then commit the formatted changes — ensure the formatting covers the
ClientMethod enum, ParsedClientSubject struct, and parse_client_subject function
so the file passes CI rustfmt checks.
🧹 Nitpick comments (1)
rsworkspace/crates/acp-nats/src/nats/subjects.rs (1)

40-52: Prefer validated value objects in these wildcard builders.

Because these helpers produce subscription patterns, raw &str inputs let session_id = "*" / ">" or a wildcarded prefix silently widen the subscription scope. I would avoid adding more public primitive-based APIs here and take the existing prefix/session-id value objects instead.

As per coding guidelines, "Prefer domain-specific value objects over primitives (e.g., AcpPrefix not String), with each type's factory guaranteeing correctness at construction—invalid instances should be unrepresentable".

Also applies to: 108-110

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@rsworkspace/crates/acp-nats/src/nats/subjects.rs` around lines 40 - 52, The
wildcard helper functions (wildcards::global, wildcards::all_sessions,
wildcards::session) currently accept raw &str which allows callers to pass
wildcard characters and widen subscriptions; change their signatures to accept
the domain value objects (use AcpPrefix for prefix and the existing SessionId
type for session_id) so construction enforces validity, update callers to pass
those types, and convert to string patterns inside the functions (e.g., call
prefix.as_ref() or prefix.to_string() and session_id.as_ref()/to_string() as
needed); do the same refactor for the equivalent helpers at lines 108-110 so all
public wildcard builders use the validated value objects instead of primitives.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@rsworkspace/crates/acp-nats/src/agent/mod.rs`:
- Around line 114-122: The has_pending_session_ready_tasks method currently
returns true if the vector has any handles even if they are finished; update
has_pending_session_ready_tasks to first lock session_ready_publish_tasks,
remove finished handles (use the same retention logic as
register_session_ready_task: retain(|task| !task.is_finished())), then return
whether the collection is non-empty. This ensures
has_pending_session_ready_tasks accurately reflects active work without changing
register_session_ready_task or await_session_ready_tasks.

In `@rsworkspace/crates/acp-nats/src/config.rs`:
- Around line 10-15: The current implementation only validates the prefix in
AcpPrefix::new and leaves composite subject capacity unchecked
(validate_subject_capacity exists but is only used in tests), and
MAX_SESSION_ID_LENGTH is duplicated; fix by enforcing composite subject-capacity
either inside the prefix/session-id value object factory or unconditionally in
the config constructors: update AcpPrefix::new (or the SessionId factory/type)
to check prefix.len() + session_id_max_len + MAX_SESSIONED_SUBJECT_SUFFIX_LEN <=
NATS_MAX_SUBJECT_BYTES (or call validate_subject_capacity from AcpPrefix::new),
remove the duplicated MAX_SESSION_ID_LENGTH constant from this module and move
the session id length limit into a single SessionId value object (e.g.,
SessionId::new) so all validations (per-type length and composite subject
capacity) are centralized and invoked by Config::with_prefix and
Config::for_test implicitly via the value-object constructors.

---

Outside diff comments:
In `@rsworkspace/crates/acp-nats/src/nats/parsing.rs`:
- Around line 3-55: The code in the ClientMethod enum and the
parse_client_subject function is misformatted; run rustfmt (cargo fmt) on the
file to fix spacing/indentation issues, then commit the formatted changes —
ensure the formatting covers the ClientMethod enum, ParsedClientSubject struct,
and parse_client_subject function so the file passes CI rustfmt checks.

---

Nitpick comments:
In `@rsworkspace/crates/acp-nats/src/nats/subjects.rs`:
- Around line 40-52: The wildcard helper functions (wildcards::global,
wildcards::all_sessions, wildcards::session) currently accept raw &str which
allows callers to pass wildcard characters and widen subscriptions; change their
signatures to accept the domain value objects (use AcpPrefix for prefix and the
existing SessionId type for session_id) so construction enforces validity,
update callers to pass those types, and convert to string patterns inside the
functions (e.g., call prefix.as_ref() or prefix.to_string() and
session_id.as_ref()/to_string() as needed); do the same refactor for the
equivalent helpers at lines 108-110 so all public wildcard builders use the
validated value objects instead of primitives.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: e7db67c6-ee95-4adc-83eb-38917b3237ee

📥 Commits

Reviewing files that changed from the base of the PR and between cbd2cf8 and b09a8f2.

📒 Files selected for processing (8)
  • rsworkspace/crates/acp-nats/src/agent/mod.rs
  • rsworkspace/crates/acp-nats/src/config.rs
  • rsworkspace/crates/acp-nats/src/nats/client_method.rs
  • rsworkspace/crates/acp-nats/src/nats/mod.rs
  • rsworkspace/crates/acp-nats/src/nats/parsed_client_subject.rs
  • rsworkspace/crates/acp-nats/src/nats/parsing.rs
  • rsworkspace/crates/acp-nats/src/nats/subjects.rs
  • rsworkspace/crates/acp-nats/src/pending_prompt_waiters.rs
💤 Files with no reviewable changes (2)
  • rsworkspace/crates/acp-nats/src/nats/client_method.rs
  • rsworkspace/crates/acp-nats/src/nats/parsed_client_subject.rs

@yordis yordis force-pushed the feat/acp-nats-bridge-infra branch from b09a8f2 to b9fc664 Compare March 14, 2026 11:14
Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

♻️ Duplicate comments (1)
rsworkspace/crates/acp-nats/src/agent/mod.rs (1)

114-116: ⚠️ Potential issue | 🟡 Minor

has_pending_session_ready_tasks can return stale true.

Line 115 only checks is_empty(). Finished handles remain in the vector until registration/await, so this can report pending work when none is active.

🔧 Suggested fix
pub fn has_pending_session_ready_tasks(&self) -> bool {
-    !self.session_ready_publish_tasks.lock().unwrap().is_empty()
+    let mut tasks = self.session_ready_publish_tasks.lock().unwrap();
+    tasks.retain(|task| !task.is_finished());
+    !tasks.is_empty()
}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@rsworkspace/crates/acp-nats/src/agent/mod.rs` around lines 114 - 116, The
method has_pending_session_ready_tasks currently returns true if the vec in
session_ready_publish_tasks is non-empty, but finished JoinHandles remain there
and cause stale true; update has_pending_session_ready_tasks to lock
session_ready_publish_tasks, either call retain(|h| !h.is_finished()) to remove
completed handles and then check is_empty(), or return handles.iter().any(|h|
!h.is_finished()), referencing the session_ready_publish_tasks field and the
has_pending_session_ready_tasks function to locate where to change the logic.
🧹 Nitpick comments (1)
rsworkspace/crates/acp-nats/src/nats/subjects.rs (1)

41-50: Use typed subject tokens in wildcard builders (AcpPrefix / SessionId).

These new helpers currently take raw &str, which allows invalid tokens or accidental wildcard-bearing input into subject construction. Prefer value-object parameters so invalid instances remain unrepresentable.

💡 Suggested direction
- pub fn session(prefix: &str, session_id: &str) -> String {
-     format!("{}.{}.agent.>", prefix, session_id)
- }
+ pub fn session(prefix: &AcpPrefix, session_id: &SessionId) -> String {
+     format!("{}.{}.agent.>", prefix.as_str(), session_id)
+ }

As per coding guidelines: "Prefer domain-specific value objects over primitives (e.g., AcpPrefix not String), with each type's factory guaranteeing correctness at construction—invalid instances should be unrepresentable".

Also applies to: 108-109

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@rsworkspace/crates/acp-nats/src/nats/subjects.rs` around lines 41 - 50, The
three subject builders global, all_sessions, and session accept raw &str
allowing invalid or wildcard-bearing input; change their signatures to take
domain value objects (e.g., AcpPrefix for prefix and SessionId for session_id)
and use the value-object accessor (e.g., as_str() or into_inner()) to format the
subject; ensure AcpPrefix and SessionId provide constructors that
validate/forbid wildcards so callers cannot construct invalid tokens, and then
update all call sites (including the other helpers referenced in the file) to
pass the typed values instead of raw &str.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@rsworkspace/crates/acp-nats/src/agent/mod.rs`:
- Around line 49-55: The formatting of the mark_cancelled function is not
rustfmt-compliant; run rustfmt (or cargo fmt --all) and reformat the block
around the mark_cancelled method (the code that locks self.map, inserts the
session_id with clock.now(), increments cleanup_counter, and calls map.retain
when count.is_multiple_of(CLEANUP_EVERY)) so spacing, braces, and indentation
match project style (including ensuring the if block and map.retain call are
properly indented and line-broken); after formatting, re-run cargo fmt --all --
--check to confirm the change.

In `@rsworkspace/crates/acp-nats/src/config.rs`:
- Around line 152-156: The test block for Config::with_prefix (using
AcpPrefix::new and asserting config.acp_prefix()) is failing the formatting
check; run rustfmt (cargo fmt --all) to reformat this test function so it
complies with rustfmt rules and then update the PR with the reformatted file so
CI passes.

---

Duplicate comments:
In `@rsworkspace/crates/acp-nats/src/agent/mod.rs`:
- Around line 114-116: The method has_pending_session_ready_tasks currently
returns true if the vec in session_ready_publish_tasks is non-empty, but
finished JoinHandles remain there and cause stale true; update
has_pending_session_ready_tasks to lock session_ready_publish_tasks, either call
retain(|h| !h.is_finished()) to remove completed handles and then check
is_empty(), or return handles.iter().any(|h| !h.is_finished()), referencing the
session_ready_publish_tasks field and the has_pending_session_ready_tasks
function to locate where to change the logic.

---

Nitpick comments:
In `@rsworkspace/crates/acp-nats/src/nats/subjects.rs`:
- Around line 41-50: The three subject builders global, all_sessions, and
session accept raw &str allowing invalid or wildcard-bearing input; change their
signatures to take domain value objects (e.g., AcpPrefix for prefix and
SessionId for session_id) and use the value-object accessor (e.g., as_str() or
into_inner()) to format the subject; ensure AcpPrefix and SessionId provide
constructors that validate/forbid wildcards so callers cannot construct invalid
tokens, and then update all call sites (including the other helpers referenced
in the file) to pass the typed values instead of raw &str.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 7336c392-7042-4d95-8064-82ac90c9f387

📥 Commits

Reviewing files that changed from the base of the PR and between b09a8f2 and b9fc664.

📒 Files selected for processing (8)
  • rsworkspace/crates/acp-nats/src/agent/mod.rs
  • rsworkspace/crates/acp-nats/src/config.rs
  • rsworkspace/crates/acp-nats/src/nats/client_method.rs
  • rsworkspace/crates/acp-nats/src/nats/mod.rs
  • rsworkspace/crates/acp-nats/src/nats/parsed_client_subject.rs
  • rsworkspace/crates/acp-nats/src/nats/parsing.rs
  • rsworkspace/crates/acp-nats/src/nats/subjects.rs
  • rsworkspace/crates/acp-nats/src/pending_prompt_waiters.rs
💤 Files with no reviewable changes (2)
  • rsworkspace/crates/acp-nats/src/nats/client_method.rs
  • rsworkspace/crates/acp-nats/src/nats/parsed_client_subject.rs
🚧 Files skipped from review as they are similar to previous changes (3)
  • rsworkspace/crates/acp-nats/src/nats/parsing.rs
  • rsworkspace/crates/acp-nats/src/pending_prompt_waiters.rs
  • rsworkspace/crates/acp-nats/src/nats/mod.rs

@yordis yordis force-pushed the feat/acp-nats-bridge-infra branch 3 times, most recently from d3a979e to 06c4495 Compare March 14, 2026 11:28
@github-actions
Copy link

github-actions bot commented Mar 14, 2026

badge

Code Coverage Summary

Details
Filename                                                     Stmts    Miss  Cover    Missing
---------------------------------------------------------  -------  ------  -------  --------------------------------------------
crates/acp-nats/src/nats/subjects.rs                           179       0  100.00%
crates/acp-nats/src/nats/extensions.rs                           3       0  100.00%
crates/acp-nats/src/nats/parsing.rs                            186       0  100.00%
crates/acp-nats/src/nats/token.rs                                8       0  100.00%
crates/acp-nats/src/agent/ext_notification.rs                  222       0  100.00%
crates/acp-nats/src/agent/mod.rs                               223       0  100.00%
crates/acp-nats/src/agent/prompt.rs                            578       0  100.00%
crates/acp-nats/src/agent/initialize.rs                        196       2  98.98%   113, 118
crates/acp-nats/src/agent/ext_method.rs                        289       0  100.00%
crates/acp-nats/src/agent/new_session.rs                       313       0  100.00%
crates/acp-nats/src/agent/set_session_mode.rs                  219       0  100.00%
crates/acp-nats/src/agent/authenticate.rs                      180       2  98.89%   106, 111
crates/acp-nats/src/agent/cancel.rs                            197       0  100.00%
crates/acp-nats/src/agent/load_session.rs                      330       0  100.00%
crates/trogon-std/src/json.rs                                   30       0  100.00%
crates/trogon-std/src/env/system.rs                             17       0  100.00%
crates/trogon-std/src/env/in_memory.rs                          81       0  100.00%
crates/trogon-std/src/fs/system.rs                              29      12  58.62%   17-19, 31-45
crates/trogon-std/src/fs/mem.rs                                220      10  95.45%   61-63, 77-79, 133-135, 158
crates/trogon-std/src/dirs/system.rs                            98      11  88.78%   57, 65, 67, 75, 77, 85, 87, 96, 98, 109, 154
crates/trogon-std/src/dirs/fixed.rs                             84       0  100.00%
crates/acp-nats/src/client/terminal_output.rs                  223       0  100.00%
crates/acp-nats/src/client/ext_session_prompt_response.rs      145       0  100.00%
crates/acp-nats/src/client/session_update.rs                    55       0  100.00%
crates/acp-nats/src/client/terminal_kill.rs                    311       0  100.00%
crates/acp-nats/src/client/rpc_reply.rs                         71       0  100.00%
crates/acp-nats/src/client/request_permission.rs               338       0  100.00%
crates/acp-nats/src/client/terminal_create.rs                  294       0  100.00%
crates/acp-nats/src/client/mod.rs                             2977       0  100.00%
crates/acp-nats/src/client/fs_write_text_file.rs               451       0  100.00%
crates/acp-nats/src/client/fs_read_text_file.rs                384       0  100.00%
crates/acp-nats/src/client/terminal_release.rs                 357       0  100.00%
crates/acp-nats/src/client/terminal_wait_for_exit.rs           396       0  100.00%
crates/acp-nats/src/telemetry/metrics.rs                        93       0  100.00%
crates/acp-nats/src/acp_prefix.rs                               63       0  100.00%
crates/acp-nats/src/pending_prompt_waiters.rs                  197       0  100.00%
crates/acp-nats/src/config.rs                                   88       0  100.00%
crates/acp-nats/src/session_id.rs                               88       0  100.00%
crates/acp-nats/src/in_flight_slot_guard.rs                     32       0  100.00%
crates/acp-nats/src/jsonrpc.rs                                   6       0  100.00%
crates/acp-nats/src/ext_method_name.rs                          85       0  100.00%
crates/acp-nats/src/prompt_slot_counter.rs                      78       0  100.00%
crates/trogon-nats/src/messaging.rs                            507      12  97.63%   14-16, 51-52, 135-140, 150-151, 203-205
crates/trogon-nats/src/client.rs                                25      25  0.00%    50-89
crates/trogon-nats/src/mocks.rs                                291       0  100.00%
crates/trogon-nats/src/connect.rs                               96      16  83.33%   21-23, 36, 50, 69-152
crates/trogon-nats/src/auth.rs                                 114       3  97.37%   49-51
crates/trogon-std/src/time/mock.rs                             123       0  100.00%
crates/trogon-std/src/time/system.rs                            24       0  100.00%
TOTAL                                                        11594      93  99.20%

Diff against main

Filename                                         Stmts    Miss  Cover
---------------------------------------------  -------  ------  --------
crates/acp-nats/src/nats/subjects.rs               +24       0  +100.00%
crates/acp-nats/src/nats/parsing.rs                +82       0  +100.00%
crates/acp-nats/src/agent/mod.rs                  +187       0  +100.00%
crates/acp-nats/src/pending_prompt_waiters.rs      +37       0  +100.00%
crates/acp-nats/src/config.rs                       +6       0  +100.00%
TOTAL                                             +336       0  +0.02%

Results for commit: e17abc5

Minimum allowed coverage is 95%

♻️ This comment has been updated with latest results

@yordis yordis force-pushed the feat/acp-nats-bridge-infra branch from 06c4495 to 220d4ff Compare March 14, 2026 11:31
Add CancelledSessions, spawn_session_ready, session-ready task tracking,
cancel_waiter_for_session, new NATS wildcard subjects, and parsing
consolidation. Includes comprehensive unit tests for all new code paths.

Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
@yordis yordis force-pushed the feat/acp-nats-bridge-infra branch from 220d4ff to e17abc5 Compare March 14, 2026 11:39
@yordis yordis merged commit 9084dc8 into main Mar 14, 2026
3 of 4 checks passed
@yordis yordis deleted the feat/acp-nats-bridge-infra branch March 14, 2026 11:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant