Skip to content

Latest commit

 

History

History
2571 lines (1829 loc) · 122 KB

File metadata and controls

2571 lines (1829 loc) · 122 KB

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

⚠️ Breaking Changes

  • Remove ScalarAccumulative and ScalarSummable traits #316 #318

Merged Pull Requests

  • Unify flip-repair and retry constants across build profiles #306 #319
  • Remove ScalarAccumulative and ScalarSummable traits #316 #318
  • Rename tds file and move delaunay/builder into triangulation/ #317
  • Allow explicit cell construction with non-sphere Euler characteristic #314

Added

  • Allow explicit cell construction with non-sphere Euler characteristic #314 c81bb1a

  • feat: allow explicit cell construction with non-sphere Euler characteristic #313

    Add .global_topology() builder setter so callers can declare the intended topology (e.g. Toroidal) for explicit cell construction. validate_topology_core() uses this metadata to override the heuristic classification: closed toroidal meshes expect χ = 0 instead of the sphere default χ = 1+(-1)^D.

    • Add ToroidalConstructionMode::Explicit variant for explicit builds

    • Add TopologyClassification::ClosedToroid(D) with χ(T^d) = 0

    • Add global_topology field and setter to DelaunayTriangulationBuilder

    • Thread GlobalTopology through build_explicit(), set before validation

    • Override Euler classification in validate_topology_core() when global_topology is Toroidal and heuristic yields ClosedSphere

    • Add T² (3×3 grid) and T³ (3×3×3 Freudenthal) integration tests validating χ = 0 via explicit construction

Changed

  • Rename tds file and move delaunay/builder into triangulation/ #317 25faa5b

  • refactor: rename tds file and move delaunay/builder into triangulation/

    • Rename src/core/triangulation_data_structure.rs → src/core/tds.rs

    • Move src/core/delaunay_triangulation.rs → src/triangulation/delaunay.rs

    • Move src/core/builder.rs → src/triangulation/builder.rs

    • Widen pub(in crate::core) → pub(crate) for cross-module access

    • Preserve public API via re-exports in core {}

    • Add GlobalTopology::is_euclidean() for API symmetry with is_toroidal()

    • Add doctests for topology_guarantee, global_topology, topology_kind, set_global_topology accessors

    • Hoist in-function test imports to module-level per project convention

    • Shorten fully-qualified paths (CellValidationError, ConflictError, etc.)

    • Bump la-stack 0.3.0 → 0.4.0 (integer-only Bareiss, stack-backed exact arithmetic, custom f64→BigRational via IEEE 754 bit decomposition)

    • Update README, code_organization.md, debug_env_vars.md, rust.md, numerical_robustness_guide.md, COVERAGE.md, and other active docs

    • Archive docs left unchanged (historical state)

  • [breaking] Remove ScalarAccumulative and ScalarSummable traits #316 #318 c612188

  • refactor!: remove ScalarAccumulative and ScalarSummable traits #316

    • Absorb AddAssign, SubAssign, and Sum bounds into CoordinateScalar
    • Remove ScalarAccumulative and ScalarSummable traits and their blanket impls
    • Replace all ScalarAccumulative bounds with CoordinateScalar across 20 files
    • Simplify operator usage (e.g. coords[axis] += … instead of manual add-assign)

Fixed

  • Handle geometric degeneracy gracefully in profiling benchmarks 3532624

  • Replace .unwrap() on triangulation build with graceful error handling across all benchmark functions in profiling_suite.rs

    • Scaling and memory benchmarks skip iterations that hit degeneracy

    • Query latency and algorithmic bottleneck benchmarks skip entries when setup construction fails

    • Fixes CI panic: GeometricDegeneracy during 3D memory profiling with 10,000 random points (seed 42)

  • Unify flip-repair and retry constants across build profiles #306 #319 14f0d16

  • fix: unify flip-repair and retry constants across build profiles #306

    Several flip-repair and construction-retry constants were split by cfg(any(test, debug_assertions)), causing release builds to fail on valid 3D inputs that debug/test builds handled correctly.

    Primary fix: RetryPolicy::default() was Disabled in release but DebugOnlyShuffled { attempts: 6 } in debug/test. When the initial Hilbert-ordered insertion hits a co-spherical flip cycle, shuffled retries find a working vertex ordering. Without retries, the first failure was fatal. Changed to Shuffled { attempts: 6 } unconditionally.

    Secondary fixes in flips.rs:

    • Unify MAX_REPEAT_SIGNATURE to 128 (was 32 in release)
    • Unify default_max_flips 3D multiplier to 8x (was 4x in release)
    • Make is_connected() postcondition check unconditional

    Also in delaunay.rs:

    • Unify HEURISTIC_REBUILD_ATTEMPTS to 6 (was 2 in release)

    • Remove cfg-gated DELAUNAY_SHUFFLE_ATTEMPTS constant

    • Fixed: enable construction retries in release builds by default

    Update RetryPolicy::default() to return Shuffled retries in all build profiles. Previously, retries were disabled in release mode, causing fatal construction failures on 3D configurations that required alternative vertex insertion orders to converge. This change ensures consistent behavior between debug and release builds and includes a regression test for the reported failure case.

0.7.5 - 2026-04-10

⚠️ Breaking Changes

  • Change remove_vertex to accept VertexKey instead of &Vertex #300

