Skip to content

Convert Root Manifest to Hybrid Workspace (10.1.1 & 15.1.1 complete)#520

Merged
leynos merged 30 commits intomainfrom
convert-root-manifest-hybrid-ws-qie8gy
Apr 16, 2026
Merged

Convert Root Manifest to Hybrid Workspace (10.1.1 & 15.1.1 complete)#520
leynos merged 30 commits intomainfrom
convert-root-manifest-hybrid-ws-qie8gy

Conversation

@leynos
Copy link
Copy Markdown
Owner

@leynos leynos commented Apr 10, 2026

Summary

  • Converts the repository root manifest into a hybrid workspace (10.1.1 & 15.1.1 complete), including ExecPlan, tests, and contributor/docs updates to support the staged rollout. The 10.1.1 milestone is complete; the 15.1.1 milestone is also complete; the next milestone will introduce the verification crate (10.1.2).
  • Adds tests and fixtures to validate the staged hybrid workspace contract, plus extended documentation updates describing hybrid workspace semantics and the staged rollout.
  • Roadmap updates reflect completion of milestone 10.1.1 and 15.1.1, with follow-on work planned for 10.1.2.

Changes

  • New file: docs/execplans/10-1-1-convert-root-manifest-into-hybrid-workspace.md containing the staged plan, constraints, tolerances, risks, progress, and decision log for the 10.1.1 milestone.
  • Updated the root Cargo manifest to enable a hybrid root workspace while preserving the root package as the default workspace member.
  • Expanded documentation updates:
    • docs/developers-guide.md updated to describe hybrid workspace semantics and day-to-day cargo usage.
    • docs/formal-verification-methods-in-wireframe.md updated to reflect the staged 10.1.1 contract.
  • Tests and fixtures for the staged workspace:
    • tests/features/workspace_manifest.feature
    • tests/fixtures/workspace_manifest.rs
    • tests/fixtures/mod.rs (workspace_manifest reference added)
    • tests/scenarios/workspace_manifest_scenarios.rs
    • tests/scenarios/mod.rs
    • tests/steps/workspace_manifest_steps.rs
    • tests/steps/mod.rs
    • tests/workspace_manifest.rs
  • Wireframe testing harness and core logic updated to support new tests and staged workflow:
    • Updated internal helpers and tests scaffolding under wireframe_testing (examples include client_pair, drive, logging, observability, and integration helpers).
  • Roadmap update:
    • docs/roadmap.md updated to mark 10.1.1 as complete.
    • Additionally, roadmap item 15.1.1 is marked complete to reflect the broader completion status.

Rationale

  • The ExecPlan remains the governance artifact for 10.1.1 while test scaffolding and docs codify the staged rollout. The added tests validate the staged workspace contract via manifest and metadata observations, and the docs updates communicate the new layout to contributors and maintainers.

Plan of work (highlights)

  • Stage A: confirm the staged workspace contract
  • Stage B: convert the root manifest
  • Stage C: add rstest regression coverage
  • Stage D: add rstest-bdd behavioural coverage
  • Stage E: documentation and roadmap updates
  • Stage F: validation and quality gates

Concrete file plan (high level)

  • The ExecPlan doc plus the new tests and docs referenced above.

Risks, constraints, and tolerances

  • Constraints: preserve root package metadata; keep root as the default member for non-workspace cargo commands; avoid new verification crates or CI targets in 10.1.1; prefer minimal dependencies.
  • Tolerances: if 10.1.1 cannot be isolated from 10.1.2, document scope explicitly and adjust as needed.
  • Risks: potential misalignment between workspace shape and future verification crates; path-dependency behavior changes; ensure tests do not recursively invoke builds.

Progress (as of this PR)

  • Stage A: contract confirmed
  • Stage B: root manifest converted to a hybrid manifest
  • Stage C: rstest regression coverage added
  • Stage D: rstest-bdd behavioural coverage added
  • Stage E: governance and docs updates implemented
  • Stage F: initial validation gates underway
  • Roadmap: 15.1.1 completed in addition to 10.1.1.

Decision Log

  • Decision: treat 10.1.1 as infrastructure-only with staged workspace conversion; verify that the root remains the default member and defer adding the verification crate until 10.1.2 unless forced by Cargo.
  • Decision: use cargo metadata as regression-test oracle for workspace semantics, while keeping cargo build and cargo test --workspace as the primary top-level validation commands.

Outcomes & Retrospective

  • The staged workspace contract is observable via manifest and metadata, and the tests exercise these invariants as 10.1.1 progresses. Documentation updates record the staged rollout for contributors and maintainers.
  • The 10.1.1 milestone is now shown as complete in the roadmap and related design documents. The path forward will add the verification crate in 10.1.2 while preserving the current default workspace behavior. The roadmap also reflects completion of 15.1.1.

Context and orientation

  • This ExecPlan aligns with the roadmap item 10.1.1 and points to updated governance, developer guidance, and roadmap entries to guide future work.

Task

Summary by Sourcery

  • Convert the repository into a hybrid Cargo workspace while adding regression coverage and test harness improvements around workspace semantics and server/client utilities.
  • New Features:
    • Introduce an explicit Cargo workspace at the repository root with the root package as the sole default member.
    • Add rstest and rstest-bdd coverage plus supporting fixtures and feature files to validate the staged hybrid workspace manifest and metadata contract.
    • Document the 10.1.1 hybrid-workspace execution plan and update developer and formal-verification guides with the staged rollout model.
  • Bug Fixes:
    • Prevent logger poisoning from breaking subsequent tests by tolerating poisoned logging mutexes in the shared test logger.
    • Tighten memory budget abort assertions to consistently validate error kind and absence of payloads via a shared helper.
    • Clarify sequence overflow handling in message assembly by separating tracking startup, tracked advancement, and overflow checks.
  • Enhancements:
    • Refactor message sequence validation into smaller helpers to improve readability and reuse of overflow and tracking logic.
    • Simplify integration tests by using shared echo-app and wireframe pair helpers with explicit handler invocation counting.
    • Add small helpers and type aliases in the testing harness (e.g., for server shutdown handles, observability defaults, and error construction) to reduce boilerplate and improve ergonomics.
    • Extract a reusable helper for filling frame length prefixes into buffers, simplifying endian-safe frame conversion code.
  • Build:
    • Enable workspace-aware dependency management at the root and add cap-std and camino for filesystem-safe test and fixture utilities.
  • Documentation:
    • Add a detailed ExecPlan for roadmap item 10.1.1 describing constraints, risks, staging, and validation for the hybrid workspace conversion.
    • Update the developers guide to explain hybrid workspace semantics and recommended Cargo command usage for contributors.
    • Adjust the formal-verification guide to describe the staged workspace rollout and separation between 10.1.1 workspace conversion and later verification crates.
    • Mark roadmap milestone 10.1.1 as complete in the project roadmap.
  • Tests:
    • Add new workspace_manifest fixtures, integration tests, BDD feature files, steps, and scenarios to assert the staged workspace layout and default-member behaviour via manifest and cargo metadata inspection.
    • Extend existing wireframe testing helpers and integration coverage to exercise the new server/client utilities and observability/logging defaults.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Apr 10, 2026

Note

Reviews paused

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

Describe the root Cargo.toml conversion into a hybrid workspace, add dev-deps for test helpers, extend developer docs and an ExecPlan, add BDD + rstest workspace-manifest tests and helpers, and refactor internal helpers and test utilities (Default impls, error construction, logging recovery).

Changes

Cohort / File(s) Summary
Workspace manifest configuration
Cargo.toml
Add [workspace] with members = ["."], default-members = ["."], resolver = "3"; add dev-dependencies: cap-std, camino, serde_json.
Documentation & execplan
docs/developers-guide.md, docs/execplans/10-1-1-convert-root-manifest-into-hybrid-workspace.md, docs/formal-verification-methods-in-wireframe.md, docs/roadmap.md, docs/wireframe-testing-crate.md
Add staged hybrid-workspace guidance and rollout ExecPlan; update developer guide for refactored sequence helpers; mark roadmap item complete; document Default implementations and poison-recovery behaviour.
Workspace manifest test infra
tests/common/workspace_manifest_support.rs, tests/features/workspace_manifest.feature, tests/fixtures/workspace_manifest.rs, tests/workspace_manifest.rs
Add repo-root helpers, cargo invocation wrappers, metadata parsing utilities, Gherkin feature, fixture world and rstest regression tests validating staged hybrid-workspace contract.
BDD wiring
tests/bdd/mod.rs, tests/fixtures/mod.rs, tests/scenarios/mod.rs, tests/scenarios/workspace_manifest_scenarios.rs, tests/steps/mod.rs, tests/steps/workspace_manifest_steps.rs
Register new BDD modules and steps, wire scenario to fixture world verifications.
Frame conversion
src/frame/conversion.rs
Replace buffer-return helper with fill_buf_with_prefix(&mut [u8;8], ...) -> io::Result<()>; validate prefix lengths with errors; write into destination slices directly; update bytes_to_u64; add unit tests for endianness/prefix sizes.
Message sequencing
src/message_assembler/series.rs
Replace handle_untracked_first_sequence with start_sequence_tracking; add advance_sequence_or_overflow to centralise checked-increment and overflow logic; simplify tracked path; add unit and proptest coverage.
Test logging & observability
wireframe_testing/src/logging.rs, wireframe_testing/src/observability/mod.rs
Introduce a shared OnceLock<Mutex<Logger>>; recover from poisoned mutexes and drain buffered records; add Default impls for LoggerHandle and ObservabilityHandle; add unit tests; change metric label arg form.
Test helper and integration refactors
wireframe_testing/src/client_pair.rs, wireframe_testing/src/helpers/drive.rs, wireframe_testing/src/helpers/tests/helper_tests.rs, wireframe_testing/src/integration_helpers.rs, wireframe_testing/tests/integration_helpers.rs
Introduce ServerShutdownHandle type alias; use io::Error::other(...); adjust imports and remove #[must_use]; refactor integration test to use spawned pair helper, add explicit correlation id and handler-invocation assertions; simplify shutdown handling.

