FAB tap/hold gesture, collapsible chore groups, and the "Eventually" schema fix - #125
Merged
Merged
Conversation
…chore groups Follow-up to the merged UI batch (v0.34.0), correcting the add button's gesture and extending collapsible category headers to Chores. - Add button: a tap adds a new item for the current page; a short hold (250ms, well under the platform default) opens the radial. On Settings, which has no page type, a tap opens the radial. Implemented with a pointerInput gesture plus explicit onClick/onLongClick semantics so TalkBack keeps both actions. - Chores list: tapping a category heading collapses/expands that group, matching Tasks (chevron on the heading, per-visit state). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ArC3EFNefEqRZrYkm9WobY
The Eventually due option (v0.34.0) writes due_period = 'eventually', but the todos_due_period_check constraint only allowed today/this_week/this_month, so the insert was rejected by Supabase. Widen the check in schema.sql and add the ALTER migration existing projects must run. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ArC3EFNefEqRZrYkm9WobY
Prevents the class of bug that broke the "Eventually" due (app sent a due_period the Supabase CHECK constraint didn't allow): - Make the emittable wire values first-class in data/model: DuePeriod.key and TaskPriority.wire, sourced by the Edit sheet instead of string literals. - SchemaSyncTest (JVM, no secrets) asserts every DuePeriod/TaskPriority value appears in the matching CHECK in supabase/schema.sql, failing the PR that adds a value without widening the schema. - schema-contract.yml + supabase/contract_check.py insert each allowed value against a throwaway project's REST API to prove the live database has the schema applied; dormant until SUPABASE_TEST_URL / SUPABASE_TEST_ANON_KEY secrets are set. - supabase/README.md documents the source-of-truth model and both guards; LESSONS #53 records the drift lesson. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ArC3EFNefEqRZrYkm9WobY
…re change) Supabase stops auto-exposing public tables to the Data API (new projects 2026-05-30, new tables in existing projects 2026-10-30). Existing tables keep their grants, so the live project is unaffected, but a project created fresh from schema.sql, or any table added later, would return "permission denied" through the anon key. Add explicit GRANTs (anon/authenticated/service_role) for every table, and a SchemaSyncTest that fails if a CREATE TABLE lacks a grant to anon. Documented in supabase/README.md and LESSONS #54. Ref: https://github.com/orgs/supabase/discussions/45329 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ArC3EFNefEqRZrYkm9WobY
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.
Follow-up to the UI batch shipped in v0.34.0 (PR #123). Branched fresh off
mainsince #123 is already merged and released.Changes
Add button gesture (correction)
The previous version opened the radial on a single tap. Restored the intended behaviour:
Implemented with a
pointerInputgesture so the long-press timeout can be shortened (Compose'scombinedClickabledoesn't expose it), plus explicitonClick/onLongClicksemantics actions so TalkBack keeps both actions and the a11y check passes.Collapsible category headers on Chores
Tapping a category heading on the Chores list collapses/expands that group, mirroring Tasks.
Fix: "Eventually" due was rejected by the database
The Eventually option writes
due_period = 'eventually', buttodos_due_period_checkonly allowedtoday/this_week/this_month, so the insert failed withnew row for relation "todos" violates check constraint. Widened the check insupabase/schema.sqland added theALTERmigration existing projects run once.Guard schema drift in CI (so this can't recur)
Two layers, single source of truth =
supabase/schema.sql:data/model(DuePeriod.key,TaskPriority.wire) instead of string literals in the sheet.SchemaSyncTest(JVM, in the existing "Unit tests" job, no secrets) fails any PR where an enum value isn't in the matching CHECK inschema.sql. This would have failed PR Task/app UI improvements: radial FAB, collapsible categories, "Eventually" due, card-face colour, memo swipes #123.schema-contract.yml+supabase/contract_check.pyinsert each allowed value against a throwaway project's REST API to prove the live DB has the schema applied. Dormant untilSUPABASE_TEST_URL/SUPABASE_TEST_ANON_KEYrepo secrets are set (skips cleanly and passes otherwise).supabase/README.mddocuments the model;LESSONS.mdBump mapgie/android-Actions/.github/workflows/changelog-check.yml from 87b0b6408e7168235e4977377add51c312ebab71 to 252cf0054ab486b6aa3e87563bc12146d97ff891 #53 records the lesson.Tests / checks
a11y_check.pypasses (124 files).fab-gesture-and-chore-collapse.json(minor);.sql/.yml/docs are not app code.🤖 Generated with Claude Code
https://claude.ai/code/session_01ArC3EFNefEqRZrYkm9WobY