<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: hauntsaninja</title><link>https://news.ycombinator.com/user?id=hauntsaninja</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 23 Apr 2026 06:04:19 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=hauntsaninja" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by hauntsaninja in "Show HN: Git bayesect – Bayesian Git bisection for non-deterministic bugs"]]></title><description><![CDATA[
<p>I don't yet know a better way to do this than using a threshold!<p>I think if you assume perf is normally distributed, you can still get some of the math to work out. But I will need to think more about this... if I ever choose this adventure, I'll post an update on <a href="https://github.com/hauntsaninja/git_bayesect/issues/25" rel="nofollow">https://github.com/hauntsaninja/git_bayesect/issues/25</a><p>(I really enjoy how many generalisations there are of this problem :-) )</p>
]]></description><pubDate>Thu, 02 Apr 2026 06:15:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=47610592</link><dc:creator>hauntsaninja</dc:creator><comments>https://news.ycombinator.com/item?id=47610592</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47610592</guid></item><item><title><![CDATA[New comment by hauntsaninja in "Show HN: Git bayesect – Bayesian Git bisection for non-deterministic bugs"]]></title><description><![CDATA[
<p>Note that "pick the commit with best expected information gain" in git_bayesect isn't optimal even in the no overhead regime. I provide a counterexample in the writeup, which implies ajb's heuristic is also not optimal. I don't see a tractable way to compute the optimal policy.<p>One idea: if you always spend time testing equal to your constant overhead, I think you're guaranteed to be not more than 2x off optimal.<p>(and agreed with ajb on "just use ccache" in practice!)</p>
]]></description><pubDate>Thu, 02 Apr 2026 04:25:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=47609980</link><dc:creator>hauntsaninja</dc:creator><comments>https://news.ycombinator.com/item?id=47609980</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47609980</guid></item><item><title><![CDATA[New comment by hauntsaninja in "Show HN: Git bayesect – Bayesian Git bisection for non-deterministic bugs"]]></title><description><![CDATA[
<p>Yep, you can run bayesect to an arbitrary confidence level.<p>This script in the repo <a href="https://github.com/hauntsaninja/git_bayesect/blob/main/scripts/calibration.py" rel="nofollow">https://github.com/hauntsaninja/git_bayesect/blob/main/scrip...</a> will show you that a) the confidence level is calibrated, b) how quickly you get to that confidence level (on average, p50 and p95)<p>For the failure rates you describe, calibration.py shows that you should see much higher accuracy at 300 tests</p>
]]></description><pubDate>Thu, 02 Apr 2026 04:11:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=47609902</link><dc:creator>hauntsaninja</dc:creator><comments>https://news.ycombinator.com/item?id=47609902</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47609902</guid></item><item><title><![CDATA[New comment by hauntsaninja in "Show HN: Git bayesect – Bayesian Git bisection for non-deterministic bugs"]]></title><description><![CDATA[
<p>That sounds right. `git_bayesect` currently uses `--first-parent`, so I think belden's use case should work, but I haven't tested it much on complicated git histories.</p>
]]></description><pubDate>Thu, 02 Apr 2026 03:59:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=47609830</link><dc:creator>hauntsaninja</dc:creator><comments>https://news.ycombinator.com/item?id=47609830</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47609830</guid></item><item><title><![CDATA[New comment by hauntsaninja in "Show HN: Git bayesect – Bayesian Git bisection for non-deterministic bugs"]]></title><description><![CDATA[
<p>Yes! It will show you the posterior probability as a single commit starts to become more likely. In addition, running `git bayesect status` will show you all posterior probabilities</p>
]]></description><pubDate>Thu, 02 Apr 2026 03:38:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=47609710</link><dc:creator>hauntsaninja</dc:creator><comments>https://news.ycombinator.com/item?id=47609710</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47609710</guid></item><item><title><![CDATA[New comment by hauntsaninja in "Show HN: Git bayesect – Bayesian Git bisection for non-deterministic bugs"]]></title><description><![CDATA[
<p>Yay, I had fun with it too!<p>IIUC the way you'd do that right now is just repeatedly recording the individual observations on a single commit, which effectively gives it a probability + the number of trials to do the Beta update. I don't yet have a CLI entrypoint to record a batch observation of (probability, num_trials), but it would be easy to add one<p>But ofc part of the magic is that git_bayesect's commit selection tells you how to be maximally sample efficient, so you'd only want to do a batch record if your test has high constant overhead</p>
]]></description><pubDate>Sat, 28 Mar 2026 23:44:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=47559080</link><dc:creator>hauntsaninja</dc:creator><comments>https://news.ycombinator.com/item?id=47559080</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47559080</guid></item><item><title><![CDATA[New comment by hauntsaninja in "Show HN: Git bayesect – Bayesian Git bisection for non-deterministic bugs"]]></title><description><![CDATA[
<p>git bisect works great for tracking down regressions, but relies on the bug presenting deterministically. But what if the bug is non-deterministic? Or worse, your behaviour was always non-deterministic, but something has changed, e.g. your tests went from somewhat flaky to very flaky.<p>In addition to the repo linked in the title, I also wrote up a little bit of the math behind it here: <a href="https://hauntsaninja.github.io/git_bayesect.html" rel="nofollow">https://hauntsaninja.github.io/git_bayesect.html</a></p>
]]></description><pubDate>Sat, 28 Mar 2026 20:59:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=47558065</link><dc:creator>hauntsaninja</dc:creator><comments>https://news.ycombinator.com/item?id=47558065</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47558065</guid></item><item><title><![CDATA[Show HN: Git bayesect – Bayesian Git bisection for non-deterministic bugs]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/hauntsaninja/git_bayesect">https://github.com/hauntsaninja/git_bayesect</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47557921">https://news.ycombinator.com/item?id=47557921</a></p>
<p>Points: 337</p>
<p># Comments: 43</p>
]]></description><pubDate>Sat, 28 Mar 2026 20:32:01 +0000</pubDate><link>https://github.com/hauntsaninja/git_bayesect</link><dc:creator>hauntsaninja</dc:creator><comments>https://news.ycombinator.com/item?id=47557921</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47557921</guid></item><item><title><![CDATA[New comment by hauntsaninja in "Claude Opus 4.6"]]></title><description><![CDATA[
<p>Reasoning effort is denominated in tokens, not time, so no difference beyond slowness at heavy load<p>(I work at OpenAI)</p>
]]></description><pubDate>Fri, 06 Feb 2026 08:40:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=46910479</link><dc:creator>hauntsaninja</dc:creator><comments>https://news.ycombinator.com/item?id=46910479</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46910479</guid></item><item><title><![CDATA[New comment by hauntsaninja in "How uv got so fast"]]></title><description><![CDATA[
<p>Yes, uv skipping this step is a one time significant hit to start up time. E.g. if you're building a Dockerfile I'd recommend setting `--compile-bytecode` / `UV_COMPILE_BYTECODE`</p>
]]></description><pubDate>Fri, 26 Dec 2025 21:41:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=46396591</link><dc:creator>hauntsaninja</dc:creator><comments>https://news.ycombinator.com/item?id=46396591</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46396591</guid></item><item><title><![CDATA[New comment by hauntsaninja in "Announcing the Beta release of ty"]]></title><description><![CDATA[
<p>Unknown has the exact same type system semantics as Any.<p>Unknown is a pyright specific term for inferred Any that is used as the basis for enabling additional diagnostics prohibiting gradual typing.<p>Notably, this is quite different from TypeScript’s unknown, which is type safe.</p>
]]></description><pubDate>Wed, 17 Dec 2025 05:53:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=46298706</link><dc:creator>hauntsaninja</dc:creator><comments>https://news.ycombinator.com/item?id=46298706</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46298706</guid></item><item><title><![CDATA[New comment by hauntsaninja in "Announcing the Beta release of ty"]]></title><description><![CDATA[
<p>I’ve added ecosystem regression checks to every Python type checker and typeshed via <a href="https://github.com/hauntsaninja/mypy_primer" rel="nofollow">https://github.com/hauntsaninja/mypy_primer</a>. This helped a tonne with preventing unintended or overly burdensome regressions in mypy, so glad to hear upgrades are less of an Event for you</p>
]]></description><pubDate>Wed, 17 Dec 2025 02:58:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=46297743</link><dc:creator>hauntsaninja</dc:creator><comments>https://news.ycombinator.com/item?id=46297743</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46297743</guid></item><item><title><![CDATA[New comment by hauntsaninja in "Announcing the Beta release of ty"]]></title><description><![CDATA[
<p>The conformance test suite is currently mostly focused on “what does an explicit type annotation mean”<p>A shared spec for this is important because if you write a Python library, you don’t want to have to write a different set of types for each Python type checker<p>Here are some things the spec has nothing to say about:<p>Inference<p>You don’t want to annotate every expression in your program. Type checkers have a lot of leeway here and this makes a huge difference to what it feels like to use a type checker.<p>For instance, mypy will complain about the following, but pyright will not (because it infers the types of unannotated collections as having Any):<p><pre><code>  x = []
  x.append(1)
  x[0] + "oops"
