Skip to content

chore(release): release v0.5.4#131

Merged
acgetchell merged 5 commits intomainfrom
release/v0.5.4
Nov 25, 2025
Merged

chore(release): release v0.5.4#131
acgetchell merged 5 commits intomainfrom
release/v0.5.4

Conversation

@acgetchell
Copy link
Owner

  • Bump version to v0.5.4
  • Update changelog with latest changes
  • Update documentation for release
  • Add performance results for v0.5.4

- Bump version to v0.5.4
- Update changelog with latest changes
- Update documentation for release
- Add performance results for v0.5.4
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Nov 25, 2025

Walkthrough

Bumps package and tooling versions, lowers Python requirement to 3.11, updates CI/coverage and Just workflows (including per-test 5‑minute timeout and new coverage-ci), updates benchmark results, normalizes setext headings in changelog tooling, enables Slurm module loads, adds spell entries, and adjusts tests/docs/workflows.

Changes

Cohort / File(s) Summary
Version bump
Cargo.toml
Package version changed from 0.5.30.5.4. No dependency/features/API changes.
Just/CICD workflows
justfile, CONTRIBUTING.md, WARP.md, README.md, docs/...
Reworked Just command suite: renamed/added targets (e.g., ci, ci-baseline, commit-check, commit-check-slow, test-integration, test-all, coverage-ci, bench-*, build, build-release); replaced --timeout 600 with per‑test -t 300 and documented 5‑minute per-test timeout; help/workflow text updated.
Coverage / CI tooling
justfile, CONTRIBUTING.md, tests/README.md
Added CI-friendly XML coverage recipe (coverage-ci), adjusted _coverage_base_args (removed some slow tests), documented CI per-test timeout and slow-test gating.
Benchmarks & performance
benches/PERFORMANCE_RESULTS.md, docs/..., docs/code_organization.md
Updated benchmark metadata, numerical results and recommendations (insphere favored), added/renamed bench command references and perf tooling docs.
Changelog tooling
scripts/changelog_utils.py
Added ChangelogUtils._convert_setext_to_atx(body_lines: list[str]) -> list[str] and invoke it at start of _format_entry_body; lowered module docstring Python requirement to 3.11.
Scripts / Slurm
scripts/slurm_storage_comparison.sh
Enabled module loads: module load rust/1.91.0 and module load python/3.11 (were commented).
Python packaging & tooling
pyproject.toml, .python-version, scripts/README.md
Lowered requires-python >=3.13>=3.11; added Python 3.11/3.12 classifiers; set Ruff target-version to py311; .python-version3.11; docs updated.
Tests
tests/test_convex_hull_error_paths.rs, tests/README.md
Test test_default_hull now treats empty/default hull as valid (assertion/message updated); documented a slow (~3 min) gated test.
Spell list
cspell.json
Added words: clonable, setext, wordlist.
Misc docs & scripts
scripts/README.md, WARP.md, docs/..., justfile
Many documentation/workflow references updated to reflect new command names and examples; added help-workflows guidance and just --list notes.

Sequence Diagram(s)

sequenceDiagram
  participant User as Author / Tooling
  participant Changelog as scripts/changelog_utils.py
  participant Formatter as _format_entry_body

  Note over User,Changelog: Running changelog formatting
  User->>Changelog: provide body_lines (may include setext underlines)
  Changelog->>Changelog: _convert_setext_to_atx(body_lines)
  Changelog-->>Formatter: normalized body_lines (ATX headings)
  Formatter->>Formatter: cron protection, header downgrades, wrapping
  Formatter-->>User: formatted changelog entry
  rect rgba(60,160,120,0.08)
    Note right of Changelog: New normalization step runs before existing formatting
  end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

  • Attention areas:
    • scripts/changelog_utils.py: verify correct identification/skipping of list-like lines and code blocks and safe interaction with downstream wrapping/downgrade logic.
    • justfile / CONTRIBUTING.md / WARP.md: ensure updated targets and timeout flags (-t 300) have the intended CI semantics and that composite targets (e.g., test-all, commit-check-slow) are wired correctly.
    • benches/PERFORMANCE_RESULTS.md: confirm benchmark numbers and narrative remain consistent with measurements.
    • tests/test_convex_hull_error_paths.rs: confirm behavior change (empty hull treated valid) matches intended algorithmic semantics.

Possibly related PRs

  • Release/v0.4.3 #75 — Changes to scripts/changelog_utils.py; likely overlap with helper additions and formatting logic.
  • Update/utilities and roadmap #100 — Related refactors to _format_entry_body and changelog helpers; high likelihood of semantic overlap.
  • Test/improve coverage #119 — Touches the same convex hull tests (tests/test_convex_hull_error_paths.rs); directly related to the test assertion change.

Poem

