Import Chaos #2
Hey there,
The last two weeks were a nice little sample platter of modern software work: a TypeScript compiler rewrite announced that is finally practical to try, Go tooling that can clean up old patterns for you, LLMs confidently ignoring instructions, and me discovering that some of my own published tutorial code did not compile. Another fortnight in the office.
What caught my attention over the last ~2 weeks:
TypeScript 7.0 RC is out, and not only is it rewritten in Go, the RC looks ready to try on real projects: tsc comes from the normal typescript@rc package, VS Code can try the same native foundation through the TypeScript Native Preview extension, the new language service is LSP-based, builds can parallelize with --checkers and --builders, and --watch got rebuilt too. There are migration edges around the TypeScript 6.0 defaults and deprecated options becoming hard errors, but looks solid. I know the post is more than 2 weeks old, but I’m a very casual TypeScript user, so I only noticed it recently. After many years of writing Typescript code here and there, I’m still not entirely sure what my opinion is about the language, but I do think that the new compiler is a big deal for the ecosystem.
Failure Corner: I published code that never compiled
I wrote an article about Go closures for freeCodeCamp back in October 2025, and two of the “teaching” snippets were wrong in ways a beginner would hit immediately.
A reader messaged me, confused but very politely, said the article helped, and then pointed out that the Named Inner Functions example does not compile. He was right: in Go, the syntax I invented there simply does not exist.
He also flagged the How to Implement Interfaces Dynamically snippet. Also right. The example tried to wire an interface implementation directly from a function literal via embedding, which is not how Go interface satisfaction works. I skipped a step: you need a concrete named type with the method set.
So I shipped two broken examples in a beginner-facing article about fundamentals. Not bad. Humbly asking the editors to fix it: priceless.
The takeaway: if a tutorial contains code, every snippet must be executable and verified, not just plausible in your head. “Looks right, let me quickly send it and go back to watching cat videos” is not a quality bar. “Compiles and runs” is.
Quick Chaos
LLMs have become obnoxious lately. ChatGPT giving long-winded, incorrect answers with disclaimers and caveats. Claude giving short, incorrect answers with no disclaimers. Generating code ignoring instructions well within its context window. Time to switch to self-hosted LLMs and put the GPU of that gaming PC to good use.
Somebody needs to find a way to stop this Dependabot madness. I can’t keep up with the same PRs in every repo at work, breaking different things. Yes, they are grouped. Yes, they are usually auto-mergeable. Still a pain.
Go Fix is actually pretty cool. In Go 1.26 it is rebuilt on the Go analysis framework, respects the Go version in your
go.mod, and can modernize code with fixes likenewexpr,forvar,mapsloop, andminmax. Nice CI/local cleanup step for teams tired of leaving “use the newer API” PR comments; start withgo fix -diff ./..., apply withgo fix ./..., and run it again because one pass can expose more fixes. Really useful, especially in the age of LLMs trained on older codebases.
Blog
Your console.log Is Lying to You - Most developers use console.log() as their first debugging tool. It’s fast, familiar, and not always correct. Here are the ways the console misleads you, and why each one is a deliberate tradeoff rather than a bug.
Building
confluence2md: Added --dry-run for both full and updates crawls. It previews what would be crawled, reused, re-rendered, added, updated, or deleted without touching the output directory, metadata, attachments, index, or checkpoints. Obvious feature, really: before exporting a Confluence space, you want to know what the tool is about to do.
Things Worth Reading
While I was researching the article Your console.log Is Lying to You, I collected a few references on Heisenbugs - weird bugs that change when observed, named after Heisenberg’s uncertainty principle:
The Heisenberg Debugging Technology (GDB talk, ESC-West 1999)
A classic talk showing how debugging tools themselves can change program timing and hide concurrency issues.
Time-travel debugging in operating systems (virtual machine replay debugging)
A research approach where execution is recorded so it can be replayed deterministically, avoiding the timing changes introduced by traditional debugging.
Why logging breaks concurrency debugging (practical Java discussion)
A collection of real-world cases where adding logs or breakpoints changes thread scheduling enough to make bugs disappear.
See you next time,
Gabor

