<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: tabwidth</title><link>https://news.ycombinator.com/user?id=tabwidth</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 23 Jul 2026 06:19:25 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=tabwidth" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by tabwidth in "Dependabot version updates introduce default package cooldown"]]></title><description><![CDATA[
<p>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.</p>
]]></description><pubDate>Tue, 14 Jul 2026 23:12:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=48914158</link><dc:creator>tabwidth</dc:creator><comments>https://news.ycombinator.com/item?id=48914158</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48914158</guid></item><item><title><![CDATA[New comment by tabwidth in "Upcoming breaking changes for npm v12"]]></title><description><![CDATA[
<p>Build tooling still runs though. Your bundler plugin or PostCSS transform gets full fs access at build time, nobody's auditing that.</p>
]]></description><pubDate>Tue, 09 Jun 2026 23:34:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=48469273</link><dc:creator>tabwidth</dc:creator><comments>https://news.ycombinator.com/item?id=48469273</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48469273</guid></item><item><title><![CDATA[New comment by tabwidth in "What color is your function? (2015)"]]></title><description><![CDATA[
<p>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.</p>
]]></description><pubDate>Tue, 26 May 2026 22:39:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=48286974</link><dc:creator>tabwidth</dc:creator><comments>https://news.ycombinator.com/item?id=48286974</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48286974</guid></item><item><title><![CDATA[New comment by tabwidth in "Stop MitM on the first SSH connection, on any VPS or cloud provider"]]></title><description><![CDATA[
<p>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.</p>
]]></description><pubDate>Sun, 10 May 2026 23:47:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=48089342</link><dc:creator>tabwidth</dc:creator><comments>https://news.ycombinator.com/item?id=48089342</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48089342</guid></item><item><title><![CDATA[New comment by tabwidth in "Over-editing refers to a model modifying code beyond what is necessary"]]></title><description><![CDATA[
<p>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.</p>
]]></description><pubDate>Wed, 22 Apr 2026 22:45:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=47870276</link><dc:creator>tabwidth</dc:creator><comments>https://news.ycombinator.com/item?id=47870276</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47870276</guid></item><item><title><![CDATA[New comment by tabwidth in "Atlassian enables default data collection to train AI"]]></title><description><![CDATA[
<p>Half the time I just grep the ticket key in Slack because it's faster than using Jira's own search.</p>
]]></description><pubDate>Mon, 20 Apr 2026 23:40:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=47842642</link><dc:creator>tabwidth</dc:creator><comments>https://news.ycombinator.com/item?id=47842642</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47842642</guid></item><item><title><![CDATA[New comment by tabwidth in "Tell HN: Docker pull fails in Spain due to football Cloudflare block"]]></title><description><![CDATA[
<p>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.</p>
]]></description><pubDate>Sun, 12 Apr 2026 22:45:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=47745325</link><dc:creator>tabwidth</dc:creator><comments>https://news.ycombinator.com/item?id=47745325</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47745325</guid></item><item><title><![CDATA[New comment by tabwidth in "Why AI Code Needs the Same Rigor We Should've Been Using All Along"]]></title><description><![CDATA[
<p>Started from a thread on "Slop is not necessarily the future" (<a href="https://news.ycombinator.com/item?id=47587953">https://news.ycombinator.com/item?id=47587953</a>). 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.<p>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.</p>
]]></description><pubDate>Thu, 02 Apr 2026 02:41:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=47609381</link><dc:creator>tabwidth</dc:creator><comments>https://news.ycombinator.com/item?id=47609381</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47609381</guid></item><item><title><![CDATA[Why AI Code Needs the Same Rigor We Should've Been Using All Along]]></title><description><![CDATA[
<p>Article URL: <a href="https://whetlan.substack.com/p/why-ai-code-needs-the-same-rigor">https://whetlan.substack.com/p/why-ai-code-needs-the-same-rigor</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47609380">https://news.ycombinator.com/item?id=47609380</a></p>
<p>Points: 2</p>
<p># Comments: 2</p>
]]></description><pubDate>Thu, 02 Apr 2026 02:41:55 +0000</pubDate><link>https://whetlan.substack.com/p/why-ai-code-needs-the-same-rigor</link><dc:creator>tabwidth</dc:creator><comments>https://news.ycombinator.com/item?id=47609380</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47609380</guid></item><item><title><![CDATA[New comment by tabwidth in "Slop is not necessarily the future"]]></title><description><![CDATA[
<p>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.</p>
]]></description><pubDate>Tue, 31 Mar 2026 23:09:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=47594680</link><dc:creator>tabwidth</dc:creator><comments>https://news.ycombinator.com/item?id=47594680</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47594680</guid></item><item><title><![CDATA[New comment by tabwidth in "Be intentional about how AI changes your codebase"]]></title><description><![CDATA[
<p>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.</p>
]]></description><pubDate>Thu, 19 Mar 2026 22:16:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=47447095</link><dc:creator>tabwidth</dc:creator><comments>https://news.ycombinator.com/item?id=47447095</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47447095</guid></item><item><title><![CDATA[New comment by tabwidth in "RX – a new random-access JSON alternative"]]></title><description><![CDATA[
<p>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.</p>
]]></description><pubDate>Thu, 19 Mar 2026 06:05:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=47435532</link><dc:creator>tabwidth</dc:creator><comments>https://news.ycombinator.com/item?id=47435532</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47435532</guid></item><item><title><![CDATA[New comment by tabwidth in "Speed at the cost of quality: Study of use of Cursor AI in open source projects (2025)"]]></title><description><![CDATA[
<p>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.</p>
]]></description><pubDate>Mon, 16 Mar 2026 22:33:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=47405915</link><dc:creator>tabwidth</dc:creator><comments>https://news.ycombinator.com/item?id=47405915</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47405915</guid></item><item><title><![CDATA[New comment by tabwidth in "The Cost of Indirection in Rust"]]></title><description><![CDATA[
<p>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.</p>
]]></description><pubDate>Thu, 12 Mar 2026 23:16:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=47358592</link><dc:creator>tabwidth</dc:creator><comments>https://news.ycombinator.com/item?id=47358592</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47358592</guid></item></channel></rss>