- Local unit tests: JUnit4.
- Compose instrumented tests:
androidx.compose.ui:ui-test-junit4inandroidTest. - WorkManager instrumented tests:
androidx.work:work-testinginandroidTest. - Room schema export:
app/schemas/com.example.timestack.data.local.TimeStackDatabase/1.jsonthrough8.json. - Release build gate:
assembleReleaseandbundleReleasewith R8 minification and resource shrinking enabled. - Store-candidate gate:
verifyStoreCandidateaggregates 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, local unit tests, Android test APK compilation, merged-manifest permission checks, release APK and release AAB builds. - Device/emulator gate:
connectedDebugAndroidTeston a local Android 16 / API 36 AVD.
- Sample product data contains the core dashboard content.
- Derived dashboard metrics are recalculated from task and habit state instead of trusting stale sample text.
- Calendar load planner tests cover daily load aggregation from events, open tasks and unresolved habits, configured daily capacity, cancelled-task exclusion, planning buckets and minute formatting.
- Widget content tests cover the Today, habit and focus home-screen widget summary text generated from product data, including cancelled-task exclusion from task and focus summaries.
- Quick input parser tests cover task, timeline event, habit and countdown inference plus extraction of project, priority, estimate, date and time labels.
- Room entity/model mapping preserves task business fields, current-focus flag and sort order.
- Repository task and inbox tests cover add, edit without resetting done/progress state, deleting the current focus, review triage actions for continuing tomorrow, rescheduling to a chosen label, splitting into inbox items, cancelling without counting as done, lowering priority and moving a task back to inbox, capturing parsed inbox suggestions, organizing inbox items into tasks, timeline events, habits and countdowns, and deleting inbox items.
- Repository habit tests cover add, edit without resetting done/progress state, skip behavior, delete behavior and derived habit metrics.
- Repository schedule/countdown tests cover add, edit and delete behavior for fixed timeline events and countdowns.
- Repository focus-session tests cover saving a focus session, manually recording a time log, clamping invalid durations, updating review time-log slices and refreshing the focus metric.
- Focus timer policy tests cover countdown display formatting, remaining-progress clamping and elapsed-minute rounding before saving.
- Repository review tests cover editing a review answer without duplicating the question and saving a daily review snapshot with score clamping, top-task normalization, task/habit counts and focus minutes.
- Review period summary tests cover weekly and monthly recap aggregation, focus time distribution, review score inclusion, historical score averaging, cancelled-task exclusion from completion/risk/next-focus labels and empty-period fallbacks.
- Repository reminder tests cover toggling a local reminder without changing other reminder settings, normalizing review reminder times, recognizing daily reminder labels and rebasing seeded daily reminders into the future.
- Reminder policy tests cover daily trigger parsing, local-hour delivery buckets, the 2-notifications-per-hour delivery cap and reset at the next hour.
- Focus interruption policy tests cover focus activity expiry and the rule that only schedule reminders may interrupt a running focus session.
- JSON backup encoding is readable, round-trips v8 records, imports legacy v7 task records as not cancelled, previews record counts for all local data groups, rejects unsupported format versions, duplicate records, invalid enum/progress/review values and contradictory done-plus-cancelled task state, and supports optional password-encrypted backup envelopes without leaking plaintext record content.
- Backup service tests verify export reads DAO data, password-encrypted export can be previewed/restored only with the matching password, restore requires explicit destructive confirmation before replacing local tasks, habits, inbox, timeline events, countdowns, focus sessions, review questions, daily reviews, reminders and preferences, and successful restore cancels old reminder work before scheduling imported enabled reminders.
- Compose instrumented tests cover the Today section headings, the Today stale-inbox attention card and Inbox navigation action, the task-detail focus FAB content description used by accessibility services, Today task-row direct focus action and task-row delete confirmation action, Navigation 3 top-level destination switching and back behavior from task detail/settings routes, global create sheet quick input capture, single-create-action behavior across compact and wide navigation layouts, primary action callbacks for focus, task, countdown, calendar event, habit, review time-log and unresolved-task actions including reschedule/split/cancel, inbox promote/delete actions, editor form validation/save flows for task, habit, timeline event, countdown and manual time log, Focus timer running/paused/finished UI states, Focus timer paused-state restoration after recreation, task-editor draft restoration after recreation, Review daily-review/question save flows, visible review trend stats and visible focus-session history stats, Settings preference saving, installed app identity display, live backup data summary updates, reminder-row accessibility labels/callbacks, backup entry points, password entry switching export to encrypted JSON, visible backup-password clearing after successful export/import preview/restore, and the Settings flow under a 400dp compact width with 1.5 font scale.
- Settings privacy/data boundary tests cover the in-app no-network/no-accounts/no-ads/no-analytics/no-cloud-sync copy, backup-password scope and uninstall deletion scope.
- Settings in-app policy and support tests cover the
政策与支持section, privacy policy boundary, real support contact readiness, no network feedback, open-source license summary and signed package / privacy policy URL / Data Safety / store screenshots / physical-device smoke / Play Console form reminders. - Automated screenshot smoke tests use Compose
captureToImage()to verify nonblank, visually varied rendered 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 as lightweight golden regression coverage. - Edge-to-edge checks cover
MainActivity.enableEdgeToEdge(), disabled Android navigation-bar contrast enforcement on API 29+, Activity-scopedwindowSoftInputMode="adjustResize"in the merged debug/release manifests and IME padding on the standalone editor forms that useOutlinedTextField. - WorkManager instrumented tests grant
POST_NOTIFICATIONSon API 36, executeReminderWorker, reset the local delivery-throttle and focus-activity state, verify the posted TimeStack notification title, text and channel throughNotificationManager.activeNotifications, and cover both task-reminder silence during running focus and schedule-reminder delivery during running focus. - Navigation 3 retained entries read the latest repository snapshot through
rememberUpdatedState, so Settings reminder toggles and other current-route data changes update without leaving and re-entering the screen. - Room instrumented tests use an in-memory
TimeStackDatabaseto verify Debug sample seed idempotency, Release no-sample first-run defaults, empty-restore seed suppression, core DAO updates and destructivereplaceAllbehavior against the real SQLite engine. - Debug APK, release APK and release AAB builds with Room, KSP, Compose, adaptive bottom/rail navigation, Navigation 3, WorkManager, explicit local-first backup policy and R8 release shrinking.
- Resource packaging checks verify the APK uses TimeStack adaptive launcher XML resources and the dedicated single-color notification icon, with old generated launcher webp files removed from the packaged APK.
- Store listing asset and copy checks verify the local candidate Play Store icon, feature graphic and five phone screenshots exist, have the expected PNG dimensions, alpha/pixel-size properties and references in
docs/store-listing.mdplus the asset notes; they also verify app name, short description and full description length limits plus obvious promotional/ranking metadata risk phrases. - Privacy disclosure checks verify
docs/privacy.md,docs/store-listing.md, the source manifest, the app permission allowlist and Android backup-rule XML files stay aligned on the no-INTERNET, no auto-backup, notification-only, no developer collection/sharing release boundary. - Public privacy-policy draft checks verify
docs/public-privacy-policy.mdcovers the app scope, local storage, no-network claim, permissions, data export/import, data sharing/sale, deletion, children, change policy and the required real public contact replacement before hosting. - Privacy-policy hosting checks verify
docs/privacy-policy-hosting.md,docs/public-privacy-policy.md,docs/privacy.md,docs/play-console-readiness.md,docs/distribution-readiness.md,docs/release.md,docs/testing.md,docs/product-design.mdandREADME.mdstay aligned on public URL, public contact, Play Console Privacy Policy field and Data Safety consistency requirements. - In-app policy/support checks verify
app/src/main/java/com/example/timestack/ui/main/MainScreen.kt,app/src/androidTest/java/com/example/timestack/ui/main/MainScreenTest.kt,docs/privacy.md,docs/play-console-readiness.md,docs/distribution-readiness.md,docs/release.md,docs/testing.md,docs/product-design.mdandREADME.mdstay aligned on the政策与支持in-app policy and support section. The local gate isverifyInAppPolicySupport. - Third-party notices checks verify
docs/third-party-notices.md, the Settings开源许可copy,gradle/libs.versions.toml,app/build.gradle.kts, release docs and evidence notes stay aligned on the currentreleaseRuntimeClasspathdependency families and local POM license spot checks. The local gate isverifyThirdPartyNotices. - Play Console readiness checks verify
docs/play-console-readiness.mdcovers privacy policy URL, Data Safety, ads, app access, target audience, content rating, permissions declaration, account deletion and not-applicable declaration preparation for the current no-account/no-ads/no-network build. - Play submission runbook checks verify
docs/play-submission-runbook.md,docs/play-console-readiness.md,docs/release.md,docs/testing.md,docs/product-design.md,docs/distribution-readiness.mdandREADME.mdstay aligned on Play Console app creation, testing tracks, production access, managed publishing, release creation, errors summary, pre-launch report and rollout evidence. - Release notes checks verify
docs/release-notes.mdmatchesapp/build.gradle.ktsversionName/versionCode, uses the expected release name, includesen-USandzh-CNlanguage-tagged Play notes, keeps each language under 500 Unicode characters and avoids obvious promotional/solicitation wording. - Release signing runbook checks verify
docs/signing-runbook.md,keystore.properties.example,.gitignore,app/build.gradle.kts,docs/release.md,docs/testing.mdandREADME.mdstay aligned on Play App Signing upload-key usage, secret exclusion, signed-build commands,jarsigner/apksignerverification and evidence capture. - Device/OEM smoke checklist checks verify
docs/device-smoke-checklist.md,docs/release.md,docs/testing.md,docs/product-design.mdandREADME.mdstay aligned on physical-phone, OEM launcher, signed release install, real reminder delivery, document-provider, IME, large-screen and TalkBack spot-check requirements. - Distribution readiness checks verify
docs/distribution-readiness.md,docs/release.md,docs/testing.md,docs/product-design.md,README.mdand the store-candidate notes stay aligned on local gate evidence, external blockers and the current release decision summary. - Gradle permission gates verify the merged debug and release manifests stay on the allowed permission list:
POST_NOTIFICATIONS, WorkManager scheduling permissions and the AndroidX dynamic receiver permission. Unexpected permissions such asINTERNET, location, camera, microphone, contacts, SMS or advertising permissions fail the build.
- AVD created through the local Android CLI:
medium_phone. - Device under test:
sdk_gphone64_x86_64, Android 16, API 36,sys.boot_completed=1. - App package installed and launched on emulator:
com.lvjun.timestack/com.example.timestack.MainActivity. - Cold debug launch completed without
FATAL EXCEPTIONorAndroidRuntimecrash in logcat. - Warm foreground restore completed in 309 ms on the API 36 emulator.
- 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. - JUnit XML evidence:
app/build/outputs/androidTest-results/connected/debug/TEST-medium_phone(AVD) - 16-_app-.xml. - Latest backup passphrase-clear audit on 2026-07-01: Settings clears the visible backup password field after successful export, successful import preview and successful restore while keeping the internal restore confirmation passphrase only as pending state.
testDebugUnitTest assembleDebugAndroidTestpassed in 47s, targeted import-preview and restore passphrase-clear tests passed 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, andverifyStoreCandidatepassed in 21s. Evidence is inartifacts/settings-backup-passphrase-clear-audit-2026-07-01/. - Latest app identity audit on 2026-07-01: Settings now exposes installed package metadata from
PackageManager, showingTimeStack,1.0 (1),com.lvjun.timestackandDebugon the API 36 emulator.testDebugUnitTest assembleDebugAndroidTestpassed in 51s,connectedDebugAndroidTestpassed with 42 tests, 0 failures, 0 errors and 0 skipped, andverifyStoreCandidatepassed in 2m 18s. Evidence is inartifacts/settings-app-identity-audit-2026-07-01/. - Latest backup live-summary audit on 2026-07-01: Settings backup status now always includes the current snapshot data summary across tasks, habits, inbox, timeline, countdowns, focus history, review questions, daily reviews, reminders and preferences, then appends export/import/restore operation status through the polite live region.
testDebugUnitTest assembleDebugAndroidTestpassed in 45s,connectedDebugAndroidTestpassed in 4m 9s with 43 tests, 0 failures, 0 errors and 0 skipped, andverifyStoreCandidatepassed in 1m 58s. Evidence is inartifacts/settings-backup-live-summary-audit-2026-07-01/. connectedDebugAndroidTestresult on 2026-07-01 after visual golden and quick-create test stabilization: 37 tests, 0 failures, 0 errors, 0 skipped.- Clean build result on 2026-07-01:
clean assembleDebug assembleRelease testDebugUnitTestpassed through theT:alias. - Latest APK build result on 2026-07-01:
testDebugUnitTest assembleDebugAndroidTest assembleReleasepassed through theT:alias after focus-session history was added to Review. - Latest forced unit-test result on 2026-07-01:
testDebugUnitTest --rerun-taskspassed through theT:alias after encrypted backup JSON/service tests were added. - Latest device-test result on 2026-07-01:
connectedDebugAndroidTestpassed onmedium_phoneafter first-run seed logic was tightened and the app shell navigation/settings/create entry points were polished with Material icons. - Latest system-picker smoke result on 2026-07-01: API 36
medium_phoneDocumentsUI exported readable JSON, exported password-encrypted JSON, imported the encrypted backup with the same password, showed restore preview and completed restore. Evidence is inartifacts/system-picker-smoke-2026-07-01/. - Latest launcher-widget smoke result on 2026-07-01: API 36
medium_phoneNexus Launcher listed TimeStack Today, Focus and Habits widgets, placed the Today widget on the home screen with live RemoteViews content, and openedMainActivityfrom a widget tap. Evidence is inartifacts/widget-smoke-2026-07-01/. - Latest reminder permission/scheduling smoke result on 2026-07-01: API 36
medium_phonerevokedPOST_NOTIFICATIONS, granted it through the real system dialog, verified Settings switch enablement, found and fixed a retained-route stale snapshot issue, and confirmed the habit reminder UI, Room state and WorkManager enqueue/cancel state now stay consistent. Evidence is inartifacts/reminder-permission-smoke-2026-07-01/. - Latest full verification on 2026-07-01 after the Navigation snapshot fix:
testDebugUnitTest assembleDebugAndroidTest assembleRelease connectedDebugAndroidTestpassed through theT:alias; connected device result was 37 tests, 0 failures, 0 errors, 0 skipped. - Latest permission audit on 2026-07-01:
verifyDebugPermissions verifyReleasePermissions assembleDebug assembleReleasepassed through theT:alias, andaapt2 dump permissionsconfirmed debug/release APKs contain only the allowed merged permissions with noINTERNETor sensitive device/data permissions. Evidence is inartifacts/permission-audit-2026-07-01/. - Latest release bundle audit on 2026-07-01:
verifyReleasePermissions bundleReleasepassed through theT:alias, producingapp/build/outputs/bundle/release/app-release.aab; bundle structure containsBundleConfig.pb, base manifest, dex and resources, andjarsignerconfirms the local AAB is unsigned until a real release/upload key is provided. Evidence is inartifacts/release-bundle-audit-2026-07-01/. - Latest local store-candidate gate on 2026-07-01:
verifyStoreCandidatepassed through theT:alias after store-listing asset and copy verification were added, covering candidate listing PNG dimensions/references, listing text length/risk checks, unit tests, debug Android test APK compilation, debug/release permission gates, release APK and release AAB;:app:verifyReleaseSigningConfiguredfails as expected until real signing credentials are provided. Evidence is inartifacts/store-candidate-gate-2026-07-01/. - Latest privacy disclosure gate on 2026-07-02:
verifyPrivacyDisclosurespassed in 24s, and the finalverifyStoreCandidatererun after documentation updates passed in 21s with:verifyPrivacyDisclosures, store-listing asset/copy checks, unit tests, debug Android test APK compilation, debug/release permission gates, release APK and release AAB included. Evidence is inartifacts/privacy-disclosure-gate-2026-07-02/. - Latest public privacy-policy draft gate on 2026-07-02:
verifyPublicPrivacyPolicyDraftpassed in 28s, and the finalverifyStoreCandidatererun after documentation updates passed in 37s with:verifyPublicPrivacyPolicyDraft,:verifyPlayConsoleReadiness,:verifyPrivacyDisclosures, store-listing asset/copy checks, unit tests, debug Android test APK compilation, debug/release permission gates, release APK and release AAB included. Evidence is inartifacts/public-privacy-policy-gate-2026-07-02/. - Latest privacy-policy hosting gate on 2026-07-02:
verifyPrivacyPolicyHostingpassed in 24s after the checklist task-name traceability gap was fixed, validating the hosted privacy-policy URL, public contact, Play Console Privacy Policy field and Data Safety consistency checklist. FinalverifyStoreCandidatereruns after adding the gate and updating evidence docs passed repeatedly with:verifyPrivacyPolicyHostingincluded. Evidence is inartifacts/privacy-policy-hosting-gate-2026-07-02/. - Latest in-app policy/support gate on 2026-07-02:
verifyInAppPolicySupportpassed and checks the Settings政策与支持section, its Compose test and release docs for privacy-policy boundary, support contact readiness, no network feedback and submission reminders.testDebugUnitTest assembleDebugAndroidTestpassed after the UI and test changes; no device was attached, so the new Compose UI test was compiled but not executed in this pass. The finalverifyStoreCandidatererun after adding the gate passed with:verifyInAppPolicySupportincluded. Evidence is inartifacts/in-app-policy-support-gate-2026-07-02/. - Latest third-party notices gate on 2026-07-02:
verifyThirdPartyNoticeschecksdocs/third-party-notices.md, Settings开源许可copy, version catalog dependencies, app build dependencies and release docs against the current release runtime dependency families and local POM license spot checks. Evidence is inartifacts/third-party-notices-gate-2026-07-02/. - Latest Play Console readiness gate on 2026-07-02:
verifyPlayConsoleReadinesspassed in 22s, and the finalverifyStoreCandidatererun after documentation updates passed in 28s with:verifyPlayConsoleReadiness,:verifyPrivacyDisclosures, store-listing asset/copy checks, unit tests, debug Android test APK compilation, debug/release permission gates, release APK and release AAB included. Evidence is inartifacts/play-console-readiness-gate-2026-07-02/. - Latest Play submission runbook gate on 2026-07-02:
verifyPlaySubmissionRunbookpassed after the device-smoke task-name traceability gap was fixed, checkingdocs/play-submission-runbook.mdand cross-document references for app creation, internal/closed testing, production access, release creation, managed publishing, errors summary, pre-launch report and rollout decision evidence. The finalverifyStoreCandidatererun after adding the gate passed in 34s with:verifyPlaySubmissionRunbookincluded. Evidence is inartifacts/play-submission-runbook-gate-2026-07-02/. - Latest release-notes gate on 2026-07-02:
verifyReleaseNotespassed in 22s after the release-notes gate coverage note was added, andverifyStoreCandidatepassed with:verifyReleaseNotesincluded. Evidence is inartifacts/release-notes-gate-2026-07-02/. - Latest signing runbook gate on 2026-07-02:
verifySigningRunbookpassed in 38s, validating the upload-key runbook, ignored signing-secret boundaries, Gradle signing hooks, signed AAB/APK verification commands and cross-document release links. The finalverifyStoreCandidatererun after adding the gate passed in 35s with:verifySigningRunbookincluded. Evidence is inartifacts/signing-runbook-gate-2026-07-02/. - Latest device/OEM smoke checklist gate on 2026-07-02:
verifyDeviceSmokeChecklistpassed in 22s after the product-design task-name traceability gap was fixed, validating the physical-phone, OEM launcher, signed release install, real reminder delivery, document-provider, IME, large-screen and TalkBack smoke plan. The finalverifyStoreCandidatererun after adding the gate passed with:verifyDeviceSmokeChecklistincluded. Evidence is inartifacts/device-smoke-checklist-gate-2026-07-02/. - Latest distribution readiness gate on 2026-07-02:
verifyDistributionReadinesspassed in 22s after the product-design matrix-link traceability gap was fixed. The finalverifyStoreCandidatererun after adding the gate passed with:verifyDistributionReadinessincluded. Evidence is inartifacts/distribution-readiness-gate-2026-07-02/. - Latest visual golden audit on 2026-07-01: the four Compose screenshot tests passed on the API 36 reference AVD with stable sampled signatures for compact phone home, tablet landscape home, dark review and 1.5 font-scale settings; the full
connectedDebugAndroidTestsuite then passed with 37 tests, 0 failures, 0 errors and 0 skipped. Evidence is inartifacts/visual-golden-audit-2026-07-01/. - Latest Product Design flow audit on 2026-07-01: ADB screenshots on the API 36
medium_phoneAVD covered Today, quick create, quick input, Inbox, Review, Settings reminders, Settings backup and Focus. The audit found and fixed two UI polish issues: quick-create direct actions now include Material icons, and Settings backup now treats export as the primary action while import stays secondary. Evidence is inartifacts/product-flow-audit-2026-07-01-current-run/. - Latest Review unresolved-task triage audit on 2026-07-01: Review now supports continuing tomorrow, rescheduling, splitting into inbox items, lowering priority, moving back to inbox, cancelling and deleting. ADB screenshot evidence confirms the phone-width action layout is readable, and Room schema v8 stores task
cancelledstate. Evidence is inartifacts/review-triage-audit-2026-07-01/. - Latest full connected-device check after Review unresolved-task triage on 2026-07-01:
connectedDebugAndroidTestpassed on the API 36medium_phoneAVD with 37 tests, 0 failures, 0 errors and 0 skipped. - Latest reminder-throttle audit on 2026-07-01:
ReminderWorkernow uses a persisted local-hour delivery window so at most 2 TimeStack notifications are posted in the same hour; extra reminders still finish and daily reminders still reschedule.testDebugUnitTestpassed in 37s andconnectedDebugAndroidTestpassed on the API 36medium_phoneAVD with 37 tests, 0 failures, 0 errors and 0 skipped. Evidence is inartifacts/reminder-throttle-audit-2026-07-01/. - Latest inbox-attention audit on 2026-07-01: Today now surfaces stale or overloaded inbox state below the summary metrics and provides a direct "整理" action into Inbox. Screenshot and UI XML evidence confirm the compact phone layout is readable.
testDebugUnitTest assembleDebugAndroidTestpassed in 54s andconnectedDebugAndroidTestpassed on the API 36medium_phoneAVD with 38 tests, 0 failures, 0 errors and 0 skipped. Evidence is inartifacts/inbox-attention-audit-2026-07-01/. - Latest focus-reminder quiet audit on 2026-07-01: running Focus timer state now silences Task, Habit, Review and Overload reminders while allowing Schedule reminders to post.
testDebugUnitTest assembleDebugAndroidTestpassed in 1m 8s,connectedDebugAndroidTestpassed on the API 36medium_phoneAVD with 40 tests, 0 failures, 0 errors and 0 skipped, andverifyStoreCandidatepassed in 2m 18s. Evidence is inartifacts/focus-reminder-quiet-audit-2026-07-01/. - Latest task-row focus audit on 2026-07-01: Today task rows now expose a direct play-icon focus action with an accessibility label. Screenshot evidence confirms the compact phone task list remains readable.
testDebugUnitTest assembleDebugAndroidTestpassed in 1m 4s,connectedDebugAndroidTestpassed on the API 36medium_phoneAVD with 40 tests, 0 failures, 0 errors and 0 skipped, andverifyStoreCandidatepassed in 2m 53s. Evidence is inartifacts/task-row-focus-audit-2026-07-01/. - Latest task-row delete audit on 2026-07-01: Today task rows now expose a delete icon with an accessibility label and a destructive confirmation dialog. Screenshot and UI XML evidence confirm the compact phone task list and dialog remain readable.
testDebugUnitTest assembleDebugAndroidTestpassed in 30s,connectedDebugAndroidTestpassed on the API 36medium_phoneAVD with 40 tests, 0 failures, 0 errors and 0 skipped, andverifyStoreCandidatepassed in 2m 34s. Evidence is inartifacts/task-row-delete-audit-2026-07-01/. - Latest settings privacy trust audit on 2026-07-01: Settings now exposes the local-first data boundary in app, covering no network permission, no accounts/ads/analytics/cloud sync, Room local storage, Android system picker backup/import, backup-password scope and deletion/uninstall behavior.
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 is inartifacts/settings-privacy-trust-audit-2026-07-01/.
Build from the normal project path:
$env:JAVA_HOME = "C:\Program Files\Android\Android Studio\jbr"
$env:ANDROID_HOME = "$env:LOCALAPPDATA\Android\Sdk"
$env:ANDROID_SDK_ROOT = "$env:LOCALAPPDATA\Android\Sdk"
$env:PATH = "$env:JAVA_HOME\bin;$env:USERPROFILE\AppData\AndroidCLI;$env:ANDROID_HOME\platform-tools;$env:PATH"
.\gradlew.bat clean assembleDebug --no-daemon --no-configuration-cache --console=plainRun local unit tests through an ASCII drive alias because the Windows project path contains Chinese characters:
subst T: "C:\Users\lvjun\Documents\打卡APP设计\timestack-android"
T:\gradlew.bat -p T:\ testDebugUnitTest --no-daemon --no-configuration-cache --console=plain
subst T: /DCompile the instrumented test APK without requiring a connected device:
.\gradlew.bat assembleDebugAndroidTest --no-daemon --no-configuration-cache --console=plainRun device/emulator tests when a device is attached:
$env:JAVA_HOME = "C:\Program Files\Android\Android Studio\jbr"
$env:ANDROID_HOME = "$env:LOCALAPPDATA\Android\Sdk"
$env:ANDROID_SDK_ROOT = "$env:LOCALAPPDATA\Android\Sdk"
$env:PATH = "$env:JAVA_HOME\bin;$env:USERPROFILE\AppData\AndroidCLI;$env:ANDROID_HOME\platform-tools;$env:ANDROID_HOME\emulator;$env:PATH"
.\gradlew.bat connectedDebugAndroidTest --no-daemon --no-configuration-cache --console=plainBuild the R8-shrunk release APK:
.\gradlew.bat assembleRelease --no-daemon --no-configuration-cache --console=plainBuild the release Android App Bundle:
.\gradlew.bat bundleRelease --no-daemon --no-configuration-cache --console=plainRun the local store-candidate gate without signing secrets or a connected device:
.\gradlew.bat verifyStoreCandidate --no-daemon --no-configuration-cache --console=plainVerify the privacy-policy hosting checklist without requiring a hosted URL:
.\gradlew.bat verifyPrivacyPolicyHosting --no-daemon --no-configuration-cache --console=plainVerify the in-app policy and support section:
.\gradlew.bat verifyInAppPolicySupport --no-daemon --no-configuration-cache --console=plainVerify third-party notices:
.\gradlew.bat verifyThirdPartyNotices --no-daemon --no-configuration-cache --console=plainVerify the Play Console submission runbook without requiring Play Console access:
.\gradlew.bat verifyPlaySubmissionRunbook --no-daemon --no-configuration-cache --console=plainVerify the release signing runbook without signing secrets:
.\gradlew.bat verifySigningRunbook --no-daemon --no-configuration-cache --console=plainVerify the physical-device and OEM smoke checklist without requiring a connected device:
.\gradlew.bat verifyDeviceSmokeChecklist --no-daemon --no-configuration-cache --console=plainVerify the distribution readiness matrix:
.\gradlew.bat verifyDistributionReadiness --no-daemon --no-configuration-cache --console=plainVerify merged APK permission policy explicitly:
.\gradlew.bat verifyDebugPermissions verifyReleasePermissions --no-daemon --no-configuration-cache --console=plain- Home Screen widget provider registration, launcher picker discovery, Today placement and Today tap-to-open now have API 36 Nexus Launcher coverage; physical-phone and OEM-launcher spot checks, including placing Focus and Habits, are tracked in
docs/device-smoke-checklist.mdand are still needed before wider distribution. - Pixel-perfect PNG golden comparison is not installed; lightweight reference-device visual-signature regression now covers compact phone home, tablet landscape home, dark review and 1.5 font scale settings surfaces, and ADB screenshot matrix evidence exists for compact phone, large phone, tablet landscape and 1.5 font scale.
- Reminder Worker notification posting, local hourly delivery throttling, real system permission prompt, Settings reminder-toggle behavior and WorkManager enqueue/cancel state have API 36 emulator coverage; real wall-clock delayed delivery and OEM background-policy behavior are tracked in
docs/device-smoke-checklist.mdand still need physical-phone spot checks before wider distribution. - Android document picker export/import now has API 36 emulator coverage with the real system picker, including encrypted backup export and encrypted import with the same password; physical-phone and OEM/provider spot checks are tracked in
docs/device-smoke-checklist.mdand are still needed before wider distribution. - Full IME behavior on physical devices still needs smoke testing for third-party keyboards and gesture navigation, although Activity
adjustResizeand editor-form IME padding are now configured and the Compose device suite passes; the release smoke path is tracked indocs/device-smoke-checklist.md. - Release APK/AAB behavior still needs a real signed-build installation and smoke testing through
docs/device-smoke-checklist.md.
- Add deep-link or external-intent route tests if TimeStack exposes public link contracts beyond launcher/widget entry points.
- Add deeper backup restore integration fixtures only if TimeStack later supports more document providers or backup envelope variants beyond the current encrypted JSON path.
- Add pixel-perfect PNG golden comparisons only if the project later needs pixel-stable UI review in CI.