Delete removes a different note than the one you clicked
Something does get deleted, just not visibly. The targeted note stays put, and the deleted one was off-screen.
collaborative-ai-editorFound 2026-09-08Full report in Replay QA
What the recording showed
The store's deleteNote ran with id 3111cdbd. The clicked row was 845761ce, which stayed in the list with aria-selected="true".
Actual
The note "Sample content for the new note." (id 845761ce) remains in the sidebar (still marked aria-selected="true") and its content stays in the editor. The store's deleteNote ran and removed a DIFFERENT note (id 3111cdbd, not visible near the top or bottom of the list), leaving the targeted note untouched.
Expected
Clicking the Delete control on a note row should remove that specific note from the sidebar list; since it was the selected note, the editor should transition to the empty "No note selected" state.
Session replay
Chronology of events

0:16.8After creating a new note and typing 'Sample content for the new note.' into it, the journey clicked that note's Delete control in the notes sidebar (Playwright step 273: locator.click on the button matching 'aside > div:nth-of-type(2) > div:nth-of-type(45) > div:nth-of-type(1) > button' at coordinates (243.25, 544.25), step time 163240ms).
2 evidence probes (PlaywrightSteps, InspectElement)
PlaywrightSteps {"mode":"steps","offset":270,"testIndex":0}
→ # Steps: QA Run: run-mtsblv0h-q7d7 ❌
**494 steps** (showing 271-295 of 494)
271. [159166ms, duration: 42ms] page.screenshot
params: {"type":"jpeg","quality":60,"timeout":15000}
at JourneyThumbnailCapture.capture scripts/journey/run-script.bundle.cjs:47191:30
at Timeout._onTimeout scripts/journey/run-script.bundle.cjs:47179:47
272. [162166ms, duration: 44ms] page.screenshot
params: {"type":"jpeg","quality":60,"timeout":15000}
at JourneyThumbnailCapture.capture scripts/journey/run-script.bundle.cjs:47191:30
at Timeout._onTimeout scripts/journey/run-script.bundle.cjs:47179:47
273. [162198ms, duration: 9ms] locator.count
params: {"selector":"body:nth-of-type(1) > main:nth-of-type(1) > aside:nth-of-type(1) > div:nth-of-type(2) > div:nth-of-type(45) > div:nth-of-type(1) > button:nth-of-type(1) >> nth=0"}
at waitForRecordedTarget scripts/journey/run-script.bundle.cjs:4608:17
at executeAction scripts/journey/run-script.bundle.cjs:5830:15
at _JourneySteps.execute scripts/journey/run-script.bundle.cjs:6476:12
at scripts/journey/run-script.bundle.cjs:50548:70
at traceJourneyExecution scripts/journey/run-script.bundle.cjs:47718:18
274. [162207ms, duration: 4ms] locator.count
at containerClickTarget scripts/journey/run-script.bundle.cjs:5711:69
at executeAction scripts/journey/run-script.bundle.cjs:5832:21
275. [162211ms, duration: 38ms] Evaluate
at containerTextInput scripts/journey/run-script.bundle.cjs:5699:32
…InspectElement {"point":"Point:7","element":".note-item__delete"}
→ Element:12 is `<button class="note-item__delete" data-rac="" type="button" tabindex="0" data-react-aria-pressable="true" aria-label="Delete Sample content for the new note." id="react-aria9339112786-:r7k:"></button>`.
Element:12 is rendered by React component Rt at Point:68:
Relevant code: https://collaborative-ai-editor.brett-lamy.workers.dev/assets/Button-BWCcBaVH.js line 293 column 30
No elements are obstructing the center point of this element.
Element:12 has 24px width and 24px height.
The width is set by these rules: 24px
The height is set by these rules: 24px
Margin: top 0px right 0px bottom 0px left 0px.
Padding: top 1px right 6px bottom 1px left 6px.
Distances to its parent element:
- Top distance: 1601.75px
- Right distance: 255.25px
- Bottom overflows parent by 1577.75px
- Left overflows parent by 231.25px
### Parent Element:13
Element:13 is `<div role="gridcell" aria-colindex="1" style="display: contents;"></div>`.
Element:13 is rendered by React component Rt at Point:69:
Relevant code: https://collaborative-ai-editor.brett-lamy.workers.dev/assets/Button-BWCcBaVH.js line 293 column 30
Element:13 has 0px width and 0px height.
Margin: top 0px right 0px bottom 0px left 0px.
Padding: top 0px right 0px bottom 0px left 0px.
Distances to its parent element:
- Top overflows parent by 1613.00px
- Right overflows parent by 264.00px
- Bottom distance: 1566.50px
- Left distance: 7.00px
### Parent Element:14
Element:14 is `<div class="note-item" data-rac="" tabindex=…
0:17.0The note 'Sample content for the new note.' is still listed in the sidebar (row data-key='845761ce', aria-selected='true') and the editor pane header and body still display 'Sample content for the new note.' — the targeted note was not removed and the editor did not switch to the 'No note selected' empty state.
1 evidence probe (Evaluate)
Evaluate {"point":"Point:7","scope":"global","expression":"(() => { const rows = Array.from(document.querySelectorAll('.note-item')).map(r => ({ key: r.dataset.key, label: r.getAttribute('aria-label'), sel: r.getAttribute('aria-selected') })); return { url: location.href, total: rows.length, has3111cdbd: rows.some(r => r.key === '3111cdbd'), first4: rows.slice(0, 4) }; })()"}
→ {
"url": "https://collaborative-ai-editor.brett-lamy.workers.dev/w/apple/845761ce",
"total": 48,
"has3111cdbd": true,
"first4": [
{
"key": "845761ce",
"label": "Sample content for the new note.",
"sel": "true"
},
{
"key": "7b24f6b3",
"label": "Poem In the quiet margin of the day, a small wind folds the light away. Dust turns gold, then disappears, soft as memory",
"sel": "false"
},
{
"key": "24c2354c",
"label": "New Note",
"sel": "false"
},
{
"key": "0b0ba0c5",
"label": "New Note",
"sel": "false"
}
]
}
0:20.4The stale note persists to the end of the recording (over 5 minutes after the Delete click): the note item is still present in the sidebar (its text node sits at y = -1606 px in a 720-px viewport, scrolled out of view), and the editor pane still displays the note's title and content with no error or empty state.
1 evidence probe (Evaluate)
Evaluate {"point":"Point:7","scope":"global","expression":"(() => { const aside = document.querySelector('aside'); const nodes = Array.from(aside ? aside.querySelectorAll('*') : []).filter(e => e.children.length === 0 && (e.textContent || '').trim() === 'Sample content for the new note.'); const el = nodes[0]; if (!el) return { found: false }; const r = el.getBoundingClientRect(); return { found: true, rect: { x: r.x, y: r.y, w: r.width, h: r.height }, innerWidth: innerWidth, innerHeight: innerHeight }; })()"}
→ {
"found": true,
"rect": {
"x": 36.75,
"y": -1606,
"w": 187.5,
"h": 17.0625
},
"innerWidth": 1280,
"innerHeight": 720
}Steps to reproduce
Navigate to the collaborative AI editor app
Fill in the display name field with a test name
Open the Apple workspace
Click the New note button to create a new note
Type sample content into the editor surface of the newly created note
Delete the currently selected note by clicking its delete button in the toolbar
Root cause
The sidebar note-item Delete control's onPress handler passes a stale/mismatched note id to the store's deleteNote action: the Logpoint instrumentation on the deleteNote body captured the call with deleteId '3111cdbd' while the button clicked was the one rendered for note '845761ce' (title 'Sample content for the new note.'). The loop inside deleteNote matched and removed the entry with id '3111cdbd' (t.notes.delete(f, 1) executed with notesLen 48), so a different note was deleted while the targeted note stayed in the list and remained selected in the editor. The DOM confirms the outcome: the row with data-key='845761ce' / aria-label 'Sample content for the new note.' is still present with aria-selected='true', and no row with key '3111cdbd' exists anywhere in the list.
4 evidence probes (Logpoint, InspectElement, SearchSources)
Logpoint {"line":5142,"path":"https://collaborative-ai-editor.brett-lamy.workers.dev/assets/_workspace-Jnfl8jZH.js","expression":"JSON.stringify({deleteId: d, notesLen: a.length})"}
→ Found 1 total hit at https://collaborative-ai-editor.brett-lamy.workers.dev/assets/_workspace-Jnfl8jZH.js:5142
Hit 1 at point Point:71 @ 163302.36ms:
Expression: JSON.stringify({deleteId: d, notesLen: a.length})
Result: "{\"deleteId\":\"3111cdbd\",\"notesLen\":48}"
Logpoint {"line":5141,"path":"https://collaborative-ai-editor.brett-lamy.workers.dev/assets/_workspace-Jnfl8jZH.js","expression":"JSON.stringify({id: a[f].get(\"id\"), title: a[f].get(\"title\"), updatedAt: a[f].get(\"updatedAt\")})"}
→ Found 44 total hits at https://collaborative-ai-editor.brett-lamy.workers.dev/assets/_workspace-Jnfl8jZH.js:5141 (showing first 20)
Hit 1 at point Point:73 @ 163302.34ms:
Expression: JSON.stringify({id: a[f].get("id"), title: a[f].get("title"), updatedAt: a[f].get("updatedAt")})
Result: "{\"id\":\"845761ce\",\"title\":\"Sample content for the new note.\",\"updatedAt\":1788851218535}"
Hit 2 at point Point:74 @ 163302.34ms:
Expression: JSON.stringify({id: a[f].get("id"), title: a[f].get("title"), updatedAt: a[f].get("updatedAt")})
Result: "{\"id\":\"d8b10b2c\",\"title\":\"\",\"updatedAt\":1788252120740}"
Hit 3 at point Point:75 @ 163302.35ms:
Expression: JSON.stringify({id: a[f].get("id"), title: a[f].get("title"), updatedAt: a[f].get("updatedAt")})
Result: "{\"id\":\"0b0ba0c5\",\"title\":\"\",\"updatedAt\":1788252210471}"
Hit 4 at point Point:76 @ 163302.35ms:
Expression: JSON.stringify({id: a[f].get("id"), title: a[f].get("title"), updatedAt: a[f].get("updatedAt")})
Result: "{\"id\":\"da20d313\",\"title\":\"\",\"updatedAt\":1788250553411}"
Hit 5 at point Point:77 @ 163302.35ms:
Expression: JSON.stringify({id: a[f].get("id"), title: a[f].get("title"), updatedAt: a[f].get("updatedAt")})
Result: "{\"id\":\"c8b602f9\",\"title\":\"\",\"updatedAt\":1788250830125}"
Hit 6 at point Point:78 @ 163302.35ms:
Expression: JSON.stringify({id: a[f].get("id"), title: a[f].get("title"), updatedAt: a[f].get("updatedAt")})
Result: "{\"id\":\"4fd68ab7\",\"title\":\"\…InspectElement {"point":"Point:7","element":".note-item__delete"}
→ Element:12 is `<button class="note-item__delete" data-rac="" type="button" tabindex="0" data-react-aria-pressable="true" aria-label="Delete Sample content for the new note." id="react-aria9339112786-:r7k:"></button>`.
Element:12 is rendered by React component Rt at Point:68:
Relevant code: https://collaborative-ai-editor.brett-lamy.workers.dev/assets/Button-BWCcBaVH.js line 293 column 30
No elements are obstructing the center point of this element.
Element:12 has 24px width and 24px height.
The width is set by these rules: 24px
The height is set by these rules: 24px
Margin: top 0px right 0px bottom 0px left 0px.
Padding: top 1px right 6px bottom 1px left 6px.
Distances to its parent element:
- Top distance: 1601.75px
- Right distance: 255.25px
- Bottom overflows parent by 1577.75px
- Left overflows parent by 231.25px
### Parent Element:13
Element:13 is `<div role="gridcell" aria-colindex="1" style="display: contents;"></div>`.
Element:13 is rendered by React component Rt at Point:69:
Relevant code: https://collaborative-ai-editor.brett-lamy.workers.dev/assets/Button-BWCcBaVH.js line 293 column 30
Element:13 has 0px width and 0px height.
Margin: top 0px right 0px bottom 0px left 0px.
Padding: top 0px right 0px bottom 0px left 0px.
Distances to its parent element:
- Top overflows parent by 1613.00px
- Right overflows parent by 264.00px
- Bottom distance: 1566.50px
- Left distance: 7.00px
### Parent Element:14
Element:14 is `<div class="note-item" data-rac="" tabindex=…SearchSources {"pattern":"onPress: \\(\\) => d\\(a.id\\)"}
→ ### https://collaborative-ai-editor.brett-lamy.workers.dev/assets/_workspace-Jnfl8jZH.js
hits | L | code
------|------|------
200 | 5018 | a => T.jsxs(
200 | 5053 | "aria-label": `Delete ${Oe(a.title)}`,
1 | *5054 | onPress: () => d(a.id),
| 5055 | slot: null,Root cause → actual behavior
At 163240ms the Playwright runner clicked the button matching selector 'aside > div:nth-of-type(2) > div:nth-of-type(45) > div:nth-of-type(1) > button' at coordinates (243.25, 544.25), inside the notes sidebar.
1 evidence probe (PlaywrightSteps)
PlaywrightSteps {"mode":"steps","offset":270,"testIndex":0}
→ # Steps: QA Run: run-mtsblv0h-q7d7 ❌
**494 steps** (showing 271-295 of 494)
271. [159166ms, duration: 42ms] page.screenshot
params: {"type":"jpeg","quality":60,"timeout":15000}
at JourneyThumbnailCapture.capture scripts/journey/run-script.bundle.cjs:47191:30
at Timeout._onTimeout scripts/journey/run-script.bundle.cjs:47179:47
272. [162166ms, duration: 44ms] page.screenshot
params: {"type":"jpeg","quality":60,"timeout":15000}
at JourneyThumbnailCapture.capture scripts/journey/run-script.bundle.cjs:47191:30
at Timeout._onTimeout scripts/journey/run-script.bundle.cjs:47179:47
273. [162198ms, duration: 9ms] locator.count
params: {"selector":"body:nth-of-type(1) > main:nth-of-type(1) > aside:nth-of-type(1) > div:nth-of-type(2) > div:nth-of-type(45) > div:nth-of-type(1) > button:nth-of-type(1) >> nth=0"}
at waitForRecordedTarget scripts/journey/run-script.bundle.cjs:4608:17
at executeAction scripts/journey/run-script.bundle.cjs:5830:15
at _JourneySteps.execute scripts/journey/run-script.bundle.cjs:6476:12
at scripts/journey/run-script.bundle.cjs:50548:70
at traceJourneyExecution scripts/journey/run-script.bundle.cjs:47718:18
274. [162207ms, duration: 4ms] locator.count
at containerClickTarget scripts/journey/run-script.bundle.cjs:5711:69
at executeAction scripts/journey/run-script.bundle.cjs:5832:21
275. [162211ms, duration: 38ms] Evaluate
at containerTextInput scripts/journey/run-script.bundle.cjs:5699:32
…The element at those coordinates is BUTTON.note-item__delete (aria-label 'Delete New Note'), nested inside a .note-item row inside .notes-list, confirming a sidebar delete control was clicked.
1 evidence probe (Evaluate)
Evaluate {"point":"Point:7","scope":"global","expression":"(() => { const el = document.elementFromPoint(243, 544); if (!el) return { found: false }; let chain = []; let cur = el; for (let i = 0; i < 6 && cur; i++) { chain.push({ tag: cur.tagName, cls: (cur.className || '').toString().slice(0, 80), role: cur.getAttribute ? cur.getAttribute('role') : null, ariaLabel: cur.getAttribute ? cur.getAttribute('aria-label') : null }); cur = cur.parentElement; } return { found: true, chain }; })()"}
→ {
"found": true,
"chain": [
{
"tag": "svg",
"cls": "[object SVGAnimatedString]",
"role": null,
"ariaLabel": null
},
{
"tag": "BUTTON",
"cls": "note-item__delete",
"role": null,
"ariaLabel": "Delete New Note"
},
{
"tag": "DIV",
"cls": "",
"role": "gridcell",
"ariaLabel": null
},
{
"tag": "DIV",
"cls": "note-item",
"role": "row",
"ariaLabel": "New Note"
},
{
"tag": "DIV",
"cls": "notes-list",
"role": "grid",
"ariaLabel": "Notes in apple"
},
{
"tag": "ASIDE",
"cls": "notes-sidebar",
"role": null,
"ariaLabel": null
}
]
}The store's deleteNote action executed at 163302ms with id '3111cdbd' over the 48-note array; the first array entry has id '845761ce' (title 'Sample content for the new note.'), so the removed entry is not the note whose delete button was clicked.
2 evidence probes (Logpoint)
Logpoint {"line":5142,"path":"https://collaborative-ai-editor.brett-lamy.workers.dev/assets/_workspace-Jnfl8jZH.js","expression":"JSON.stringify({deleteId: d, notesLen: a.length})"}
→ Found 1 total hit at https://collaborative-ai-editor.brett-lamy.workers.dev/assets/_workspace-Jnfl8jZH.js:5142
Hit 1 at point Point:71 @ 163302.36ms:
Expression: JSON.stringify({deleteId: d, notesLen: a.length})
Result: "{\"deleteId\":\"3111cdbd\",\"notesLen\":48}"
Logpoint {"line":5141,"path":"https://collaborative-ai-editor.brett-lamy.workers.dev/assets/_workspace-Jnfl8jZH.js","expression":"JSON.stringify({id: a[f].get(\"id\"), title: a[f].get(\"title\")})"}
→ Found 44 total hits at https://collaborative-ai-editor.brett-lamy.workers.dev/assets/_workspace-Jnfl8jZH.js:5141 (showing first 20)
Hit 1 at point Point:73 @ 163302.34ms:
Expression: JSON.stringify({id: a[f].get("id"), title: a[f].get("title")})
Result: "{\"id\":\"845761ce\",\"title\":\"Sample content for the new note.\"}"
Hit 2 at point Point:74 @ 163302.34ms:
Expression: JSON.stringify({id: a[f].get("id"), title: a[f].get("title")})
Result: "{\"id\":\"d8b10b2c\",\"title\":\"\"}"
Hit 3 at point Point:75 @ 163302.35ms:
Expression: JSON.stringify({id: a[f].get("id"), title: a[f].get("title")})
Result: "{\"id\":\"0b0ba0c5\",\"title\":\"\"}"
Hit 4 at point Point:76 @ 163302.35ms:
Expression: JSON.stringify({id: a[f].get("id"), title: a[f].get("title")})
Result: "{\"id\":\"da20d313\",\"title\":\"\"}"
Hit 5 at point Point:77 @ 163302.35ms:
Expression: JSON.stringify({id: a[f].get("id"), title: a[f].get("title")})
Result: "{\"id\":\"c8b602f9\",\"title\":\"\"}"
Hit 6 at point Point:78 @ 163302.35ms:
Expression: JSON.stringify({id: a[f].get("id"), title: a[f].get("title")})
Result: "{\"id\":\"4fd68ab7\",\"title\":\"\"}"
Hit 7 at point Point:79 @ 163302.35ms:
Expression: JSON.stringify({id: a[f].get("id"), title: a[f].get("title")})
Result: "{\"id\":\"c980f5a1\",\"title\":\"\"}"
Hit 8 at point Point:80 @ 163302.35ms:
Expression: JSON.stringify({id: a[f].get("id"), title: a[f].get("title")})
Result: "{\"id\":\"4c35e1b5\",\"title\":\"\"}"
Hit 9 a…After the click, the sidebar still contains the row data-key='845761ce' / aria-label 'Sample content for the new note.' with aria-selected='true', the editor still shows that title and content, and no row with key '3111cdbd' exists anywhere in the list, proving the wrong note was deleted.
1 evidence probe (Evaluate)
Evaluate {"point":"Point:7","scope":"global","expression":"(() => { const rows = Array.from(document.querySelectorAll('.note-item')).map(r => ({ key: r.dataset.key, label: r.getAttribute('aria-label'), sel: r.getAttribute('aria-selected') })); return { url: location.href, total: rows.length, has3111cdbd: rows.some(r => r.key === '3111cdbd'), first4: rows.slice(0, 4) }; })()"}
→ {
"url": "https://collaborative-ai-editor.brett-lamy.workers.dev/w/apple/845761ce",
"total": 48,
"has3111cdbd": true,
"first4": [
{
"key": "845761ce",
"label": "Sample content for the new note.",
"sel": "true"
},
{
"key": "7b24f6b3",
"label": "Poem In the quiet margin of the day, a small wind folds the light away. Dust turns gold, then disappears, soft as memory",
"sel": "false"
},
{
"key": "24c2354c",
"label": "New Note",
"sel": "false"
},
{
"key": "0b0ba0c5",
"label": "New Note",
"sel": "false"
}
]
}The stale state persists to the end of the recording: the targeted note remains in the sidebar (its text node sits at y = -1606 px in a 720 px viewport, scrolled out of view) and the editor still renders its title and content.
1 evidence probe (Evaluate)
Evaluate {"point":"Point:7","scope":"global","expression":"(() => { const aside = document.querySelector('aside'); const nodes = Array.from(aside ? aside.querySelectorAll('*') : []).filter(e => e.children.length === 0 && (e.textContent || '').trim() === 'Sample content for the new note.'); const el = nodes[0]; if (!el) return { found: false }; const r = el.getBoundingClientRect(); return { found: true, rect: { x: r.x, y: r.y, w: r.width, h: r.height }, innerWidth: innerWidth, innerHeight: innerHeight }; })()"}
→ {
"found": true,
"rect": {
"x": 36.75,
"y": -1606,
"w": 187.5,
"h": 17.0625
},
"innerWidth": 1280,
"innerHeight": 720
}Is your app hiding bugs like this?
Replay QA explores every build, records what it finds, and writes the root cause.


