Expand description
Unblock scanner for budget/quota/capability-blocked executions.
Scans ff:idx:{p:N}:lane:<lane>:blocked:{budget,quota,route} per
execution partition. For each blocked execution, re-evaluates the
blocking condition. If cleared, calls FCALL ff_unblock_execution.
Cross-partition budget check is cached per scan cycle (MANDATORY — without it, 50K blocked executions = 50K budget reads).
Capability sweep reads the union of non-authoritative worker cap
HASHes (ff:worker:{ns}:{instance_id}:caps — written by
ff-sdk::FlowFabricWorker::connect and by the ff_register_worker
FCALL) ONCE per scan cycle PER NAMESPACE, and uses it to decide
whether a waiting_for_capable_worker execution has a matching
worker. This is best-effort: caps HASHes may be slightly stale
(TTL’d, refreshed on connect), but the promotion path is
self-correcting — a promoted execution that still can’t be claimed
gets re-blocked on the next scheduler tick. RFC-009 §7.5 documents
the v1 sweep approach and defers connect-triggered sweeps to V2.
RFC-025 Phase 5 cutover: caps reads go through the namespace-scoped
ff:idx:{ns}:workers + ff:worker:{ns}:{id}:caps helpers; the
cache keys off Namespace so multi-tenant deployments don’t mix
capability sets across tenants.
MUST skip paused_by_flow_cancel — only cancel_flow clears that.
Reference: RFC-008 §2.4, RFC-009 §7.5, RFC-010 §6