Skip to content

Implement velocity rules#23

Merged
leynos merged 6 commits intomainfrom
codex/add-ddlog-relations-for-velocity-and-force
Jun 15, 2025
Merged

Implement velocity rules#23
leynos merged 6 commits intomainfrom
codex/add-ddlog-relations-for-velocity-and-force

Conversation

@leynos
Copy link
Copy Markdown
Owner

@leynos leynos commented Jun 14, 2025

Summary

  • add velocity and force constants to lille.dl
  • implement dynamic acceleration/velocity rules
  • check new relations in ddlog tests

Testing

  • cargo clippy --all-targets --all-features -- -D warnings
  • cargo test --all-targets

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

Summary by Sourcery

Add velocity and force constants to the Datalog schema, implement dynamic acceleration and velocity rules, and update tests to verify the new relations.

New Features:

  • Introduce Velocity and Force constants in lille.dl
  • Implement dynamic acceleration and velocity rules (NewVelocity, FrictionalDeceleration)

Tests:

  • Add assertions in ddlog tests to check for Velocity, Force, NewVelocity, and FrictionalDeceleration tokens

Summary by CodeRabbit

  • New Features

    • Introduced physics-based entity movement with friction, gravity, and terminal velocity.
    • Entities now respond to applied forces and have updated velocity outputs.
    • Added vector utility functions for magnitude and normalization.
  • Tests

    • Enhanced tests to verify the presence of new physics-related rules and relations using regex-based parsing.
  • Chores

    • Added development dependencies for regex and once_cell to support improved test parsing.

@sourcery-ai
Copy link
Copy Markdown
Contributor

sourcery-ai Bot commented Jun 14, 2025

Reviewer's Guide

This PR enriches the Lille Datalog model with velocity and force constants and implements dynamic acceleration/velocity rules, alongside extending the ddlog tests to verify the new relations.

File-Level Changes

Change Details Files
Introduce dynamic velocity and force rules into the Datalog program
  • Define VELOCITY and FORCE constants
  • Implement NewVelocity rule to update entity velocities
  • Add FrictionalDeceleration relation for velocity decay
  • Embed acceleration logic combining force and mass
src/lille.dl
Extend ddlog tests to cover new relations
  • Add loop asserting presence of Velocity, Force, NewVelocity, FrictionalDeceleration tokens
  • Use clear error messages when expected relations are missing
tests/ddlog.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

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Jun 14, 2025

Caution

Review failed

The pull request is closed.

"""

Walkthrough

Physics modelling capabilities were added to the logic code, introducing new functions, constants, and rules for handling entity dynamics such as velocity, force, acceleration, gravity, friction, and terminal velocity. The test suite was updated to assert the existence of these new relations and rules within the source. Additionally, the regex and once_cell crates were added as development dependencies to support improved test parsing. A new Rust module provides vector magnitude and normalization functions, which are re-exported for external use.

Changes

File(s) Change Summary
src/lille.dl Added extern vector utility functions, physics constants, input/output relations for velocity and force, and rules modelling acceleration, gravity, friction, and velocity clamping.
src/vector_math.rs, src/lib.rs Added new module with vector magnitude and normalization functions; re-exported these functions at crate root.
tests/ddlog.rs Refactored tests to use regex-based parsing helpers for relations and constants; added assertions for new physics-related relations and rules; introduced helper functions using once_cell and regex.
Cargo.toml Added regex = "1" and once_cell = "1" as development dependencies under [dev-dependencies].

Possibly related PRs

  • Implement FloorHeightAt rules #19: Introduced entity state relations like IsUnsupported and IsStanding that underpin the new physics model, forming a direct foundation for this PR’s dynamics extensions.

Poem

In the meadow of code, a force takes flight,
Gravity tugs, friction slows the night.
Velocity streams, new rules in play,
Rabbits hop physics in a logical way.
With every test, we leap and cheer—
The laws of motion now appear!
🐇✨
"""


📜 Recent review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between dd3266f and 7ddc923.

📒 Files selected for processing (1)
  • tests/ddlog.rs (2 hunks)
✨ Finishing Touches
  • 📝 Generate Docstrings

🪧 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.
    • Explain this complex logic.
    • 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. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • 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 src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

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

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

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

Documentation and Community

  • 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
Contributor

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

Hey @leynos - I've reviewed your changes and they look great!


Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

@leynos
Copy link
Copy Markdown
Owner Author

leynos commented Jun 14, 2025

@coderabbitai review

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Jun 14, 2025

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

coderabbitai Bot added a commit that referenced this pull request Jun 14, 2025
Docstrings generation was requested by @leynos.

* #23 (comment)

