Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
153 commits
Select commit Hold shift + click to select a range
ebf562f
Document backup export smoke test
Jun 17, 2026
7c1f114
Document order recognition settings smoke test
Aucannot Jun 17, 2026
cc8eea9
Document demo data reset smoke test
Aucannot Jun 17, 2026
bab4beb
Document full manual add smoke test
Aucannot Jun 17, 2026
43d820e
Document tagged manual add smoke test
Aucannot Jun 17, 2026
63c87dd
Document inventory edit reminder smoke test
Aucannot Jun 17, 2026
cf2563a
Document inventory reminder disable smoke test
Aucannot Jun 17, 2026
aa05b18
Avoid probing missing legacy import asset
Aucannot Jun 17, 2026
d46a6b9
Document order recognition config smoke
Aucannot Jun 17, 2026
b03e015
Fix non-ASCII web route cleanup
Aucannot Jun 17, 2026
cc9b43a
Restore direct recipe web routes
Aucannot Jun 17, 2026
2e2c361
Fallback stale recipe web routes
Aucannot Jun 17, 2026
ef20ffe
Document recipe favorite smoke
Aucannot Jun 17, 2026
b346193
Document item profile delete smoke
Aucannot Jun 17, 2026
2ab3676
Document item profile batch delete smoke
Aucannot Jun 17, 2026
c0e976b
Document catalog shopping smoke
Aucannot Jun 17, 2026
5d7a292
Document focused inventory shopping smoke
Aucannot Jun 17, 2026
1a84753
Document order review edit smoke
Aucannot Jun 17, 2026
022da4f
Show item profile notes
Aucannot Jun 17, 2026
b510a35
Preserve shopping notes on conversion
Aucannot Jun 17, 2026
ffbbd76
Unify uncategorized item copy
Aucannot Jun 17, 2026
b556797
Skip standalone order references
Aucannot Jun 17, 2026
0425903
Document backup reminder export smoke
Aucannot Jun 17, 2026
230946f
Document manual add validation smoke
Aucannot Jun 17, 2026
ea47ec8
Detect duplicate orders without dates
Aucannot Jun 17, 2026
506c365
Document reminder action smoke
Aucannot Jun 17, 2026
5a44d76
Document browser history navigation risk
Aucannot Jun 17, 2026
b7d95e2
Delay web loading handoff for fonts
Aucannot Jun 17, 2026
ecfd92b
Document browser history retest
Aucannot Jun 17, 2026
a267435
Hide internal import trace fields
Aucannot Jun 17, 2026
fc45eb0
Reword settings import copy
Aucannot Jun 17, 2026
57c593d
Reword settings self check copy
Aucannot Jun 17, 2026
da58488
Clean self check failure messages
Aucannot Jun 17, 2026
e68271d
Clarify error detail copy action
Aucannot Jun 17, 2026
bd6e624
Document settings self check retest
Aucannot Jun 17, 2026
8dcaadb
Reword backup reminder copy
Aucannot Jun 17, 2026
4c25f18
Clean data health check copy
Aucannot Jun 17, 2026
0eb4929
Reword legacy import result copy
Aucannot Jun 17, 2026
74362a4
Improve beta notification and routing validation
Aucannot Jun 19, 2026
5ac5284
Record post-push web smoke test
Aucannot Jun 19, 2026
79d4c2d
Cover macOS notification tap handoff
Aucannot Jun 19, 2026
cafcb63
Disable stale web service worker registration
Aucannot Jun 19, 2026
4a27275
Record full Flutter regression test
Aucannot Jun 19, 2026
a9df191
Cover Android notification wiring
Aucannot Jun 19, 2026
0d18365
Cover macOS notification wiring
Aucannot Jun 19, 2026
a5faac1
Clear stale Flutter web caches
Aucannot Jun 19, 2026
df1f320
Cover inventory table CSV escaping
Aucannot Jun 19, 2026
fc7c262
Cover backup round trip data
Aucannot Jun 19, 2026
2e1bcc3
Extend app self-check backup coverage
Aucannot Jun 19, 2026
9602eb7
Preserve backup reminder state during self-check
Aucannot Jun 19, 2026
37287b9
Add local notification test action
Aucannot Jun 19, 2026
1ec7115
Cover settings notification test action
Aucannot Jun 19, 2026
6af5111
Cover macOS diagnostic notification request
Aucannot Jun 19, 2026
8cd0bd4
Reduce stale web bootstrap caching
Aucannot Jun 19, 2026
59b7a5d
Harden web loading screen hide
Aucannot Jun 19, 2026
23ab03b
Record full beta regression pass
Aucannot Jun 19, 2026
5d6eeed
Record macOS beta verification pass
Aucannot Jun 19, 2026
9bd7e56
Cover recipe inventory deduction
Aucannot Jun 19, 2026
fc0c46c
Extend self-check recipe coverage
Aucannot Jun 19, 2026
d857c86
Cover settings self-check result
Aucannot Jun 19, 2026
c76fbe9
Add web deployment cache headers
Aucannot Jun 19, 2026
0dff93f
Cover settings backup reminder
Aucannot Jun 19, 2026
a916f88
Cover order recognition key privacy
Aucannot Jun 19, 2026
22ed1ad
Fix order recognition clear persistence
Aucannot Jun 19, 2026
f822d93
Cover recipe preference settings
Aucannot Jun 19, 2026
ff163f4
Cover demo reset confirmation
Aucannot Jun 19, 2026
5762951
Cover order import review confirmation
Aucannot Jun 19, 2026
f960306
Cover shopping conversion confirmation
Aucannot Jun 19, 2026
3089715
Cover notification sync payload handoff
Aucannot Jun 19, 2026
684b411
Cover macOS notification request content
Aucannot Jun 19, 2026
9bb856f
Fix macOS order recognition secret storage
Aucannot Jun 19, 2026
dd957d3
Hide settings self-check from users
Aucannot Jun 19, 2026
77ffa29
Report macOS notification schedule failures
Aucannot Jun 19, 2026
fa32551
Harden web service worker cache policy
Aucannot Jun 19, 2026
468552b
Add WebDAV backup support
Aucannot Jun 19, 2026
ac96dbc
Clarify WebDAV backup access requirements
Aucannot Jun 19, 2026
e6179f7
Stabilize web platform startup
Aucannot Jun 19, 2026
15ac10c
Record current macOS beta validation
Aucannot Jun 19, 2026
fbdf408
Add WebDAV HTTP round-trip coverage
Aucannot Jun 19, 2026
1c729f4
Cover WebDAV restore cancellation
Aucannot Jun 19, 2026
6017560
Cover notification tap app shell routing
Aucannot Jun 19, 2026
6b55ce5
Cover launch notification app shell routing
Aucannot Jun 19, 2026
98af52c
Harden Android reminder notification ids
Aucannot Jun 19, 2026
b9f1893
Cover launch notification target filtering
Aucannot Jun 19, 2026
fdf49f3
Cover macOS empty notification launch targets
Aucannot Jun 19, 2026
92694b2
Harden WebDAV settings feedback
Aucannot Jun 19, 2026
9c42826
Record WebDAV restore browser smoke
Aucannot Jun 19, 2026
905181c
Record WebDAV clear browser smoke
Aucannot Jun 19, 2026
80df8ad
Record export download smoke evidence
Aucannot Jun 19, 2026
c511d6e
Cover macOS notification center status
Aucannot Jun 19, 2026
57b5b4f
Record web update recovery recheck
Aucannot Jun 19, 2026
5a78896
Update platform acceptance status
Aucannot Jun 19, 2026
a32007f
Record current Flutter gates
Aucannot Jun 19, 2026
08b2e5d
Harden Android reminder notification permission
Aucannot Jun 19, 2026
6a8f046
Normalize notification item targets
Aucannot Jun 19, 2026
daa91bc
Record WebDAV smoke recheck
Aucannot Jun 19, 2026
116497c
Fix macOS launch delegate callback
Aucannot Jun 19, 2026
ce34fb3
Record full Flutter regression after macOS fix
Aucannot Jun 19, 2026
0d89edd
Guard user-facing copy terms
Aucannot Jun 19, 2026
41374cd
Record web build cache output check
Aucannot Jun 19, 2026
d2b884a
Cover macOS notification delegate registration
Aucannot Jun 19, 2026
ce85109
Add macOS notification runtime smoke hook
Aucannot Jun 19, 2026
e2adfd5
Add notification status smoke helper
Aucannot Jun 19, 2026
96cae2d
Assert notification smoke status
Aucannot Jun 19, 2026
6fb63c2
Automate macOS notification smoke
Aucannot Jun 19, 2026
a08ce0c
Add optional notification send smoke
Aucannot Jun 19, 2026
e63192e
Cover debug notification smoke payloads
Aucannot Jun 19, 2026
140d31d
Record macOS notification smoke rerun
Aucannot Jun 19, 2026
9165a47
Record macOS validation recheck
Aucannot Jun 19, 2026
92c3a38
Record full Flutter regression check
Aucannot Jun 19, 2026
0fe6e75
Record Android environment recheck
Aucannot Jun 19, 2026
7c17268
Record mobile Web core smoke
Aucannot Jun 19, 2026
27ff1d9
Record mobile Web manual add roundtrip
Aucannot Jun 19, 2026
a4f3eb9
Record macOS notification smoke recheck
Aucannot Jun 19, 2026
8dfa2ce
Record full Flutter regression recheck
Aucannot Jun 19, 2026
c64ea76
Record Android environment recheck
Aucannot Jun 19, 2026
243af74
Harden Web startup bootstrap
Aucannot Jun 20, 2026
4910802
Record macOS notification runtime recheck
Aucannot Jun 20, 2026
79a6e52
Cover macOS notification response routing
Aucannot Jun 20, 2026
e453f2e
Add Android environment gate
Aucannot Jun 20, 2026
79044d9
Record full Flutter regression pass
Aucannot Jun 20, 2026
84787f7
Add macOS secure storage smoke
Aucannot Jun 20, 2026
0c9d6e0
Record mobile web route smoke
Aucannot Jun 20, 2026
a5f714c
Record mobile web add delete smoke
Aucannot Jun 20, 2026
0e4d7bf
Record mobile web shopping smoke
Aucannot Jun 20, 2026
aa9f8d0
Record order recognition settings smoke
Aucannot Jun 20, 2026
c1ab561
Record demo data reset smoke
Aucannot Jun 20, 2026
2939f40
Record inventory edit smoke
Aucannot Jun 20, 2026
5588c75
Record order text import smoke
Aucannot Jun 20, 2026
5e3dd1c
Record today action reminder smoke
Aucannot Jun 20, 2026
a452c77
Record recipe cooking smoke
Aucannot Jun 20, 2026
273e87b
Record AI recipe fallback smoke
Aucannot Jun 20, 2026
88564a8
Record WebDAV backup smoke
Aucannot Jun 20, 2026
b4044b2
Record WebDAV restore smoke
Aucannot Jun 20, 2026
2c0435f
Record local export smoke
Aucannot Jun 20, 2026
336726b
Record item profile edit smoke
Aucannot Jun 20, 2026
d8998a2
Record recipe preference smoke
Aucannot Jun 20, 2026
6a179e0
Record legacy import preview smoke
Aucannot Jun 20, 2026
eaa128a
Record shopping management smoke
Aucannot Jun 20, 2026
727c39d
Harden macos notification smoke
Aucannot Jun 20, 2026
5c3e3c8
Record consume restore smoke
Aucannot Jun 20, 2026
4c872bf
Record full manual add smoke
Aucannot Jun 20, 2026
6485c8d
Record batch delete smoke
Aucannot Jun 20, 2026
2bcc705
Record shopping note conversion smoke
Aucannot Jun 20, 2026
502f4a7
Record macOS notification recheck
Aucannot Jun 20, 2026
5f5e864
Record notification route recheck
Aucannot Jun 20, 2026
b1ebf4b
Record Android notification gate recheck
Aucannot Jun 20, 2026
55f23e1
Record macOS send-test smoke
Aucannot Jun 21, 2026
e6f3ed2
Record Web deployment gate recheck
Aucannot Jun 21, 2026
2675ccf
Record full Flutter regression recheck
Aucannot Jun 21, 2026
cb3b77d
Record settings backup recheck
Aucannot Jun 21, 2026
f784268
Record core workflow recheck
Aucannot Jun 21, 2026
38fada8
Record remaining beta gate recheck
Aucannot Jun 21, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions TODO.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ Codex 做新 UI 时,不要直接吃整份 TODO;应把 `docs/codex-goals/warm
- [x] 本地 SQLite、默认分类、示例 Wiki、首页统计、物品目录、添加物品、Wiki 详情、库存详情、历史记录已接入。
- [x] 订单截图 VLM 识别入口、识别结果预览、批量入库、VLM 设置页已接入。
- [x] legacy SQLite -> Flutter JSON 导入通道已接入。
- [ ] Android SDK、完整 Xcode/xcodebuild、Android/macOS 通知设备验收仍需补齐;Web 页面实现截图已补齐。
- [ ] Android SDK/设备与 Android/macOS 通知运行时验收仍需补齐;macOS Xcode build/test/launch 已通过,Web 页面实现截图已补齐。

## UI 工作流约定

Expand Down Expand Up @@ -85,7 +85,7 @@ Codex 做新 UI 时,不要直接吃整份 TODO;应把 `docs/codex-goals/warm
- [x] UI 支持为单个物品设置提醒开关和提前天数。
- [x] 分类/Wiki 默认提醒规则:例如牛奶提前 2 天、药品提前 30 天。
- [ ] Android 本地通知:权限引导、定时调度、点击跳转详情页(代码已接入,待 Android SDK/设备验证)。
- [ ] macOS 本地通知:权限引导、调度、点击行为(代码已接入,`flutter build macos --debug` 当前阻塞于缺少 `xcodebuild`)。
- [ ] macOS 本地通知:权限引导、调度、点击行为(代码已接入,macOS build/native tests/launch 已通过;仍待系统授权后的投递和点击验证)。
- [x] 首页新增“今天要处理”聚合模块:今日到期、已过期、提醒到期。
- [x] 通知防重复:同一物品同一提醒类型一天只发一次。
- [x] 支持稍后提醒/忽略本次提醒。
Expand Down Expand Up @@ -223,7 +223,7 @@ Codex 做新 UI 时,不要直接吃整份 TODO;应把 `docs/codex-goals/warm
### 6.2 macOS

- [x] 文件选择、图片读取权限确认。
- [ ] 本地通知权限(代码已接入,待完整 Xcode/xcodebuild 构建验证)。
- [ ] 本地通知权限(代码已接入,macOS build/native tests/launch 已通过;待系统授权后的投递和点击验证)。
- [x] macOS 打包与签名流程。
- [x] 菜单栏/窗口尺寸体验优化。

Expand Down
58 changes: 46 additions & 12 deletions docs/todo-acceptance-2026-06-16.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,13 @@ Follow-up beta verification on 2026-06-17 expanded the Flutter suite to 45
tests, including local notification channel coverage, with `flutter test` still
passing.

Follow-up beta verification through 2026-06-20 expanded the Flutter suite and
macOS native RunnerTests substantially. Current evidence is tracked in
`docs/ux-test-findings-2026-06-17.md`; macOS build, native tests, debug launch,
and Xcode first-launch checks now pass locally. Android SDK/device validation
and real delivered notification click-through remain unproven. Current full
Flutter regression evidence is 109 passing tests.

The first sandboxed `flutter test` run was blocked by local socket creation
permissions. Re-running the same command with permission to bind a local test
socket passed.
Expand All @@ -36,20 +43,47 @@ All TODO items that can be proven in the current local environment are either
checked in `TODO.md` or covered by the evidence above.

Remaining unchecked items are intentionally limited to native platform
verification that cannot be proven on this machine:
verification that is still not fully proven on this machine:

- Android SDK is missing. On 2026-06-17, `flutter build apk --debug` downloaded
Flutter Android artifacts successfully after network approval, then stopped
with `No Android SDK found`, so Android local notification permission,
scheduling, and tap-through behavior still need Android SDK/device
verification.
- Full Xcode is missing. On 2026-06-17, `flutter build macos --debug` reached
Xcode dependency resolution, then stopped because `xcrun` could not find
`xcodebuild` while the active developer directory was
`/Library/Developer/CommandLineTools`, so macOS notification build/device
behavior still needs full Xcode and CocoaPods verification.

`flutter doctor -v` confirms the same platform gaps: no Android SDK, incomplete
Xcode installation, no Google Chrome binary, and sandboxed network checks unable
to resolve external hosts. Web launch verification used the generated Web build
served locally instead.
verification. A 2026-06-19 recheck with `flutter devices` still detected only
macOS, and `flutter doctor -v` still reported that no Android SDK could be
located. A 2026-06-20 recheck still detects only macOS and still reports no
Android SDK; `flutter build apk --debug` still stops with no Android SDK, and
`flutter emulators` reports no emulator sources. A later 2026-06-20 recheck
after the full Flutter regression recheck produced the same Android blocker:
`flutter devices` detected only macOS, `flutter emulators` reported no
emulator sources, `flutter doctor -v` reported `Unable to locate Android
SDK`, and `flutter build apk --debug` stopped before Android compilation with
`[!] No Android SDK found`.
- macOS Xcode/CocoaPods setup is no longer the blocking item. On 2026-06-19,
`flutter build macos --debug`, `flutter run -d macos`,
`xcodebuild -checkFirstLaunchStatus`, and native RunnerTests passed locally.
A running-app VM Service smoke now also proves the live Flutter method
channel can read macOS notification permission state from the native bridge;
`tools/check_notification_status.mjs` now makes that smoke check reusable for
future `flutter run -d macos` sessions and can assert expected supported,
granted, and status values. `tools/run_macos_notification_smoke.mjs` wraps
the launch, VM Service parsing, assertion, and clean shutdown into one local
command. The smoke tools also have an explicit `--send-test` path for a
manual authorization pass, but the default command remains read-only. macOS
system notification permission approval, delivered reminder visibility, and
notification-click routing still need targeted runtime validation after the
test host/app is authorized for notifications. On 2026-06-20,
`xcodebuild -runFirstLaunch`, `xcodebuild -checkFirstLaunchStatus`, and
`xcodebuild -license check` returned success; `flutter build macos --debug`
and native RunnerTests also passed again. `flutter doctor -v` still reports
the Xcode additional-component warning because no Simulator runtimes/devices
are installed, but macOS desktop build/test validation remains usable.

`flutter doctor -v` was rechecked on 2026-06-19 with the bundled Flutter SDK.
Android SDK is still absent, Chrome is not installed at Flutter's default path,
and sandboxed network resource checks still fail. `xcodebuild
-checkFirstLaunchStatus` returns success even though `flutter doctor` still
emits a stale first-launch warning. Rechecked on 2026-06-20: Android SDK is
still absent, only macOS is detected, elevated `xcrun simctl list` reports no
Simulator runtimes/devices, and macOS build/RunnerTests still pass. Web launch
verification used the generated Web build served locally instead.
Loading
Loading