Skip to content
This repository was archived by the owner on Aug 12, 2026. It is now read-only.

Commit bdb756c

Browse files
authored
Merge pull request #156 from acgetchell/release/prepare-v1.0.0
chore(release): prepare v1.0.0
2 parents 9516b36 + 703b474 commit bdb756c

25 files changed

Lines changed: 560 additions & 333 deletions

‎.github/CONTRIBUTING.md‎

Lines changed: 61 additions & 113 deletions
Original file line numberDiff line numberDiff line change
@@ -1,115 +1,63 @@
11
# Contributing to CDT++
22

3-
Thank you for helping improve CDT++.
4-
5-
CDT++ v1.0.0-rc3 is the current C++23 release candidate. The project remains maintained as a scientific reference
6-
implementation and regression oracle for
7-
[causal-triangulations](https://github.com/acgetchell/causal-triangulations), its supported Rust successor. The
8-
v1.0.0 release scope is tracked by [issue #90](https://github.com/acgetchell/CDT-plusplus/issues/90). Archiving the
9-
GitHub repository or making it read-only is a separate future maintainer decision, not settled policy for immediately
10-
after v1.0.0.
11-
12-
## Accepted work
13-
14-
Contributions should be limited to:
15-
16-
- correctness fixes, especially for causal invariants, bistellar moves, and scientific results;
17-
- deterministic tests, reproducibility improvements, and cross-implementation validation;
18-
- documentation, build, CI, portability, dependency, and release-readiness fixes;
19-
- work already approved in a project issue or release milestone, including
20-
[Qt restoration #98](https://github.com/acgetchell/CDT-plusplus/issues/98) and
21-
[domain invariant work #101](https://github.com/acgetchell/CDT-plusplus/issues/101) and
22-
[offline C++/Rust comparison #104](https://github.com/acgetchell/CDT-plusplus/issues/104); and
23-
- changes required to complete the v1.0.0 release and Zenodo deposit.
24-
25-
New simulation features, 3+1D/4D development, and unrelated C++ expansion remain out of scope unless a project issue
26-
explicitly approves them. Potential future 4D research does not authorize implementation by itself. If a change is
27-
not already tracked, open an issue before investing in a substantial implementation so its maintenance value and
28-
scope can be agreed upon.
29-
30-
## Contribution workflow
31-
32-
1. Fork the repository and create a short-lived branch from `main`.
33-
34-
2. Keep the change focused and preserve scientific behavior unless the purpose of the change is to correct a
35-
documented bug.
36-
37-
3. Add or update deterministic tests for behavior changes. Tests use [doctest] and live in `tests`; register new test
38-
files in `tests/CMakeLists.txt`. Existing tests use descriptive BDD-style `SCENARIO`, `GIVEN`, `WHEN`, and `THEN`
39-
sections where that structure clarifies behavior.
40-
41-
4. Update relevant documentation and Doxygen comments when interfaces, supported workflows, or scientific behavior
42-
change.
43-
44-
5. Run the repository-owned validation commands:
45-
46-
```bash
47-
just fix
48-
just check
49-
just ci
50-
just build-parallel
51-
```
52-
53-
`just check` is the fast, non-mutating source and tooling gate, including the
54-
repository-owned Semgrep policy and its fixtures. `just ci` adds the
55-
supported build and complete 131-entry CTest suite: 106 doctest scenarios,
56-
23 CLI integration tests, one compiled C++ API example, and one
57-
arithmetic-backend correctness test. `just build-parallel` builds the
58-
distinct CGAL/oneTBB configuration and runs its 132-entry suite: 106 ordinary
59-
doctest scenarios, one replayable parallel stress launcher containing five
60-
scenarios, the same 23 CLI integration tests, the C++ API example, and the
61-
arithmetic correctness test. When changing C++
62-
behavior, also run `just clang-tidy` with the pinned LLVM 22 toolchain and
63-
review its advisory diagnostics.
64-
GitHub Actions runs `just ci` in its Ubuntu GCC, Ubuntu Clang, macOS AppleClang, and Windows MSVC jobs. The two
65-
Ubuntu jobs also run `just build-parallel` to exercise the opt-in CGAL/oneTBB contract, and the macOS job runs
66-
`just viewer-build`. Pull requests run the separate coverage and generated-documentation gates. Sanitizer and
67-
coverage builds keep Release assertion semantics while adding their own debug information and optimization settings. A
68-
separate full-suite Debug job is intentionally omitted because several fixtures traverse invalid intermediate
69-
triangulations and abort on CDT++ invariant assertions. Use `just build-debug` to compile production targets with
70-
CDT++ assertions enabled and run the 21 compatible CLI integration CTests. That preset defines `CGAL_NDEBUG` for
71-
supported move paths while excluding `cdt`, `cdt-no-output`, and the doctest unit fixtures because they trip
72-
project assertions on deliberately invalid intermediate states. The Windows job continues to compile with native
73-
MSVC; LLVM tooling is used only for source formatting. Toolchain setup is pkgx-first;
74-
because pkgx does not currently publish its CMake and Ninja packages for Windows, that job uses the exact Justfile
75-
pins available as PyPI wheels through `uv tool install --no-build`.
76-
77-
6. Run the relevant Linux sanitizer configuration for changes involving memory, lifetime, undefined behavior, or
78-
concurrency:
79-
80-
```bash
81-
just sanitize asan
82-
just sanitize lsan
83-
just sanitize tsan
84-
```
85-
86-
MemorySanitizer is experimental because third-party dependencies are not instrumented; run it manually with
87-
`just sanitize msan` when useful.
88-
89-
7. Open a pull request against `main`, explain the maintenance issue being addressed, and identify any scientific or
90-
reproducibility implications. All required GitHub Actions checks must pass.
91-
92-
The project [Code of Conduct](CODE_OF_CONDUCT.md) applies to all participation.
93-
94-
## Style
95-
96-
The project uses Stroustrup-style formatting with Allman braces, enforced by the repository's `.clang-format` and
97-
LLVM 22. The C++ Core Guidelines inform the `.clang-tidy` policy. Prefer minimal, readable changes over cosmetic
98-
modernization, and do not suppress diagnostics without documenting why the check is inappropriate for this codebase.
99-
100-
Project source files belong in `src`, public or shared headers in `include`, and tests in `tests`. Use the existing
101-
CMake targets, presets, CTest registrations, Just recipes, and pinned vcpkg manifest rather than introducing parallel
102-
build paths.
103-
104-
## Release and repository lifecycle
105-
106-
Release candidates, the final tag, and the Zenodo deposit follow the
107-
[`docs/RELEASING.md`](../docs/RELEASING.md) runbook. The final v1.0.0 release will be tagged from `main`; release
108-
metadata and the Zenodo handoff are tracked by [issue #96](https://github.com/acgetchell/CDT-plusplus/issues/96).
109-
Making the GitHub repository read-only would require a separate explicit maintainer decision. Until then, issues and
110-
pull requests remain governed by the scoped contribution policy above.
111-
112-
Contributors retain credit through the repository history and resulting project citation metadata.
113-
114-
[doctest]: https://github.com/doctest/doctest
115-
[Zenodo]: https://zenodo.org/
3+
CDT++ v1.0.0 is the final planned C++23 feature release. The repository is
4+
preserved as a historical scientific reference and regression oracle for
5+
[causal-triangulations](https://github.com/acgetchell/causal-triangulations),
6+
the supported Rust successor. Active development, new scientific features,
7+
and general support belong in that project.
8+
9+
Issue [#97](https://github.com/acgetchell/CDT-plusplus/issues/97) owns the
10+
final tag, GitHub release, and Zenodo record verification. Issue
11+
[#155](https://github.com/acgetchell/CDT-plusplus/issues/155) owns the separate
12+
stabilization gate, tracker closure, and eventual repository archival.
13+
Archival is not immediate: the repository remains maintenance-only until the
14+
owner determines that no release blockers remain, after which GitHub will make
15+
it read-only.
16+
17+
## Final release corrections
18+
19+
Before archival, pull requests are limited to release-blocking correctness,
20+
reproducibility, security, documentation, and metadata corrections. A
21+
correction must be tied to an existing release issue, preserve the bounded
22+
2+1-dimensional spherical scientific contract unless it fixes a documented
23+
defect, and include deterministic regression evidence when behavior changes.
24+
A critical defect found after v1.0.0 is published must use a new patch release;
25+
the v1.0.0 tag is immutable.
26+
27+
Run the repository-owned validation appropriate to the correction:
28+
29+
```bash
30+
just fix
31+
just check
32+
just release-check
33+
just docs-check
34+
just ci
35+
just build-parallel
36+
```
37+
38+
`just ci` is the supported headless build and test contract. The two Ubuntu
39+
compiler cells also run `just build-parallel`; the macOS cell additionally
40+
runs the opt-in archival viewer. Use `just clang-tidy` for C++ changes and the
41+
relevant `just sanitize asan`, `just sanitize lsan`, or `just sanitize tsan`
42+
workflow for memory, lifetime, undefined-behavior, or concurrency changes.
43+
MemorySanitizer remains experimental because third-party dependencies are not
44+
instrumented.
45+
46+
Open a focused pull request against `main`, identify the blocking release
47+
issue, and explain any scientific, compatibility, reproducibility, citation,
48+
or archival-metadata impact. All required GitHub Actions checks must pass.
49+
50+
## After archival
51+
52+
Do not fork CDT++ merely to continue its retired development line. Use the
53+
active successor for new work. Historical forks remain subject to the BSD
54+
3-Clause license but are not supported by this repository and must not imply
55+
upstream maintenance or compatibility.
56+
57+
Security and support reporting is defined in
58+
[`SECURITY.md`](../SECURITY.md). The project
59+
[Code of Conduct](CODE_OF_CONDUCT.md) remains part of the preserved project
60+
record.
61+
62+
Contributors retain credit through the repository history, `CITATION.cff`,
63+
and the Zenodo archive.

‎CHANGELOG.md‎

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,114 @@ All notable changes to CDT++ are documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [1.0.0] - 2026-08-10
9+
10+
### Release summary
11+
12+
CDT++ 1.0.0 is the final planned feature release of the C++23 spherical 2+1-dimensional reference implementation.
13+
14+
- **Compatibility:** The supported source boundary is C++23 with the published GCC, Clang, AppleClang, and MSVC matrix. The project does not promise a stable binary ABI or package-registry distribution.
15+
- **Scientific corrections:** The release completes and independently validates all five 2+1D moves, Metropolis-Hastings proposal ratios and atomic transitions, exact-predicate geometry boundaries, run-owned RNG streams, and causal persistence metadata.
16+
- **Supported surface:** The default build is headless; CGAL/oneTBB bulk Delaunay operations and the macOS Qt viewer are explicit opt-ins. Historical toroidal and higher-dimensional prototypes are excluded from the supported API.
17+
- **Limitations:** Seeds replay stochastic inputs, not necessarily fresh cospherical CGAL topology. Checkpoints are validated snapshots rather than resumable simulations, and parallelism does not extend to Pachner moves or concurrent manifold access.
18+
- **Migration:** Active development and new work move to [causal-triangulations](https://github.com/acgetchell/causal-triangulations). After the v1.0.0 GitHub and Zenodo handoff, CDT++ enters a maintenance-only stabilization window and becomes read-only only when the owner completes the archival gate.
19+
20+
### Added
21+
22+
- [**breaking**] Modernize Python experiment workflows [`def276a`](https://github.com/acgetchell/CDT-plusplus/commit/def276aa2fdb9eb473d7425d61e29e26511caa28)
23+
24+
- [**breaking**] Add offline C++/Rust comparison harness [`45b080e`](https://github.com/acgetchell/CDT-plusplus/commit/45b080e2388b2475bf26f4462fa4d1ebd5915c69)
25+
26+
- Restore reproducible archival rendering [`2662df9`](https://github.com/acgetchell/CDT-plusplus/commit/2662df9993469e21ec5a0c65c552202b9eec9ae6)
27+
28+
- [**breaking**] Expose reported Metropolis transitions [`16d1c76`](https://github.com/acgetchell/CDT-plusplus/commit/16d1c769afc67e06f07639f6fd9de8136974e282)
29+
30+
### Changed
31+
32+
- Expose shared artifact lifecycle helpers [`2f3ba57`](https://github.com/acgetchell/CDT-plusplus/commit/2f3ba57d425f8ab4f1a0c5da0cedf7876b13eaa5)
33+
34+
- Evaluate Boost alternatives to GMP and MPFR [`9a02c39`](https://github.com/acgetchell/CDT-plusplus/commit/9a02c3960f7b7f45b4a29f844f2cddbd21ab0231)
35+
36+
- Harden backend evaluation probes [`d5c3b71`](https://github.com/acgetchell/CDT-plusplus/commit/d5c3b710b0af82651943f5a1e60c23b5ec818679)
37+
38+
- Format transition validation [`f183f07`](https://github.com/acgetchell/CDT-plusplus/commit/f183f072b44b3fe3b677090b8e5cd4983c193932)
39+
40+
- Verify unknown moves preserve transition traces [`70ab238`](https://github.com/acgetchell/CDT-plusplus/commit/70ab238eb07271a7754266407f9f61e28e199b49)
41+
42+
### Fixed
43+
44+
- Serialize Dependabot automation per pull request [`7567372`](https://github.com/acgetchell/CDT-plusplus/commit/7567372f3f11136b4317b66e695e7f2aa7d2dd69)
45+
46+
- Deduplicate CodeRabbit review requests by revision [`7f23d53`](https://github.com/acgetchell/CDT-plusplus/commit/7f23d530e092114b69f7b8d42b5339e24495282d)
47+
48+
- Bind Dependabot auto-merge to reviewed revision [`72fc5a1`](https://github.com/acgetchell/CDT-plusplus/commit/72fc5a1181d8f1d4c4c0756c809b196c72929b43)
49+
50+
- Harden Dependabot review rearming on head updates [`5d571c8`](https://github.com/acgetchell/CDT-plusplus/commit/5d571c85150615f1a93f931f144e076eeb884d89)
51+
52+
- Authenticate CodeRabbit review requests as maintainer [`375c9ea`](https://github.com/acgetchell/CDT-plusplus/commit/375c9ea1fcaf775054ad0537d7bf5e0656148d21)
53+
54+
- Require reviewed Dependabot merges and refresh tooling [`7c3a84b`](https://github.com/acgetchell/CDT-plusplus/commit/7c3a84bdfb91ca33829ad4302f5debd275d824ee)
55+
56+
- Restore MPFR builds and fail closed on polling errors [`1d2e667`](https://github.com/acgetchell/CDT-plusplus/commit/1d2e667f7df090db7a5ef792fa1bbf9bec9c32b6)
57+
58+
- Prevent stale vcpkg [`9e8d033`](https://github.com/acgetchell/CDT-plusplus/commit/9e8d033e34c389808206e1d0644a7cd58b88336e)
59+
60+
- [**breaking**] Preserve coincident causal identities [`3f72a16`](https://github.com/acgetchell/CDT-plusplus/commit/3f72a16c636a21a05c7273f4667efc0b8c919288)
61+
62+
- Harden persistence and vcpkg pin synchronization [`3a66693`](https://github.com/acgetchell/CDT-plusplus/commit/3a66693a35b27d766b8ac022fd53eccc51f39f09)
63+
64+
- Canonicalize complete vertex-cell incidence [`52f9a58`](https://github.com/acgetchell/CDT-plusplus/commit/52f9a58e06898b563168dd75525ed53c02cd3ca4)
65+
66+
- Bound incidence fingerprint canonicalization [`307737c`](https://github.com/acgetchell/CDT-plusplus/commit/307737ce2c5c79af376d7f38b4183a70925992d2)
67+
68+
- Harden experiment and repository validation [`fb7e5b3`](https://github.com/acgetchell/CDT-plusplus/commit/fb7e5b36161ec11eb16ab9c7b88557dbe5a916ec)
69+
70+
- Harden cross-platform validation [`6b4d012`](https://github.com/acgetchell/CDT-plusplus/commit/6b4d012067002259a87c51915b6c7bbfaefd48d6)
71+
72+
- Pin Python for sanitizer bootstrap [`9181494`](https://github.com/acgetchell/CDT-plusplus/commit/9181494871400009192bfea67605543b7be78130)
73+
74+
- Refresh portable Python package checks [`96baa21`](https://github.com/acgetchell/CDT-plusplus/commit/96baa21d258ae50992f592f498cb87467211f2c6)
75+
76+
- Preserve local runs when Comet mirroring fails [`9cadfe7`](https://github.com/acgetchell/CDT-plusplus/commit/9cadfe772670abed767953079990a2080914e0a4)
77+
78+
- Harden portable harness validation [`da7ba14`](https://github.com/acgetchell/CDT-plusplus/commit/da7ba141eb362866942241135d325e1ae9df4fec)
79+
80+
- Select the root vcpkg manifest [`1c064fd`](https://github.com/acgetchell/CDT-plusplus/commit/1c064fd098c845e6efaea48290a43b023ebddbe3)
81+
82+
- Restore vcpkg binary caching [`2b27462`](https://github.com/acgetchell/CDT-plusplus/commit/2b2746202d8ebb09b6e2c801a5868794414398ca)
83+
84+
- Track canonical rendering fixture [`7078f69`](https://github.com/acgetchell/CDT-plusplus/commit/7078f69d7f19e54b0cd4c888666815f2578e5add)
85+
86+
- Harden archival rendering contract [`81d366e`](https://github.com/acgetchell/CDT-plusplus/commit/81d366ef9b58dfa750061f3fb9305cbbafb04a83)
87+
88+
- Harden transition and documentation validation [`e955ee6`](https://github.com/acgetchell/CDT-plusplus/commit/e955ee643caa5e081314dfc6c5a5168bc1f17319)
89+
90+
- Queue approved Dependabot updates for auto-merge [`e63e32f`](https://github.com/acgetchell/CDT-plusplus/commit/e63e32f627dfb1e83392714183c09032157fa74a)
91+
92+
- Enforce v1.0.0 release gates [`94ed107`](https://github.com/acgetchell/CDT-plusplus/commit/94ed107aa2390accd17f0191c4149df6201618ed)
93+
94+
- Fail fast and support Dependabot coverage [`2107f20`](https://github.com/acgetchell/CDT-plusplus/commit/2107f20d429b466eb7ec01693e769a0262dcd264)
95+
96+
- Stabilize macOS viewer and coverage gates [`deb24ab`](https://github.com/acgetchell/CDT-plusplus/commit/deb24ab0d7ce179469839a145f344ca1624c1275)
97+
98+
### Maintenance
99+
100+
- Gate automatic merges on CodeRabbit review [`8124227`](https://github.com/acgetchell/CDT-plusplus/commit/812422797620c2203c9214af880cb5957af4469b)
101+
102+
- Bump the github-actions group with 4 updates [#134](https://github.com/acgetchell/CDT-plusplus/pull/134) [`55d192d`](https://github.com/acgetchell/CDT-plusplus/commit/55d192df05ca9d34050fb8fa618984573be2eb97)
103+
104+
- Bump the github-actions group with 2 updates [#136](https://github.com/acgetchell/CDT-plusplus/pull/136) [`90a3ea6`](https://github.com/acgetchell/CDT-plusplus/commit/90a3ea67db84d553d5803bdbaa9bb60ed937aa33)
105+
106+
- Automate vcpkg tool pin sync [`9631335`](https://github.com/acgetchell/CDT-plusplus/commit/96313355bc851ae05f5787e95839d9e619a39d2c)
107+
108+
- Bump the dependencies group with 3 updates [#144](https://github.com/acgetchell/CDT-plusplus/pull/144) [`098822d`](https://github.com/acgetchell/CDT-plusplus/commit/098822d04b2a8b325f60529e8e98910845dd330c)
109+
110+
- Stagger Dependabot update schedules [`9cf5b9d`](https://github.com/acgetchell/CDT-plusplus/commit/9cf5b9d3a1f6fc1583a9b937446df56dc1626a06)
111+
112+
- Bump cryptography from 49.0.0 to 50.0.0 [#146](https://github.com/acgetchell/CDT-plusplus/pull/146) [`e23d3c4`](https://github.com/acgetchell/CDT-plusplus/commit/e23d3c4912b80754bd97c11f2ff8a50f2bc3d61f)
113+
114+
- Bump taiki-e/install-action [#152](https://github.com/acgetchell/CDT-plusplus/pull/152) [`426edb8`](https://github.com/acgetchell/CDT-plusplus/commit/426edb8085a67c3aae5a308fd1355aa05c800e9c)
115+
8116
## [1.0.0-rc3] - 2026-07-28
9117

10118
### Added
@@ -81,6 +189,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
81189

82190
- Streamline and harden supported build workflows [`e29f69a`](https://github.com/acgetchell/CDT-plusplus/commit/e29f69a676bc7c10c12afbea4791fa70e9298de9)
83191

192+
- Update v1.0.0-rc3 release date [`e8f45ea`](https://github.com/acgetchell/CDT-plusplus/commit/e8f45ea15fdb813c00f0d773f8ff30251c699207)
193+
84194
### Performance
85195

86196
- [**breaking**] Avoid rebuilding caches during move validation [`f574f0f`](https://github.com/acgetchell/CDT-plusplus/commit/f574f0f381d202fcdc3cbaf78a815af983a1815d)
@@ -123,6 +233,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
123233

124234
- Update docs/RELEASING.md [`26196da`](https://github.com/acgetchell/CDT-plusplus/commit/26196daa76b1094ea9364a20b3618ef61a5c4185)
125235

236+
[1.0.0]: https://github.com/acgetchell/CDT-plusplus/compare/v1.0.0-rc3...v1.0.0
126237
[1.0.0-rc3]: https://github.com/acgetchell/CDT-plusplus/compare/v1.0.0-rc2...v1.0.0-rc3
127238
[1.0.0-rc2]: https://github.com/acgetchell/CDT-plusplus/compare/v1.0.0-rc1...v1.0.0-rc2
128239
[1.0.0-rc1]: https://github.com/acgetchell/CDT-plusplus/compare/0.1.8...v1.0.0-rc1

‎CITATION.cff‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,11 @@ authors:
1111
given-names: "Adam"
1212
email: "adam@adamgetchell.org"
1313
orcid: "https://orcid.org/0000-0002-0797-0021"
14-
version: "1.0.0-rc3"
15-
date-released: "2026-07-28"
14+
version: "1.0.0"
15+
date-released: "2026-08-10"
1616
repository-code: "https://github.com/acgetchell/CDT-plusplus"
1717
url: "https://github.com/acgetchell/CDT-plusplus"
18+
doi: "10.5281/zenodo.21487043"
1819
license: BSD-3-Clause
1920
keywords:
2021
- "causal-dynamical-triangulations"

‎CMakeLists.txt‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@ project(
2929
# CDT++ does not use C++ modules, so avoid unnecessary dependency scanning.
3030
set(CMAKE_CXX_SCAN_FOR_MODULES OFF)
3131

32-
# CMake project versions are numeric, so keep the release-candidate suffix in
33-
# the product version used by executables and release metadata.
34-
set(CDT_VERSION_SUFFIX "-rc3")
32+
# CMake project versions are numeric. Stable releases use an empty product
33+
# suffix; release candidates use the synchronized "-rcN" spelling.
34+
set(CDT_VERSION_SUFFIX "")
3535
set(CDT_VERSION "${PROJECT_VERSION}${CDT_VERSION_SUFFIX}")
3636
set(CDT_SOURCE_REVISION "unknown")
3737
find_package(Git QUIET)

0 commit comments

Comments
 (0)