All bugs
highHidden state corruption

Files with spaces in the name don't show up in listings

Only one specific file is missing, and the rest of the directory looks right.

Github CloneFound 2026-09-03Full report in Replay QA

What the recording showed

A logpoint in RepositoryTree sampled 84 renders across the recording. 'chapter-one' was present in every one, and 'my file' was missing (index −1) in every one.

Actual

The docs directory listing renders only chapter-one.md, notes/draft.md, src/index.ts, guide-old.md and README.md. No entry named "my file.md" is rendered anywhere in the listing: a Logpoint inside the RepositoryTree component (84 sampled tree renders spanning the whole recording) reads the tree's rendered shadow-DOM text at URL /tree/main/docs and returns hasChapter=true but idxMyFile=-1 — the string "my file" never appears in any sampled render, including after the user scrolls to look for it below the fold.

Expected

At /maple/reading-room/tree/main/docs the listing should show every file in the docs directory, including both "chapter-one.md" and the file named exactly "my file.md", as the journey scenario requires ("verify chapter-one.md and the file named exactly my file.md are both visible and the breadcrumb path is docs"). A file whose name contains a space should render in the directory listing like any other entry.

Session replay

Chronology of events

1
The app at 0:13.70:13.7
0:13.7

The user activates the 'docs' directory link in the reading-room file tree with a real pointer click; the app navigates from /maple/reading-room/tree/main to /maple/reading-room/tree/main/docs (confirmed by the URL change and the breadcrumb 'reading-room / docs').

2 evidence probes (UserInteractions, GetPointComponent)
UserInteractions {"mode":"interactions","type":"click"}
→ # User Interactions

**Filter:** click only
**Showing 1–3 of 3 interactions**

| # | Time | Type | Detail | Point |
|---|------|------|--------|-------|
| 0 | 18848ms | click | Click at (640, 429) | Point:1 |
| 1 | 32196ms | click | Click at (593, 488) | Point:2 |
| 2 | 82528ms | click | Click at (769, 360) | Point:3 |

## Next Steps

- Use DescribePoint with a point reference to inspect the code at a specific interaction
- Use Evaluate with a point reference for ad-hoc value inspection at that moment
- Use `type: 'click'` or `type: 'keypress'` to filter by interaction type
GetPointComponent {"point":"Point:66"}
→ ⚠️ **React is present in this recording, but could not be analyzed** — library sources could not be located.

No component could be resolved for this point. Any conclusion about this app's React behavior would be unsupported. Treat the recording as unmeasured — this is **not** a clean bill of health.

Evidence React is present: runtime.
2
The app at 0:14.50:14.5
0:14.5

The docs directory view renders (live status, breadcrumb 'reading-room / docs') but the listing shows only five entries — chapter-one.md, notes/draft.md, src/index.ts, guide-old.md, README.md. No 'my file.md' entry is rendered anywhere in the listing; a Logpoint inside the RepositoryTree component at this state reads the tree's rendered content and finds 'chapter-one' present but the string 'my file' absent (index -1).

1 evidence probe (Logpoint)
Logpoint {"line":71,"path":"http://127.0.0.1:61787/assets/RepositoryTree-BIhBVSqC.js","beginPoint":"Point:65","expression":"(() => { function collect(root, out) { root.querySelectorAll('*').forEach(el => { if (el.shadowRoot) collect(el.shadowRoot, out); }); const text = root.textContent || ''; if (text) out.push(text); return out; } const all = collect(document, []); const joined = all.join('\\n'); return { url: location.href, hasMyFileAny: joined.includes('my file'), idxMyFile: joined.indexOf('my file'), hasChapter: joined.includes('chapter-one'), hasDocs: joined.includes('docs') }; })()"}
→ Found 84 total hits at http://127.0.0.1:61787/assets/RepositoryTree-BIhBVSqC.js:71 (showing first 20)

Hit 1 at point Point:65 @ 82474.83ms:
  Expression: (() => { function collect(root, out) { root.querySelectorAll('*').forEach(el => { if (el.shadowRoot) collect(el.shadowRoot, out); }); const text = root.textContent || ''; if (text) out.push(text); return out; } const all = collect(document, []); const joined = all.join('\n'); return { url: location.href, hasMyFileAny: joined.includes('my file'), idxMyFile: joined.indexOf('my file'), hasChapter: joined.includes('chapter-one'), hasDocs: joined.includes('docs') }; })()
  Result: {
  "url": "http://127.0.0.1:61787/maple/reading-room/tree/main",
  "hasMyFileAny": false,
  "idxMyFile": -1,
  "hasChapter": true,
  "hasDocs": true
}