</code></pre>
The spec has nothing to say about this.<p>Diagnostics<p>The spec has very little to say about what a type checker should do with all the information it has. Should it complain about unreachable code? Should it complain if you did `if foo` instead of `if foo()` because it’s always true? The line between type checker and linter is murky. Decisions here have nothing to do with “what does this annotation mean”, so are mostly out of scope from the spec.<p>Configuration<p>This makes a huge difference when adapting huge codebases to different levels of type checking. Also the defaults really matter, which can be tricky when Python type checkers serve so many different audiences.<p>Other things the spec doesn’t say anything about: error messages quality, editor integration, speed, long tail of UX issues, implementation of new type system features, plugins, type system extensions or special casing<p>And then of course there are things we would like to spec but haven’t yet!</p>
]]></description><pubDate>Wed, 17 Dec 2025 02:42:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=46297631</link><dc:creator>hauntsaninja</dc:creator><comments>https://news.ycombinator.com/item?id=46297631</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46297631</guid></item><item><title><![CDATA[New comment by hauntsaninja in "Announcing the Beta release of ty"]]></title><description><![CDATA[
<p>Mentioned this in another comment, but the spec conformance suite is not representative of the things users care about (nor is it meant to be).<p>The spec mostly concerns itself with the semantics of annotations, not diagnostics or inference. I don't really recommend using it as the basis for choosing a type checker.<p>(I was on the Python Typing Council and helped put together the spec, the conformance test suite, etc)</p>
]]></description><pubDate>Tue, 16 Dec 2025 23:47:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=46296360</link><dc:creator>hauntsaninja</dc:creator><comments>https://news.ycombinator.com/item?id=46296360</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46296360</guid></item><item><title><![CDATA[New comment by hauntsaninja in "Announcing the Beta release of ty"]]></title><description><![CDATA[
<p>Note: while spec conformance is important, I don't recommend using it as the basis for choosing a type checker. It is not representative of the things that most users actually care about (and is not meant to be).<p>(I was on the Python Typing Council and helped put together the spec, the conformance test suite, etc)</p>
]]></description><pubDate>Tue, 16 Dec 2025 23:42:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=46296309</link><dc:creator>hauntsaninja</dc:creator><comments>https://news.ycombinator.com/item?id=46296309</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46296309</guid></item><item><title><![CDATA[New comment by hauntsaninja in "Python developers are embracing type hints"]]></title><description><![CDATA[
<p>pyright will accept this. mypy should accept this when using --allow-redefinition-new as well</p>
]]></description><pubDate>Sun, 28 Sep 2025 21:47:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=45408387</link><dc:creator>hauntsaninja</dc:creator><comments>https://news.ycombinator.com/item?id=45408387</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45408387</guid></item><item><title><![CDATA[New comment by hauntsaninja in "OpenAI Progress"]]></title><description><![CDATA[
<p>text-davinci-001 is just not GPT-3 in any real sense<p>(I work at OpenAI, I helped build this page and helped train text-davinci-001)</p>
]]></description><pubDate>Wed, 20 Aug 2025 19:57:08 +0000</pubDate><link>https://news.ycombinator.com/item?id=44965755</link><dc:creator>hauntsaninja</dc:creator><comments>https://news.ycombinator.com/item?id=44965755</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44965755</guid></item><item><title><![CDATA[New comment by hauntsaninja in "Ty: A fast Python type checker and language server"]]></title><description><![CDATA[
<p>Note that `uvx mypy` may give you inaccurate timings on macOS. The antivirus in macOS goes a little crazy the first time it executes a mypyc compiled program.</p>
]]></description><pubDate>Wed, 07 May 2025 21:45:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=43920870</link><dc:creator>hauntsaninja</dc:creator><comments>https://news.ycombinator.com/item?id=43920870</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43920870</guid></item><item><title><![CDATA[New comment by hauntsaninja in "C stdlib isn't threadsafe and even safe Rust didn't save us"]]></title><description><![CDATA[
<p>We had so many of these issues that we ended up LD_PRELOAD-ing patch getenv / setenv / putenv</p>
]]></description><pubDate>Wed, 22 Jan 2025 21:33:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=42797761</link><dc:creator>hauntsaninja</dc:creator><comments>https://news.ycombinator.com/item?id=42797761</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42797761</guid></item><item><title><![CDATA[New comment by hauntsaninja in "Uv's killer feature is making ad-hoc environments easy"]]></title><description><![CDATA[
<p>Yeah, that's not exactly the problematic situation... but the good news is I improved the Python's error message for this in 3.13. See <a href="https://docs.python.org/3/whatsnew/3.13.html#improved-error-messages" rel="nofollow">https://docs.python.org/3/whatsnew/3.13.html#improved-error-...</a></p>
]]></description><pubDate>Mon, 13 Jan 2025 04:31:41 +0000</pubDate><link>https://news.ycombinator.com/item?id=42680096</link><dc:creator>hauntsaninja</dc:creator><comments>https://news.ycombinator.com/item?id=42680096</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42680096</guid></item></channel></rss>