Repository navigation
Feat/UI v2.0 - #3
Merged
Merged
Conversation
- Document brutalist design philosophy and principles - Define TYPOGRAPHY scale (display, h1-h3, body, label, meta) - Define SPACING scale (xs to xxl) - Define COLORS monochromatic palette with emerald accent - Document component patterns and usage guidelines - Add implementation examples for common patterns
- Removed non-existent COLORS.secondary references - Use COLORS.info (blue) for image/vision features - Aligns with single emerald accent color design system - Fixes TypeScript errors for missing secondary color
- Change onDismiss prop to onClose (correct API) - Fix hideAlert() calls - must be invoked with parentheses - Update 10+ screens and components with broken CustomAlert - Ensures alerts properly close when dismissed - Fixes race condition in alert state management
- Replace hardcoded fontSize/fontWeight with TYPOGRAPHY tokens - Standardize fontFamily to use FONTS.mono consistently - Fix 350+ typography violations across 28 files - Ensures consistent text sizing across all screens - Changes: fontSize: 14 → ...TYPOGRAPHY.body, etc. - Removes magic numbers for font styling
- Change screen headers from h1 (24px) to h2 (16px) - Change section headers from h1/h2 to h3 (13px) - Add missing color: COLORS.text to ProjectsScreen title - Fix ModelSelectorModal title (h2 → h3) and close button (h2 → body) - Fixes overly large header text throughout app - Improves visual hierarchy and information density
- Replace hardcoded font sizes with TYPOGRAPHY tokens - Fix border radius consistency (8px) - Improve visual consistency with design system
- Update tests for onDismiss → onClose prop change - Update tests for hideAlert() invocation syntax - Ensures tests pass after CustomAlert API corrections
- Add references to new design system documentation - Update component usage patterns - Document brutalist design principles in context
alichherawalla
force-pushed
the
feat/ui-v2.0
branch
from
February 7, 2026 22:45
8330915 to
3968318
Compare
alichherawalla
force-pushed
the
feat/ui-v2.0
branch
from
February 7, 2026 22:52
3968318 to
cc48d1e
Compare
6 tasks
fl4p
referenced
this pull request
in fl4p/off-grid-ai-mobile
Jul 3, 2026
…ollision #3: rewrite saveImageToGallery to use @react-native-camera-roll/camera-roll so images land in the actual Photos app (iOS) / gallery MediaStore (Android), user-visible in the system photos app, instead of an app-private Documents folder on iOS. Android permission is only requested on API < 33 (newer versions add to the media store without it). iOS Info.plist already carries the NSPhotoLibraryAdd usage string. #4: index-scope the non-user image testIDs in MessageAttachments (generated-image-${index} / generated-image-content-${index}) so an assistant image and a run_python plot in the same tree no longer collide under getByTestId. Updates the affected component tests and the image-generation Maestro flow + E2E docs to the index-scoped ids. Requires 'pod install' + a rebuild for the new native module.
alichherawalla
added a commit
that referenced
this pull request
Jul 6, 2026
- Pre-check now policy-aware (Qodo #4): activeModelService.checkMemoryForModel passes the residency manager's active policy into the budget owner, so aggressive relaxes the pre-check AND residency consistently (single budget, one policy). - loadPolicySync is now a singleton (Qodo #3): repeated startLoadPolicySync() calls return the same live unsubscribe instead of stacking Zustand subscriptions — App's boot effect can re-run without leaking listeners / duplicate setLoadPolicy calls. - Removed the misleading policyAllowsOverride (Qodo #5): "Load Anyway" is an always-available, per-load, user-confirmed escape hatch (its historical behaviour and the explicit product ask), NOT gated by the policy. The aggressive setting changes the default budget; override is separate. Dropped the false contract rather than gating the override away. - Concretised the toggle copy (Qodo #2): states the actual mechanism (~70%→~88% ceiling, 1.5GB→0.8GB reserve, less RAM for other apps) instead of a vague claim. Tests: aggressive flips the pre-check result end-to-end; loadPolicySync singleton guard (two starts → one subscription, one setLoadPolicy per flip). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
alichherawalla
added a commit
that referenced
this pull request
Sep 6, 2026
The root failure observer early-returned unless the domain was `rag` or `sync`, so every event on the new `'lifecycle'` domain - `degraded`, `recovered`, `lifecycle_failed` - was dropped on the floor. Audit 3 P0 #3 requires both apps' observers to RECEIVE the failure rather than depend on console output; shared's half landed in `924d728` and mobile's was still discarding it. The filter now routes `'lifecycle'` to its own reporter, and the semantics of Seat C's keyed report list are honoured rather than flattened: - `degraded` carries the report that was just recorded or replaced, so it is logged with its REPORTER (`source`) and the derived `lifecycleFailure` alongside it. - `recovered` names the reporter that RETRACTED, not a healthy domain. `degraded` and `lifecycleFailure` are two filters over one list keyed by `(scope, source)`, so a retraction clears exactly one owner's entry and another owner may still be reporting the same domain - there is deliberately no domain-level clear. It is logged as one reporter standing down, and whether the DOMAIN is still degraded is READ from the `degraded` projection at event time instead of being inferred from the event. - `lifecycle_failed` is logged with its phase and every cause, in report order. `reportDegradedStart` stays, and the comment now says why it is not a duplicate: the domains the app composed no ports for are recorded at construction as `unavailable` reports and emit NO event, so `result.degraded` is the only place they appear. It is now one summary line instead of one error per entry, because everything in it that is a real failure has already been reported per event. Written against shared HEAD's contract. `@offgrid/application`'s dist in mobile predates `924d728` and has no `'lifecycle'` domain, `ApplicationLifecycleEvent` or `lifecycle_failed` at all, so this cannot be typechecked or built until the dist is rebuilt - BLOCKERS PRE-1, the same gate already holding `b65c79fd`, `f396fd7a` and `4eb8e319`.
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.
No description provided.