Skip to content

Establish workspace with core, data, and cli crates#1

Merged
leynos merged 5 commits intomainfrom
codex/set-up-project-structure-with-crates
Aug 18, 2025
Merged

Establish workspace with core, data, and cli crates#1
leynos merged 5 commits intomainfrom
codex/set-up-project-structure-with-crates

Conversation

@leynos
Copy link
Copy Markdown
Owner

@leynos leynos commented Aug 14, 2025

Summary

  • scaffold core, data, and cli crates
  • configure workspace with shared clippy lints
  • mark project structure as complete in the roadmap

Testing

  • make fmt
  • make check-fmt
  • cargo clippy --workspace --all-targets --all-features -- -D warnings
  • RUSTFLAGS="-D warnings" cargo test --workspace --all-targets --all-features
  • make markdownlint
  • make nixie

https://chatgpt.com/codex/tasks/task_e_689e2aa329a88322bd50ec18b0264135

Summary by Sourcery

Scaffold and configure the Wildside Cargo workspace with core, data, and CLI crates, establish shared lints, update CI, and finalize initial project structure in documentation.

Enhancements:

  • Initialize a Cargo workspace with wildside-core, wildside-data, and wildside-cli crates and set edition and resolver in the root Cargo.toml
  • Add skeleton lib.rs files for core and data crates and a main.rs for the CLI crate
  • Configure shared Clippy lints at the workspace level

CI:

  • Revamp GitHub Actions CI to use actions-rs/toolchain for Rust setup and Swatinem/rust-cache for caching
  • Consolidate CI steps to run formatting checks, linting, tests, markdownlint, and diagram validation

Documentation:

  • Mark initial project structure tasks as complete and standardize crate naming in docs/roadmap

Copy link
Copy Markdown

@sourcery-ai sourcery-ai Bot left a comment

Choose a reason for hiding this comment

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

Sorry @leynos, you have reached your 24-hour rate limit for Sourcery. Please try again later

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Aug 14, 2025

Note

Other AI code review bot(s) detected

CodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review.

Warning

Rate limit exceeded

@leynos has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 8 minutes and 22 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📥 Commits

Reviewing files that changed from the base of the PR and between b56fb65 and c0cc77f.

📒 Files selected for processing (8)
  • .github/workflows/ci.yml (1 hunks)
  • docs/roadmap.md (10 hunks)
  • docs/wildside-engine-design.md (8 hunks)
  • wildside-cli/Cargo.toml (1 hunks)
  • wildside-cli/src/main.rs (1 hunks)
  • wildside-core/Cargo.toml (1 hunks)
  • wildside-data/Cargo.toml (1 hunks)
  • wildside-data/src/lib.rs (1 hunks)

Summary by CodeRabbit

  • New Features

    • Introduced an initial CLI scaffold (wildside) as part of a new multi-crate workspace.
  • Refactor

    • Migrated to a Rust workspace with renamed crates (core, data, cli) and consolidated linting at workspace level.
  • CI

    • Expanded PR triggers, upgraded Rust toolchain, added build caching, and introduced Markdown/diagram validation; removed coverage steps.
  • Documentation

    • Updated design and roadmap to reflect new crate names, locations of types/traits, and standardised terminology.

Walkthrough

Create a Rust workspace with members wildside-core, wildside-data, and wildside-cli; centralise edition and Clippy lint configuration at the workspace level; add minimal crate scaffolding for core, data and a CLI binary stub; update docs to reflect crate renames; and modernise CI with a nightly toolchain, caching and extra checks while removing coverage steps.

Changes

