- Debug APK:
.\gradlew.bat assembleDebug --no-daemon --no-configuration-cache --console=plain - Release APK:
.\gradlew.bat assembleRelease --no-daemon --no-configuration-cache --console=plain - Release AAB:
.\gradlew.bat bundleRelease --no-daemon --no-configuration-cache --console=plain - Local store-candidate gate:
.\gradlew.bat verifyStoreCandidate --no-daemon --no-configuration-cache --console=plain - Store-listing assets:
.\gradlew.bat verifyStoreListingAssets --no-daemon --no-configuration-cache --console=plain - Store-listing copy:
.\gradlew.bat verifyStoreListingCopy --no-daemon --no-configuration-cache --console=plain - Privacy/Data Safety disclosure alignment:
.\gradlew.bat verifyPrivacyDisclosures --no-daemon --no-configuration-cache --console=plain - Public privacy-policy draft:
.\gradlew.bat verifyPublicPrivacyPolicyDraft --no-daemon --no-configuration-cache --console=plain - Privacy-policy hosting readiness:
.\gradlew.bat verifyPrivacyPolicyHosting --no-daemon --no-configuration-cache --console=plain - In-app policy/support readiness:
.\gradlew.bat verifyInAppPolicySupport --no-daemon --no-configuration-cache --console=plain - Third-party notices readiness:
.\gradlew.bat verifyThirdPartyNotices --no-daemon --no-configuration-cache --console=plain - Play Console app-content readiness:
.\gradlew.bat verifyPlayConsoleReadiness --no-daemon --no-configuration-cache --console=plain - Play Console submission runbook readiness:
.\gradlew.bat verifyPlaySubmissionRunbook --no-daemon --no-configuration-cache --console=plain - Play release notes/version readiness:
.\gradlew.bat verifyReleaseNotes --no-daemon --no-configuration-cache --console=plain - Release signing runbook readiness:
.\gradlew.bat verifySigningRunbook --no-daemon --no-configuration-cache --console=plain - Device/OEM smoke checklist readiness:
.\gradlew.bat verifyDeviceSmokeChecklist --no-daemon --no-configuration-cache --console=plain - Distribution readiness matrix:
.\gradlew.bat verifyDistributionReadiness --no-daemon --no-configuration-cache --console=plain - Permission policy:
.\gradlew.bat verifyDebugPermissions verifyReleasePermissions --no-daemon --no-configuration-cache --console=plain - Local unit tests: run through the
T:alias described indocs/testing.md. - Instrumented test APK compile:
.\gradlew.bat assembleDebugAndroidTest --no-daemon --no-configuration-cache --console=plain - Device/emulator tests:
.\gradlew.bat connectedDebugAndroidTest --no-daemon --no-configuration-cache --console=plain - Signed release APK/AAB: provide
keystore.propertiesor theTIMESTACK_RELEASE_*environment variables, then run.\gradlew.bat verifySignedStoreCandidate --no-daemon --no-configuration-cache --console=plain.
- API 36 AVD:
medium_phone, modelsdk_gphone64_x86_64, Android 16. - Installed package:
com.lvjun.timestack. - Launch target:
com.lvjun.timestack/com.example.timestack.MainActivity. connectedDebugAndroidTestpassed on 2026-07-01: 46 tests, 0 failures, 0 errors, 0 skipped.- Evidence artifacts:
artifacts/timestack-home-api36.png,artifacts/timestack-wide-api36.png,artifacts/product-audit-2026-07-01-settings/,artifacts/product-audit-2026-07-01-review-trends/,artifacts/product-audit-2026-07-01-current-product/,artifacts/product-flow-audit-2026-07-01-current-run/,artifacts/review-triage-audit-2026-07-01/,artifacts/reminder-throttle-audit-2026-07-01/,artifacts/focus-reminder-quiet-audit-2026-07-01/,artifacts/task-row-focus-audit-2026-07-01/,artifacts/task-row-delete-audit-2026-07-01/,artifacts/inbox-attention-audit-2026-07-01/,artifacts/system-picker-smoke-2026-07-01/,artifacts/widget-smoke-2026-07-01/,artifacts/reminder-permission-smoke-2026-07-01/,artifacts/permission-audit-2026-07-01/,artifacts/release-bundle-audit-2026-07-01/,artifacts/store-candidate-gate-2026-07-01/,artifacts/store-listing-copy-audit-2026-07-01/,artifacts/privacy-disclosure-gate-2026-07-02/,artifacts/public-privacy-policy-gate-2026-07-02/,artifacts/privacy-policy-hosting-gate-2026-07-02/,artifacts/in-app-policy-support-gate-2026-07-02/,artifacts/third-party-notices-gate-2026-07-02/,artifacts/play-console-readiness-gate-2026-07-02/,artifacts/play-submission-runbook-gate-2026-07-02/,artifacts/release-notes-gate-2026-07-02/,artifacts/signing-runbook-gate-2026-07-02/,artifacts/device-smoke-checklist-gate-2026-07-02/,artifacts/distribution-readiness-gate-2026-07-02/,artifacts/visual-golden-audit-2026-07-01/,artifacts/screenshot-matrix-2026-07-01/,artifacts/settings-privacy-trust-audit-2026-07-01/,artifacts/settings-app-identity-audit-2026-07-01/,artifacts/settings-backup-live-summary-audit-2026-07-01/andartifacts/settings-backup-passphrase-clear-audit-2026-07-01/. - Connected test report:
app/build/reports/androidTests/connected/debug/index.html. - APK resource check: debug APK packages the TimeStack adaptive launcher icon XML and
ic_notification_timestack.xml; old generated launcher webp files are not packaged. - Window/insets check:
MainActivityenables edge-to-edge, disables API 29+ navigation-bar contrast enforcement, and the merged debug/release manifests keepwindowSoftInputMode="adjustResize"on the Activity. - Notification delivery check:
ReminderWorkerposts a TimeStack notification afterPOST_NOTIFICATIONSis granted on the API 36 emulator, local-hour delivery throttling caps foreground notification posts at 2 per hour, and running Focus timer state silences non-schedule reminders while allowing schedule reminders. Evidence:artifacts/reminder-throttle-audit-2026-07-01/andartifacts/focus-reminder-quiet-audit-2026-07-01/. - Primary action callback check: focus, task, countdown, calendar event, habit, Today task-row direct focus/delete and unresolved-task actions, including reschedule/split/cancel, are covered by Compose device tests.
- Editor and inbox check: task, habit, timeline event, countdown and manual time-log editor save flows plus inbox promote/delete actions are covered by Compose device tests.
- Navigation check: Navigation 3 top-level destination switching and back behavior from task detail/settings routes are covered by Compose device tests.
- Focus and review check: Focus timer running/paused/finished UI states, Focus paused-state restoration after recreation, Review daily-review/question save flows, historical review trend stats and visible focus-session history stats are covered by Compose device tests.
- Settings flow check: preferences save callbacks, installed app identity display, live backup data summary updates, reminder-row labels/toggle callbacks, backup entry points, encrypted-backup password entry, visible backup-password clearing after export/import preview/restore and compact 400dp + 1.5 font scale reachability are covered by Compose device tests.
- Settings trust check: the in-app Settings surface displays the local-first data boundary, including no network permission, no accounts/ads/analytics/cloud sync, Room local storage, Android system picker backup/import, backup-password scope and uninstall behavior. Evidence:
artifacts/settings-privacy-trust-audit-2026-07-01/. - Settings identity check: the in-app Settings surface reads installed package metadata from Android and displays app name, version, package name and Debug/Release state. Evidence:
artifacts/settings-app-identity-audit-2026-07-01/. - Settings backup live-summary check: the in-app Settings backup surface always includes the current snapshot data summary and appends operation status through the polite live region. Evidence:
artifacts/settings-backup-live-summary-audit-2026-07-01/. - Settings backup passphrase-clear check: the visible backup password field clears after successful export, successful import preview and successful restore, while pending restore keeps only the temporary passphrase needed for confirmation. Evidence:
artifacts/settings-backup-passphrase-clear-audit-2026-07-01/. - Visual smoke/golden check: automated screenshot tests verify nonblank, visually varied frames for compact phone home, tablet landscape home, dark review and 1.5 font scale settings surfaces; on the API 36 reference AVD they also assert stable sampled visual signatures. Evidence:
artifacts/visual-golden-audit-2026-07-01/. - Product shell polish check: bottom navigation, global/settings entry points and quick-create direct actions use real Material icons with retained Chinese text labels and existing accessibility labels. Settings backup now gives primary visual priority to export and secondary priority to import. Evidence:
artifacts/product-flow-audit-2026-07-01-current-run/. - Inbox attention check: Today surfaces stale or overloaded inbox state below the summary metrics and the "整理" action opens Inbox, preventing old captured items from staying hidden. Evidence:
artifacts/inbox-attention-audit-2026-07-01/. - Task row focus check: Today ordinary task rows expose a direct play-icon focus action, preserving the detail route and complete/restore action. Evidence:
artifacts/task-row-focus-audit-2026-07-01/. - Task row delete check: Today ordinary task rows expose a delete icon, accessibility label and destructive confirmation dialog, preserving the detail route plus complete/restore/focus actions. Evidence:
artifacts/task-row-delete-audit-2026-07-01/. - Review triage check: unresolved tasks can now be explicitly continued tomorrow, rescheduled, split into inbox items, lowered in priority, moved back to inbox, cancelled without being counted as done, or deleted. Room schema v8 and backup format v8 preserve cancelled task state while legacy v7 task records import as not cancelled. Evidence:
artifacts/review-triage-audit-2026-07-01/. - System picker backup smoke check: API 36 emulator DocumentsUI exported readable JSON, exported password-encrypted JSON, imported the encrypted backup with the same password, showed restore preview and completed restore. Evidence:
artifacts/system-picker-smoke-2026-07-01/. - Launcher widget smoke check: API 36 Nexus Launcher lists TimeStack Today, Focus and Habits widget providers, places the Today widget on the home screen with live data, and opens
MainActivityfrom a widget tap. Evidence:artifacts/widget-smoke-2026-07-01/. - Reminder permission/scheduling smoke check: API 36 emulator revoked
POST_NOTIFICATIONS, granted it through the real system dialog, verified Settings switch enablement, and confirmed reminder UI, Room state and WorkManager enqueue/cancel state stay consistent after the retained Navigation 3 snapshot fix. Evidence:artifacts/reminder-permission-smoke-2026-07-01/. - Latest full verification after the Navigation snapshot fix:
testDebugUnitTest assembleDebugAndroidTest assembleRelease connectedDebugAndroidTestpassed, including 37 connected tests onmedium_phone. - Permission audit check:
verifyDebugPermissions verifyReleasePermissions assembleDebug assembleReleasepassed andaapt2 dump permissionsconfirmed debug/release APKs contain only the allowed merged permissions with noINTERNETor sensitive device/data permissions. Evidence:artifacts/permission-audit-2026-07-01/. - Release bundle check:
verifyReleasePermissions bundleReleasepassed and producedapp/build/outputs/bundle/release/app-release.aabwith the expected bundle structure.jarsignerconfirms the local AAB remains unsigned until a real release/upload key is provided. Evidence:artifacts/release-bundle-audit-2026-07-01/. - Store-candidate gate check:
verifyStoreCandidatepassed after store-listing asset and copy verification were added and now aggregates the local no-secret/no-device release gate, including candidate Play Store PNG dimensions, listing references, listing text length limits and obvious promotional/ranking risk phrases;:app:verifyReleaseSigningConfiguredfails with a clear signing-credentials message until a real keystore/upload key is configured. Evidence:artifacts/store-candidate-gate-2026-07-01/. - Privacy disclosure gate check:
verifyPrivacyDisclosurespassed and is included inverifyStoreCandidate, binding the privacy and Data Safety drafts to the source manifest, permission allowlist and Android backup-rule XML files. Evidence:artifacts/privacy-disclosure-gate-2026-07-02/. - Public privacy-policy draft check:
verifyPublicPrivacyPolicyDraftpassed and is included inverifyStoreCandidate, preparing a hostable privacy-policy draft while keeping real public contact and HTTPS hosting as pre-release requirements. Evidence:artifacts/public-privacy-policy-gate-2026-07-02/. - Privacy-policy hosting check:
verifyPrivacyPolicyHostingpassed and is included inverifyStoreCandidate, binding the public URL, public contact, Play Console Privacy Policy field and Data Safety consistency checklist to the current public policy draft. FinalverifyStoreCandidatereruns after adding the gate and updating evidence docs passed repeatedly with:verifyPrivacyPolicyHostingincluded. Evidence:artifacts/privacy-policy-hosting-gate-2026-07-02/. - In-app policy and support section check:
verifyInAppPolicySupportpassed and covers the Settings政策与支持in-app policy and support section, its Compose test and release docs, binding privacy-policy boundary, support contact readiness, no network feedback and submission reminders to the current build.testDebugUnitTest assembleDebugAndroidTestpassed after the UI and test changes; no device was attached for connected execution in this pass. The finalverifyStoreCandidatererun after adding the gate passed with:verifyInAppPolicySupportincluded. Evidence:artifacts/in-app-policy-support-gate-2026-07-02/. - Third-party notices check:
verifyThirdPartyNoticescoversdocs/third-party-notices.md, Settings开源许可copy, release runtime dependency declarations fromgradle/libs.versions.toml, and local POM license spot-check evidence. Evidence:artifacts/third-party-notices-gate-2026-07-02/. - Play Console readiness check:
verifyPlayConsoleReadinesspassed and is included inverifyStoreCandidate, covering local preparation for privacy policy URL, Data Safety, ads, app access, target audience, content rating, permissions declaration and account deletion answers. Evidence:artifacts/play-console-readiness-gate-2026-07-02/. - Play submission runbook check:
verifyPlaySubmissionRunbookpassed and coversdocs/play-submission-runbook.md, binding Play Console app creation, store listing, app content, testing tracks, production access, managed publishing, errors summary, pre-launch report and rollout evidence to the current release docs. The finalverifyStoreCandidatererun after adding the gate passed with:verifyPlaySubmissionRunbookincluded. Evidence:artifacts/play-submission-runbook-gate-2026-07-02/. - Release notes check:
verifyReleaseNotespassed and is included inverifyStoreCandidate, binding Play release notes to the current versionName/versionCode and enforcing language-tag format, 500-character per-language limits and no obvious promotional/solicitation wording. Evidence:artifacts/release-notes-gate-2026-07-02/. - Release signing runbook check:
verifySigningRunbookpassed and is included inverifyStoreCandidate, binding upload-key signing guidance, ignored secret boundaries, signed AAB/APK verification commands and release evidence requirements to the current Gradle signing hooks. Evidence:artifacts/signing-runbook-gate-2026-07-02/. - Device/OEM smoke checklist check:
verifyDeviceSmokeChecklistpassed and is included inverifyStoreCandidate, binding physical-phone, OEM launcher, signed release install, real reminder delivery, document provider, IME, large-screen and TalkBack spot-check requirements to the release docs. The finalverifyStoreCandidatererun after adding the gate passed with:verifyDeviceSmokeChecklistincluded. Evidence:artifacts/device-smoke-checklist-gate-2026-07-02/. - Distribution readiness matrix check:
verifyDistributionReadinesspassed and is included inverifyStoreCandidate, binding local gate evidence, external blockers and the release decision summary todocs/distribution-readiness.md. The finalverifyStoreCandidatererun after adding the gate passed with:verifyDistributionReadinessincluded. Evidence:artifacts/distribution-readiness-gate-2026-07-02/. - Latest full connected-device check after Review unresolved-task triage:
connectedDebugAndroidTestpassed on the API 36medium_phoneAVD with 37 tests, 0 failures, 0 errors and 0 skipped. Evidence:artifacts/visual-golden-audit-2026-07-01/. - Latest reminder-throttle check:
testDebugUnitTestpassed with reminder delivery-window coverage, andconnectedDebugAndroidTestpassed on the API 36medium_phoneAVD with 37 tests, 0 failures, 0 errors and 0 skipped after the worker state reset was added. Evidence:artifacts/reminder-throttle-audit-2026-07-01/. - Latest inbox-attention check:
testDebugUnitTest assembleDebugAndroidTestpassed, Home visual signatures were rebased for the new Today card, andconnectedDebugAndroidTestpassed on the API 36medium_phoneAVD with 38 tests, 0 failures, 0 errors and 0 skipped. Evidence:artifacts/inbox-attention-audit-2026-07-01/. - Latest focus-reminder quiet check:
testDebugUnitTest assembleDebugAndroidTestpassed,connectedDebugAndroidTestpassed on the API 36medium_phoneAVD with 40 tests, 0 failures, 0 errors and 0 skipped, andverifyStoreCandidatepassed. Evidence:artifacts/focus-reminder-quiet-audit-2026-07-01/. - Latest task-row focus check:
testDebugUnitTest assembleDebugAndroidTestpassed,connectedDebugAndroidTestpassed on the API 36medium_phoneAVD with 40 tests, 0 failures, 0 errors and 0 skipped, andverifyStoreCandidatepassed in 2m 53s. Evidence:artifacts/task-row-focus-audit-2026-07-01/. - Latest task-row delete check:
testDebugUnitTest assembleDebugAndroidTestpassed,connectedDebugAndroidTestpassed on the API 36medium_phoneAVD with 40 tests, 0 failures, 0 errors and 0 skipped, andverifyStoreCandidatepassed in 2m 34s. Evidence:artifacts/task-row-delete-audit-2026-07-01/. - Latest settings privacy trust check:
testDebugUnitTest assembleDebugAndroidTestpassed in 18s,connectedDebugAndroidTestpassed on the API 36medium_phoneAVD with 41 tests, 0 failures, 0 errors and 0 skipped, andverifyStoreCandidatepassed in 2m 17s. Evidence:artifacts/settings-privacy-trust-audit-2026-07-01/. - Latest settings app identity check:
testDebugUnitTest assembleDebugAndroidTestpassed in 51s,connectedDebugAndroidTestpassed on the API 36medium_phoneAVD with 42 tests, 0 failures, 0 errors and 0 skipped,verifyStoreCandidatepassed in 2m 18s, andverifySignedStoreCandidatefailed as expected in 16s without signing credentials. Evidence:artifacts/settings-app-identity-audit-2026-07-01/. - Latest settings backup live-summary check:
testDebugUnitTest assembleDebugAndroidTestpassed in 45s,connectedDebugAndroidTestpassed on the API 36medium_phoneAVD in 4m 9s with 43 tests, 0 failures, 0 errors and 0 skipped,verifyStoreCandidatepassed in 1m 58s, andverifySignedStoreCandidatefailed as expected in 11s without signing credentials. Evidence:artifacts/settings-backup-live-summary-audit-2026-07-01/. - Latest settings backup passphrase-clear check:
testDebugUnitTest assembleDebugAndroidTestpassed in 47s, targeted import-preview and restore passphrase-clear tests passed on the API 36medium_phoneAVD in 46s with 2 tests, 0 failures, 0 errors and 0 skipped,connectedDebugAndroidTestpassed in 2m 7s with 46 tests, 0 failures, 0 errors and 0 skipped,verifyStoreCandidatepassed in 21s, andverifySignedStoreCandidatefailed as expected in 15s without signing credentials. Evidence:artifacts/settings-backup-passphrase-clear-audit-2026-07-01/.
- Android application id:
com.lvjun.timestack. - Release APK and AAB builds enable R8 minification and resource shrinking.
verifyStoreCandidateaggregates the local no-device/no-secret release gate: store-listing asset validation, store-listing copy validation, privacy/Data Safety disclosure validation, public privacy-policy draft validation, privacy-policy hosting validation, in-app policy/support validation, third-party notices validation, Play Console readiness validation, Play submission runbook validation, release-notes/version validation, release signing runbook validation, device/OEM smoke checklist validation, distribution readiness matrix validation, unit tests, Android test APK compilation, merged-manifest permission checks, release APK and release AAB builds.verifySignedStoreCandidateadditionally fails fast when release signing credentials or the referenced keystore file are missing.app/proguard-rules.prois reserved for app-specific keep rules; AndroidX, Room, WorkManager, Compose and Kotlinx Serialization provide their consumer rules.- Android system auto-backup is disabled. TimeStack is local-first, so user-controlled JSON export/import in Settings is the supported data migration path.
- Backup export supports readable JSON v8 by default and optional password encryption using an AES-GCM envelope for sensitive personal data; encrypted imports require the same backup password before preview/restore.
- Debug builds seed first-run sample data only when the entire business database is empty. Release builds disable sample content and seed only default preferences, so a freshly installed formal build starts with empty task, habit, inbox, schedule, countdown, focus, review and reminder lists. Empty lists imported from backups remain empty instead of being refilled with examples later.
POST_NOTIFICATIONSis requested only for local reminder delivery.- Product design, privacy, public privacy-policy, privacy-policy hosting, third-party notices, store-listing, Play Console readiness, Play submission, release-notes, signing, device-smoke and distribution-readiness drafts are maintained in
docs/product-design.md,docs/privacy.md,docs/public-privacy-policy.md,docs/privacy-policy-hosting.md,docs/third-party-notices.md,docs/store-listing.md,docs/play-console-readiness.md,docs/play-submission-runbook.md,docs/release-notes.md,docs/signing-runbook.md,docs/device-smoke-checklist.mdanddocs/distribution-readiness.md; a local candidate listing asset pack is available inartifacts/store-listing-2026-07-01/; recheck all copy and assets against the final signed build before any public distribution. MainActivityowns keyboard resize behavior through Activity-scopedadjustResize; standalone editor forms add IME padding so bottom fields and actions remain reachable while typing.- Launcher icons use TimeStack-specific adaptive icon resources. Local notifications use a separate single-color
ic_notification_timestacksmall icon. - Release signing is configured through ignored
keystore.propertiesor environment variables.keystore.properties.exampledocuments the required keys without storing secrets, anddocs/signing-runbook.mddefines the upload-key, certificate fingerprint and signed-artifact verification evidence required before distribution. - Debug APK, release APK and release AAB builds run a merged-manifest permission allowlist. Current allowed permissions are
POST_NOTIFICATIONS, WorkManager scheduling support permissions (WAKE_LOCK,ACCESS_NETWORK_STATE,RECEIVE_BOOT_COMPLETED,FOREGROUND_SERVICE) and the AndroidX dynamic receiver permission.INTERNETand sensitive device/data permissions are intentionally absent.
Run verifyDeviceSmokeChecklist to confirm the current release docs include the required physical-device and OEM smoke plan. Then execute docs/device-smoke-checklist.md on a real candidate build before calling a build release-ready.
- Provide a real signing key or Play App Signing upload key values through
keystore.propertiesorTIMESTACK_RELEASE_*environment variables, then followdocs/signing-runbook.md, rebuild the release APK/AAB and verify the AAB is signed before upload. - Repeat
docs/device-smoke-checklist.mdon at least one physical phone before distributing outside this machine. - Verify real wall-clock delayed reminder delivery, delivery-throttle behavior under OEM background policies and launcher widgets on-device. Android document picker export/import, notification permission/toggle scheduling and Nexus Launcher widget placement have API 36 emulator evidence;
docs/device-smoke-checklist.mdtracks the required physical-phone/OEM-provider spot checks before wider distribution. - Regenerate or approve final public listing assets from the signed build if this moves beyond self-use. A debug-build candidate pack exists under
artifacts/store-listing-2026-07-01/, including phone screenshots, feature graphic, Play Store icon and alt text drafts. - Follow
docs/privacy-policy-hosting.md, replace the contact section indocs/public-privacy-policy.mdwith a real public support email or contact URL, host the policy on HTTPS, and add that URL in Play Console before public distribution. - Review
docs/third-party-notices.md, rerunverifyThirdPartyNoticesand keep third-party notice evidence for the exact signed release candidate before public distribution. - Follow
docs/play-submission-runbook.mdand runverifyPlaySubmissionRunbookbefore any real Play Console upload, testing-track submission, production-access application or rollout.