🐇 I turned underlines into tidy crowns,
Bumped the version and smoothed the bounds,
Python stepped down to three-eleven's tune,
Coverage now hums in CI — five minutes soon,
A little rabbit hops and drums a happy tune.

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly indicates this is a release version bump to v0.5.4, which aligns with the version changes in Cargo.toml and multiple documentation updates throughout the changeset.
Description check ✅ Passed The description accurately summarizes the main release activities: version bump, changelog updates, documentation updates, and performance results, all of which are reflected in the changeset.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch release/v0.5.4

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@coderabbitai coderabbitai bot added documentation Improvements or additions to documentation rust Pull requests that update rust code labels Nov 25, 2025
Copy link
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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
CONTRIBUTING.md (1)

153-193: MSRV text still mentions Rust 1.90.0 while other docs use 1.91.0

Project configuration lists MSRV as Rust 1.91.0, but the automatic toolchain section still says “Install the correct Rust version (1.90.0)”. Updating that parenthetical to 1.91.0 would avoid confusion for contributors.

📜 Review details

Configuration used: Path: .coderabbit.yml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 37ccaec and fe0b1d6.

⛔ Files ignored due to path filters (1)
  • Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (5)
  • CONTRIBUTING.md (2 hunks)
  • Cargo.toml (1 hunks)
  • benches/PERFORMANCE_RESULTS.md (3 hunks)
  • justfile (2 hunks)
  • tests/README.md (2 hunks)
🧰 Additional context used
🧠 Learnings (6)
📚 Learning: 2025-09-04T20:03:49.896Z
Learnt from: acgetchell
Repo: acgetchell/delaunay PR: 65
File: WARP.md:249-254
Timestamp: 2025-09-04T20:03:49.896Z
Learning: The delaunay repository contains all the specialized integration tests documented in WARP.md: circumsphere_debug_tools.rs, robust_predicates_comparison.rs, convex_hull_bowyer_watson_integration.rs, and allocation_api.rs, plus additional test files like robust_predicates_showcase.rs and coordinate_conversion_errors.rs.

Applied to files:

  • tests/README.md
  • Cargo.toml
  • benches/PERFORMANCE_RESULTS.md
📚 Learning: 2025-08-30T00:51:50.849Z
Learnt from: acgetchell
Repo: acgetchell/delaunay PR: 55
File: CONTRIBUTING.md:481-512
Timestamp: 2025-08-30T00:51:50.849Z
Learning: The DOI 10.5281/zenodo.16931097 in the delaunay project documentation is valid and correctly resolves to acgetchell's Rust delaunay triangulation library on Zenodo.

Applied to files:

  • Cargo.toml
📚 Learning: 2025-08-30T02:40:22.032Z
Learnt from: acgetchell
Repo: acgetchell/delaunay PR: 55
File: CONTRIBUTING.md:152-167
Timestamp: 2025-08-30T02:40:22.032Z
Learning: The delaunay repository has stale documentation in WARP.md that references non-existent trait files (finitecheck.rs, hashcoordinate.rs, orderedeq.rs) in src/geometry/traits/, while the actual directory only contains coordinate.rs. The CONTRIBUTING.md documentation is accurate and reflects the current state.

Applied to files:

  • Cargo.toml
📚 Learning: 2025-08-28T14:12:46.198Z
Learnt from: acgetchell
Repo: acgetchell/delaunay PR: 55
File: CITATION.cff:5-7
Timestamp: 2025-08-28T14:12:46.198Z
Learning: The DOI 10.5281/zenodo.16931097 in the CITATION.cff file belongs to the Rust delaunay triangulation library by acgetchell, not to any Julia DelaunayTriangulation.jl package.

Applied to files:

  • Cargo.toml
📚 Learning: 2025-09-02T03:03:59.550Z
Learnt from: acgetchell
Repo: acgetchell/delaunay PR: 58
File: scripts/README.md:9-14
Timestamp: 2025-09-02T03:03:59.550Z
Learning: The delaunay project requires Python 3.13+ for performance reasons, as specified by the project maintainer acgetchell, even though the code could technically run on earlier Python versions.

Applied to files:

  • Cargo.toml
📚 Learning: 2025-08-30T02:40:22.032Z
Learnt from: acgetchell
Repo: acgetchell/delaunay PR: 55
File: CONTRIBUTING.md:152-167
Timestamp: 2025-08-30T02:40:22.032Z
Learning: The user corrected that finitecheck.rs, hashcoordinate.rs, and orderedeq.rs trait files do not exist in the current version of the delaunay repository under src/geometry/traits/. The current structure only contains coordinate.rs, which matches the documented structure in CONTRIBUTING.md.

Applied to files:

  • Cargo.toml
🪛 LanguageTool
CONTRIBUTING.md

[uncategorized] ~490-~490: The official name of this software platform is spelled with a capital “H”.
Context: ... project configurations - Coverage (.github/workflows/codecov.yml): Test coverage ...

(GITHUB)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (7)
  • GitHub Check: Codacy Static Code Analysis
  • GitHub Check: performance-regression
  • GitHub Check: build (windows-latest)
  • GitHub Check: Codacy Security Scan
  • GitHub Check: Code Coverage
  • GitHub Check: build (ubuntu-latest)
  • GitHub Check: build (macos-latest)
🔇 Additional comments (6)
Cargo.toml (1)

