release-hardening_1.0 #21

Merged
parkel merged 8 commits from issue-8-release-hardening into master 2026-05-21 03:56:25 +02:00
Owner

Summary

Release-hardening pass for pobsync 1.0.

This prepares the 1.0.0 release metadata and rounds out the operational safety work around backups, worker state, cleanup, auditability, SSH key management, and release visibility.

Included

  • Set package/application version to 1.0.0.
  • Add CHANGELOG.md and an authenticated in-app changelog page.
  • Track worker heartbeat metadata and reconcile stale running runs.
  • Add explicit incomplete snapshot cleanup separate from retention pruning.
  • Add review/resolve flow for failed or warning runs and incomplete snapshot tasks.
  • Harden SSH key management with edit/delete flows and in-use delete protection.
  • Add purged snapshot audit history with source, reason, operator, host, kind, path, and timestamp.
  • Keep Docker/dev tooling healthy while keeping systemd/native install as the production path.

Verification

  • git diff --check origin/master...HEAD
  • docker compose run --rm web python manage.py check -v 2
  • docker compose run --rm web python manage.py makemigrations --check --dry-run -v 2
  • docker compose run --rm web pobsync --version
  • docker compose run --rm web python manage.py test pobsync_backend -v 2
  • docker compose build
  • docker compose up -d --force-recreate web worker scheduler
  • docker compose ps

Closes #8
Closes #10
Closes #11
Closes #16
Closes #19
Closes #20

## Summary Release-hardening pass for pobsync 1.0. This prepares the 1.0.0 release metadata and rounds out the operational safety work around backups, worker state, cleanup, auditability, SSH key management, and release visibility. ## Included - Set package/application version to `1.0.0`. - Add `CHANGELOG.md` and an authenticated in-app changelog page. - Track worker heartbeat metadata and reconcile stale running runs. - Add explicit incomplete snapshot cleanup separate from retention pruning. - Add review/resolve flow for failed or warning runs and incomplete snapshot tasks. - Harden SSH key management with edit/delete flows and in-use delete protection. - Add purged snapshot audit history with source, reason, operator, host, kind, path, and timestamp. - Keep Docker/dev tooling healthy while keeping systemd/native install as the production path. ## Verification - `git diff --check origin/master...HEAD` - `docker compose run --rm web python manage.py check -v 2` - `docker compose run --rm web python manage.py makemigrations --check --dry-run -v 2` - `docker compose run --rm web pobsync --version` - `docker compose run --rm web python manage.py test pobsync_backend -v 2` - `docker compose build` - `docker compose up -d --force-recreate web worker scheduler` - `docker compose ps` Closes #8 Closes #10 Closes #11 Closes #16 Closes #19 Closes #20
parkel added 8 commits 2026-05-21 03:56:15 +02:00
Add the initial 1.0.0 changelog, bump the package/application version,
and expose the release version through `pobsync --version`.

Cover the version output in the console entrypoint tests.
Expose the repository CHANGELOG.md through a staff-only Django view and
link it from the main navigation.

Render a small safe subset of Markdown without adding a runtime dependency,
copy the changelog into the Docker image, and cover the page with view tests.
Record worker pid, host, claim time, and heartbeat metadata on running
backup jobs so operators can see which worker owns a run.

Refresh the heartbeat while rsync is active and reconcile stale running
runs when the worker heartbeat stops. Add a worker option to tune or
disable stale-run reconciliation.

Refs #11
Add a dedicated cleanup path for incomplete snapshots instead of letting
retention prune them implicitly. The retention plan now exposes a guarded
form that requires host and delete-count confirmation before removing
.incomplete snapshot directories and their SQL records.

Keep scheduled/manual retention behavior unchanged, add path safety checks,
and cover cleanup success, confirmation failures, max-delete limits, and
unexpected paths in tests.

Refs #10
Add reviewed state for failed/warning runs and incomplete snapshot records,
then use it to clear dashboard and host “need review” tasks after an operator
has acknowledged them.

Expose Mark reviewed actions on run detail and host retention warnings, keep
reviewed records available for audit/debug, and exclude reviewed problem runs
from operational counts and latest issue summaries.

Refs #19
Refs #8
Make SSH credential management more explicit by adding an edit action in the
key overview and requiring name confirmation before deletion. Keep deletion
blocked while a key is still selected by hosts or global config, and cover
rename, delete confirmation, and in-use protection in view tests.

Refs #20
Refs #8
Record snapshot purge history whenever retention or incomplete cleanup removes
snapshot directories and SQL records. Store the purge reason, original kind,
path, action source, and triggering operator so manual, scheduled, CLI, and
incomplete cleanup actions remain auditable after the original snapshot record
is deleted.

Add a staff-only Purged Snapshots page with host/action filters and register
the audit model in Django admin.

Refs #16
Refs #8
Bring the 1.0.0 release notes up to date with the release-hardening work
completed after the initial metadata pass: worker heartbeat tracking,
incomplete snapshot cleanup, review resolution, SSH key management hardening,
purged snapshot audit history, and the in-app changelog page.

Refs #8
Refs #10
Refs #11
Refs #16
Refs #19
Refs #20
parkel merged commit 00d4f2a70b into master 2026-05-21 03:56:25 +02:00
parkel deleted branch issue-8-release-hardening 2026-05-21 03:56:25 +02:00
Sign in to join this conversation.