Add the shared Unpublish job contract and a short, one-attempt worker workflow.
Select recorded generated files, preserve references from other published pieces, and validate paths before withdrawing the public record.
Attempt cache, local-file and exact remote-file cleanup; report failures for human action. Keep archive originals and the core index. No saved deletion plan, retry or recovery machinery.
Share rclone configuration mapping across CDN sync, archive sync, connectivity and Unpublish while retaining caller-specific skip/error policies. Keep generated-file validation in asset utilities.
Include jobs/worker patch changeset and focused tests.
This PR is the worker slice only. Authenticated API/admission and editor integration come in separate slices before end-user exposure; #133 remains open. Normal publishing behavior is preserved.
Validation
Fresh independent code and readability reviews of all 16 files: clear.
393 tests passed: 24 jobs + 369 worker, using existing package coverage configurations.
Both package builds, lint and tracked/new-file whitespace checks passed. No coverage thresholds changed.
No E2E, actual remote deletion or production/browser acceptance performed.
One focused commit; archive edits excluded. No user-facing documentation, dependency or schema changes.
## Summary
- Add the shared Unpublish job contract and a short, one-attempt worker workflow.
- Select recorded generated files, preserve references from other published pieces, and validate paths before withdrawing the public record.
- Attempt cache, local-file and exact remote-file cleanup; report failures for human action. Keep archive originals and the core index. No saved deletion plan, retry or recovery machinery.
- Share rclone configuration mapping across CDN sync, archive sync, connectivity and Unpublish while retaining caller-specific skip/error policies. Keep generated-file validation in asset utilities.
- Include jobs/worker patch changeset and focused tests.
This PR is the worker slice only. Authenticated API/admission and editor integration come in separate slices before end-user exposure; #133 remains open. Normal publishing behavior is preserved.
## Validation
- Fresh independent code and readability reviews of all 16 files: clear.
- **393 tests passed:** 24 jobs + 369 worker, using existing package coverage configurations.
- Both package builds, lint and tracked/new-file whitespace checks passed. No coverage thresholds changed.
- No E2E, actual remote deletion or production/browser acceptance performed.
One focused commit; archive edits excluded. No user-facing documentation, dependency or schema changes.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
This PR is the worker slice only. Authenticated API/admission and editor integration come in separate slices before end-user exposure; #133 remains open. Normal publishing behavior is preserved.
Validation
One focused commit; archive edits excluded. No user-facing documentation, dependency or schema changes.