Merged Pull Requests

  • Release v0.7.5 #312
  • V0.7.5 cleanup — impl-block split, builder decomposition, p… #311
  • Add diagnostic infrastructure for v0.7.6 investigation (#306, #… #309
  • Bump taiki-e/install-action from 2.70.2 to 2.73.0 #308
  • Add MVP delaunayize-by-flips workflow #227 #303
  • Add explicit construction from vertices and cells #293 #301
  • Change remove_vertex to accept VertexKey instead of &Vertex #300
  • Bump pygments from 2.19.2 to 2.20.0 #298
  • Bump astral-sh/setup-uv from 7.6.0 to 8.0.0 #297
  • Bump taiki-e/install-action from 2.69.6 to 2.70.2 #296
  • Bump codecov/codecov-action from 5.5.3 to 6.0.0 #295
  • Bump the dependencies group with 3 updates #294

Added

  • Add explicit construction from vertices and cells #293 #301 458ebae

  • feat: add explicit construction from vertices and cells #293

    • Introduce DelaunayTriangulationBuilder::from_vertices_and_cells for combinatorial construction bypassing Delaunay insertion

    • Add build_explicit path that constructs a TDS directly from given vertices and cell index lists, with adjacency and orientation repair

    • Define ExplicitConstructionError enum with IndexOutOfBounds, InvalidCellArity, DuplicateVertexInCell, EmptyCells, and IncompatibleTopology variants

    • Wire ExplicitConstruction variant into DelaunayTriangulationConstructionError

    • Expose assign_neighbors as pub(crate) in the TDS

    • Add comprehensive integration tests for explicit construction across 2D/3D, round-trip fidelity, error cases, and topology guarantees

    • Changed: refine explicit construction validation and error reporting

    Update the triangulation builder to return specific ValidationFailed errors when structural invariants are violated. Refine the Delaunay property check in the validation suite to use flip-based verification for more precise error reporting. Expand the test suite to cover 3D round-trip fidelity, non-manifold topology errors, and vertex data consistency during explicit construction.

  • Add MVP delaunayize-by-flips workflow #227 #303 0370070

  • feat: add MVP delaunayize-by-flips workflow #227

    Add a public delaunayize_by_flips entrypoint that performs bounded deterministic topology repair followed by flip-based Delaunay repair, with an optional fallback rebuild from the vertex set.

    New files:

    • src/core/algorithms/pl_manifold_repair.rs: pub(crate) bounded facet over-sharing repair (iterative worst-quality cell removal)

    • src/triangulation/delaunayize.rs: public API with DelaunayizeConfig, DelaunayizeOutcome, DelaunayizeError, and delaunayize_by_flips()

    • tests/delaunayize_workflow.rs: 13 integration tests covering success paths, fallback behavior, determinism, error variants, and flip-then-repair round-trip

    Other changes:

    • Box DelaunayRepairDiagnostics in NonConvergent variant to keep DelaunayRepairError small (eliminates downstream boxing)

    • Wire modules in src/lib.rs with self-contained prelude at prelude::triangulation::delaunayize

    • Re-export PlManifoldRepairStats, PlManifoldRepairError, and DelaunayRepairStats from the delaunayize module

    • Update docs/api_design.md and docs/code_organization.md

    • Changed: allow manifold repair to proceed on over-shared facets

    Refactor repair_facet_oversharing to use partial structural pre-checks rather than full validation, as the latter rejects over-shared facets before repair can occur. Expand test coverage for budget exhaustion, cell removal logic, and repair determinism.

  • Add diagnostic infrastructure for v0.7.6 investigation (#306, #… #309 b25dff3

  • feat: add diagnostic infrastructure for v0.7.6 investigation (#306, #307)

    • Enhance conflict-region verifier with neighbor-reachability analysis
    • Add BFS boundary logging to find_conflict_region
    • Add orientation tracing and post-insertion audit (DELAUNAY_DEBUG_ORIENTATION)
    • Add cell creation provenance logging to fill_cavity
    • Re-export diagnostic types (DelaunayRepairDiagnostics, etc.) in prelude
    • Create comprehensive debug env var reference (docs/dev/debug_env_vars.md)

Changed

  • [breaking] Change remove_vertex to accept VertexKey instead of &Vertex #300 71cca10

  • refactor!: change remove_vertex to accept VertexKey instead of &Vertex

    • More ergonomic: callers pass a key directly instead of looking up and borrowing the full Vertex struct

    • More efficient: O(1) key dereference replaces UUID-based lookup

    • Consistent with set_vertex_data, set_cell_data, and the Edit API which all use keys

    • Aligned with the stated API design in docs/api_design.md

    • Simplifies internal callers in flips.rs (remove get+copy+remove pattern) and builder.rs (eliminate intermediate vertex copies)

    • Add stale-key idempotency test for the new VertexKey API

  • V0.7.5 cleanup — impl-block split, builder decomposition, p… #311 5bf5c81

  • refactor: v0.7.5 cleanup — impl-block split, builder decomposition, prelude guidance, re-enable 3D proptests

    • Split monolithic DelaunayTriangulation impl block into 6 trait-minimal blocks per #302 (ScalarAccumulative only where needed)

    • Decompose search_closed_2d_selection: extract ClosedSelectionDfs struct and sort_candidates_by_rarity_and_domain helper, remove clippy suppressions

    • Add "Which import do I need?" prelude guidance table to lib.rs

    • Re-enable 43 previously-ignored 3D proptests (all <1s in release mode)

    • Audit doctests for builder migration (no changes needed; deferred to #214)

  • Update internal performance results for v0.7.5 76b2ff7

Refresh the performance documentation with updated benchmark metrics, timestamps, and commit references to align with the v0.7.5 release.

Documentation

  • Update KNOWN_ISSUES_4D.md with #204 debug run findings 87d3054

  • 3D: minimal failing prefix is 35 vertices (previously ~130+)

    • 3D: flip cycles confirmed NOT predicate-related (ambiguous=0)
    • 4D: negative-orientation cell causes 88% vertex skip rate
    • Add release-mode reproduction commands
    • Update recommendations section
    • Filed follow-up issues #306 and #307

Maintenance

Bumps pygments from 2.19.2 to 2.20.0.

Bumps the dependencies group with 3 updates: rustc-hash , ordered-float and uuid .

Updates rustc-hash from 2.1.1 to 2.1.2

  • Changelog

  • Commits

    Updates ordered-float from 5.2.0 to 5.3.0

  • Release notes

  • Commits

    Updates uuid from 1.22.0 to 1.23.0

  • Release notes

  • Commits


    updated-dependencies:

  • dependency-name: rustc-hash dependency-version: 2.1.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies

  • dependency-name: ordered-float dependency-version: 5.3.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dependencies

  • dependency-name: uuid dependency-version: 1.23.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dependencies ...

  • Bump codecov/codecov-action from 5.5.3 to 6.0.0 #295 420a1c5

Bumps codecov/codecov-action from 5.5.3 to 6.0.0.

  • Release notes

  • Changelog

  • Commits


    updated-dependencies:

  • dependency-name: codecov/codecov-action dependency-version: 6.0.0 dependency-type: direct:production update-type: version-update:semver-major ...

  • Bump astral-sh/setup-uv from 7.6.0 to 8.0.0 #297 0a0c539

Bumps astral-sh/setup-uv from 7.6.0 to 8.0.0.

  • Release notes

  • Commits


    updated-dependencies:

  • dependency-name: astral-sh/setup-uv dependency-version: 8.0.0 dependency-type: direct:production update-type: version-update:semver-major ...

  • Bump taiki-e/install-action from 2.69.6 to 2.70.2 #296 0ab08a7

Bumps taiki-e/install-action from 2.69.6 to 2.70.2.

  • Release notes

  • Changelog

  • Commits


    updated-dependencies:

  • dependency-name: taiki-e/install-action dependency-version: 2.70.2 dependency-type: direct:production update-type: version-update:semver-minor ...

  • Bump taiki-e/install-action from 2.70.2 to 2.73.0 #308 839877f

Bumps taiki-e/install-action from 2.70.2 to 2.73.0.

  • Release notes

  • Changelog

  • Commits


    updated-dependencies:

  • dependency-name: taiki-e/install-action dependency-version: 2.73.0 dependency-type: direct:production update-type: version-update:semver-minor ...

  • Release v0.7.5 #312 b7f330e

  • Bump version to v0.7.5

    • Update changelog with latest changes
    • Update documentation for release
    • Add performance results for v0.7.5

0.7.4 - 2026-03-27

⚠️ Breaking Changes

  • Tighten Vertex::data and Cell::data to pub(crate) #289
  • Generalize DelaunayTriangulationBuilder::new() over U #287 #290

Merged Pull Requests

  • Release v0.7.4 #291
  • Generalize DelaunayTriangulationBuilder::new() over U #287 #290
  • Tighten Vertex::data and Cell::data to pub(crate) #289
  • Add set_vertex_data and set_cell_data methods #284 #285

Added

  • Add set_vertex_data and set_cell_data methods #284 #285 b398d54

  • feat: add set_vertex_data and set_cell_data methods #284

    • Add set_vertex_data and set_cell_data to Tds for O(1) mutation of auxiliary vertex/cell data without affecting geometry or topology

    • Add convenience wrappers on Triangulation and DelaunayTriangulation that delegate to the TDS methods without invalidating caches

    • All doctests use prelude::triangulation::* to demonstrate idiomatic imports including DelaunayTriangulationBuilder::from_vertices

    • 9 unit tests covering replacement, no-data vertices, invalid keys, invariant preservation, multi-key mutation, and locate-hint stability

    • feat: add set_vertex_data and set_cell_data methods #284

    • Add set_vertex_data and set_cell_data to Tds accepting Option<U> / Option<V> for setting or clearing auxiliary data in O(1) without affecting geometry or topology

    • Add convenience wrappers on Triangulation and DelaunayTriangulation that delegate to the TDS methods without invalidating caches

    • All doctests use prelude::triangulation::* and demonstrate both setting and clearing data paths

    • 11 unit tests covering Tds basics, Triangulation wrappers, invariant preservation, multi-key mutation, clearing, and locate-hint stability

Changed

  • [breaking] Tighten Vertex::data and Cell::data to pub(crate) #289 07f1565

  • refactor!: tighten Vertex::data and Cell::data to pub(crate)

    • Change Vertex::data and Cell::data from pub to pub(crate)

    • Add const fn data() -> Option<&U> accessor on Vertex and const fn data() -> Option<&V> accessor on Cell

    • Update struct-level doc comments with data() / set_vertex_data / set_cell_data cross-references

    • Update all external-facing doctests and integration tests to use the new accessor

  • [breaking] Generalize DelaunayTriangulationBuilder::new() over U #287 #290 7694a3e

  • refactor!: generalize DelaunayTriangulationBuilder::new() over U #287

    • Move new() from the <f64, (), D> impl to <f64, U, D> so it accepts any vertex data type — U is inferred from the vertex slice

    • Deprecate from_vertices() (now redundant for f64 vertices)

    • Migrate all from_vertices call sites to new

    • Fix type-inference regression in NaN test by annotating VertexBuilder

  • Release v0.7.4 #291 bee1b04

  • chose(release): release v0.7.4

    • Bump version to v0.7.4

    • Update changelog with latest changes

    • Update documentation for release

    • Add performance results for v0.7.4

    • Changed: clarify adaptive_tolerance_insphere delegation in 4D docs

    Update the documentation for provable error bounds to clarify that the adaptive_tolerance_insphere wrapper function remains available but now delegates entirely to the provable insphere_from_matrix path.

Fixed

  • Fix keyword validation and add publish-check recipe 676df6b

  • Replace computational-geometry keyword with geometry (crates.io enforces a 20-character limit)

    • Add just publish-check recipe that validates crates.io metadata (keywords, categories, description) and runs cargo publish --dry-run

    • Add publish-check to RELEASING.md Step 1.3 so metadata issues are caught in the release PR, not at publish time

    • Remove redundant dry-run from RELEASING.md Step 2.7

0.7.3 - 2026-03-24

⚠️ Breaking Changes

  • Add SoS module for deterministic degeneracy resolution #233 #251
  • Remove use_robust_on_ambiguous override from flip repair #228 #255
  • Apply SoS to AdaptiveKernel::orientation() and tolerate degener… #264
  • Improve 4D debug harness diagnostics, add capped repair and regression test #230 #277
  • Remove RobustPredicateConfig and config_presets #259 #260
  • Rename TdsValidationError to TdsError #262 #265
  • Replace custom changelog pipeline with git-cliff #247

Merged Pull Requests

  • Release v0.7.3 #283
  • Simplify trait bounds and re-export secondary maps #282
  • Bump codecov/codecov-action from 5.5.2 to 5.5.3 #280
  • Bump taiki-e/install-action from 2.68.34 to 2.69.6 #279
  • Bump arc-swap from 1.8.2 to 1.9.0 in the dependencies group #278
  • Improve 4D debug harness diagnostics, add capped repair and regression test #230 #277
  • Add progressive scale-invariant perturbation #209 #274
  • Add ExactPredicates marker trait for flip repair type safety (#… #273
  • Identity-based SoS perturbation via canonical vertex ordering (… #272
  • Bump astral-sh/setup-uv from 7.3.1 to 7.5.0 #271
  • Bump actions-rust-lang/setup-rust-toolchain #270
  • Bump taiki-e/install-action from 2.68.25 to 2.68.33 #269
  • Bump tracing-subscriber in the dependencies group #268
  • Bump actions/download-artifact from 8.0.0 to 8.0.1 #267
  • Rename TdsValidationError to TdsError #262 #265
  • Apply SoS to AdaptiveKernel::orientation() and tolerate degener… #264
  • Canonicalize positive orientation after bulk construction repair… #261
  • Remove RobustPredicateConfig and config_presets #259 #260
  • Remove use_robust_on_ambiguous override from flip repair #228 #255
  • Add SoS module for deterministic degeneracy resolution #233 #251
  • Replace panicking calls with error propagation #242 #250
  • Replace derive_builder with hand-written VertexBuilder #212 #249
  • Archive completed changelog minor series into per-minor files #248
  • Replace custom changelog pipeline with git-cliff #247

Added

  • Archive completed changelog minor series into per-minor files #248 45e4781

  • feat: archive completed changelog minor series into per-minor files

    Add archive_changelog.py to split CHANGELOG.md by minor series:

    • Parse version blocks, group by X.Y minor key, write completed minors to docs/archive/changelog/X.Y.md (0.2–0.6)

    • Extract and distribute git-cliff reference-style link definitions so each output file contains only its own version defs (fixes MD053)

    • Keep Unreleased + active minor (0.7) in root CHANGELOG.md with an Archives link section; root shrinks from ~4,000 to ~1,400 lines

    • Pipeline is idempotent: repeated runs produce no diff

    Update tag_release.py to fall back to archive files when a requested version is no longer in the root changelog (extract_changelog_section and _github_anchor both search docs/archive/changelog/X.Y.md).

    Register archive-changelog CLI entry point in pyproject.toml and wire it into the justfile changelog recipe after postprocess-changelog.

    Add 24 tests covering parsing, grouping, link-def distribution, archive writing, idempotency, and tag_release archive fallback.

    Other changes:

    • Sort justfile recipes in lexicographic order
    • Update docs/code_organization.md tree (new files, fix NBSP encoding)
    • Update AGENTS.md, README.md, RELEASING.md with archive references
    • Exclude docs/archive/changelog/** from typos checks
  • [breaking] Add SoS module for deterministic degeneracy resolution #233 #251 6ed6f88

  • feat: add SoS module for deterministic degeneracy resolution #233

    • New src/geometry/sos.rs with dimension-generic SoS tie-breaking
    • sos_orientation_sign<D>() for degenerate orientation predicates
    • sos_insphere_sign<D>() for co-spherical insphere predicates
    • Two-stage exact det sign: det_errbound() fast filter + Bareiss exact
    • 18 unit tests covering 2D–5D degenerate configurations
    • No coordinate modification — purely a decision rule

    Part of AdaptiveKernel implementation (B2 of #233).

  • [breaking] Remove use_robust_on_ambiguous override from flip repair #228 #255 faf84de

  • feat!: remove use_robust_on_ambiguous override from flip repair #228

    Remove the use_robust_on_ambiguous flag and robust_insphere_sign() fallback from flip repair. With AdaptiveKernel providing exact+SoS predicates, the old tolerance-based override was the root cause of flip-repair non-convergence.

    • Remove override blocks in k2/k3 violation functions
    • Remove both_positive_artifact workaround
    • Simplify repair attempts from 3 to 2 (FIFO then LIFO)
    • Remove used_robust_predicates from DelaunayRepairDiagnostics
    • Fix pre-existing clippy match_same_arms in matrix.rs/measures.rs
  • [breaking] Apply SoS to AdaptiveKernel::orientation() and tolerate degener… #264 526b39e

  • feat: apply SoS to AdaptiveKernel::orientation() and tolerate degenerate cells #263

    • Apply Simulation of Simplicity to AdaptiveKernel::orientation() so degenerate ties are broken deterministically (returns ±1 for all distinct-point inputs, 0 only for identical f64 points)

    • Tolerate degenerate cells (zero exact determinant) in orientation normalization after flip-based Delaunay repair:

      • promote_cells_to_positive_orientation: skip instead of error
      • cells_require_positive_orientation_promotion: skip instead of error
      • canonicalize_global_orientation_sign: scan past degenerate cells
      • validate_geometric_cell_orientation: only flag negative orientation
    • Add Hilbert-sort preprocessing dedup (Phase 4 in order_vertices_hilbert) that removes vertices mapping to the same quantized grid cell

    • Add per-cell coordinate uniqueness validation (DuplicateCoordinatesInCell variant, CellCoordinateUniqueness invariant kind)

    • Document three-layer duplicate vertex handling strategy in docs/numerical_robustness_guide.md

    • Update convex_hull and quality tests to accept InsufficientVertices alongside GeometricDegeneracy for extreme-scale dedup inputs

    • Add macro-generated dedup integration tests covering 2D–5D

    • feat: normalize SoS orientation callers and harden Hilbert dedup #263

    • Refactor evaluate_cell_orientation_for_context to use robust_orientation as the sole oracle, removing the duplicate kernel call

    • Add robust_orientation guard in apply_bistellar_flip_with_k to reject degenerate cells before kernel invocation (fixes 4D perf regression)

    • Switch find_boundary_edge_split_facet to robust_orientation for true collinearity/degeneracy detection instead of kernel SoS

    • Use robust_orientation sign directly in build_initial_simplex, removing unused kernel variable and redundant orientation call

    • Extract hilbert_dedup_sorted from order_vertices_hilbert so the ordering function is pure; apply dedup in preprocess_vertices_for_construction after Hilbert sort regardless of DedupPolicy (safety-critical for SoS identical-point failures)

    • Add validate_cell_coordinate_uniqueness to validation_report with CoordinateScalar bound

    • Fix quantization bits table in numerical_robustness_guide.md (2D/3D capped at 31 bits, not 64/42)

    • Update rustdoc for cells_require_positive_orientation_promotion to reflect skip-degenerate semantics

    • Trim inaccurate near-duplicate claim from dedup_batch_construction docs

    • Add SoS identical-points regression tests (2D–5D) verifying AdaptiveKernel returns 0 when all cofactors vanish

    • Add standalone hilbert_dedup_sorted edge-case tests

    • refactor: address review comments for SoS orientation normalization #263

    • Propagate robust_orientation errors in apply_bistellar_flip_with_k instead of silently ignoring Err via matches!

    • Switch k2_flip_would_create_degenerate_cell from kernel orientation to robust_orientation so degenerate cells are detected under SoS; remove unused kernel parameter

    • Delegate AdaptiveKernel::orientation() to robust_orientation for layers 1+2, eliminating duplicated matrix build + exact_det_sign logic

    • Remove unused kernel parameter from find_boundary_edge_split_facet and update call site in extend_hull

    • Update stale rustdoc: validate_geometric_cell_orientation and build_initial_simplex now reference robust_orientation instead of kernel predicates / K::default()

    • Add vkeys[i] == vkeys[j] guard in validate_cell_coordinate_uniqueness to avoid misleading error when vertex keys are duplicated

    • Replace broad assert!(result.is_err()) in all-duplicates test with precise InsufficientVertices match

    • Decouple many-duplicates test from magic $dim + 2 by using the helper's returned distinct count

    • Update docs: numerical_robustness_guide, KNOWN_ISSUES_4D, ORIENTATION_SPEC, validation.md

    • refactor: remove unused kernel parameter from flip-application functions #263

    • Replace K: Kernel<D> with T: CoordinateScalar in 7 functions: apply_bistellar_flip_with_k, apply_bistellar_flip, apply_bistellar_flip_dynamic, apply_bistellar_flip_k2/k3/k1, apply_bistellar_flip_k1_inverse

    • Update ~40 call sites across flips.rs, triangulation/flips.rs, delaunay_triangulation.rs

    • Delete ZeroOrientationKernel2d test struct (now redundant)

    • Update ORIENTATION_SPEC.md flip pseudocode to match new signatures

    • Address review round 3 comments: guard coordinate uniqueness validation, add #[non_exhaustive] to InvariantKind, extract generic flip_would_create_degenerate_cell, add nitpick tests

    • fix!: remove Morton and Lexicographic ordering, unconditional Hilbert dedup, strengthen flip assertions #263

    • Strengthen assert_context_has_nonzero_robust_orientation to explicitly fail on Err variants instead of only checking for DEGENERATE

    • Merge hilbert_dedup_sorted into order_vertices_hilbert via dedup_quantized parameter, eliminating redundant re-quantization

    • Make Hilbert quantized dedup unconditional (not gated on DedupPolicy)

    • Update DedupPolicy docs to frame as performance-tuning knob

    • Remove InsertionOrderStrategy::Morton variant and all supporting code (~100 lines: morton_bits_per_coord, morton_code, order_vertices_morton)

    • Remove InsertionOrderStrategy::Lexicographic variant and associated tests; keep internal order_vertices_lexicographic as Hilbert fallback

    • Remove Morton/Lexicographic doc references from README, invariants.md, numerical_robustness_guide.md, and triangulation_generation.rs

  • Identity-based SoS perturbation via canonical vertex ordering (… #272 a125d98

  • feat: identity-based SoS perturbation via canonical vertex ordering #266

    • Add canonical_points module with sorted_cell_points and sorted_facet_points_with_extra helpers that sort vertices by VertexKey identity before resolving to points

    • Update all 5 kernel call sites (locate, flips, triangulation) to use canonical ordering for consistent SoS tie-breaking

    • Fix misleading error variant in find_conflict_region BFS traversal (InvalidStartCell → CellDataAccessFailed)

    • Add 6 unit tests including 2D/3D permutation-invariance tests

    • feat: identity-based SoS perturbation via canonical vertex ordering #266

    • Add canonical_points module with sorted_cell_points and sorted_facet_points_with_extra helpers that sort vertices by VertexKey identity before resolving to points

    • Update all 5 kernel call sites (locate, flips, triangulation) to use canonical ordering for consistent SoS tie-breaking

    • Fix misleading error variant in find_conflict_region BFS traversal (InvalidStartCell → CellDataAccessFailed)

    • Document canonical ordering convention in numerical_robustness_guide

    • Add canonical_points.rs to code_organization.md util listing

    • Add 14 new tests: permutation invariance (2D all 6, 3D all 24), canonical ordering helpers, and error-path coverage for is_point_outside_facet and find_conflict_region

    • Changed: reuse canonical cell ordering for query simplex construction

    Optimize the construction of the query simplex by reusing the canonical vertex ordering of the cell. This ensures consistent identity-based SoS perturbation and includes a safety check to prevent out-of-range facet index access.

  • Add ExactPredicates marker trait for flip repair type safety (#… #273 4877151

  • feat: add ExactPredicates marker trait for flip repair type safety #257

    • Define ExactPredicates marker trait in kernel.rs, implemented for AdaptiveKernel and RobustKernel but not FastKernel

    • Add K: ExactPredicates bound to flip repair entry points in flips.rs and propagate through delaunay_triangulation.rs, builder.rs, and triangulation_generation.rs

    • Add compile_fail doctest asserting FastKernel cannot satisfy the bound, plus positive compile-time assertion tests for the other kernels

    • Update test code to use AdaptiveKernel where DelaunayTriangulation construction or flip repair is invoked

    • Document the trait and its design rationale in numerical_robustness_guide.md

  • Add progressive scale-invariant perturbation #209 #274 4c35028

  • feat: add progressive scale-invariant perturbation #209

    • Replace hardcoded perturbation retry count with DEFAULT_PERTURBATION_RETRIES = 3 (4 total attempts)

    • Apply 10^(attempt-1) progressive scaling factor per retry, spanning 4 orders of magnitude (e.g. 1e-8 → 1e-5 for f64)

    • Update debug messages with computed max perturbation values

    • Update numerical robustness guide documentation

    • Add tests for scale invariance, f32 base epsilon, and constant value

    • Remove 32 redundant where K::Scalar: CoordinateScalar clauses (implied by impl-level bounds)

    • fix: correct perturbation exponent off-by-one and improve test coverage #209

    • Fix progressive scale factor: use 10^attempt instead of 10^(attempt-1) so the retry ladder reaches 1e-5 × local_scale (was capped at 1e-6), matching the documented "4 orders of magnitude" range

    • Apply the same correction to the debug-message exponent computation

    • Update perturbation ladder in numerical_robustness_guide.md to reflect the corrected values (1e-7, 1e-6, 1e-5)

    • Replace test_perturbation_f32_base_epsilon with test_perturbation_epsilon_selection_and_retry: asserts mantissa_digits for both f32 and f64, exercises insert_transactional with on-edge near-degenerate points for both scalar types

    • Add absolute expected counts to test_perturbation_scale_invariance_3d to catch regressions that affect all scales equally

    • Add test_perturbation_retry_and_exhaustion_4d: 4D random points exercise the progressive retry loop body and exhaustion branch

    • Add test_perturbation_retry_seeded_branch_4d: calls insert_transactional directly with perturbation_seed != 0 to cover the seeded sign-selection path

  • [breaking] Improve 4D debug harness diagnostics, add capped repair and regression test #230 #277 0684ec0

Add configurable flip-budget capping, structured debug-harness outcomes, enriched orientation diagnostics, and a seeded 4D regression test.

Flip budget enforcement:

  • Move max_flips check before apply_bistellar_flip in all 5 repair paths (k2, k3, dynamic, inverse) so Some(0) means truly zero flips

  • Change guard from > to >= to eliminate off-by-one

  • Thread max_flips_override through repair_delaunay_with_flips_k2_k3, the robust fallback, heuristic rebuild, and per-insertion repair

    Capped repair API:

  • Add max_flips: Option to DelaunayRepairHeuristicConfig

  • Mark DelaunayRepairHeuristicConfig #[non_exhaustive]

  • Add internal repair_delaunay_with_flips_capped() helper

  • Add DELAUNAY_LARGE_DEBUG_REPAIR_MAX_FLIPS env var to debug harness

    Error taxonomy:

  • Add RepairFailed variant to DelaunayTriangulationValidationError for mutating operations (remove_vertex); fix remove_vertex to use it instead of VerificationFailed (which is for passive validation)

    Orientation diagnostics:

  • Enrich NegativeOrientation error message with vertex keys

  • Add tracing::warn with cell key, UUID, vertex keys, neighbor keys, and orientation sign for negative-orientation cells

    Debug harness:

  • Return DebugOutcome enum instead of panicking (Success, ConstructionFailure, SkippedVertices, RepairNonConvergence, ValidationFailure)

  • Print seed replay command on every abort path

  • Add per-chunk insertion rate (pts/s) in progress output

  • Harness tests now assert on DebugOutcome::Success

Changed

  • Replace panicking calls with error propagation #242 #250 9d640c3

  • refactor: replace panicking calls with error propagation #242

    • Add InternalInconsistency variant to TriangulationConstructionError for internal bookkeeping failures distinct from geometric degeneracy

    • Replace 5 .expect() calls on HashMap lookups in builder.rs periodic quotient reconstruction with ? propagation

    • Reclassify 3 additional internal operations (image vertex removal, neighbor assignment, incident-cell rebuild) from GeometricDegeneracy to InternalInconsistency

    • Replace .expect() on initial_points.take() in triangulation_generation.rs with error propagation

    • Update doc comment from # Panics to # Errors

    • Add single-quote guidance for gh --body in AGENTS.md

  • [breaking] Remove RobustPredicateConfig and config_presets #259 #260 6764bac

  • refactor!: remove RobustPredicateConfig and config_presets #259

    • Delete RobustPredicateConfig struct and config_presets module

    • Remove config parameter from robust_insphere, robust_orientation, adaptive_tolerance_insphere, and verify_insphere_consistency

    • Simplify RobustKernel to a zero-size type (remove config field and with_config constructor, derive Default)

    • Remove config threading from flips.rs, delaunay_validation.rs, and coordinate_conversion_errors.rs

    • Delete tests that only exercised config field values

    • Update numerical_robustness_guide.md: document AdaptiveKernel as the default kernel, remove config_presets references

  • [breaking] Rename TdsValidationError to TdsError #262 #265 99b9810

  • refactor: rename TdsValidationError to TdsError #262

    • Rename TdsValidationError -> TdsError across all source files

    • Remove the type alias that bridged the old name

    • Update all references in production code, tests, and examples

    • Part of error hierarchy orthogonalization (Phase 5)

    • refactor!: make TriangulationValidationError purely Level 3 #262

    Remove the Tds variant from TriangulationValidationError so it contains only Level 3 (topology) errors. TDS-level errors now flow through InvariantError, keeping Levels 1–2 orthogonal from Level 3.

    API changes:

    • is_valid, validate, validate_at_completion, validate_after_insertion now return InvariantError instead of TriangulationValidationError

    • validate_geometric_cell_orientation returns TdsError directly

    • remove_vertex returns InvariantError

    • Add Tds variant to DelaunayTriangulationValidationError

    • TdsMutationError inner field made private; add as_tds_error() and into_inner() accessors

    • Remove From for TriangulationValidationError

    • Add From for InvariantError

  • Simplify trait bounds and re-export secondary maps #282 04ea024

  • Re-export VertexSecondaryMap and CellSecondaryMap in prelude and prelude::collections; update doc examples to use prelude path

    • Replace ~50 vestigial ScalarSummable bounds with CoordinateScalar across geometry and core modules (Sum is never called on T)

    • Remove ~34 redundant K::Scalar: CoordinateScalar where clauses already implied by K: Kernel (associated type bound)

    • Remove 8 redundant [T; D]: Copy + Sized bounds already implied by T: CoordinateScalar (Float → Copy; arrays are always Sized)

    • Keep ScalarSummable trait definition and blanket impl for future use

Fixed

  • Canonicalize positive orientation after bulk construction repair… #261 dec8df9

  • fix: canonicalize positive orientation after bulk construction repair #258

    • Call normalize_and_promote_positive_orientation() in finalize_bulk_construction after the flip-repair block and before topology validation, ensuring the global geometric sign is positive

    • Update #228 regression test to expect PLManifold (was Pseudomanifold) now that orientation is correctly canonicalized

    • Changed: categorize errors during orientation canonicalization

    Distinguish structural InsertionError variants as InternalInconsistency to separate algorithmic bugs from input-related GeometricDegeneracy during post-repair orientation canonicalization. Added topology validation to the issue #228 regression test to ensure manifold parity.

Maintenance

  • [breaking] Replace custom changelog pipeline with git-cliff #247 1b2af41

  • chore!: replace custom changelog pipeline with git-cliff

    Replace ~4,000 lines of custom Python changelog generation (changelog_utils.py, enhance_commits.py) with git-cliff and two focused scripts (~640 lines total):

    • postprocess_changelog.py: lightweight markdown hygiene (MD004, MD007, MD012, MD013, MD030, MD031, MD032, MD040) plus summary section injection (Merged PRs, Breaking Changes)

    • tag_release.py: extract latest version section for git tag messages

    Pipeline changes:

    • cliff.toml: full git-cliff config with conventional commit parsing, PR auto-linking, and Tera template for Keep a Changelog format

    • justfile: new changelog-update, changelog-tag, changelog recipes replacing the old generate-changelog workflow

    • Idempotent output: postprocessor matches markdownlint --fix exactly, so just changelog-update && just fix produces zero diff

    Tooling simplification:

    • Remove mypy in favor of ty (Astral) — mypy's permissive config was catching nothing that ty doesn't already cover

    • Disable markdownlint MD037 (false positives on cron expressions and glob patterns like saturating_*)

  • Replace derive_builder with hand-written VertexBuilder #212 #249 b017b39

  • chore: replace derive_builder with hand-written VertexBuilder #212

    • Add VertexBuilderError enum and VertexBuilder struct with point(), data(), and build() methods in src/core/vertex.rs

    • Remove #[derive(Builder)] and #[builder(...)] attributes from Vertex

    • Remove derive_builder dependency from Cargo.toml and lib.rs

    • All ~30 call sites unchanged — builder API is a drop-in replacement

  • Bump actions/download-artifact from 8.0.0 to 8.0.1 #267 3727781

Bumps actions/download-artifact from 8.0.0 to 8.0.1.

  • Release notes

  • Commits


    updated-dependencies:

  • dependency-name: actions/download-artifact dependency-version: 8.0.1 dependency-type: direct:production update-type: version-update:semver-patch ...

  • Bump tracing-subscriber in the dependencies group #268 7d355f4

Bumps the dependencies group with 1 update: tracing-subscriber.

Updates tracing-subscriber from 0.3.22 to 0.3.23

  • Release notes

  • Commits


    updated-dependencies:

  • dependency-name: tracing-subscriber dependency-version: 0.3.23 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies ...

  • Bump taiki-e/install-action from 2.68.25 to 2.68.33 #269 f7fb663

Bumps taiki-e/install-action from 2.68.25 to 2.68.33.

  • Release notes

  • Changelog

  • Commits


    updated-dependencies:

  • dependency-name: taiki-e/install-action dependency-version: 2.68.33 dependency-type: direct:production update-type: version-update:semver-patch ...

  • Bump actions-rust-lang/setup-rust-toolchain #270 73b8d63

Bumps actions-rust-lang/setup-rust-toolchain from 1.15.3 to 1.15.4.

  • Release notes

  • Changelog

  • Commits


    updated-dependencies:

  • dependency-name: actions-rust-lang/setup-rust-toolchain dependency-version: 1.15.4 dependency-type: direct:production update-type: version-update:semver-patch ...

  • Bump astral-sh/setup-uv from 7.3.1 to 7.5.0 #271 3225d64

Bumps astral-sh/setup-uv from 7.3.1 to 7.5.0.

  • Release notes

  • Commits


    updated-dependencies:

  • dependency-name: astral-sh/setup-uv dependency-version: 7.5.0 dependency-type: direct:production update-type: version-update:semver-minor ...

  • Bump arc-swap from 1.8.2 to 1.9.0 in the dependencies group #278 da93901

Bumps the dependencies group with 1 update: arc-swap.

Updates arc-swap from 1.8.2 to 1.9.0

  • Changelog

  • Commits


    updated-dependencies:

  • dependency-name: arc-swap dependency-version: 1.9.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dependencies ...

  • Bump taiki-e/install-action from 2.68.34 to 2.69.6 #279 6c7c8b1

Bumps taiki-e/install-action from 2.68.34 to 2.69.6.

  • Release notes

  • Changelog

  • Commits


    updated-dependencies:

  • dependency-name: taiki-e/install-action dependency-version: 2.69.6 dependency-type: direct:production update-type: version-update:semver-minor ...

  • Bump codecov/codecov-action from 5.5.2 to 5.5.3 #280 47394f3

Bumps codecov/codecov-action from 5.5.2 to 5.5.3.

  • Release notes

  • Changelog

  • Commits


    updated-dependencies:

  • dependency-name: codecov/codecov-action dependency-version: 5.5.3 dependency-type: direct:production update-type: version-update:semver-patch ...

  • Release v0.7.3 #283 db4ace7

  • chore(release): release v0.7.3

    • Bump version to v0.7.3

    • Update changelog with latest changes

    • Update documentation for release

    • Add performance results for v0.7.3

    • Changed: Update documentation to reflect AdaptiveKernel as default

    Correct outdated references to FastKernel in README examples and internal test comments to match the current default implementation of DelaunayTriangulation.

0.7.2 - 2026-03-10

Merged Pull Requests

  • Release v0.7.2 #246
  • Exact insphere predicates with f64 fast filter #245
  • Use exact-sign orientation in robust_orientation() #244
  • Bump actions/setup-node from 6.2.0 to 6.3.0 #239
  • Bump taiki-e/install-action from 2.68.16 to 2.68.25 #237
  • Use exact arithmetic for orientation predicates #235 #236
  • Switch FastKernel to insphere_lifted and enable LTO #234
  • Deduplicate D<4 repair fallback and improve diagnostics #232
  • Resolve 3D seeded bulk construction orientation convergence failure #228
  • Bump actions-rust-lang/setup-rust-toolchain #226
  • Bump taiki-e/install-action from 2.68.8 to 2.68.16 #225
  • Bump astral-sh/setup-uv from 7.3.0 to 7.3.1 #224
  • Bump actions/upload-artifact from 6 to 7 #223
  • Bump actions/download-artifact from 7.0.0 to 8.0.0 #222
  • Introduce GlobalTopology behavior model adapter #221
  • Enforce coherent orientation as a first-class invariant #219
  • Use bulk Hilbert API in order_vertices_hilbert #218
  • Improve Hilbert curve correctness and add bulk API #207 #216
  • Update docs for DelaunayTriangulationBuilder and toroidal topology #215
  • Feat/210 toroidalspace periodic #213
  • Bump taiki-e/install-action from 2.67.30 to 2.68.8 #211

Added

  • Enforce coherent orientation as a first-class invariant #219 350f614

  • feat(tds): enforce coherent orientation as a first-class invariant

    • add Level 2 coherent-orientation validation via is_coherently_oriented() and OrientationViolation diagnostics
    • preserve/normalize orientation across flips, cavity/neighbor rebuild paths, periodic quotient reconstruction, and vertex-removal retriangulation
    • add orientation coverage in tests/tds_orientation.rs, document the invariant, and update related docs/doctest examples
  • Use exact arithmetic for orientation predicates #235 #236 a62437f

  • feat: use exact arithmetic for orientation predicates #235

    Switch to la-stack v0.2.1 with the exact feature to obtain provably correct simplex orientation via det_sign_exact().

    Orientation predicates:

    • Add orientation_from_matrix() using det_sign_exact() with a finite-entry guard and adaptive-tolerance fallback for non-finite cases

    • simplex_orientation() now delegates to orientation_from_matrix(), eliminating manual tolerance comparison

    insphere_lifted optimization:

    • Reuse the relative-coordinate block already in the lifted matrix for orientation instead of re-converting all D+1 simplex points

    • Combine the dimension-parity sign and (-1)^D orientation correction into a single simplified formula: det_norm = −det × rel_sign

    • Remove dimension_is_even, parity_sign, and orient_sign variables

    Stack-matrix dispatch cleanup:

    • Reduce MAX_STACK_MATRIX_DIM from 18 to 7 (matching tested D≤5 range)
    • Replace 19 hand-written match arms with a compact repetition macro
    • Add matrix_zero_like() helper for creating same-sized zero matrices within macro-dispatched blocks without nested dispatch
  • Use exact-sign orientation in robust_orientation() #244 2869cfe

  • feat: use exact-sign orientation in robust_orientation()

    Replace f64 determinant + adaptive tolerance in robust_orientation() with orientation_from_matrix(), which uses det_sign_exact() for provably correct sign classification on finite inputs.

    • Make orientation_from_matrix pub(crate) so robust_predicates can call it
    • Remove adaptive_tolerance / manual threshold comparison from robust_orientation()
    • Add near-degenerate 2D and 3D tests that exercise the exact-sign path
  • Exact insphere predicates with f64 fast filter #245 fed429f

  • feat: exact insphere predicates with f64 fast filter

    • Add insphere_from_matrix helper in predicates.rs using a 3-stage approach: f64 fast filter → exact Bareiss → f64 fallback

    • Update insphere, insphere_lifted, adaptive_tolerance_insphere, and conditioned_insphere to use exact-sign path

    • Remove dead interpret_insphere_determinant function

    • Add near-cocircular and near-cospherical exact-sign tests

    • Switch convex hull performance test to FastKernel to avoid 5×5 exact Bareiss on cospherical inputs

    • Document lint suppression preference (expect over allow) in docs/dev/rust.md

Changed

  • Feat/210 toroidalspace periodic #213 c172796

  • Introduce GlobalTopology behavior model adapter #221 e56265b

  • refactor(topology): introduce GlobalTopology behavior model adapter

    • add internal GlobalTopologyModel abstraction and concrete models (euclidean, toroidal, spherical scaffold, hyperbolic scaffold)

    • add GlobalTopologyModelAdapter and GlobalTopology::model() bridge to keep GlobalTopology<D> as the stable public metadata/config surface

    • migrate triangulation orientation lifting to model-based behavior calls

    • migrate builder toroidal validation/canonicalization to model-based calls

    • update topology/code-organization docs for metadata-vs-behavior split

    • Changed: Improve global topology model validation and consistency

    Enhances periodic cell offset validation by leveraging supports_periodic_facet_signatures. Introduces robust checks for non-finite coordinates during point canonicalization in toroidal models, preventing invalid states. Refactors the GlobalTopologyModelAdapter to consistently delegate all trait method calls to specific underlying topology model implementations, improving maintainability. Updates error messages for clarity during topology validation. Optimizes periodic_domain to return a reference, avoiding data copies. Adjusts internal module visibility and re-exports ToroidalConstructionMode to prelude.

    • refactor: add comprehensive documentation and tests for GlobalTopologyModel

    Enhance the global_topology_model module with extensive documentation and unit test coverage:

    Documentation improvements:

    • Add module-level overview explaining trait abstraction and concrete implementations
    • Enhance trait method documentation for periodic_domain() and supports_periodic_facet_signatures()
    • Document public methods: ToroidalModel::new(), GlobalTopology::model(), GlobalTopologyModelAdapter::from_global_topology()

    Test coverage (41 tests added):

    • EuclideanModel: comprehensive trait method coverage
    • SphericalModel and HyperbolicModel: scaffolded model behavior
    • GlobalTopologyModelAdapter: delegation verification for all trait methods
    • Error handling: zero/negative/infinite/NaN periods, non-finite coordinates
    • Edge cases: large coordinates, exact periods, zero/large offsets, f32 scalars, 5D

    Code quality improvements:

    • Fix nitpick: delegate kind() and allows_boundary() in GlobalTopologyModelAdapter

    • Fix nitpick: add NaN coordinate test for canonicalize_point_in_place

    • Fix nitpick: add finiteness validation to lift_for_orientation with test

    • Apply cargo fmt formatting

    • Fix clippy warnings (float_cmp, suboptimal_flops)

    • Changed: Optimize facet vertex processing and improve periodic facet key determinism

    Moves the facet vertex buffer initialization to only execute on the non-periodic path, avoiding unnecessary work for periodic cells and improving efficiency.

    Enhances the periodic_facet_key_from_lifted_vertices function to ensure deterministic sorting by considering both the vertex key value and its periodic offset. This prevents inconsistencies when multiple lifted vertices share the same base key.

  • Make Codacy analysis step continue on error 24a1ad6

Configures the Codacy analysis step in the CI workflow to continue on error. This prevents the entire workflow from failing due to intermittent issues with Codacy's opengrep/semgrep engine, ensuring subsequent steps, like SARIF report uploads, can still execute. This improves CI robustness. This is an internal CI workflow improvement.

  • Enhance Codacy CI reliability and performance b980630

Disables the Semgrep engine within Codacy due to intermittent failures and excessively long runtimes observed in CI. Additionally, adds a timeout to the Codacy analysis step to prevent hung analyzers from consuming the full job timeout, improving overall workflow stability and resource utilization. This is an internal CI/CD change.

  • Update MSRV to 1.93.1 and sysinfo dependency a2a42d5

Increment the Minimum Supported Rust Version (MSRV) to 1.93.1 across all project configuration and documentation. This updates the pinned Rust toolchain, Cargo.toml settings, and clippy.toml MSRV, ensuring consistency and compatibility. Additionally, the sysinfo dependency is updated to 0.38.3. This is an internal maintenance change.

  • Improve 3D incremental prefix debug harness 515dade

Refactors the run_incremental_prefix_3d function to use a batch construction method, aligning it with other large-scale debug tests and simplifying logic. This enhances initial triangulation robustness and error reporting by capturing detailed statistics from construction failures.

Adds new environment variables, DELAUNAY_LARGE_DEBUG_PREFIX_MAX_PROBES and DELAUNAY_LARGE_DEBUG_PREFIX_MAX_RUNTIME_SECS, to control the bisection process, enabling more efficient and targeted debugging of failure points.

Updates the env_usize helper to correctly parse environment variables provided in a key=value format, improving test configuration flexibility.

  • Deduplicate D<4 repair fallback and improve diagnostics #232 14ff1b3

  • refactor: deduplicate D<4 repair fallback and improve diagnostics

    • Extract try_d_lt4_global_repair_fallback helper to eliminate duplicated repair-or-abort logic between the stats and non-stats branches of insert_remaining_vertices_seeded.

    • Enrich the soft post-condition diagnostic in normalize_and_promote_positive_orientation with the count of residual negative cells and a sample of up to 5 CellKeys.

    • Add test_construction_options_global_repair_fallback_toggle unit test verifying the without_global_repair_fallback builder toggle.

    • fix: switch default kernel from FastKernel to RobustKernel

    • Change all convenience constructors (new, new_with_topology_guarantee, new_with_options, empty, etc.) to use RobustKernel

    • Change builder build() default to RobustKernel

    • Add RobustKernel to prelude::query exports

    • Update type annotations across tests, benches, and doc tests

    • Preserve FastKernel in tests that explicitly test it via with_kernel()

    • Changed: use RobustKernel for random generation and 3D examples

    Update examples and random triangulation utilities to use RobustKernel, aligning them with the core library's default. FastKernel is now explicitly documented as unreliable for 3D workloads due to floating- point precision issues in near-degenerate configurations. This change also adds topological admissibility checks for flip-based repairs and improves error diagnostics for per-insertion failures.

Documentation

  • Update docs for DelaunayTriangulationBuilder and toroidal topology #215 a90526c

  • docs: update docs for DelaunayTriangulationBuilder and toroidal topology

    Update all documentation to reflect that toroidal topology is fully implemented and accessible via DelaunayTriangulationBuilder.

    Documentation updates:

    • docs/topology.md: Replace "future plumbing" language with current implementation status; add complete toroidal triangulation examples

    • docs/api_design.md: Split Builder API section into simple (::new()) vs advanced (Builder) construction with toroidal examples

    • docs/workflows.md: Add new section for toroidal/periodic triangulations with practical examples and construction modes

    • docs/code_organization.md: Update file tree with missing files (invariants.md, workflows.md, tests, geometry/util/ subdirectory)

    • README.md: Add toroidal feature to Builder API section with example

    Code updates:

    • src/lib.rs: Export TopologyKind and GlobalTopology from prelude::triangulation for ergonomic imports

    • src/core/delaunay_triangulation.rs: Add "Advanced Configuration" section to ::new() documentation mentioning Builder for toroidal and custom options; fix redundant rustdoc link

    • examples/topology_editing_2d_3d.rs: Migrate to DelaunayTriangulationBuilder

    • benches/profiling_suite.rs: Migrate to DelaunayTriangulationBuilder

    • Changed: Adopt DelaunayTriangulationBuilder and update related documentation

    Migrates benchmark and example code to consistently use the DelaunayTriangulationBuilder for creating triangulations. This reflects the full implementation and accessibility of toroidal topology via the builder, and updates documentation across various sections (API design, workflows, topology) to guide users on its proper and advanced configuration. Includes internal exports for ergonomic usage.

Fixed

  • Ensure deterministic sorting and enforce coherent orientation c0e4d4f

Resolves multiple issues to ensure deterministic behavior and strong invariants across the triangulation data structure.

Stabilizes vertex ordering, particularly for Hilbert curve sorts, by refining tie-breaking, error handling, and fallback logic. This prevents non-deterministic results and corrects inverse permutation calculations, addressing previously identified breaking changes related to sorting.

Enforces a consistent positive geometric orientation for all cells throughout the triangulation lifecycle, making coherent orientation a first-class invariant. This fixes 4D construction failures and improves periodic self-neighbor validation by handling lifted coordinates.

Enhances the global topology model, especially for toroidal domains, by improving validation, canonicalization, and periodic facet key derivation. This addresses edge cases related to non-finite coordinates, zero/negative periods, and ensures consistent behavior.

  • Resolve 3D seeded bulk construction orientation convergence failure #228 c181f28

  • Soften post-condition in normalize_and_promote_positive_orientation: add canonicalize_global_orientation_sign before the promote loop to prevent oscillation; demote the residual negative-orientation check from a hard error to a diagnostic log so near-degenerate but structurally valid simplices no longer abort insertion.

    • Replace enlarged local repair fallback with global repair_delaunay_with_flips_k2_k3 when D<4 per-insertion local repair cycles on co-spherical FP configurations. The multi-attempt global repair uses robust predicates and alternate queue orders to break cycling.

    • Gate global repair fallback on a new ConstructionOptions field (use_global_repair_fallback, default true) threaded through the build chain via DelaunayInsertionState. The periodic builder disables it (.without_global_repair_fallback()) so global repair cannot disrupt the image-point topology; the existing 24-attempt shuffle retry finds a working vertex ordering instead.

Maintenance

  • Bump taiki-e/install-action from 2.67.30 to 2.68.8 #211 a133758

Bumps taiki-e/install-action from 2.67.30 to 2.68.8.

  • Release notes

  • Changelog

  • Commits


    updated-dependencies:

  • dependency-name: taiki-e/install-action dependency-version: 2.68.8 dependency-type: direct:production update-type: version-update:semver-minor ...

  • Update docs, remove old files 18679dc

  • Bump actions-rust-lang/setup-rust-toolchain #226 3e2cd26

Bumps actions-rust-lang/setup-rust-toolchain from 1.15.2 to 1.15.3.

  • Release notes

  • Changelog

  • Commits


    updated-dependencies:

  • dependency-name: actions-rust-lang/setup-rust-toolchain dependency-version: 1.15.3 dependency-type: direct:production update-type: version-update:semver-patch ...

  • Bump actions/download-artifact from 7.0.0 to 8.0.0 #222 c172f09

Bumps actions/download-artifact from 7.0.0 to 8.0.0.

  • Release notes

  • Commits


    updated-dependencies:

  • dependency-name: actions/download-artifact dependency-version: 8.0.0 dependency-type: direct:production update-type: version-update:semver-major ...

  • Bump taiki-e/install-action from 2.68.8 to 2.68.16 #225 25a09a4

Bumps taiki-e/install-action from 2.68.8 to 2.68.16.

  • Release notes

  • Changelog

  • Commits


    updated-dependencies:

  • dependency-name: taiki-e/install-action dependency-version: 2.68.16 dependency-type: direct:production update-type: version-update:semver-patch ...

  • Bump actions/upload-artifact from 6 to 7 #223 0a25bfa

Bumps actions/upload-artifact from 6 to 7.

  • Release notes

  • Commits


    updated-dependencies:

  • dependency-name: actions/upload-artifact dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major ...

  • Bump astral-sh/setup-uv from 7.3.0 to 7.3.1 #224 1533402

Bumps astral-sh/setup-uv from 7.3.0 to 7.3.1.

  • Release notes

  • Commits


    updated-dependencies:

  • dependency-name: astral-sh/setup-uv dependency-version: 7.3.1 dependency-type: direct:production update-type: version-update:semver-patch ...

  • Bump taiki-e/install-action from 2.68.16 to 2.68.25 #237 abe7925

Bumps taiki-e/install-action from 2.68.16 to 2.68.25.

  • Release notes

  • Changelog

  • Commits


    updated-dependencies:

  • dependency-name: taiki-e/install-action dependency-version: 2.68.25 dependency-type: direct:production update-type: version-update:semver-patch ...

  • Bump actions/setup-node from 6.2.0 to 6.3.0 #239 eb0000b

Bumps actions/setup-node from 6.2.0 to 6.3.0.

  • Release notes

  • Commits


    updated-dependencies:

  • dependency-name: actions/setup-node dependency-version: 6.3.0 dependency-type: direct:production update-type: version-update:semver-minor ...

  • Release v0.7.2 #246 2c7d26d

  • chore(release): release v0.7.2

    • Bump version to v0.7.2

    • Update changelog with latest changes

    • Update documentation for release

    • Add performance results for v0.7.2

    • Changed: update robustness guide and fix release documentation

    Clarify evaluation stages for orientation and insphere predicates, detailing the use of Shewchuk-style error bounds for D ≤ 4. Correct a step reference in the release guide. This is an internal change.

Performance

  • Improve Hilbert curve correctness and add bulk API #207 #216 2d198e7

  • perf: improve Hilbert curve correctness and add bulk API #207

    Implements correctness fixes, API improvements, and comprehensive testing for the Hilbert space-filling curve ordering utilities.

    Correctness Fixes

    • Add debug_assert guards in hilbert_index_from_quantized for parameter validation (bits range and overflow checks)

    • Fix quantization truncation bias by changing from NumCast::from(scaled) to scaled.round().to_u32() for fairer spatial distribution across grid cells, improving point ordering quality

    API Design

    • Add HilbertError enum with InvalidBitsParameter, IndexOverflow, and DimensionTooLarge variants for proper error handling

    • Implement hilbert_indices_prequantized() returning Result<Vec, HilbertError> for bulk processing of pre-quantized coordinates

    • Bulk API avoids redundant quantization computation, significantly improving performance for large insertion batches

    Testing

    • Add 4D continuity test verifying Hilbert curve property on 256-point grid (bits=2)

    • Add quantization rounding distribution test validating fair cell assignment

    • Add 5 comprehensive tests for prequantized API covering success cases, empty input, and all error conditions

    • All 17 Hilbert-specific tests pass (11 existing + 6 new)

    Known Issue

    Temporarily ignore repair_fallback_produces_valid_triangulation test as the rounding change affects insertion order, exposing a latent geometric degeneracy issue in triangulation construction. This is properly documented and tracked under issue #204 for investigation.

    • Added: Explicitly handle zero-dimensional inputs in Hilbert index calculation

    Ensures correct behavior for hilbert_indices_prequantized when the dimensionality D is zero. In such a space, all points map to the single origin, and their Hilbert curve index is always 0. This change adds an early return for this specific edge case.

  • Use bulk Hilbert API in order_vertices_hilbert #218 4782905

  • perf: use bulk Hilbert API in order_vertices_hilbert

    Refactored order_vertices_hilbert to use the bulk hilbert_indices_prequantized API instead of calling hilbert_index individually for each vertex. This eliminates redundant parameter validation (N validations → 1 validation for N vertices).

  • Switch FastKernel to insphere_lifted and enable LTO #234 91e290f

  • perf: switch FastKernel to insphere_lifted and enable LTO

    Switch FastKernel::in_sphere() to use insphere_lifted() for 5.3x speedup in 3D. Add release profile optimization with thin LTO and codegen-units=1.

    Benchmarks across dimensions (2D-5D):

    • insphere_lifted is 5.3x faster in 3D (15.5 ns vs 81.7 ns)
    • Random query test: 3.75x faster (20.0 µs vs 75.0 µs for 1000 queries)
    • insphere_lifted consistently fastest across all dimensions

    Performance gains attributed to la-stack v0.2.0's closed-form determinants for D=1-4.

0.7.1 - 2026-02-20

Merged Pull Requests

  • Release v0.7.1 #205
  • Prevents timeout in 4D bulk construction #203
  • Bump taiki-e/install-action from 2.67.26 to 2.67.30 #202
  • Bump the dependencies group with 3 updates #201
  • Feat/ball pointgen and debug harness #200
  • Ci/perf baselines by tag #199
  • Refactors changelog generation to use git-cliff #198
  • Bump astral-sh/setup-uv from 7.2.1 to 7.3.0 #196
  • Bump taiki-e/install-action from 2.67.18 to 2.67.26 #195
  • Improves flip algorithm with topology index #194
  • Removes CoordinateScalar bound from Cell, Tds, Vertex #193
  • Moves TopologyEdit to triangulation::flips #192
  • Correctly wires neighbors after K2 flips #191
  • Use borrowed APIs in utility functions #190
  • Add ScalarSummable/ScalarAccumulative supertraits #189
  • Refactors point access for efficiency (internal) #187
  • Corrects kernel parameter passing in triangulation #186
  • Examples to error and struct definitions #185
  • Validates random triangulations for Euler consistency #184
  • Validates ridge links locally after Delaunay repair #183
  • Bump astral-sh/setup-uv from 7.2.0 to 7.2.1 #182
  • Bump taiki-e/install-action from 2.67.17 to 2.67.18 #181
  • Stabilizes Delaunay property tests with bistellar flips #180
  • Bump taiki-e/install-action from 2.66.1 to 2.67.11 #177
  • Bump actions/checkout from 6.0.1 to 6.0.2 #176
  • Bump actions/setup-node from 6.1.0 to 6.2.0 #175
  • Feature/bistellar flips #172

Added

  • Examples to error and struct definitions #185 a1bce55

  • Added: Examples to error and struct definitions

    Adds code examples to various error enums and struct definitions to improve documentation and provide usage guidance.

    This change enhances the discoverability and understanding of various components, such as AdjacencyIndexBuildError, BistellarFlipKind, FlipDirection, FlipError, FlipInfo, TriangleHandle, RidgeHandle, DelaunayRepairStats, RepairQueueOrder, DelaunayRepairDiagnostics, DelaunayRepairError, HullExtensionReason, InsertionError, LocateResult, LocateError, ConflictError, LocateFallbackReason, LocateFallback, LocateStats, CellValidationError, EdgeKey, FacetError, TopologicalOperation, RepairDecision, InsertionResult, InsertionStatistics, TriangulationConstructionState, TdsConstructionError, DelaunayValidationError, DelaunayRepairPolicy, DelaunayRepairHeuristicConfig, DelaunayRepairHeuristicSeeds, DelaunayRepairOutcome, DelaunayCheckPolicy, UuidValidationError, VertexValidationError, ConvexHullValidationError, ConvexHullConstructionError, MatrixError, InSphere, Orientation, QualityError, ConsistencyResult, CoordinateConversionError, CoordinateValidationError, CircumcenterError, SurfaceMeasureError, RandomPointGenerationError and ValueConversionError to make the crate easier to use.

    • Changed: Improves examples and updates doc tests

    Updates doc tests to use clearer examples and more idiomatic syntax, enhancing code readability and maintainability. Modifies BistellarFlipKind to use a getter method. Addresses issues identified during documentation review. (internal)

  • Add ScalarSummable/ScalarAccumulative supertraits #189 abdeeb2

  • feat(geometry): add ScalarSummable/ScalarAccumulative supertraits

    • Add ScalarSummable (CoordinateScalar + Sum) and ScalarAccumulative (CoordinateScalar + AddAssign + SubAssign + Sum)
    • Refactor repeated scalar bounds across geometry/core modules to use the new supertraits
    • Allow “supertrait(s)” in cspell
  • Document geometric and topological invariants 0283bf0

Adds invariants.md to document the theoretical background and rationale for the topological and geometric invariants enforced by the delaunay crate. This includes simplicial complexes, PL-manifolds, link-based validation, insertion strategies, and convergence considerations. Updates README.md and lib.rs to reference the new document. Also adds a examples/README.md file.

Changed

  • Feature/bistellar flips #172 66c7028

  • Refactors point access for efficiency (internal) #187 8020065

  • Changed: Refactors point access for efficiency (internal)

    Simplifies vertex coordinate access using .coords() instead of .into(), improving code clarity and potentially performance. This change is internal, affecting predicate calculations and geometric algorithms. Also, moves the issue 120 investigation document to the archive.

  • Use borrowed APIs in utility functions #190 bee065b

  • Changed: Use borrowed APIs in utility functions

    Updates into_hashmap, dedup_vertices_exact, dedup_vertices_epsilon, and filter_vertices_excluding functions to accept slices instead of vectors, improving performance by avoiding unnecessary cloning.

    This aligns with the Rust agent's preference for borrowed APIs, taking references as arguments and returning borrowed views when possible, and only taking ownership when required.

  • Moves TopologyEdit to triangulation::flips #192 c491bb9

  • Changed: Moves TopologyEdit to triangulation::flips

    Moves the TopologyEdit trait to triangulation::flips and renames it to BistellarFlips.

    This change involves updating imports and references throughout the codebase and documentation to reflect the new location and name of the trait.

    • Changed: Refactors prelude modules for clarity (internal)

    Streamlines the prelude modules to provide clearer and more focused exports for common triangulation tasks. This change affects import statements in documentation and examples, requiring more specific paths for certain types.

    • Removed: Topology validation prelude module

    Removes the redundant topology validation prelude module.

    Moves its contents into the main topology prelude, simplifying module structure and reducing code duplication. This change internally refactors the prelude modules for better organization.

  • Removes CoordinateScalar bound from Cell , Tds , Vertex #193 e69f3d1

  • Changed: Removes CoordinateScalar bound from Cell, Tds, Vertex

    Relaxes trait bounds on Cell, Tds, and Vertex structs by removing the CoordinateScalar requirement.

    This change prepares the triangulation data structure for combinatorial operations independent of geometry. The validate method in Tds now requires CoordinateScalar to perform coordinate validation, where applicable. (Internal change).

    • Changed: Clarifies Vertex constraints and moves point

    Clarifies the Vertex struct's constraints, emphasizing CoordinateScalar requirement for geometric operations and serialization but allowing combinatorial use without it.

    Moves the point method definition to ensure consistent API presentation. (Internal refactoring, no functional change).

  • Improves flip algorithm with topology index #194 c4e37ed

  • Changed: Improves flip algorithm with topology index

    Improves flip algorithm by introducing a topology index to efficiently check for duplicate cells and non-manifold facets. This avoids redundant scans of the triangulation data structure, especially during repair operations, by pre-computing and storing facet and cell signatures. This change is internal.

  • Updates typos-cli installation in CI workflow 6168e83

Updates the typos-cli installation in the CI workflow to use the taiki-e/install-action for simpler and more reliable installation. This aligns with the switch from cspell to typos in the codebase.

Documentation

  • Refresh docs and add workflows guide 695e9a0

  • Add a new workflows guide covering Builder/Edit API usage, topology guarantees, and repair

    • Wire README into doctests and refresh crate-level docs/examples (simplify type annotations, link to workflows)
    • Update README Features + references (kernels, insertion ordering, construction options, validation/repair)
    • Reorganize docs index and archive historical/roadmap material; refresh topology/robustness/validation guides
    • Replace debug eprintln! with tracing in Hilbert utilities/tests
    • Tweak spell-check + release docs (typos-cli, rename handling, release steps) and update CHANGELOG

Fixed

  • Stabilizes Delaunay property tests with bistellar flips #180 e3bd4bf

  • Fixed: Stabilizes Delaunay property tests with bistellar flips

    Enables previously failing Delaunay property tests by implementing bistellar flips for robust Delaunay repair. Includes automatic repair and fast validation.

    Updates MSRV to 1.93.0.

  • Validates ridge links locally after Delaunay repair #183 7bc4792

  • Fixed: Validates ridge links locally after Delaunay repair

    Addresses potential topology violations (non-manifold configurations) introduced by flip-based Delaunay repair by validating ridge links for affected cells post-insertion. This prevents committing invalid triangulations and surfaces topology validation failures as insertion errors, enabling transactional rollback.

  • Validates random triangulations for Euler consistency #184 72eb272

Ensures that random triangulations satisfy Euler characteristic validation to prevent construction errors or invalid classifications.

Adds a validation function to check topology/Euler validity after triangulation construction or robust fallback attempts, catching potential issues that can lead to incorrect results. Removes redundant validation checks.

  • Corrects kernel parameter passing in triangulation #186 df3c490

  • Fixed: Corrects kernel parameter passing in triangulation

    Addresses an issue where the kernel was being passed by value instead of by reference in the Delaunay triangulation construction. This change ensures that the kernel is correctly accessed and used, preventing potential errors and improving reliability. The fix involves modifying the with_kernel method signatures and call sites to accept a kernel reference instead of a kernel value. This affects benchmark code, documentation, examples, and internal code.

  • Correctly wires neighbors after K2 flips #191 5ab686c

  • Fixed: Correctly wires neighbors after K2 flips

    Fixes an issue where external neighbors across the cavity boundary were not being correctly rewired after a K2 flip.

    Introduces external_facets_for_boundary to collect the set of external facets that are shared with the flip cavity boundary, and then uses these to correctly wire up neighbors.

    Adds a test case to verify that external neighbors are correctly rewired after the flip, ensuring that the triangulation remains valid and consistent. Refs: refactor/wire-cavity-neighbors

    • Added: K=3 flip rewiring test

    Adds a test to verify correct rewiring of external neighbors after a k=3 flip. This validates the boundary handling and neighbor update logic in the bistellar flip implementation.

    This test constructs an explicit k=3 ridge-flip fixture and checks neighbor rewiring.

  • Prevents timeout in 4D bulk construction #203 b071fb7

  • Fixed: Prevents timeout in 4D bulk construction

    Addresses a timeout issue in 4D bulk construction by implementing per-insertion local Delaunay repair (soft-fail) during bulk construction to prevent violation accumulation, which slows down the global repair process. Also adds a hard wall-clock time limit to the test harness.

Maintenance

  • Bump actions/setup-node from 6.1.0 to 6.2.0 #175 8d15114

Bumps actions/setup-node from 6.1.0 to 6.2.0.

  • Release notes

  • Commits


    updated-dependencies:

  • dependency-name: actions/setup-node dependency-version: 6.2.0 dependency-type: direct:production update-type: version-update:semver-minor ...

  • Bump actions/checkout from 6.0.1 to 6.0.2 #176 c703f94

Bumps actions/checkout from 6.0.1 to 6.0.2.

  • Release notes

  • Commits


    updated-dependencies:

  • dependency-name: actions/checkout dependency-version: 6.0.2 dependency-type: direct:production update-type: version-update:semver-patch ...

  • Bump taiki-e/install-action from 2.66.1 to 2.67.11 #177 92292e0

Bumps taiki-e/install-action from 2.66.1 to 2.67.11.

  • Release notes

  • Changelog

  • Commits


    updated-dependencies:

  • dependency-name: taiki-e/install-action dependency-version: 2.67.11 dependency-type: direct:production update-type: version-update:semver-minor ...

  • Bump astral-sh/setup-uv from 7.2.0 to 7.2.1 #182 cfaaf60

Bumps astral-sh/setup-uv from 7.2.0 to 7.2.1.

  • Release notes

  • Commits


    updated-dependencies:

  • dependency-name: astral-sh/setup-uv dependency-version: 7.2.1 dependency-type: direct:production update-type: version-update:semver-patch ...

  • Bump taiki-e/install-action from 2.67.17 to 2.67.18 #181 068f314

Bumps taiki-e/install-action from 2.67.17 to 2.67.18.

  • Release notes

  • Changelog

  • Commits


    updated-dependencies:

  • dependency-name: taiki-e/install-action dependency-version: 2.67.18 dependency-type: direct:production update-type: version-update:semver-patch ...

  • Bump rand to 0.10 and trim unused deps fe3e406

  • Update rand to v0.10 and fix RNG trait imports (use rand::RngExt) in tests/utilities

    • Move test-only crates to dev-dependencies (approx, serde_json)
    • Remove unused runtime dependencies (anyhow, clap, serde_test)
    • Drop clippy allow for multiple_crate_versions
    • Update Cargo.lock and regenerate CHANGELOG.md
  • Bump astral-sh/setup-uv from 7.2.1 to 7.3.0 #196 6c4662a

Bumps astral-sh/setup-uv from 7.2.1 to 7.3.0.

  • Release notes

  • Commits


    updated-dependencies:

  • dependency-name: astral-sh/setup-uv dependency-version: 7.3.0 dependency-type: direct:production update-type: version-update:semver-minor ...

  • Bump taiki-e/install-action from 2.67.18 to 2.67.26 #195 1cd6008

Bumps taiki-e/install-action from 2.67.18 to 2.67.26.

  • Release notes

  • Changelog

  • Commits


    updated-dependencies:

  • dependency-name: taiki-e/install-action dependency-version: 2.67.26 dependency-type: direct:production update-type: version-update:semver-patch ...

  • Bump taiki-e/install-action from 2.67.26 to 2.67.30 #202 e99f0d3

Bumps taiki-e/install-action from 2.67.26 to 2.67.30.

  • Release notes

  • Changelog

  • Commits


    updated-dependencies:

  • dependency-name: taiki-e/install-action dependency-version: 2.67.30 dependency-type: direct:production update-type: version-update:semver-patch ...

  • Bump the dependencies group with 3 updates #201 fa69c80

Bumps the dependencies group with 3 updates: arc-swap , uuid and sysinfo .

Updates arc-swap from 1.8.1 to 1.8.2

  • Changelog

  • Commits

    Updates uuid from 1.20.0 to 1.21.0

  • Release notes

  • Commits

    Updates sysinfo from 0.38.1 to 0.38.2

  • Changelog

  • Commits


    updated-dependencies:

  • dependency-name: arc-swap dependency-version: 1.8.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies

  • dependency-name: uuid dependency-version: 1.21.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: dependencies

  • dependency-name: sysinfo dependency-version: 0.38.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies ...

  • Release v0.7.1 #205 df890d3

  • chore(release): release v0.7.1

    • Bump version to 0.7.1

    • Update CHANGELOG.md with latest changes

    • Update documentation for release

    • Add performance results for v0.7.1

    • Changed: Updates performance benchmark results (internal)

    Updates the performance benchmark results in PERFORMANCE_RESULTS.md based on the latest benchmark run. Also, modifies the benchmark utility script to correctly extract dimension information for performance summaries. This is an internal change to reflect performance improvements.

    • Fixed: Correctly parses dimension info in performance summaries

    Fixes an issue where parentheses within the dimension information were being incorrectly removed when parsing performance summaries.

    Uses removeprefix and removesuffix instead of strip to avoid accidentally removing internal parentheses in dimension descriptions.

Removed

  • Replace cspell with typos for spell checking 4b5e1a1

Replaces the cspell tool with typos for spell checking across the project. This change involves removing cspell configurations and dependencies, and integrating typos, including its configuration file.

0.7.0 - 2026-01-13

⚠️ Breaking Changes

  • Add public topology traversal API #164

Merged Pull Requests

  • Refactors topology guarantee and manifold validation #171
  • Bump astral-sh/setup-uv from 7.1.6 to 7.2.0 #170
  • Bump taiki-e/install-action from 2.65.13 to 2.66.1 #169
  • Feature/manifolds #168
  • Refactors Gram determinant calculation with LDLT #167
  • Bump clap from 4.5.53 to 4.5.54 in the dependencies group #166
  • Bump taiki-e/install-action from 2.65.7 to 2.65.13 #165
  • Add public topology traversal API #164

Added

  • [breaking] Add public topology traversal API #164 3748ebb

  • feat: add public topology traversal API

    • Introduce canonical EdgeKey and read-only topology traversal helpers on Triangulation

    • Add opt-in AdjacencyIndex builder for faster repeated adjacency queries

    • Add integration tests for topology traversal and adjacency index invariants

    • Refresh repo tooling/CI configs and supporting scripts/tests

    • Changed: Exposes public topology traversal API

    Makes topology traversal APIs public for external use.

    Exposes edges(), incident_edges(), and cell_neighbors() on the DelaunayTriangulation struct as convenience wrappers. Updates documentation, examples, and benchmarks to use new API.

    This allows external users to traverse the triangulation's topology without needing to access internal implementation details.

    • Changed: Expose topology query APIs on DelaunayTriangulation

    Exposes cell and vertex query APIs on DelaunayTriangulation for zero-allocation topology traversal.

    Also includes internal refactoring to improve vertex incidence validation and ensure more robust handling of invalid key references. Now TDS validation detects isolated vertices.

Changed

  • Updates CHANGELOG.md for unreleased changes 271353f

Updates the changelog to reflect recent changes, including adding a new public topology traversal API, refreshing repository tooling/CI configurations, and clarifying TDS validation and API documentation.

  • Refactors Gram determinant calculation with LDLT #167 561a259

  • Changed: Refactors Gram determinant calculation with LDLT

    Refactors the Gram determinant calculation to use LDLT factorization from the la-stack crate for improved efficiency and numerical stability by exploiting symmetry.

    Also, updates the la-stack dependency version.

    • Fixed: Improves robustness of incremental insertion

    Addresses rare topological invalidations during incremental insertion by:

    • Adding connectedness validation to conflict region checks.

    • Adding codimension-2 boundary manifoldness validation ("no boundary of boundary") to triangulation's is_valid method.

    • Ensuring that strict Level 3 validation is enabled during batch construction in debug builds. Refs: feat/la-stack-ldlt-factorization

    • Changed: Rename SimplexCounts to FVector for clarity

    Renames the SimplexCounts struct to FVector to better reflect its mathematical meaning as the f-vector in topology, representing the counts of simplices of different dimensions.

    This change improves code readability and aligns the naming convention with standard topological terminology. (Internal refactoring, no API change.)

    • Changed: Improves simplex generation algorithm

    Improves the algorithm for generating simplex combinations in the Euler characteristic calculation. This change enhances efficiency by using a lexicographic approach to generate combinations, reducing unnecessary computations.

  • Feature/manifolds #168 10abbe1

  • Refactors topology guarantee and manifold validation #171 dfdba5a

  • Changed: Refactors topology guarantee and manifold validation

    Refactors manifold validation mode to topology guarantee for clarity. Updates Level 3 validation configuration, improves error reporting, and adds comprehensive manifold validation tests. Also improves robustness of incremental insertion.

    • Changed: Updates topology guarantee defaults and validation

    Updates the default topology guarantee to Pseudomanifold for new triangulations and deserialized triangulations. Also, clarifies validation policy and its relationship to topology guarantees in documentation. Introduces a test-only function to repair degenerate cells by removing them and clearing dangling references.

    • Fixed: Corrects triangulation perturbation logic

    Fixes a bug in the vertex insertion perturbation logic that caused non-equivalent results when translating the input point set by using a translation-invariant anchor for perturbation scaling.

    Also, preserves the caller-provided vertex UUID across perturbation retries to maintain vertex identity.

    Updates documentation on topology guarantees to clarify manifoldness invariants.

    • Changed: Improves PL-manifold validation with vertex-link check

    Replaces ridge-link validation with vertex-link validation for PL-manifold topology guarantee. This change provides a more robust and canonical check for PL-manifoldness, ensuring that the link of every vertex is a sphere or ball of the appropriate dimension.

Maintenance

  • Bump clap from 4.5.53 to 4.5.54 in the dependencies group #166 ebd0d32

Bumps the dependencies group with 1 update: clap.

Updates clap from 4.5.53 to 4.5.54

  • Release notes

  • Changelog

  • Commits


    updated-dependencies:

  • dependency-name: clap dependency-version: 4.5.54 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: dependencies ...

  • Bump taiki-e/install-action from 2.65.7 to 2.65.13 #165 6b5f723

Bumps taiki-e/install-action from 2.65.7 to 2.65.13.

  • Release notes

  • Changelog

  • Commits


    updated-dependencies:

  • dependency-name: taiki-e/install-action dependency-version: 2.65.13 dependency-type: direct:production update-type: version-update:semver-patch ...

  • Bump astral-sh/setup-uv from 7.1.6 to 7.2.0 #170 b50bb8c

Bumps astral-sh/setup-uv from 7.1.6 to 7.2.0.

  • Release notes

  • Commits


    updated-dependencies:

  • dependency-name: astral-sh/setup-uv dependency-version: 7.2.0 dependency-type: direct:production update-type: version-update:semver-minor ...

  • Bump taiki-e/install-action from 2.65.13 to 2.66.1 #169 44d3add

Bumps taiki-e/install-action from 2.65.13 to 2.66.1.

  • Release notes

  • Changelog

  • Commits


    updated-dependencies:

  • dependency-name: taiki-e/install-action dependency-version: 2.66.1 dependency-type: direct:production update-type: version-update:semver-minor ...

Archives

Older releases are archived by minor series: