Skip to content

fix: cover uncovered lines from claim check PR#103

Merged
yordis merged 1 commit intomainfrom
yordis/fix-ci-failure
Apr 6, 2026
Merged

fix: cover uncovered lines from claim check PR#103
yordis merged 1 commit intomainfrom
yordis/fix-ci-failure

Conversation

@yordis
Copy link
Copy Markdown
Member

@yordis yordis commented Apr 6, 2026

  • CI coverage gate failed on main (run #24048872635) because the claim check PR (feat(trogon-nats): implement Claim Check pattern for oversized payloads #100) introduced new uncovered lines across 5 files
  • Adds tests for ClaimResolveError Display impl, PublishOutcome::StoreFailed logging, MockObjectStore get-failure path and Default impl, HttpBodySizeMax::new(0) None arm, and the public router() function in slack source

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

cursor bot commented Apr 6, 2026

PR Summary

Low Risk
Low risk: changes are test-only and exercise existing error/logging branches without modifying production logic.

Overview
Adds missing unit/integration test coverage for previously untested branches across claim-check + JetStream mocks, Slack source router health wiring, and HTTP body size handling.

New tests validate ClaimResolveError Display messages, PublishOutcome::StoreFailed logging path, MockObjectStore Default and one-shot get failure behavior, HttpBodySizeMax::new(0) returning None, and trogon-source-slack’s public router() responding on /health.

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

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Apr 6, 2026

Walkthrough

Test coverage expanded across five files spanning NATS Jetstream error handling, object store mocking, publish outcome logging, Slack server routing, and HTTP configuration validation. All changes are additions to test modules without any production code modifications.

Changes

Cohort / File(s) Summary
NATS Jetstream Error & Mock Tests
rsworkspace/crates/trogon-nats/src/jetstream/claim_check.rs, rsworkspace/crates/trogon-nats/src/jetstream/mocks.rs, rsworkspace/crates/trogon-nats/src/jetstream/publish.rs
Added unit tests for ClaimResolveError Display output formatting (MissingKey, StoreFailed, ReadFailed variants), MockObjectStore default state and fail_next_get() behavior, and PublishOutcome::StoreFailed logging.
Slack Server Health Check Test
rsworkspace/crates/trogon-source-slack/src/server.rs
Added async test validating that router with SystemClock configuration responds with 200 status to GET /health.
HTTP Configuration Test
rsworkspace/crates/trogon-std/src/http.rs
Added test confirming HttpBodySizeMax::new returns None when initialized with zero bytes.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Suggested labels

rust:coverage-baseline-reset

Poem

🐰 Hippity-hop through the test files we go,
New assertions and checks in a coverage flow,
Mock stores, health pings, and errors so clear,
Each test case shines without a code fear!
The baseline is reset, the coverage is sweet,
A tester's delight, the test suite's complete! 🎉

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Title check ❓ Inconclusive The title 'fix: cover uncovered lines from claim check PR' uses 'fix:' prefix but the change is test-only coverage additions, not a bug fix. The content is accurate about covering uncovered lines, but the 'fix:' semantic tag is misleading. Consider changing the prefix to 'test:' to better reflect that this PR adds test coverage rather than fixing a bug. The title would be more accurate as 'test: cover uncovered lines from claim check PR'.
✅ Passed checks (2 passed)
Check name Status Explanation
Description check ✅ Passed The description is directly related to the changeset, explaining the motivation (CI coverage failure) and detailing which uncovered lines are being addressed across five files.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.

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

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch yordis/fix-ci-failure

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.

@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 6, 2026

badge

Code Coverage Summary

Details
Filename                                                                      Stmts    Miss  Cover    Missing
--------------------------------------------------------------------------  -------  ------  -------  ---------------------------------------------------------------------------------------------
crates/acp-nats/src/nats/subjects/client_ops/session_request_permission.rs       15       0  100.00%
crates/acp-nats/src/nats/subjects/client_ops/terminal_wait_for_exit.rs           15       0  100.00%
crates/acp-nats/src/nats/subjects/client_ops/terminal_output.rs                  15       0  100.00%
crates/acp-nats/src/nats/subjects/client_ops/terminal_release.rs                 15       0  100.00%
crates/acp-nats/src/nats/subjects/client_ops/fs_write_text_file.rs               15       0  100.00%
crates/acp-nats/src/nats/subjects/client_ops/session_update.rs                   15       0  100.00%
crates/acp-nats/src/nats/subjects/client_ops/terminal_kill.rs                    15       0  100.00%
crates/acp-nats/src/nats/subjects/client_ops/fs_read_text_file.rs                15       0  100.00%
crates/acp-nats/src/nats/subjects/client_ops/terminal_create.rs                  15       0  100.00%
crates/acp-nats/src/agent/bridge.rs                                             123       4  96.75%   109-112
crates/acp-nats/src/agent/test_support.rs                                       299       0  100.00%
crates/acp-nats/src/agent/new_session.rs                                         91       0  100.00%
crates/acp-nats/src/agent/set_session_config_option.rs                           71       0  100.00%
crates/acp-nats/src/agent/load_session.rs                                       101       0  100.00%
crates/acp-nats/src/agent/set_session_model.rs                                   71       0  100.00%
crates/acp-nats/src/agent/fork_session.rs                                       106       0  100.00%
crates/acp-nats/src/agent/list_sessions.rs                                       50       0  100.00%
crates/acp-nats/src/agent/initialize.rs                                          83       0  100.00%
crates/acp-nats/src/agent/close_session.rs                                       67       0  100.00%
crates/acp-nats/src/agent/cancel.rs                                             105       0  100.00%
crates/acp-nats/src/agent/ext_notification.rs                                    88       0  100.00%
crates/acp-nats/src/agent/logout.rs                                              49       0  100.00%
crates/acp-nats/src/agent/mod.rs                                                 65       0  100.00%
crates/acp-nats/src/agent/prompt.rs                                             633       0  100.00%
crates/acp-nats/src/agent/authenticate.rs                                        52       0  100.00%
crates/acp-nats/src/agent/ext_method.rs                                          92       0  100.00%
crates/acp-nats/src/agent/js_request.rs                                         304       0  100.00%
crates/acp-nats/src/agent/resume_session.rs                                     102       0  100.00%
crates/acp-nats/src/agent/set_session_mode.rs                                    71       0  100.00%
crates/trogon-source-linear/src/server.rs                                       366       3  99.18%   189-191
crates/trogon-source-linear/src/main.rs                                           4       0  100.00%
crates/trogon-source-linear/src/signature.rs                                     54       1  98.15%   16
crates/trogon-source-linear/src/config.rs                                       208       0  100.00%
crates/acp-nats/src/nats/mod.rs                                                  23       0  100.00%
crates/acp-nats/src/nats/parsing.rs                                             285       1  99.65%   153
crates/acp-nats/src/nats/extensions.rs                                            3       0  100.00%
crates/trogon-std/src/dirs/fixed.rs                                              84       0  100.00%
crates/trogon-std/src/dirs/system.rs                                             98      11  88.78%   57, 65, 67, 75, 77, 85, 87, 96, 98, 109, 154
crates/acp-nats/src/nats/subjects/stream.rs                                      58       0  100.00%
crates/acp-nats/src/nats/subjects/mod.rs                                        380       0  100.00%
crates/acp-nats-stdio/src/config.rs                                              72       0  100.00%
crates/acp-nats-stdio/src/main.rs                                               141      27  80.85%   62, 114-121, 127-129, 146, 177-198
crates/acp-nats-ws/src/config.rs                                                 83       0  100.00%
crates/acp-nats-ws/src/main.rs                                                  189      18  90.48%   87, 207-228, 306
crates/acp-nats-ws/src/upgrade.rs                                                57       2  96.49%   59, 90
crates/acp-nats-ws/src/connection.rs                                            166      35  78.92%   75-82, 87-98, 114, 116-117, 122, 133-135, 142, 146, 150, 153-161, 172, 176, 179, 182-186, 220
crates/trogon-source-discord/src/gateway.rs                                     449       1  99.78%   133
crates/trogon-source-discord/src/server.rs                                      663       0  100.00%
crates/trogon-source-discord/src/main.rs                                          4       0  100.00%
crates/trogon-source-discord/src/config.rs                                      290       2  99.31%   225, 373
crates/trogon-source-discord/src/signature.rs                                   103       0  100.00%
crates/acp-telemetry/src/lib.rs                                                 153      22  85.62%   39-46, 81, 86, 91, 105-120
crates/acp-telemetry/src/trace.rs                                                32       4  87.50%   23-24, 31-32
crates/acp-telemetry/src/log.rs                                                  70       2  97.14%   39-40
crates/acp-telemetry/src/metric.rs                                               35       4  88.57%   30-31, 38-39
crates/acp-telemetry/src/service_name.rs                                         46       0  100.00%
crates/acp-telemetry/src/signal.rs                                                3       3  0.00%    4-43
crates/trogon-source-telegram/src/main.rs                                         4       0  100.00%
crates/trogon-source-telegram/src/config.rs                                      89       0  100.00%
crates/trogon-source-telegram/src/server.rs                                     403       0  100.00%
crates/trogon-source-telegram/src/signature.rs                                   38       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-source-slack/src/main.rs                                            4       0  100.00%
crates/trogon-source-slack/src/server.rs                                        932       0  100.00%
crates/trogon-source-slack/src/config.rs                                        141       0  100.00%
crates/trogon-source-slack/src/signature.rs                                      80       0  100.00%
crates/trogon-nats/src/jetstream/claim_check.rs                                 348       0  100.00%
crates/trogon-nats/src/jetstream/publish.rs                                      64       0  100.00%
crates/trogon-nats/src/jetstream/mocks.rs                                       551       0  100.00%
crates/trogon-std/src/http.rs                                                    19       0  100.00%
crates/trogon-std/src/json.rs                                                    30       0  100.00%
crates/trogon-std/src/args.rs                                                    10       0  100.00%
crates/acp-nats/src/nats/subjects/global/initialize.rs                            8       0  100.00%
crates/acp-nats/src/nats/subjects/global/session_list.rs                          8       0  100.00%
crates/acp-nats/src/nats/subjects/global/authenticate.rs                          8       0  100.00%
crates/acp-nats/src/nats/subjects/global/ext_notify.rs                           12       0  100.00%
crates/acp-nats/src/nats/subjects/global/logout.rs                                8       0  100.00%
crates/acp-nats/src/nats/subjects/global/session_new.rs                           8       0  100.00%
crates/acp-nats/src/nats/subjects/global/ext.rs                                  12       0  100.00%
crates/trogon-source-gitlab/src/signature.rs                                     30       0  100.00%
crates/trogon-source-gitlab/src/main.rs                                           4       0  100.00%
crates/trogon-source-gitlab/src/webhook_secret.rs                                36       0  100.00%
crates/trogon-source-gitlab/src/server.rs                                       448       0  100.00%
crates/trogon-source-gitlab/src/config.rs                                       100       0  100.00%
crates/trogon-source-github/src/signature.rs                                     64       0  100.00%
crates/trogon-source-github/src/main.rs                                           4       0  100.00%
crates/trogon-source-github/src/config.rs                                        89       0  100.00%
crates/trogon-source-github/src/server.rs                                       367       0  100.00%
crates/trogon-std/src/time/system.rs                                             27       3  88.89%   27-29
crates/trogon-std/src/time/mock.rs                                              129       0  100.00%
crates/acp-nats/src/nats/subjects/commands/prompt.rs                             18       0  100.00%
crates/acp-nats/src/nats/subjects/commands/set_model.rs                          18       0  100.00%
crates/acp-nats/src/nats/subjects/commands/set_mode.rs                           18       0  100.00%
crates/acp-nats/src/nats/subjects/commands/cancel.rs                             18       0  100.00%
crates/acp-nats/src/nats/subjects/commands/load.rs                               18       0  100.00%
crates/acp-nats/src/nats/subjects/commands/set_config_option.rs                  18       0  100.00%
crates/acp-nats/src/nats/subjects/commands/close.rs                              18       0  100.00%
crates/acp-nats/src/nats/subjects/commands/fork.rs                               18       0  100.00%
crates/acp-nats/src/nats/subjects/commands/resume.rs                             18       0  100.00%
crates/trogon-nats/src/mocks.rs                                                 304       0  100.00%
crates/trogon-nats/src/token.rs                                                   8       0  100.00%
crates/trogon-nats/src/connect.rs                                               105      11  89.52%   22-24, 37, 49, 68-73
crates/trogon-nats/src/client.rs                                                 25      25  0.00%    50-89
crates/trogon-nats/src/auth.rs                                                  119       0  100.00%
crates/trogon-nats/src/messaging.rs                                             552       2  99.64%   132, 142
crates/trogon-nats/src/nats_token.rs                                            161       0  100.00%
crates/acp-nats/src/nats/subjects/subscriptions/one_agent.rs                     18       0  100.00%
crates/acp-nats/src/nats/subjects/subscriptions/all_agent_ext.rs                 11       0  100.00%
crates/acp-nats/src/nats/subjects/subscriptions/all_agent.rs                     11       0  100.00%
crates/acp-nats/src/nats/subjects/subscriptions/all_client.rs                    11       0  100.00%
crates/acp-nats/src/nats/subjects/subscriptions/all_session.rs                   11       0  100.00%
crates/acp-nats/src/nats/subjects/subscriptions/global_all.rs                    11       0  100.00%
crates/acp-nats/src/nats/subjects/subscriptions/one_session.rs                   18       0  100.00%
crates/acp-nats/src/nats/subjects/subscriptions/one_client.rs                    18       0  100.00%
crates/acp-nats/src/nats/subjects/subscriptions/prompt_wildcard.rs               11       0  100.00%
crates/acp-nats/src/pending_prompt_waiters.rs                                   141       0  100.00%
crates/acp-nats/src/config.rs                                                   204       0  100.00%
crates/acp-nats/src/acp_prefix.rs                                                51       0  100.00%
crates/acp-nats/src/client_proxy.rs                                             200       0  100.00%
crates/acp-nats/src/error.rs                                                     84       0  100.00%
crates/acp-nats/src/lib.rs                                                       73       0  100.00%
crates/acp-nats/src/req_id.rs                                                    39       0  100.00%
crates/acp-nats/src/session_id.rs                                                72       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                                           70       0  100.00%
crates/acp-nats-agent/src/connection.rs                                        1434       1  99.93%   686
crates/acp-nats/src/telemetry/metrics.rs                                         65       0  100.00%
crates/trogon-std/src/env/in_memory.rs                                           81       0  100.00%
crates/trogon-std/src/env/system.rs                                              17       0  100.00%
crates/acp-nats/src/client/terminal_wait_for_exit.rs                            396       0  100.00%
crates/acp-nats/src/client/mod.rs                                              2987       0  100.00%
crates/acp-nats/src/client/session_update.rs                                     55       0  100.00%
crates/acp-nats/src/client/terminal_kill.rs                                     309       0  100.00%
crates/acp-nats/src/client/fs_read_text_file.rs                                 384       0  100.00%
crates/acp-nats/src/client/fs_write_text_file.rs                                451       0  100.00%
crates/acp-nats/src/client/request_permission.rs                                338       0  100.00%
crates/acp-nats/src/client/ext.rs                                               365       8  97.81%   193-204, 229-240
crates/acp-nats/src/client/rpc_reply.rs                                          71       0  100.00%
crates/acp-nats/src/client/terminal_create.rs                                   294       0  100.00%
crates/acp-nats/src/client/ext_session_prompt_response.rs                       157       0  100.00%
crates/acp-nats/src/client/terminal_output.rs                                   223       0  100.00%
crates/acp-nats/src/client/terminal_release.rs                                  357       0  100.00%
crates/acp-nats/src/jetstream/provision.rs                                       61       0  100.00%
crates/acp-nats/src/jetstream/consumers.rs                                       99       0  100.00%
crates/acp-nats/src/jetstream/streams.rs                                        194       4  97.94%   254-256, 266
crates/acp-nats/src/jetstream/ext_policy.rs                                      26       0  100.00%
crates/acp-nats/src/nats/subjects/responses/ext_ready.rs                         15       0  100.00%
crates/acp-nats/src/nats/subjects/responses/prompt_response.rs                   27       0  100.00%
crates/acp-nats/src/nats/subjects/responses/update.rs                            27       0  100.00%
crates/acp-nats/src/nats/subjects/responses/response.rs                          20       0  100.00%
crates/acp-nats/src/nats/subjects/responses/cancelled.rs                         18       0  100.00%
TOTAL                                                                         22200     216  99.03%

Diff against main

Filename                                           Stmts    Miss  Cover
-----------------------------------------------  -------  ------  -------
crates/trogon-source-slack/src/server.rs             +14      -6  +0.65%
crates/trogon-nats/src/jetstream/claim_check.rs      +17      -6  +1.81%
crates/trogon-nats/src/jetstream/publish.rs           +5      -2  +3.39%
crates/trogon-nats/src/jetstream/mocks.rs            +13      -9  +1.67%
crates/trogon-std/src/http.rs                         +3      -1  +6.25%
TOTAL                                                +52     -24  +0.11%

Results for commit: 76d4d1b

Minimum allowed coverage is 95%

♻️ This comment has been updated with latest results

Copy link
Copy Markdown

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

🧹 Nitpick comments (1)
rsworkspace/crates/trogon-nats/src/jetstream/mocks.rs (1)

850-851: Strengthen the post-failure assertion to validate payload content.

Line 850 currently checks only is_ok(). Verifying returned bytes makes the test resilient against false positives where the wrong data is returned.

Proposed test strengthening
-        let result = ObjectStoreGet::get(&store, "key").await;
-        assert!(result.is_ok());
+        let mut reader = ObjectStoreGet::get(&store, "key").await.unwrap();
+        use std::io::Read;
+        let mut buf = Vec::new();
+        reader.read_to_end(&mut buf).unwrap();
+        assert_eq!(buf, b"data");
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@rsworkspace/crates/trogon-nats/src/jetstream/mocks.rs` around lines 850 -
851, The test currently only asserts that ObjectStoreGet::get(&store,
"key").await returned Ok; update it to unwrap or pattern-match the Ok value and
assert the returned payload equals the expected bytes (e.g., compare the
returned Vec<u8> or slice to the known expected payload for "key").
Specifically, after calling ObjectStoreGet::get(&store, "key").await, extract
the payload from the Ok variant (or use expect()) and add an equality assertion
against the expected byte sequence so the test verifies content as well as
success.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@rsworkspace/crates/trogon-nats/src/jetstream/mocks.rs`:
- Around line 850-851: The test currently only asserts that
ObjectStoreGet::get(&store, "key").await returned Ok; update it to unwrap or
pattern-match the Ok value and assert the returned payload equals the expected
bytes (e.g., compare the returned Vec<u8> or slice to the known expected payload
for "key"). Specifically, after calling ObjectStoreGet::get(&store,
"key").await, extract the payload from the Ok variant (or use expect()) and add
an equality assertion against the expected byte sequence so the test verifies
content as well as success.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: ceaa20ab-98d1-44bc-b8b6-24fb6a2ff882

📥 Commits

Reviewing files that changed from the base of the PR and between b9169b7 and 76d4d1b.

📒 Files selected for processing (5)
  • rsworkspace/crates/trogon-nats/src/jetstream/claim_check.rs
  • rsworkspace/crates/trogon-nats/src/jetstream/mocks.rs
  • rsworkspace/crates/trogon-nats/src/jetstream/publish.rs
  • rsworkspace/crates/trogon-source-slack/src/server.rs
  • rsworkspace/crates/trogon-std/src/http.rs

@yordis yordis changed the title test: cover uncovered lines from claim check PR fix: cover uncovered lines from claim check PR Apr 6, 2026
@yordis yordis merged commit 8bd6020 into main Apr 6, 2026
7 of 8 checks passed
@yordis yordis deleted the yordis/fix-ci-failure branch April 6, 2026 20:41
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