Poem

The root manifest learnt a careful art,
A staged workspace plays its patient part,
Tests march in steps, helpers read and run,
Loggers recover, drained and freshly spun,
Hybrid roots aligned — the change is done 🌱

🚥 Pre-merge checks | ✅ 7
✅ Passed checks (7 passed)
Check name Status Explanation
Title check ✅ Passed The title 'Convert Root Manifest to Hybrid Workspace (10.1.1 & 15.1.1 complete)' accurately and specifically describes the main change: converting the root manifest to a hybrid workspace and marking two roadmap items as complete.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Testing ✅ Passed All major new functionality is adequately guarded by unit tests, parametrised tests, and property-based tests covering normal paths, error cases, and boundary conditions.
User-Facing Documentation ✅ Passed Pull request introduces new user-facing functionality (LoggerHandle::default() and ObservabilityHandle::default()) with appropriate documentation in docs/wireframe-testing-crate.md, covering poison-tolerance behaviour.
Developer Documentation ✅ Passed All new internal APIs, architectural boundaries, abstractions, tooling and build requirements are comprehensively documented in the developer's guide with seven subsections explaining design decisions and component responsibilities.
Module-Level Documentation ✅ Passed All five newly added modules carry clear module-level docstrings explaining their purpose using standard Rust //! syntax.
Description check ✅ Passed The pull request description comprehensively describes the changeset, covering the hybrid workspace conversion (10.1.1 & 15.1.1), documentation updates, tests, and fixtures with clear alignment to the raw summary.

✏️ 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 convert-root-manifest-hybrid-ws-qie8gy

Comment @coderabbitai help to get the list of available commands and usage tips.

@sourcery-ai
Copy link
Copy Markdown
Contributor

sourcery-ai Bot commented Apr 10, 2026

Reviewer's Guide

Converts the repo into a hybrid Cargo workspace for roadmap item 10.1.1, adds regression and BDD tests plus fixtures around workspace semantics, and refactors various helpers (message sequencing, testing harness, logging, observability, frame conversion, and memory budget checks) to support the staged rollout while updating developer and verification docs and marking the roadmap milestone complete.

Sequence diagram for message sequence validation in MessageSeries

sequenceDiagram
    actor Test
    participant Series as MessageSeries

    Test->>Series: validate_and_advance_sequence(incoming, is_last)
    alt sequence_tracking is Untracked
        Series->>Series: start_sequence_tracking(incoming, is_last)
        Series->>Series: advance_sequence_or_overflow(incoming, is_last)
        alt overflow and not is_last
            Series-->>Test: Err(SequenceOverflow)
        else ok
            Series-->>Test: Ok(())
        end
    else sequence_tracking is Tracked
        Series->>Series: advance_tracked_sequence(incoming, is_last)
        Series->>Series: compute expected from next_sequence
        alt incoming < expected
            Series-->>Test: Err(DuplicateFrame)
        else incoming != expected
            Series-->>Test: Err(SequenceMismatch)
        else incoming == expected
            Series->>Series: advance_sequence_or_overflow(incoming, is_last)
            alt overflow and not is_last
                Series-->>Test: Err(SequenceOverflow)
            else ok
                Series-->>Test: Ok(())
            end
        end
    end
Loading

Updated class diagram for MessageSeries sequence tracking

classDiagram
    class MessageSeries {
        FrameSequence next_sequence
        SequenceTracking sequence_tracking
        MessageKey message_key
        +validate_and_advance_sequence(incoming: FrameSequence, is_last: bool) Result~(), MessageSeriesError~
        -advance_sequence_or_overflow(incoming: FrameSequence, is_last: bool) Result~(), MessageSeriesError~
        -start_sequence_tracking(incoming: FrameSequence, is_last: bool) Result~(), MessageSeriesError~
        -advance_tracked_sequence(incoming: FrameSequence, is_last: bool) Result~(), MessageSeriesError~
    }

    class SequenceTracking {
        <<enum>>
        Untracked
        Tracked
    }

    class FrameSequence {
        u64 value
        +checked_increment() Option~FrameSequence~
    }

    class MessageSeriesError {
        <<enum>>
        SequenceOverflow
        DuplicateFrame
        SequenceMismatch
    }

    class MessageKey

    MessageSeries --> SequenceTracking
    MessageSeries --> FrameSequence
    MessageSeries --> MessageSeriesError
    MessageSeries --> MessageKey
    MessageSeriesError ..> FrameSequence
Loading

Updated class diagram for testing utilities and logging

classDiagram
    class Logger {
        +start() Logger
        +pop() Option~String~
        +clear()
    }

    class LoggerHandle {
        -MutexGuard~Logger~ guard
        +new() LoggerHandle
        +clear()
        +pop() Option~String~
        +default() LoggerHandle
    }

    class ObservabilityHandle {
        +new() ObservabilityHandle
        +codec_error_counter(error_type: &str, recovery_policy: &str) u64
        +default() ObservabilityHandle
    }

    class PendingServer {
        -Option~ServerShutdownHandle~ inner
        +take() Option~ServerShutdownHandle~
    }

    class ServerShutdownHandle {
        <<typealias>>
        oneshot_Sender_unit
        JoinHandle_Result_unit_ServerError
    }

    class ServerError

    LoggerHandle --> Logger
    ObservabilityHandle --> Logger : uses_for_metrics
    PendingServer --> ServerShutdownHandle
    ServerShutdownHandle --> ServerError
Loading

Updated class diagram for frame conversion utilities

classDiagram
    class Endianness {
        <<enum>>
        Big
        Little
    }

    class FrameConversion {
        +checked_prefix_cast~T~(len: usize): Result~T, io_Error~
        +bytes_to_u64(bytes: &[u8], size: usize, endianness: Endianness): Result~u64, io_Error~
        -fill_buf_with_prefix(buf: &mut [u8; 8], prefix: &[u8], endianness: Endianness)
    }

    class io_Error

    FrameConversion --> Endianness
    FrameConversion --> io_Error
Loading

Flow diagram for workspace manifest regression tests

flowchart TD
    A[Start workspace_manifest tests] --> B[Load workspace_manifest fixtures]
    B --> C[Spawn hybrid workspace test world]
    C --> D[Invoke cargo metadata via helper]
    D --> E{Metadata matches<br>staged contract?}
    E -->|Yes| F[Assert root package is default member only]
    E -->|No| G[Fail tests with diagnostic]
    F --> H[Run additional rstest-bdd steps]
    H --> I{All behavioural<br>assertions pass?}
    I -->|Yes| J[Workspace manifest tests pass]
    I -->|No| K[Workspace manifest tests fail]
Loading

File-Level Changes

Change Details Files
Refactor message series sequence tracking into smaller helpers while preserving behaviour and overflow semantics.
  • Extracted sequence advancement into advance_sequence_or_overflow with explicit overflow handling based on is_last flag.
  • Split tracking transitions into start_sequence_tracking for first sequenced frame and advance_tracked_sequence for tracked frames.
  • Updated validate_and_advance_sequence to delegate to the new helpers based on SequenceTracking state.
src/message_assembler/series.rs
Convert the root crate to an explicit hybrid Cargo workspace and document the staged 10.1.1 contract.
  • Added a [workspace] section with members = ["."], default-members = ["."], and resolver = "3" to the root Cargo.toml.
  • Documented hybrid workspace semantics and day-to-day cargo usage in the developers guide and clarified the staged rollout in the formal verification guide.
  • Marked roadmap item 10.1.1 complete and added a detailed ExecPlan doc for the milestone.
Cargo.toml
docs/developers-guide.md
docs/formal-verification-methods-in-wireframe.md
docs/roadmap.md
docs/execplans/10-1-1-convert-root-manifest-into-hybrid-workspace.md
Add regression and BDD coverage around the staged workspace manifest and metadata contract.
  • Introduced rstest-based integration tests to assert manifest contents and cargo metadata invariants for the hybrid workspace.
  • Added a BDD feature, fixture world, steps, and scenarios under tests/ to express the workspace contract in behaviour-driven form.
  • Wired new workspace_manifest modules into the existing fixtures, steps, and scenarios registries.
