Purpose: Define objective criteria for when simple-rsyncd may be labeled beta, security-ready, or production-ready. This complements ROADMAP_CHECKLIST.md with release gates tied to tests, packaging, and honest documentation.
Baseline: v0.4.0 (May 2026) — Gate 2 security features implemented; 8/8 CTest suites green.
| Tier | Label | Intended use |
|---|---|---|
| Distribution | Packaging release | CI artifacts, installers, cross-platform builds |
| Beta | Early adopters | Internal/staging; known clients; no SLA |
| Security-ready | Hardened beta | Internet-facing with TLS, auth, and audit |
| Production | General production | Replace rsyncd-like workloads with standard tooling |
v0.4.0 today: ✅ Distribution · ✅ Beta · ✅ Security-ready (beta) · ❌ Production
| CTest target | Status |
|---|---|
| ConfigTests | ✅ |
| ModuleTests | ✅ |
| ProtocolTests | ✅ |
| AuthTests | ✅ |
| IntegrationTests | ✅ |
| SecurityTests | ✅ |
| SSLTests | ✅ |
| PublicKeyTests | ✅ |
Overall: 8/8 suites green
Goal: Trustworthy core file operations and green tests. Suitable for controlled beta deployments.
Target label: Beta — not a rsyncd drop-in
Status: ✅ Complete (v0.3.1)
- All CTest suites pass (
ctest5/5 green on Linux and macOS) - Fix module directory listing (
listDirectoryreturns populatedFileListing) - Fix module
createDirectory/deleteDirectory(including nested + recursive) - Fix protocol argument parsing (
key=valuetokens, e.g.recursive=true,max_depth=3) - Fix upload/transfer path in
ProtocolHandler(integration upload scenarios) - Add regression tests for the above (keep existing tests; do not weaken assertions)
- README Features section matches implemented code (remove or mark planned for OAuth2, Prometheus, YAML hot-reload, rate limiting if not done)
- Document that protocol is simplified — not full native
rsync(1)/rsyncdwire compatibility - Update PROJECT_STATUS.md, HONEST_ASSESSMENT.md, FEATURE_AUDIT.md to v0.3.x reality
- User docs: replace “works with
rsync rsync://…” claims unless verified with a named client/version matrix (user guide header + quick start updated; full guide scrub optional)
-
make static-packageproduces DEB/RPM/FreeBSD PKG/macOS DMG+PKG - macOS PKG installs to
/usr/local/bin,/etc/simple-rsyncd/,/Library/LaunchDaemons - CPack
Contents/leak fixed via packaging/macos/pkg/rebuild-from-cpack.sh - macOS DMG payload aligned with PKG paths (
/etc/simple-rsyncd, not/usr/local/etc/…) - Service smoke test documented: install package → start daemon → one LIST/GET/PUT cycle
# Tests
cd build && ctest --output-on-failure
# Module/protocol spot checks
./src/tests/test_module
./src/tests/test_protocol
./src/tests/test_integration
# Package smoke (macOS example)
sudo installer -pkg dist/simple-rsyncd-0.3.0-macos-intel.pkg -target /
ls /etc/simple-rsyncd/examples/
/usr/local/bin/simple-rsyncd --help # or test --config /etc/simple-rsyncd/rsyncd.conf.exampleAll Required boxes checked · CI runs ctest on push · GitHub release notes say Beta
Goal: Safe for internet-facing or multi-tenant use with encryption and hardened OS integration.
Target label: Security-ready beta
Status: ✅ Complete (v0.4.0 — May 2026)
Maps to ROADMAP_CHECKLIST.md § v0.4.0.
-
SSLContextloads cert/key/CA (OpenSSLSSL_CTX) - TLS handshake on accept when
ssl_enabledin config - TLS version and cipher suite configurable; SSLv3/TLS1.0/TLS1.1 disabled
- Integration test: TLS connection succeeds with test cert (
SSLTests)
- Password file:
reject_plaintext_passwords+ PASSWORD_MIGRATION.md - SHA-256 limitation documented (bcrypt/argon2 deferred to v0.5.0)
- Public-key auth verified with real SSH key fixtures (
PublicKeyTests,docs/security/PUBLIC_KEY_AUTH.md) - OAuth2 removed from README (not implemented)
- IP/CIDR allow/deny enforced at accept (
NetworkAccess,checkAccess) - Rate limiting: connection limits enforced (
ConnectionRateLimiter) - Privilege drop after bind (
dropProcessPrivilegesin daemon + main) - Optional chroot documented — CHROOT.md (manual root test)
- Path security: symlink traversal blocked +
SecurityTests
- Gate 1 (v0.3.1) still green — 8/8 suites
- Security scan in CI — cppcheck in .github/workflows/ci.yml
- Threat model — docs/security/THREAT_MODEL.md
Gate 1 + all Required v0.4.0 items · Release notes list TLS and hardening · Still not claimed as full rsyncd replacement unless Gate 3 client matrix passes
Goal: General production use with observability, performance evidence, and client compatibility.
Maps to ROADMAP_CHECKLIST.md § v0.5.0.
-
Client compatibility matrix published and tested:
Client Version LIST GET PUT DELETE Notes simple-rsyncd test client — rsync 3.x Only if truly supported … -
Decision documented: custom protocol vs native rsyncd — README aligned with decision
-
Delta sync / rolling checksum: implemented or explicitly out of scope for v1.0
- systemd / launchd units pass
--configand restart on failure - Log rotation works under load (not just API present)
- Health/metrics: Prometheus endpoint or documented alternative
- Upgrade path documented (package upgrade preserves
/etc/simple-rsyncd/)
- Unit test coverage ≥ 80% on core paths (module, protocol, session, auth)
- Integration tests cover: upload, download, delete, list, auth failure, TLS (if Gate 2)
- Benchmark baseline published (throughput MB/s, concurrent sessions)
- 24h soak test script or CI nightly (no leaks, no handle growth)
- CI builds + tests on: Debian, RHEL-family, FreeBSD, macOS (match package matrix)
- Signed/tag reproducible release artifacts
- SECURITY.md + supported versions policy
Gates 1–2 green · Gate 3 Required complete · GitHub release labeled Production · No known P0/P1 open issues
Use before any release marketed beyond packaging:
| Claim in README/docs | Verify in code | v0.3.1 actual |
|---|---|---|
| SSL/TLS encryption | ssl_context.cpp real TLS |
❌ Stub |
| OAuth2 | auth flow exists | ❌ Not implemented |
| Prometheus / metrics | HTTP/metrics endpoint | ❌ Not implemented |
| YAML config + hot-reload | parser + watcher | |
| JSON config | JSON parser wired | |
| Rate limiting | enforced in daemon loop | ❌ Config only |
rsync rsync://… client |
tested matrix | ❌ Not verified |
| Password hashing | PasswordHasher |
✅ SHA-256 + salt |
| Cross-platform packages | make static-package |
✅ |
Action: either implement, remove, or mark planned for every ❌/
| Version | When to ship | GitHub pre-release? |
|---|---|---|
| v0.3.0 | Packaging milestone | Optional |
| v0.3.1 | Gate 1 complete (current) | Yes — Beta |
| v0.4.0 | Gate 2 complete (current) | Yes — Security-ready beta |
| v0.5.0 | Gate 3 complete | No — Production |
- v0.4.0 TLS — complete
ssl_context.cpp, integration test - Enforce ACLs / rate limits at accept time
- Linux CI —
cteston push - Install smoke-test doc — package → start → LIST/GET/PUT
- User guide full scrub — remaining pages in
docs/shared/user-guide/
- ROADMAP_CHECKLIST.md — full task trees
- TECHNICAL_DEBT.md — known debt items
- HONEST_ASSESSMENT.md — implementation vs marketing
- Failing tests: none (v0.3.1); see
src/tests/for coverage
Last updated: May 2026 · v0.3.1 Beta — all CTest suites passing