← 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 DriveusesGeneva 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 DriveusesStep 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 DriveusesPostgreSQL
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 TarkhanovauthoredAdventures in durable execution
context (empty) Julik delivered this closing talk at wroclove.rb 2026.
update Adventures in durable executionpresented_atwroclove.rb 2026
context (empty) Announced as the last talk of this year's edition.
create Julik Tarkhanovattendedwroclove.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 Tarkhanovworks_atWeTransfer
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 Tarkhanovworks_atCheddar 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 Tarkhanovworks_onGeneva 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 executionaboutGeneva 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 executionaboutDurable 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 executionaboutWorkflow
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 executionaboutDirected 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 executionaboutTemporal
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 executionaboutRestate
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 executionaboutCloudflare 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 executionaboutDurable 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 executionaboutacidic_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 executionaboutHYA
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 executionaboutActive 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 executionaboutTerraform
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 executionaboutHoudini
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 executionaboutNuke
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 executionaboutKora
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 executionaboutPorsche 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 executionaboutGeneva 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 executionaboutStep 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 Driverelated_toSolid 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 Driverelated_toRails 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 KorausesGeneva 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 TUIusesGeneva 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 Stasworks_onPorsche 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 Stasattendedwroclove.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 HYArelated_toHoney 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 Executionfrom_talkAdventures 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 ExecutionaboutDirected 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 Containerfrom_talkAdventures 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 ContaineraboutActive 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 Historyfrom_talkAdventures 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 HistoryaboutGeneva 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 Driveasked_atAdventures 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 DriveaboutGeneva 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 deletionasked_atAdventures 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 deletionaboutGeneva 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 migrationsasked_atAdventures 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 migrationsaboutGeneva 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 overkillasked_atAdventures 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 overkillaboutGeneva 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 historyasked_atAdventures 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 historyaboutGeneva 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 HYAasked_atAdventures 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 HYAaboutGeneva 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 HYAaboutHYA
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