* XRPLF/ximinez/online-delete-gaps: (135 commits)
refactor: Use dispatch instead of post (7438)
Correct a couple of comments
refactor: Clean up tec object deletion logic (6588)
fix: Move AMMInvariant weakInvariantCheck logic into the transaction (7032)
fix: Improve ValidAMM invariant (7295)
feat: Remove clear mutable flags for DynamicMPT XLS-94 (7439)
ci: Build and push docker images in forks too (7588)
ci: [DEPENDABOT] bump actions/checkout from 6.0.3 to 7.0.0 (7585)
fix: Ensure xrpld service directories exist at startup (7565)
fix: Use template for granular delegation permissions (6613)
docs: Fix some comments to improve readability (7405)
ci: Disable assertions on Release builds (7443)
build: Add graphviz to Nix images (7566)
refactor: Rerevert "Explicitly trim the heap after cache sweeps (6022)"
release: Bump version to 3.3.0-b0
ci: Make clang-tidy workflow adjustments to stay in sync with Clio (7563)
build: Add git-lfs to Nix images (7561)
clang-tidy: nodiscard rendezvous, headers, const correctness, {}s
build: Add zip to Nix images (7551)
docs: Rewrite build environment docs (7533)
...
- Move a log message into the same block as the thing it's logging.
- Change default recovery time from 1s to 2s. This may need some more
tuning.
- Rename the online_delete test config helper function to onlineDelete.
- Copy some class values while under lock, even though they can't
change, as defense in depth.
- Use RAII scope unlock in healthWait().
- Remove extraneous function declaration.
- Add a timeout to SHAMapStore_test::testLedgerGaps so it won't hang in
case of regression.
- Add an optional timeout parameter to SHAMapStore::rendezvous, and
return a success flag.
- Use the timeout in SHAMapStore_test::testLedgerGaps to show lack of
progress in the Store without an arbitrary sleep delay.
- Refactor LedgerMaster::missingFromCompleteLedgerRange to use RangeSet
functions instead of a naive iteration.
- If lastGoodValidatedLedger_ is default (0) in healthWait(), then act
as if no ledgers are missing.
* refactor: Update RPM version scheme; remove auto-update script; service hardening
- **RPM version scheme**: pre-releases now use `~` in the `Version` field instead of the `0.<release>.<suffix>` `Release`-field hack. Matches Debian's `~` convention, so RPM and DEB version strings are symmetric. Requires rpm ≥ 4.10 (RHEL 9 ships 4.17).
Before/after for a pre-release build:
```
# before
xrpld-3.2.0-0.1.rc3+202606011647.d4cb68d5.el9.x86_64.rpm
# after (symmetric with DEB)
xrpld-3.2.0~rc2+202606010139.7679a310-1.el9.x86_64.rpm
xrpld_3.2.0~rc2+202606010139.7679a310-1_amd64.deb
```
- **Auto-update removed**: `update-xrpld`, `update-xrpld.service`, and `update-xrpld.timer` deleted. The `50-xrpld.preset` `disable` line for the timer is dropped too.
- **Service hardening** (two new `[Service]` directives in `xrpld.service`):
- `CapabilityBoundingSet=CAP_NET_BIND_SERVICE` — drops every Linux capability except `CAP_NET_BIND_SERVICE`, capping the privilege ceiling to least-privilege while still letting operators bind ports <1024 (e.g. WS/HTTPS on 443).
- `SystemCallArchitectures=native` — restricts the service to the native syscall ABI, blocking alternate-ABI (32-bit/x32) syscalls used to evade seccomp filtering.
- [ ] Build RPM from a pre-release version (e.g. `3.2.0-b1`) and confirm `rpm -qi` shows `Version: 3.2.0~b1`, `Release: 1`
- [ ] Confirm `3.2.0~b1` sorts before `3.2.0` via `rpmvercmp`
- [ ] Install package and confirm no `update-xrpld*` units appear in `systemctl list-unit-files`
- [ ] Confirm `systemctl show xrpld` reflects the new `CapabilityBoundingSet` and `SystemCallArchitectures`
* fix: Track tmpfiles-created directories in RPM %files as %ghost