tests/workspace_manifest.rs
tests/features/workspace_manifest.feature
tests/fixtures/workspace_manifest.rs
tests/scenarios/workspace_manifest_scenarios.rs
tests/steps/workspace_manifest_steps.rs
tests/fixtures/mod.rs
tests/scenarios/mod.rs
tests/steps/mod.rs
Modernise and simplify wireframe_testing helpers and integration tests for server/client pairs, logging, observability, and drive helpers.
  • Reworked the integration_helpers round-trip test to use spawn_wireframe_pair_default and echo_app_factory with an AtomicUsize counter instead of manually wiring a server, listener, and shutdown channel.
  • Introduced a ServerShutdownHandle type alias and simplified PendingServer::take, plus added Default impls for LoggerHandle and ObservabilityHandle.
  • Relaxed LoggerHandle mutex poison handling to recover the logger after test panics and simplified error construction in drive::drive_server_task; removed a must_use attribute from unused_listener.
wireframe_testing/tests/integration_helpers.rs
wireframe_testing/src/client_pair.rs
wireframe_testing/src/logging.rs
wireframe_testing/src/observability/mod.rs
wireframe_testing/src/helpers/drive.rs
wireframe_testing/src/integration_helpers.rs
Improve reuse and clarity in error handling and frame conversion helpers.
  • Factored out memory budget abort error checking and payload assertions into a reusable check_budget_abort_error helper used by assert_connection_aborted.
  • Extracted fill_buf_with_prefix to centralise writing a variable-sized prefix into an 8-byte buffer for both endiannesses in frame conversion code, simplifying bytes_to_u64.
tests/fixtures/memory_budget_hard_cap.rs
src/frame/conversion.rs

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

codescene-delta-analysis[bot]

This comment was marked as outdated.

codescene-delta-analysis[bot]

This comment was marked as outdated.

@leynos leynos changed the title Add ExecPlan: convert root manifest to hybrid workspace (10.1.1) Add ExecPlan + tests/docs for hybrid root workspace (10.1.1) Apr 11, 2026
@leynos leynos changed the title Add ExecPlan + tests/docs for hybrid root workspace (10.1.1) Convert Root Manifest Into Hybrid Workspace (10.1.1 complete) Apr 11, 2026
codescene-delta-analysis[bot]

This comment was marked as outdated.

@leynos leynos changed the title Convert Root Manifest Into Hybrid Workspace (10.1.1 complete) Convert Root Manifest Into Hybrid Workspace (10.1.1 staged) Apr 11, 2026
codescene-delta-analysis[bot]

This comment was marked as outdated.

@leynos leynos changed the title Convert Root Manifest Into Hybrid Workspace (10.1.1 staged) Convert Root Manifest Into Hybrid Workspace (10.1.1 complete) Apr 11, 2026
codescene-delta-analysis[bot]

This comment was marked as outdated.

@leynos
Copy link
Copy Markdown
Owner Author

leynos commented Apr 11, 2026

@coderabbitai Please suggest a fix for the following test failure and provide an AI coding agent prompt for the fix:

Run leynos/shared-actions/.github/actions/generate-coverage@aebb3f5b831102e2a10ef909c83d7d50ea86c332
Run astral-sh/setup-uv@e92bafb6253dcd438e0484186d7669ea7a8ca1cc
Trying to find version for uv in: /home/runner/work/wireframe/wireframe/uv.toml
Could not find file: /home/runner/work/wireframe/wireframe/uv.toml
Trying to find version for uv in: /home/runner/work/wireframe/wireframe/pyproject.toml
Could not find file: /home/runner/work/wireframe/wireframe/pyproject.toml
Could not determine uv version from uv.toml or pyproject.toml. Falling back to latest.
Found uv in tool-cache for 0.11.6
Added /home/runner/.local/bin to the path
Added /opt/hostedtoolcache/uv/0.11.6/x86_64 to the path
Set UV_CACHE_DIR to /home/runner/work/_temp/setup-uv-cache
Successfully installed uv version 0.11.6
Searching files using cache dependency glob: /home/runner/work/wireframe/wireframe/**/pyproject.toml,/home/runner/work/wireframe/wireframe/**/uv.lock
No matches found for glob
Warning: No file matched to [/home/runner/work/wireframe/wireframe/**/pyproject.toml,/home/runner/work/wireframe/wireframe/**/uv.lock]. The cache will never get invalidated. Make sure you have checked out the target repository and configured the cache-dependency-glob input correctly.
Trying to restore uv cache from GitHub Actions cache with key: setup-uv-1-x86_64-unknown-linux-gnu-3.12.3-pruned-no-dependency-glob-action-e92bafb6253dcd438e0484186d7669ea7a8ca1cc
Cache hit for: setup-uv-1-x86_64-unknown-linux-gnu-3.12.3-pruned-no-dependency-glob-action-e92bafb6253dcd438e0484186d7669ea7a8ca1cc
Received 548129 of 548129 (100.0%), 1.2 MBs/sec
Cache Size: ~1 MB (548129 B)
/usr/bin/tar -xf /home/runner/work/_temp/b355e69e-79f3-4322-824d-07dc234acbdd/cache.tzst -P -C /home/runner/work/wireframe/wireframe --use-compress-program unzstd
Cache restored successfully
uv cache restored from GitHub Actions cache with key: setup-uv-1-x86_64-unknown-linux-gnu-3.12.3-pruned-no-dependency-glob-action-e92bafb6253dcd438e0484186d7669ea7a8ca1cc
Run uv run --script "/home/runner/work/_actions/leynos/shared-actions/aebb3f5b831102e2a10ef909c83d7d50ea86c332/.github/actions/generate-coverage/scripts/detect.py"
Downloading pygments (1.2MiB)
 Downloaded pygments
Installed 8 packages in 11ms
Run actions/cache@v4
Cache hit for restore-key: Linux-llvmcov-1935ba0dd371a1fcdc4667b64d82f6cf0413d30977c5d80dd50a96ffe0798518
Received 29360128 of 1406316421 (2.1%), 28.0 MBs/sec
Received 134217728 of 1406316421 (9.5%), 63.9 MBs/sec
Received 301989888 of 1406316421 (21.5%), 95.9 MBs/sec
Received 482344960 of 1406316421 (34.3%), 114.9 MBs/sec
Received 654311424 of 1406316421 (46.5%), 124.6 MBs/sec
Received 805306368 of 1406316421 (57.3%), 127.8 MBs/sec
Received 1002438656 of 1406316421 (71.3%), 136.3 MBs/sec
Received 1170210816 of 1406316421 (83.2%), 139.2 MBs/sec
Received 1342177280 of 1406316421 (95.4%), 141.7 MBs/sec
Received 1406316421 of 1406316421 (100.0%), 142.1 MBs/sec
Cache Size: ~1341 MB (1406316421 B)
/usr/bin/tar -xf /home/runner/work/_temp/32e8f7df-2127-4ab7-aecf-93e519f6f285/cache.tzst -P -C /home/runner/work/wireframe/wireframe --use-compress-program unzstd
Cache restored successfully
Cache restored from key: Linux-llvmcov-1935ba0dd371a1fcdc4667b64d82f6cf0413d30977c5d80dd50a96ffe0798518
Run uv run --script "/home/runner/work/_actions/leynos/shared-actions/aebb3f5b831102e2a10ef909c83d7d50ea86c332/.github/actions/generate-coverage/scripts/install_cargo_llvm_cov.py"
Installed 9 packages in 315ms
$ /home/runner/.cargo/bin/cargo install cargo-llvm-cov --force
cargo-llvm-cov installed successfully
Run set -euo pipefail
+ set -o pipefail
+ set -o pipefail
+ case "${BINSTALL_VERSION:-}" in
++ mktemp -d
+ cd /tmp/tmp.djERUTqnyI
+ '[' -z '' ']'
+ base_url=https://github.com/cargo-bins/cargo-binstall/releases/latest/download/cargo-binstall-
++ uname -s
+ os=Linux
+ '[' Linux = Darwin ']'
+ '[' Linux = Linux ']'
++ uname -m
+ machine=x86_64
+ '[' x86_64 = armv7l ']'
+ target=x86_64-unknown-linux-musl
+ '[' x86_64 = armv7 ']'
+ url=https://github.com/cargo-bins/cargo-binstall/releases/latest/download/cargo-binstall-x86_64-unknown-linux-musl.tgz
+ do_curl https://github.com/cargo-bins/cargo-binstall/releases/latest/download/cargo-binstall-x86_64-unknown-linux-musl.tgz
+ curl --retry 10 -A 'Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/81.0' -L --proto =https --tlsv1.2 -sSf https://github.com/cargo-bins/cargo-binstall/releases/latest/download/cargo-binstall-x86_64-unknown-linux-musl.tgz
+ tar -xvzf -
cargo-binstall
+ ./cargo-binstall --self-install
+ CARGO_HOME=/home/runner/.cargo
+ case ":$PATH:" in
+ '[' -n '' ']'
Run uv run --script "/home/runner/work/_actions/leynos/shared-actions/aebb3f5b831102e2a10ef909c83d7d50ea86c332/.github/actions/generate-coverage/scripts/install_cargo_nextest.py"
Installed 9 packages in 11ms
cargo-nextest already installed and verified
Run uv run --script "/home/runner/work/_actions/leynos/shared-actions/aebb3f5b831102e2a10ef909c83d7d50ea86c332/.github/actions/generate-coverage/scripts/run_rust.py"
Downloading lxml (5.0MiB)
 Downloaded lxml
