Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
70 commits
Select commit Hold shift + click to select a range
c991570
chore(storage): update primitives module
senamakel Oct 20, 2026
2d4be1f
feat(primitives): implement core storage primitives
senamakel Oct 20, 2026
a73b2ac
chore: files changed crates/tinyflows-storage/src/lib.rs,crates/tinyf…
senamakel Oct 20, 2026
8714967
chore: files changed crates/tinyflows-storage/src/lib.rs,crates/tinyf…
senamakel Oct 20, 2026
329d874
refactor(leases): remove fence implementation from lease
senamakel Oct 20, 2026
c5b3d6c
refactor(storage): update imports in primitives
senamakel Oct 20, 2026
e0624c4
chore(deps): update dependencies and add new driver packages
senamakel Oct 20, 2026
4f16b9b
chore: files changed Cargo.lock,crates/tinyflows-adaptive/Cargo.toml,…
senamakel Oct 20, 2026
665c4da
chore(drivers): remove tinyflows-storage dependency
senamakel Oct 20, 2026
ae1a0db
chore(deps): update dependencies and add new packages
senamakel Oct 20, 2026
9564fb5
feat(storage): add blocking storage implementation
senamakel Oct 20, 2026
4415265
feat(storage): expose schema and blocking modules
senamakel Oct 20, 2026
9268437
refactor(storage): update storage API usage
senamakel Oct 20, 2026
134c4e2
chore: files changed crates/tinyflows-adaptive/src/drivers/migrate.rs…
senamakel Oct 20, 2026
a367ebb
chore: files changed crates/tinyflows-adaptive/src/drivers/ledger_tes…
senamakel Oct 20, 2026
21d04dc
chore: files changed crates/tinyflows-adaptive/src/drivers/ledger_tes…
senamakel Oct 20, 2026
66d408b
refactor(tests): update storage backend usage in tests
senamakel Oct 20, 2026
8492e2c
chore: files changed crates/tinyflows-storage/src/schema.rs
senamakel Oct 20, 2026
f0937cd
refactor(storage): improve migration query and update logic
senamakel Oct 20, 2026
1299726
chore: files changed .github/workflows/ci.yml,Cargo.lock,Cargo.toml,c…
senamakel Oct 20, 2026
c05bf51
test(schema): add assertions for owner migration test
senamakel Oct 20, 2026
d026f80
chore: files changed CLAUDE.md,Cargo.lock,Cargo.toml,crates/tinyflows…
senamakel Oct 20, 2026
b8998e0
fix(storage): migrate adaptive state during open
senamakel Oct 20, 2026
3c20ebc
fix(msrv): pin UUID to Rust 1.88-compatible release
senamakel Oct 20, 2026
4a3bf9e
style(tests): order storage helper imports
senamakel Oct 20, 2026
b28e10e
fix(storage): avoid unused unit lint
senamakel Oct 20, 2026
98e33a3
Merge pull request #49 from senamakel/epic-8131-39-flows
senamakel Oct 20, 2026
f1bd34e
chore(deps): bump tinystoragedrivers to 2.0.1 and add busproxy
senamakel Oct 20, 2026
06e6971
chore(deps): bump tinystoragedrivers to v2.0.1
senamakel Oct 20, 2026
3f0c574
test(storage): cover cross-collection migration retry and expiry mism…
senamakel Oct 20, 2026
8cf8ea1
chore(deps): bump tinystoragedrivers to v2.0.1
senamakel Oct 20, 2026
a782442
fix(storage): preserve source creation time and target expiry in sche…
senamakel Oct 20, 2026
7b3b398
chore(storage): reformat schema code and tests
senamakel Oct 20, 2026
e6c3949
refactor(storage): separate row lookup from same-row check
senamakel Oct 20, 2026
8ff43eb
refactor(migrate): drop created_ms metadata from migrated records
senamakel Oct 20, 2026
850f21f
fix(schedule): store imported job creation time in the document body
senamakel Oct 20, 2026
074078f
test: assert backend-owned record metadata instead of source times
senamakel Oct 20, 2026
7121379
docs(schedule): document created_ms body override
senamakel Oct 20, 2026
6230690
fix(tests): reject module-supplied created_ms in storage callbacks
senamakel Oct 20, 2026
4afdfd3
chore: apply rustfmt formatting to migration code
senamakel Oct 20, 2026
2efc25b
test(catalog): reject created_ms in module doc_put
senamakel Oct 20, 2026
8af0ad4
fix(module): reject created_ms in module document writes
senamakel Oct 20, 2026
5d92e98
test(catalog): cover rejection of host-only creation metadata
senamakel Oct 20, 2026
7bb8e55
test(schedule_documents): assert forged creation metadata is rejected…
senamakel Oct 20, 2026
a4239f6
test(schedule-documents): hoist callback into a binding
senamakel Oct 20, 2026
3081fa0
test: annotate error type in doc_put test helpers
senamakel Oct 20, 2026
65244ae
test(catalog): reformat created_ms rejection in host documents stub
senamakel Oct 20, 2026
7447a09
fix(storage): preserve source expiry when migrating records
senamakel Oct 20, 2026
374d8b1
fix(schedule): preserve record expiry during v1 migration
senamakel Oct 20, 2026
697e0b2
fix(store): preserve record expiry during migration
senamakel Oct 20, 2026
5c2de12
fix(storage): preserve migrated chronology and expiry
senamakel Oct 20, 2026
2cb31ef
Merge pull request #50 from senamakel/epic-8131-39-schema-metadata
senamakel Oct 20, 2026
7d463fb
fix(module): align TinyBus dependency with 0.3
senamakel Oct 24, 2026
2329134
Merge pull request #53 from senamakel/epic-8369-tinybus-compat
senamakel Oct 24, 2026
5294d98
Merge remote-tracking branch 'fork/epic/8131-storage-primitives' into…
senamakel Oct 27, 2026
6c80292
chore(deps): downgrade uuid and align getrandom version
senamakel Oct 27, 2026
291deae
chore(deps): bump tinystoragedrivers to 2.1.2 and tinybus to 0.1.6
senamakel Oct 27, 2026
980b72d
test(run-manager): await actor recovery completion
senamakel Oct 27, 2026
39d441a
Merge pull request #54 from senamakel/sec-656-secret-cipher
senamakel Oct 27, 2026
85c91f7
test(schedule): add identity test module for schedule types
senamakel Oct 30, 2026
004f3b7
feat(schedule): add channel session identity to job origins
senamakel Oct 30, 2026
e94e7bf
refactor(schedule): move channel identity types into their own module
senamakel Oct 30, 2026
5fbd20b
style(tinyflows-bus): reorder imports in schedule types
senamakel Oct 30, 2026
53266ed
test(schedule): build channel origin directly in identity roundtrip test
senamakel Oct 30, 2026
6a455a6
test(schedule): reformat thread id assertion for line length
senamakel Oct 30, 2026
f64c31d
test(schedule): remove unused serde_json import from identity tests
senamakel Oct 30, 2026
17c881b
chore(storage): document git pin rationale for tinystoragedrivers
senamakel Oct 30, 2026
c099bee
refactor(leases): move advanced lease operations into a submodule
senamakel Oct 30, 2026
6fbba2b
Merge tinyflows main into the security roll-up on one tinybus series
M3gA-Mind Nov 2, 2026
1b9b9b0
fix(schedule): log a background run that did not succeed
M3gA-Mind Nov 2, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions crates/tinyflows-module/src/run_manager/actor_recovery.rs
Original file line number Diff line number Diff line change
Expand Up @@ -83,9 +83,14 @@ impl Drop for ActorRecoveryGuard {
// environment, so even cancellation before its first poll releases
// this entry without removing a replacement actor.
let active_cleanup = ActiveCleanupGuard(Arc::clone(&self.active));
#[cfg(test)]
let run_id = self.run_id.clone();
runtime.spawn(async move {
let _active_cleanup = active_cleanup;
recovery.reconcile().await;
drop(_active_cleanup);
#[cfg(test)]
super::actor_recovery_tests::notify_recovery_finished_for_test(&run_id);
});
}
}
Expand Down
33 changes: 33 additions & 0 deletions crates/tinyflows-module/src/run_manager_actor_recovery_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,12 @@ async fn dropping_an_unpolled_actor_future_reconciles_only_its_live_run() {
// Tokio can drop a spawned future before its first poll during shutdown.
// The actor factory must have captured recovery ownership before it
// returned this future, so the admitted row cannot be left running.
let (reconciled_tx, reconciled_rx) = oneshot::channel();
install_recovery_completion(&fixture.run_id, reconciled_tx);
drop(actor);
reconciled_rx
.await
.expect("actor recovery task must finish");

assert_reconciled(
&fixture.catalog,
Expand Down Expand Up @@ -60,9 +65,14 @@ async fn aborting_an_admitted_actor_reconciles_its_running_row() {
));
admitted_tx.send(()).unwrap();
arrived_rx.await.unwrap();
let (reconciled_tx, reconciled_rx) = oneshot::channel();
install_recovery_completion(&fixture.run_id, reconciled_tx);
task.abort();
assert!(task.await.unwrap_err().is_cancelled());
drop(release_tx);
reconciled_rx
.await
.expect("actor recovery task must finish");

assert_reconciled(
&fixture.catalog,
Expand Down Expand Up @@ -468,6 +478,29 @@ fn install_after_admission_gate(
static AFTER_ADMISSION_GATES: LazyLock<Mutex<HashMap<String, AdmissionGate>>> =
LazyLock::new(|| Mutex::new(HashMap::new()));

#[cfg(test)]
static RECOVERY_COMPLETIONS: LazyLock<Mutex<HashMap<String, oneshot::Sender<()>>>> =
LazyLock::new(|| Mutex::new(HashMap::new()));

#[cfg(test)]
fn install_recovery_completion(run_id: &str, finished: oneshot::Sender<()>) {
RECOVERY_COMPLETIONS
.lock()
.unwrap_or_else(std::sync::PoisonError::into_inner)
.insert(run_id.to_owned(), finished);
}

#[cfg(test)]
pub(super) fn notify_recovery_finished_for_test(run_id: &str) {
if let Some(finished) = RECOVERY_COMPLETIONS
.lock()
.unwrap_or_else(std::sync::PoisonError::into_inner)
.remove(run_id)
{
let _ = finished.send(());
}
}

#[cfg(test)]
pub(super) async fn pause_after_admission_for_test(run_id: &str) {
let gate = AFTER_ADMISSION_GATES
Expand Down
16 changes: 13 additions & 3 deletions crates/tinyflows-schedule/src/runtime/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -198,8 +198,9 @@ impl Scheduler {
let config = self.config.clone();
let cancellation = self.cancellation.subscribe();
let permits = Arc::clone(&self.permits);
let job_id = claim.job.id.clone();
self.tasks.spawn(async move {
run_claim_with_renewal(
let outcome = run_claim_with_renewal(
&ports,
&config,
claim,
Expand All @@ -208,8 +209,17 @@ impl Scheduler {
Some(permits),
cancellation,
)
.await
.map(|_| ())
.await?;
// The run record holds the result; a failed delivery has no
// other trace in the poll loop.
if !outcome.success {
tracing::warn!(
%job_id,
delivery_status = ?outcome.delivery_status,
"scheduled run did not succeed"
);
}
Ok(())
});
count += 1;
}
Expand Down
Loading