539512c4c8
Two table round-trip losses from review #4404: - #7: a table inside a column was emitted as a GFM pipe table INSIDE the raw-HTML <div data-type="column"> wrapper. marked does not parse markdown inside a raw HTML block, so on re-import the table became literal "| a | b |" text. - #8: a table cell holding block content (a list, code block, multiple paragraphs) only used the HTML <table> form when a cell had colspan/rowspan; otherwise the GFM pipe path flattened the cell's blocks onto one line and lost the structure. Extract a shared tableToHtml() helper and use the HTML <table> form when: a cell is merged (existing), a cell is multi-block (#8), OR the table is rendered in a raw-HTML context — blockToHtml's table case now routes through tableToHtml (#7). Verified on stand: a table-in-column exports as <table> inside data-type=column; a cell with a bullet list exports as <table> with <ul><li>, and a git-side edit + re-import keeps the bulletList + both items in the DB content (was flattened). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>