HNHacker News
TopNewBestAskShowJobs

tabwidth

45 karma · joined March 10, 2026

submissionscomments
tabwidth··on Antiquated HTML Snippets and Artefacts
Even the meta version is picky about where it goes. The whole declaration has to fit inside the first 1024 bytes. Easy to break with a giant comment at the top.
tabwidth··on Introducing MicroLighter
Replaced Shiki on a docs site, grammar pack was bigger than the rest of the JS. 2KB for color-only feels like a fair trade.
tabwidth··on Stacked PRs are now live on GitHub
Other side of that though, touch the bottom of a stack and every layer above it re-runs. Stack unwinding, basically.
tabwidth··on Dependabot version updates introduce default package cooldown
Most of the malicious ones just curl something in a postinstall script, scanners already catch that. The sneaky ones don't look malicious until they run, and three days may not help.
tabwidth··on Upcoming breaking changes for npm v12
Build tooling still runs though. Your bundler plugin or PostCSS transform gets full fs access at build time, nobody's auditing that.
tabwidth··on What color is your function? (2015)
It may depend on the runtime giving you a sync wait that doesn't deadlock the loop you came from. In JS you just can't. `dontawait` would need V8 to be a different VM.
tabwidth··on Stop MitM on the first SSH connection, on any VPS or cloud provider
The box itself is probably fine. It's the path between you and it. In shared infrastructure one compromised hop somewhere upstream is enough and now you're SSHing into the wrong thing without realizing it.
tabwidth··on Over-editing refers to a model modifying code beyond what is necessary
Reviewing isn't hard when the diff is what you asked for. It's when you asked for a one-line fix and get back 40 changed lines across four files. At that point you're not even reviewing your change anymore, you're auditing theirs.
tabwidth··on Atlassian enables default data collection to train AI
Half the time I just grep the ticket key in Slack because it's faster than using Jira's own search.
tabwidth··on Tell HN: Docker pull fails in Spain due to football Cloudflare block
This isn't really about centralization. ISPs are blocking at the IP level, not Docker Hub specifically. You could self-host a registry behind Cloudflare and still run into the same thing.
tabwidth··on Why AI Code Needs the Same Rigor We Should've Been Using All Along
Started from a thread on "Slop is not necessarily the future" (https://news.ycombinator.com/item?id=47587953). I commented that technical debt from sloppy code shows up too late to fix. someone replied that humans also write sloppy code. Fair enough, but that got me thinking about what's actually different when AI writes the code.

Short version: AI doesn't lower the bar for code quality. It just makes the lack of process hurt faster. Two things get amplified: the gap between what you ask for and what gets built, and not knowing which generated code is going to survive.

tabwidth··on Slop is not necessarily the future
How long does that take though? Technical debt from sloppy code doesn't show up in the product until way later. By the time users notice, the team is already three features deep and can't back out.
tabwidth··on Be intentional about how AI changes your codebase
The intention part is right but the bottleneck is review. AI is really good at turning your clean semantic functions into pragmatic ones without you noticing. You ask for a feature, it slips a side effect into something that was pure, tests still pass. By the time you catch it you've got three more PRs built on top.
tabwidth··on RX – a new random-access JSON alternative
Yeah the raw parse speed comparison is almost a red herring at this point. The real cost with JSON is when you have a 200MB manifest or build artifact and you need exactly two fields out of it. You're still loading the whole thing into memory, building the full object graph, and GC gets to clean all of it up after. That's the part where something like RX with selective access actually matters. Parse speed benchmarks don't capture that at all.
tabwidth··on Speed at the cost of quality: Study of use of Cursor AI in open source projects (2025)
The part that gets me is when it passes lint, passes tests, and the logic is technically correct, but it quietly changed how something gets called. Rename a parameter. Wrap a return value in a Promise that wasn't there before. Add some intermediate type nobody asked for. None of that shows up as a failure anywhere. You only notice three days later when some other piece of code that depended on the old shape breaks in a way that has nothing to do with the original change.
tabwidth··on The Cost of Indirection in Rust
The worst version of this I've seen is when every layer is like four lines long. You step into a function expecting some logic and it's just calling another function with slightly different args. Do that six times and you forgot what the original call was even trying to do. Naming helps in theory but in practice half those intermediate functions end up with names like processInner or handleCore because there's nothing meaningful to call them.