Deterministic N/M target scheduling
Build bounded integer-nanosecond ASAP schedules, preserve source order and physical-resource dependencies, and fail closed on timeline drift.
Target scheduling 0.1 contract
A successful target compilation publishes a deterministic static schedule with positive safe-integer nanosecond durations, exact arithmetic, stable operation ids, and no physical-qubit overlap.
ASAP resource dependencies
Each operation starts at the greatest prior end time among all physical qubits it uses. Operations on disjoint qubits may start together; operations sharing a qubit cannot overlap.
Frozen traversal order
Operations retain depth-first source order. Static control-flow bodies are represented conservatively in that order; the schedule is a compile-time carrier, not a prediction of which runtime branch will execute.
Exact schedule invariants
Operation ids are sequential, endNs equals startNs plus durationNs, logical and physical targets match placement, and totalDurationNs equals the largest operation end.
Fail-closed boundaries
Missing or duplicate placement, non-integer duration, more than 100,000 operations, or safe-integer timeline overflow produces NM-SCHEDULE issues and an empty schedule.
CLI and JSON carrier
nm transpile main.nm --calibration calibration.json --jsonThe transpile JSON result includes placement, calibration identity, schedule, and schedulingIssues. Consumers must require success and an empty schedulingIssues array before submitting work downstream.
Stable scheduling diagnostics
Placement, duration, dependency, limit, and invariant failures use machine-readable codes independent of localized error prose.
NM-SCHEDULE-001NM-SCHEDULE-002NM-SCHEDULE-003NM-SCHEDULE-004NM-SCHEDULE-005The static ASAP schedule does not model pulse shaping, crosstalk, dynamic branch probability, provider queues, control-electronics latency, or actual wall-clock execution. Those require a provider-specific contract.
Conformance mutates dependencies and totals, exercises fail-closed placement/duration/overflow paths, checks 1,000 seeded operations, and ratchets the full 100,000-operation boundary in packed core.