The following files were modified:

* `tests/ddlog.rs`
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Jun 14, 2025

Note

Generated docstrings for this pull request at #24

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

🧹 Nitpick comments (2)
src/lille.dl (1)

125-129: Time-step factor omitted

UnclampedNewVelocity adds acceleration directly to velocity, implicitly assuming Δt = 1 tick.
If the engine later supports variable-length steps, storing Δt explicitly will avoid future rewrites.

tests/ddlog.rs (1)

94-102: Token-based check is brittle

Splitting on non-alphanumerics cannot detect misspellings such as NewVelocty.
For stronger guarantees, parse the .dl once and match relation IDs, or generate the list programmatically from the DDlog compiler output.

📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between 8796127 and 3a99ee3.

📒 Files selected for processing (2)
  • src/lille.dl (3 hunks)
  • tests/ddlog.rs (1 hunks)
🔇 Additional comments (2)
src/lille.dl (2)

113-124: Aggregator shape may violate DDlog semantics

The custom agg(e) sum (…) from (…) clause combines three optional relations.
When all optional branches are absent, the aggregation still emits a tuple with uninitialised variables, which DDlog rejects.

Consider emitting defaults earlier or introducing explicit ? optional aggregates to avoid runtime errors.
Example pattern:

AppliedAcceleration?(…).
GravitationalAcceleration?(…).
FrictionalDeceleration?(…).
NetAcceleration(e, sum(ax), …) :- …

10-12: Ensure externs are implemented and linked

vec_mag and vec_normalize must be supplied by the Rust side or a C shim.
Missing symbols will break compilation.

Comment thread src/lille.dl
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

🧹 Nitpick comments (2)
tests/ddlog.rs (1)

8-19: Compile the regexes only once – avoid repeated recompilation in every test run

parsed_relations() and parsed_constants() rebuild their Regex objects on every call.
Even though this is “just a test”, the code is executed many times and the compilation step is by far the most expensive part of regex.
Store the compiled instances in static variables instead (e.g. once_cell::sync::Lazy or lazy_static!) and you get an immediate, zero-cost speed-up without changing the public interface.

-use regex::Regex;
+use once_cell::sync::Lazy;
+use regex::Regex;
 ...
-fn parsed_relations() -> HashSet<String> {
-    let re = Regex::new(r"(?m)^\s*(?:input\s+(?:relation|stream)|output\s+relation|relation)\s+([A-Za-z_][A-Za-z0-9_]*)").unwrap();
-    re.captures_iter(DL_SRC).map(|c| c[1].to_string()).collect()
-}
+static REL_RE: Lazy<Regex> = Lazy::new(|| {
+    Regex::new(r"(?m)^\s*(?:input\s+(?:relation|stream)|output\s+relation|relation)\s+([A-Za-z_][A-Za-z0-9_]*)")
+        .unwrap()
+});
+
+fn parsed_relations() -> HashSet<String> {
+    REL_RE.captures_iter(DL_SRC).map(|c| c[1].to_string()).collect()
+}
 
-fn parsed_constants() -> HashSet<String> {
-    let re = Regex::new(r"(?m)^\s*const\s+([A-Za-z_][A-Za-z0-9_]*)").unwrap();
-    re.captures_iter(DL_SRC).map(|c| c[1].to_string()).collect()
-}
+static CONST_RE: Lazy<Regex> = Lazy::new(|| {
+    Regex::new(r"(?m)^\s*const\s+([A-Za-z_][A-Za-z0-9_]*)").unwrap()
+});
+
+fn parsed_constants() -> HashSet<String> {
+    CONST_RE.captures_iter(DL_SRC).map(|c| c[1].to_string()).collect()
+}

A tiny change but it makes the test suite leaner and more future-proof.
(You’ll need to add once_cell = "1" under [dev-dependencies].)

src/lille.dl (1)

131-135: Only downward speed is capped – upward launches remain unbounded

NewVelocity clamps raw_nvz to -TERMINAL_VELOCITY, but positive vertical speeds are left untouched.
If entities can receive large upward impulses (e.g. explosions or scripted jumps), they may reach arbitrarily high values.

Consider symmetric clamping:

var final_nvz = clamp(raw_nvz, -TERMINAL_VELOCITY, TERMINAL_VELOCITY)

(or separate branch for upward case).
Please verify whether unlimited upward velocity is intentional.

📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between 3a99ee3 and 95d889d.

📒 Files selected for processing (3)
  • Cargo.toml (1 hunks)
  • src/lille.dl (3 hunks)
  • tests/ddlog.rs (2 hunks)
✅ Files skipped from review due to trivial changes (1)
  • Cargo.toml
