alpha.21: Brick inverse mode, one motion vocabulary across the app - #22
Merged
Merged
Conversation
Brick inverse mode - A profile can now flip the whole idea around: instead of the tag starting a block, you set the window the apps stay shut (e.g. 08:00 to 22:00) and the tag is the only way in. Each tap buys a set stretch of access. - Settings: window start and end, unlock length (15/30/60/120 minutes or a typed value), and unlocks per window - once only, twice, three times or unlimited. The count resets when the window next starts, so "once only" means one unlock per day. - Outside the window nothing is blocked and a tap says so. A tap while access is already open reports the remaining time instead of spending an unlock, and a spent allowance names the time the window ends. - Inverse profiles are schedule-driven on both edges and refuse manual or tag-based ending; the tag buys time inside the window rather than ending it. - If the phone was off at the window's start minute, the first tap opens the window and then spends an unlock, so a missed alarm cannot become a loophole. - The mode card shows the live unlock countdown and remaining allowance. - Room schema 15 (defaults on the new columns, auto-migration). Ten new unit tests cover blocking, unlock grants, expiry, allowances and exit rules. Motion - New core:designsystem/Motion.kt holds the shared vocabulary: LifeMotion timings, FadeThrough for swapped content, FadeVisible for things that come and go, and Modifier.smoothSize() for layouts that resize. - Screen transitions are now a single fade plus a barely-there scale, with no slides. - Applied throughout: clock tabs and the timer's countdown/typed-entry/wheels, Pastebin tabs, Brick's list-to-editor switch, screen-time week-to-day stat cards, the Downloader status line, Clear Sky refreshes and the Home grid-to-list switch. Version 0.1.0-alpha.21. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011kSsXNrSk6NDjM2FjFZ7Y9
codebooo
force-pushed
the
claude/lifeos-production-plan-v3-dmynx3
branch
from
July 28, 2026 19:40
d678314 to
c9c4609
Compare
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.
Two additions (0.1.0-alpha.21).
1. Brick inverse mode
A profile can now invert the whole idea: instead of the tag starting a block, you set the window the apps stay shut (say 08:00 to 22:00) and the tag becomes the only way in. Each tap buys a set stretch of access - put the tag somewhere inconvenient and every unlock costs a walk.
Settings:
Behaviour, all of it deliberate:
Room schema 15 with defaults on the new columns and an auto-migration. Ten new unit tests cover blocking during the window, unlock grants, expiry, single/multi/unlimited allowances and the exit rules; the Brick suite is at 22 tests, all passing.
2. Motion
New
core/designsystem/component/Motion.ktholds one vocabulary instead of ad-hoc animations per screen:LifeMotiontimings (130 ms out, 220 ms in, 240 ms swap),FadeThroughfor content that gets swapped,FadeVisiblefor things that come and go, andModifier.smoothSize()for layouts that resize.Screen transitions are now a single fade plus a barely-there scale, with no slides. Applied through the app:
Verification
:app:assembleDebug,:app:assembleRelease(minified) and the fulltesttask pass.Generated by Claude Code