← Extractions

Adventures in durable execution — Julik Tarkhanov at wroclove.rb 2026

Julik Tarkhanov closes wroclove.rb 2026 with a critique of mainstream 'durable execution' products (Temporal, Cloudflare Workflows, Durable Objects) for conflating imperative code with DAG definitions, and introduces Geneva Drive — his Ruby/Rails-native workflow engine based on Active Record, Active Job, and a polymorphic 'hero' association. A live demo inside the Kora email assistant shows workflow listing, timelines, pause/resume and step-level source/stack traces.

Model
claude-opus-4-7
Ingestion
68e934af
Input tokens
253,906
fresh
72,637
cached
134,646
cache write
46,623
Output tokens
13,914
Duration
219.5s
Roundtrips
6
Tool calls
18
Cost
$0.00
Nodes/edges extracted
33 / 53
Read set (nodes/edges)
112 / 2

Nodes (33)

update Julik Tarkhanov person
attrs (empty) → {"previous_employers" => "WeTransfer, Cheddar Payments"}
description Ruby developer exploring durable execution patterns. → Polish-born Ruby developer (goes by Julik/Ulik). Previously worked at WeTransfer for a long stint, then at Cheddar Pa...
short_description Ruby developer, durable execution. → Ruby developer; author of the Geneva Drive durable-execution library.
update Adventures in durable execution talk
attrs {"type" => "talk"} → {"date" => "2026-04-17", "type" => "talk"}
description Talk on durable execution patterns. → Closing talk of wroclove.rb 2026 by Julik Tarkhanov. Motivated by a money-transfer workflow (retry, idempotency, back...
short_description Talk on durable execution patterns. → Closing wroclove.rb 2026 talk critiquing JS/cloud durable-execution products and unveiling Geneva Drive.
create acidic_job tool
kind (empty) → tool
name (empty) → acidic_job
slug (empty) → acidic_job
attrs (empty) → {"category" => "library", "language" => "Ruby"}
description (empty) → Ruby gem by Stephen Margheim that layers workflow steps (step1, step2, step3) inside Active Job's `perform` in a tran...
short_description (empty) → Stephen Margheim's gem for implementing transactional, durable workflows inside Active Job.
create Active Job Continuation tool
kind (empty) → tool
name (empty) → Active Job Continuation
slug (empty) → active-job-continuation
attrs (empty) → {"category" => "framework"}
description (empty) → 37signals-authored feature shipping in Rails 8.1 that lets a background job suspend and resume at step boundaries. Ju...
short_description (empty) → Rails 8.1 feature from 37signals for resuming long-running Active Job work.
create Geneva Drive project
kind (empty) → project
name (empty) → Geneva Drive
slug (empty) → geneva-drive
attrs (empty) → {"status" => "active", "license" => "dual (LGPL core + paid admin)", "language" => "Ruby"}
description (empty) → Ruby/Rails library by Julik Tarkhanov for durable workflow execution. Core design: a workflow is an Active Record wit...
short_description (empty) → Rails-native durable workflow engine backed by Active Record and Active Job.
create Durable Execution concept
kind (empty) → concept
name (empty) → Durable Execution
slug (empty) → durable-execution
attrs (empty) → {"category" => "architecture"}
description (empty) → Approach to executing workflows — sequences of steps that depend on each other's completion or failure — such that st...
short_description (empty) → Running multi-step workflows whose state survives crashes, restarts and long waits.
create Workflow concept
kind (empty) → concept
name (empty) → Workflow
slug (empty) → workflow
attrs (empty) → {"category" => "pattern"}
description (empty) → A number of steps depending on each other's completion/failure — sequential, branching, or fan-out/fork-join — where ...
short_description (empty) → A graph of steps that depend on each other's completion or failure, with persisted state.
create Directed Acyclic Graph concept
kind (empty) → concept
name (empty) → Directed Acyclic Graph
slug (empty) → directed-acyclic-graph
attrs (empty) → {"category" => "architecture"}
description (empty) → Foundational primitive used throughout software: Houdini scenes, Nuke compositing setups, Terraform state/HCL, even E...
short_description (empty) → Graph of nodes where edges have direction and no cycles exist; workflow foundation.
create Temporal tool
kind (empty) → tool
name (empty) → Temporal
slug (empty) → temporal
attrs (empty) → {"category" => "platform"}
description (empty) → Durable-execution platform promising stable workflows written as imperative code (activities + sleeps). Requires runn...
short_description (empty) → Workflow-as-code durable execution platform; recently added official Ruby bindings.
create Restate tool
kind (empty) → tool
name (empty) → Restate
slug (empty) → restate
attrs (empty) → {"category" => "platform"}
description (empty) → Durable-execution workflow system mentioned alongside Temporal as promising 'stable workflows' via imperative code pl...
short_description (empty) → Durable-execution workflow system in the Temporal family.
create Cloudflare Workflows tool
kind (empty) → tool
name (empty) → Cloudflare Workflows
slug (empty) → cloudflare-workflows
attrs (empty) → {"category" => "platform"}
description (empty) → Cloudflare's durable-workflows offering (the 'orange cloud man' in Julik's talk). Highly JavaScript-centric, runs on ...
short_description (empty) → Cloudflare's durable workflow product running on Workers/Firecracker VMs.
create Durable Objects tool
kind (empty) → tool
name (empty) → Durable Objects
slug (empty) → durable-objects
attrs (empty) → {"category" => "platform"}
description (empty) → Referred to in the talk as the 'black pyramid man' solution. A JavaScript-heavy durable-workflow product running on p...
short_description (empty) → AWS/'black pyramid' durable-execution workflow product critiqued in the talk.
create HYA tool
kind (empty) → tool
name (empty) → HYA
slug (empty) → hya
attrs (empty) → {"category" => "library"}
description (empty) → Rails engine from Honey Badger for email campaigns. Provides a clean `step :welcome` / `wait 1.day` DSL where waits a...
short_description (empty) → Honey Badger email-campaign engine with a step/wait DSL for Rails.
create Honey Badger company
kind (empty) → company
name (empty) → Honey Badger
slug (empty) → honey-badger
attrs (empty) → {"industry" => "developer tools / monitoring"}
description (empty) → Application-monitoring SaaS company; also publishes the open-source HYA email-campaign engine for Rails which inspire...
short_description (empty) → Application-monitoring SaaS company; authors of the HYA email-campaign engine.
create Terraform tool
kind (empty) → tool
name (empty) → Terraform
slug (empty) → terraform
attrs (empty) → {"category" => "platform"}
description (empty) → HashiCorp infrastructure-as-code tool used in the talk as a best-practice example of separating DAG definition from n...
short_description (empty) → HashiCorp infrastructure-as-code tool; a DAG engine with HCL + provider modules.
create Houdini tool
kind (empty) → tool
name (empty) → Houdini
slug (empty) → houdini
attrs (empty) → {"category" => "platform"}
description (empty) → 3D/VFX software used as a DAG example: primitives are generated at the top of the graph, modifiers are applied as nod...
short_description (empty) → 3D/VFX software whose scenes are explicit DAGs of operations on primitives.
create Nuke tool
kind (empty) → tool
name (empty) → Nuke
slug (empty) → nuke
attrs (empty) → {"category" => "platform"}
description (empty) → Compositing application from The Foundry (formerly Digital Domain). Compositing setups load images, apply operations,...
short_description (empty) → The Foundry's compositing application; uses Tcl-described DAGs with native C++ node code.
create Kora project
kind (empty) → project
name (empty) → Kora
slug (empty) → kora
attrs (empty) → {"domain" => "email assistant", "status" => "active"}
description (empty) → Email assistant that uses Geneva Drive for most of its transactional work: Gmail account synchronization, Gmail histo...
short_description (empty) → AI-powered email assistant; flagship production user of Geneva Drive.
create Porsche TUI project
kind (empty) → project
name (empty) → Porsche TUI
slug (empty) → porsche-tui
attrs (empty) → {"status" => "active"}
description (empty) → Project by Stas (a former colleague of Julik, in the audience) that uses Geneva Drive 'secretly' to process all its d...
short_description (empty) → Documentation-processing project by Stas using Geneva Drive.
create Stas person
kind (empty) → person
name (empty) → Stas
slug (empty) → stas
description (empty) → Former colleague of Julik Tarkhanov, attending wroclove.rb 2026. Builds Porsche TUI which relies on Geneva Drive to p...
short_description (empty) → Former colleague of Julik; author of Porsche TUI which uses Geneva Drive.
create WeTransfer company
kind (empty) → company
name (empty) → WeTransfer
slug (empty) → wetransfer
attrs (empty) → {"industry" => "file transfer"}
description (empty) → File-transfer SaaS. Julik Tarkhanov worked there for a long time before Cheddar Payments.
short_description (empty) → File-transfer service; Julik Tarkhanov's long-time former employer.
create Cheddar Payments company
kind (empty) → company
name (empty) → Cheddar Payments
slug (empty) → cheddar-payments
attrs (empty) → {"industry" => "payments"}
description (empty) → Payments company where Julik worked after WeTransfer. While there, the team evaluated HYA for workflows and hit its l...
short_description (empty) → Payments company; employed Julik Tarkhanov after WeTransfer.
create Geneva Drive Hero Association concept
kind (empty) → concept
name (empty) → Geneva Drive Hero Association
slug (empty) → geneva-drive-hero-association
attrs (empty) → {"category" => "pattern"}
description (empty) → A workflow-level polymorphic association available on every Geneva Drive workflow. Links the workflow to any Active R...
short_description (empty) → Single polymorphic association linking a Geneva Drive workflow to any domain record.
create Step Execution Record concept
kind (empty) → concept
name (empty) → Step Execution Record
slug (empty) → step-execution-record
attrs (empty) → {"category" => "pattern"}
description (empty) → Each attempt to run a Geneva Drive step is persisted as a step_execution row. This record is the basis for timelines,...
short_description (empty) → Geneva Drive DB row representing one attempt to run a specific workflow step.
create Separate DAG Definition From Node Execution takeaway
kind (empty) → takeaway
name (empty) → Separate DAG Definition From Node Execution
slug (empty) → separate-dag-definition-from-node-execution
attrs (empty) → {"type" => "insight"}
description (empty) → Julik's central design principle: systems that mix the DAG definition with the imperative node code (Temporal's `5.ti...
short_description (empty) → Keep workflow topology declarative and node code imperative — don't conflate them.
create Active Job Is A Poor Workflow Container takeaway
kind (empty) → takeaway
name (empty) → Active Job Is A Poor Workflow Container
slug (empty) → active-job-is-a-poor-workflow-container
attrs (empty) → {"type" => "lesson-learned"}
description (empty) → When using Active Job as a workflow container you inherit identity and queryability problems: the Active Job ID is a ...
short_description (empty) → Active Job jobs are hard to identify, query and treat as stable workflow state.
create Use Paper Trail For Workflow History takeaway
kind (empty) → takeaway
name (empty) → Use Paper Trail For Workflow History
slug (empty) → use-paper-trail-for-workflow-history
attrs (empty) → {"type" => "recommendation"}
description (empty) → Julik deliberately avoids storing a state blob inside workflows: the moment you allow mutable state on the workflow y...
short_description (empty) → Don't store workflow state history inside the workflow; version the hero with paper_trail.
create Conditional DAG jumps in Geneva Drive question
kind (empty) → question
name (empty) → Conditional DAG jumps in Geneva Drive
slug (empty) → conditional-dag-jumps-in-geneva-drive
attrs (empty) → {"answer_summary" => "Only `skip` is supported today; `jump_to` is being considered but feels half a step from Turing...
description (empty) → An audience member asks whether the DSL supports conditional edges that jump to one step or another based on success/...
short_description (empty) → Should the declarative DSL allow conditional 'go to step X else step Y' jumps?
create Geneva Drive hero mutation and deletion question
kind (empty) → question
name (empty) → Geneva Drive hero mutation and deletion
slug (empty) → geneva-drive-hero-mutation-and-deletion
attrs (empty) → {"answer_summary" => "Mutation is fine and often desirable; deletion cancels the workflow by default, but `continue_w...
description (empty) → Audience asks what Geneva Drive does if the hero is mutated or deleted while the workflow is running. Julik: external...
short_description (empty) → What happens if the hero record is externally mutated or deleted mid-workflow?
create Geneva Drive hero constraints and migrations question
kind (empty) → question
name (empty) → Geneva Drive hero constraints and migrations
slug (empty) → geneva-drive-hero-constraints-and-migrations
attrs (empty) → {"answer_summary" => "Heroes are plain Active Records with a (hero_type, hero_id, workflow_type) uniqueness constrain...
description (empty) → Audience asks whether heroes have special requirements and whether Julik provides generators for hero migrations. Jul...
short_description (empty) → Do heroes need special mutations, and does the gem generate its own migrations?
create When is Geneva Drive overkill question
kind (empty) → question
name (empty) → When is Geneva Drive overkill
slug (empty) → when-is-geneva-drive-overkill
attrs (empty) → {"answer_summary" => "Not needed when the work fits in a single fire-and-forget Active Job perform; use plain Active ...
description (empty) → Audience member invokes YAGNI and asks when Geneva Drive is not needed. Julik: if the work fits in a single fire-and-...
short_description (empty) → When is a durable workflow engine not needed — YAGNI check.
create Storing workflow state history question
kind (empty) → question
name (empty) → Storing workflow state history
slug (empty) → storing-workflow-state-history
attrs (empty) → {"answer_summary" => "Geneva Drive stores breadcrumbs plus all step_executions as log records; use paper_trail on the...
description (empty) → Audience asks whether Geneva Drive keeps the full history of a workflow's states. Julik avoids storing state blobs on...
short_description (empty) → Can Geneva Drive store the full history of workflow states?
create Scheduling granularity vs HYA question
kind (empty) → question
name (empty) → Scheduling granularity vs HYA
slug (empty) → scheduling-granularity-vs-hya
attrs (empty) → {"answer_summary" => "No custom scheduler — Geneva Drive inherits the granularity of the active-job adapter, so waits...
description (empty) → Former HYA user asks whether Geneva Drive needs something always polling for scheduled work. Julik: Geneva Drive has ...
short_description (empty) → Does Geneva Drive need its own scheduler like HYA had?

Edges (53)

create Geneva Drive → uses → Geneva Drive Hero Association
context (empty) → Every workflow has a polymorphic hero association.
relation (empty) → uses
source_node_id (empty) → a5af0b85-613c-43dc-a3db-4a220f73f5f0
target_node_id (empty) → 7cbf5eb4-f1ff-431d-9c74-6df3c794195f
create Geneva Drive → uses → Step Execution Record
context (empty) → Persists each step attempt as a step_execution row.
relation (empty) → uses
source_node_id (empty) → a5af0b85-613c-43dc-a3db-4a220f73f5f0
target_node_id (empty) → f280815a-66ba-4e04-9b08-c5d961b77576
create Geneva Drive → uses → PostgreSQL
context (empty) → Supported as one of Geneva Drive's backing databases.
relation (empty) → uses
source_node_id (empty) → a5af0b85-613c-43dc-a3db-4a220f73f5f0
target_node_id (empty) → 46fc2697-69fc-436b-ac82-250ba4370273
update Julik Tarkhanov → authored → Adventures in durable execution
context (empty) → Julik delivered this closing talk at wroclove.rb 2026.
update Adventures in durable execution → presented_at → wroclove.rb 2026
context (empty) → Announced as the last talk of this year's edition.
create Julik Tarkhanov → attended → wroclove.rb 2026
context (empty) → Flew in the night before to give the closing talk.
relation (empty) → attended
source_node_id (empty) → 98a20e00-9e77-4e67-ba75-a2bf236fdba2
target_node_id (empty) → c1bfbda9-9fbb-4d7f-8e12-1a7a81621ba9
create Julik Tarkhanov → works_at → WeTransfer
attrs (empty) → {"tense" => "former"}
context (empty) → Spent a long time at WeTransfer before moving to Cheddar.
relation (empty) → works_at
source_node_id (empty) → 98a20e00-9e77-4e67-ba75-a2bf236fdba2
target_node_id (empty) → 39e23219-094f-4902-951f-e6879f1c81c8
create Julik Tarkhanov → works_at → Cheddar Payments
attrs (empty) → {"tense" => "former"}
context (empty) → Worked at Cheddar Payments after WeTransfer; the team's evaluation of HYA there led toward building Geneva Drive.
relation (empty) → works_at
source_node_id (empty) → 98a20e00-9e77-4e67-ba75-a2bf236fdba2
target_node_id (empty) → 3c8dfc79-f958-48ec-926c-f936fafff606
create Julik Tarkhanov → works_on → Geneva Drive
attrs (empty) → {"role" => "author"}
context (empty) → Creator and maintainer of Geneva Drive.
relation (empty) → works_on
source_node_id (empty) → 98a20e00-9e77-4e67-ba75-a2bf236fdba2
target_node_id (empty) → a5af0b85-613c-43dc-a3db-4a220f73f5f0
create Adventures in durable execution → about → Geneva Drive
context (empty) → The talk unveils and demos Geneva Drive as the proposed solution.
relation (empty) → about
source_node_id (empty) → e2df6449-5fde-4107-80d6-85b269f4650f
target_node_id (empty) → a5af0b85-613c-43dc-a3db-4a220f73f5f0
create Adventures in durable execution → about → Durable Execution
context (empty) → Core subject: how to honestly implement durable execution.
relation (empty) → about
source_node_id (empty) → e2df6449-5fde-4107-80d6-85b269f4650f
target_node_id (empty) → 706347e0-c3de-46c5-84be-5147d7bd555f
create Adventures in durable execution → about → Workflow
context (empty) → Defines and discusses workflows as graphs of interdependent steps.
relation (empty) → about
source_node_id (empty) → e2df6449-5fde-4107-80d6-85b269f4650f
target_node_id (empty) → b44a3487-ae2c-4047-9369-03000ba3bebe
create Adventures in durable execution → about → Directed Acyclic Graph
context (empty) → Argues workflows should be modeled as DAGs, with examples from Houdini, Nuke, Terraform and Excel.
relation (empty) → about
source_node_id (empty) → e2df6449-5fde-4107-80d6-85b269f4650f
target_node_id (empty) → 077e826b-1d42-49d2-8e68-5abda3f90115
create Adventures in durable execution → about → Temporal
context (empty) → Critiques Temporal's Ruby bindings example as mixing DAG and imperative code.
relation (empty) → about
source_node_id (empty) → e2df6449-5fde-4107-80d6-85b269f4650f
target_node_id (empty) → 6dc18759-ff09-447c-bbb9-91da4cb7e4c3
create Adventures in durable execution → about → Restate
context (empty) → Listed among systems promising 'stable workflows' via imperative code.
relation (empty) → about
source_node_id (empty) → e2df6449-5fde-4107-80d6-85b269f4650f
target_node_id (empty) → 1931c125-5c8c-45da-b137-e4b37a5a64d4
create Adventures in durable execution → about → Cloudflare Workflows
context (empty) → Critiqued as the 'orange cloud man' selling imperative-as-durable on Firecracker VMs.
relation (empty) → about
source_node_id (empty) → e2df6449-5fde-4107-80d6-85b269f4650f
target_node_id (empty) → 83328cf2-6918-4f9f-ba12-537d8accc823
create Adventures in durable execution → about → Durable Objects
context (empty) → Critiqued as the 'black pyramid man' workflow product.
relation (empty) → about
source_node_id (empty) → e2df6449-5fde-4107-80d6-85b269f4650f
target_node_id (empty) → 3916fe2d-2e99-4367-9df7-e789df224e26
create Adventures in durable execution → about → acidic_job
context (empty) → Cited approvingly but used to illustrate DAG-inside-perform deception.
relation (empty) → about
source_node_id (empty) → e2df6449-5fde-4107-80d6-85b269f4650f
target_node_id (empty) → baa93cdd-f99c-47fa-9ec3-57186f702fa0
create Adventures in durable execution → about → HYA
context (empty) → Inspired Geneva Drive's DSL; discussed along with its limitations.
relation (empty) → about
source_node_id (empty) → e2df6449-5fde-4107-80d6-85b269f4650f
target_node_id (empty) → 47547ce6-0c7e-485c-8739-e99c5248b519
create Adventures in durable execution → about → Active Job Continuation
context (empty) → Given as a Rails 8.1 example of embedding DAG topology inside perform.
relation (empty) → about
source_node_id (empty) → e2df6449-5fde-4107-80d6-85b269f4650f
target_node_id (empty) → 7e8d870c-478f-430d-a282-14c30cea6d6f
create Adventures in durable execution → about → Terraform
context (empty) → Held up as a good example of DAG/executor separation (HCL + Go provider modules).
relation (empty) → about
source_node_id (empty) → e2df6449-5fde-4107-80d6-85b269f4650f
target_node_id (empty) → 8de9a177-6c71-46c8-a818-55382d8ee91d
create Adventures in durable execution → about → Houdini
context (empty) → Scene-as-DAG example used to motivate thinking about workflows as DAGs.
relation (empty) → about
source_node_id (empty) → e2df6449-5fde-4107-80d6-85b269f4650f
target_node_id (empty) → 36968be5-a7e7-4e0c-8f61-77e636823299
create Adventures in durable execution → about → Nuke
context (empty) → Compositing-as-DAG example: Tcl describes the DAG, C++ DSOs execute the nodes.
relation (empty) → about
source_node_id (empty) → e2df6449-5fde-4107-80d6-85b269f4650f
target_node_id (empty) → 4b7118ff-7b95-4801-b512-1abe61b21c18
create Adventures in durable execution → about → Kora
context (empty) → Live demo of Geneva Drive's admin runs against the Kora production app.
relation (empty) → about
source_node_id (empty) → e2df6449-5fde-4107-80d6-85b269f4650f
target_node_id (empty) → 4c85589c-dc5b-44bc-b8fb-91519cbfc695
create Adventures in durable execution → about → Porsche TUI
context (empty) → Mentioned as another production user of Geneva Drive.
relation (empty) → about
source_node_id (empty) → e2df6449-5fde-4107-80d6-85b269f4650f
target_node_id (empty) → 9eb88a0e-b705-479a-86aa-bc897d84ba51
create Adventures in durable execution → about → Geneva Drive Hero Association
context (empty) → Talk explains the hero association at length.
relation (empty) → about
source_node_id (empty) → e2df6449-5fde-4107-80d6-85b269f4650f
target_node_id (empty) → 7cbf5eb4-f1ff-431d-9c74-6df3c794195f
create Adventures in durable execution → about → Step Execution Record
context (empty) → Talk describes step_execution records as the basis for idempotency, timeline and pause/resume.
relation (empty) → about
source_node_id (empty) → e2df6449-5fde-4107-80d6-85b269f4650f
target_node_id (empty) → f280815a-66ba-4e04-9b08-c5d961b77576
create Geneva Drive → related_to → Solid Queue
context (empty) → Solid Queue + Postgres is given as an example active-job backend where Geneva Drive's JSON-column inspection becomes ...
relation (empty) → related_to
source_node_id (empty) → a5af0b85-613c-43dc-a3db-4a220f73f5f0
target_node_id (empty) → bc443bd9-cc27-4641-8b44-b26cbc448fde
create Geneva Drive → related_to → Rails 8.1
context (empty) → Active Job Continuation shipping in Rails 8.1 is directly compared with Geneva Drive.
relation (empty) → related_to
source_node_id (empty) → a5af0b85-613c-43dc-a3db-4a220f73f5f0
target_node_id (empty) → ad79f65b-a79e-409b-9c0c-a3e509fa1f8c
create Kora → uses → Geneva Drive
context (empty) → Most transactional work in Kora (Gmail sync, history download, push notifications, LLM steps) runs on Geneva Drive wo...
relation (empty) → uses
source_node_id (empty) → 4c85589c-dc5b-44bc-b8fb-91519cbfc695
target_node_id (empty) → a5af0b85-613c-43dc-a3db-4a220f73f5f0
create Porsche TUI → uses → Geneva Drive
context (empty) → Uses Geneva Drive to process all its documentation.
relation (empty) → uses
source_node_id (empty) → 9eb88a0e-b705-479a-86aa-bc897d84ba51
target_node_id (empty) → a5af0b85-613c-43dc-a3db-4a220f73f5f0
create Stas → works_on → Porsche TUI
attrs (empty) → {"role" => "author"}
context (empty) → Stas builds Porsche TUI.
relation (empty) → works_on
source_node_id (empty) → 6dd18233-c665-4811-baaa-debfdeb12d01
target_node_id (empty) → 9eb88a0e-b705-479a-86aa-bc897d84ba51
create Stas → attended → wroclove.rb 2026
context (empty) → Julik points him out in the audience.
relation (empty) → attended
source_node_id (empty) → 6dd18233-c665-4811-baaa-debfdeb12d01
target_node_id (empty) → c1bfbda9-9fbb-4d7f-8e12-1a7a81621ba9
create HYA → related_to → Honey Badger
context (empty) → HYA is authored by the Honey Badger team.
relation (empty) → related_to
source_node_id (empty) → 47547ce6-0c7e-485c-8739-e99c5248b519
target_node_id (empty) → 83c90cc6-aa32-4231-827b-9749c63f5cc3
create Separate DAG Definition From Node Execution → from_talk → Adventures in durable execution
context (empty) → Central thesis of the talk.
relation (empty) → from_talk
source_node_id (empty) → 337ff668-0384-4059-905c-a1613f4bc1b8
target_node_id (empty) → e2df6449-5fde-4107-80d6-85b269f4650f
create Separate DAG Definition From Node Execution → about → Directed Acyclic Graph
context (empty) → Takeaway argues for explicit DAG definitions separate from node code.
relation (empty) → about
source_node_id (empty) → 337ff668-0384-4059-905c-a1613f4bc1b8
target_node_id (empty) → 077e826b-1d42-49d2-8e68-5abda3f90115
create Active Job Is A Poor Workflow Container → from_talk → Adventures in durable execution
context (empty) → Drawn from Julik's critique of active_job-based workflow containers.
relation (empty) → from_talk
source_node_id (empty) → 5577a1e3-a502-4d0d-9ea9-63eccee9b6bd
target_node_id (empty) → e2df6449-5fde-4107-80d6-85b269f4650f
create Active Job Is A Poor Workflow Container → about → Active Job Continuation
context (empty) → Critiques the params-bag carrier approach used in Rails 8.1 continuation.
relation (empty) → about
source_node_id (empty) → 5577a1e3-a502-4d0d-9ea9-63eccee9b6bd
target_node_id (empty) → 7e8d870c-478f-430d-a282-14c30cea6d6f
create Use Paper Trail For Workflow History → from_talk → Adventures in durable execution
context (empty) → Julik endorses paper_trail on the hero as the way to keep state history.
relation (empty) → from_talk
source_node_id (empty) → 62e63dd7-61d3-4248-9873-e10e900f3e9e
target_node_id (empty) → e2df6449-5fde-4107-80d6-85b269f4650f
create Use Paper Trail For Workflow History → about → Geneva Drive
context (empty) → Explains Geneva Drive's deliberate choice not to store workflow-state blobs.
relation (empty) → about
source_node_id (empty) → 62e63dd7-61d3-4248-9873-e10e900f3e9e
target_node_id (empty) → a5af0b85-613c-43dc-a3db-4a220f73f5f0
create Conditional DAG jumps in Geneva Drive → asked_at → Adventures in durable execution
context (empty) → First audience question during Q&A.
relation (empty) → asked_at
source_node_id (empty) → ed0042d2-7a56-4322-840e-ada30377bd8f
target_node_id (empty) → e2df6449-5fde-4107-80d6-85b269f4650f
create Conditional DAG jumps in Geneva Drive → about → Geneva Drive
context (empty) → Asks about a missing DSL feature.
relation (empty) → about
source_node_id (empty) → ed0042d2-7a56-4322-840e-ada30377bd8f
target_node_id (empty) → a5af0b85-613c-43dc-a3db-4a220f73f5f0
create Geneva Drive hero mutation and deletion → asked_at → Adventures in durable execution
context (empty) → Follow-up question during Q&A.
relation (empty) → asked_at
source_node_id (empty) → 670c32d2-30df-447a-b928-156db1e63a1e
target_node_id (empty) → e2df6449-5fde-4107-80d6-85b269f4650f
create Geneva Drive hero mutation and deletion → about → Geneva Drive Hero Association
context (empty) → Clarifies hero semantics.
relation (empty) → about
source_node_id (empty) → 670c32d2-30df-447a-b928-156db1e63a1e
target_node_id (empty) → 7cbf5eb4-f1ff-431d-9c74-6df3c794195f
create Geneva Drive hero constraints and migrations → asked_at → Adventures in durable execution
context (empty) → Audience question on hero requirements and migration tooling.
relation (empty) → asked_at
source_node_id (empty) → 4d7d1106-8521-4d24-8e5e-558a29b82b67
target_node_id (empty) → e2df6449-5fde-4107-80d6-85b269f4650f
create Geneva Drive hero constraints and migrations → about → Geneva Drive
context (empty) → Covers install generator and uniqueness constraint.
relation (empty) → about
source_node_id (empty) → 4d7d1106-8521-4d24-8e5e-558a29b82b67
target_node_id (empty) → a5af0b85-613c-43dc-a3db-4a220f73f5f0
create When is Geneva Drive overkill → asked_at → Adventures in durable execution
context (empty) → Andy's YAGNI question.
relation (empty) → asked_at
source_node_id (empty) → c77c23fc-9b97-4c96-97e2-26a5da64ee6c
target_node_id (empty) → e2df6449-5fde-4107-80d6-85b269f4650f
create When is Geneva Drive overkill → about → Geneva Drive
context (empty) → Asks when the library is not needed.
relation (empty) → about
source_node_id (empty) → c77c23fc-9b97-4c96-97e2-26a5da64ee6c
target_node_id (empty) → a5af0b85-613c-43dc-a3db-4a220f73f5f0
create Storing workflow state history → asked_at → Adventures in durable execution
context (empty) → Audience question near the end of Q&A.
relation (empty) → asked_at
source_node_id (empty) → 92e2571f-5c1e-4a3a-9016-4fb6f8eac999
target_node_id (empty) → e2df6449-5fde-4107-80d6-85b269f4650f
create Storing workflow state history → about → Geneva Drive
context (empty) → Covers how Geneva Drive handles (and deliberately avoids) state history.
relation (empty) → about
source_node_id (empty) → 92e2571f-5c1e-4a3a-9016-4fb6f8eac999
target_node_id (empty) → a5af0b85-613c-43dc-a3db-4a220f73f5f0
create Scheduling granularity vs HYA → asked_at → Adventures in durable execution
context (empty) → Final Q&A question from a former HYA user.
relation (empty) → asked_at
source_node_id (empty) → 191a36c2-584b-4829-b911-b8700384aaaa
target_node_id (empty) → e2df6449-5fde-4107-80d6-85b269f4650f
create Scheduling granularity vs HYA → about → Geneva Drive
context (empty) → Clarifies Geneva Drive's scheduler model.
relation (empty) → about
source_node_id (empty) → 191a36c2-584b-4829-b911-b8700384aaaa
target_node_id (empty) → a5af0b85-613c-43dc-a3db-4a220f73f5f0
create Scheduling granularity vs HYA → about → HYA
context (empty) → Compares Geneva Drive's lack of scheduler to HYA's campaign scheduling.
relation (empty) → about
source_node_id (empty) → 191a36c2-584b-4829-b911-b8700384aaaa
target_node_id (empty) → 47547ce6-0c7e-485c-8739-e99c5248b519

Read set

112 nodes

person Julik Tarkhanov search_nodes+get_node_edges tool ChatGPT search_nodes takeaway Name Things To Find Their Properties search_nodes concept AI Agent search_nodes concept Retrieval Augmented Generation search_nodes tool langchainrb search_nodes project Check search_nodes concept Vector Embeddings search_nodes concept Vector Database search_nodes concept Structured LLM Output search_nodes talk Adventures in durable execution search_nodes+get_node_edges concept Trailblazer Workflow search_nodes concept Immersion-Driven Workflow search_nodes question Long-running automations and sagas search_nodes takeaway Trailblazer tracing saves thousands of debugging hours search_nodes takeaway Prompts as Business Logic search_nodes takeaway Break Code Into Small Units Orchestrated By A Process Engine search_nodes concept Railway Oriented Programming search_nodes concept Trailblazer Activity search_nodes concept Saga Pattern search_nodes event wroclove.rb 2026 search_nodes event wroclove.rb 2019 search_nodes event wroclove.rb 2018 search_nodes event wroclove.rb 2022 search_nodes event wroclove.rb 2023 search_nodes event wroclove.rb 2024 search_nodes event wroclove.rb 2025 search_nodes talk Ruby Is Mature Now search_nodes talk Building LLM powered applications in Ruby search_nodes project Ruby Romania search_nodes takeaway Time Travel Superpower search_nodes concept Logux Time-Shift Ordering search_nodes concept Timeline Visualization search_nodes question How do you order events across distributed systems? search_nodes concept Entity Caching and Snapshotting search_nodes concept Process Manager search_nodes concept EventStorming search_nodes takeaway Delay mutations to background jobs search_nodes project Solid Queue search_nodes tool Sidekiq search_nodes concept Sidekiq Batches search_nodes takeaway Prefer Small Sidekiq Jobs search_nodes tool carrierwave_backgrounder search_nodes takeaway Prefer a simple top-to-bottom worker search_nodes question Wrapper Job vs Logic In Job search_nodes takeaway Keep Sidekiq Job Parameters Simple search_nodes takeaway Pass IDs to background jobs, not objects search_nodes company Transloadit search_nodes concept Direct Upload to Cloud search_nodes concept tus protocol search_nodes tool AWS DataSync search_nodes company SpaceX search_nodes tool Cloudflare R2 search_nodes concept Open Banking Provider search_nodes tool Tailscale search_nodes tool Amazon Elastic Transcoder search_nodes tool Uppy search_nodes project Nerds and Threads search_nodes project Trezy search_nodes tool Klaviyo search_nodes company Zendesk search_nodes project rails_event_store/ecommerce search_nodes tool PagerDuty search_nodes resource Ruby Gem Fellowship Fund search_nodes tool Stripe search_nodes concept Unique Per-Site Email Leak Detection search_nodes talk Offline Sandwich Focus Workflow search_nodes tool Honeycomb search_nodes tool Requestly search_nodes takeaway Use Unique Per-Site Emails To Catch Leaks search_nodes project Scattergun search_nodes concept Isolate Deployment Types search_nodes concept Call Graph Visualization search_nodes takeaway Draw Call Graphs To Expose Wrong-Way Dependencies search_nodes concept Declarative Migrations search_nodes concept Nested GraphQL query bottleneck search_nodes takeaway Gradual migration via steps search_nodes tool RealtimeBoard search_nodes concept GraphQL max_depth search_nodes tool Claude Code search_nodes talk Events events events search_nodes tool Apollo GraphQL Platform search_nodes tool Render search_nodes tool Apollo GraphQL search_nodes concept MCP Server search_nodes tool Rails 8.1 search_nodes question Sidekiq Retry Race Condition Fixed In 7 search_nodes question Scaling Sidekiq Elastically search_nodes tool Cloudflare Workers search_nodes company Cloudflare search_nodes concept GitHub Self-Hosted Runner search_nodes takeaway Record CloudFront request headers on sessions search_nodes takeaway Sign serverlessforruby.org petition search_nodes tool Coolify search_nodes takeaway Bump asset version when debugging multi-layer caches search_nodes talk From PostgreSQL to SQLite in Rails search_nodes tool PostgreSQL search_nodes question Is starting with SQLite a lock-in if I later need Postgres? search_nodes concept Branch-Specific SQLite Databases search_nodes talk Fantastic Databases and Where to Find Them search_nodes takeaway Add enhanced-sqlite3-adapter for production SQLite on Rails search_nodes concept Custom SQLite Functions in Ruby search_nodes project estimate_count gem search_nodes tool Sequel search_nodes takeaway Adopt SQLite to cut Rails infrastructure cost and DevOps overhead search_nodes tool TSort search_nodes tool GraphQL search_nodes takeaway Model permissions as a graph, check them as path existence search_nodes question How do you determine call-graph arrow direction? search_nodes concept GraphQL query timeout search_nodes tool Pathom search_nodes takeaway Graph resolvers compute minimal API calls automatically search_nodes

2 edges