🔇 Additional comments (1)
src/lille.dl (1)

94-96: Gravity sign corrected – looks good

The earlier negation has been removed and GRAVITY_PULL (already negative) is now used directly.
This restores the intended downward acceleration.

Comment thread src/lille.dl 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: 0

🧹 Nitpick comments (6)
Cargo.toml (1)

24-25: Consider pinning versions more tightly or documenting your upgrade policy

Using bare "1" allows any future 1.x release, which is semver-compatible but can still introduce breaking behaviour for macros/const-fns that tests rely on.
If deterministic CI builds are important, either:

regex = "=1.10.4"   # exact
# or
regex = "1.10"      # minor-range

…and likewise for once_cell.

Not urgent, just be explicit about the intended policy.

tests/ddlog.rs (3)

3-6: Import ordering is fine, but HashSet can come from std::collections without a glob

The direct use std::collections::HashSet; is correct; if other collection types are added later, consider grouping:

use std::collections::{HashSet, HashMap};

Pure style note.


9-15: REL_RE also matches commented-out declarations

Because the pattern allows leading whitespace only, a line like
// input relation Velocity … will still satisfy the regex after the slashes are trimmed.

If you want to ignore comments, add a negative look-ahead:

- r"(?m)^\s*(?:input\s+(?:relation|stream)|output\s+relation|relation)\s+([A-Za-z_][A-Za-z0-9_]*)"
+ r"(?m)^\s*(?!//)(?:input\s+(?:relation|stream)|output\s+relation|relation)\s+([A-Za-z_][A-Za-z0-9_]*)"

Same applies to CONST_RE below.


23-31: Duplicate logic with CONST_RE – small helper could DRY this

Both helper fns share the “compile regex → capture names → collect HashSet” pattern.
A generic fn capture_set(re: &Regex) -> HashSet<String> would avoid duplication and make future token kinds easier to add.

Not critical, just a maintainability win.

src/lille.dl (2)

17-22: Constants look reasonable – consider documenting units

E.g. is TERMINAL_VELOCITY metres / tick? Ground friction is dimensionless?
A brief comment inline prevents confusion later.


97-113: Friction rules duplicated – can be unified

The two FrictionalDeceleration clauses differ only by the coefficient (GROUND_FRICTION vs AIR_FRICTION).
You can factor this to avoid copy-paste and make future changes simpler:

-relation FrictionalDeceleration(e: EntityID, ax: GCoord, ay: GCoord, az: GCoord)
-FrictionalDeceleration(e, fdx, fdy, 0.0) :-
-    IsStanding(e),
+relation FrictionalDeceleration(e: EntityID, ax: GCoord, ay: GCoord, az: GCoord)
+FrictionalDeceleration(e, fdx, fdy, 0.0) :-
+    (IsStanding(e), var coeff = GROUND_FRICTION;
+     IsUnsupported(e), var coeff = AIR_FRICTION),
     Velocity(e, vx, vy, _),
     var h_mag = vec_mag(vx, vy, 0.0), h_mag > 0.0,
     var (nx, ny, _) = vec_normalize(vx, vy, 0.0),
-    var decel_mag = min(h_mag, GROUND_FRICTION),
+    var decel_mag = min(h_mag, coeff),
     fdx = -nx * decel_mag, fdy = -ny * decel_mag.

(Datalog pseudo-syntax; adjust as needed.)

Reduces duplication and removes the risk of the two rules drifting apart.

📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between 95d889d and b7e67a3.

📒 Files selected for processing (3)
  • Cargo.toml (1 hunks)
  • src/lille.dl (3 hunks)
  • tests/ddlog.rs (2 hunks)
🔇 Additional comments (4)
src/lille.dl (4)

10-12: Confirm host implementation of vec_mag / vec_normalize handles zero-length vectors

vec_normalize(0,0,0) is never called in current rules, but future changes could.
Ensure the extern functions either return (0,0,0) or raise a controlled error to avoid NaNs propagating through the program.


95-96: Gravity sign issue fixed – good catch

Switching from -GRAVITY_PULL to GRAVITY_PULL resolves the earlier upward acceleration bug.


114-125: Cartesian-product bug resolved with NetAccelRow – nice refactor

Flattening to NetAccelRow then aggregating eliminates the duplicate-force issue highlighted earlier.


127-141: Vertical velocity is forcibly zeroed for standing entities – confirm gameplay intent

Setting vz to 0.0 every tick prevents small upward hops when stepping onto blocks or minor slopes.
If the design expects a short aerial phase when walking off edges, this is fine; otherwise consider preserving vertical component and clamping to 0 only when vz < 0 (downward) and the entity is on the ground.