Cohort / File(s) Summary
Workspace manifest & linting
Cargo.toml
Replace crate-level manifest with a workspace manifest: add [workspace] members = ["wildside-core","wildside-data","wildside-cli"], set resolver = "2", add [workspace.package] edition = "2024", and move Clippy config into [workspace.lints.clippy] with pedantic warn plus many deny lint groups.
CI pipeline
.github/workflows/ci.yml
Broaden PR trigger to all PRs, rename job to build, switch to actions-rs/toolchain pinned nightly (nightly-2025-06-26) with components, add rust-cache, update checkout to pinned commit, add markdown and diagram validation steps, remove coverage steps and global permissions/env.
Docs: roadmap & design
docs/roadmap.md, docs/wildside-engine-design.md
Rename crate references from wildside-engine-* to wildside-* (core, data, scorer, solver-vrp, solver-ortools, cli); move public type references (e.g., PointOfInterest, SolveRequest, Solver trait, TravelTimeProvider) to wildside-core; apply minor wording and spelling changes.
New crate: wildside-core
wildside-core/Cargo.toml, wildside-core/src/lib.rs
Add wildside-core crate manifest with edition.workspace = true and publish = false; add doc-only lib stub describing core domain types.
New crate: wildside-data
wildside-data/Cargo.toml, wildside-data/src/lib.rs
Add wildside-data crate manifest with edition.workspace = true and publish = false; add doc-only lib stub for data/ingestion layer.
New crate: wildside-cli
wildside-cli/Cargo.toml, wildside-cli/src/main.rs
Add wildside-cli crate manifest with edition.workspace = true, publish = false, and a [[bin]] entry; add minimal fn main() CLI entrypoint stub.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  actor Dev
  participant GH as GitHub Actions
  participant Toolchain as actions-rs/toolchain
  participant Cache as rust-cache
  participant Make as make

  Dev->>GH: push / pull_request
  GH->>Toolchain: install nightly + rustfmt + clippy + llvm-tools (override)
  GH->>Cache: restore cargo cache
  GH->>Make: make check-fmt
  GH->>Make: make markdownlint
  GH->>Make: make nixie
  GH->>Make: make lint
  GH->>Make: make test
  Make-->>Cache: save caches
Loading
sequenceDiagram
  autonumber
  actor User
  participant CLI as wildside (wildside-cli)
  User->>CLI: run
  CLI-->>User: exit (no-op)
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Poem

A workspace formed, three crates in line,
Move lints to root and set the edition fine.
CI wakes nightly, caches tucked tight,
Docs rename paths and tidy the sight.
Ship a stub CLI — prepare for flight.

✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch codex/set-up-project-structure-with-crates

🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR/Issue comments)

Type @coderabbitai help to get the list of available commands.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Status, Documentation and Community

  • Visit our Status Page to check the current availability of CodeRabbit.
  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

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.

Actionable comments posted: 13

🔭 Outside diff range comments (1)
Cargo.toml (1)

15-49: Relax float_arithmetic to reduce friction for numerics-heavy code

Denying all floating-point arithmetic at workspace level will block legitimate domain logic (distances, scores, travel times). Gate exceptions locally or start with a warning.

Apply this diff:

 # 6. numerical foot-guns
-float_arithmetic = "deny"
+float_arithmetic = "warn"
📜 Review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro

💡 Knowledge Base configuration:

  • Jira integration is disabled

You can enable these settings in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 25aa05f and 65a79bf.

⛔ Files ignored due to path filters (1)
  • Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (8)
  • Cargo.toml (1 hunks)
  • cli/Cargo.toml (1 hunks)
  • cli/src/main.rs (1 hunks)
  • core/Cargo.toml (1 hunks)
  • core/src/lib.rs (1 hunks)
  • data/Cargo.toml (1 hunks)
  • data/src/lib.rs (1 hunks)
  • docs/roadmap.md (2 hunks)
🧰 Additional context used
📓 Path-based instructions (2)
**/*.rs

⚙️ CodeRabbit Configuration File

**/*.rs: * Seek to keep the cyclomatic complexity of functions no more than 12.

  • Adhere to single responsibility and CQRS

  • Place function attributes after doc comments.

  • Do not use return in single-line functions.

  • Move conditionals with >2 branches into a predicate function.

  • Avoid unsafe unless absolutely necessary.

  • Every module must begin with a //! doc comment that explains the module's purpose and utility.

  • Comments and docs must follow en-GB-oxendict (-ize / -our) spelling and grammar

  • Lints must not be silenced except as a last resort.

    • #[allow] is forbidden.
    • Only narrowly scoped #[expect(lint, reason = "...")] is allowed.
    • No lint groups, no blanket or file-wide suppression.
    • Include FIXME: with link if a fix is expected.
  • Where code is only used by specific features, it must be conditionally compiled or a conditional expectation for unused_code applied.

  • Use rstest fixtures for shared setup and to avoid repetition between tests.

  • Replace duplicated tests with #[rstest(...)] parameterised cases.

  • Prefer mockall for mocks/stubs.

  • Prefer .expect() over .unwrap()

  • Ensure that any API or behavioural changes are reflected in the documentation in docs/

  • Ensure that any completed roadmap steps are recorded in the appropriate roadmap in docs/

  • Files must not exceed 400 lines in length

    • Large modules must be decomposed
    • Long match statements or dispatch tables should be decomposed by domain and collocated with targets
    • Large blocks of inline data (e.g., test fixtures, constants or templates) must be moved to external files and inlined at compile-time or loaded at run-time.

