Revision history for JobQueue
0.1.2 2026-10-05T10:53:36+01:00
- Retain a bounded FIFO cache of terminal dependency outcomes in
JobQueue::Coordinator. Late hard/soft dependents submitted after
a predecessor Job object is pruned now resolve the predecessor's
done, failure, cancelled or superseded outcome instead of treating
it as unknown; evicted hard/soft dependencies keep the existing
unknown-dependency behavior.
- Record each Job's last dependency-readiness decision as compact
scalar metadata exposed through dependency-state and included in
queue snapshots, so observers can explain blocked, doomed and
released jobs without re-running scheduler logic or retaining
dependency result bodies.
- Add Queue.physical-job-ids for an atomic pending+running id
snapshot that includes cancelled or superseded runners until
their physical drain completes.
0.1.1 2026-08-21T21:30:35+01:00
- Make dedup lookup plus pending insertion one atomic queue transition.
Concurrent producers of one live key now all receive the same job;
the key is reusable once that job becomes terminal.
0.1.0 2026-08-10T19:52:26+01:00
- Initial release
- JobQueue::Job role: atomic terminal transitions (finish /
request-cancel / begin-running), cancel + completion Promises,
dedup keys, lanes, priorities, hard/soft dependency edges, and
the keep-once atomic Promise settler
- JobQueue::Queue: per-resource serial/parallel queue with
re-evaluated parallelism policy, max-concurrent cap, lane
serialisation, priority dispatch, live-job dedup, deferred
cancel terminals and an optional store event sink
- JobQueue::Coordinator: named-queue registry plus a cross-queue
dependency DAG with hold/release, dep-result injection and
transitive supersede cascades over hard edges
- JobQueue::FailedRegistry: capped, insertion-ordered registry of
failed/cancelled jobs with atomic claim-for-retry
- Injectable log + tracer (null objects by default) and an
EventSink documentation role
- JobQueue::Job's role and keep-once sub are package-scoped as
well as exported, so a host application can wrap the role in
its own facade module (need + fully-qualified name) and
re-export both without a name clash