From c6464fb6463ab5ed6d73cf91b0c1d11a9e5dcf43 Mon Sep 17 00:00:00 2001 From: Scott Werner Date: Mon, 28 Sep 2026 23:02:34 -0400 Subject: [PATCH 1/6] Restore Daytona container runs and configured resources --- Cargo.lock | 30 ++-- .../src/commands/run/petri_worker.rs | 8 + .../fabro-server/src/server/petri_runs.rs | 1 + lib/components/fabro-petri/src/engine.rs | 40 ++++- lib/components/fabro-petri/tests/daytona.rs | 156 ++++++++++++++++++ lib/components/fabro-petri/tests/hooks.rs | 4 +- .../fabro-petri/tests/support/mod.rs | 2 + 7 files changed, 224 insertions(+), 17 deletions(-) create mode 100644 lib/components/fabro-petri/tests/daytona.rs diff --git a/Cargo.lock b/Cargo.lock index 69ca55681..fe3abe860 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5160,7 +5160,7 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "petri-attractor-steps" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#153d586871824b8023a5691e49a1e99421bae282" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e0e48d6d7f6b6af86e52a25e6abaf250f36874e6" dependencies = [ "async-trait", "globset", @@ -5191,7 +5191,7 @@ dependencies = [ [[package]] name = "petri-driver" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#153d586871824b8023a5691e49a1e99421bae282" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e0e48d6d7f6b6af86e52a25e6abaf250f36874e6" dependencies = [ "async-trait", "getrandom 0.3.4", @@ -5211,7 +5211,7 @@ dependencies = [ [[package]] name = "petri-engine" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#153d586871824b8023a5691e49a1e99421bae282" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e0e48d6d7f6b6af86e52a25e6abaf250f36874e6" dependencies = [ "petri-ir", "serde", @@ -5223,7 +5223,7 @@ dependencies = [ [[package]] name = "petri-execution" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#153d586871824b8023a5691e49a1e99421bae282" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e0e48d6d7f6b6af86e52a25e6abaf250f36874e6" dependencies = [ "async-trait", "petri-driver", @@ -5247,7 +5247,7 @@ dependencies = [ [[package]] name = "petri-executor" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#153d586871824b8023a5691e49a1e99421bae282" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e0e48d6d7f6b6af86e52a25e6abaf250f36874e6" dependencies = [ "async-trait", "libc", @@ -5262,7 +5262,7 @@ dependencies = [ [[package]] name = "petri-executor-sandbox" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#153d586871824b8023a5691e49a1e99421bae282" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e0e48d6d7f6b6af86e52a25e6abaf250f36874e6" dependencies = [ "async-trait", "petri-executor", @@ -5284,7 +5284,7 @@ dependencies = [ [[package]] name = "petri-frontend" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#153d586871824b8023a5691e49a1e99421bae282" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e0e48d6d7f6b6af86e52a25e6abaf250f36874e6" dependencies = [ "marked-yaml", "petri-ir", @@ -5298,7 +5298,7 @@ dependencies = [ [[package]] name = "petri-frontend-attractor" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#153d586871824b8023a5691e49a1e99421bae282" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e0e48d6d7f6b6af86e52a25e6abaf250f36874e6" dependencies = [ "minijinja", "petri-frontend", @@ -5315,7 +5315,7 @@ dependencies = [ [[package]] name = "petri-frontend-fabro" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#153d586871824b8023a5691e49a1e99421bae282" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e0e48d6d7f6b6af86e52a25e6abaf250f36874e6" dependencies = [ "petri-frontend", "petri-frontend-attractor", @@ -5331,7 +5331,7 @@ dependencies = [ [[package]] name = "petri-frontend-native" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#153d586871824b8023a5691e49a1e99421bae282" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e0e48d6d7f6b6af86e52a25e6abaf250f36874e6" dependencies = [ "petri-frontend", "petri-ir", @@ -5342,7 +5342,7 @@ dependencies = [ [[package]] name = "petri-ir" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#153d586871824b8023a5691e49a1e99421bae282" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e0e48d6d7f6b6af86e52a25e6abaf250f36874e6" dependencies = [ "regex", "serde", @@ -5355,7 +5355,7 @@ dependencies = [ [[package]] name = "petri-runtime" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#153d586871824b8023a5691e49a1e99421bae282" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e0e48d6d7f6b6af86e52a25e6abaf250f36874e6" dependencies = [ "async-trait", "petri-driver", @@ -5376,7 +5376,7 @@ dependencies = [ [[package]] name = "petri-steps" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#153d586871824b8023a5691e49a1e99421bae282" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e0e48d6d7f6b6af86e52a25e6abaf250f36874e6" dependencies = [ "async-trait", "petri-executor", @@ -5392,7 +5392,7 @@ dependencies = [ [[package]] name = "petri-store" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#153d586871824b8023a5691e49a1e99421bae282" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e0e48d6d7f6b6af86e52a25e6abaf250f36874e6" dependencies = [ "async-trait", "getrandom 0.3.4", @@ -5407,7 +5407,7 @@ dependencies = [ [[package]] name = "petri-testkit" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#153d586871824b8023a5691e49a1e99421bae282" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e0e48d6d7f6b6af86e52a25e6abaf250f36874e6" dependencies = [ "async-trait", "petri-driver", diff --git a/lib/apps/fabro-cli/src/commands/run/petri_worker.rs b/lib/apps/fabro-cli/src/commands/run/petri_worker.rs index 8e2e4517b..72ab7365e 100644 --- a/lib/apps/fabro-cli/src/commands/run/petri_worker.rs +++ b/lib/apps/fabro-cli/src/commands/run/petri_worker.rs @@ -219,6 +219,14 @@ pub(super) async fn execute(worker: PetriWorker<'_>) -> Result<()> { .environment .provider .clone(), + resources: worker + .run_state + .spec + .settings + .run + .environment + .resources + .clone(), cancel: cancel_token.clone(), controls: controls.clone(), interviewer: Arc::new(petri_interviewer), diff --git a/lib/apps/fabro-server/src/server/petri_runs.rs b/lib/apps/fabro-server/src/server/petri_runs.rs index 9c30a7042..0a7e596a1 100644 --- a/lib/apps/fabro-server/src/server/petri_runs.rs +++ b/lib/apps/fabro-server/src/server/petri_runs.rs @@ -487,6 +487,7 @@ pub(crate) async fn execute(state: Arc, run_id: RunId) { }), runtime, provider: run_state.spec.settings.run.environment.provider.clone(), + resources: run_state.spec.settings.run.environment.resources.clone(), cancel, // The in-process test path drives no pause: the server's transport // for it names the worker. A steer or an interrupt is answered in diff --git a/lib/components/fabro-petri/src/engine.rs b/lib/components/fabro-petri/src/engine.rs index e4f63483b..4d016f846 100644 --- a/lib/components/fabro-petri/src/engine.rs +++ b/lib/components/fabro-petri/src/engine.rs @@ -47,6 +47,8 @@ use std::path::PathBuf; use std::sync::Arc; +use fabro_types::settings::run::EnvironmentResourcesSettings; +use fabro_types::settings::size::Size; use fabro_types::{FailureReason, RunId, SandboxProviderKind}; use petri_execution::host::{self, HostError, HostRun}; use petri_execution::inspect::{self, InspectError, RunInspection}; @@ -57,7 +59,9 @@ use petri_execution::{ use petri_runtime::driver::lifecycle::ExecutionHooks; pub use petri_runtime::executor::Retention; use petri_runtime::executor::SecretProvider; -use petri_runtime::{LostSandbox, RunOptions, SandboxBackend}; +use petri_runtime::{ + DaytonaResources, DaytonaSandboxKind, LostSandbox, RunOptions, SandboxBackend, +}; use tokio::fs; use tokio_util::sync::CancellationToken; use tracing::{debug, info, warn}; @@ -94,6 +98,8 @@ pub struct RunRequest { pub runtime: RuntimeSpec, /// The sandbox provider Fabro resolved for the run's environment. pub provider: SandboxProviderKind, + /// Resolved environment resources for the Daytona runner snapshot. + pub resources: EnvironmentResourcesSettings, /// Fires to cancel the run. pub cancel: CancellationToken, /// The run's pause, unpause and steer controls, which the caller keeps @@ -142,6 +148,8 @@ pub struct RunOutcome { pub enum RunError { #[error("the run's sandbox provider `{provider}` is not one Petri serves")] UnsupportedProvider { provider: SandboxProviderKind }, + #[error("the Daytona CPU allocation must be a non-negative integer: {cpu}")] + InvalidCpu { cpu: i32 }, #[error("the run's record could not be opened")] Open(#[source] petri_store::StoreError), #[error("the run's record could not be read")] @@ -184,6 +192,12 @@ pub async fn run(request: RunRequest) -> Result { options.run_key = Some(key.clone()); options.retention = RETENTION; options.sandbox.backend = backend; + // Fabro runs on Daytona's generally available containers; Petri's VM + // default requires runner capacity that ordinary accounts may not have. + options.sandbox.daytona_kind = DaytonaSandboxKind::Container; + if backend == SandboxBackend::Daytona { + options.sandbox.daytona_resources = daytona_resources(&request.resources)?; + } // Fabro's hooks restore a sandbox workspace from its snapshots at the // scope's acquisition, so a lease whose sandbox is gone gets a fresh // one instead of failing the run. @@ -392,6 +406,30 @@ fn error_chain(error: &RunError) -> String { parts.join(": ") } +/// Keep the configured allocation, leaving an unspecified disk to Daytona. +fn daytona_resources( + settings: &EnvironmentResourcesSettings, +) -> Result { + let defaults = DaytonaResources::default(); + Ok(DaytonaResources { + cpu_cores: settings + .cpu + .map(|cpu| u32::try_from(cpu).map_err(|_| RunError::InvalidCpu { cpu })) + .transpose()? + .unwrap_or(defaults.cpu_cores), + memory_mb: settings + .memory + .map_or(defaults.memory_mb, daytona_mebibytes), + disk_mb: settings.disk.map(daytona_mebibytes), + }) +} + +fn daytona_mebibytes(size: Size) -> u64 { + // Daytona allocates whole GiB. Round up as the driver does before + // Petri validates the minimum and compares the resolved snapshot size. + size.as_bytes().div_ceil(1024 * 1024 * 1024) * 1024 +} + /// The sandbox backend for Fabro's provider kind; `None` for a kind Petri /// does not serve. pub(crate) fn backend(provider: &SandboxProviderKind) -> Option { diff --git a/lib/components/fabro-petri/tests/daytona.rs b/lib/components/fabro-petri/tests/daytona.rs new file mode 100644 index 000000000..3e1a2e39b --- /dev/null +++ b/lib/components/fabro-petri/tests/daytona.rs @@ -0,0 +1,156 @@ +//! Fabro's Daytona selection reaches the provider through Petri's real +//! executor. + +mod support; + +use std::sync::Arc; + +use fabro_petri::check::Launch; +use fabro_petri::engine::{self, RunStatus}; +use fabro_petri::providers::{DaytonaCredentials, SandboxProviderConfig}; +use fabro_petri::runtime::RuntimeSpec; +use fabro_types::SandboxProviderKind; +use fabro_types::settings::run::EnvironmentResourcesSettings; +use httpmock::prelude::*; +use petri_store::MemoryRunStore; +use serde_json::json; + +#[tokio::test] +async fn daytona_runs_request_container_runner_snapshots() { + assert_snapshot_request(EnvironmentResourcesSettings::default(), 2, 4, None).await; +} + +#[tokio::test] +async fn daytona_runs_forward_configured_resources_in_provider_units() { + assert_snapshot_request( + EnvironmentResourcesSettings { + cpu: Some(4), + memory: Some("6GB".parse().unwrap()), + disk: Some("8GB".parse().unwrap()), + }, + 4, + 6, + Some(8), + ) + .await; +} + +#[tokio::test] +async fn daytona_decimal_memory_meets_the_runner_minimum_without_defaulting_disk() { + assert_snapshot_request( + EnvironmentResourcesSettings { + cpu: Some(2), + memory: Some("4GB".parse().unwrap()), + disk: None, + }, + 2, + 4, + None, + ) + .await; +} + +async fn assert_snapshot_request( + resources: EnvironmentResourcesSettings, + cpu: u32, + memory: u64, + disk: Option, +) { + let server = MockServer::start_async().await; + server + .mock_async(|when, then| { + when.method(GET).path("/api-keys/current"); + then.status(200) + .header("content-type", "application/json") + .json_body(json!({ + "name": "test-key", + "organizationId": "test-org", + "permissions": [ + "write:snapshots", "delete:snapshots", + "write:sandboxes", "delete:sandboxes" + ] + })); + }) + .await; + server + .mock_async(|when, then| { + when.method(GET).path("/sandbox"); + then.status(200) + .header("content-type", "application/json") + .json_body(json!({"items": [], "nextCursor": null})); + }) + .await; + server + .mock_async(|when, then| { + when.method(GET).path_matches(r"^/snapshots/[^/]+$"); + then.status(404) + .header("content-type", "application/json") + .json_body(json!({"message": "not found"})); + }) + .await; + let create = server + .mock_async(|when, then| { + when.method(POST) + .path("/snapshots") + .json_body_includes( + json!({"sandboxClass": "container", "cpu": cpu, "memory": memory}).to_string(), + ) + .is_true(move |request| { + let Ok(body) = serde_json::from_slice::(request.body_ref()) + else { + return false; + }; + match disk { + Some(disk) => body.get("disk") == Some(&json!(disk)), + None => body.get("disk").is_none(), + } + }); + // Stop at the provider boundary: this test proves the wire + // contract without creating a sandbox or simulating its shell. + then.status(400) + .header("content-type", "application/json") + .json_body(json!({"message": "snapshot creation stopped by test"})); + }) + .await; + let credentials = DaytonaCredentials::new("test-key".to_string()) + .with_api_url(Some(server.base_url())) + .with_http_client(Some(fabro_test::test_http_client())); + let runtime = RuntimeSpec { + sandbox: SandboxProviderConfig::from_lookup(Some(credentials), |_| None), + ..RuntimeSpec::default() + }; + let graphs = support::admit( + &[ + ("workflow.toml", support::SETTINGS), + ( + "workflow.fabro", + r#"digraph Smoke { + start [shape=Mdiamond] + work [shape=parallelogram, script="echo smoke"] + exit [shape=Msquare] + start -> work -> exit + }"#, + ), + ], + Launch::default(), + &runtime, + ); + let root = tempfile::tempdir().expect("a temporary run directory"); + let mut request = support::run_request( + "daytona-container", + root.path(), + graphs, + Arc::new(MemoryRunStore::new()), + runtime, + support::no_questions(Arc::new(support::Silent)), + ); + request.provider = SandboxProviderKind::DAYTONA; + request.resources = resources; + + let outcome = engine::run(request) + .await + .expect("the run records its failure"); + + assert_eq!(create.calls_async().await, 1, "{outcome:?}"); + assert_eq!(outcome.status, RunStatus::Failed); +} diff --git a/lib/components/fabro-petri/tests/hooks.rs b/lib/components/fabro-petri/tests/hooks.rs index 6d2b1c80d..1139745c9 100644 --- a/lib/components/fabro-petri/tests/hooks.rs +++ b/lib/components/fabro-petri/tests/hooks.rs @@ -34,7 +34,7 @@ use fabro_petri::recovery::{self, Recovery, RecoveryRequest}; use fabro_petri::runtime::RuntimeSpec; use fabro_petri::test_support::{MemoryBlobs, MemoryPlatformRecords}; use fabro_store::{ArtifactStore, PlatformRecord, PlatformRecordKind}; -use fabro_types::settings::run::RunCheckpointSettings; +use fabro_types::settings::run::{EnvironmentResourcesSettings, RunCheckpointSettings}; use fabro_types::{GitIdentitySource, RunId, SandboxProviderKind}; use object_store::local::LocalFileSystem; use petri_execution::inspect::{self, RunInspection}; @@ -163,6 +163,7 @@ impl Harness { ..RuntimeSpec::default() }, provider, + resources: EnvironmentResourcesSettings::default(), cancel: CancellationToken::new(), controls: RunControls::new(), interviewer, @@ -827,6 +828,7 @@ async fn a_run_hook_blocks_a_tool_effect_through_the_forwarded_service() { ..RuntimeSpec::default() }, provider: SandboxProviderKind::LOCAL, + resources: EnvironmentResourcesSettings::default(), cancel: CancellationToken::new(), controls: RunControls::new(), interviewer, diff --git a/lib/components/fabro-petri/tests/support/mod.rs b/lib/components/fabro-petri/tests/support/mod.rs index 0bc63d1cf..eaefa21e1 100644 --- a/lib/components/fabro-petri/tests/support/mod.rs +++ b/lib/components/fabro-petri/tests/support/mod.rs @@ -19,6 +19,7 @@ use fabro_petri::engine::{Execution, RunRequest}; use fabro_petri::interview::{Approval, FabroInterviewer, QuestionNotice, QuestionSink}; use fabro_petri::runtime::RuntimeSpec; use fabro_types::SandboxProviderKind; +use fabro_types::settings::run::EnvironmentResourcesSettings; use petri_execution::inspect; use petri_store::{Access, LogId, RunKey, RunStore}; use tokio::time::sleep; @@ -84,6 +85,7 @@ pub(crate) fn run_request( store, runtime, provider: SandboxProviderKind::LOCAL, + resources: EnvironmentResourcesSettings::default(), cancel: CancellationToken::new(), controls: RunControls::new(), observers: vec![interviewer.observer()], From cae2a7fcdda6d713911f1a6693314e9e16b1fd27 Mon Sep 17 00:00:00 2001 From: Scott Werner Date: Tue, 29 Sep 2026 11:26:08 -0400 Subject: [PATCH 2/6] Inherit Petri container defaults and preserve resource overrides --- Cargo.lock | 30 ++++++++++----------- lib/components/fabro-petri/src/engine.rs | 11 +++----- lib/components/fabro-petri/tests/daytona.rs | 14 ++++++++++ 3 files changed, 32 insertions(+), 23 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index fe3abe860..ce43fa28c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5160,7 +5160,7 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "petri-attractor-steps" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e0e48d6d7f6b6af86e52a25e6abaf250f36874e6" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#9925996f8ce751a38fe03b03723fff869a8eb153" dependencies = [ "async-trait", "globset", @@ -5191,7 +5191,7 @@ dependencies = [ [[package]] name = "petri-driver" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e0e48d6d7f6b6af86e52a25e6abaf250f36874e6" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#9925996f8ce751a38fe03b03723fff869a8eb153" dependencies = [ "async-trait", "getrandom 0.3.4", @@ -5211,7 +5211,7 @@ dependencies = [ [[package]] name = "petri-engine" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e0e48d6d7f6b6af86e52a25e6abaf250f36874e6" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#9925996f8ce751a38fe03b03723fff869a8eb153" dependencies = [ "petri-ir", "serde", @@ -5223,7 +5223,7 @@ dependencies = [ [[package]] name = "petri-execution" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e0e48d6d7f6b6af86e52a25e6abaf250f36874e6" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#9925996f8ce751a38fe03b03723fff869a8eb153" dependencies = [ "async-trait", "petri-driver", @@ -5247,7 +5247,7 @@ dependencies = [ [[package]] name = "petri-executor" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e0e48d6d7f6b6af86e52a25e6abaf250f36874e6" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#9925996f8ce751a38fe03b03723fff869a8eb153" dependencies = [ "async-trait", "libc", @@ -5262,7 +5262,7 @@ dependencies = [ [[package]] name = "petri-executor-sandbox" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e0e48d6d7f6b6af86e52a25e6abaf250f36874e6" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#9925996f8ce751a38fe03b03723fff869a8eb153" dependencies = [ "async-trait", "petri-executor", @@ -5284,7 +5284,7 @@ dependencies = [ [[package]] name = "petri-frontend" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e0e48d6d7f6b6af86e52a25e6abaf250f36874e6" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#9925996f8ce751a38fe03b03723fff869a8eb153" dependencies = [ "marked-yaml", "petri-ir", @@ -5298,7 +5298,7 @@ dependencies = [ [[package]] name = "petri-frontend-attractor" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e0e48d6d7f6b6af86e52a25e6abaf250f36874e6" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#9925996f8ce751a38fe03b03723fff869a8eb153" dependencies = [ "minijinja", "petri-frontend", @@ -5315,7 +5315,7 @@ dependencies = [ [[package]] name = "petri-frontend-fabro" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e0e48d6d7f6b6af86e52a25e6abaf250f36874e6" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#9925996f8ce751a38fe03b03723fff869a8eb153" dependencies = [ "petri-frontend", "petri-frontend-attractor", @@ -5331,7 +5331,7 @@ dependencies = [ [[package]] name = "petri-frontend-native" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e0e48d6d7f6b6af86e52a25e6abaf250f36874e6" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#9925996f8ce751a38fe03b03723fff869a8eb153" dependencies = [ "petri-frontend", "petri-ir", @@ -5342,7 +5342,7 @@ dependencies = [ [[package]] name = "petri-ir" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e0e48d6d7f6b6af86e52a25e6abaf250f36874e6" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#9925996f8ce751a38fe03b03723fff869a8eb153" dependencies = [ "regex", "serde", @@ -5355,7 +5355,7 @@ dependencies = [ [[package]] name = "petri-runtime" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e0e48d6d7f6b6af86e52a25e6abaf250f36874e6" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#9925996f8ce751a38fe03b03723fff869a8eb153" dependencies = [ "async-trait", "petri-driver", @@ -5376,7 +5376,7 @@ dependencies = [ [[package]] name = "petri-steps" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e0e48d6d7f6b6af86e52a25e6abaf250f36874e6" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#9925996f8ce751a38fe03b03723fff869a8eb153" dependencies = [ "async-trait", "petri-executor", @@ -5392,7 +5392,7 @@ dependencies = [ [[package]] name = "petri-store" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e0e48d6d7f6b6af86e52a25e6abaf250f36874e6" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#9925996f8ce751a38fe03b03723fff869a8eb153" dependencies = [ "async-trait", "getrandom 0.3.4", @@ -5407,7 +5407,7 @@ dependencies = [ [[package]] name = "petri-testkit" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e0e48d6d7f6b6af86e52a25e6abaf250f36874e6" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#9925996f8ce751a38fe03b03723fff869a8eb153" dependencies = [ "async-trait", "petri-driver", diff --git a/lib/components/fabro-petri/src/engine.rs b/lib/components/fabro-petri/src/engine.rs index 4d016f846..4174ba915 100644 --- a/lib/components/fabro-petri/src/engine.rs +++ b/lib/components/fabro-petri/src/engine.rs @@ -59,9 +59,7 @@ use petri_execution::{ use petri_runtime::driver::lifecycle::ExecutionHooks; pub use petri_runtime::executor::Retention; use petri_runtime::executor::SecretProvider; -use petri_runtime::{ - DaytonaResources, DaytonaSandboxKind, LostSandbox, RunOptions, SandboxBackend, -}; +use petri_runtime::{DaytonaResources, LostSandbox, RunOptions, SandboxBackend}; use tokio::fs; use tokio_util::sync::CancellationToken; use tracing::{debug, info, warn}; @@ -192,9 +190,6 @@ pub async fn run(request: RunRequest) -> Result { options.run_key = Some(key.clone()); options.retention = RETENTION; options.sandbox.backend = backend; - // Fabro runs on Daytona's generally available containers; Petri's VM - // default requires runner capacity that ordinary accounts may not have. - options.sandbox.daytona_kind = DaytonaSandboxKind::Container; if backend == SandboxBackend::Daytona { options.sandbox.daytona_resources = daytona_resources(&request.resources)?; } @@ -406,7 +401,7 @@ fn error_chain(error: &RunError) -> String { parts.join(": ") } -/// Keep the configured allocation, leaving an unspecified disk to Daytona. +/// Overlay Fabro's configured allocation on Petri's runner defaults. fn daytona_resources( settings: &EnvironmentResourcesSettings, ) -> Result { @@ -420,7 +415,7 @@ fn daytona_resources( memory_mb: settings .memory .map_or(defaults.memory_mb, daytona_mebibytes), - disk_mb: settings.disk.map(daytona_mebibytes), + disk_mb: settings.disk.map(daytona_mebibytes).or(defaults.disk_mb), }) } diff --git a/lib/components/fabro-petri/tests/daytona.rs b/lib/components/fabro-petri/tests/daytona.rs index 3e1a2e39b..8d4c72e5d 100644 --- a/lib/components/fabro-petri/tests/daytona.rs +++ b/lib/components/fabro-petri/tests/daytona.rs @@ -35,6 +35,20 @@ async fn daytona_runs_forward_configured_resources_in_provider_units() { .await; } +#[tokio::test] +async fn daytona_accepts_an_explicit_disk_matching_the_provider_default() { + assert_snapshot_request( + EnvironmentResourcesSettings { + disk: Some("3GB".parse().unwrap()), + ..EnvironmentResourcesSettings::default() + }, + 2, + 4, + Some(3), + ) + .await; +} + #[tokio::test] async fn daytona_decimal_memory_meets_the_runner_minimum_without_defaulting_disk() { assert_snapshot_request( From 2ceea5e62dd61ddcc95faf0d986ffe1c70c585cf Mon Sep 17 00:00:00 2001 From: Scott Werner Date: Tue, 29 Sep 2026 12:45:33 -0400 Subject: [PATCH 3/6] Update Petri lock to CI-fixed Daytona defaults revision --- Cargo.lock | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ce43fa28c..247274245 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5160,7 +5160,7 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "petri-attractor-steps" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#9925996f8ce751a38fe03b03723fff869a8eb153" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#f7217d1746fd489a18c8c4e111dace1e4aa48246" dependencies = [ "async-trait", "globset", @@ -5191,7 +5191,7 @@ dependencies = [ [[package]] name = "petri-driver" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#9925996f8ce751a38fe03b03723fff869a8eb153" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#f7217d1746fd489a18c8c4e111dace1e4aa48246" dependencies = [ "async-trait", "getrandom 0.3.4", @@ -5211,7 +5211,7 @@ dependencies = [ [[package]] name = "petri-engine" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#9925996f8ce751a38fe03b03723fff869a8eb153" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#f7217d1746fd489a18c8c4e111dace1e4aa48246" dependencies = [ "petri-ir", "serde", @@ -5223,7 +5223,7 @@ dependencies = [ [[package]] name = "petri-execution" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#9925996f8ce751a38fe03b03723fff869a8eb153" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#f7217d1746fd489a18c8c4e111dace1e4aa48246" dependencies = [ "async-trait", "petri-driver", @@ -5247,7 +5247,7 @@ dependencies = [ [[package]] name = "petri-executor" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#9925996f8ce751a38fe03b03723fff869a8eb153" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#f7217d1746fd489a18c8c4e111dace1e4aa48246" dependencies = [ "async-trait", "libc", @@ -5262,7 +5262,7 @@ dependencies = [ [[package]] name = "petri-executor-sandbox" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#9925996f8ce751a38fe03b03723fff869a8eb153" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#f7217d1746fd489a18c8c4e111dace1e4aa48246" dependencies = [ "async-trait", "petri-executor", @@ -5284,7 +5284,7 @@ dependencies = [ [[package]] name = "petri-frontend" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#9925996f8ce751a38fe03b03723fff869a8eb153" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#f7217d1746fd489a18c8c4e111dace1e4aa48246" dependencies = [ "marked-yaml", "petri-ir", @@ -5298,7 +5298,7 @@ dependencies = [ [[package]] name = "petri-frontend-attractor" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#9925996f8ce751a38fe03b03723fff869a8eb153" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#f7217d1746fd489a18c8c4e111dace1e4aa48246" dependencies = [ "minijinja", "petri-frontend", @@ -5315,7 +5315,7 @@ dependencies = [ [[package]] name = "petri-frontend-fabro" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#9925996f8ce751a38fe03b03723fff869a8eb153" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#f7217d1746fd489a18c8c4e111dace1e4aa48246" dependencies = [ "petri-frontend", "petri-frontend-attractor", @@ -5331,7 +5331,7 @@ dependencies = [ [[package]] name = "petri-frontend-native" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#9925996f8ce751a38fe03b03723fff869a8eb153" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#f7217d1746fd489a18c8c4e111dace1e4aa48246" dependencies = [ "petri-frontend", "petri-ir", @@ -5342,7 +5342,7 @@ dependencies = [ [[package]] name = "petri-ir" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#9925996f8ce751a38fe03b03723fff869a8eb153" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#f7217d1746fd489a18c8c4e111dace1e4aa48246" dependencies = [ "regex", "serde", @@ -5355,7 +5355,7 @@ dependencies = [ [[package]] name = "petri-runtime" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#9925996f8ce751a38fe03b03723fff869a8eb153" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#f7217d1746fd489a18c8c4e111dace1e4aa48246" dependencies = [ "async-trait", "petri-driver", @@ -5376,7 +5376,7 @@ dependencies = [ [[package]] name = "petri-steps" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#9925996f8ce751a38fe03b03723fff869a8eb153" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#f7217d1746fd489a18c8c4e111dace1e4aa48246" dependencies = [ "async-trait", "petri-executor", @@ -5392,7 +5392,7 @@ dependencies = [ [[package]] name = "petri-store" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#9925996f8ce751a38fe03b03723fff869a8eb153" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#f7217d1746fd489a18c8c4e111dace1e4aa48246" dependencies = [ "async-trait", "getrandom 0.3.4", @@ -5407,7 +5407,7 @@ dependencies = [ [[package]] name = "petri-testkit" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#9925996f8ce751a38fe03b03723fff869a8eb153" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#f7217d1746fd489a18c8c4e111dace1e4aa48246" dependencies = [ "async-trait", "petri-driver", From d4bb266a521d58647f7f146b481458090a337bf8 Mon Sep 17 00:00:00 2001 From: Scott Werner Date: Tue, 29 Sep 2026 13:11:24 -0400 Subject: [PATCH 4/6] Use merged Petri Daytona defaults --- Cargo.lock | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 247274245..dc31738a0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5160,7 +5160,7 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "petri-attractor-steps" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#f7217d1746fd489a18c8c4e111dace1e4aa48246" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e9ed5528eb93d36d55939bff611446ab81d6b0b4" dependencies = [ "async-trait", "globset", @@ -5191,7 +5191,7 @@ dependencies = [ [[package]] name = "petri-driver" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#f7217d1746fd489a18c8c4e111dace1e4aa48246" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e9ed5528eb93d36d55939bff611446ab81d6b0b4" dependencies = [ "async-trait", "getrandom 0.3.4", @@ -5211,7 +5211,7 @@ dependencies = [ [[package]] name = "petri-engine" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#f7217d1746fd489a18c8c4e111dace1e4aa48246" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e9ed5528eb93d36d55939bff611446ab81d6b0b4" dependencies = [ "petri-ir", "serde", @@ -5223,7 +5223,7 @@ dependencies = [ [[package]] name = "petri-execution" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#f7217d1746fd489a18c8c4e111dace1e4aa48246" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e9ed5528eb93d36d55939bff611446ab81d6b0b4" dependencies = [ "async-trait", "petri-driver", @@ -5247,7 +5247,7 @@ dependencies = [ [[package]] name = "petri-executor" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#f7217d1746fd489a18c8c4e111dace1e4aa48246" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e9ed5528eb93d36d55939bff611446ab81d6b0b4" dependencies = [ "async-trait", "libc", @@ -5262,7 +5262,7 @@ dependencies = [ [[package]] name = "petri-executor-sandbox" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#f7217d1746fd489a18c8c4e111dace1e4aa48246" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e9ed5528eb93d36d55939bff611446ab81d6b0b4" dependencies = [ "async-trait", "petri-executor", @@ -5284,7 +5284,7 @@ dependencies = [ [[package]] name = "petri-frontend" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#f7217d1746fd489a18c8c4e111dace1e4aa48246" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e9ed5528eb93d36d55939bff611446ab81d6b0b4" dependencies = [ "marked-yaml", "petri-ir", @@ -5298,7 +5298,7 @@ dependencies = [ [[package]] name = "petri-frontend-attractor" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#f7217d1746fd489a18c8c4e111dace1e4aa48246" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e9ed5528eb93d36d55939bff611446ab81d6b0b4" dependencies = [ "minijinja", "petri-frontend", @@ -5315,7 +5315,7 @@ dependencies = [ [[package]] name = "petri-frontend-fabro" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#f7217d1746fd489a18c8c4e111dace1e4aa48246" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e9ed5528eb93d36d55939bff611446ab81d6b0b4" dependencies = [ "petri-frontend", "petri-frontend-attractor", @@ -5331,7 +5331,7 @@ dependencies = [ [[package]] name = "petri-frontend-native" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#f7217d1746fd489a18c8c4e111dace1e4aa48246" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e9ed5528eb93d36d55939bff611446ab81d6b0b4" dependencies = [ "petri-frontend", "petri-ir", @@ -5342,7 +5342,7 @@ dependencies = [ [[package]] name = "petri-ir" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#f7217d1746fd489a18c8c4e111dace1e4aa48246" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e9ed5528eb93d36d55939bff611446ab81d6b0b4" dependencies = [ "regex", "serde", @@ -5355,7 +5355,7 @@ dependencies = [ [[package]] name = "petri-runtime" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#f7217d1746fd489a18c8c4e111dace1e4aa48246" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e9ed5528eb93d36d55939bff611446ab81d6b0b4" dependencies = [ "async-trait", "petri-driver", @@ -5376,7 +5376,7 @@ dependencies = [ [[package]] name = "petri-steps" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#f7217d1746fd489a18c8c4e111dace1e4aa48246" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e9ed5528eb93d36d55939bff611446ab81d6b0b4" dependencies = [ "async-trait", "petri-executor", @@ -5392,7 +5392,7 @@ dependencies = [ [[package]] name = "petri-store" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#f7217d1746fd489a18c8c4e111dace1e4aa48246" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e9ed5528eb93d36d55939bff611446ab81d6b0b4" dependencies = [ "async-trait", "getrandom 0.3.4", @@ -5407,7 +5407,7 @@ dependencies = [ [[package]] name = "petri-testkit" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#f7217d1746fd489a18c8c4e111dace1e4aa48246" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e9ed5528eb93d36d55939bff611446ab81d6b0b4" dependencies = [ "async-trait", "petri-driver", From c7c8e2cf79f6bdf79c5413ddd7ebac4c9f6e54de Mon Sep 17 00:00:00 2001 From: Scott Werner Date: Tue, 29 Sep 2026 14:19:35 -0400 Subject: [PATCH 5/6] Delegate Daytona allocation normalization to the driver --- Cargo.lock | 46 ++++++++++++------------ lib/components/fabro-petri/src/engine.rs | 12 +++---- 2 files changed, 27 insertions(+), 31 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index dc31738a0..b78552721 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5160,7 +5160,7 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "petri-attractor-steps" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e9ed5528eb93d36d55939bff611446ab81d6b0b4" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#58f910709e77f297b4c819f200d509df51dd91d4" dependencies = [ "async-trait", "globset", @@ -5191,7 +5191,7 @@ dependencies = [ [[package]] name = "petri-driver" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e9ed5528eb93d36d55939bff611446ab81d6b0b4" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#58f910709e77f297b4c819f200d509df51dd91d4" dependencies = [ "async-trait", "getrandom 0.3.4", @@ -5211,7 +5211,7 @@ dependencies = [ [[package]] name = "petri-engine" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e9ed5528eb93d36d55939bff611446ab81d6b0b4" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#58f910709e77f297b4c819f200d509df51dd91d4" dependencies = [ "petri-ir", "serde", @@ -5223,7 +5223,7 @@ dependencies = [ [[package]] name = "petri-execution" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e9ed5528eb93d36d55939bff611446ab81d6b0b4" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#58f910709e77f297b4c819f200d509df51dd91d4" dependencies = [ "async-trait", "petri-driver", @@ -5247,7 +5247,7 @@ dependencies = [ [[package]] name = "petri-executor" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e9ed5528eb93d36d55939bff611446ab81d6b0b4" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#58f910709e77f297b4c819f200d509df51dd91d4" dependencies = [ "async-trait", "libc", @@ -5262,7 +5262,7 @@ dependencies = [ [[package]] name = "petri-executor-sandbox" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e9ed5528eb93d36d55939bff611446ab81d6b0b4" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#58f910709e77f297b4c819f200d509df51dd91d4" dependencies = [ "async-trait", "petri-executor", @@ -5284,7 +5284,7 @@ dependencies = [ [[package]] name = "petri-frontend" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e9ed5528eb93d36d55939bff611446ab81d6b0b4" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#58f910709e77f297b4c819f200d509df51dd91d4" dependencies = [ "marked-yaml", "petri-ir", @@ -5298,7 +5298,7 @@ dependencies = [ [[package]] name = "petri-frontend-attractor" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e9ed5528eb93d36d55939bff611446ab81d6b0b4" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#58f910709e77f297b4c819f200d509df51dd91d4" dependencies = [ "minijinja", "petri-frontend", @@ -5315,7 +5315,7 @@ dependencies = [ [[package]] name = "petri-frontend-fabro" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e9ed5528eb93d36d55939bff611446ab81d6b0b4" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#58f910709e77f297b4c819f200d509df51dd91d4" dependencies = [ "petri-frontend", "petri-frontend-attractor", @@ -5331,7 +5331,7 @@ dependencies = [ [[package]] name = "petri-frontend-native" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e9ed5528eb93d36d55939bff611446ab81d6b0b4" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#58f910709e77f297b4c819f200d509df51dd91d4" dependencies = [ "petri-frontend", "petri-ir", @@ -5342,7 +5342,7 @@ dependencies = [ [[package]] name = "petri-ir" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e9ed5528eb93d36d55939bff611446ab81d6b0b4" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#58f910709e77f297b4c819f200d509df51dd91d4" dependencies = [ "regex", "serde", @@ -5355,7 +5355,7 @@ dependencies = [ [[package]] name = "petri-runtime" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e9ed5528eb93d36d55939bff611446ab81d6b0b4" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#58f910709e77f297b4c819f200d509df51dd91d4" dependencies = [ "async-trait", "petri-driver", @@ -5376,7 +5376,7 @@ dependencies = [ [[package]] name = "petri-steps" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e9ed5528eb93d36d55939bff611446ab81d6b0b4" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#58f910709e77f297b4c819f200d509df51dd91d4" dependencies = [ "async-trait", "petri-executor", @@ -5392,7 +5392,7 @@ dependencies = [ [[package]] name = "petri-store" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e9ed5528eb93d36d55939bff611446ab81d6b0b4" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#58f910709e77f297b4c819f200d509df51dd91d4" dependencies = [ "async-trait", "getrandom 0.3.4", @@ -5407,7 +5407,7 @@ dependencies = [ [[package]] name = "petri-testkit" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#e9ed5528eb93d36d55939bff611446ab81d6b0b4" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#58f910709e77f297b4c819f200d509df51dd91d4" dependencies = [ "async-trait", "petri-driver", @@ -6287,7 +6287,7 @@ dependencies = [ [[package]] name = "sandbox-driver" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/sandbox-driver?branch=main#236196ed134dd594e7678e38ebbe968097f1935c" +source = "git+https://github.com/lithoscomputer/sandbox-driver?branch=main#b6b5c9c207a510e41c01bcbce4203f489bf734fc" dependencies = [ "async-trait", "globset", @@ -6304,7 +6304,7 @@ dependencies = [ [[package]] name = "sandbox-driver-daytona" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/sandbox-driver?branch=main#236196ed134dd594e7678e38ebbe968097f1935c" +source = "git+https://github.com/lithoscomputer/sandbox-driver?branch=main#b6b5c9c207a510e41c01bcbce4203f489bf734fc" dependencies = [ "anyhow", "async-trait", @@ -6332,7 +6332,7 @@ dependencies = [ [[package]] name = "sandbox-driver-daytona-config" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/sandbox-driver?branch=main#236196ed134dd594e7678e38ebbe968097f1935c" +source = "git+https://github.com/lithoscomputer/sandbox-driver?branch=main#b6b5c9c207a510e41c01bcbce4203f489bf734fc" dependencies = [ "sandbox-driver-docker-config", "serde", @@ -6342,7 +6342,7 @@ dependencies = [ [[package]] name = "sandbox-driver-docker" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/sandbox-driver?branch=main#236196ed134dd594e7678e38ebbe968097f1935c" +source = "git+https://github.com/lithoscomputer/sandbox-driver?branch=main#b6b5c9c207a510e41c01bcbce4203f489bf734fc" dependencies = [ "anyhow", "async-trait", @@ -6363,7 +6363,7 @@ dependencies = [ [[package]] name = "sandbox-driver-docker-config" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/sandbox-driver?branch=main#236196ed134dd594e7678e38ebbe968097f1935c" +source = "git+https://github.com/lithoscomputer/sandbox-driver?branch=main#b6b5c9c207a510e41c01bcbce4203f489bf734fc" dependencies = [ "serde", "serde_json", @@ -6372,7 +6372,7 @@ dependencies = [ [[package]] name = "sandbox-driver-host" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/sandbox-driver?branch=main#236196ed134dd594e7678e38ebbe968097f1935c" +source = "git+https://github.com/lithoscomputer/sandbox-driver?branch=main#b6b5c9c207a510e41c01bcbce4203f489bf734fc" dependencies = [ "anyhow", "async-trait", @@ -6390,7 +6390,7 @@ dependencies = [ [[package]] name = "sandbox-driver-protocol" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/sandbox-driver?branch=main#236196ed134dd594e7678e38ebbe968097f1935c" +source = "git+https://github.com/lithoscomputer/sandbox-driver?branch=main#b6b5c9c207a510e41c01bcbce4203f489bf734fc" dependencies = [ "async-trait", "base64", @@ -6407,7 +6407,7 @@ dependencies = [ [[package]] name = "sandbox-driver-testing" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/sandbox-driver?branch=main#236196ed134dd594e7678e38ebbe968097f1935c" +source = "git+https://github.com/lithoscomputer/sandbox-driver?branch=main#b6b5c9c207a510e41c01bcbce4203f489bf734fc" dependencies = [ "async-trait", "sandbox-driver", diff --git a/lib/components/fabro-petri/src/engine.rs b/lib/components/fabro-petri/src/engine.rs index 4174ba915..0f8ce5129 100644 --- a/lib/components/fabro-petri/src/engine.rs +++ b/lib/components/fabro-petri/src/engine.rs @@ -412,17 +412,13 @@ fn daytona_resources( .map(|cpu| u32::try_from(cpu).map_err(|_| RunError::InvalidCpu { cpu })) .transpose()? .unwrap_or(defaults.cpu_cores), - memory_mb: settings - .memory - .map_or(defaults.memory_mb, daytona_mebibytes), - disk_mb: settings.disk.map(daytona_mebibytes).or(defaults.disk_mb), + memory_mb: settings.memory.map_or(defaults.memory_mb, mebibytes), + disk_mb: settings.disk.map(mebibytes).or(defaults.disk_mb), }) } -fn daytona_mebibytes(size: Size) -> u64 { - // Daytona allocates whole GiB. Round up as the driver does before - // Petri validates the minimum and compares the resolved snapshot size. - size.as_bytes().div_ceil(1024 * 1024 * 1024) * 1024 +fn mebibytes(size: Size) -> u64 { + size.as_bytes().div_ceil(1024 * 1024) } /// The sandbox backend for Fabro's provider kind; `None` for a kind Petri From f53a387630ecfee6b4ff8ba388e0bbbb91ee7c87 Mon Sep 17 00:00:00 2001 From: Scott Werner Date: Tue, 29 Sep 2026 15:25:07 -0400 Subject: [PATCH 6/6] Use merged Petri and Daytona driver revisions --- Cargo.lock | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b78552721..29bf74b54 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5160,7 +5160,7 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "petri-attractor-steps" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#58f910709e77f297b4c819f200d509df51dd91d4" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#98144f107fcdd290a44699a8e76abf6e6f63fe2a" dependencies = [ "async-trait", "globset", @@ -5191,7 +5191,7 @@ dependencies = [ [[package]] name = "petri-driver" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#58f910709e77f297b4c819f200d509df51dd91d4" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#98144f107fcdd290a44699a8e76abf6e6f63fe2a" dependencies = [ "async-trait", "getrandom 0.3.4", @@ -5211,7 +5211,7 @@ dependencies = [ [[package]] name = "petri-engine" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#58f910709e77f297b4c819f200d509df51dd91d4" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#98144f107fcdd290a44699a8e76abf6e6f63fe2a" dependencies = [ "petri-ir", "serde", @@ -5223,7 +5223,7 @@ dependencies = [ [[package]] name = "petri-execution" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#58f910709e77f297b4c819f200d509df51dd91d4" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#98144f107fcdd290a44699a8e76abf6e6f63fe2a" dependencies = [ "async-trait", "petri-driver", @@ -5247,7 +5247,7 @@ dependencies = [ [[package]] name = "petri-executor" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#58f910709e77f297b4c819f200d509df51dd91d4" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#98144f107fcdd290a44699a8e76abf6e6f63fe2a" dependencies = [ "async-trait", "libc", @@ -5262,7 +5262,7 @@ dependencies = [ [[package]] name = "petri-executor-sandbox" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#58f910709e77f297b4c819f200d509df51dd91d4" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#98144f107fcdd290a44699a8e76abf6e6f63fe2a" dependencies = [ "async-trait", "petri-executor", @@ -5284,7 +5284,7 @@ dependencies = [ [[package]] name = "petri-frontend" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#58f910709e77f297b4c819f200d509df51dd91d4" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#98144f107fcdd290a44699a8e76abf6e6f63fe2a" dependencies = [ "marked-yaml", "petri-ir", @@ -5298,7 +5298,7 @@ dependencies = [ [[package]] name = "petri-frontend-attractor" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#58f910709e77f297b4c819f200d509df51dd91d4" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#98144f107fcdd290a44699a8e76abf6e6f63fe2a" dependencies = [ "minijinja", "petri-frontend", @@ -5315,7 +5315,7 @@ dependencies = [ [[package]] name = "petri-frontend-fabro" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#58f910709e77f297b4c819f200d509df51dd91d4" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#98144f107fcdd290a44699a8e76abf6e6f63fe2a" dependencies = [ "petri-frontend", "petri-frontend-attractor", @@ -5331,7 +5331,7 @@ dependencies = [ [[package]] name = "petri-frontend-native" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#58f910709e77f297b4c819f200d509df51dd91d4" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#98144f107fcdd290a44699a8e76abf6e6f63fe2a" dependencies = [ "petri-frontend", "petri-ir", @@ -5342,7 +5342,7 @@ dependencies = [ [[package]] name = "petri-ir" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#58f910709e77f297b4c819f200d509df51dd91d4" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#98144f107fcdd290a44699a8e76abf6e6f63fe2a" dependencies = [ "regex", "serde", @@ -5355,7 +5355,7 @@ dependencies = [ [[package]] name = "petri-runtime" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#58f910709e77f297b4c819f200d509df51dd91d4" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#98144f107fcdd290a44699a8e76abf6e6f63fe2a" dependencies = [ "async-trait", "petri-driver", @@ -5376,7 +5376,7 @@ dependencies = [ [[package]] name = "petri-steps" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#58f910709e77f297b4c819f200d509df51dd91d4" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#98144f107fcdd290a44699a8e76abf6e6f63fe2a" dependencies = [ "async-trait", "petri-executor", @@ -5392,7 +5392,7 @@ dependencies = [ [[package]] name = "petri-store" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#58f910709e77f297b4c819f200d509df51dd91d4" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#98144f107fcdd290a44699a8e76abf6e6f63fe2a" dependencies = [ "async-trait", "getrandom 0.3.4", @@ -5407,7 +5407,7 @@ dependencies = [ [[package]] name = "petri-testkit" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/petri.git?branch=main#58f910709e77f297b4c819f200d509df51dd91d4" +source = "git+https://github.com/lithoscomputer/petri.git?branch=main#98144f107fcdd290a44699a8e76abf6e6f63fe2a" dependencies = [ "async-trait", "petri-driver", @@ -6287,7 +6287,7 @@ dependencies = [ [[package]] name = "sandbox-driver" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/sandbox-driver?branch=main#b6b5c9c207a510e41c01bcbce4203f489bf734fc" +source = "git+https://github.com/lithoscomputer/sandbox-driver?branch=main#7d1932b5fd758dbc67ae5a34aaed08d8733ddaba" dependencies = [ "async-trait", "globset", @@ -6304,7 +6304,7 @@ dependencies = [ [[package]] name = "sandbox-driver-daytona" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/sandbox-driver?branch=main#b6b5c9c207a510e41c01bcbce4203f489bf734fc" +source = "git+https://github.com/lithoscomputer/sandbox-driver?branch=main#7d1932b5fd758dbc67ae5a34aaed08d8733ddaba" dependencies = [ "anyhow", "async-trait", @@ -6332,7 +6332,7 @@ dependencies = [ [[package]] name = "sandbox-driver-daytona-config" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/sandbox-driver?branch=main#b6b5c9c207a510e41c01bcbce4203f489bf734fc" +source = "git+https://github.com/lithoscomputer/sandbox-driver?branch=main#7d1932b5fd758dbc67ae5a34aaed08d8733ddaba" dependencies = [ "sandbox-driver-docker-config", "serde", @@ -6342,7 +6342,7 @@ dependencies = [ [[package]] name = "sandbox-driver-docker" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/sandbox-driver?branch=main#b6b5c9c207a510e41c01bcbce4203f489bf734fc" +source = "git+https://github.com/lithoscomputer/sandbox-driver?branch=main#7d1932b5fd758dbc67ae5a34aaed08d8733ddaba" dependencies = [ "anyhow", "async-trait", @@ -6363,7 +6363,7 @@ dependencies = [ [[package]] name = "sandbox-driver-docker-config" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/sandbox-driver?branch=main#b6b5c9c207a510e41c01bcbce4203f489bf734fc" +source = "git+https://github.com/lithoscomputer/sandbox-driver?branch=main#7d1932b5fd758dbc67ae5a34aaed08d8733ddaba" dependencies = [ "serde", "serde_json", @@ -6372,7 +6372,7 @@ dependencies = [ [[package]] name = "sandbox-driver-host" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/sandbox-driver?branch=main#b6b5c9c207a510e41c01bcbce4203f489bf734fc" +source = "git+https://github.com/lithoscomputer/sandbox-driver?branch=main#7d1932b5fd758dbc67ae5a34aaed08d8733ddaba" dependencies = [ "anyhow", "async-trait", @@ -6390,7 +6390,7 @@ dependencies = [ [[package]] name = "sandbox-driver-protocol" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/sandbox-driver?branch=main#b6b5c9c207a510e41c01bcbce4203f489bf734fc" +source = "git+https://github.com/lithoscomputer/sandbox-driver?branch=main#7d1932b5fd758dbc67ae5a34aaed08d8733ddaba" dependencies = [ "async-trait", "base64", @@ -6407,7 +6407,7 @@ dependencies = [ [[package]] name = "sandbox-driver-testing" version = "0.1.0" -source = "git+https://github.com/lithoscomputer/sandbox-driver?branch=main#b6b5c9c207a510e41c01bcbce4203f489bf734fc" +source = "git+https://github.com/lithoscomputer/sandbox-driver?branch=main#7d1932b5fd758dbc67ae5a34aaed08d8733ddaba" dependencies = [ "async-trait", "sandbox-driver",