Skip to content

62 hotfix (tool call gating, automatic participant pull) #1289

Merged
yujonglee merged 12 commits intomainfrom
62-hotfix
Aug 5, 2025
Merged

62 hotfix (tool call gating, automatic participant pull) #1289
yujonglee merged 12 commits intomainfrom
62-hotfix

Conversation

@duckduckhero
Copy link
Contributor

@duckduckhero duckduckhero commented Aug 4, 2025

Summary by cubic

Added automatic participant import from calendar events and improved tool call gating so only supported models can access certain tools.

  • New Features
    • When creating a session from a calendar event, participants are now pulled in and matched or created as users automatically.
    • Only specific models (like gpt-4.1 and claude 4 sonnet) can access certain tools; others are shown a message if a tool is unavailable.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Aug 4, 2025

Note

Other AI code review bot(s) detected

CodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review.

📝 Walkthrough

Walkthrough

This update introduces participant tracking for calendar events throughout the system. It adds a new participants field to event data structures and database tables, implements JSON serialization/deserialization of participant information, and ensures synchronization from external sources includes participant data. Conditional logic for AI tool access is refined, and a new OpenRouter model is added to the UI. Additionally, session participant management is enhanced with soft-delete functionality and synchronization with calendar event participants.

Changes

Cohort / File(s) Change Summary
Event Participants: Data Model & Serialization
crates/db-user/src/events_types.rs, plugins/db/js/bindings.gen.ts
Added participants field to Event struct/type, introduced EventParticipant struct, and implemented JSON (de)serialization methods.
Database Schema & Migration
crates/db-user/src/events_migration_1.sql, crates/db-user/src/session_participants_migration_1.sql, crates/db-user/src/lib.rs
Added participants column to events table and deleted boolean column to session_participants table via new migrations; registered migrations in migration list.
Event Operations & Initialization
crates/db-user/src/events_ops.rs, crates/db-user/src/init.rs
Updated event insert/update logic and seed/onboarding data to handle new participants field.
Session Participants Soft-Delete & Query Enhancements
crates/db-user/src/sessions_ops.rs
Introduced soft-delete for session participants with deleted flag; updated add/remove/list participant methods accordingly; added method to list deleted participant IDs.
Apple Calendar Plugin: Participant Extraction & Sync
crates/calendar-apple/src/lib.rs, plugins/apple-calendar/src/sync.rs, plugins/apple-calendar/Cargo.toml
Improved participant email extraction, filtered out current user, serialized participants to JSON for DB sync, and added dependency for JSON handling.
Desktop App: Session Participant Synchronization & Logging
apps/desktop/src/routes/app.note.$id.tsx, apps/desktop/src/routes/app.new.tsx
Added logic to synchronize session participants with linked calendar event participants before session load; added console logs during session creation.
AI Model Logic & UI
apps/desktop/src/components/right-panel/hooks/useChatLogic.ts, apps/desktop/src/components/settings/components/ai/llm-custom-view.tsx
Refined logic for tool access based on model ID in chat streaming; added "openai/gpt-4.1" to selectable OpenRouter models.
Localization Reference Updates
apps/desktop/src/locales/en/messages.po, apps/desktop/src/locales/ko/messages.po
Updated source line numbers for translation references; no changes to translation content.
AI System Prompt Update
crates/template/assets/ai_chat_system.jinja
Added instruction clarifying tool access limitations for AI models.
Tauri Plugin DB Command & Permissions for Deleted Participants
plugins/db/src/commands/sessions.rs, plugins/db/src/lib.rs, plugins/db/build.rs, plugins/db/permissions/autogenerated/commands/session_list_deleted_participant_ids.toml, plugins/db/permissions/default.toml, plugins/db/permissions/schemas/schema.json, plugins/db/permissions/autogenerated/reference.md
Added new Tauri command to list deleted session participant IDs; updated command registration and permissions configuration and documentation accordingly.
Desktop App Debug Setup
apps/desktop/src-tauri/src/ext.rs
Commented out database seeding call in debug builds to disable automatic seeding during local setup.
Transcript Word Type Update
apps/desktop/src/components/right-panel/views/transcript-view.tsx, packages/tiptap/src/transcript/index.tsx, packages/tiptap/src/transcript/utils.ts
Updated type annotations from Word to Word2 for transcript words across components and utilities.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant DesktopApp
    participant CalendarPlugin
    participant DB
    participant AI

    User->>DesktopApp: Create session from calendar event
    DesktopApp->>CalendarPlugin: Fetch event with participants
    CalendarPlugin->>DB: Store event (with participants as JSON)
    DB-->>CalendarPlugin: Confirmation
    CalendarPlugin-->>DesktopApp: Event data (with participants)
    DesktopApp->>DB: Ensure all participants are represented as humans
    loop For each participant
        DesktopApp->>DB: Add participant to session
    end
    DesktopApp->>AI: Start chat (with model/tool logic)
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~40 minutes