Files:

  • data/src/lib.rs
  • core/src/lib.rs
  • cli/src/main.rs
**/*.md

⚙️ CodeRabbit Configuration File

**/*.md: * Avoid 2nd person or 1st person pronouns ("I", "you", "we")

  • Use en-GB-oxendict (-ize / -our) spelling and grammar
  • Headings must not be wrapped.
  • Documents must start with a level 1 heading
  • Headings must correctly increase or decrease by no more than one level at a time
  • Use GitHub-flavoured Markdown style for footnotes and endnotes.
  • Numbered footnotes must be numbered by order of appearance in the document.

Files:

  • docs/roadmap.md
🔇 Additional comments (3)
data/src/lib.rs (1)

1-1: LGTM: Module-level docs are present and correctly use //!.

The crate header satisfies the guideline requiring a module doc comment at the start of every module.

core/src/lib.rs (1)

1-1: LGTM: Module-level docs are present and correctly use //!.

The crate header meets the documentation and style requirements.

docs/roadmap.md (1)

29-29: LGTM: Markdownlint suppression placement

The MD013 suppression is correctly scoped to the following long line.

Comment thread Cargo.toml
Comment thread cli/Cargo.toml Outdated
Comment thread cli/Cargo.toml Outdated
Comment thread cli/src/main.rs Outdated
Comment thread core/Cargo.toml Outdated
Comment thread data/Cargo.toml Outdated
Comment thread data/Cargo.toml Outdated
Comment thread data/Cargo.toml Outdated
Comment thread data/src/lib.rs Outdated
Comment thread docs/roadmap.md Outdated
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.

Actionable comments posted: 8

🔭 Outside diff range comments (4)
wildside-core/Cargo.toml (1)

7-8: Remove the empty [dependencies] section.

Trim the manifest noise until you actually add a dependency.

Apply this diff:

-[dependencies]
-
wildside-core/src/lib.rs (1)

1-2: Tighten crate guarantees and expand the crate-level docs.

Enforce no-unsafe at the crate level and flesh out the module docs to meet the “purpose and utility” guideline. Keep crate attributes after the inner doc comment.

Apply this diff:

 //! Core domain types for the Wildside engine.
+#![forbid(unsafe_code)]
+#![deny(missing_docs)]
+//!
+//! This crate defines the canonical data structures and invariants shared across
+//! the Wildside workspace. Keep this crate free of I/O, async runtimes, and
+//! third-party dependencies to maximize reuse.
+//!
+//! Responsibilities:
+//! - Domain value objects and identifiers
+//! - Pure business rules and validation predicates
+//! - Error types shared between crates
+//!
+//! Non-goals:
+//! - Persistence (see wildside-data)
+//! - CLI or UX concerns (see wildside-cli)
+//!
+//! Examples
+//! ```ignore
+//! // When types are added, include a minimal usage example here.
+//! ```
wildside-data/Cargo.toml (1)

7-8: Remove the empty [dependencies] section.

Avoid empty tables until needed.

Apply this diff:

-[dependencies]
-
Cargo.toml (1)

20-54: Align Clippy policy with repository guidelines and planned float usage.

  • The guideline states “Prefer .expect() over .unwrap()”. Denying expect_used contradicts that. Deny unwrap_used, but allow or warn on expect_used.
  • The roadmap specifies scoring APIs using f32. Denying float_arithmetic at the workspace level will block core/data/scorer logic. Relax at workspace level; enforce narrowly with #[expect(..., reason = "...")] where genuinely required.

Apply this diff:

 [workspace.lints.clippy]
 pedantic = { level = "warn", priority = -1 }
@@
 # 3. panic-prone operations
 unwrap_used                     = "deny"
-expect_used                     = "deny"
+expect_used                     = "warn"
@@
 # 6. numerical foot-guns
-float_arithmetic = "deny"
+float_arithmetic = "warn"

Optionally, document in CONTRIBUTING.md that .expect(...) must include a clear, actionable failure message, and use narrowly-scoped #[expect(..., reason = "...")] only with a FIXME link when suppressing.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro

💡 Knowledge Base configuration:

  • Jira integration is disabled

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 65a79bf and 390d2fe.

⛔ Files ignored due to path filters (1)
  • Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (9)
  • .github/workflows/ci.yml (1 hunks)
  • Cargo.toml (1 hunks)
  • docs/roadmap.md (10 hunks)
  • wildside-cli/Cargo.toml (1 hunks)
  • wildside-cli/src/main.rs (1 hunks)
  • wildside-core/Cargo.toml (1 hunks)
  • wildside-core/src/lib.rs (1 hunks)
  • wildside-data/Cargo.toml (1 hunks)
  • wildside-data/src/lib.rs (1 hunks)
🧰 Additional context used
📓 Path-based instructions (2)
**/*.rs

⚙️ CodeRabbit Configuration File

**/*.rs: * Seek to keep the cyclomatic complexity of functions no more than 12.

  • Adhere to single responsibility and CQRS

  • Place function attributes after doc comments.

  • Do not use return in single-line functions.

  • Move conditionals with >2 branches into a predicate function.

  • Avoid unsafe unless absolutely necessary.

  • Every module must begin with a //! doc comment that explains the module's purpose and utility.

  • Comments and docs must follow en-GB-oxendict (-ize / -our) spelling and grammar

  • Lints must not be silenced except as a last resort.

    • #[allow] is forbidden.
    • Only narrowly scoped #[expect(lint, reason = "...")] is allowed.
    • No lint groups, no blanket or file-wide suppression.
    • Include FIXME: with link if a fix is expected.
  • Where code is only used by specific features, it must be conditionally compiled or a conditional expectation for unused_code applied.

  • Use rstest fixtures for shared setup and to avoid repetition between tests.

  • Replace duplicated tests with #[rstest(...)] parameterised cases.

  • Prefer mockall for mocks/stubs.

  • Prefer .expect() over .unwrap()

  • Ensure that any API or behavioural changes are reflected in the documentation in docs/

  • Ensure that any completed roadmap steps are recorded in the appropriate roadmap in docs/

  • Files must not exceed 400 lines in length

    • Large modules must be decomposed
    • Long match statements or dispatch tables should be decomposed by domain and collocated with targets
    • Large blocks of inline data (e.g., test fixtures, constants or templates) must be moved to external files and inlined at compile-time or loaded at run-time.

Files:

  • wildside-data/src/lib.rs
  • wildside-core/src/lib.rs
  • wildside-cli/src/main.rs
**/*.md

⚙️ CodeRabbit Configuration File

**/*.md: * Avoid 2nd person or 1st person pronouns ("I", "you", "we")

  • Use en-GB-oxendict (-ize / -our) spelling and grammar
  • Headings must not be wrapped.
  • Documents must start with a level 1 heading
  • Headings must correctly increase or decrease by no more than one level at a time
  • Use GitHub-flavoured Markdown style for footnotes and endnotes.
  • Numbered footnotes must be numbered by order of appearance in the document.

Files:

  • docs/roadmap.md
🪛 actionlint (1.7.7)
.github/workflows/ci.yml

13-13: the runner of "actions-rs/toolchain@v1" action is too old to run on GitHub Actions. update the action's version to fix this issue

(action)

🪛 LanguageTool
docs/roadmap.md

[locale-violation] ~163-~163: LICENSE must be spelled with a “c” when used as a noun in British English. Use “licence”.
Context: ...ing and Versioning** - [ ] Add the ISC LICENSE file to the root of the workspace and ...

(LICENCE_LICENSE_NOUN_SINGULAR)

🔇 Additional comments (9)
wildside-core/Cargo.toml (1)

1-6: LGTM: Workspace-inherited edition and non-publishable core crate are set correctly.

The manifest is minimal and aligned with a dependency-light core crate.

wildside-data/Cargo.toml (1)

1-6: LGTM: Data crate scaffold matches the workspace conventions.

The package section is clean and inherits the edition correctly.

wildside-cli/Cargo.toml (1)

9-11: LGTM: Binary target mapping is correct.

The bin name and path are coherent with the crate intent.

wildside-data/src/lib.rs (1)

1-14: LGTM on module docs and boundaries.

Start the module with //! docs, scope responsibilities clearly, and call out async and domain boundaries. This matches the workspace documentation standard.

.github/workflows/ci.yml (1)

21-24: Remove suggestion: CI lint and test targets already enforce warnings as errors

The Makefile defines CLIPPY_FLAGS with -D warnings for the lint target and applies RUSTFLAGS="-D warnings" to the test target, so the CI pipeline already fails on warnings.

Cargo.toml (1)

9-11: LGTM on workspace resolver and centralised edition.

Pin resolver = "2" and centralise edition under [workspace.package]; this keeps member manifests tidy.

docs/roadmap.md (3)

48-49: LGTM on Oxford -ize usage in technical prose.

Standardize with -ize aligns with the en-GB-oxendict rule set used across the repo.


99-104: LGTM on API relocation notes.

Anchor SolveRequest/SolveResponse under wildside-core and keep fields explicit. This matches the workspace split.


133-137: LGTM on CLI flow description.

Describe deserialise/solve/emit flow succinctly; this will help acceptance testing later.

Comment thread .github/workflows/ci.yml Outdated
Comment thread Cargo.toml Outdated
Comment thread docs/roadmap.md Outdated
Comment thread wildside-cli/Cargo.toml Outdated
Comment thread wildside-cli/Cargo.toml Outdated
Comment thread wildside-cli/src/main.rs Outdated
Comment thread wildside-data/src/lib.rs Outdated
@leynos
Copy link
Copy Markdown
Owner Author

leynos commented Aug 17, 2025

@sourcery-ai review

@sourcery-ai
Copy link
Copy Markdown

sourcery-ai Bot commented Aug 17, 2025

Reviewer's Guide

This PR establishes a new Rust workspace by scaffolding three crates (core, data, CLI), configuring shared linting rules, updating CI workflows, and marking the initial project setup in the roadmap.

Class diagram for initial crate structure

classDiagram
    class WildsideCore {
        <<crate>>
        +lib.rs: "Core domain types for the Wildside engine"
    }
    class WildsideData {
        <<crate>>
        +lib.rs: "Data access and ingestion logic for the Wildside engine"
    }
    class WildsideCli {
        <<crate>>
        +main.rs: "Entrypoint for the command-line interface"
    }
    WildsideCore <|.. WorkspaceRoot
    WildsideData <|.. WorkspaceRoot
    WildsideCli <|.. WorkspaceRoot
    class WorkspaceRoot {
        <<workspace>>
        +Cargo.toml: workspace config, shared lints
    }
Loading

File-Level Changes

Change Details Files
Configure a multi-crate workspace with shared lint rules
  • Introduce a [workspace] section in Cargo.toml with members, resolver, and edition settings
  • Move edition to workspace scope and disable publishing on individual packages
  • Define workspace.lints.clippy for pedantic linting across all crates
Cargo.toml
Scaffold core, data, and CLI crates
  • Add wildside-core, wildside-data, and wildside-cli Cargo.toml manifests with workspace edition settings
  • Create stub lib.rs for core and data crates with module documentation and invariants
  • Add a minimal main.rs entrypoint for the CLI crate
wildside-core/Cargo.toml
wildside-core/src/lib.rs
wildside-data/Cargo.toml
wildside-data/src/lib.rs
wildside-cli/Cargo.toml
wildside-cli/src/main.rs
Update GitHub Actions CI to a streamlined Rust toolchain workflow
  • Restructure the CI job name and trigger to include pull_request and push on main
  • Use actions-rs/toolchain with a pinned nightly toolchain and rust-cache for caching
  • Consolidate steps to run formatting checks, linting, testing, markdownlint, and nixie
.github/workflows/ci.yml
Refresh the project roadmap documentation
  • Mark the initial workspace setup tasks as completed
  • Rename crate references in roadmap to match new crate names (wildside-core, data, CLI, scorer, solver)
  • Standardize American spelling (standardize, serialize, normalize) in checklist items
docs/roadmap.md

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

sourcery-ai[bot]

This comment was marked as resolved.

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.