Installed 10 packages in 10ms
$ cargo llvm-cov nextest --workspace --summary-only --lcov --output-path lcov.info
info: cargo-llvm-cov currently setting cfg(coverage) and cfg(coverage_nightly); you can opt-out it by passing --no-cfg-coverage and --no-cfg-coverage-nightly
   Compiling metrics v0.24.3
   Compiling tempfile v3.20.0
   Compiling async-stream v0.3.6
   Compiling rusty-fork v0.3.0
   Compiling metrics-util v0.20.0
   Compiling proptest v1.7.0
   Compiling metrics-exporter-prometheus v0.17.2
   Compiling wireframe v0.3.0 (/home/runner/work/wireframe/wireframe)
   Compiling wireframe_testing v0.3.0 (/home/runner/work/wireframe/wireframe/wireframe_testing)
error[E0432]: unresolved import `wireframe::Serializer`
Error:  --> wireframe_testing/src/helpers/tests/helper_tests.rs:8:5
  |
8 |     Serializer,
  |     ^^^^^^^^^^ no `Serializer` in the root
  |
  = help: consider importing one of these traits instead:
          crate::helpers::Serializer
          wireframe::serializer::Serializer
help: a similar name exists in the module (notice the capitalization)
  |
8 -     Serializer,
8 +     serializer,
  |

error[E0599]: no method named `serialize` found for struct `BincodeSerializer` in the current scope
Error:   --> wireframe_testing/src/helpers/tests/helper_tests.rs:58:30
   |
