I burned an entire day chasing a bug. The fix, it turned out, was to refresh the page. And the bug wasn't even mine.
Let me set the scene. My extension imports links into NotebookLM — you paste a few URLs, it adds them as sources so you don't have to do it one by one. Simple. Except every time I imported 4 links, I'd get 6 sources. Import 1 link, get 2. There was always one or two extra, sitting there with a little spinner, like ghosts.
So I did what you do. I assumed I'd written a bug.
I added logging. The log said the extension clicked "add" exactly the right number of times. Four links, four clicks, four inserts. Clean. But six sources. So the log was lying, or I was misreading it, or... something.
I dug in. Maybe it's clicking the button twice. Nope — logged the click count, it was one. Maybe the page has two hidden "insert" buttons and I'm hitting both. Logged that too — one button. Maybe it's a timing thing where the dialog doesn't close and the next one stacks. Added a guard for that. Still six.
Maybe the site auto-submits when it detects a URL, AND I click insert, so it fires twice? That one actually sounded right. I rewrote the whole flow to check whether the dialog was still open before clicking. Rebuilt. Reloaded. Imported. Six sources.
I want to say I was calm about this. I was not.
At some point — pure frustration, not strategy — I closed the notebook tab and reopened it. And there they were. Exactly the right number of sources. The extras were gone.
That's when it clicked. The data was never wrong. The extension added exactly what it should have. NotebookLM's UI just wasn't clearing its little "adding…" placeholder cards fast enough, so they lingered on screen next to the real ones. Refresh, and the display catches up to reality.
The part that actually stung: to be sure, I added a single link by hand, no extension involved. Two sources. It does it to itself. I'd spent a day rewriting my code to fix a display quirk in a product I don't control and can't touch.
Here's the lesson I keep having to pay for: when the numbers don't add up, prove where the bug lives before you fix it. One five-minute manual test — add a link by hand — would have told me on minute one that this wasn't mine. Instead I trusted the assumption that I broke something, because that's the assumption I always reach for first.
I shipped one change in the end. Not a fix — there's nothing to fix. Just a line after import: "Done. Refresh to see your final source list." Honest, and it's the same step you'd need doing it by hand anyway.
Building on top of a platform you don't own means half your "bugs" are really the platform's mood that day. You learn to test the boundary first — is it me, or is it them? — before you touch a single line.
Anyone else lost a day to something that turned out not to be your code at all? I can't be the only one.
— building NotebookBloom in public, #5
Top comments (0)