Actionable comments posted: 3

🔭 Outside diff range comments (4)
docs/wildside-engine-design.md (2)

259-273: Clarify crate status and align language with workspace reality.

The sections introducing wildside-scorer, wildside-solver-vrp, and wildside-solver-ortools describe future crates. Mark them explicitly as “planned” to avoid implying they ship in this PR.

Apply this edit pattern within the listed bullet points:

-- `wildside-scorer`: Implements the `Scorer` trait.
+- (Planned) `wildside-scorer`: Implements the `Scorer` trait.

Repeat for:

  • wildside-solver-vrp
  • wildside-solver-ortools
  • wildside-cli subcommands that depend on the solver/scorer (if not yet present)

Also applies to: 274-286, 287-294, 295-305


342-355: Spell out artefact formats and stability guarantees.

State versioning and compatibility promises for pois.db, pois.rstar, and popularity.bin to aid future migrations and testing.

Append to the list:

  • “Embed a file-format version in each artefact header; bump on incompatible changes, provide a migrator in wildside-cli.”
docs/roadmap.md (2)

49-51: Use en‑GB Oxford spelling (-ize) per repository guidelines.

Standardise spelling across the document: prefer -ize/-ization forms and keep “LICENSE” as a file literal.

Apply these diffs:

-- [ ] Standardise on `geo::Coord` for all location data within the
+- [ ] Standardize on `geo::Coord` for all location data within the
-- [ ] ... and normalises the scores.
+- [ ] ... and normalizes the scores.
-- [ ] It will configure the `vrp-core` problem and objective function to
-  maximise the total collected score within the given time budget.
+- [ ] It will configure the `vrp-core` problem and objective function to
+  maximize the total collected score within the given time budget.
-- [ ] The command will deserialise the JSON into a `SolveRequest`, instantiate
+- [ ] The command will deserialize the JSON into a `SolveRequest`, instantiate
-## Phase 2: Scoring and Personalisation
+## Phase 2: Scoring and Personalization
-- [ ] Finalise Licensing and Versioning
+- [ ] Finalize Licensing and Versioning
-- [ ] Initialise a `CHANGELOG.md` file at the root, documenting the initial
+- [ ] Initialize a `CHANGELOG.md` file at the root, documenting the initial

Also applies to: 86-88, 121-123, 132-138, 162-167


157-161: Scope feature flags at the workspace root and document defaults.

Define features in the root Cargo.toml and wire-through in each crate to avoid drift.

Append:

 - **Implement Feature Flags**
 
 - [ ] In the root `Cargo.toml`, define features like `solver-vrp`,
   `solver-ortools`, and `store-sqlite`.
+  - [ ] Forward feature flags from member crates using `[features]` and
+    `dep:`-scoped features to ensure a single source of truth.
 - [ ] Use `#[cfg(feature = "...")]` attributes to conditionally compile the
   different solver and store implementations.
♻️ Duplicate comments (1)
.github/workflows/ci.yml (1)

13-17: Replace deprecated actions-rs/toolchain with a maintained action and keep pinning.

actionlint flags actions-rs/toolchain as too old for GitHub-hosted runners. Switch to a maintained action and pin to a full-length commit SHA to preserve supply-chain integrity.

Apply one of the following diffs (then pin the action to a commit SHA before merging):

Option A (community-supported):

-      - uses: actions-rs/toolchain@63eb9591781c46a70274cb3ebdf190fce92702e8 # v1
-        with:
-          toolchain: nightly-2025-06-26
-          components: rustfmt, clippy, llvm-tools-preview
-          override: true
+      - uses: actions-rust-lang/setup-rust-toolchain@v1
+        with:
+          toolchain: nightly-2025-06-26
+          components: rustfmt, clippy, llvm-tools-preview
+          override: true

Option B (minimal, commonly used):

-      - uses: actions-rs/toolchain@63eb9591781c46a70274cb3ebdf190fce92702e8 # v1
-        with:
-          toolchain: nightly-2025-06-26
-          components: rustfmt, clippy, llvm-tools-preview
-          override: true
+      - uses: dtolnay/rust-toolchain@master
+        with:
+          toolchain: nightly-2025-06-26
+          components: rustfmt, clippy, llvm-tools-preview

