<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: tomasol</title><link>https://news.ycombinator.com/user?id=tomasol</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Wed, 22 Apr 2026 13:30:39 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=tomasol" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by tomasol in "OpenClaw isn't fooling me. I remember MS-DOS"]]></title><description><![CDATA[
<p>I believe the codegen must be separated from the runtime. Every time you ask AI for a new task, it must be deployed as a separate app with the least amount of privileges possible, potentially with manual approvals as the app is executing. So essentially you need a workflow engine.</p>
]]></description><pubDate>Mon, 20 Apr 2026 10:40:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=47832457</link><dc:creator>tomasol</dc:creator><comments>https://news.ycombinator.com/item?id=47832457</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47832457</guid></item><item><title><![CDATA[Obelisk 0.32: Cancellation, WebAPI, Postgres]]></title><description><![CDATA[
<p>Article URL: <a href="https://obeli.sk/blog/announcing-obelisk-0-32/">https://obeli.sk/blog/announcing-obelisk-0-32/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=46424789">https://news.ycombinator.com/item?id=46424789</a></p>
<p>Points: 31</p>
<p># Comments: 8</p>
]]></description><pubDate>Mon, 29 Dec 2025 19:58:09 +0000</pubDate><link>https://obeli.sk/blog/announcing-obelisk-0-32/</link><dc:creator>tomasol</dc:creator><comments>https://news.ycombinator.com/item?id=46424789</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46424789</guid></item><item><title><![CDATA[New comment by tomasol in "100k TPS over a billion rows: the unreasonable effectiveness of SQLite"]]></title><description><![CDATA[
<p>fsync is the most expensive operation during a write. NORMAL mode means you don't care whether last ~100 ms of transactions before a process crash / VM restart are going to be persisted or not. My suggestion is either to use synchronous="full" or disable `synchronous_commit` on Postgres to avoid comparing apples to oranges.<p>Edit: Also, the example indicates financial transactions. Can you explain why you need serializability but not durability?</p>
]]></description><pubDate>Tue, 02 Dec 2025 21:59:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=46127511</link><dc:creator>tomasol</dc:creator><comments>https://news.ycombinator.com/item?id=46127511</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46127511</guid></item><item><title><![CDATA[New comment by tomasol in "100k TPS over a billion rows: the unreasonable effectiveness of SQLite"]]></title><description><![CDATA[
<p>Author is setting PRAGMA synchronous="normal", meaning fsync is not issued as part of every write tx, but eventually. In order to make the comparison fair it should be set to "full".</p>
]]></description><pubDate>Tue, 02 Dec 2025 21:15:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=46126968</link><dc:creator>tomasol</dc:creator><comments>https://news.ycombinator.com/item?id=46126968</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46126968</guid></item><item><title><![CDATA[Challenging the Fastest OSS Workflow Engine]]></title><description><![CDATA[
<p>Article URL: <a href="https://obeli.sk/blog/challenging-fastest-workflow-engine/">https://obeli.sk/blog/challenging-fastest-workflow-engine/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=45749591">https://news.ycombinator.com/item?id=45749591</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Wed, 29 Oct 2025 16:54:19 +0000</pubDate><link>https://obeli.sk/blog/challenging-fastest-workflow-engine/</link><dc:creator>tomasol</dc:creator><comments>https://news.ycombinator.com/item?id=45749591</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45749591</guid></item><item><title><![CDATA[Taming AI-Assisted Code with Deterministic Workflows]]></title><description><![CDATA[
<p>Article URL: <a href="https://obeli.sk/blog/taming-ai-assisted-code/">https://obeli.sk/blog/taming-ai-assisted-code/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=45572184">https://news.ycombinator.com/item?id=45572184</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Mon, 13 Oct 2025 19:12:27 +0000</pubDate><link>https://obeli.sk/blog/taming-ai-assisted-code/</link><dc:creator>tomasol</dc:creator><comments>https://news.ycombinator.com/item?id=45572184</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45572184</guid></item><item><title><![CDATA[Obelisk 0.24.1]]></title><description><![CDATA[
<p>Article URL: <a href="https://obeli.sk/blog/introducing-obelisk-0-24-1/">https://obeli.sk/blog/introducing-obelisk-0-24-1/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=45273388">https://news.ycombinator.com/item?id=45273388</a></p>
<p>Points: 9</p>
<p># Comments: 0</p>
]]></description><pubDate>Wed, 17 Sep 2025 08:42:44 +0000</pubDate><link>https://obeli.sk/blog/introducing-obelisk-0-24-1/</link><dc:creator>tomasol</dc:creator><comments>https://news.ycombinator.com/item?id=45273388</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45273388</guid></item><item><title><![CDATA[New comment by tomasol in "Show HN: Obelisk – a WASM-based deterministic workflow engine"]]></title><description><![CDATA[
<p>Sorry for the late reply.<p>The actual order in which child workflows finish and their results hit the persistence layer is indeed nondeterministic in real-time execution. Trying to force deterministic completion order would likely be complex and defeat the purpose of parallelism, as you noted.<p>However, this external nondeterminism is outside the scope of the workflow execution's determinism required for replay.<p>When the workflow replays, it doesn't re-run the race. It consumes events from the log. The `-await-next` operation during replay simply reads the next recorded result, based on the fixed order. Since the log provides the same sequence of results every time, the workflow's internal logic proceeds identically, making the same decisions based on that recorded history.<p>Determinism is maintained within the replay context by reading the persisted, ordered outcomes of those nondeterministic races.</p>
]]></description><pubDate>Fri, 11 Apr 2025 09:14:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=43651931</link><dc:creator>tomasol</dc:creator><comments>https://news.ycombinator.com/item?id=43651931</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43651931</guid></item><item><title><![CDATA[New comment by tomasol in "Show HN: Obelisk – a WASM-based deterministic workflow engine"]]></title><description><![CDATA[
<p>> Just create a race condition among a join set.<p>All responses and completed delays are stored in a table with an auto-incremented id, so the `-await-next` will always resolve to the same value.<p>As you mention, putting a persistent sleep and a child execution into the same join set is not yet implemented.</p>
]]></description><pubDate>Thu, 10 Apr 2025 11:11:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=43642735</link><dc:creator>tomasol</dc:creator><comments>https://news.ycombinator.com/item?id=43642735</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43642735</guid></item><item><title><![CDATA[New comment by tomasol in "Show HN: Obelisk – a WASM-based deterministic workflow engine"]]></title><description><![CDATA[
<p>Thanks for bringing that up. Regarding the NaN canonicalization, there is a flag for it in wasmtime [1], I should probably make sure it is turned on.<p>Although I don't expect to be an issue practically speaking, Obelisk checks that the replay is deterministic and fails the workflow when an unexpected event is triggered. It should be also be possible to add an automatic replay of each finished execution to verify the determinism e.g. while testing.<p>[1] <a href="https://docs.rs/wasmtime/latest/wasmtime/struct.Config.html#method.cranelift_nan_canonicalization" rel="nofollow">https://docs.rs/wasmtime/latest/wasmtime/struct.Config.html#...</a><p>Edit: Enabling the flags here: <a href="https://github.com/obeli-sk/obelisk/pull/67">https://github.com/obeli-sk/obelisk/pull/67</a></p>
]]></description><pubDate>Thu, 10 Apr 2025 10:42:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=43642602</link><dc:creator>tomasol</dc:creator><comments>https://news.ycombinator.com/item?id=43642602</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43642602</guid></item><item><title><![CDATA[New comment by tomasol in "Show HN: Obelisk – a WASM-based deterministic workflow engine"]]></title><description><![CDATA[
<p>I can do that. Please create an issue if you want to be notified about it.</p>
]]></description><pubDate>Thu, 10 Apr 2025 10:30:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=43642535</link><dc:creator>tomasol</dc:creator><comments>https://news.ycombinator.com/item?id=43642535</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43642535</guid></item><item><title><![CDATA[New comment by tomasol in "Show HN: Obelisk – a WASM-based deterministic workflow engine"]]></title><description><![CDATA[
<p>The structured concurrency paradigm in workflows is stricter to what I'm reading here [1]. The whole execution model is different from the Task [2], as workflows are transparently unloaded and replayed.<p>Obelisk has a concept called join sets [3], where child executions are submitted and awaited. In the future I plan on adding cancellation and allow custom cleanup functions.<p>[1] <a href="https://github.com/WebAssembly/component-model/blob/main/design/mvp/Async.md#structured-concurrency">https://github.com/WebAssembly/component-model/blob/main/des...</a><p>[2] <a href="https://github.com/WebAssembly/component-model/blob/main/design/mvp/Async.md#task">https://github.com/WebAssembly/component-model/blob/main/des...</a><p>[3] <a href="https://obeli.sk/docs/latest/concepts/workflows/join-sets/" rel="nofollow">https://obeli.sk/docs/latest/concepts/workflows/join-sets/</a></p>
]]></description><pubDate>Thu, 10 Apr 2025 06:37:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=43641270</link><dc:creator>tomasol</dc:creator><comments>https://news.ycombinator.com/item?id=43641270</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43641270</guid></item><item><title><![CDATA[New comment by tomasol in "Show HN: Obelisk – a WASM-based deterministic workflow engine"]]></title><description><![CDATA[
<p>Indeed. I cannot compare the implementations as flawless is not open source. However on a high level they both share the same philosophy.<p>I believe the biggest difference is that Obelisk relies on the WASM Component Model:<p>Obelisk aims to avoid vendor lock-in. It is possible to write activities, workflows and webhooks with no obelisk SDK. Activities and webhooks are WASI 0.2 components that can be run on any compatible runtime like wasmtime e.g. for testing. This should also help with the adoption as any runtime will need a ton of integrations.</p>
]]></description><pubDate>Thu, 10 Apr 2025 00:30:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=43639439</link><dc:creator>tomasol</dc:creator><comments>https://news.ycombinator.com/item?id=43639439</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43639439</guid></item><item><title><![CDATA[New comment by tomasol in "Show HN: Obelisk – a WASM-based deterministic workflow engine"]]></title><description><![CDATA[
<p>> I was referring to the workflows, that is, writing the workflows in managed languages, not the activities.<p>Ah understood. I have no plans supporting native workflow executors.<p>> Out of curiosity, are you working full-time on this?<p>Yes, currently I work on it full time.<p>> I'm working part-time on the same problem, looking to go full time soon, and it's interesting to see how the same ideas are popping up somewhat independently across different projects :)<p>Nice website! I also see the ideas of determinism, replayability etc more and more.<p>> let me know if you're interested in chatting!<p>Sure, my email is visible in the Git commit history.</p>
]]></description><pubDate>Wed, 09 Apr 2025 23:33:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=43639120</link><dc:creator>tomasol</dc:creator><comments>https://news.ycombinator.com/item?id=43639120</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43639120</guid></item><item><title><![CDATA[New comment by tomasol in "Show HN: Obelisk – a WASM-based deterministic workflow engine"]]></title><description><![CDATA[
<p>> do I also need to compile activities to WASM<p>Yes, currently all activities must conform to the WASI 0.2 standard. This is the simplest for deployment, as you only need the obelisk executable, toml config file. The webhooks, workflows and activities pulled from a OCI registry on startup.<p>To support native code I plan to add external activities as well, with an interface similar to what Netflix Conductor uses for its workers.<p>> Finally, do you see the component's interface as the right layer for capturing IO?<p>An activity must encapsulate something much higher level than a single IO operation. So something like "Configure BGP on a router", "Start a VM" etc. It needs to be able to handle retries and thus be idempotent.<p>Regarding performance, a workflow execution can call 500-700 child executions serially, or around 1400 child executions concurrently per second.</p>
]]></description><pubDate>Wed, 09 Apr 2025 22:54:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=43638874</link><dc:creator>tomasol</dc:creator><comments>https://news.ycombinator.com/item?id=43638874</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43638874</guid></item><item><title><![CDATA[New comment by tomasol in "Show HN: Obelisk – a WASM-based deterministic workflow engine"]]></title><description><![CDATA[
<p>Great questions. If you are fixing a bug in a workflow, which has running executions, there are two scenarios:<p>Either the fix does not break the determinism, meaning the the execution did not hit the fix yet. In this case the execution can be replayed and continue on the patched WASM component.<p>Otherwise, the execution replay causes "Non determinism detected" error. In this case you need to handle the situation manually. Since the execution log is in a sqlite file, you can select all execution affected by the bug and perform a custom cleanup. Also you can create a "forked" execution just by copying the execution log + child responses into a new execution, however there is no API for it yet.<p>> Can I update the workflow while it has running instances without interfering the running instances?<p>If you mean keep the in-progress executions on the old version of the code, you can do that by introducing a new version in the WIT file and/or change the new function name.</p>
]]></description><pubDate>Wed, 09 Apr 2025 22:05:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=43638547</link><dc:creator>tomasol</dc:creator><comments>https://news.ycombinator.com/item?id=43638547</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43638547</guid></item><item><title><![CDATA[New comment by tomasol in "Show HN: Obelisk – a WASM-based deterministic workflow engine"]]></title><description><![CDATA[
<p>Yeah, looks like Golem went similar route - using WASM Component Model and wasmtime.<p>There is always this chicken and egg problem on a new platform, but I am hoping that LLMs can solve it partially - the activities are just HTTP clients with no complex logic.<p>Regarding the restrictions required for determinism, they only apply to workflows, not activities. Workflows should be describing just the business logic. All the complexities of retries, failure recovery, replay after server crash etc. are handled by the runtime. The WASM sandbox makes it impossible to introduce non-determinism - it would cause a compile error so no need for runtime checks.</p>
]]></description><pubDate>Wed, 09 Apr 2025 21:54:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=43638444</link><dc:creator>tomasol</dc:creator><comments>https://news.ycombinator.com/item?id=43638444</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43638444</guid></item><item><title><![CDATA[New comment by tomasol in "Show HN: Obelisk – a WASM-based deterministic workflow engine"]]></title><description><![CDATA[
<p>Thanks for the kind words. In an ideal world I would like to offer a cloud version that would be monetized.
There are a few examples on how to do HTTP requests, I have a demo repository [1] with GraphQL and regular JSON-over-HTTP activities.
I do agree that the ecosystem is not mature yet, but I was able to generate HTTP activities using LLM on a single shot.<p>1: <a href="https://github.com/obeli-sk/demo-stargazers">https://github.com/obeli-sk/demo-stargazers</a></p>
]]></description><pubDate>Wed, 09 Apr 2025 21:47:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=43638382</link><dc:creator>tomasol</dc:creator><comments>https://news.ycombinator.com/item?id=43638382</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43638382</guid></item><item><title><![CDATA[New comment by tomasol in "Show HN: Obelisk – a WASM-based deterministic workflow engine"]]></title><description><![CDATA[
<p>The biggest motivator for me is that WASM sandbox provides true deterministic execution. Contrary to engines like temporal, using hashmaps is 100% deterministic here. Attempting to spawn a thread is a compile error.
It also performs well - the bottleneck is in the write throughput of sqlite.
Last but not least - all the interfaces between workflows and activities are type safe, described in a WIT schema.</p>
]]></description><pubDate>Wed, 09 Apr 2025 21:22:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=43638145</link><dc:creator>tomasol</dc:creator><comments>https://news.ycombinator.com/item?id=43638145</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43638145</guid></item><item><title><![CDATA[Show HN: Obelisk – a WASM-based deterministic workflow engine]]></title><description><![CDATA[
<p>A lightweight engine for durable execution / deterministic workflows I built with Rust, wasmtime and the WASM Component Model.
Its main use is running reliable, long-running workflows that can automatically resume after failures.
Looking for feedback on the approach and potential use cases!</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=43636568">https://news.ycombinator.com/item?id=43636568</a></p>
<p>Points: 103</p>
<p># Comments: 27</p>
]]></description><pubDate>Wed, 09 Apr 2025 19:24:40 +0000</pubDate><link>https://obeli.sk/</link><dc:creator>tomasol</dc:creator><comments>https://news.ycombinator.com/item?id=43636568</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43636568</guid></item></channel></rss>