Possibly related PRs

Note

⚡️ Unit Test Generation is now available in beta!

Learn more here, or try it out under "Finishing Touches" below.


📜 Recent review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between d32fc7a and 4800c74.

📒 Files selected for processing (3)
  • apps/desktop/src/components/right-panel/views/transcript-view.tsx (2 hunks)
  • packages/tiptap/src/transcript/index.tsx (3 hunks)
  • packages/tiptap/src/transcript/utils.ts (3 hunks)
✅ Files skipped from review due to trivial changes (2)
  • apps/desktop/src/components/right-panel/views/transcript-view.tsx
  • packages/tiptap/src/transcript/index.tsx
🧰 Additional context used
📓 Path-based instructions (1)
**/*.{js,ts,tsx,rs}

⚙️ CodeRabbit Configuration File

**/*.{js,ts,tsx,rs}: 1. No error handling.
2. No unused imports, variables, or functions.
3. For comments, keep it minimal. It should be about "Why", not "What".

Files:

  • packages/tiptap/src/transcript/utils.ts
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: ci (windows, windows-latest)
  • GitHub Check: ci (macos, macos-latest)
🔇 Additional comments (5)
packages/tiptap/src/transcript/utils.ts (5)

1-1: LGTM - Import statement correctly updated.

The import statement has been properly updated from Word to Word2 to align with the coordinated type rename across the codebase.


4-4: LGTM - Export statement correctly updated.

The type re-export has been properly updated to maintain consistency with the import change.


29-29: LGTM - Function parameter type correctly updated.

The fromWordsToEditor function parameter type has been properly updated from Word[] to Word2[] to maintain type consistency.


69-69: LGTM - Function return type correctly updated.

The fromEditorToWords function return type has been properly updated from Word[] to Word2[] to maintain type consistency.


74-74: LGTM - Local variable type annotation correctly updated.

The local words variable type annotation has been properly updated from Word[] to Word2[] to maintain type consistency within the function.

✨ Finishing Touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch 62-hotfix

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

‼️ IMPORTANT
Auto-reply has been disabled for this repository in the CodeRabbit settings. The CodeRabbit bot will not respond to your replies unless it is explicitly tagged.

  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai generate unit tests to generate unit tests for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🧹 Nitpick comments (7)
plugins/apple-calendar/src/sync.rs (2)

163-166: Consider extracting participant serialization to a helper function.

The participant serialization logic is duplicated three times. Consider extracting it to reduce duplication:

fn serialize_participants(participants: &[Participant]) -> String {
    serde_json::to_string(participants).unwrap_or_else(|_| "[]".to_string())
}

Then use it as:

participants: Some(serialize_participants(&matching_event.participants)),

Also applies to: 191-194, 244-247


344-344: Consider removing or adjusting debug logging.

The debug log at line 344 outputs the entire results HashMap, which could be verbose with many events. Consider logging just the count or removing before production.

crates/calendar-apple/src/lib.rs (1)

163-167: Add safety documentation for unsafe Objective-C call.

The unsafe block uses raw Objective-C messaging. Consider adding a comment explaining the safety assumptions:

// Safety: participant is a valid EKParticipant instance and emailAddress selector
// returns either an NSString pointer or null
unsafe {
    let email_ns: *const NSString = msg_send![participant, emailAddress];
    email_ns.as_ref().map(|s| s.to_string())
}
apps/desktop/src/routes/app.new.tsx (4)

27-28: Remove debug console.log statements before production.

Debug logging should be removed or converted to proper logging:

-console.log("creating a session from an event");
-console.log("event", event);

51-54: Add type validation for parsed participants.

Consider using a schema validator like Zod to ensure the parsed data matches expected structure:

const participantSchema = z.array(z.object({
  name: z.string().nullable(),
  email: z.string().nullable()
}));

const eventParticipants = participantSchema.parse(JSON.parse(event.participants));

85-89: Validate email format when creating display name.

When splitting email to create display name, ensure the email is valid:

-if (!displayName && participant.email) {
-  displayName = participant.email.split("@")[0];
-}
+if (!displayName && participant.email) {
+  const emailParts = participant.email.split("@");
+  displayName = emailParts.length > 0 ? emailParts[0] : participant.email;
+}