Pin either action to a full commit SHA (not a tag) for immutability.
Do not forget to update the pin periodically in Dependabot.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro

💡 Knowledge Base configuration:

  • Jira integration is disabled

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 390d2fe and b56fb65.

⛔ Files ignored due to path filters (1)
  • Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (4)
  • .github/workflows/ci.yml (1 hunks)
  • Cargo.toml (1 hunks)
  • docs/roadmap.md (9 hunks)
  • docs/wildside-engine-design.md (8 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
**/*.md

⚙️ CodeRabbit Configuration File

**/*.md: * Avoid 2nd person or 1st person pronouns ("I", "you", "we")

  • Use en-GB-oxendict (-ize / -our) spelling and grammar
  • Headings must not be wrapped.
  • Documents must start with a level 1 heading
  • Headings must correctly increase or decrease by no more than one level at a time
  • Use GitHub-flavoured Markdown style for footnotes and endnotes.
  • Numbered footnotes must be numbered by order of appearance in the document.

Files:

  • docs/wildside-engine-design.md
  • docs/roadmap.md
🪛 LanguageTool
docs/wildside-engine-design.md

[uncategorized] ~259-~259: Loose punctuation mark.
Context: ...rates when necessary. - wildside-core: This crate is the heart of the engine. ...

(UNLIKELY_OPENING_PUNCTUATION)


[uncategorized] ~274-~274: Loose punctuation mark.
Context: ... testing and fuzzing. - wildside-data: Contains the ETL logic and data adapter...

(UNLIKELY_OPENING_PUNCTUATION)


[uncategorized] ~282-~282: Loose punctuation mark.
Context: ...rstar index). - wildside-scorer: Implements the Scorer trait. - Con...

(UNLIKELY_OPENING_PUNCTUATION)


[uncategorized] ~287-~287: Loose punctuation mark.
Context: ...user relevance. - wildside-solver-vrp: The default, native Rust implementation...

(UNLIKELY_OPENING_PUNCTUATION)


[uncategorized] ~290-~290: Loose punctuation mark.
Context: ...elibrary. -wildside-solver-ortools: An optional implementation of the Solv...

(UNLIKELY_OPENING_PUNCTUATION)


[uncategorized] ~295-~295: Loose punctuation mark.
Context: ...ge the C++ dependency. - wildside-cli: A small command-line application for op...

(UNLIKELY_OPENING_PUNCTUATION)


[uncategorized] ~297-~297: Loose punctuation mark.
Context: ...ion for operational tasks. - ingest: Runs the full ETL pipeline from `wildsi...

(UNLIKELY_OPENING_PUNCTUATION)

🔇 Additional comments (4)
.github/workflows/ci.yml (1)

12-12: Keep actions pinned by commit SHA.

Maintain pinning for third-party actions to reduce supply-chain risk. The current pins for actions/checkout and Swatinem/rust-cache are correct.

Also applies to: 18-18

Cargo.toml (3)

1-8: LGTM: virtual workspace with resolver v2 and workspace edition.

The workspace layout, explicit resolver v2, and centralised edition are correct and modern.

Also applies to: 9-10


12-46: Validate Clippy lint identifiers against the pinned nightly and gate overly strict lints

  • No crate-local [lints] sections detected; workspace.lints.clippy applies to all members.
  • Run
    cargo clippy --all-targets --all-features
    on the pinned nightly to catch any unknown or renamed lints.
  • Add a crate-local override in wildside-cli/Cargo.toml to downgrade the strictest rules:
--- a/wildside-cli/Cargo.toml
+++ b/wildside-cli/Cargo.toml
 [package]
 # ...

+[lints.clippy]
+float_arithmetic = "warn"
+print_stdout       = "allow"
+print_stderr       = "allow"

9-10: Note member crates opt in to workspace edition

All member Cargo.toml files already include edition.workspace = true:

  • wildside-cli/Cargo.toml
  • wildside-core/Cargo.toml
  • wildside-data/Cargo.toml

No changes required.

Comment thread .github/workflows/ci.yml
Comment thread docs/roadmap.md Outdated
Comment thread docs/wildside-engine-design.md Outdated
Repository owner deleted a comment from coderabbitai Bot Aug 17, 2025
@leynos leynos merged commit e383d7e into main Aug 18, 2025
1 of 2 checks passed
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