diff --git a/README.md b/README.md index 8a31590..9959da1 100644 --- a/README.md +++ b/README.md @@ -185,3 +185,7 @@ systemctl status pobsync-web pobsync-worker pobsync-scheduler Development, Docker, maintainer tooling, and architecture notes live in: - [docs/development.md](docs/development.md) + +The 1.0 delivery roadmap is tracked in: + +- [docs/roadmap-1.0.md](docs/roadmap-1.0.md) diff --git a/docs/roadmap-1.0.md b/docs/roadmap-1.0.md new file mode 100644 index 0000000..5f63240 --- /dev/null +++ b/docs/roadmap-1.0.md @@ -0,0 +1,112 @@ +# pobsync 1.0 Roadmap + +This roadmap tracks the remaining chunks before a 1.0 release. Keep chunks scoped and commit them separately. When a +chunk is completed, mark it as done here and include the final commit message in the review notes. + +## 1. Production Install And Update Flow + +Goal: installing and updating pobsync should be predictable without needing to remember Django environment details. + +- [ ] Add a `pobsync-manage` wrapper that loads `/etc/pobsync/pobsync.env` before running Django management commands. +- [ ] Add or document an explicit update flow for native systemd installs. +- [ ] Make update output quiet by default and verbose only with a flag. +- [ ] Extend Self Check with env file, database path, service user, backup root ownership, and service runtime checks. +- [ ] Document install, update, rollback, restart, and log inspection in the README. + +Suggested commit tag: `(feature)` or `(ops)` + +## 2. Run Detail And Logging Polish + +Goal: a failed or slow backup should be debuggable from Django without shell access. + +- [ ] Split run detail into clear sections: summary, command, log, stats, retention, and raw result. +- [ ] Show recent rsync log output inline with a link to the full log. +- [ ] Show failure classification prominently when available. +- [ ] Surface prune/retention warnings as a first-class panel instead of only JSON. +- [ ] Improve log filtering by service, host, run, severity, and time window. + +Suggested commit tag: `(ui)` or `(feature)` + +## 3. Backup Safety And Preflight Validation + +Goal: catch bad configuration before a real backup starts. + +- [ ] Add preflight checks for SSH reachability, remote rsync availability, source root existence, and key selection. +- [ ] Add per-host effective config preview for source root, SSH, rsync args, includes, excludes, and retention. +- [ ] Warn for dangerous or confusing combinations, such as backing up `/` without root-level excludes. +- [ ] Make dry-run summaries easier to read: files seen, transfer estimate, warnings, and log link. +- [ ] Keep real backup actions gated by clear state: ready, warning, or blocked. + +Suggested commit tag: `(feature)` + +## 4. Retention UX And Safety + +Goal: pruning should be transparent, safe, and understandable. + +- [ ] Improve the retention plan view with keep/delete reasons. +- [ ] Highlight when a planned deletion exceeds `prune_max_delete`. +- [ ] Show whether base snapshots are protected and why. +- [ ] Make retention warnings visible on dashboard, host detail, and run detail. +- [ ] Keep manual retention apply flow explicit with host confirmation. + +Suggested commit tag: `(ui)` or `(feature)` + +## 5. Dashboard 1.0 + +Goal: the dashboard should be a useful operational starting point. + +- [ ] Polish host cards for scanability and mobile layout. +- [ ] Show running, queued, warning, and failed states more clearly. +- [ ] Separate "last good backup" from "latest failed/warning run". +- [ ] Make disk usage and growth estimates easier to interpret. +- [ ] Improve empty states for fresh installs. + +Suggested commit tag: `(ui)` + +## 6. Restore Story + +Goal: pobsync 1.0 should clearly explain how to restore data. + +- [ ] Document manual restore from snapshot directories. +- [ ] Add snapshot detail restore guidance with source and destination examples. +- [ ] Include rsync restore command examples using the selected snapshot. +- [ ] Explain hardlinks/link-dest implications for restores. +- [ ] Defer automatic restore execution unless the manual story is solid. + +Suggested commit tag: `(docs)` or `(feature)` + +## 7. Config Cleanup And Legacy Removal + +Goal: Django/systemd should be the primary mental model, with old CLI concepts minimized. + +- [ ] Remove or hide remaining legacy config language from the README and UI. +- [ ] Keep management commands only where useful for operations, automation, or debugging. +- [ ] Normalize labels: service user, SSH user, source root, backup root, schedule expression, retention. +- [ ] Keep Docker documented as development/test tooling, not the primary production path. +- [ ] Review old command aliases and decide which stay for compatibility. + +Suggested commit tag: `(refactor)` or `(docs)` + +## 8. Release Hardening + +Goal: ship 1.0 only after install, update, backup, retention, and restore flows have been exercised. + +- [ ] Run the full test suite. +- [ ] Fresh install on a clean VM/server. +- [ ] Upgrade test from the current production install. +- [ ] Confirm scheduled backup, manual backup, dry-run, cancellation, retention, log view, and dashboard. +- [ ] Add or update `CHANGELOG.md`. +- [ ] Set package/application version to `1.0.0`. +- [ ] Tag the release. + +Suggested commit tag: `(release)` + +## Gitea Tracking Option + +This file is the canonical roadmap in the repository. It can be mirrored into Gitea later as: + +- one `1.0` milestone +- one issue per roadmap chunk +- optional child issues for each checkbox + +If Gitea API access is available, the roadmap can be converted into issues with a small script or manual API calls.