80 lines
4.0 KiB
Markdown
80 lines
4.0 KiB
Markdown
# Decision Log
|
|
|
|
## Frozen Decisions
|
|
|
|
### D-001 Naming
|
|
|
|
- Internal product name: `Atlas for Mac`
|
|
- User-facing naming must not use `Mole`
|
|
|
|
### D-002 Open-Source Attribution
|
|
|
|
- Atlas for Mac is an independent product
|
|
- Upstream attribution must acknowledge Mole by tw93 and contributors
|
|
- Shipped materials must include MIT notice when upstream-derived code is distributed
|
|
|
|
### D-003 Distribution
|
|
|
|
- MVP distribution target is direct distribution
|
|
- Use `Developer ID + Hardened Runtime + Notarization`
|
|
- Do not target Mac App Store for MVP
|
|
|
|
### D-004 MVP Scope
|
|
|
|
- In scope: `Overview`, `Smart Clean`, `Apps`, `History`, `Recovery`, `Permissions`, `Settings`
|
|
- Out of MVP: `Storage treemap`, `Menu Bar`, `Automation`
|
|
|
|
### D-005 Process Boundaries
|
|
|
|
- UI must not parse terminal output directly
|
|
- Privileged actions must go through a structured helper boundary
|
|
- Worker owns long-running orchestration and progress streaming
|
|
|
|
### D-006 MVP Persistence and Command Surface
|
|
|
|
- MVP workspace state is persisted locally as a structured JSON store
|
|
- Settings, history, recovery, Smart Clean execute, and app uninstall flows use structured worker commands
|
|
- UI state should reflect repository-backed worker results instead of direct mutation
|
|
|
|
### D-007 Helper Execution and Native Packaging
|
|
|
|
- Destructive helper actions use a structured executable boundary with path validation
|
|
- Native MVP packaging uses `xcodegen + xcodebuild`, then embeds the helper into the app bundle
|
|
- Tagged GitHub Releases should publish the native `.zip`, `.dmg`, and `.pkg` assets from CI using the same packaging scripts as local release builds
|
|
- If CI lacks `Developer ID` release credentials, tagged native assets may still be published as development-signed prereleases instead of blocking the packaging path entirely
|
|
- Signing and notarization remain optional release-time steps driven by credentials
|
|
- Internal packaging should prefer a stable local app-signing identity over ad hoc signing whenever possible so macOS permission state does not drift across rebuilds
|
|
|
|
### D-008 App Language Preference and Localization
|
|
|
|
- MVP now supports `简体中文` and `English` through a persisted app-language preference
|
|
- The default app language is `简体中文`
|
|
- User-facing shell copy is localized through package-scoped resources instead of hard-coded per-screen strings
|
|
- The language preference is stored alongside other settings so worker-generated summaries stay aligned with UI language
|
|
|
|
### D-009 Execution Capability Honesty
|
|
|
|
- User-facing execution flows must fail closed when real disk-backed execution is unavailable
|
|
- Atlas must not silently fall back to scaffold behavior for release-facing cleanup execution
|
|
- Smart Clean execute must not claim success until real filesystem side effects are implemented
|
|
|
|
### D-010 Competitive Response Stays Inside Frozen MVP
|
|
|
|
- Atlas responds to competitor pressure through `selective parity`, not breadth racing
|
|
- `Mole` and `Tencent Lemon Cleaner` set the main comparison pressure for `Smart Clean`
|
|
- `Pearcleaner` and `Tencent Lemon Cleaner` set the main comparison pressure for `Apps`
|
|
- Competitor response work must deepen existing MVP flows rather than reopen deferred scope
|
|
- `Storage treemap`, `Menu Bar`, and `Automation` remain out of scope unless the decision log is updated explicitly
|
|
- Atlas should compete as an `explainable, recovery-first Mac maintenance workspace`, not as a generic all-in-one cleaner
|
|
|
|
### D-011 Versioned Workspace State and Recovery Payload Compatibility
|
|
|
|
- Persisted workspace state uses a versioned JSON envelope instead of an unversioned top-level payload
|
|
- Atlas must continue decoding older top-level workspace-state files and rewrite them into the current envelope when possible
|
|
- App recovery payloads carry an explicit schema version and must remain backward-compatible with legacy app-only recovery payload shapes
|
|
- App payload restores must refresh app inventory before `Apps` reuses footprint counts or uninstall preview state
|
|
|
|
## Update Rule
|
|
|
|
Add a new decision entry whenever product scope, protocol, privilege boundaries, release route, or recovery model changes.
|