Skip to content

Conversation

@adithya-234
Copy link

@adithya-234 adithya-234 commented Dec 27, 2025

Bug fixes:-

  • App provider validation: Use capability.id instead of title for validation in add_app_provider
  • External integration validation: Improved validation for actions without webhooks
  • Chat/memory prompts: Trim prompts before submission
  • Firmware battery check: Added low battery warning (<10%) and disabled firmware update button when critically low
  • WAL race condition: Fixed race condition where _device could become null during sync

Issues Fixed

Test Plan

  • Verify app provider validation works with capability IDs
  • Test firmware update page shows battery warning when <10%
  • Confirm temporal file deletion handles race conditions gracefully
  • Check updated icons render correctly in error states and menus
  • Test app visibility changes invalidate cache properly
  • Verify conversations >4 minutes skip discard confirmation
  • Test Limitless conversation deletion works correctly
  • Confirm invalid URIs don't cause FormatException crashes

adithya-234 and others added 3 commits December 26, 2025 14:33
…race condition

- Use capability.id instead of title for validation checks in add_app_provider
- Improve external_integration validation to handle actions without webhook
- Trim chat and memory prompts before submission
- Add low battery warning (<10%) on firmware update page to prevent bricking
- Disable firmware update button when battery is too low
- Fix race condition in WAL sync where _device could become null during async operations
…eck, limitless delete, URI parsing

This commit addresses 6 open issues:

1. BasedHardware#3855: Failed to delete syncing temporal file
   - Added try-except handling in delete_syncing_temporal_file() to gracefully
     handle race conditions where files may have already been deleted

2. BasedHardware#3886: Confusing UI with similar icons in App Store
   - Changed error placeholder icons from Icons.apps to Icons.image_not_supported_outlined
   - Changed app options menu icon from Icons.apps to Icons.settings_outlined
   - Reduces visual confusion between error states and menu controls

3. BasedHardware#3783: Apps caching issue when editing
   - Improved cache invalidation logic to check both old and new visibility states
   - Ensures cache is properly cleared when app visibility changes in either direction

4. BasedHardware#3735: Don't check for discarded convo prompt if > 4 mins
   - Added duration check before calling should_discard_conversation()
   - Conversations longer than 4 minutes are no longer checked for discarding

5. BasedHardware#3684: delete_limitless_conversations deletes all convos
   - Re-enabled delete_conversations_by_source(uid, 'limitless') function
   - Correctly filters by source='limitless' to only delete Limitless imports

6. BasedHardware#3762: FormatException in URI scheme parsing
   - Added URL validation using Uri.tryParse()?.hasScheme == true
   - Prevents FormatException on invalid/empty URLs in app_detail.dart
Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request contains multiple bug fixes across the frontend and backend. Key changes include adding validation for URLs before launching them, preventing firmware updates on low battery, fixing a race condition when accessing device info, and improving cache invalidation logic. I've found one high-severity issue related to overly broad exception handling in the storage utility, which could mask critical errors. My suggestion is to catch a more specific exception.

I am having trouble creating individual review comments. Click here to see my feedback.

backend/utils/other/storage.py (235-240)

high

Catching a generic Exception is too broad and can mask other important errors like permission issues or network failures. It's better to catch the specific NotFound exception that the Google Cloud Storage client throws when a blob does not exist.

To use NotFound, you'll need to add from google.cloud.exceptions import NotFound at the top of the file.

    try:
        blob.delete()
    except NotFound:
        # File may have already been deleted (race condition) or network retry caused duplicate deletion
        # This is expected behavior - if the file is gone, the delete was successful
        print(f"Note: Could not delete syncing file {file_path} as it was not found.")

@aaravgarg
Copy link
Collaborator

which bugs # does this fix

@adithya-234
Copy link
Author

adithya-234 commented Dec 29, 2025

@aaravgarg this fixes #3885 #3886 #3783 #3735 and #3684

@aaravgarg aaravgarg requested a review from mdmohsin7 December 29, 2025 06:25
@aaravgarg
Copy link
Collaborator

can u add before/after for visual changes pls and add pr description

@adithya-234
Copy link
Author

@aaravgarg sure will share them , and added the description

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

2 participants