Hit 2 at point Point:66 @ 82504.19ms:
  Expression: (() => { function collect(root, out) { root.querySelectorAll('*').forEach(el => { if (el.shadowRoot) collect(el.shadowRoot, out); }); const text = root.textContent || ''; if (text) out.push(text); return out; } const all = collect(document, []); const joined = all.join('\n'); return { url: location.href, hasMyFileAny: joined.includes('my file'), idxMyFile: joined.indexOf('my file'), hasChapter: joined.includes('chapter-one'), hasDocs: joined.includes('docs') }; })()
  Result: {
  "url": "http://127.0.0.1:61787/maple/reading-room/tree/main/docs",
  "hasMyFileAny": false,
  "idxMyFile": -1,
  "hasChapter": true,
  "hasDocs": true
}

Hit 3 at point Point…

Steps to reproduce

1

Exercise the following existing saved scenario in the app and confirm it works:

2

Use the Replay QA tunnel only, not a local browser URL. Sign in with the available fixture identity if prompted. Open /maple/reading-room/tree/main, verify sorted root rows, live status, reducer version 2, checkpoint, and digest. Activate the docs directory link with a real pointer or keyboard action; verify chapter-one.md and the file named exactly my file.md are both visible and the breadcrumb path is docs. Return to root using the visible breadcrumb. Observe live guide-old.md to guide.md rename and obsolete.txt delete then recreate without a document navigation; verify stale names disappear and the digest/checkpoint advance. Activate docs again, leaving the route at /tree/main/docs, then observe the populated docs directory rename to archive-docs; verify the nested view becomes empty while the old docs path is not repopulated. Check final digest/checkpoint against the visible live state, no uncaught console errors, repository /api/repos/.../events projection requests only, no /streams requests or Electric credentials, and no full-page reload for the live mutation sequence. This is a focused regression journey, not an exploration.

3

Additional checks:

4

Use the Replay QA tunnel only, not a local browser URL. Sign in with the available fixture identity if prompted. Open /maple/reading-room/tree/main, verify sorted root rows, live status, reducer version 2, checkpoint, and digest. Activate the docs directory link with a real pointer or keyboard action; verify chapter-one.md and the file named exactly my file.md are both visible and the breadcrumb path is docs. Return to root using the visible breadcrumb. Observe live guide-old.md to guide.md rename and obsolete.txt delete then recreate without a document navigation; verify stale names disappear and the digest/checkpoint advance. Activate docs again, leaving the route at /tree/main/docs, then observe the populated docs directory rename to archive-docs; verify the nested view becomes empty while the old docs path is not repopulated. Check final digest/checkpoint against the visible live state, no uncaught console errors, repository /api/repos/.../events projection requests only, no /streams requests or Electric credentials, and no full-page reload for the live mutation sequence. This is a focused regression journey, not an exploration.

5

If the app cannot perform this or behaves incorrectly, report FAIL describing the defect; otherwise report DONE.

Root cause

