Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .config/nextest.toml
Original file line number Diff line number Diff line change
Expand Up @@ -69,3 +69,11 @@ success-output = "never"
fail-fast = false
retries = 0
slow-timeout = { period = "900s", terminate-after = 1 }

# Full Levels 1-5 validation at the bounded 2D-5D regression scales is
# CPU-intensive. Give each large-scale case the complete worker pool so
# concurrent slow fixtures cannot consume its 600-second internal wall-clock
# budget. Broader Level 4 and Level 5 performance work remains in #482/#483.
[[profile.slow.overrides]]
filter = 'test(debug_large_scale_)'
threads-required = "num-cpus"
20 changes: 12 additions & 8 deletions .github/workflows/papers.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ on:
paths:
- ".github/workflows/papers.yml"
- ".github/actions/setup-just/action.yml"
- "docs/assets/validation/**"
- "justfile"
- "notebooks/01_validation.ipynb"
- "papers/**"
Expand All @@ -36,6 +37,7 @@ on:
paths:
- ".github/workflows/papers.yml"
- ".github/actions/setup-just/action.yml"
- "docs/assets/validation/**"
- "justfile"
- "notebooks/01_validation.ipynb"
- "papers/**"
Expand Down Expand Up @@ -105,7 +107,7 @@ jobs:
- name: Install paper system dependencies
run: |
brew update
brew install fontconfig freetype graphite2 harfbuzz icu4c libpng pkgconf zlib
brew install freetype graphite2 icu4c libpng pkgconf zlib
icu_pkg_config="$(brew --prefix icu4c)/lib/pkgconfig"
zlib_pkg_config="$(brew --prefix zlib)/lib/pkgconfig"
export PKG_CONFIG_PATH="$icu_pkg_config:$zlib_pkg_config${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}"
Expand All @@ -130,14 +132,16 @@ jobs:
with:
tool: tex-fmt@${{ steps.tool_versions.outputs.TEX_FMT_VERSION }}

- name: Build papers
run: just papers
- name: Build and compare papers
run: |
just validation-doc-figures
just paper-artifact-check

- name: Verify paper artifacts are current
- name: Verify paper figures are current
run: |
if [[ -n "$(git status --porcelain -- papers/validation.pdf papers/generated)" ]]; then
git status --short -- papers/validation.pdf papers/generated
echo "::error::Paper artifacts changed after 'just papers'."
echo "Run 'just papers' and commit the regenerated PDF/PNG outputs."
if [[ -n "$(git status --porcelain -- docs/assets/validation)" ]]; then
git status --short -- docs/assets/validation
echo "::error::Paper figures changed after 'just validation-doc-figures'."
echo "Run 'just validation-doc-figures' and commit the regenerated PNG outputs."
exit 1
fi
2 changes: 1 addition & 1 deletion .github/workflows/semgrep-sarif.yml
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ jobs:
id: semgrep
run: |
set +e
uv run semgrep \
uv run --locked semgrep \
--error \
--strict \
--timeout 30 \
Expand Down
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ workflow references do not need to be loaded preemptively.

- **Language**: Rust
- **Project**: d-dimensional Delaunay triangulation library
- **MSRV**: 1.97.0
- **MSRV**: 1.97.1
- **Edition**: 2024
- **Primary architecture hub**: `docs/code_organization.md`

Expand Down
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
name = "delaunay"
version = "0.7.8"
edition = "2024"
rust-version = "1.97.0"
rust-version = "1.97.1"
autobins = false
authors = [ "Adam Getchell <adam@adamgetchell.org>" ]
homepage = "https://github.com/acgetchell/delaunay"
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ cargo add delaunay@0.7.8

Use `cargo add delaunay` instead if you want Cargo to select the newest published release.

- Rust 1.97.0 or newer. The minimum supported version is declared in
- Rust 1.97.1 or newer. The minimum supported version is declared in
`Cargo.toml`, while `rust-toolchain.toml` pins the exact repository toolchain.
- `f64` coordinates for caller-facing construction, predicate, validation, and generator APIs.

Expand Down
2 changes: 1 addition & 1 deletion clippy.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
# This ensures consistent configuration across all developers and IDEs

# Minimum Supported Rust Version - matches Cargo.toml and rust-toolchain.toml
msrv = "1.97.0"
msrv = "1.97.1"

# Lint levels are controlled by Cargo.toml plus the `just clippy` / CI
# invocation flags. This file contains Clippy configuration options that are
Expand Down
3 changes: 2 additions & 1 deletion docs/architecture/module_map.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,8 @@ PL-manifold validation. Ridge ownership therefore belongs in `src/topology/`.
- `traits/coordinate.rs` - coordinate abstractions and typed coordinate
diagnostic payloads.
- `util/` - coordinate conversions, vector norms, circumsphere computations,
geometric measures, point generation, and random triangulation generation.
geometric measures, point generation, random triangulation generation, and
the private `simplex_lp.rs` implementation used by realization validation.

