Repository navigation
Keep the recall future Send: the keep predicate must be Sync - #211
Conversation
tinyhumansai#206 (1960218) passes `keep: &dyn Fn(&Hit) -> bool` through recall's gathering and holds it across an .await, so a holistic_recall future is not Send. Hosts run recall on multi-threaded runtimes (a spawned pre-turn, an async_trait method), and openhuman no longer compiles against v1.23.3 (E0277, "cannot be shared between threads safely"). The three private signatures take `&(dyn Fn(&Hit) -> bool + Sync)`, and a test asserts that a holistic_recall future is Send, so this fails to compile in this crate rather than in a host.
Tiny Sweeper reviewTiny Sweeper reviewed this change across 6 lane(s) and found 0 active actionable finding(s). Detailed lane evidence and any incomplete work are listed below. State: Ready for maintainer review Review snapshot
Completeness: Complete What changedThe review could not produce a supported behavioral summary; inspect the cited changed surface and lane details below. FeaturesNone identified with supported citations. TestsNo supported feature-to-test mapping was produced. Test execution is not inferred. FindingsNo active actionable findings. Before mergeNone. Agent review detailscritique
security
tests
commits
description
e2e
Evidence and run details
|
|
Note Currently processing new changes in this PR. This may take a few minutes, please wait... ⚙️ Run configuration
📒 Files selected for processing (2)
Comment |
There was a problem hiding this comment.
tinysweeper found nothing blocking. Approving.
$0.0010 · 84,075 in / 4,675 out · 5,855 cached (7%) · gpt-5.6-luna, glm-5.3-flash
critique: $0.0004 · 32,334 in / 1,323 out · 4,066 cached (13%) · gpt-5.6-luna
security: $0.0004 · 34,497 in / 1,157 out · 1,789 cached (5%) · gpt-5.6-luna
tests: $0.0000 · 4,444 in / 145 out · 0 cached (0%) · glm-5.3-flash
description: $0.0000 · 4,762 in / 119 out · 0 cached (0%) · glm-5.3-flash
e2e: $0.0000 · 5,011 in / 117 out · 0 cached (0%) · glm-5.3-flash
Summary
Recall's future is
Sendagain. #206 (1960218, "a resumed pre-turn leads with the thread in one pack") passeskeep: &dyn Fn(&Hit) -> boolthrough recall's gathering and holds it across an.await. That makes everyholistic_recallfuture!Send, so hosts that run recall on a multi-threaded runtime no longer compile.openhuman cannot adopt v1.23.3 because of it. Bumping
vendor/tinymemoryto the v1.23.3 tag (8237ecb) gives:at four openhuman call sites:
memory/lifecycle/hooks.rs:219;agent/tinyagents/memory_summarizer.rs:81and:86;memory/schemas/handlers.rs:141.This crate's own CI never needs the future to be
Send, so it passed here.Related issue
Regression from #206. A release (v1.23.4) is needed before openhuman can bump; it is prepared locally against v1.23.3 and waits on it.
API or behavior changes
None. The three changed signatures in
recall/gather.rsare private:keep: &dyn Fn(&Hit) -> boolbecomeskeep: &(dyn Fn(&Hit) -> bool + Sync);Syncdata.Validation
Local, in a target dir of this worktree's own:
cargo fmt --all -- --check: okcargo clippy --all-targets --all-features -- -D warnings: okcargo build --all-targets --all-features: okcargo test --all-features: ok, 1131 passedcargo test: ok, 443 passed. One run first hit the known, intermittenttinymemory-apieach_fault_is_caught_by_its_check; this PR does not touch that crate, and the rerun was clean.RUSTDOCFLAGS="-D warnings" cargo doc --no-deps --all-features: okcargo run -p tinymemory-integrations --example basic: okcargo llvm-cov … --fail-under-lines 80: ok, 94.20% linescargo hack --feature-powerset --depth 2 --workspace check --all-targets: okscripts/cortexdb-live.shon a fresh local CortexDB v0.10.4: ok, 5 + 1 + 3 passedvendor/tinymemorycheckout (temporarily, then restored), these are all green:cargo check --workspace;cargo clippy --keep-going -p openhuman --tests -- -D warnings;memory::(160 passed) andflows::(564 passed).Revert-check: without the fix, the new test fails to compile ("future cannot be sent between threads safely"); with it, it passes.
Tests
a_recall_future_can_cross_threads(recall/mod_tests.rs) asserts that aholistic_recallfuture isSend. Every reference recall holds across an.await, thekeeppredicate included, must then beSync, so a regression fails to compile in this crate rather than in a host.Documentation
None needed: no public API or documented behaviour changes.
Checklist
#[allow(...)],#[ignore], or relaxed lints.envcontents in the diff or the descriptionSummary by CodeRabbit