The RepositoryTree file-tree component (assets/RepositoryTree-BIhBVSqC.js, function Uc) never renders a row for the file named with a space ("my file.md") in the docs directory view: a Logpoint evaluation anchored inside the component (Point:80, ~90066ms, URL http://127.0.0.1:61787/maple/reading-room/tree/main/docs) reads the component's rendered shadow-DOM text and returns hasChapter=true while idxMyFile=-1 — the string "my file" appears in none of the 84 sampled tree renders across the recording, so the docs listing renders only chapter-one.md, notes/draft.md, src/index.ts, guide-old.md and README.md and omits the required "my file.md" entry the journey fixture seeds. The filename containing a space is dropped from the listing the tree component renders.

1 evidence probe (Logpoint)
Logpoint {"line":71,"path":"http://127.0.0.1:61787/assets/RepositoryTree-BIhBVSqC.js","beginPoint":"Point:65","expression":"(() => { function collect(root, out) { root.querySelectorAll('*').forEach(el => { if (el.shadowRoot) collect(el.shadowRoot, out); }); const text = root.textContent || ''; if (text) out.push(text); return out; } const all = collect(document, []); const joined = all.join('\\n'); return { url: location.href, hasMyFileAny: joined.includes('my file'), idxMyFile: joined.indexOf('my file'), hasChapter: joined.includes('chapter-one'), hasDocs: joined.includes('docs') }; })()"}
→ Found 84 total hits at http://127.0.0.1:61787/assets/RepositoryTree-BIhBVSqC.js:71 (showing first 20)

Hit 1 at point Point:65 @ 82474.83ms:
  Expression: (() => { function collect(root, out) { root.querySelectorAll('*').forEach(el => { if (el.shadowRoot) collect(el.shadowRoot, out); }); const text = root.textContent || ''; if (text) out.push(text); return out; } const all = collect(document, []); const joined = all.join('\n'); return { url: location.href, hasMyFileAny: joined.includes('my file'), idxMyFile: joined.indexOf('my file'), hasChapter: joined.includes('chapter-one'), hasDocs: joined.includes('docs') }; })()
  Result: {
  "url": "http://127.0.0.1:61787/maple/reading-room/tree/main",
  "hasMyFileAny": false,
  "idxMyFile": -1,
  "hasChapter": true,
  "hasDocs": true
}

Hit 2 at point Point:66 @ 82504.19ms:
  Expression: (() => { function collect(root, out) { root.querySelectorAll('*').forEach(el => { if (el.shadowRoot) collect(el.shadowRoot, out); }); const text = root.textContent || ''; if (text) out.push(text); return out; } const all = collect(document, []); const joined = all.join('\n'); return { url: location.href, hasMyFileAny: joined.includes('my file'), idxMyFile: joined.indexOf('my file'), hasChapter: joined.includes('chapter-one'), hasDocs: joined.includes('docs') }; })()
  Result: {
  "url": "http://127.0.0.1:61787/maple/reading-room/tree/main/docs",
  "hasMyFileAny": false,
  "idxMyFile": -1,
  "hasChapter": true,
  "hasDocs": true
}

Hit 3 at point Point…

Root cause → actual behavior

1

Screenshot at 1:22.5

The user clicks the 'docs' directory entry in the file tree; the app navigates from /maple/reading-room/tree/main to /maple/reading-room/tree/main/docs (Logpoint hit at Point:66, ~82504ms, shows location.href change to /tree/main/docs and the breadcrumb renders 'reading-room / docs').

1 evidence probe (UserInteractions)
UserInteractions {"mode":"interactions","type":"click"}
→ # User Interactions

**Filter:** click only
**Showing 1–3 of 3 interactions**

| # | Time | Type | Detail | Point |
|---|------|------|--------|-------|
| 0 | 18848ms | click | Click at (640, 429) | Point:1 |
| 1 | 32196ms | click | Click at (593, 488) | Point:2 |
| 2 | 82528ms | click | Click at (769, 360) | Point:3 |

## Next Steps

- Use DescribePoint with a point reference to inspect the code at a specific interaction
- Use Evaluate with a point reference for ad-hoc value inspection at that moment
- Use `type: 'click'` or `type: 'keypress'` to filter by interaction type
2

Screenshot at 1:30.0

At the docs route the RepositoryTree component renders the listing without any 'my file' text: Logpoint hits at Point:80 (~90066ms) show the rendered shadow-DOM content contains 'chapter-one' (hasChapter=true) while 'my file' is absent (idxMyFile=-1), so the listing shows only five entries and the required file is invisible — the journey's docs-view verification fails.

1 evidence probe (Logpoint)
Logpoint {"line":71,"path":"http://127.0.0.1:61787/assets/RepositoryTree-BIhBVSqC.js","beginPoint":"Point:65","expression":"(() => { function collect(root, out) { root.querySelectorAll('*').forEach(el => { if (el.shadowRoot) collect(el.shadowRoot, out); }); const text = root.textContent || ''; if (text) out.push(text); return out; } const all = collect(document, []); const joined = all.join('\\n'); return { url: location.href, hasMyFileAny: joined.includes('my file'), idxMyFile: joined.indexOf('my file'), hasChapter: joined.includes('chapter-one'), hasDocs: joined.includes('docs') }; })()"}
→ Found 84 total hits at http://127.0.0.1:61787/assets/RepositoryTree-BIhBVSqC.js:71 (showing first 20)

Hit 1 at point Point:65 @ 82474.83ms:
  Expression: (() => { function collect(root, out) { root.querySelectorAll('*').forEach(el => { if (el.shadowRoot) collect(el.shadowRoot, out); }); const text = root.textContent || ''; if (text) out.push(text); return out; } const all = collect(document, []); const joined = all.join('\n'); return { url: location.href, hasMyFileAny: joined.includes('my file'), idxMyFile: joined.indexOf('my file'), hasChapter: joined.includes('chapter-one'), hasDocs: joined.includes('docs') }; })()
  Result: {
  "url": "http://127.0.0.1:61787/maple/reading-room/tree/main",
  "hasMyFileAny": false,
  "idxMyFile": -1,
  "hasChapter": true,
  "hasDocs": true
}

Hit 2 at point Point:66 @ 82504.19ms:
  Expression: (() => { function collect(root, out) { root.querySelectorAll('*').forEach(el => { if (el.shadowRoot) collect(el.shadowRoot, out); }); const text = root.textContent || ''; if (text) out.push(text); return out; } const all = collect(document, []); const joined = all.join('\n'); return { url: location.href, hasMyFileAny: joined.includes('my file'), idxMyFile: joined.indexOf('my file'), hasChapter: joined.includes('chapter-one'), hasDocs: joined.includes('docs') }; })()
  Result: {
  "url": "http://127.0.0.1:61787/maple/reading-room/tree/main/docs",
  "hasMyFileAny": false,
  "idxMyFile": -1,
  "hasChapter": true,
  "hasDocs": true
}

Hit 3 at point Point…

Is your app hiding bugs like this?

Replay QA explores every build, records what it finds, and writes the root cause.