Add search to the Starred and Today's 5 tabs - #80
Merged
Conversation
Search was only reachable from All Tasks, so finding a task from either of the other two tabs meant switching tabs first — friction for what is a global action. All three tabs now open the same picker, and All Tasks was refactored onto the shared helper rather than left as a second implementation that could drift. Selecting a result opens the task in All Tasks: in place when already there, otherwise drilling in and sliding to that tab, reusing the onNavigateToTask callback the tabs already had for "Go to task". Create-from-empty-search files at root with the Inbox toggle on, deliberately NOT auto-starring from Starred (unlike that tab's + FAB) nor auto-pinning from Today's 5 (unlike its FAB create flow) — search spans everything, so it makes no assumption about where the result belongs. Manual testing surfaced a second problem: the 4th action icon left the 30px "Task Roulette" line ellipsised to "Task Rou..." at phone width. Both tabs built that two-line title independently, so it moved into a shared TabAppBarTitle that steps down to 22px below 420dp, keeping ellipsis as a last-resort fallback. (All Tasks is untouched — its title is already 22px and single-line.) One test intentionally stops at Cancel instead of committing an add: under FakeAsync + databaseFactoryFfiNoIsolate, the reload a full Today's 5 triggers holds sqflite's lock while waiting on timers pumpAsync never advances, so tearDown's db.reset() blocks forever. The same flow completes in ~2s against the real factory, and create-at-root is covered by the neighbouring test. Also documents the All Tasks breadcrumb bar in UI_VIEWS.md, which was missing entirely — the back arrow pops one level while the breadcrumb's "Task Roulette" crumb is the actual jump-to-root control. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Four phrasing failures from an actual manual-test round, each of which cost a round-trip with the user: - A step opening "Fill Today's 5, then check the Pin chip disappears" reads as an order with no method attached — anything in imperative voice IS an order, so purpose lines must be marked as labels or dropped. - "No duplicate was created" was asserted without saying where to go look; the user was parked on a leaf detail view where neither the root list nor the Inbox was visible. Absence is only checkable somewhere specific. - "Back arrow to root" is wrong: the back arrow pops one level, while the breadcrumb's "Task Roulette" crumb is the jump-to-root control. It only appears correct one level deep. - A /cleardb was presented as a done deal rather than asked about. The local DB is often the only copy of real data, so that is the user's call — now required via AskUserQuestion, offering keep/clear/back-up-only. /cleardb also gains a pre-flight check: every checkout shares one DB (the path is keyed to the app ID), and the app running during this round belonged to a different worktree entirely. Killing it and wiping the DB would have hit another session's data, so the skill now requires reading the process path and confirming before touching anything. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
sohamM97
pushed a commit
that referenced
this pull request
Jul 26, 2026
While merging #80 the skill's Codex guidance led to a wrong conclusion. It says to poll the issue/PR comment endpoints for the Codex bot and, after ~5 minutes of silence, report that no review comments arrived — which was then read as "no automated review at all". Codex had in fact reviewed and found no issues; it just posts to Codex Cloud (chatgpt.com/codex), never to the GitHub API. Verified on #80 and the previously merged #79: issues/{n}/comments, pulls/{n}/comments, pulls/{n}/reviews, the issue timeline, check-runs and commit statuses are ALL empty even after Codex has finished reviewing. So emptiness there carries no information about Codex, and the P2s handled on #77/#78 only reached the repo because the user relayed them from Codex Cloud. The skill now says to ask the user to check Codex Cloud rather than inferring from GitHub silence, and to keep polling the endpoints only as a cheap catch for other reviewers (a human, or claude[bot] if it is ever re-enabled). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Search was only reachable from All Tasks, so finding a task from either of the other two tabs meant switching tabs first — friction for what is a global action. All three tabs now open the same picker, and All Tasks was refactored onto the shared helper rather than left as a second implementation that could drift.
Behavior
onNavigateToTaskcallback both tabs already had for "Go to task".Responsive app bar title
Manual testing surfaced a second problem: the 4th action icon left the 30px "Task Roulette" line ellipsised to "Task Rou…" at phone width. Both tabs built that two-line title independently, so it moved into a shared
TabAppBarTitlethat steps down to 22px below 420dp, keeping ellipsis as a last-resort fallback. All Tasks is untouched — its title is already 22px and single-line.Testing
flutter analyzeclean; 1559 tests pass (1 pre-existing skip).starred_screen_test.dart,todays_five_screen_test.dart,task_list_screen_test.dart— covering that the pool is global (an unstarred / non-leaf result navigates), that Today's 5 search opens rather than pins, the pin-toggle gate at max pins, and that created tasks land at root un-starred / un-pinned.FakeAsync+databaseFactoryFfiNoIsolate, the reload a full Today's 5 triggers holds sqflite's lock while waiting on timerspumpAsyncnever advances, sotearDown'sdb.reset()blocks forever. The same flow completes in ~2s against the real factory, and create-at-root is covered by the neighbouring test.Docs
UI_VIEWS.md— search entry rewritten for all three tabs, responsive title documented, plus the All Tasks breadcrumb bar, which was missing entirely (the back arrow pops one level; the breadcrumb's "Task Roulette" crumb is the actual jump-to-root control).TEST_COVERAGE.mdupdated.Second commit (unrelated to the feature)
c1c0daetightens two skills from feedback during this round:/manual-testgains four wording rules (no imperative-voice summaries, negative outcomes must include the navigation to verify them, "go to root" is the breadcrumb not the back arrow, and always ask before recommending a/cleardb), and/cleardbgains a worktree pre-flight — every checkout shares one DB, and the app running during this round belonged to a different worktree, so killing it would have hit another session's data.🤖 Generated with Claude Code