Troubleshooting - FlightDan/dispatcher-sdk GitHub Wiki
Troubleshooting
English | įŽäŊ䏿 | Home
| Symptom | What to check next |
|---|---|
| Submission succeeded but no work runs | Keep a host alive, or explicitly flush, execute and sync. Inspect command delivery errors and handler compatibility. |
Dispatcher rejects startup |
Read DeploymentMismatchError.report; keep the historical handler deployment available for unfinished work. |
task.wait(timeout=...) times out |
The caller's wait ended; inspect task.observe() and the execution deadline before deciding whether work should continue. |
run_once() returns no work |
Check leases, next_attempt_at, eligible work and handler availability. An empty result does not prove a stall. |
flush() returns zero |
Inspect pending delivery records and their last errors; zero does not prove an empty queue. |
| Task succeeded but Run is still running | Validate the business result, release applicable waits and explicitly finish. |
| A successor did not start | Check settled dependencies and business approval, then explicitly dispatch. |
CommandConflict |
Replay the original request unchanged, including expected revision. Changed content requires a new decision identity. |
RevisionConflict |
Read fresh state, recompute the decision and use a new command identity. |
| Repeated notifications | Delivery is at least once. Durably deduplicate stable identities before acknowledging. |
recovery_required |
Inspect unresolved effects and reconcile external evidence before resolving. |
| Cancellation report says local cleanup is unknown after restart | Keep the Kernel-bound settlement journal available and check that its process_cleanup note matches the execution ID, attempt and fence. Missing or malformed evidence stays unknown. |
| Old database rejected | Follow the upgrade guide; do not edit schema metadata to bypass compatibility checks. |
| Restored snapshot is still read-only | Restore and activation are separate. Use the local activation procedure; never delete the marker manually. |
| Local activation rejects a changed source | The source advanced after the snapshot. Reconcile the newer facts; the SDK will not run the older copy automatically. |
| Sandbox create/start result is unknown | Reconcile the operation key and provider records. Do not blindly create or start again. |
Windows result publication reports PermissionError |
Temporary sharing refusals use the original watchdog deadline. A definite access denial fails immediately; persistent unreadability retains the original error after containment. |
| The public acceptance example cannot read a Windows marker | Its two marker waits retry sharing refusals within their original 12-second or 6-second deadline and retain read diagnostics beside the marker. A definite WinError 5 fails immediately; a persistent refusal remains the original error. |
| An admitted child wait encounters a Kernel writer | Inspect the original deadline, parent lease and clock guards. Result observation uses a factual reader; pending publication remains a separate recovery obligation. Do not reinvoke either handler to publish its result. |
An expired wait sees a cancelled child with attempt=0 / fence=0 |
This legal pair means the child was never claimed. Factual fallback declines delivery and preserves the original wait refusal; it does not establish malformed ancestry. |
| An observation batch is replayed | A matching committed equal or newer sequence returns False without a writer. Missing proof still needs atomic admission within the original deadline; permanent storage errors remain errors. |
| Final activity is persisted but process telemetry is incomplete | Inspect the close receipt's process observer completion, worker state and collection error. A persisted batch or closed source does not certify process collection; later ownership drain cannot upgrade that receipt. |
| Sandbox cleanup remains pending | Inspect the journal and provider, then run bounded recovery. Disposal does not settle external business effects. |
See submission, recovery, inbox, storage, local recovery and sandbox runtime for exact contracts and recovery procedures. For observation gaps or stall notices, see execution activity and supervision.
When reporting a problem, include the SDK version or commit, Python version,
platform, isolation mode, relevant IDs and states, and a minimal reproduction.
The public observability consumer
retains raw child-call and progress-call tracebacks, SQLite error codes and
original budgets. Pass --evidence-dir <new-empty-directory> to choose its
evidence directory; the diagnostic records do not retry the failed call.
Remove credentials and private payloads. Use
GitHub Issues for bugs and
security reporting for vulnerabilities.