108-108: Consider more specific error logging.

The generic error message could be more informative:

-console.error("Failed to parse or add event participants:", error);
+console.error("Failed to parse or add event participants:", {
+  error,
+  eventId: event?.id,
+  participantsData: event?.participants
+});
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 0f14eaa and 25800c7.

⛔ Files ignored due to path filters (1)
  • Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (15)
  • apps/desktop/src/components/right-panel/hooks/useChatLogic.ts (1 hunks)
  • apps/desktop/src/components/settings/components/ai/llm-custom-view.tsx (1 hunks)
  • apps/desktop/src/locales/en/messages.po (14 hunks)
  • apps/desktop/src/locales/ko/messages.po (14 hunks)
  • apps/desktop/src/routes/app.new.tsx (3 hunks)
  • crates/calendar-apple/src/lib.rs (4 hunks)
  • crates/db-user/src/events_migration_1.sql (1 hunks)
  • crates/db-user/src/events_ops.rs (6 hunks)
  • crates/db-user/src/events_types.rs (1 hunks)
  • crates/db-user/src/init.rs (20 hunks)
  • crates/db-user/src/lib.rs (2 hunks)
  • crates/template/assets/ai_chat_system.jinja (1 hunks)
  • plugins/apple-calendar/Cargo.toml (1 hunks)
  • plugins/apple-calendar/src/sync.rs (5 hunks)
  • plugins/db/js/bindings.gen.ts (1 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
**/*.{js,ts,tsx,rs}

⚙️ CodeRabbit Configuration File

**/*.{js,ts,tsx,rs}: 1. No error handling.
2. No unused imports, variables, or functions.
3. For comments, keep it minimal. It should be about "Why", not "What".

Files:

  • crates/db-user/src/init.rs
  • apps/desktop/src/components/settings/components/ai/llm-custom-view.tsx
  • crates/db-user/src/events_ops.rs
  • plugins/db/js/bindings.gen.ts
  • crates/db-user/src/events_types.rs
  • plugins/apple-calendar/src/sync.rs
  • crates/db-user/src/lib.rs
  • apps/desktop/src/components/right-panel/hooks/useChatLogic.ts
  • crates/calendar-apple/src/lib.rs
  • apps/desktop/src/routes/app.new.tsx
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: cubic · AI code reviewer
  • GitHub Check: ci
  • GitHub Check: ci (macos, macos-latest)
  • GitHub Check: ci (windows, windows-latest)
🔇 Additional comments (19)
apps/desktop/src/locales/ko/messages.po (1)

259-1541: LGTM! Routine translation reference updates

These line number updates are standard maintenance to keep translation references aligned with source code changes. No issues with the translation content itself.

apps/desktop/src/components/settings/components/ai/llm-custom-view.tsx (1)

40-40: LGTM! New OpenRouter model added correctly

The addition of "openai/gpt-4.1" follows the established naming convention and is positioned appropriately in the array. This aligns with the tool calling gating functionality mentioned in the PR objectives.

apps/desktop/src/locales/en/messages.po (1)

259-1541: LGTM! Automated line reference updates are accurate.

These changes correctly update the source code line number references in translation comments to maintain accuracy after code modifications. The actual translation strings remain unchanged, which is the expected behavior for this type of maintenance update.

apps/desktop/src/components/right-panel/hooks/useChatLogic.ts (1)

317-319: LGTM! Proper tool call gating implementation.

The refined condition correctly gates advanced AI features (search tools and step counting) to specific high-capability models only. This ensures that complex tool usage is limited to models that can handle it effectively, aligning with the PR's "tool call gating" objective.

plugins/apple-calendar/Cargo.toml (1)

28-28: LGTM - Necessary dependency for JSON serialization.

The addition of serde_json workspace dependency is appropriate for serializing participant data in the sync functionality.

crates/db-user/src/init.rs (1)

80-80: LGTM - Consistent initialization of new participants field.

All Event struct initializations properly include the new participants field set to None, which is appropriate for seed/onboarding data where participants aren't predefined.

Also applies to: 242-242, 255-255, 268-268, 281-281, 294-294, 307-307, 332-332, 345-345, 368-368, 393-393, 406-406, 432-432, 445-445, 470-470, 483-483, 497-497, 510-510, 523-523, 536-536

crates/db-user/src/events_migration_1.sql (1)

1-4: LGTM - Clean database migration for participants field.

The migration properly adds the participants column as nullable TEXT, which is appropriate for storing JSON data and maintains backward compatibility with existing records.

crates/db-user/src/lib.rs (1)

132-132: LGTM - Proper migration integration.

The new migration is correctly appended to the MIGRATIONS array and the array size is properly updated to 20, following the append-only rule for database migrations.

Also applies to: 152-152

plugins/db/js/bindings.gen.ts (1)

165-165: LGTM - TypeScript binding matches database schema.

The participants: string | null field correctly represents the nullable TEXT column from the database, allowing for JSON string storage or null values.

crates/db-user/src/events_ops.rs (3)

42-43: LGTM! Consistent addition of participants field to update operation.

The participants field is correctly added to both the SQL UPDATE statement and the parameter bindings.

Also applies to: 55-55


86-88: LGTM! Proper implementation of participants field in upsert operation.

The participants field is consistently added to:

  • INSERT column list
  • INSERT values list
  • ON CONFLICT UPDATE clause
  • Parameter bindings

Also applies to: 97-98, 104-105, 117-117


243-243: LGTM! Test data properly initialized.

The test event correctly initializes the participants field as None.

plugins/apple-calendar/src/sync.rs (1)

2-2: LGTM! Required import for JSON serialization.

The serde_json import is necessary for serializing participant data.

crates/calendar-apple/src/lib.rs (2)

4-4: LGTM! Required import for Objective-C messaging.

The msg_send import is needed for direct Objective-C method calls.


236-240: LGTM! Proper filtering of current user from participants.

The code correctly filters out the current user from the participants list to avoid self-inclusion.

crates/db-user/src/events_types.rs (3)

16-16: LGTM! Participants field properly added to Event struct.

The optional String field is appropriate for storing JSON participant data.


20-25: LGTM! Well-structured EventParticipant type.

The struct with optional name and email fields provides flexibility for incomplete participant data.


28-33: LGTM! Robust deserialization with error handling.

The get_participants method properly handles deserialization errors by returning an empty vector.

apps/desktop/src/routes/app.new.tsx (1)

5-5: LGTM! Required import for Human type.

The Human type import is necessary for creating participant records.

Comment on lines +35 to 37
pub fn set_participants(&mut self, participants: Vec<EventParticipant>) {
self.participants = Some(serde_json::to_string(&participants).unwrap());
}
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

Handle serialization errors gracefully in set_participants.

The unwrap() call could panic if serialization fails. Consider handling the error:

-pub fn set_participants(&mut self, participants: Vec<EventParticipant>) {
-    self.participants = Some(serde_json::to_string(&participants).unwrap());
+pub fn set_participants(&mut self, participants: Vec<EventParticipant>) -> Result<(), serde_json::Error> {
+    self.participants = Some(serde_json::to_string(&participants)?);
+    Ok(())
}

Alternatively, use a fallback similar to the sync code:

-pub fn set_participants(&mut self, participants: Vec<EventParticipant>) {
-    self.participants = Some(serde_json::to_string(&participants).unwrap());
+pub fn set_participants(&mut self, participants: Vec<EventParticipant>) {
+    self.participants = Some(
+        serde_json::to_string(&participants).unwrap_or_else(|_| "[]".to_string())
+    );
}
🤖 Prompt for AI Agents
In crates/db-user/src/events_types.rs around lines 35 to 37, the
set_participants method uses unwrap() on serde_json::to_string which can cause a
panic if serialization fails. Modify the method to handle serialization errors
gracefully by returning a Result or using a fallback value instead of unwrap.
For example, you can match on the result of to_string and set participants to
None or an empty string on error, or propagate the error to the caller.

Copy link

@cubic-dev-ai cubic-dev-ai bot left a comment

Choose a reason for hiding this comment

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

cubic analysis

4 issues found across 14 files • Review in cubic

React with 👍 or 👎 to teach cubic. You can also tag @cubic-dev-ai to give feedback, ask questions, or re-run the review.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Nitpick comments (1)
apps/desktop/src/routes/app.note.$id.tsx (1)

37-118: Consider improving error handling and adding validation.

The participant synchronization logic is comprehensive but could benefit from more robust error handling and validation:

  1. JSON parsing safety: The JSON.parse(event.participants) could fail with malformed JSON
  2. Email validation: Consider validating email format before processing
  3. Participant deduplication: The logic handles email-based deduplication well

Consider adding JSON parsing validation:

-              const eventParticipants = JSON.parse(event.participants) as Array<{
-                name: string | null;
-                email: string | null;
-              }>;
+              let eventParticipants: Array<{
+                name: string | null;
+                email: string | null;
+              }>;
+              
+              try {
+                eventParticipants = JSON.parse(event.participants);
+              } catch (parseError) {
+                console.error("Failed to parse event participants:", parseError);
+                continue;
+              }
📜 Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 2ef153b and d32fc7a.

⛔ Files ignored due to path filters (1)
  • Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (15)
  • apps/desktop/src-tauri/src/ext.rs (1 hunks)
  • apps/desktop/src/routes/app.new.tsx (2 hunks)
  • apps/desktop/src/routes/app.note.$id.tsx (3 hunks)
  • crates/db-user/src/init.rs (20 hunks)
  • crates/db-user/src/lib.rs (2 hunks)
  • crates/db-user/src/session_participants_migration_1.sql (1 hunks)
  • crates/db-user/src/sessions_ops.rs (4 hunks)
  • plugins/db/build.rs (1 hunks)
  • plugins/db/js/bindings.gen.ts (4 hunks)
  • plugins/db/permissions/autogenerated/commands/session_list_deleted_participant_ids.toml (1 hunks)
  • plugins/db/permissions/autogenerated/reference.md (2 hunks)
  • plugins/db/permissions/default.toml (1 hunks)
  • plugins/db/permissions/schemas/schema.json (2 hunks)
  • plugins/db/src/commands/sessions.rs (1 hunks)
  • plugins/db/src/lib.rs (1 hunks)
✅ Files skipped from review due to trivial changes (9)
  • plugins/db/build.rs
  • crates/db-user/src/session_participants_migration_1.sql
  • plugins/db/permissions/default.toml
  • crates/db-user/src/lib.rs
  • plugins/db/src/lib.rs
  • plugins/db/permissions/autogenerated/reference.md
  • plugins/db/permissions/autogenerated/commands/session_list_deleted_participant_ids.toml
  • apps/desktop/src/routes/app.new.tsx
  • crates/db-user/src/init.rs
🚧 Files skipped from review as they are similar to previous changes (1)
  • plugins/db/js/bindings.gen.ts
🧰 Additional context used
📓 Path-based instructions (1)
**/*.{js,ts,tsx,rs}

⚙️ CodeRabbit Configuration File

**/*.{js,ts,tsx,rs}: 1. No error handling.
2. No unused imports, variables, or functions.
3. For comments, keep it minimal. It should be about "Why", not "What".

Files:

  • apps/desktop/src-tauri/src/ext.rs
  • plugins/db/src/commands/sessions.rs
  • apps/desktop/src/routes/app.note.$id.tsx
  • crates/db-user/src/sessions_ops.rs
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: ci (windows, windows-latest)
🔇 Additional comments (9)
apps/desktop/src-tauri/src/ext.rs (1)

142-144: LGTM!

Commenting out the seeding call is appropriate for disabling test data in debug builds. The change is contained within the debug_assertions block and maintains the original code for future reference.

plugins/db/src/commands/sessions.rs (1)

55-73: LGTM!

The new command function follows the established pattern correctly with proper annotations, error handling, and consistent implementation with other functions in the file.

apps/desktop/src/routes/app.note.$id.tsx (1)

8-8: LGTM!

Import statement correctly updated to include the Human type needed for the participant synchronization logic.

plugins/db/permissions/schemas/schema.json (2)

669-680: LGTM!

The new permission kinds for session_list_deleted_participant_ids follow the established pattern with both allow and deny variants properly defined.


862-866: LGTM!

The default permission description correctly includes the new allow-session-list-deleted-participant-ids permission in the list.

crates/db-user/src/sessions_ops.rs (4)

267-286: LGTM!

The new method correctly implements querying for deleted participant IDs with proper error handling and follows the established pattern of other database methods in the file.


387-387: LGTM!

Adding the deleted column with explicit FALSE value ensures new participants are properly marked as active in the soft-delete system.


402-402: LGTM!

Converting from hard delete to soft delete by updating the deleted flag to TRUE is the correct approach for implementing soft-delete functionality.


419-419: LGTM!

The WHERE clause correctly filters out deleted participants by checking both deleted = FALSE and deleted IS NULL to handle existing records that may not have the deleted column set.

@yujonglee yujonglee merged commit ad508eb into main Aug 5, 2025
7 checks passed
@yujonglee yujonglee deleted the 62-hotfix branch August 5, 2025 06:08
This was referenced Oct 10, 2025
@coderabbitai coderabbitai bot mentioned this pull request Nov 12, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants