Notes editor: pasted Markdown changes table header cell roles on save #1344

Open
opened 2026-10-07 09:20:39 +00:00 by kayg · 1 comment
Owner

Engine: Chromium (Playwright 1.63, Linux host)
Invariant: 4 — saved state must equal the visible Note after save settles.
Severity: Major. The visible first row contains body cells, but the saved Markdown parses them back as headers. This changes table structure on save/reload.
Reproducibility: confirmed 3/3 with the same save-state|sequence-check signature. Delta debugging reduced the action list to one paste.

Steps

  1. Create a Note with this body:
First paragraph for fuzz seed 1. Move the caret, select text, and edit this line.

## Heading for seed 1

Second paragraph has a [seed link](https://example.com/old-1) and more words.

- ordinary item 1
  - nested item 1
- second ordinary item 1

- [ ] checklist item 1

> quoted text for seed 1

```js
const fuzz1 = 1;
```

| Column | Value |
| --- | --- |
| Left | Right 1 |
  1. Place the caret in the Value header cell.
  2. Paste this exact plain-text clipboard payload with the editor focused:
## EF15_0

- Markdown item

> Markdown quote
  1. Wait for the Note save to settle.

Expected

The visible table structure and the saved Markdown parse have the same cell roles.

Actual

The pasted text appears in new body cells in the first table row. The saved Markdown parses every cell in that row as tableHeader, including those body cells. The harness's save-state comparison fails before reload because the reparsed document does not match the visible editor document.

Exact minimized action

{"kind":"paste-markdown","text":"## EF15_0\n\n- Markdown item\n\n> Markdown quote"}

The action used a real clipboard write and Control+V. Screenshot: artifacts/editfuzz/chromium-seed-15-sequence.png. Full shrunk evidence: artifacts/editfuzz/chromium-seed-15-minimal.json.

**Engine:** Chromium (Playwright 1.63, Linux host) **Invariant:** 4 — saved state must equal the visible Note after save settles. **Severity:** Major. The visible first row contains body cells, but the saved Markdown parses them back as headers. This changes table structure on save/reload. **Reproducibility:** confirmed 3/3 with the same `save-state|sequence-check` signature. Delta debugging reduced the action list to one paste. ## Steps 1. Create a Note with this body: ````markdown First paragraph for fuzz seed 1. Move the caret, select text, and edit this line. ## Heading for seed 1 Second paragraph has a [seed link](https://example.com/old-1) and more words. - ordinary item 1 - nested item 1 - second ordinary item 1 - [ ] checklist item 1 > quoted text for seed 1 ```js const fuzz1 = 1; ``` | Column | Value | | --- | --- | | Left | Right 1 | ```` 2. Place the caret in the `Value` header cell. 3. Paste this exact plain-text clipboard payload with the editor focused: ```text ## EF15_0 - Markdown item > Markdown quote ``` 4. Wait for the Note save to settle. ## Expected The visible table structure and the saved Markdown parse have the same cell roles. ## Actual The pasted text appears in new body cells in the first table row. The saved Markdown parses every cell in that row as `tableHeader`, including those body cells. The harness's save-state comparison fails before reload because the reparsed document does not match the visible editor document. ## Exact minimized action ```json {"kind":"paste-markdown","text":"## EF15_0\n\n- Markdown item\n\n> Markdown quote"} ``` The action used a real clipboard write and `Control+V`. Screenshot: `artifacts/editfuzz/chromium-seed-15-sequence.png`. Full shrunk evidence: `artifacts/editfuzz/chromium-seed-15-minimal.json`.
Author
Owner

The browser evidence for the minimized save-state mismatch is attached below.

Chromium Notes table paste save-state mismatch

Local artifact: artifacts/editfuzz/chromium-seed-15-sequence.png.

The browser evidence for the minimized save-state mismatch is attached below. ![Chromium Notes table paste save-state mismatch](https://git.kayg.org/attachments/940e4e7e-84d4-4190-9dd4-136f57b25f5b) Local artifact: `artifacts/editfuzz/chromium-seed-15-sequence.png`.
Commenting is not possible because the repository is archived.
No labels
No milestone
No project
No assignees
1 participant
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
kayg/calternal-v0#1344
No description provided.