Just a heads-up – no change requested.

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: 2

🔭 Outside diff range comments (1)
src/lille.dl (1)

140-142: ⚠️ Potential issue

NewPosition still mirrors Position – simulation is frozen

The physics step never integrates velocity into position; entities will not move even though velocity is updated.

-NewPosition(e, x, y, z) :- Position(e, x, y, z).
+NewPosition(e, x + nvx * DELTA_TIME,
+               y + nvy * DELTA_TIME,
+               z + nvz * DELTA_TIME) :-
+    Position(e, x, y, z),
+    NewVelocity(e, nvx, nvy, nvz).
🧹 Nitpick comments (1)
src/lille.dl (1)

102-111: Friction zero-snaps slow objects

decel_mag = min(h_mag, coeff) makes friction equal to the whole speed whenever h_mag < coeff, bringing velocity to exactly zero in one tick.
This produces noticeable “stick-slip” behaviour when objects crawl.

Consider a proportional model:

-var decel_mag = min(h_mag, coeff),
+var decel_mag = coeff * DELTA_TIME,

and clamp it with min(h_mag, decel_mag) afterwards to avoid overshoot.

📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between b7e67a3 and edbce3a.

📒 Files selected for processing (2)
  • src/lille.dl (3 hunks)
  • tests/ddlog.rs (2 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • tests/ddlog.rs
🔇 Additional comments (1)
src/lille.dl (1)

130-138: Vertical velocity is always nuked for standing entities

When IsStanding(e) holds, vertical forces (e.g. jump impulse) are ignored because nvz is hard-coded to 0.0.
If future gameplay should allow jumping or elevation while on the ground, this rule will block it.

Verify that this is deliberate; otherwise gate the zeroing behind vz < 0 (prevent sinking) rather than unconditional.

Comment thread src/lille.dl
Comment thread src/lille.dl
Copy link
Copy Markdown

@codescene-delta-analysis codescene-delta-analysis Bot left a comment

Choose a reason for hiding this comment

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

Gates Passed
6 Quality Gates Passed

See analysis details in CodeScene

Absence of Expected Change Pattern

  • lille/src/lib.rs is usually changed with: lille/src/main.rs

Quality Gate Profile: Pay Down Tech Debt
Want more control? Customize Code Health rules or catch issues early with our IDE extension and CLI tool.

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: 0

🧹 Nitpick comments (2)
src/vector_math.rs (2)

3-6: Function name vs documentation spelling mismatch.

Doc-comment uses American spelling “Normalizes” (line 8), whereas the rest of the codebase and this PR description follow British English. Consider switching to “Normalises” for consistency.


8-17: Prefer try_normalize to remove duplicate length check and handle NaNs.

Vec3::normalize() is only safe for non-zero, finite vectors. glam already offers try_normalize() which:

  1. Avoids recomputing length squared.
  2. Safely returns None for zero or non-finite inputs.

This shortens the code and eliminates a branch.

 pub fn vec_normalize(x: f32, y: f32, z: f32) -> (f32, f32, f32) {
     let v = Vec3::new(x, y, z);
-    if v.length_squared() > 0.0 {
-        let n = v.normalize();
-        (n.x, n.y, n.z)
-    } else {
-        (0.0, 0.0, 0.0)
-    }
+    if let Some(n) = v.try_normalize() {
+        (n.x, n.y, n.z)
+    } else {
+        (0.0, 0.0, 0.0)
+    }
 }
📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between edbce3a and dd3266f.

📒 Files selected for processing (2)
  • src/lib.rs (2 hunks)
  • src/vector_math.rs (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • src/lib.rs
🔇 Additional comments (1)
src/vector_math.rs (1)

1-1: Check glam is declared as a normal (non-dev) dependency.

vector_math.rs is compiled in the main crate, so glam must live under [dependencies] in Cargo.toml, not [dev-dependencies]. Please verify to avoid build failures when the crate is consumed as a library.

#24)

Docstrings generation was requested by @leynos.

* #23 (comment)

The following files were modified:

* `tests/ddlog.rs`

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
@leynos leynos merged commit 672b447 into main Jun 15, 2025
1 of 2 checks passed
Copy link
Copy Markdown

@codescene-delta-analysis codescene-delta-analysis Bot left a comment

Choose a reason for hiding this comment

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

Gates Passed
6 Quality Gates Passed

See analysis details in CodeScene

Absence of Expected Change Pattern

  • lille/src/lib.rs is usually changed with: lille/src/main.rs

Quality Gate Profile: Pay Down Tech Debt
Want more control? Customize Code Health rules or catch issues early with our IDE extension and CLI tool.

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