1-5: Version bump is consistent with release metadata

version = "0.5.4" aligns with the release PR and updated performance documentation; no issues here.

tests/README.md (2)

618-623: Helpful clarification on expensive regression test

The note about test_cavity_boundary_error being slow and gated behind EXPENSIVE_TESTS=1 gives useful expectations for local and CI runs; no changes needed.


770-777: CI coverage timeout note matches tooling configuration

Mentioning the 5-minute per-test timeout for coverage in CI is consistent with the just coverage-ci recipe and the tarpaulin timeout setting; this keeps expectations aligned between docs and automation.

CONTRIBUTING.md (2)

360-367: Coverage command descriptions align with Justfile behavior

The updated descriptions for just coverage and just coverage-ci (HTML vs XML, 5‑minute per-test timeout) correctly reflect how the recipes are configured; looks good.


485-492: Coverage workflow description is consistent with the new timeout model

Documenting .github/workflows/codecov.yml as having a 5-minute per-test timeout matches the coverage recipes and tests README; this keeps CI behavior clearly communicated.

justfile (1)

129-152: Tarpaulin timeout configuration verified and correct

The -t 300 flag correctly sets a 300-second (5-minute) inactivity timeout per test. This aligns with the comment explaining that test_cavity_boundary_error can take ~3 minutes locally and was previously hitting the default 60-second timeout. The configuration is accurate.

…URM script

Fixes markdown linting errors (MD003, MD025, MD001) in auto-generated
CHANGELOG.md caused by setext-style headings from commit messages.

Changelog fixes:
- Add _convert_setext_to_atx() to detect and convert setext headings
  (text underlined with === or ---) to ATX style (####)
- Apply conversion in _format_entry_body() before processing
- Add "setext", "clonable", "wordlist" to cspell dictionary
- Regenerate CHANGELOG.md with fixes applied

All headings in commit message bodies now consistently use #### to:
1. Avoid conflicts with changelog structure (## for versions, ### for sections)
2. Maintain proper heading hierarchy
3. Satisfy markdownlint MD001 (no heading level jumps)

SLURM script updates:
- Enable Rust 1.91.0 and Python 3.11 module loads for cluster execution
- Update from commented examples to active module loads matching MSRV
Copy link
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

📜 Review details

Configuration used: Path: .coderabbit.yml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between fe0b1d6 and 8d3039e.

📒 Files selected for processing (3)
  • cspell.json (3 hunks)
  • scripts/changelog_utils.py (2 hunks)
  • scripts/slurm_storage_comparison.sh (1 hunks)
✅ Files skipped from review due to trivial changes (1)
  • cspell.json
🧰 Additional context used
📓 Path-based instructions (1)
scripts/*.py

⚙️ CodeRabbit configuration file

scripts/*.py: These are Python utility scripts for changelog and commit processing.
Focus on code quality, maintainability, and adherence to Python best practices.
The scripts use ruff for comprehensive linting and formatting (pylint has been retired).

Files:

  • scripts/changelog_utils.py
🧠 Learnings (3)
📚 Learning: 2025-09-02T02:40:54.439Z
Learnt from: acgetchell
Repo: acgetchell/delaunay PR: 58
File: scripts/tests/test_subprocess_utils.py:92-101
Timestamp: 2025-09-02T02:40:54.439Z
Learning: In Rust projects, cargo is expected to be available in development and CI environments, so conditional skipping of cargo-dependent tests is typically unnecessary.

Applied to files:

  • scripts/slurm_storage_comparison.sh
📚 Learning: 2025-08-28T03:54:34.371Z
Learnt from: acgetchell
Repo: acgetchell/delaunay PR: 54
File: scripts/generate_changelog.sh:417-438
Timestamp: 2025-08-28T03:54:34.371Z
Learning: The generate_changelog.sh script uses a deliberate design pattern where the auto-changelog template uses simple generic headers (### Changes, ### Fixed Issues) and the enhancer function transforms these into Keep a Changelog format sections (### Added, ### Changed, ### Fixed, etc.). This separation keeps the template simple while ensuring standardized output format.

Applied to files:

  • scripts/changelog_utils.py
📚 Learning: 2025-08-28T03:49:30.582Z
Learnt from: acgetchell
Repo: acgetchell/delaunay PR: 54
File: scripts/generate_changelog.sh:416-435
Timestamp: 2025-08-28T03:49:30.582Z
Learning: The generate_changelog.sh script processes template headers from auto-changelog (### Changes, ### Fixed Issues) and transforms them into Keep a Changelog format sections (### Added, ### Changed, ### Fixed, etc.). When analyzing changelog generation scripts, check both the template and the final output to understand the transformation pipeline.

Applied to files:

  • scripts/changelog_utils.py
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (7)
  • GitHub Check: performance-regression
  • GitHub Check: Codacy Static Code Analysis
  • GitHub Check: Code Coverage
  • GitHub Check: Codacy Security Scan
  • GitHub Check: build (ubuntu-latest)
  • GitHub Check: build (macos-latest)
  • GitHub Check: build (windows-latest)
🔇 Additional comments (3)
scripts/slurm_storage_comparison.sh (1)

25-25: Excellent error handling and defensive scripting practices.

The script includes good safeguards: strict mode (set -euo pipefail), pre-flight checks for required tools (cargo, uv), timeout handling for long-running benchmarks, and proper exit codes. The module loading changes integrate cleanly with the existing error-handling flow. Based on learnings, uncommenting module loads is appropriate for this environment since cargo availability is expected.

Also applies to: 52-61, 105-115, 135-145

scripts/changelog_utils.py (2)

637-681: LGTM! Well-designed setext-to-ATX conversion.

The implementation correctly handles setext-style markdown headings with solid edge-case handling:

  • Properly detects underline patterns (^=+$ and ^-+$)
  • Prevents false positives by checking not re.match(r"^-\s", current_line) to avoid treating list items as headings
  • Converts both setext levels to #### to align with changelog structure (## for versions, ### for sections)
  • Efficient O(n) algorithm with clear logic

The docstring clearly explains the rationale and the integration with the existing header downgrading logic is clean.


726-727: LGTM! Clean integration into processing pipeline.

The setext-to-ATX conversion is correctly placed at the start of the entry body formatting, ensuring headings are normalized before subsequent processing steps (cron expression protection and header downgrading). This follows a clear transformation pipeline pattern and maintains good separation of concerns.

Reduces Python version requirement from 3.13 to 3.11, making the project
more accessible while maintaining all modern features.

Python version changes:
- Update .python-version from 3.13 to 3.11
- Update pyproject.toml requires-python to >=3.11
- Add Python 3.11 and 3.12 classifiers
- Update ruff target-version to py311
- Update all documentation references from 3.13+ to 3.11+

Features used only require Python 3.11+:
- PEP 585 built-in generics (list[str], dict[str, Any]) - 3.9+
- PEP 604 union types (X | None) - 3.10+
- datetime.UTC - 3.11+

Documentation corrections:
- CONTRIBUTING.md: Fix MSRV version 1.90.0 → 1.91.0
- benches/PERFORMANCE_RESULTS.md: Fix misleading "consistently best"
  performance statement to reflect actual test results
- WARP.md: Add GitHub CLI non-interactive usage requirements

Coverage test fixes:
- Remove storage_backend_compatibility from coverage (all tests ignored)
- Fixes codecov CI "Test failed during run" error

All 445 Python tests pass with Python 3.11.14. All quality checks pass.
Copy link
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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
benches/PERFORMANCE_RESULTS.md (1)

95-105: Recommendation consistency: clarify "best performance" vs "most stable".

Lines 73 and 79 both recommend insphere, but for different reasons:

  • Line 73: "Use insphere for maximum performance"
  • Line 79: "Use insphere for most reliable results"

Then line 101 says "insphere provides the best performance" and line 104 says "standard insphere method remains the most numerically stable."

These statements appear to recommend the same method for both performance AND stability, which may confuse readers expecting a trade-off. Consider clarifying whether:

  1. insphere truly is both fastest AND most stable (if so, state this explicitly upfront)
  2. Or if there are nuances between "maximum performance" and "best performance" that need explanation
🧹 Nitpick comments (1)
benches/PERFORMANCE_RESULTS.md (1)

56-58: Performance ranking description improved but could be clearer.

The description "Best performance on boundary vertex cases, competitive on others" for insphere is better than the previous "Consistently best" wording. However, consider making it even more explicit:

1. **insphere** - (fastest average: 161 ns) - Wins all boundary vertex cases, competitive in basic/far vertex tests

This avoids any ambiguity about what "best" means in this context.

📜 Review details

Configuration used: Path: .coderabbit.yml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 8d3039e and 24f6d79.

📒 Files selected for processing (8)
  • .python-version (1 hunks)
  • CONTRIBUTING.md (3 hunks)
  • WARP.md (1 hunks)
  • benches/PERFORMANCE_RESULTS.md (3 hunks)
  • justfile (2 hunks)
  • pyproject.toml (3 hunks)
  • scripts/README.md (12 hunks)
  • scripts/changelog_utils.py (3 hunks)
✅ Files skipped from review due to trivial changes (1)
  • .python-version
🚧 Files skipped from review as they are similar to previous changes (1)
  • justfile
🧰 Additional context used
📓 Path-based instructions (1)
scripts/*.py

⚙️ CodeRabbit configuration file

scripts/*.py: These are Python utility scripts for changelog and commit processing.
Focus on code quality, maintainability, and adherence to Python best practices.
The scripts use ruff for comprehensive linting and formatting (pylint has been retired).

Files:

  • scripts/changelog_utils.py
🧠 Learnings (4)
📚 Learning: 2025-08-28T03:54:34.371Z
Learnt from: acgetchell
Repo: acgetchell/delaunay PR: 54
File: scripts/generate_changelog.sh:417-438
Timestamp: 2025-08-28T03:54:34.371Z
Learning: The generate_changelog.sh script uses a deliberate design pattern where the auto-changelog template uses simple generic headers (### Changes, ### Fixed Issues) and the enhancer function transforms these into Keep a Changelog format sections (### Added, ### Changed, ### Fixed, etc.). This separation keeps the template simple while ensuring standardized output format.

Applied to files:

  • WARP.md
  • scripts/README.md
  • scripts/changelog_utils.py
📚 Learning: 2025-09-02T03:03:59.550Z
Learnt from: acgetchell
Repo: acgetchell/delaunay PR: 58
File: scripts/README.md:9-14
Timestamp: 2025-09-02T03:03:59.550Z
Learning: The delaunay project requires Python 3.13+ for performance reasons, as specified by the project maintainer acgetchell, even though the code could technically run on earlier Python versions.

Applied to files:

  • scripts/README.md
  • pyproject.toml
📚 Learning: 2025-08-28T03:49:30.582Z
Learnt from: acgetchell
Repo: acgetchell/delaunay PR: 54
File: scripts/generate_changelog.sh:416-435
Timestamp: 2025-08-28T03:49:30.582Z
Learning: The generate_changelog.sh script processes template headers from auto-changelog (### Changes, ### Fixed Issues) and transforms them into Keep a Changelog format sections (### Added, ### Changed, ### Fixed, etc.). When analyzing changelog generation scripts, check both the template and the final output to understand the transformation pipeline.

Applied to files:

  • scripts/README.md
  • scripts/changelog_utils.py
📚 Learning: 2025-09-04T20:03:49.896Z
Learnt from: acgetchell
Repo: acgetchell/delaunay PR: 65
File: WARP.md:249-254
Timestamp: 2025-09-04T20:03:49.896Z
Learning: The delaunay repository contains all the specialized integration tests documented in WARP.md: circumsphere_debug_tools.rs, robust_predicates_comparison.rs, convex_hull_bowyer_watson_integration.rs, and allocation_api.rs, plus additional test files like robust_predicates_showcase.rs and coordinate_conversion_errors.rs.

Applied to files:

  • benches/PERFORMANCE_RESULTS.md
🪛 LanguageTool
CONTRIBUTING.md

[uncategorized] ~490-~490: The official name of this software platform is spelled with a capital “H”.
Context: ... project configurations - Coverage (.github/workflows/codecov.yml): Test coverage ...

(GITHUB)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (7)
  • GitHub Check: performance-regression
  • GitHub Check: Codacy Static Code Analysis
  • GitHub Check: Codacy Security Scan
  • GitHub Check: Code Coverage
  • GitHub Check: build (macos-latest)
  • GitHub Check: build (ubuntu-latest)
  • GitHub Check: build (windows-latest)
🔇 Additional comments (10)
CONTRIBUTING.md (2)

165-165: LGTM! Rust toolchain version bump is consistent.

The Rust version bump from 1.90.0 to 1.91.0 aligns with the project's rust-toolchain.toml and related documentation updates throughout the PR.


364-365: Clear distinction between local and CI coverage workflows.

The updated descriptions effectively communicate the timeout settings and clarify the difference between coverage (local development) and coverage-ci (CI/CD XML generation).

WARP.md (1)

16-22: Excellent addition for non-interactive environment support.

The explicit GitHub CLI guidance addresses common pitfalls when using gh in automation contexts. The requirement for explicit IDs and the example workflow pattern will prevent errors in CI/CD environments.

scripts/README.md (1)

11-11: Verify Python version downgrade aligns with performance requirements.

Based on learnings, the project previously required Python 3.13+ for performance reasons. This PR downgrades the requirement to Python 3.11+. Please confirm:

  1. Has the performance requirement changed, or are the performance benefits of 3.13+ no longer necessary?
  2. Have all Python scripts been tested with Python 3.11 to ensure compatibility?
  3. Are there specific features in 3.13 that are no longer being used?

Based on learnings, this change may impact the performance rationale previously documented.

Also applies to: 14-15, 33, 57, 84, 155, 201, 218, 245, 289, 445, 623, 692

pyproject.toml (1)

10-10: Python version downgrade is consistent but requires verification.

The changes are consistent with the project-wide Python version downgrade (scripts/README.md also updated). However, based on learnings, Python 3.13+ was previously required for performance reasons. Please verify this downgrade is intentional and acceptable for the project's performance requirements.

Based on learnings, this change may impact the performance rationale previously documented.

Also applies to: 23-24, 57-57

scripts/changelog_utils.py (3)

8-8: Python version documentation updated consistently.

The docstring update reflects the project-wide Python version change. As with other files, please verify this downgrade is acceptable given previous performance requirements.

Based on learnings, this change may impact performance considerations.


637-681: Well-implemented setext-to-ATX heading conversion.

The implementation correctly handles:

  • Level 1 (===) and level 2 (---) setext underlines
  • Proper exclusion of list items (lines starting with - )
  • Clear documentation explaining the rationale for #### normalization

The logic is sound and the edge case handling for list items prevents false positives.


726-727: Proper integration into the processing pipeline.

Calling _convert_setext_to_atx before _protect_cron_expressions and _downgrade_headers ensures setext headings are normalized early in the pipeline, maintaining a clean transformation order.

benches/PERFORMANCE_RESULTS.md (2)

6-13: Metadata updates are consistent with release.

The updated timestamp, commit hash, and Rust version (1.91.0) align with other files in this PR and reflect the v0.5.4 release accurately.


18-50: Performance data refreshed for v0.5.4.

The benchmark results have been updated across all dimensions (2D-5D) with new timing data. The Winners column correctly identifies which method performs best for each specific test case.

Performance Documentation:
- Add average performance times to rankings (161 ns, 177 ns, 181 ns)
- Clarify relative performance differences (~1.1x slower than fastest)
- Restructure recommendations with clearer headings and use case guidance
- Emphasize boundary vertex performance advantage (3-4 ns vs 78-366 ns)
- Break long lines in conclusion to meet 160-char markdown lint limit

Coverage Configuration:
- Exclude test_cavity_boundary_error from coverage runs
- Document reason: regression test is very slow (~2.5min) and causes tarpaulin issues
- Improves coverage report generation reliability
Update all documentation files with correct just workflow commands from
justfile, replacing outdated command references and ensuring consistency
across the project.

Documentation Updates:
- README.md: Replace `just dev`/`just quality` with `just ci` and related commands
- CONTRIBUTING.md: Update workflow sections with complete command listings
  including test variants, hierarchical linting, benchmark commands with
  timing estimates, and utility commands
- WARP.md: Update Just Workflow Summary, Code Quality Checks, Testing and
  Validation, and Performance sections with accurate commands
- docs/code_organization.md: Update Development Workflow section with
  comprehensive command organization and regenerate file layout tree
  (added proptest_duplicates.rs)

Performance Documentation:
- benches/PERFORMANCE_RESULTS.md: Clarify performance ranking descriptions
  and recommendation consistency
  - Add specific timings "(3-4 ns)" to performance ranking for clarity
  - Explicitly state `insphere` is both fastest AND most stable upfront
  - Eliminate ambiguity about performance vs stability trade-offs
  - Update wording to emphasize insphere combines best performance with
    numerical reliability

Key Command Changes:
- Replaced: `just dev`, `just quality`, `just pre-commit`
- Updated to: `just ci`, `just commit-check`, `just commit-check-slow`
- Added: `just help-workflows` references throughout
- Expanded: Testing commands (test-integration, test-slow, test-slow-release)
- Expanded: Linting hierarchy (lint, lint-code, lint-docs, lint-config)
- Added: Benchmark variants with timing estimates (bench-ci, bench-dev, bench-quick)
- Added: Profiling commands (profile, profile-dev, profile-mem)

All changes validated with markdown linting, spell checking, and JSON validation.
Copy link
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)
benches/PERFORMANCE_RESULTS.md (1)

73-76: Soften claim about numerical stability—all methods achieve equal correctness.

Line 73 asserts insphere is "both the fastest AND most numerically stable method," but line 77 states all three methods achieve 100% agreement on correctness. They are equally stable numerically; insphere's advantage is speed (average), not stability.

Apply this diff to align the claim with the evidence:

- **Use `insphere`** - it is both the fastest AND most numerically stable method
+ **Use `insphere`** - it offers the fastest average performance and balanced numerical properties

Alternatively:

- **Use `insphere`** - it is both the fastest AND most numerically stable method
- Fastest average performance (161 ns) with exceptional boundary vertex handling (3-4 ns)
+ **Use `insphere`** - it delivers the fastest average performance combined with proven mathematical properties
+ Fastest average (161 ns) with exceptional boundary vertex handling (3-4 ns)
justfile (1)

116-119: Test orchestration, coverage timeouts, and slow-test split are well-structured

  • commit-check and commit-check-slow now clearly separate fast “all tests + examples” from the slow-tests feature, which is a clean way to keep everyday workflows responsive while still supporting heavy validation.
  • The _coverage_base_args comment and -t 300 per-test timeout align with the documentation and avoid tarpaulin flakiness for very slow tests, while explicitly excluding the known-problematic suites.
  • coverage vs. coverage-ci (HTML vs. XML) fit the local vs. CI use cases and are reflected consistently in the docs and help text.

These changes make the Just workflows clearer and more robust around coverage and slow tests.

Also applies to: 130-153, 156-163, 179-198, 326-330

📜 Review details

Configuration used: Path: .coderabbit.yml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 0ab2bb6 and 22277bc.

📒 Files selected for processing (7)
  • CONTRIBUTING.md (6 hunks)
  • README.md (2 hunks)
  • WARP.md (7 hunks)
  • benches/PERFORMANCE_RESULTS.md (3 hunks)
  • docs/code_organization.md (2 hunks)
  • justfile (7 hunks)
  • tests/test_convex_hull_error_paths.rs (1 hunks)
🧰 Additional context used
🧠 Learnings (7)
📚 Learning: 2025-09-04T20:03:49.896Z
Learnt from: acgetchell
Repo: acgetchell/delaunay PR: 65
File: WARP.md:249-254
Timestamp: 2025-09-04T20:03:49.896Z
Learning: The delaunay repository contains all the specialized integration tests documented in WARP.md: circumsphere_debug_tools.rs, robust_predicates_comparison.rs, convex_hull_bowyer_watson_integration.rs, and allocation_api.rs, plus additional test files like robust_predicates_showcase.rs and coordinate_conversion_errors.rs.

Applied to files:

  • README.md
  • tests/test_convex_hull_error_paths.rs
  • benches/PERFORMANCE_RESULTS.md
  • docs/code_organization.md
  • justfile
📚 Learning: 2025-08-30T02:40:22.032Z
Learnt from: acgetchell
Repo: acgetchell/delaunay PR: 55
File: CONTRIBUTING.md:152-167
Timestamp: 2025-08-30T02:40:22.032Z
Learning: The delaunay repository has stale documentation in WARP.md that references non-existent trait files (finitecheck.rs, hashcoordinate.rs, orderedeq.rs) in src/geometry/traits/, while the actual directory only contains coordinate.rs. The CONTRIBUTING.md documentation is accurate and reflects the current state.

Applied to files:

  • README.md
  • tests/test_convex_hull_error_paths.rs
  • docs/code_organization.md
📚 Learning: 2025-08-30T02:40:22.032Z
Learnt from: acgetchell
Repo: acgetchell/delaunay PR: 55
File: CONTRIBUTING.md:152-167
Timestamp: 2025-08-30T02:40:22.032Z
Learning: The user corrected that finitecheck.rs, hashcoordinate.rs, and orderedeq.rs trait files do not exist in the current version of the delaunay repository under src/geometry/traits/. The current structure only contains coordinate.rs, which matches the documented structure in CONTRIBUTING.md.

Applied to files:

  • tests/test_convex_hull_error_paths.rs
  • docs/code_organization.md
📚 Learning: 2025-11-21T22:40:08.556Z
Learnt from: acgetchell
Repo: acgetchell/delaunay PR: 124
File: justfile:111-112
Timestamp: 2025-11-21T22:40:08.556Z
Learning: In the delaunay repository justfile, the clippy recipe runs cargo clippy twice: once without --all-features to check default code paths, and once with --all-features to check feature-gated code. This is intentional and necessary because the repository has feature-gated code behind count-allocations, dense-slotmap, bench, and test-debug features.

Applied to files:

  • justfile
  • WARP.md
📚 Learning: 2025-09-02T02:40:54.439Z
Learnt from: acgetchell
Repo: acgetchell/delaunay PR: 58
File: scripts/tests/test_subprocess_utils.py:92-101
Timestamp: 2025-09-02T02:40:54.439Z
Learning: In Rust projects, cargo is expected to be available in development and CI environments, so conditional skipping of cargo-dependent tests is typically unnecessary.

Applied to files:

  • justfile
  • WARP.md
📚 Learning: 2025-08-28T03:54:34.371Z
Learnt from: acgetchell
Repo: acgetchell/delaunay PR: 54
File: scripts/generate_changelog.sh:417-438
Timestamp: 2025-08-28T03:54:34.371Z
Learning: The generate_changelog.sh script uses a deliberate design pattern where the auto-changelog template uses simple generic headers (### Changes, ### Fixed Issues) and the enhancer function transforms these into Keep a Changelog format sections (### Added, ### Changed, ### Fixed, etc.). This separation keeps the template simple while ensuring standardized output format.

Applied to files:

  • WARP.md
📚 Learning: 2025-08-28T03:49:30.582Z
Learnt from: acgetchell
Repo: acgetchell/delaunay PR: 54
File: scripts/generate_changelog.sh:416-435
Timestamp: 2025-08-28T03:49:30.582Z
Learning: The generate_changelog.sh script processes template headers from auto-changelog (### Changes, ### Fixed Issues) and transforms them into Keep a Changelog format sections (### Added, ### Changed, ### Fixed, etc.). When analyzing changelog generation scripts, check both the template and the final output to understand the transformation pipeline.

Applied to files:

  • WARP.md
🧬 Code graph analysis (1)
tests/test_convex_hull_error_paths.rs (1)
src/geometry/algorithms/convex_hull.rs (1)
  • is_valid_for_tds (531-537)
🪛 LanguageTool
CONTRIBUTING.md

[uncategorized] ~523-~523: The official name of this software platform is spelled with a capital “H”.
Context: ... project configurations - Coverage (.github/workflows/codecov.yml): Test coverage ...

(GITHUB)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (7)
  • GitHub Check: performance-regression
  • GitHub Check: Codacy Static Code Analysis
  • GitHub Check: Codacy Security Scan
  • GitHub Check: Code Coverage
  • GitHub Check: build (ubuntu-latest)
  • GitHub Check: build (macos-latest)
  • GitHub Check: build (windows-latest)
🔇 Additional comments (11)
benches/PERFORMANCE_RESULTS.md (1)

56-58: Improved accuracy and clarity from previous version—past wording concern resolved.

The document now uses precise language ("best average performance," "wins boundary vertex cases") instead of the previous overstated phrasing ("consistently best across all tests"). The conclusion properly frames insphere as the default choice based on average performance and boundary-case strength, which aligns with the Winners column data across all dimensions.

Also applies to: 102-106

tests/test_convex_hull_error_paths.rs (1)

408-421: Empty hull validity test now matches ConvexHull contract

The updated comment and assertion correctly reflect is_valid_for_tds semantics for a default/empty hull (always valid when self.is_empty() and no creation_generation is set). Test behavior is now aligned with the implementation.

README.md (2)

55-65: Development workflow commands are consistent with justfile

The updated quickstart now points to just ci, just commit-check, just commit-check-slow, and just help-workflows, which all exist with matching behavior in the justfile. This keeps the README aligned with the actual workflows.


104-114: Authorship/validation wording change is fine

The revised sentence about code being “written and/or reviewed and validated by the author” is clearer without affecting any technical behavior.

WARP.md (2)

16-23: gh usage guidelines are clear and CI-friendly

The new gh usage rules (explicit IDs, avoiding interactive context inference, showing how to fetch run IDs) are well-specified and appropriate for non-interactive/CI environments.


139-166: Workflow, testing, coverage, and perf docs align with justfile recipes

The refreshed Just workflow documentation (ci/commit-check/commit-check-slow/ci-baseline, lint/test/test-integration/test-all, coverage/coverage-ci, bench-/perf-/profile-* commands) matches the current justfile surface and accurately distinguishes between fast vs. comprehensive flows, local vs. CI coverage (HTML vs. XML), and heavy benchmarks. This keeps WARP guidance in sync with the actual tooling.

Also applies to: 181-201, 205-231, 233-268, 280-288

docs/code_organization.md (1)

147-185: Tests tree now correctly includes proptest_duplicates.rs

Adding proptest_duplicates.rs to the documented tests directory keeps this directory tree in sync with the actual test suite layout.

CONTRIBUTING.md (3)

117-141: Updated Just quickstart reflects the new workflow surface

The Quick Start section now correctly highlights just ci, just commit-check, just commit-check-slow, just ci-baseline, and just help-workflows, which all exist and mirror their described roles in the justfile. This gives contributors an accurate on-ramp to the current automation.


154-195: MSRV/toolchain and automatic management text are consistent

The MSRV bump to Rust 1.91.0 and the explanation of rust-toolchain.toml–driven toolchain management match the rest of the file and the project configuration, and clearly set expectations for contributors.


514-524: Coverage workflow description matches coverage-ci behavior

Referencing .github/workflows/codecov.yml as handling coverage with a 5-minute per-test timeout aligns with the tarpaulin configuration (-t 300) wired through coverage-ci in the justfile, so the CI guidance here is accurate.

justfile (1)

95-103: Confirm CI still runs integration and Python tests somewhere

ci is now defined as lint test bench-compile, and test only runs lib/doc tests. Integration and Python tests are covered by test-integration, test-python, and the composite test-all used in commit-check/commit-check-slow.

If .github/workflows/ci.yml (or related workflows) only invoke just ci, integration and Python tests would no longer be exercised in the main CI path. Please confirm that CI also runs either test-integration, test-all, or explicit cargo test --tests/pytest steps, and, if not, consider wiring one of the comprehensive targets into CI.

Also applies to: 435-467

@codacy-production
Copy link

Coverage summary from Codacy

See diff coverage on Codacy

Coverage variation Diff coverage
Report missing for 37ccaec1
Coverage variation details
Coverable lines Covered lines Coverage
Common ancestor commit (37ccaec) Report Missing Report Missing Report Missing
Head commit (22277bc) 5947 3780 63.56%

Coverage variation is the difference between the coverage for the head and common ancestor commits of the pull request branch: <coverage of head commit> - <coverage of common ancestor commit>

Diff coverage details
Coverable lines Covered lines Diff coverage
Pull request (#131) 0 0 ∅ (not applicable)

Diff coverage is the percentage of lines that are covered by tests out of the coverable lines that the pull request added or modified: <covered lines added or modified>/<coverable lines added or modified> * 100%

See your quality gate settings    Change summary preferences

Footnotes

  1. Codacy didn't receive coverage data for the commit, or there was an error processing the received data. Check your integration for errors and validate that your coverage setup is correct.

@codecov
Copy link

codecov bot commented Nov 25, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 63.56%. Comparing base (f7203df) to head (22277bc).
⚠️ Report is 5 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #131      +/-   ##
==========================================
+ Coverage   63.51%   63.56%   +0.05%     
==========================================
  Files          20       20              
  Lines        5945     5945              
==========================================
+ Hits         3776     3779       +3     
+ Misses       2169     2166       -3     
Flag Coverage Δ
unittests 63.56% <ø> (+0.05%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@acgetchell acgetchell merged commit bdfc43d into main Nov 25, 2025
11 of 12 checks passed
@acgetchell acgetchell deleted the release/v0.5.4 branch November 25, 2025 07:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation rust Pull requests that update rust code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant