Skip to content

Harden NAS cleanup integrity - #28

Merged
Xander-git merged 4 commits into
mainfrom
cleanup-integrity-guards
Jun 1, 2026
Merged

Harden NAS cleanup integrity#28
Xander-git merged 4 commits into
mainfrom
cleanup-integrity-guards

Conversation

@Xander-git

Copy link
Copy Markdown
Collaborator

Summary

  • Adds shared cleanup candidate planning and exact delete-only cleanup so automatic cleanup deletes only proofed local files.
  • Defaults ignored files to local retention with nas_cleanup.delete_ignored for explicit discard behavior.
  • Removes the misleading remote stat cleanup guard, adds structured cleanup deferral reasons, and untracks ignored graphify-out artifacts.

Test Plan

  • uv run pytest tests/unit/sync/test_run_delete.py -q
  • uv run pytest tests/unit/sync/test_nas_client_extra.py -q
  • uv run pytest tests/unit/sync/test_cleanup.py -q
  • uv run pytest tests/unit/config/test_models.py -q
  • uv run pytest tests/unit/sync tests/unit/orchestrator/test_quiescence_poller.py tests/integration/test_nas_sync.py -q
  • uv run ruff check src/exlab_wizard/sync src/exlab_wizard/config tests/unit/sync tests/unit/config
  • uv run mypy src/exlab_wizard/sync src/exlab_wizard/config

Xander-git and others added 4 commits May 30, 2026 23:19
Release-asset naming: per-OS installers are now named
ExLabWizard_v<release-tag>.<ext> (e.g. ExLabWizard_v0.2.0.exe/.dmg/.AppImage).
The name is driven by the release tag with a leading v/V normalised, so both
v0.2.0 and 0.2.0 produce ExLabWizard_v0.2.0 (never _vv0.2.0). Non-release
builds (dispatch/PR) fall back to the package __version__. Raw onedir archives
keep an OS suffix (ExLabWizard_v<tag>-<suffix>.{zip,tar.gz}) because macOS and
Linux both emit .tar.gz and would otherwise collide as release assets. The
Inno .iss takes a /DOutputBaseName define; upload + release globs updated to
ExLabWizard_v*.

Pre-releases: the `published` activity type already fires for pre-releases, so
publishing a pre-release builds + attaches the full installer set (test an RC
before shipping). No trigger change; documented in the workflow header.

Pre-releases do NOT notify: the startup checker polls releases/latest, which
GitHub defines as the most recent non-prerelease, non-draft release -- so a
pre-release never prompts an upgrade. Added a defensive guard in
fetch_latest_tag (skip payloads flagged prerelease/draft) + two unit tests so
the requirement is encoded in our code, not just implied by the endpoint.

README updated for the new asset names and the pre-release behaviour.

Tag-name input is routed through env (not interpolated into the run body) to
avoid shell injection.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add exact cleanup candidate planning, delete-only cleanup, ignored-file retention by default, explicit cleanup deferral reasons, and tests.

Also stop tracking graphify-out artifacts now that the directory is ignored.
# Conflicts:
#	tests/unit/sync/test_nas_client.py
@Xander-git
Xander-git merged commit dcddf96 into main Jun 1, 2026
8 checks passed
@Xander-git
Xander-git deleted the cleanup-integrity-guards branch June 1, 2026 21:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant