Conversation
Implement the post-packet baseline: coverage ledger, frozen v1 .gardenspace fixtures, shared provenance, workspace transactions, media/mini surfaces, Bases virtualization/calendar/filters, Office interchange, folder worktrees, flavors, profession packets, and prompt-to-surface reviewable plans. Co-authored-by: michael berry <mberrys@users.noreply.github.com>
Keep database grid on TanStack row models so cell accessors stay intact. Co-authored-by: michael berry <mberrys@users.noreply.github.com>
Virtualization still indexes filtered rows, but cells must come from getRowModel so CellEditor accessors keep working. Co-authored-by: michael berry <mberrys@users.noreply.github.com>
Replace the markdown textarea with a live ProseMirror view that maps transactions to Garden spliceBlocks and keeps workspace undo. Export decks through PptxGenJS. Parse OOXML/ODF packages with fflate and Mammoth for real DOCX ZIPs. Co-authored-by: michael berry <mberrys@users.noreply.github.com>
The recipe button already plants a mini-tool; free-text "make a tool" must propose the same workspace transaction and never crash the panel. Co-authored-by: michael berry <mberrys@users.noreply.github.com>
Run typecheck, lint, vitest, production build, and Playwright e2e on pull requests and on pushes to main, using the mock AI provider. Co-authored-by: michael berry <mberrys@users.noreply.github.com>
Document Writer vs PDF, Excalidraw as reference-only, and Bases vs Sheets and Airtable/Notion. The campaign packet now sprouts a pitch Schedule calendar and the view opens on the month that has rows. Co-authored-by: michael berry <mberrys@users.noreply.github.com>
Import and export documented Office subsets through Garden canonical state: DOCX/ODT, ExcelJS XLSX plus first-party ODS, and PPTX/ODP slide import with blob plumbing. Adds a fixture corpus, Writer/Sheet export buttons, and honest fidelity toasts. Co-authored-by: michael berry <mberrys@users.noreply.github.com>
Empty word/comments.xml from the docx packer was matching w:comment and toasting a tracked-changes warning on clean round-trips. Co-authored-by: michael berry <mberrys@users.noreply.github.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 45906929d3
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| txRedo: [...state.txRedo, inverse], | ||
| lastAction: state.txUndo.length > 1 ? { type: "tx" } : null, | ||
| }); | ||
| void persistSnapshot(result.snapshot); |
There was a problem hiding this comment.
Delete persisted documents when undoing transactions
When undoing a transaction that created documents, such as planting a packet or accepting a mini-tool plan, the inverse removes those documents only from the in-memory snapshot; persistSnapshot saves remaining documents but never calls deleteDocRow for removed ones. Reloading the page therefore restores the supposedly undone documents from IndexedDB, so the undo is not durable.
AGENTS.md reference: AGENTS.md:L13-L13
Useful? React with 👍 / 👎.
| canRedo: (docId) => | ||
| (get().txRedo.length > 0 && get().lastAction?.type !== "doc") || | ||
| (get().history[docId]?.redo.length ?? 0) > 0, |
There was a problem hiding this comment.
Implement the transaction redo path
After undoing a packet or mini-tool transaction, txRedo is populated and this predicate enables the Redo button, but redo() only reads the active document's history[docId].redo stack. In the common case that no document redo entry exists, clicking the enabled button returns without restoring the transaction.
Useful? React with 👍 / 👎.
| } | ||
|
|
||
| set({ docs: { ...state.docs, [docId]: next }, history }); | ||
| set({ docs: { ...state.docs, [docId]: next }, history, lastAction: { type: "doc", docId } }); |
There was a problem hiding this comment.
Restore the transaction marker after undoing a document edit
Setting lastAction to doc discards the only ordering marker for earlier transactions, and the document-undo branch never restores it. For example, plant a packet, edit its document, and undo the edit: the next Undo becomes disabled because lastAction remains doc, even though txUndo still contains the packet transaction, so the advertised workspace undo chain cannot continue.
Useful? React with 👍 / 👎.
| <div className="flex h-28 items-center justify-center bg-sunken text-[11px] text-faint"> | ||
| {asset.blobId ? asset.name : "No file"} | ||
| </div> |
There was a problem hiding this comment.
Render stored images on the media board
For every uploaded asset with a valid blobId, the board renders only the filename in a placeholder and never loads the blob or creates an image URL. Consequently users who choose “Add images” cannot see the images anywhere on the new media surface, making the visual asset board unusable for reviewing or captioning its contents.
Useful? React with 👍 / 👎.
| assets = assets.map((asset) => | ||
| asset.groupId === op.id ? { ...asset, groupId: null } : asset, | ||
| ); | ||
| inverse.push({ op: "addGroup", group: { id: removed.id, name: removed.name } }); |
There was a problem hiding this comment.
Restore asset memberships when undoing group deletion
Deleting a populated group clears every matching asset.groupId, but its inverse only recreates the group. Undo therefore leaves all formerly grouped assets ungrouped, so the operation is not reversible and accepted AI deleteGroup edits can permanently lose the board's grouping assignments.
Useful? React with 👍 / 👎.
|
Closing as superseded. The two findings still live on main were media-board image rendering and deleteGroup undo restoring asset memberships — both fixed in PR #67 (merged on main). |
No description provided.