58 |     let encoded = serializer.serialize(&env).map_err(|error| {
   |                              ^^^^^^^^^
   |
  ::: src/serializer.rs:67:8
   |
67 |     fn serialize<M>(&self, value: &M) -> Result<Vec<u8>, Box<dyn Error + Send + Sync>>
   |        --------- the method is available for `BincodeSerializer` here
   |
   = help: items from traits can only be used if the trait is in scope
help: trait `Serializer` which provides `serialize` is implemented but not in scope; perhaps you want to import it
   |
 4 + use wireframe::prelude::Serializer;
   |
help: there is a method `deserialize` with a similar name
   |
58 |     let encoded = serializer.deserialize(&env).map_err(|error| {
   |                              ++

error[E0599]: no method named `deserialize` found for struct `BincodeSerializer` in the current scope
Error:   --> wireframe_testing/src/helpers/tests/helper_tests.rs:79:35
   |
79 |     let (decoded, _) = serializer.deserialize::<Envelope>(first).map_err(|error| {
   |                                   ^^^^^^^^^^^
   |
  ::: src/serializer.rs:77:8
   |
77 |     fn deserialize<M>(&self, bytes: &[u8]) -> Result<(M, usize), Box<dyn Error + Send + Sync>>
   |        ----------- the method is available for `BincodeSerializer` here
   |
   = help: items from traits can only be used if the trait is in scope
help: trait `Serializer` which provides `deserialize` is implemented but not in scope; perhaps you want to import it
   |
 4 + use wireframe::prelude::Serializer;
   |
help: there is a method `serialize` with a similar name
   |
79 -     let (decoded, _) = serializer.deserialize::<Envelope>(first).map_err(|error| {
79 +     let (decoded, _) = serializer.serialize::<Envelope>(first).map_err(|error| {
   |

Some errors have detailed explanations: E0432, E0599.
For more information about an error, try `rustc --explain E0432`.
error: process didn't exit successfully: `/home/runner/.rustup/toolchains/nightly-2026-03-26-x86_64-unknown-linux-gnu/bin/rustc --crate-name wireframe_testing --edition=2024 wireframe_testing/src/lib.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --emit=dep-info,link -C embed-bitcode=no --test --check-cfg 'cfg(docsrs,test)' --check-cfg 'cfg(feature, values())' -C metadata=7c14f11c58c18d2b -C extra-filename=-006f2989bff7c90b --out-dir /home/runner/work/wireframe/wireframe/target/llvm-cov-target/debug/deps -C strip=debuginfo -L dependency=/home/runner/work/wireframe/wireframe/target/llvm-cov-target/debug/deps --extern bincode=/home/runner/work/wireframe/wireframe/target/llvm-cov-target/debug/deps/libbincode-25822010f61db8d2.rlib --extern bytes=/home/runner/work/wireframe/wireframe/target/llvm-cov-target/debug/deps/libbytes-9b110b3ecf55bb19.rlib --extern futures=/home/runner/work/wireframe/wireframe/target/llvm-cov-target/debug/deps/libfutures-284005bafe72b6f3.rlib --extern log=/home/runner/work/wireframe/wireframe/target/llvm-cov-target/debug/deps/liblog-94a2218ba7905afa.rlib --extern logtest=/home/runner/work/wireframe/wireframe/target/llvm-cov-target/debug/deps/liblogtest-2e4093b5d044758a.rlib --extern metrics=/home/runner/work/wireframe/wireframe/target/llvm-cov-target/debug/deps/libmetrics-1bd39176b927559a.rlib --extern metrics_util=/home/runner/work/wireframe/wireframe/target/llvm-cov-target/debug/deps/libmetrics_util-8bf69addccee0162.rlib --extern rstest=/home/runner/work/wireframe/wireframe/target/llvm-cov-target/debug/deps/librstest-5981876bf3b24a42.rlib --extern thiserror=/home/runner/work/wireframe/wireframe/target/llvm-cov-target/debug/deps/libthiserror-da783c768993bfb1.rlib --extern tokio=/home/runner/work/wireframe/wireframe/target/llvm-cov-target/debug/deps/libtokio-ce17907ef6f8a753.rlib --extern tokio_util=/home/runner/work/wireframe/wireframe/target/llvm-cov-target/debug/deps/libtokio_util-c12601f954289ffa.rlib --extern wireframe=/home/runner/work/wireframe/wireframe/target/llvm-cov-target/debug/deps/libwireframe-0a57fc14a91d867b.rlib -D warnings -L native=/home/runner/work/wireframe/wireframe/target/llvm-cov-target/debug/build/aws-lc-sys-27ff0fe8c9ce6f40/out -C instrument-coverage --cfg=coverage --cfg=coverage_nightly` (exit status: 1)
error: could not compile `wireframe_testing` (lib test) due to 3 previous errors
warning: build failed, waiting for other jobs to finish...
error: command `/home/runner/.rustup/toolchains/nightly-2026-03-26-x86_64-unknown-linux-gnu/bin/cargo test --no-run --message-format json-render-diagnostics --workspace --target-dir /home/runner/work/wireframe/wireframe/target/llvm-cov-target` exited with code 101
error: process didn't exit successfully: `/home/runner/.rustup/toolchains/nightly-2026-03-26-x86_64-unknown-linux-gnu/bin/cargo nextest run --manifest-path /home/runner/work/wireframe/wireframe/Cargo.toml --target-dir /home/runner/work/wireframe/wireframe/target/llvm-cov-target --workspace` (exit status: 101)
cargo llvm-cov nextest --workspace --summary-only --lcov --output-path lcov.info failed with code 101
Error: Process completed with exit code 101.

@coderabbitai

This comment was marked as resolved.

codescene-delta-analysis[bot]

This comment was marked as outdated.

@leynos
Copy link
Copy Markdown
Owner Author

leynos commented Apr 12, 2026

@coderabbitai Please suggest a fix for the following lint violations and provide an AI coding agent prompt for the fix:

error: Multiple clusters of nested conditional logic in `bytes_to_u64`.
Error:   --> src/frame/conversion.rs:40:8
   |
40 |    pub fn bytes_to_u64(bytes: &[u8], size: usize, endianness: Endianness) -> io::Result<u64> {
   |  _________^^^^^^^^^^^^_______________________________________________________________________-
   | | ___________________________________________________________________________________________|
   | ||
41 | ||     if !matches!(size, 1 | 2 | 4 | 8) {
42 | ||         return Err(io::Error::new(
43 | ||             io::ErrorKind::InvalidInput,
...  ||
68 | ||                 ));
69 | ||             }
   | ||_- Complexity bump 1 spans 7 lines.
...  |
79 | |                  ));
80 | |              }
   | |__- Complexity bump 2 spans 7 lines.
   |
note: Detected 2 complexity bumps above the threshold 2.5.
  --> src/frame/conversion.rs:40:8
   |
40 | pub fn bytes_to_u64(bytes: &[u8], size: usize, endianness: Endianness) -> io::Result<u64> {
   |        ^^^^^^^^^^^^
   = help: Extract helper functions from the highlighted regions to reduce clustered complexity.
   = note: `-D bumpy-road-function` implied by `-D warnings`
   = help: to override `-D warnings` add `#[allow(bumpy_road_function)]`

error: Multiple clusters of nested conditional logic in `validate_and_advance_sequence`.
Error:    --> src/message_assembler/series.rs:200:8
    |
200 |        fn validate_and_advance_sequence(
    |           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...
204 |        ) -> Result<(), MessageSeriesError> {
    |   _________________________________________-
    |  |_________________________________________|
205 | ||         match self.sequence_tracking {
206 | ||             SequenceTracking::Untracked => {
...   ||
212 | ||                     return Err(MessageSeriesError::SequenceOverflow { last: incoming });
213 | ||                 }
    | ||_- Complexity bump 2 spans 2 lines.
...   |
221 | |                  if incoming.0 < expected.0 {
    | |__- Complexity bump 1 spans 4 lines.
    |
note: Detected 5 complexity bumps above the threshold 2.5.
   --> src/message_assembler/series.rs:200:8
    |
200 |     fn validate_and_advance_sequence(
    |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    = help: Extract helper functions from the highlighted regions to reduce clustered complexity.

error: could not compile `wireframe` (lib) due to 2 previous errors
Error: 
Error: Compilation failed with toolchain `nightly-2025-09-18`

Caused by:
    command failed: env -u CARGO -u RUSTC CLIPPY_DISABLE_DOCS_LINKS="null" DYLINT_LIBS="[\"/home/runner/.local/share/whitaker/lints/nightly-2025-09-18/x86_64-unknown-linux-gnu/lib/libwhitaker_suite@nightly-2025-09-18.so\"]" DYLINT_METADATA="null" DYLINT_NO_DEPS="0" RUSTC_WORKSPACE_WRAPPER="/home/runner/.dylint_drivers/nightly-2025-09-18/dylint-driver" RUSTUP_TOOLCHAIN="nightly-2025-09-18" "cargo" "check" "--target-dir" "/home/runner/work/wireframe/wireframe/target/dylint/target/nightly-2025-09-18" "--all-targets" "--all-features"

Stack backtrace:
   0: <anyhow::Error>::msg::<alloc::string::String>
   1: anyhow::__private::format_err
   2: <std::process::Command as dylint_internal::command::CommandExt>::success
   3: dylint::run_with_name_toolchain_map
   4: dylint::run
   5: cargo_dylint::main
   6: std::sys::backtrace::__rust_begin_short_backtrace::<fn() -> core::result::Result<(), dylint::error::ColorizedError<anyhow::Error>>, core::result::Result<(), dylint::error::ColorizedError<anyhow::Error>>>
   7: std::rt::lang_start::<core::result::Result<(), dylint::error::ColorizedError<anyhow::Error>>>::{closure#0}
   8: std::rt::lang_start_internal
   9: main
  10: <unknown>
  11: __libc_start_main
  12: _start
make: *** [Makefile:51: lint] Error 1
Error: Process completed with exit code 2.

@coderabbitai

This comment was marked as resolved.

codescene-delta-analysis[bot]

This comment was marked as outdated.

codescene-delta-analysis[bot]

This comment was marked as outdated.

@leynos
Copy link
Copy Markdown
Owner Author

leynos commented Apr 12, 2026

@coderabbitai Please suggest a fix for the following concern and provide an AI coding agent prompt for the fix:

error: Multiple clusters of nested conditional logic in `assert_connection_aborted`.
Error:    --> tests/bdd/../fixtures/memory_budget_hard_cap.rs:226:12
    |
226 |        pub fn assert_connection_aborted(&mut self) -> TestResult {
    |  _____________^^^^^^^^^^^^^^^^^^^^^^^^^__________________________-
    | | _______________________________________________________________|
    | ||
227 | ||         self.spin_runtime()?;
228 | ||         match self.join_server()? {
229 | ||             Ok(()) => Err("expected connection to abort, but it completed successfully".into()),
...   ||
236 | ||                     .into());
237 | ||                 }
    | ||_- Complexity bump 2 spans 5 lines.
...   |
247 | |                      .into());
248 | |                  }
    | |__- Complexity bump 1 spans 7 lines.
    |
note: Detected 2 complexity bumps above the threshold 2.5.
   --> tests/bdd/../fixtures/memory_budget_hard_cap.rs:226:12
    |
226 |     pub fn assert_connection_aborted(&mut self) -> TestResult {
    |            ^^^^^^^^^^^^^^^^^^^^^^^^^
    = help: Extract helper functions from the highlighted regions to reduce clustered complexity.
    = note: `-D bumpy-road-function` implied by `-D warnings`
    = help: to override `-D warnings` add `#[allow(bumpy_road_function)]`

error: could not compile `wireframe` (test "bdd") due to 1 previous error
Error: 
Error: Compilation failed with toolchain `nightly-2025-09-18`

Caused by:
    command failed: env -u CARGO -u RUSTC CLIPPY_DISABLE_DOCS_LINKS="null" DYLINT_LIBS="[\"/home/runner/.local/share/whitaker/lints/nightly-2025-09-18/x86_64-unknown-linux-gnu/lib/libwhitaker_suite@nightly-2025-09-18.so\"]" DYLINT_METADATA="null" DYLINT_NO_DEPS="0" RUSTC_WORKSPACE_WRAPPER="/home/runner/.dylint_drivers/nightly-2025-09-18/dylint-driver" RUSTUP_TOOLCHAIN="nightly-2025-09-18" "cargo" "check" "--target-dir" "/home/runner/work/wireframe/wireframe/target/dylint/target/nightly-2025-09-18" "--all-targets" "--all-features"

Stack backtrace:
   0: <anyhow::Error>::msg::<alloc::string::String>
   1: anyhow::__private::format_err
   2: <std::process::Command as dylint_internal::command::CommandExt>::success
   3: dylint::run_with_name_toolchain_map
   4: dylint::run
   5: cargo_dylint::main
   6: std::sys::backtrace::__rust_begin_short_backtrace::<fn() -> core::result::Result<(), dylint::error::ColorizedError<anyhow::Error>>, core::result::Result<(), dylint::error::ColorizedError<anyhow::Error>>>
   7: std::rt::lang_start::<core::result::Result<(), dylint::error::ColorizedError<anyhow::Error>>>::{closure#0}
   8: std::rt::lang_start_internal
   9: main
  10: <unknown>
  11: __libc_start_main
  12: _start
make: *** [Makefile:51: lint] Error 1

@coderabbitai

This comment was marked as resolved.

codescene-delta-analysis[bot]

This comment was marked as outdated.

@leynos
Copy link
Copy Markdown
Owner Author

leynos commented Apr 12, 2026

@coderabbitai Please suggest a fix for the following lint violations and provide an AI coding agent prompt for the fix:

error: this argument is passed by value, but not consumed in the function body
Error:    --> tests/bdd/../fixtures/memory_budget_hard_cap.rs:226:51
    |
226 |     fn check_budget_abort_error(&mut self, error: std::io::Error) -> TestResult {
    |                                                   ^^^^^^^^^^^^^^
    |
    = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_pass_by_value
    = note: requested on the command line with `-D clippy::needless-pass-by-value`
help: consider taking a reference instead
    |
226 |     fn check_budget_abort_error(&mut self, error: &std::io::Error) -> TestResult {
    |                                                   +

error: could not compile `wireframe` (test "bdd") due to 1 previous error
make: *** [Makefile:50: lint] Error 101
Error: Process completed with exit code 2.

@coderabbitai

This comment was marked as resolved.

codescene-delta-analysis[bot]

This comment was marked as outdated.

@leynos
Copy link
Copy Markdown
Owner Author

leynos commented Apr 12, 2026

@coderabbitai Please suggest a fix for the following test failures and provide an AI coding agent prompt for the fix:

Run leynos/shared-actions/.github/actions/generate-coverage@aebb3f5b831102e2a10ef909c83d7d50ea86c332
Run astral-sh/setup-uv@e92bafb6253dcd438e0484186d7669ea7a8ca1cc
Trying to find version for uv in: /home/runner/work/wireframe/wireframe/uv.toml
Could not find file: /home/runner/work/wireframe/wireframe/uv.toml
Trying to find version for uv in: /home/runner/work/wireframe/wireframe/pyproject.toml
Could not find file: /home/runner/work/wireframe/wireframe/pyproject.toml
Could not determine uv version from uv.toml or pyproject.toml. Falling back to latest.
Found uv in tool-cache for 0.11.6
Added /home/runner/.local/bin to the path
Added /opt/hostedtoolcache/uv/0.11.6/x86_64 to the path
Set UV_CACHE_DIR to /home/runner/work/_temp/setup-uv-cache
Successfully installed uv version 0.11.6
Searching files using cache dependency glob: /home/runner/work/wireframe/wireframe/**/pyproject.toml,/home/runner/work/wireframe/wireframe/**/uv.lock
No matches found for glob
Warning: No file matched to [/home/runner/work/wireframe/wireframe/**/pyproject.toml,/home/runner/work/wireframe/wireframe/**/uv.lock]. The cache will never get invalidated. Make sure you have checked out the target repository and configured the cache-dependency-glob input correctly.
Trying to restore uv cache from GitHub Actions cache with key: setup-uv-1-x86_64-unknown-linux-gnu-3.12.3-pruned-no-dependency-glob-action-e92bafb6253dcd438e0484186d7669ea7a8ca1cc
Cache hit for: setup-uv-1-x86_64-unknown-linux-gnu-3.12.3-pruned-no-dependency-glob-action-e92bafb6253dcd438e0484186d7669ea7a8ca1cc
Received 548129 of 548129 (100.0%), 13.1 MBs/sec
Cache Size: ~1 MB (548129 B)
/usr/bin/tar -xf /home/runner/work/_temp/a6d7b23e-9928-40d0-b10c-973def689cfc/cache.tzst -P -C /home/runner/work/wireframe/wireframe --use-compress-program unzstd
Cache restored successfully
uv cache restored from GitHub Actions cache with key: setup-uv-1-x86_64-unknown-linux-gnu-3.12.3-pruned-no-dependency-glob-action-e92bafb6253dcd438e0484186d7669ea7a8ca1cc
Run uv run --script "/home/runner/work/_actions/leynos/shared-actions/aebb3f5b831102e2a10ef909c83d7d50ea86c332/.github/actions/generate-coverage/scripts/detect.py"
Downloading pygments (1.2MiB)
 Downloaded pygments
Installed 8 packages in 10ms
Run actions/cache@v4
Cache hit for restore-key: Linux-llvmcov-1935ba0dd371a1fcdc4667b64d82f6cf0413d30977c5d80dd50a96ffe0798518
Received 184549376 of 1406316421 (13.1%), 175.0 MBs/sec
Received 394264576 of 1406316421 (28.0%), 187.2 MBs/sec
Received 612368384 of 1406316421 (43.5%), 194.1 MBs/sec
Received 775946240 of 1406316421 (55.2%), 184.6 MBs/sec
Received 939524096 of 1406316421 (66.8%), 178.8 MBs/sec
Received 1157627904 of 1406316421 (82.3%), 183.6 MBs/sec
Received 1342177280 of 1406316421 (95.4%), 182.2 MBs/sec
Received 1406316421 of 1406316421 (100.0%), 183.2 MBs/sec
Cache Size: ~1341 MB (1406316421 B)
/usr/bin/tar -xf /home/runner/work/_temp/60cb4afe-b0c3-4949-851b-a4e4bb334793/cache.tzst -P -C /home/runner/work/wireframe/wireframe --use-compress-program unzstd
Cache restored successfully
Cache restored from key: Linux-llvmcov-1935ba0dd371a1fcdc4667b64d82f6cf0413d30977c5d80dd50a96ffe0798518
Run uv run --script "/home/runner/work/_actions/leynos/shared-actions/aebb3f5b831102e2a10ef909c83d7d50ea86c332/.github/actions/generate-coverage/scripts/install_cargo_llvm_cov.py"
Installed 9 packages in 205ms
$ /home/runner/.cargo/bin/cargo install cargo-llvm-cov --force
cargo-llvm-cov installed successfully
Run set -euo pipefail
+ set -o pipefail
+ set -o pipefail
+ case "${BINSTALL_VERSION:-}" in
++ mktemp -d
+ cd /tmp/tmp.GOIlkGWevR
+ '[' -z '' ']'
+ base_url=https://github.com/cargo-bins/cargo-binstall/releases/latest/download/cargo-binstall-
++ uname -s
+ os=Linux
+ '[' Linux = Darwin ']'
+ '[' Linux = Linux ']'
++ uname -m
+ machine=x86_64
+ '[' x86_64 = armv7l ']'
+ target=x86_64-unknown-linux-musl
+ '[' x86_64 = armv7 ']'
+ url=https://github.com/cargo-bins/cargo-binstall/releases/latest/download/cargo-binstall-x86_64-unknown-linux-musl.tgz
+ do_curl https://github.com/cargo-bins/cargo-binstall/releases/latest/download/cargo-binstall-x86_64-unknown-linux-musl.tgz
+ curl --retry 10 -A 'Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/81.0' -L --proto =https --tlsv1.2 -sSf https://github.com/cargo-bins/cargo-binstall/releases/latest/download/cargo-binstall-x86_64-unknown-linux-musl.tgz
+ tar -xvzf -
cargo-binstall
+ ./cargo-binstall --self-install
+ CARGO_HOME=/home/runner/.cargo
+ case ":$PATH:" in
+ '[' -n '' ']'
Run uv run --script "/home/runner/work/_actions/leynos/shared-actions/aebb3f5b831102e2a10ef909c83d7d50ea86c332/.github/actions/generate-coverage/scripts/install_cargo_nextest.py"
Installed 9 packages in 11ms
cargo-nextest already installed and verified
Run uv run --script "/home/runner/work/_actions/leynos/shared-actions/aebb3f5b831102e2a10ef909c83d7d50ea86c332/.github/actions/generate-coverage/scripts/run_rust.py"
Downloading lxml (5.0MiB)
 Downloaded lxml
Installed 10 packages in 10ms
$ cargo llvm-cov nextest --workspace --summary-only --lcov --output-path lcov.info
info: cargo-llvm-cov currently setting cfg(coverage) and cfg(coverage_nightly); you can opt-out it by passing --no-cfg-coverage and --no-cfg-coverage-nightly
   Compiling metrics v0.24.3
   Compiling tempfile v3.20.0
   Compiling async-stream v0.3.6
   Compiling rusty-fork v0.3.0
   Compiling metrics-util v0.20.0
   Compiling proptest v1.7.0
   Compiling metrics-exporter-prometheus v0.17.2
   Compiling wireframe v0.3.0 (/home/runner/work/wireframe/wireframe)
   Compiling wireframe_testing v0.3.0 (/home/runner/work/wireframe/wireframe/wireframe_testing)
error[E0432]: unresolved import `wireframe::WireframeClient`
Error:  --> wireframe_testing/tests/integration_helpers.rs:7:17
  |
7 | use wireframe::{WireframeClient, app::Envelope, server::WireframeServer};
  |                 ^^^^^^^^^^^^^^^ no `WireframeClient` in the root
  |
  = help: consider importing this struct instead:
          wireframe::prelude::WireframeClient

For more information about this error, try `rustc --explain E0432`.
error: process didn't exit successfully: `/home/runner/.rustup/toolchains/nightly-2026-03-26-x86_64-unknown-linux-gnu/bin/rustc --crate-name integration_helpers --edition=2024 wireframe_testing/tests/integration_helpers.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --emit=dep-info,link -C embed-bitcode=no --test --check-cfg 'cfg(docsrs,test)' --check-cfg 'cfg(feature, values())' -C metadata=9421f6d25ade97f4 -C extra-filename=-7936c503c8e1d620 --out-dir /home/runner/work/wireframe/wireframe/target/llvm-cov-target/debug/deps -C strip=debuginfo -L dependency=/home/runner/work/wireframe/wireframe/target/llvm-cov-target/debug/deps --extern bincode=/home/runner/work/wireframe/wireframe/target/llvm-cov-target/debug/deps/libbincode-25822010f61db8d2.rlib --extern bytes=/home/runner/work/wireframe/wireframe/target/llvm-cov-target/debug/deps/libbytes-9b110b3ecf55bb19.rlib --extern futures=/home/runner/work/wireframe/wireframe/target/llvm-cov-target/debug/deps/libfutures-284005bafe72b6f3.rlib --extern log=/home/runner/work/wireframe/wireframe/target/llvm-cov-target/debug/deps/liblog-94a2218ba7905afa.rlib --extern logtest=/home/runner/work/wireframe/wireframe/target/llvm-cov-target/debug/deps/liblogtest-2e4093b5d044758a.rlib --extern metrics=/home/runner/work/wireframe/wireframe/target/llvm-cov-target/debug/deps/libmetrics-1bd39176b927559a.rlib --extern metrics_util=/home/runner/work/wireframe/wireframe/target/llvm-cov-target/debug/deps/libmetrics_util-8bf69addccee0162.rlib --extern rstest=/home/runner/work/wireframe/wireframe/target/llvm-cov-target/debug/deps/librstest-5981876bf3b24a42.rlib --extern thiserror=/home/runner/work/wireframe/wireframe/target/llvm-cov-target/debug/deps/libthiserror-da783c768993bfb1.rlib --extern tokio=/home/runner/work/wireframe/wireframe/target/llvm-cov-target/debug/deps/libtokio-ce17907ef6f8a753.rlib --extern tokio_util=/home/runner/work/wireframe/wireframe/target/llvm-cov-target/debug/deps/libtokio_util-c12601f954289ffa.rlib --extern wireframe=/home/runner/work/wireframe/wireframe/target/llvm-cov-target/debug/deps/libwireframe-0a57fc14a91d867b.rlib --extern wireframe_testing=/home/runner/work/wireframe/wireframe/target/llvm-cov-target/debug/deps/libwireframe_testing-dc8c3ab87ac52fe1.rlib -D warnings -L native=/home/runner/work/wireframe/wireframe/target/llvm-cov-target/debug/build/aws-lc-sys-27ff0fe8c9ce6f40/out -C instrument-coverage --cfg=coverage --cfg=coverage_nightly` (exit status: 1)
error: could not compile `wireframe_testing` (test "integration_helpers") due to 1 previous error
warning: build failed, waiting for other jobs to finish...
error: command `/home/runner/.rustup/toolchains/nightly-2026-03-26-x86_64-unknown-linux-gnu/bin/cargo test --no-run --message-format json-render-diagnostics --workspace --target-dir /home/runner/work/wireframe/wireframe/target/llvm-cov-target` exited with code 101
error: process didn't exit successfully: `/home/runner/.rustup/toolchains/nightly-2026-03-26-x86_64-unknown-linux-gnu/bin/cargo nextest run --manifest-path /home/runner/work/wireframe/wireframe/Cargo.toml --target-dir /home/runner/work/wireframe/wireframe/target/llvm-cov-target --workspace` (exit status: 101)
cargo llvm-cov nextest --workspace --summary-only --lcov --output-path lcov.info failed with code 101
Error: Process completed with exit code 101.

Please also suggest a fix for these not being caught by the agent.

@coderabbitai

This comment was marked as resolved.

codescene-delta-analysis[bot]

This comment was marked as outdated.

@leynos
Copy link
Copy Markdown
Owner Author

leynos commented Apr 12, 2026

@coderabbitai Please investigate and identify a fix for the following test failure and provide an AI coding agent prompt for the fix:

        FAIL [   0.030s] (806/808) wireframe::workspace_manifest cargo_metadata_reports_root_as_only_workspace_member_and_default_member
  stdout ───

    running 1 test
    test cargo_metadata_reports_root_as_only_workspace_member_and_default_member ... FAILED

    failures:

    failures:
        cargo_metadata_reports_root_as_only_workspace_member_and_default_member

    test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 1 filtered out; finished in 0.03s
    
  stderr ───

    thread 'cargo_metadata_reports_root_as_only_workspace_member_and_default_member' (26670) panicked at tests/workspace_manifest.rs:97:5:
    workspace metadata should include the root package
    stack backtrace:
       0: __rustc::rust_begin_unwind
       1: core::panicking::panic_fmt
       2: workspace_manifest::cargo_metadata_reports_root_as_only_workspace_member_and_default_member::cargo_metadata_reports_root_as_only_workspace_member_and_default_member
       3: workspace_manifest::cargo_metadata_reports_root_as_only_workspace_member_and_default_member
       4: workspace_manifest::cargo_metadata_reports_root_as_only_workspace_member_and_default_member::{closure#0}
       5: <workspace_manifest::cargo_metadata_reports_root_as_only_workspace_member_and_default_member::{closure#0} as core::ops::function::FnOnce<()>>::call_once
    note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.

  Cancelling due to test failure: 2 tests still running
        PASS [   1.511s] (807/808) wireframe::preamble callbacks::callbacks_dropped_when_overriding_preamble
 TERMINATING [>180.000s] (───────) wireframe_testing::integration_helpers integration_helpers_round_trip
     TIMEOUT [ 180.002s] (808/808) wireframe_testing::integration_helpers integration_helpers_round_trip
  stdout ───

    running 1 test
    test integration_helpers_round_trip has been running for over 60 seconds

    (test timed out)

────────────
     Summary [ 182.596s] 808 tests run: 806 passed, 1 failed, 1 timed out, 0 skipped
        FAIL [   0.030s] (806/808) wireframe::workspace_manifest cargo_metadata_reports_root_as_only_workspace_member_and_default_member
     TIMEOUT [ 180.002s] (808/808) wireframe_testing::integration_helpers integration_helpers_round_trip
error: test run failed
error: process didn't exit successfully: `/home/runner/.rustup/toolchains/nightly-2026-03-26-x86_64-unknown-linux-gnu/bin/cargo nextest run --manifest-path /home/runner/work/wireframe/wireframe/Cargo.toml --target-dir /home/runner/work/wireframe/wireframe/target/llvm-cov-target --workspace` (exit status: 100)
cargo llvm-cov nextest --workspace --summary-only --lcov --output-path lcov.info failed with code 100
Error: Process completed with exit code 100.

@coderabbitai

This comment was marked as resolved.

codescene-delta-analysis[bot]

This comment was marked as outdated.

codescene-delta-analysis[bot]

This comment was marked as outdated.

@leynos
Copy link
Copy Markdown
Owner Author

leynos commented Apr 16, 2026

@coderabbitai Have the following failed checks now been resolved?

If further work is required, please provide an AI agent prompt for the remaining work to be done to address these failures.

❌ Failed checks (3 warnings)

Check name Status Explanation Resolution
Testing ⚠️ Warning PR introduces new functions and refactors but lacks comprehensive test coverage; substring matching persists instead of structured JSON parsing, and property-based tests for sequence boundaries are absent. Replace substring matching with serde_json parsing in workspace_manifest.rs, add direct unit tests for fill_buf_with_prefix, and introduce proptest-based tests for sequence overflow boundaries.
User-Facing Documentation ⚠️ Warning The pull request adds public Default trait implementations for LoggerHandle and ObservabilityHandle but fails to update the primary user-facing documentation. Update docs/wireframe-testing-crate.md to document the Default implementations with usage examples and explain when to use Default::default() versus explicit new() calls.
Developer Documentation ⚠️ Warning Developers-guide.md contains outdated function names and lacks documentation for new internal APIs introduced in this PR. Update 'Message sequence validation architecture' section to reflect refactored function names and document new APIs: fill_buf_with_prefix() and ServerShutdownHandle.

@coderabbitai

This comment was marked as resolved.

Introduced a three-helper split in message series sequence tracking:
- `start_sequence_tracking()` handles untracked-to-tracked transition,
- `advance_tracked_sequence()` validates duplicates, gaps, and order,
- `advance_sequence_or_overflow()` manages sequence increment and overflow.

Added comprehensive property-based and unit tests for sequence logic.

Also added `fill_buf_with_prefix` helper with tests in frame conversion and
a type alias for server shutdown handle in wireframe testing crate.

Documentation updated accordingly to explain new helpers and internals.

Co-authored-by: devboxerhub[bot] <devboxerhub[bot]@users.noreply.github.com>
codescene-delta-analysis[bot]

This comment was marked as outdated.

…ts for sequence handling

Replaced proptest-based property tests with explicit unit tests covering advance_sequence_or_overflow, start_sequence_tracking, and advance_tracked_sequence behaviors. This change improves test clarity and maintainability by targeting key sequence handling cases such as normal increments, overflow conditions, duplicate detection, and sequence mismatches.

Co-authored-by: devboxerhub[bot] <devboxerhub[bot]@users.noreply.github.com>
codescene-delta-analysis[bot]

This comment was marked as outdated.

@leynos leynos changed the title Convert Root Manifest Into Hybrid Workspace (10.1.1 & 15.1.1 complete; tests & docs) Convert Root Manifest to Hybrid Workspace (10.1.1 & 15.1.1 complete) Apr 16, 2026
…ement and sequence tracking

Add unit tests for prefix-buffer placement across endianness cases in frame/conversion.rs and for sequence tracking, overflow, and ordering helpers in message_assembler/series.rs.

Co-authored-by: devboxerhub[bot] <devboxerhub[bot]@users.noreply.github.com>
codescene-delta-analysis[bot]

This comment was marked as outdated.

@leynos
Copy link
Copy Markdown
Owner Author

leynos commented Apr 16, 2026

@coderabbitai review

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Apr 16, 2026

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@leynos
Copy link
Copy Markdown
Owner Author

leynos commented Apr 16, 2026

@coderabbitai Have the following failed checks now been resolved?

If further work is required, please provide an AI agent prompt for the remaining work to be done to address these failures.

❌ Failed checks (3 warnings)

Check name Status Explanation Resolution
Testing ⚠️ Warning PR introduces new functions and refactors but lacks comprehensive test coverage; substring matching persists instead of structured JSON parsing, and property-based tests for sequence boundaries are absent. Replace substring matching with serde_json parsing in workspace_manifest.rs, add direct unit tests for fill_buf_with_prefix, and introduce proptest-based tests for sequence overflow boundaries.
User-Facing Documentation ⚠️ Warning The pull request adds public Default trait implementations for LoggerHandle and ObservabilityHandle but fails to update the primary user-facing documentation. Update docs/wireframe-testing-crate.md to document the Default implementations with usage examples and explain when to use Default::default() versus explicit new() calls.
Developer Documentation ⚠️ Warning Developers-guide.md contains outdated function names and lacks documentation for new internal APIs introduced in this PR. Update 'Message sequence validation architecture' section to reflect refactored function names and document new APIs: fill_buf_with_prefix() and ServerShutdownHandle.

@coderabbitai

This comment was marked as resolved.

Copy link
Copy Markdown
Contributor

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

♻️ Duplicate comments (1)
tests/fixtures/workspace_manifest.rs (1)

166-173: ⚠️ Potential issue | 🟡 Minor

Drop the remaining substring match on Cargo package IDs.

Remove member.contains(VERIFICATION_PACKAGE_NAME). The packages array already gives exact package names, so this extra check depends on Cargo's opaque pkgid formatting and can fail for the wrong reason.

♻️ Proposed simplification
     pub fn verify_verification_crate_is_absent(&self) -> TestResult {
         let metadata = self.metadata_json()?;
-        let workspace_members = Self::metadata_string_array(&metadata, "workspace_members")?;
-        if workspace_members.iter().any(|member| {
-            member
-                .as_str()
-                .is_some_and(|member| member.contains(VERIFICATION_PACKAGE_NAME))
-        }) || Self::packages_include_name(&metadata, VERIFICATION_PACKAGE_NAME)?
+        if Self::packages_include_name(&metadata, VERIFICATION_PACKAGE_NAME)?
         {
             return Err(
                 "verification crate should not join the workspace until roadmap item 10.1.2".into(),
             );
         }
🔍 Verification script
#!/bin/bash
set -euo pipefail

cargo metadata --no-deps --format-version 1 > /tmp/workspace-metadata.json

python - <<'PY'
import json
with open('/tmp/workspace-metadata.json', 'r', encoding='utf-8') as fh:
    metadata = json.load(fh)

print("workspace_members:")
for member in metadata["workspace_members"]:
    print(f"  - {member}")

print("\npackage names:")
for name in sorted(pkg["name"] for pkg in metadata["packages"]):
    print(f"  - {name}")
PY
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@tests/fixtures/workspace_manifest.rs` around lines 166 - 173, The code in
verify_verification_crate_is_absent currently does a substring match against
workspace_members using member.contains(VERIFICATION_PACKAGE_NAME); remove that
substring check — either drop the workspace_members.any branch entirely and rely
on Self::packages_include_name(&metadata, VERIFICATION_PACKAGE_NAME)? for exact
package-name matching, or if you need to keep the workspace_members check,
change the closure to test exact equality (member.as_str().is_some_and(|m| m ==
VERIFICATION_PACKAGE_NAME)). Update the condition so it no longer depends on
Cargo pkgid substring matching (referencing verify_verification_crate_is_absent,
metadata_string_array, packages_include_name, and VERIFICATION_PACKAGE_NAME).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@docs/execplans/10-1-1-convert-root-manifest-into-hybrid-workspace.md`:
- Line 7: The document's top "Status: IMPLEMENTED" is inconsistent with the open
validation in Stage E; update the file
docs/execplans/10-1-1-convert-root-manifest-into-hybrid-workspace.md so the
ExecPlan is internally consistent by either marking "Stage E" as complete and
adding the recorded environment exception details to that stage, or by changing
the status line from "Status: IMPLEMENTED" to a qualifier (e.g., "Status:
IMPLEMENTED (validation pending)" or "Status: PARTIALLY IMPLEMENTED") to reflect
the open validation; apply the same reconciliation to the related section around
lines referenced (134-138) to ensure both the top-level Status and Stage E
agree.

In `@docs/wireframe-testing-crate.md`:
- Around line 442-446: Rewrite the paragraph to remove second-person phrasing
and switch to Oxford spelling for "initialization": explain that
Default::default() (or deriving #[derive(Default)] on a fixture struct) should
be used when the handle is a field of a larger fixture world so the standard
initialization machinery constructs it automatically, and that new() should be
used when an explicit construction point with a visible call site is required
(for example, when recovering from a poisoned mutex during test teardown);
ensure no use of "you" or other 1st/2nd-person pronouns and keep the examples
referencing Default::default(), #[derive(Default)], and new().

In `@src/frame/conversion.rs`:
- Around line 193-240: Replace the seven near-duplicate unit tests for
fill_buf_with_prefix with a single parameterised rstest that takes (input:
&[u8], endianness: Endianness, expected: [u8;8]) and asserts the buffer equals
expected; include cases for Big and Little for 1, 2, 4 and 8-byte inputs (add
the missing little-endian 2-byte case #[case(&[0x01,0x02], Endianness::Little,
[0x01,0x02,0,0,0,0,0,0])] so both endiannesses are symmetric), reuse the same
buffer initialization (let mut buf = [0u8;8]; fill_buf_with_prefix(&mut buf,
input, endianness); assert_eq!(buf, expected)) and remove the individual test
functions (keep references to fill_buf_with_prefix and Endianness to locate the
code).
- Around line 36-46: The function fill_buf_with_prefix currently uses direct
slicing (buf[8 - size..], buf[..size]) under a clippy suppression; change it to
validate and compute ranges safely by using checked_sub to compute the start
index for Big endian and get_mut or get to obtain subslices (returning an Err if
size is not one of 1,2,4,8 or otherwise out-of-bounds), change
fill_buf_with_prefix signature to return Result<(), YourErrorType> and copy into
the safely-obtained subslice, and update the call site that currently does
fill_buf_with_prefix(&mut buf, prefix, endianness); to propagate the Result with
? as indicated; also replace the seven duplicated tests with a parameterised
#[rstest] covering widths [1,2,4,8] for both Endianness::Big and
Endianness::Little (including the previously-missing little-endian 2-byte case)
to assert the buffer contents for each combination.

In `@src/message_assembler/series.rs`:
- Around line 313-322: Add a regression test that calls
start_sequence_tracking(FrameSequence(u32::MAX), false) and asserts it returns
Err(MessageSeriesError::SequenceOverflow { .. }) and that the Series instance's
sequence_tracking and next_sequence fields remain unchanged; mirror the existing
advance_sequence_or_overflow test pattern but explicitly check
Series.sequence_tracking and Series.next_sequence before and after the call to
ensure no partial mutation occurred, referencing the Series struct and its
start_sequence_tracking and advance_sequence_or_overflow methods.

In `@tests/fixtures/workspace_manifest.rs`:
- Around line 68-80: Rename the helper metadata_string_array to a neutral name
like metadata_array and change its return type from &'a Vec<Value> to a slice
&'a [Value]; update its signature (metadata_array<'a>(metadata: &'a Value,
field: &str) -> Result<&'a [Value], String>) and adjust the packages function to
call Self::metadata_array(metadata, "packages") and to return Result<&[Value],
String> so callers no longer depend on the Vec backing type.

---

Duplicate comments:
In `@tests/fixtures/workspace_manifest.rs`:
- Around line 166-173: The code in verify_verification_crate_is_absent currently
does a substring match against workspace_members using
member.contains(VERIFICATION_PACKAGE_NAME); remove that substring check — either
drop the workspace_members.any branch entirely and rely on
Self::packages_include_name(&metadata, VERIFICATION_PACKAGE_NAME)? for exact
package-name matching, or if you need to keep the workspace_members check,
change the closure to test exact equality (member.as_str().is_some_and(|m| m ==
VERIFICATION_PACKAGE_NAME)). Update the condition so it no longer depends on
Cargo pkgid substring matching (referencing verify_verification_crate_is_absent,
metadata_string_array, packages_include_name, and VERIFICATION_PACKAGE_NAME).
🪄 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: ASSERTIVE

Plan: Pro

Run ID: 6ec79d6e-a455-49c8-95f7-299ff3a224ef

📥 Commits

Reviewing files that changed from the base of the PR and between 25314bd and 6e692f8.

📒 Files selected for processing (6)
  • docs/developers-guide.md
  • docs/execplans/10-1-1-convert-root-manifest-into-hybrid-workspace.md
  • docs/wireframe-testing-crate.md
  • src/frame/conversion.rs
  • src/message_assembler/series.rs
  • tests/fixtures/workspace_manifest.rs

Comment thread docs/execplans/10-1-1-convert-root-manifest-into-hybrid-workspace.md Outdated
Comment thread docs/wireframe-testing-crate.md Outdated
Comment thread src/frame/conversion.rs Outdated
Comment thread src/frame/conversion.rs Outdated
Comment thread src/message_assembler/series.rs Outdated
Comment thread tests/fixtures/workspace_manifest.rs Outdated
This change updates the private helper fill_buf_with_prefix in src/frame/conversion.rs to return a Result type, adding explicit validation of prefix length and bounds checking. It improves error handling by returning io::Error when the prefix length is invalid rather than panicking or assuming correctness.

Additional changes include:
- Updating callers to handle the Result return value.
- Adding comprehensive tests using rstest to verify correct buffer placement for all supported prefix sizes and endianness.
- Enhancing documentation in docs/developers-guide.md for fill_buf_with_prefix and ServerShutdownHandle.
- Various minor fixes and improvements in message_assembler series tests and workspace manifest test fixture.

This refactor improves robustness and correctness in frame conversion logic.

Co-authored-by: devboxerhub[bot] <devboxerhub[bot]@users.noreply.github.com>
codescene-delta-analysis[bot]

This comment was marked as outdated.

Copy link
Copy Markdown
Contributor

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

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@docs/developers-guide.md`:
- Around line 209-211: Edit the sentence in the docs that describes
LoggerHandle::new(): add a comma before "so" in "drains any buffered log records
so the next test starts from a clean state" to read "drains any buffered log
records, so the next test starts from a clean state" to improve readability.
🪄 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: ASSERTIVE

Plan: Pro

Run ID: 7ed481a1-15c1-4874-8bd7-66dedcf0c5fb

📥 Commits

Reviewing files that changed from the base of the PR and between 6e692f8 and 1b56033.

📒 Files selected for processing (6)
  • docs/developers-guide.md
  • docs/execplans/10-1-1-convert-root-manifest-into-hybrid-workspace.md
  • docs/wireframe-testing-crate.md
  • src/frame/conversion.rs
  • src/message_assembler/series.rs
  • tests/fixtures/workspace_manifest.rs

Comment thread docs/developers-guide.md Outdated
@leynos
Copy link
Copy Markdown
Owner Author

leynos commented Apr 16, 2026

@coderabbitai pause

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Apr 16, 2026

✅ Actions performed

Reviews paused.

…or explanation

Corrected comma placement in the description of LoggerHandle::new() to improve clarity.

Co-authored-by: devboxerhub[bot] <devboxerhub[bot]@users.noreply.github.com>
codescene-delta-analysis[bot]

This comment was marked as outdated.

@leynos

This comment was marked as resolved.

…ated module

Refactor sequence tracking unit and property tests from inline module in
`series.rs` into a separate `tests.rs` file to improve code organization and
readability.

Co-authored-by: devboxerhub[bot] <devboxerhub[bot]@users.noreply.github.com>
@leynos leynos merged commit e5c062e into main Apr 16, 2026
6 checks passed
@leynos leynos deleted the convert-root-manifest-hybrid-ws-qie8gy branch April 16, 2026 19:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant