diff --git a/CleanMac.xcodeproj/project.pbxproj b/CleanMac.xcodeproj/project.pbxproj
index cc6817f..8beb53d 100644
--- a/CleanMac.xcodeproj/project.pbxproj
+++ b/CleanMac.xcodeproj/project.pbxproj
@@ -261,7 +261,7 @@
CODE_SIGN_ENTITLEMENTS = CleanMac/CleanMac.entitlements;
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
- CURRENT_PROJECT_VERSION = 4;
+ CURRENT_PROJECT_VERSION = 5;
ENABLE_APP_SANDBOX = NO;
ENABLE_HARDENED_RUNTIME = YES;
ENABLE_PREVIEWS = YES;
@@ -275,7 +275,7 @@
"$(inherited)",
"@executable_path/../Frameworks",
);
- MARKETING_VERSION = 0.3.0;
+ MARKETING_VERSION = 0.4.0;
PRODUCT_BUNDLE_IDENTIFIER = com.codex.cleanmac;
PRODUCT_NAME = "$(TARGET_NAME)";
REGISTER_APP_GROUPS = YES;
@@ -296,7 +296,7 @@
CODE_SIGN_ENTITLEMENTS = CleanMac/CleanMac.entitlements;
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
- CURRENT_PROJECT_VERSION = 4;
+ CURRENT_PROJECT_VERSION = 5;
ENABLE_APP_SANDBOX = NO;
ENABLE_HARDENED_RUNTIME = YES;
ENABLE_PREVIEWS = YES;
@@ -310,7 +310,7 @@
"$(inherited)",
"@executable_path/../Frameworks",
);
- MARKETING_VERSION = 0.3.0;
+ MARKETING_VERSION = 0.4.0;
PRODUCT_BUNDLE_IDENTIFIER = com.codex.cleanmac;
PRODUCT_NAME = "$(TARGET_NAME)";
REGISTER_APP_GROUPS = YES;
diff --git a/README.md b/README.md
index aa1c8ad..f6ab334 100644
--- a/README.md
+++ b/README.md
@@ -28,9 +28,14 @@ CleanMac is a native SwiftUI utility that scans selected macOS locations, explai
-| Scan area selection | Multi-select application removal |
+| Scan area selection | Application review |
| --- | --- |
-|
|
|
+|
|
|
+
+
+ Smart Shredder
+
+
## Features
diff --git a/contract.md b/contract.md
index 89fe25c..8ace8d2 100644
--- a/contract.md
+++ b/contract.md
@@ -2,63 +2,60 @@
## Task
-- ID: TASK-046
-- Title: Smart irreversible file shredder
+- ID: TASK-047
+- Title: CleanMac v0.4.0 release
- Mode: continue
## Planner Notes
-- Why this task now: the user explicitly requested a separate hacker-style tool for deleting selected files without the Trash or CleanMac restore path.
-- Expected value: a deliberately isolated destructive workflow with review, clear limitations, strong confirmation, and fail-closed path validation.
-- Main risk: per-file overwrite cannot guarantee physical media erasure on SSD/APFS because copy-on-write, clones, snapshots, asynchronous TRIM, and flash wear leveling may preserve older blocks.
-- Safety choice: describe the operation as best-effort irreversible direct deletion; accept only explicitly selected regular files; reject directories, symlinks, hard links, packages, protected system roots, and files changed after review; use descriptor-based overwrite plus identity revalidation and direct unlink.
+- Why this task now: the user explicitly requested that the release be updated after the thermal optimization and Smart Shredder feature were pushed.
+- Expected value: publish the verified feature set as the next minor release with reproducible archive and checksum assets.
+- Main risk: tagging an unverified commit or presenting an ad-hoc build as notarized.
+- Release choice: bump `0.3.0 (4)` to `0.4.0 (5)` because the release adds a user-facing feature; keep the existing ad-hoc/unsigned distribution wording unless signing secrets produce a genuinely signed/notarized artifact in CI.
## Builder Scope
- Allowed files:
- - `CleanMacCore/Sources/CleanMacCore/SecureFileShredder.swift`;
- - focused `CleanMacCore` tests;
- - `CleanMac/Models/CleanMacModels.swift`;
- - `CleanMac/Support/ShredderWorkspaceService.swift`;
- - `CleanMac/Views/ShredderView.swift`;
- - `CleanMac/Views/MainWindowView.swift`;
- - RU/EN localization;
- - `README.md`;
- - Loop documentation files.
+ - `CleanMac.xcodeproj/project.pbxproj`;
+ - `README.md` and `docs/screenshots/`;
+ - release and Loop documentation files.
- Allowed commands:
- - source inspection;
- - direct deletion only inside disposable test fixture directories;
- - `swift test --package-path CleanMacCore`;
- - Debug build and `./script/build_and_run.sh --verify`;
- - localization and Git diff checks;
- - non-destructive UI review up to, but not accepting, the final destructive confirmation.
+ - source/version inspection;
+ - full SwiftPM tests;
+ - Debug build/launch verification;
+ - local Release packaging and fresh-extraction validation;
+ - non-destructive app navigation and screenshot capture without accepting cleanup or shredder actions;
+ - git branch/commit/push and GitHub PR merge;
+ - create and push tag `v0.4.0`;
+ - inspect/edit the corresponding GitHub Release and verify its downloaded assets.
- Out of scope:
- - deleting any real user file during verification, directories, application bundles, privileged/system files, background shredding, scheduled shredding, dependencies, release/version/package changes, signing, or publication.
+ - new feature code, changing deployment targets/dependencies, inventing signing credentials, disabling security, deleting user files, or claiming notarization without evidence.
- Dependencies allowed: none
-- Destructive actions allowed: disposable test fixtures only
+- Destructive actions allowed: generated build/dist artifacts only
## Evaluator Checklist
- Done criteria:
- - Shredder is a separate sidebar destination and does not reuse normal cleanup, Trash, restore, or scheduled scan flows.
- - Review accepts only explicitly selected regular files and records device/inode/size/mtime identity.
- - Execution opens without following symlinks, verifies the same single-link regular file, overwrites through the file descriptor, syncs, truncates, revalidates identity, and unlinks directly.
- - Protected roots, directories, symlinks, hard links, packages, and changed/replaced files fail closed.
- - Final action requires both an acknowledgement and an exact typed phrase; no cancellation is offered after execution starts.
- - UI clearly states that SSD/APFS physical recovery cannot be guaranteed and recommends FileVault for future protection.
- - Neo-glow styling is concentrated on armed/danger states and supports both app appearances.
+ - bundle reports version `0.4.0` and build `5`;
+ - all core tests and Debug launch verification pass on the release commit;
+ - local Release ZIP extracts with a valid strict ad-hoc signature and matching SHA-256;
+ - release version commit is merged into `main` before tagging;
+ - tag `v0.4.0` points to that verified `main` commit;
+ - GitHub Release is published with ZIP and `.sha256` assets and accurate notes/limitations;
+ - downloaded assets pass checksum and fresh-extraction signature/version inspection.
- Required verification:
- - focused shredder tests and full `swift test --package-path CleanMacCore`;
- - localization lint/key parity;
- - Debug build and signed launch verification;
- - live RU/EN layout and confirmation review without accepting deletion;
+ - `swift test --package-path CleanMacCore`;
+ - `./script/build_and_run.sh --verify`;
+ - `./script/package_release.sh`;
+ - bundle version, architecture, signature, and checksum inspection;
+ - GitHub CI/Release workflow and clean asset download verification;
- `git diff --check`.
- Manual checks:
- - Never select or delete a real user file during automated verification.
- - Confirm normal cleanup and restore behavior remain unchanged.
+ - Keep release publication separate from commit/push and tag creation.
+ - Do not claim Developer ID signing or notarization unless the published asset proves it.
## Result
-- Status: complete
-- Verification result: focused shredder tests 4/4; full `CleanMacCore` suite 47/47; EN/RU localization lint and 583-key parity; Debug build, ad-hoc signature, and launch verification; live EN/light and RU/dark UI review; exact-phrase gating review; `git diff --check`.
-- Notes: The production path was not exercised against a real user file. Only disposable SwiftPM fixtures were shredded; the UI fixture was preserved. Apple documents that secure erase options are unavailable for SSDs, so the UI explicitly describes this as best-effort direct deletion rather than guaranteed physical-media erasure.
+- Status: in progress
+- Verification result: pending.
+- Notes: PR #14 is merged and green; release versioning/package publication remains.
diff --git a/docs/screenshots/applications-multiselect.png b/docs/screenshots/applications-multiselect.png
index d816f93..adb50e6 100644
Binary files a/docs/screenshots/applications-multiselect.png and b/docs/screenshots/applications-multiselect.png differ
diff --git a/docs/screenshots/overview.png b/docs/screenshots/overview.png
index 1fb19e5..38ab861 100644
Binary files a/docs/screenshots/overview.png and b/docs/screenshots/overview.png differ
diff --git a/docs/screenshots/scan-areas.png b/docs/screenshots/scan-areas.png
index e5a2bce..1d84378 100644
Binary files a/docs/screenshots/scan-areas.png and b/docs/screenshots/scan-areas.png differ
diff --git a/docs/screenshots/shredder.png b/docs/screenshots/shredder.png
new file mode 100644
index 0000000..96958ef
Binary files /dev/null and b/docs/screenshots/shredder.png differ
diff --git a/roadmap.md b/roadmap.md
index 8e9f21c..da8c143 100644
--- a/roadmap.md
+++ b/roadmap.md
@@ -1,5 +1,19 @@
# Roadmap
+- [ ] ID: TASK-047
+ Title: CleanMac v0.4.0 release
+ Goal: Publish the verified thermal optimization and Smart Shredder as the next feature release.
+ What to do: Bump version/build to 0.4.0 (5), verify core/Debug/Release artifacts, merge the version commit, tag main, publish accurate notes, and validate downloaded assets.
+ Files: Xcode version settings, release/Loop documentation, generated release assets
+ Definition of done: main contains version 0.4.0 (5); v0.4.0 points to the verified commit; GitHub Release contains a ZIP and checksum that validate after a clean download; signing/notarization wording matches the artifact.
+ Verification: full SwiftPM tests; Debug build/launch; local packaging; bundle metadata/architecture/signature/checksum; release workflow; clean downloaded asset verification
+ Priority: high
+ Impact: high
+ Risk: medium
+ Effort: small
+ Confidence: high
+ Score: high impact / medium risk / small
+
- [x] ID: TASK-046
Title: Smart irreversible file shredder
Goal: Add an isolated hacker-style workflow for explicit best-effort overwrite and direct deletion of reviewed files.