-
-
Save shricodev/c577d1a73e16f4a3d030535fcff0f8cd to your computer and use it in GitHub Desktop.
Bug Fixing (Collaborative Editing): Claude Sonnet 4
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
collaborative-editor git:(main) ✘ claude --model "claude-sonnet-4-20250514" | |
╭────────────────────────────────────────────────────────────────────────────────────────────────╮ | |
│ ✻ Welcome to Claude Code! │ | |
│ │ | |
│ /help for help, /status for your current setup │ | |
│ │ | |
│ cwd: /home/shricodev/codes/work/blogs/composio/comparisons/claude-code/collaborative-editor │ | |
╰────────────────────────────────────────────────────────────────────────────────────────────────╯ | |
> Hey, the project had everything working, recently the project got introduced few bugs where a document name never updates even though you rename it and also a user seem to be able to | |
remove themselves as a collaborator from their own document. Also a user who should not have the permission to view a document is able to view it. Help me fix all of it. | |
● I'll help you fix these bugs in the collaborative editor. Let me create a todo list to track all the issues and then investigate each one. | |
● Update Todos | |
⎿ ☐ Investigate document name update bug - names not persisting after rename | |
☐ Fix user able to remove themselves as collaborator from own document | |
☐ Add access check in getDocument function to prevent unauthorized viewing | |
☐ Run npm run lint to check code quality | |
● Let me start by investigating the document management code to understand these issues. | |
● Read(lib/actions/room.actions.ts)… | |
⎿ Read 154 lines (ctrl+r to expand) | |
● Read(components/Header.tsx)… | |
⎿ Read 31 lines (ctrl+r to expand) | |
● Read(components/ShareModal.tsx)… | |
⎿ Read 119 lines (ctrl+r to expand) | |
● Now let me look at the Collaborator component and the CollaborativeRoom to understand the document title update issue: | |
● Read(components/Collaborator.tsx)… | |
⎿ Read 87 lines (ctrl+r to expand) | |
● Read(components/CollaborativeRoom.tsx)… | |
⎿ Read 144 lines (ctrl+r to expand) | |
● Now I can identify the issues. Let me update the todo and start fixing them: | |
● Update Todos | |
⎿ ☐ Investigate document name update bug - names not persisting after rename | |
☐ Fix user able to remove themselves as collaborator from own document | |
☐ Add access check in getDocument function to prevent unauthorized viewing | |
☐ Run npm run lint to check code quality | |
● I found the issues! Let me fix them one by one: | |
Issue 1: In updateDocument function (room.actions.ts:60), the title is hardcoded to "Untitled" instead of using the passed title parameter. | |
● Update(lib/actions/room.actions.ts)… | |
⎿ Updated lib/actions/room.actions.ts with 1 addition and 1 removal | |
57 try { | |
58 const updatedRoom = await liveblocks.updateRoom(roomId, { | |
59 metadata: { | |
60 title: "Untitled", | |
60 title, | |
61 }, | |
62 }); | |
63 | |
● Update Todos | |
⎿ ☒ Investigate document name update bug - names not persisting after rename | |
☐ Fix user able to remove themselves as collaborator from own document | |
☐ Add access check in getDocument function to prevent unauthorized viewing | |
☐ Run npm run lint to check code quality | |
● Issue 2: In removeCollaborator function (room.actions.ts:132), the logic is inverted - it should prevent removing if the email EQUALS the creator's email, not if it doesn't equal. | |
● Update(lib/actions/room.actions.ts)… | |
⎿ Updated lib/actions/room.actions.ts with 6 additions and 2 removals | |
129 try { | |
130 const room = await liveblocks.getRoom(roomId); | |
131 | |
132 if (room.metadata.email !== email) { | |
132 if (room.metadata.email === email) { | |
133 throw new Error("You cannot remove yourself as the document creator"); | |
134 } | |
135 | |
136 const updatedRoom = await liveblocks.updateRoom(roomId, {}); | |
136 const updatedRoom = await liveblocks.updateRoom(roomId, { | |
137 usersAccesses: { | |
138 [email]: null, | |
139 }, | |
140 }); | |
141 | |
142 revalidatePath(`/documents/${roomId}`); | |
143 return parseStringify(updatedRoom); | |
● Update Todos | |
⎿ ☒ Investigate document name update bug - names not persisting after rename | |
☒ Fix user able to remove themselves as collaborator from own document | |
☐ Add access check in getDocument function to prevent unauthorized viewing | |
☐ Run npm run lint to check code quality | |
● Issue 3: The getDocument function needs an access check. Let me check the utils file for access checking functions: | |
● Read(lib/utils.ts)… | |
⎿ Read 98 lines (ctrl+r to expand) | |
● Now I need to check the user's access to the room. Let me look at how Liveblocks handles user access and add the proper access check to the getDocument function: | |
● Update(lib/actions/room.actions.ts)… | |
⎿ Updated lib/actions/room.actions.ts with 9 additions | |
46 }) => { | |
47 try { | |
48 const room = await liveblocks.getRoom(roomId); | |
49 | |
50 // Check if user has access to this room | |
51 const hasAccess = Object.keys(room.usersAccesses).includes(userId) || | |
52 room.metadata.email === userId || | |
53 room.metadata.creatorId === userId; | |
54 | |
55 if (!hasAccess) { | |
56 throw new Error("You do not have access to this document"); | |
57 } | |
58 | |
59 return parseStringify(room); | |
60 } catch (error) { | |
61 console.log(`Error happened while getting a room: ${error}`); | |
● Update Todos | |
⎿ ☒ Investigate document name update bug - names not persisting after rename | |
☒ Fix user able to remove themselves as collaborator from own document | |
☒ Add access check in getDocument function to prevent unauthorized viewing | |
☐ Run npm run lint to check code quality | |
● Now let me run the lint command: | |
● Bash(npm run lint)… | |
⎿ > [email protected] lint | |
> next lint | |
✔ No ESLint warnings or errors | |
● Update Todos | |
⎿ ☒ Investigate document name update bug - names not persisting after rename | |
☒ Fix user able to remove themselves as collaborator from own document | |
☒ Add access check in getDocument function to prevent unauthorized viewing | |
☒ Run npm run lint to check code quality | |
● Fixed all bugs: | |
1. Document title not updating: updateDocument was hardcoded to set title as "Untitled" instead of using the passed parameter | |
2. Owner removing themselves: Logic was inverted - now prevents creator from removing themselves | |
3. Unauthorized document access: Added access validation in getDocument to check user permissions | |
4. Lint passed: No ESLint errors found | |
All issues resolved and code quality maintained. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment