[ { "id": "T01", "description": "Drawer opens CollaborativeEditor when clicking an in-app document in edit mode", "featureIds": ["F01"], "implemented": true }, { "id": "T02", "description": "CollaborativeEditor connects to correct Hocuspocus room (document::)", "featureIds": ["F02"], "implemented": true }, { "id": "T03", "description": "Detect BlockNote JSON format: array with objects having 'props' field", "featureIds": ["F03"], "implemented": true }, { "id": "T04", "description": "Detect ProseMirror JSON format: object with type:'doc'", "featureIds": ["F03"], "implemented": true }, { "id": "T05", "description": "Detect empty/null block_data and initialize empty document", "featureIds": ["F03"], "implemented": true }, { "id": "T06", "description": "Convert BlockNote paragraph block to ProseMirror paragraph node", "featureIds": ["F04"], "implemented": true }, { "id": "T07", "description": "Convert BlockNote paragraph with styled text (bold, italic, underline) to ProseMirror marks", "featureIds": ["F07"], "implemented": true }, { "id": "T08", "description": "Convert BlockNote heading block (levels 1-3) to ProseMirror heading node", "featureIds": ["F05"], "implemented": true }, { "id": "T09", "description": "Convert BlockNote bulletListItem blocks to ProseMirror bullet_list > list_item", "featureIds": ["F06"], "implemented": true }, { "id": "T10", "description": "Convert BlockNote numberedListItem blocks to ProseMirror ordered_list > list_item", "featureIds": ["F06"], "implemented": true }, { "id": "T11", "description": "Convert BlockNote link inline content to ProseMirror link mark", "featureIds": ["F07"], "implemented": true }, { "id": "T12", "description": "Convert BlockNote mention inline content to ProseMirror (preserve or drop gracefully)", "featureIds": ["F07"], "implemented": true }, { "id": "T13", "description": "Convert BlockNote codeBlock to ProseMirror code_block node", "featureIds": ["F08"], "implemented": true }, { "id": "T14", "description": "Convert BlockNote blockquote (quote) to ProseMirror blockquote node", "featureIds": ["F08"], "implemented": true }, { "id": "T15", "description": "Conversion handles empty blocks (no content) without crashing", "featureIds": ["F04"], "implemented": true }, { "id": "T16", "description": "Conversion handles nested children blocks", "featureIds": ["F06", "F08"], "implemented": true }, { "id": "T17", "description": "Existing ProseMirror JSON document loads without conversion in CollaborativeEditor", "featureIds": ["F09"], "implemented": true }, { "id": "T18", "description": "Existing BlockNote JSON document loads correctly after conversion in CollaborativeEditor", "featureIds": ["F09"], "implemented": true }, { "id": "T19", "description": "Save button triggers syncCollabSnapshot and persists content to document_block_content", "featureIds": ["F10"], "implemented": true }, { "id": "T20", "description": "Closing drawer triggers snapshot (best-effort, doesn't block close)", "featureIds": ["F11"], "implemented": true }, { "id": "T21", "description": "When Hocuspocus is unreachable, editor falls back to single-user mode within 3 seconds", "featureIds": ["F12"], "implemented": true }, { "id": "T22", "description": "Fallback mode allows editing and saving via manual Save button", "featureIds": ["F13"], "implemented": true }, { "id": "T23", "description": "Fallback mode shows 'Offline — manual save mode' status indicator", "featureIds": ["F14"], "implemented": true }, { "id": "T24", "description": "Two users opening same document in drawers see each other's cursors", "featureIds": ["F15"], "implemented": true }, { "id": "T25", "description": "Presence bar in drawer shows names/avatars of connected users", "featureIds": ["F15"], "implemented": true }, { "id": "T26", "description": "Changes from user A appear in user B's drawer in real-time", "featureIds": ["F15"], "implemented": true }, { "id": "T27", "description": "New document creation: drawer opens with empty CollaborativeEditor, document record created in DB", "featureIds": ["F16"], "implemented": true }, { "id": "T28", "description": "Read-only view mode renders document content without editing", "featureIds": ["F17"], "implemented": true }, { "id": "T29", "description": "Document name can be edited in the drawer header", "featureIds": ["F18"], "implemented": true }, { "id": "T30", "description": "Unsaved changes warning appears when closing drawer in fallback mode with pending changes", "featureIds": ["F19"], "implemented": true }, { "id": "T31", "description": "After BlockNote-to-ProseMirror conversion, converted format is persisted back to DB", "featureIds": ["F20"], "implemented": true }, { "id": "T32", "description": "Round-trip: content saved by CollaborativeEditor can be reopened in CollaborativeEditor", "featureIds": ["F09", "F10"], "implemented": true }, { "id": "T33", "description": "Formatting toolbar (BubbleMenu) works inside the drawer CollaborativeEditor", "featureIds": ["F01"], "implemented": true }, { "id": "T34", "description": "Emoticon extension works in drawer CollaborativeEditor (:) converts to emoji)", "featureIds": ["F01"], "implemented": true }, { "id": "T35", "description": "Link auto-detection works in drawer CollaborativeEditor", "featureIds": ["F01"], "implemented": true } ]