fabro/lib/components
Bryan Helmkamp 25d47ebcd3
Implement Petri's run store over the server's API
`HttpRunStore` is Petri's `RunStore` and `RunLogs` as a worker process
reaches them: over `fabro_client::Client` with the worker's token,
against the server's SQLite store. A run key is a Fabro run id, the
`{id}` of every request, which is the plan's rule that Petri's run key
is Fabro's run id.

The lease rules are the store's. A same-owner reopen shares the live
handle in the process, and the server makes a same-owner reopen after
a lost reply the same lease. Dropping the last handle of an owner sends
`release` on the current Tokio runtime, and the store awaits every such
release before its next open, so a drop followed by an open observes
it. The server's worker-exit release is the backstop.

A reply that never arrives, a transport error or the client's request
timeout, is retried by resending the same request up to three times.
Every request is idempotent on the server, so that is safe; a reply
that did arrive is never retried. Each server error code maps back to
its `StoreError` variant, with the leased owner and the conflict
position read from `meta`.

`fabro_petri::petri` re-exports the store vocabulary for the server,
and the `test-support` feature re-exports Petri's test kit so the
server's tests can run the conformance suite over the wire. Both keep
this crate the one place that names a Petri package.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-17 20:12:20 -04:00
..
fabro-acp Merge origin/main into pebble-agent-loop 2026-09-12 09:40:00 -06:00
fabro-automation Open sandbox provider identity to plugin kinds 2026-09-09 15:17:32 -06:00
fabro-checkpoint Merge remote-tracking branch 'origin/main' into remove/run-metadata-branches 2026-09-12 16:28:01 -06:00
fabro-dump Carry usage as lithos-llm's Usage and rename billing to usage 2026-09-14 12:31:34 -06:00
fabro-environment Open sandbox provider identity to plugin kinds 2026-09-09 15:17:32 -06:00
fabro-github Resolve one Git identity per run and inject it everywhere 2026-09-12 11:35:46 -06:00
fabro-graphviz Merge pull request #686 from fabro-sh/fix/space-separated-node-classes 2026-07-29 22:31:48 -04:00
fabro-hooks Merge origin/main into pebble-agent-loop 2026-09-12 09:40:00 -06:00
fabro-install Open sandbox provider identity to plugin kinds 2026-09-09 15:17:32 -06:00
fabro-interview refactor: remove duplicated review target rendering and validation 2026-07-28 15:14:23 -04:00
fabro-llm Run agent stages, Ask Fabro, and fabro exec on pebble's CodingAgent 2026-09-11 14:19:15 -06:00
fabro-manifest Contain the selected workflow file instead of pre-walking the checkout 2026-09-12 11:48:21 -06:00
fabro-mcp Take MCP servers from pebble 2026-09-11 19:26:41 -06:00
fabro-mcp-store refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
fabro-petri Implement Petri's run store over the server's API 2026-09-17 20:12:20 -04:00
fabro-sandbox Surface dropped Daytona output to the agent as a stderr line 2026-09-14 12:24:02 -06:00
fabro-slack fix: stop a pipe in a link label from splitting Slack link markup 2026-07-28 15:31:20 -04:00
fabro-store Delete fabro's own pricing: lithos-llm prices every response once 2026-09-14 14:46:44 -06:00
fabro-tool Carry usage as lithos-llm's Usage and rename billing to usage 2026-09-14 12:31:34 -06:00
fabro-tracker refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
fabro-validate Answer catalog questions with the lithos catalog queries 2026-09-10 09:26:40 -06:00
fabro-variable refactor: organize crates into three layers 2026-07-23 17:59:34 -04:00
fabro-workflow Delete fabro's own pricing: lithos-llm prices every response once 2026-09-14 14:46:44 -06:00
fabro-workflow-version Share workflow packaging results and validation across callers 2026-09-12 10:15:42 -06:00