The currently supported caller-visible coordinate scalar is `f64`. Exact
arithmetic is used internally by robust predicate fallbacks. If exact
Expand Down
Binary file modified docs/assets/validation/validation_hierarchy.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified docs/assets/validation/validation_level_1_element_validity.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
29 changes: 19 additions & 10 deletions docs/dev/commands.md
Original file line number Diff line number Diff line change
Expand Up @@ -610,6 +610,7 @@ just paper-tex-lint
just paper-build
just paper-pdf-check
just paper-check
just paper-artifact-check
just paper-refresh
just papers
```
Expand All @@ -626,19 +627,27 @@ changing tracked files. `just paper-pdf-check` uses the uv-managed
`paper-pdf-check` helper to verify that target-built PDF opens, has pages,
includes expected title/reference text, and does not contain the literal
`\today`. `just paper-check` lints, builds, and sanity-checks a paper without
refreshing tracked artifacts. `just paper-refresh` runs that check before
copying the target-built PDF to `papers/validation.pdf`. `just papers` refreshes
the canonical figures and reviewer PDF through those named artifact owners.
refreshing tracked artifacts. `just paper-artifact-check` additionally compares
the rebuilt and tracked reviewer PDFs page by page using extracted text and page
geometry, avoiding a false requirement that platform-native PDF internals be
byte-identical. `just paper-refresh` runs the basic check before copying the
target-built PDF to `papers/validation.pdf`. `just papers` refreshes the
canonical figures and reviewer PDF through those named artifact owners.

Tectonic and `tex-fmt` are pinned Cargo-installed tools. `chktex` comes from a
TeX distribution or system package manager. Installing or upgrading Tectonic
from Cargo also requires `pkg-config` and development headers for its native
bridge libraries, including fontconfig, FreeType, Graphite2, HarfBuzz, ICU,
libpng, and zlib. When the pinned Tectonic version is absent,
`just setup-tools` checks ICU locally and auto-detects common Homebrew ICU
pkg-config directories before it asks for a manual `PKG_CONFIG_PATH`; an
already-correct Tectonic installation does not require those native build
prerequisites. Paper CI installs the platform native package set explicitly.
from Cargo also requires a `pkg-config` implementation and development headers
for its externally resolved native bridge libraries. macOS requires FreeType,
Graphite2, ICU, libpng, and zlib, but not fontconfig. Non-Apple platforms
additionally require fontconfig and OpenSSL. The pinned default build vendors
HarfBuzz. When the pinned Tectonic version is absent, `just setup-tools`
requires `pkg-config` (commonly installed as `pkgconf`) and checks the
platform-specific external native dependency set. On macOS it auto-detects
common Homebrew metadata
directories, including the active SDK metadata used for system compression
libraries, before it asks for a manual `PKG_CONFIG_PATH`. An already-correct
Tectonic installation does not require those native build prerequisites. Paper
CI installs the platform native package set explicitly.

Reviewer-facing validation diagrams under `docs/assets/validation/` use the
same deterministic notebook with a separate explicit output switch:
Expand Down
21 changes: 13 additions & 8 deletions docs/dev/tooling-alignment.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,23 +58,25 @@ Both repositories now share the same core Rust and Python support-tooling loop:

The useful updates ported in this pass are:

- Rust MSRV metadata uses Rust 1.97.0 for the v0.8.0 release line.
- Rust MSRV metadata uses Rust 1.97.1 for the v0.8.0 release line.
`Cargo.toml`, `rust-toolchain.toml`, `clippy.toml`, contributor docs, and
agent guidance use the same baseline so upcoming `la-stack` and
`markov-chain-monte-carlo` releases have no MSRV conflict.
- The local `cargo-nextest` pin and CI installers now read version pins from
`justfile`, with `cargo-nextest` on 0.9.140 and `cargo-llvm-cov` on 0.8.7,
which is still shared across the repositories.
- CI command-runner, Markdown, YAML formatting, and spelling tool pins now
track the current reviewed versions: `just` 1.56.0, `rumdl` 0.2.34,
track the current reviewed versions: `just` 1.57.0, `rumdl` 0.2.43,
`dprint` 0.55.2, and `typos-cli` 1.48.0. The linter and formatter pins keep
local setup and CI on the same reviewed releases.
- uv-managed Python support-tool pins now use exact reviewed versions for the
shared dev tools: `ruff` 0.15.21, `semgrep` 1.169.0, and `ty` 0.0.59.
Semgrep is intentionally ahead of the older sibling baseline so its transitive
dependency graph stays on the current reviewed toolchain baseline. Delaunay
previously used lower-bound specifiers for those tools, which allowed local
and CI environments to drift away from that reviewed baseline.
shared dev tools: `ruff` 0.15.21, `semgrep` 1.171.0, and `ty` 0.0.59.
Semgrep still pins the vulnerable `mcp` 1.23.3 release, so the uv project
configuration overrides that transitive dependency to patched `mcp` 1.28.1.
Remove the override once Semgrep's published dependency constraint reaches
that version or later. Delaunay previously used lower-bound specifiers for
those tools, which allowed local and CI environments to drift away from that
reviewed baseline.
- Local just helpers now version-check the pinned `uv`, `just`,
`cargo-nextest`, `cargo-machete`, `taplo-cli`, `dprint`, `git-cliff`, `rumdl`,
`samply`, `typos-cli`, and `zizmor` tools instead of accepting any installed
Expand Down Expand Up @@ -241,7 +243,10 @@ The useful updates ported in this pass are:
install the same Cargo-tool pins with the sibling repositories'
`taiki-e/cache-cargo-install-action`/`cargo install --locked` pattern before
the corresponding recipes run. Pinned Rust CLI tools are installed through
Cargo rather than Homebrew so local setup cannot drift from CI pins. The CI
Cargo rather than Homebrew so local setup cannot drift from CI pins. The
local Tectonic bootstrap requires the platform-managed `pkg-config` command
(commonly provided by `pkgconf`) alongside the external native bridge
libraries and their metadata. The CI
build matrix runs `just ci`, including `cargo machete` dependency hygiene, on
Linux, macOS, and Windows after syncing the locked uv dev group and installing
the pinned Cargo tools. The papers workflow
Expand Down
11 changes: 7 additions & 4 deletions docs/limitations.md
Original file line number Diff line number Diff line change
Expand Up @@ -110,10 +110,13 @@ release characterization, not a portable performance promise:
defaults to 36,000 vertices, 3D defaults to 7,500 vertices, 4D defaults to
800 vertices, and 5D defaults to 140 vertices. Pass `n` explicitly when a
run must match a documented scale exactly.
- The raw `slow-tests` harness defaults use slightly heavier defaults for some
dimensions (currently 40,000 vertices in 2D, 900 vertices in 4D, and
150 vertices in 5D). Prefer the `just` helpers for routine
acceptance/profiling runs.
- The raw `slow-tests` harness defaults are 40,000 vertices in 2D, 7,500 in
3D, 100 in 4D, and 50 in 5D. The 4D and 5D defaults are deliberately bounded
release-regression probes, not scale or performance evidence. Broader Level 4
realization and Level 5 Delaunay validation work remains in
[#482](https://github.com/acgetchell/delaunay/issues/482) and
[#483](https://github.com/acgetchell/delaunay/issues/483) for v0.8.1.
Prefer the `just` helpers for explicit acceptance and profiling runs.

Current 2D scale envelope:

Expand Down
21 changes: 16 additions & 5 deletions docs/roadmap.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,8 @@ Key takeaways from v0.7.8:
### v0.8.0 paper-facing API and topology push

v0.8.0 is the next feature-bearing release and is expected to carry the larger
work intentionally deferred from v0.7.8 cleanup. It will require Rust 1.97.0;
the final release gate is an explicit audit of the 1.97.0 toolchain surface
work intentionally deferred from v0.7.8 cleanup. It will require Rust 1.97.1;
the final release gate is an explicit audit of the 1.97.1 toolchain surface
before shipping.

- **Pachner/Edit API shape (#252/#253/#350/#337):** unify the Pachner move API,
Expand All @@ -51,15 +51,26 @@ before shipping.
- **Naming cleanup (#323):** make the breaking `Cell` → `Simplex` rename.
- **Iterator cleanup (#353):** prefer iterator-based collection-building paths
where that improves clarity and allocation behavior.
- **Rust 1.97.0 release gate (#329/#496):** raise the v0.8.0 MSRV to Rust
1.97.0, finish the baseline `assert_matches!` cleanup, audit the new
- **Rust 1.97.1 release gate (#329/#496):** raise the v0.8.0 MSRV to Rust
1.97.1, finish the baseline `assert_matches!` cleanup, audit the new
integer/`NonZero` bit helpers against Hilbert bit-depth/index invariants,
review `RepeatN::default` and Cargo 1.97 tooling changes for useful adoption,
and re-benchmark predicate `cold_path` decisions under the 1.97.0 compiler.
and re-benchmark predicate `cold_path` decisions under the 1.97.1 compiler.
- **Notebook/export artifact (#64/#408):** ship the generic simplicial-complex
JSON export, reproducible quickstart and validation notebooks, tracked
validation diagrams, and reviewer-facing artifact instructions.

### v0.8.1 validation evidence and performance follow-up

- **Level 4 realization validation (#482):** complete the independent
randomized and degenerate 2D–5D agreement campaign for the revised
simplex-intersection narrow phase and record representative before/after
benchmarks.
- **Level 5 Delaunay reporting (#483):** replace the Euclidean
all-vertices/all-simplices report bottleneck while preserving its violation
set, with 2D–5D agreement tests and before/after benchmarks. This work is
blocked by issue #482.

### v0.9.0 and later horizon

v0.9.0 is the right parking lot for work that is valuable but larger or less
Expand Down
Loading
Loading