DataDesigner/plans/645
Eric W. Tramel c0a4dcbb85
Some checks are pending
CI / End to end test (Python 3.13 on macos-latest) (push) Blocked by required conditions
CI / End to end test (Python 3.10 on ubuntu-latest) (push) Blocked by required conditions
CI / End to end test (Python 3.11 on ubuntu-latest) (push) Blocked by required conditions
CI / End to end test (Python 3.12 on ubuntu-latest) (push) Blocked by required conditions
CI / End to end test (Python 3.13 on ubuntu-latest) (push) Blocked by required conditions
CI / Lint and Format Check (push) Blocked by required conditions
CI / Check License Headers (push) Blocked by required conditions
CI / End to end test (Python 3.10 on macos-latest) (push) Blocked by required conditions
CI / Validate dispatched SHA (push) Waiting to run
CI / Test Config (Python 3.10 on macos-latest) (push) Blocked by required conditions
CI / Test Config (Python 3.11 on macos-latest) (push) Blocked by required conditions
CI / Test Config (Python 3.12 on macos-latest) (push) Blocked by required conditions
CI / Test Config (Python 3.13 on macos-latest) (push) Blocked by required conditions
CI / Test Config (Python 3.10 on ubuntu-latest) (push) Blocked by required conditions
CI / End to end test (Python 3.11 on macos-latest) (push) Blocked by required conditions
CI / Test Config (Python 3.11 on ubuntu-latest) (push) Blocked by required conditions
CI / Test Config (Python 3.12 on ubuntu-latest) (push) Blocked by required conditions
CI / Test Config (Python 3.13 on ubuntu-latest) (push) Blocked by required conditions
CI / Test Engine (Python 3.10 on macos-latest) (push) Blocked by required conditions
CI / End to end test (Python 3.12 on macos-latest) (push) Blocked by required conditions
CI / Test Engine (Python 3.11 on macos-latest) (push) Blocked by required conditions
CI / Test Engine (Python 3.12 on macos-latest) (push) Blocked by required conditions
CI / Test Engine (Python 3.13 on macos-latest) (push) Blocked by required conditions
CI / Test Engine (Python 3.10 on ubuntu-latest) (push) Blocked by required conditions
CI / Test Engine (Python 3.11 on ubuntu-latest) (push) Blocked by required conditions
CI / Test Engine (Python 3.12 on ubuntu-latest) (push) Blocked by required conditions
CI / Test Engine (Python 3.13 on ubuntu-latest) (push) Blocked by required conditions
CI / Test Interface (Python 3.10 on macos-latest) (push) Blocked by required conditions
CI / Test Interface (Python 3.11 on macos-latest) (push) Blocked by required conditions
CI / Test Interface (Python 3.12 on macos-latest) (push) Blocked by required conditions
CI / Test Interface (Python 3.13 on macos-latest) (push) Blocked by required conditions
CI / Test Interface (Python 3.10 on ubuntu-latest) (push) Blocked by required conditions
CI / Test Interface (Python 3.11 on ubuntu-latest) (push) Blocked by required conditions
CI / Test Interface (Python 3.12 on ubuntu-latest) (push) Blocked by required conditions
CI / Test Interface (Python 3.13 on ubuntu-latest) (push) Blocked by required conditions
CI / Coverage Check (Python 3.11) (push) Blocked by required conditions
CI / Test (Python 3.10 on macos-latest) (push) Blocked by required conditions
CI / Test (Python 3.11 on macos-latest) (push) Blocked by required conditions
CI / Test (Python 3.12 on macos-latest) (push) Blocked by required conditions
CI / Test (Python 3.10 on ubuntu-latest) (push) Blocked by required conditions
CI / Test (Python 3.13 on macos-latest) (push) Blocked by required conditions
CI / Test (Python 3.11 on ubuntu-latest) (push) Blocked by required conditions
CI / Test (Python 3.12 on ubuntu-latest) (push) Blocked by required conditions
CI / Test (Python 3.13 on ubuntu-latest) (push) Blocked by required conditions
feat: implement async scheduling admission control (#661)
2026-05-20 20:58:05 -04:00
..
architecture.md feat: implement async scheduling admission control (#661) 2026-05-20 20:58:05 -04:00
async-scheduling-epic.puml feat: implement async scheduling admission control (#661) 2026-05-20 20:58:05 -04:00
AsyncSchedulingEpicComponent.png feat: implement async scheduling admission control (#661) 2026-05-20 20:58:05 -04:00
AsyncSchedulingEpicIssueMap.png feat: implement async scheduling admission control (#661) 2026-05-20 20:58:05 -04:00
AsyncSchedulingEpicRuntimeSequence.png feat: implement async scheduling admission control (#661) 2026-05-20 20:58:05 -04:00
AsyncSchedulingRequestAdmissionClassModel.png feat: implement async scheduling admission control (#661) 2026-05-20 20:58:05 -04:00
AsyncSchedulingSupportContractsClassModel.png feat: implement async scheduling admission control (#661) 2026-05-20 20:58:05 -04:00
AsyncSchedulingTaskAdmissionClassModel.png feat: implement async scheduling admission control (#661) 2026-05-20 20:58:05 -04:00
benchmark-plan.md feat: implement async scheduling admission control (#661) 2026-05-20 20:58:05 -04:00
capacity-model.md feat: implement async scheduling admission control (#661) 2026-05-20 20:58:05 -04:00
contracts.md feat: implement async scheduling admission control (#661) 2026-05-20 20:58:05 -04:00
issue-map.md feat: implement async scheduling admission control (#661) 2026-05-20 20:58:05 -04:00
migration-and-cleanup.md feat: implement async scheduling admission control (#661) 2026-05-20 20:58:05 -04:00
module-ownership.md feat: implement async scheduling admission control (#661) 2026-05-20 20:58:05 -04:00
observability.md feat: implement async scheduling admission control (#661) 2026-05-20 20:58:05 -04:00
README.md feat: implement async scheduling admission control (#661) 2026-05-20 20:58:05 -04:00
request-admission.md feat: implement async scheduling admission control (#661) 2026-05-20 20:58:05 -04:00
task-admission.md feat: implement async scheduling admission control (#661) 2026-05-20 20:58:05 -04:00

Async Scheduling Architecture Plan

Source-of-truth architecture plan for the async scheduling epic tracked by issue 645. The UML file is the visual index; the Markdown files in this directory are the durable spec. GitHub issues should point back here and focus on implementation sequencing, quality gates, tests, and evidence.

If an issue body and this plan disagree, update this plan first, then adjust the issue to reference the corrected section.

This directory is the maintainer source of truth while the epic is active. Issue 660 promotes the stabilized V1 content into current user/operator architecture docs and marks older pre-epic scheduling descriptions as historical or removes them.

Spec

  • Architecture: target system shape, ownership boundaries, invariants, and non-goals.
  • Contracts: durable DTO, protocol, event, and config names.
  • Module ownership: final repository/module homes, import rules, audience boundaries, tests, and benchmark ownership.
  • Capacity model: layered capacity vocabulary and ownership.
  • Task admission: scheduler-owned ready selection, task leases, policy hooks, bounded borrowing, and resource-vector direction.
  • Request admission: model-call admission, AIMD controller shape, dynamic request semantics, and replacement of pre-epic request-control names.
  • Observability: scheduler events, request events, runtime correlation, snapshots, and cardinality rules.
  • Benchmark plan: scenarios, metrics, A/B baselines, and required artifacts.
  • Migration and cleanup: legacy-name removal, grep gates, and no-shim rules.
  • Issue map: how the GitHub issues map to this source-of-truth plan.

Read This First

Recommended reading paths:

Source

The PNG files in this directory are generated review artifacts. The PlantUML file is authoritative for diagram source. Any PR that changes the UML should regenerate the PNGs and include them in the same diff, or explicitly state why rendering was unavailable.

Component View

Component view

Task Admission Contracts

Task admission class model

Request Admission Contracts

Request admission class model

Capacity, Telemetry, and Evidence Contracts

Support contracts class model

Runtime Sequence

Runtime sequence

Issue Dependency Map

Issue dependency map

Render

plantuml plans/645/async-scheduling-epic.puml

The expected runtime control owner is AsyncTaskScheduler:

ColumnGenerator.get_scheduling_metadata()
  -> SchedulingMetadata
  -> TaskSchedulingResolver
  -> ResolvedTaskScheduling
  -> SchedulableTask inputs

AsyncTaskScheduler
  -> CompletionTracker.ready_frontier()
  -> FairTaskQueue.enqueue(...)
  -> FairTaskQueue.select_next(scheduler-owned eligibility callback)
  -> TaskAdmissionController.try_acquire(selection.item, selection.queue_view)
  -> FairTaskQueue.commit(...)
  -> execute admitted task/generator code

Admitted task/generator code
  -> model facade/provider boundary
  -> ModelRequestExecutor.execute_attempt(...) per concrete request attempt
  -> RequestAdmissionController.acquire_async(...)
  -> provider/model endpoint
  -> RequestAdmissionController.release(lease, outcome)

Task admission and request admission each have explicit controller, queue, policy, and lease/state boundaries where applicable. Telemetry observes scheduler admission and request admission separately, then issue 648 correlates the two timelines through the runtime correlation provider.