Skip to content

fix: preserve causal delays after AgentX live warmup - #492

Merged
tedzhouhk merged 26 commits into
mainfrom
hzhou-codex/fix-agentx-live-handoff-delays
Oct 21, 2026
Merged

tedzhouhk merged 26 commits into
mainfrom
hzhou-codex/fix-agentx-live-handoff-delays

Conversation

@tedzhouhk

@tedzhouhk tedzhouhk commented Oct 16, 2026 •

Copy link
Copy Markdown
Contributor

Summary

#465 is merged; this PR now targets main. Fix causal delays after live AgentX warmup without changing engine scheduling or FPM timing.

Live warmup reconstructed source-clock deadlines for every future request. After an idle cap advanced a current timer, dependency release could restore a later request's stale absolute deadline: a four-second continuation could wait for another 300-second cap.

  • Restore source-clock deadlines only for the current handoff frontier; future sequence/spawn dependencies continue from actual dependency events.
  • Preserve join/replay-barrier readiness, cross-lane offsets, speedup and fresh recycled-play origins.
  • Classify dependencies once at handoff in O(nodes + edges), not in the iteration hot path.

Updated integration

Current head: 5507c2ad4b58100ab3eea60d643739e4d2e07299, with main 00f0eff747801c00af98388dd0028df9eb95c53f merged into the existing branch using a signed, history-preserving commit.

The complete tree matches the independently computed old-parent-relative integration. The PR still contains only its original two-file causal-handoff delta (237 additions / 10 deletions) against main; its stable patch ID is unchanged. Main's live-warmup primer-speedup correction, GLM readiness/pricing changes and HF evidence plumbing are preserved. No force push or performance-data/golden change was made.

Validation

  • Fresh exact-head Rust 1.96.1 native; 895 focused Python tests passed.
  • Full default cargo test --workspace --locked --offline: 2,174 passed, one pre-existing R17 local-artifact test ignored; 16 excluded public-API tests passed.
  • The four causal-handoff and two primer cases passed. Independent review additionally passed 40 Python cases and seven Rust tests, including two-lane timing/cap/invalid-speedup probes.
  • Independent whole-tree and patch-identity proof found no lost main changes or unintended PR changes. Source/legal, documentation, strict/generated CODEOWNERS, Rust format, scoped Ruff, whitespace, GPG and DCO checks passed.
  • No new local golden run is claimed for this loadgen-only delta; the fresh hosted Full CI is the gate for the complete updated head, including its selected golden-regression jobs. Previous-head checks are not substituted for it.

Boundaries

This is a functional causal-timing correction, not hardware accuracy qualification. The historical controlled AgentX attempt stopped on a genuine uncovered FPM coordinate; no new full AgentX/GPU benchmark was run for this synchronization. Data coverage, empirical model calibration and the separate frontend experiment are outside this PR.

Signed-off-by: hongkuanz <hongkuanz@nvidia.com>
Signed-off-by: hongkuanz <hongkuanz@nvidia.com>
Signed-off-by: hongkuanz <hongkuanz@nvidia.com>
…x/feat-agentx-live-warmup

Signed-off-by: hongkuanz <hongkuanz@nvidia.com>
Signed-off-by: hongkuanz <hongkuanz@nvidia.com>
Signed-off-by: hongkuanz <hongkuanz@nvidia.com>
Signed-off-by: hongkuanz <hongkuanz@nvidia.com>
…x/feat-agentx-live-warmup

Signed-off-by: hongkuanz <hongkuanz@nvidia.com>

# Conflicts:
#	.github/codeowners/areas.yaml
Signed-off-by: hongkuanz <hongkuanz@nvidia.com>
… tests

Signed-off-by: hongkuanz <hongkuanz@nvidia.com>
…x/feat-agentx-live-warmup

Signed-off-by: hongkuanz <hongkuanz@nvidia.com>
Signed-off-by: hongkuanz <hongkuanz@nvidia.com>
@coderabbitai

coderabbitai Bot commented Oct 16, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Repository: ai-dynamo/aisimulate/.coderabbit.yaml
  • Review profile: ASSERTIVE
  • Plan: Enterprise
  • Run ID: 2880dc13-bd34-46c7-896c-4fb5d7141ef2
📥 Commits

Reviewing files that changed from the base of the PR and between 00f0eff and 723e276.

📒 Files selected for processing: 26
  • .github/codeowners/areas.yaml
  • CODEOWNERS
  • THIRD_PARTY_NOTICES.md
  • crates/core/src/python.rs
  • crates/core/src/replay/loadgen/driver.rs
  • crates/core/src/replay/loadgen/mod.rs
  • crates/core/src/replay/loadgen/phase.rs
  • crates/core/src/replay/loadgen/snapshot.rs
  • crates/core/src/replay/report.rs
  • docs/aic-backward-compatibility/migration.md
  • docs/replay/agentic/continuous-profiles.md
  • docs/replay/agentic/warmup.md
  • docs/replay/workloads.md
  • docs/sweeper/sdk.md
  • python/aisimulate/THIRD_PARTY_NOTICES.md
  • python/aisimulate/src/aisimulate/compiler.py
  • python/aisimulate/src/aisimulate/config/traffic.py
  • python/aisimulate/src/aisimulate/main.py
  • python/aisimulate/src/aisimulate/recommend.py
  • python/aisimulate/src/aisimulate/runner.py
  • python/aisimulate/src/aisimulate/supervision.py
  • python/aisimulate/src/aisimulate/sweeper/config.py
  • python/aisimulate/src/aisimulate/sweeper/replay.py
  • tests/test_agentx_live_warmup.py
  • tests/test_runner.py
  • tests/test_unified_cli.py
🔗 Linked repositories identified

CodeRabbit considers these linked repositories for cross-repo context during reviews:

Included review availability: This review used your included allowance. Your plan provides up to 12 included reviews per hour; 11 remain after this review.

📜 Recent review details
🧰 Additional context used
📚 Code guidelines: 3
AGENTS.md — configured
REVIEW.md — configured
DEVELOPMENT.md — auto-discovered
📓 Path-based instructions: 10
Check unified CLI, Replay, Sweeper, and orchestration behavior together.

⚙️ CodeRabbit configuration file

Files:

  • python/aisimulate/src/aisimulate/compiler.py
  • python/aisimulate/src/aisimulate/supervision.py
  • python/aisimulate/src/aisimulate/main.py
  • python/aisimulate/src/aisimulate/recommend.py
  • python/aisimulate/src/aisimulate/sweeper/replay.py
  • python/aisimulate/src/aisimulate/runner.py
  • python/aisimulate/src/aisimulate/sweeper/config.py
  • python/aisimulate/src/aisimulate/config/traffic.py
Preserve deterministic Replay semantics and explicit validation.

⚙️ CodeRabbit configuration file

Files:

  • crates/core/src/replay/report.rs
  • crates/core/src/replay/loadgen/snapshot.rs
  • crates/core/src/replay/loadgen/mod.rs
  • crates/core/src/replay/loadgen/phase.rs
  • crates/core/src/replay/loadgen/driver.rs
Verify upstream provenance, license text, collection and overlay hashes, local modification notices, and generated derivative records remain complete and internally consistent.

⚙️ CodeRabbit configuration file

Files:

  • THIRD_PARTY_NOTICES.md
Treat top-level exports and bindings as public and release boundaries.

⚙️ CodeRabbit configuration file

Files:

  • crates/core/src/python.rs
Require coverage of the changed behavior and its negative or boundary cases.

⚙️ CodeRabbit configuration file

Files:

  • tests/test_runner.py
  • tests/test_unified_cli.py
  • tests/test_agentx_live_warmup.py
Check commands, defaults, supported runtimes, public names, and claims against executable behavior.

⚙️ CodeRabbit configuration file

Files:

  • docs/replay/agentic/continuous-profiles.md
  • docs/aic-backward-compatibility/migration.md
  • docs/sweeper/sdk.md
  • docs/replay/workloads.md
  • docs/replay/agentic/warmup.md
Read REVIEW.md before commenting.

⚙️ CodeRabbit configuration file

Files:

  • python/aisimulate/src/aisimulate/compiler.py
  • python/aisimulate/src/aisimulate/supervision.py
  • python/aisimulate/src/aisimulate/main.py
  • python/aisimulate/THIRD_PARTY_NOTICES.md
  • crates/core/src/replay/report.rs
  • python/aisimulate/src/aisimulate/recommend.py
  • THIRD_PARTY_NOTICES.md
  • tests/test_runner.py
  • python/aisimulate/src/aisimulate/sweeper/replay.py
  • docs/replay/agentic/continuous-profiles.md
  • tests/test_unified_cli.py
  • crates/core/src/replay/loadgen/snapshot.rs
  • CODEOWNERS
  • crates/core/src/replay/loadgen/mod.rs
  • python/aisimulate/src/aisimulate/runner.py
  • docs/aic-backward-compatibility/migration.md
  • python/aisimulate/src/aisimulate/sweeper/config.py
  • docs/sweeper/sdk.md
  • tests/test_agentx_live_warmup.py
  • docs/replay/workloads.md
  • python/aisimulate/src/aisimulate/config/traffic.py
  • crates/core/src/python.rs
  • docs/replay/agentic/warmup.md
  • crates/core/src/replay/loadgen/phase.rs
  • crates/core/src/replay/loadgen/driver.rs
Source excerpt: Keep run logs, investigation notes, and benchmark results out of `docs/`; measured evidence belongs under `benchmarks/evidence/`.

📄 CodeRabbit inference engine (AGENTS.md)

Files:

  • python/aisimulate/src/aisimulate/compiler.py
  • python/aisimulate/src/aisimulate/supervision.py
  • python/aisimulate/src/aisimulate/main.py
  • python/aisimulate/THIRD_PARTY_NOTICES.md
  • crates/core/src/replay/report.rs
  • python/aisimulate/src/aisimulate/recommend.py
  • THIRD_PARTY_NOTICES.md
  • tests/test_runner.py
  • python/aisimulate/src/aisimulate/sweeper/replay.py
  • docs/replay/agentic/continuous-profiles.md
  • tests/test_unified_cli.py
  • crates/core/src/replay/loadgen/snapshot.rs
  • CODEOWNERS
  • crates/core/src/replay/loadgen/mod.rs
  • python/aisimulate/src/aisimulate/runner.py
  • docs/aic-backward-compatibility/migration.md
  • python/aisimulate/src/aisimulate/sweeper/config.py
  • docs/sweeper/sdk.md
  • tests/test_agentx_live_warmup.py
  • docs/replay/workloads.md
  • python/aisimulate/src/aisimulate/config/traffic.py
  • crates/core/src/python.rs
  • docs/replay/agentic/warmup.md
  • crates/core/src/replay/loadgen/phase.rs
  • crates/core/src/replay/loadgen/driver.rs
Source excerpt: Binary parquet changes require a machine-readable summary of keys, shapes, units, row counts, coverage, and anomalies plus proof that a real consumer reaches the new data.

📄 CodeRabbit inference engine (REVIEW.md)

Files:

  • python/aisimulate/src/aisimulate/compiler.py
  • python/aisimulate/src/aisimulate/supervision.py
  • python/aisimulate/src/aisimulate/main.py
  • python/aisimulate/THIRD_PARTY_NOTICES.md
  • crates/core/src/replay/report.rs
  • python/aisimulate/src/aisimulate/recommend.py
  • THIRD_PARTY_NOTICES.md
  • tests/test_runner.py
  • python/aisimulate/src/aisimulate/sweeper/replay.py
  • docs/replay/agentic/continuous-profiles.md
  • tests/test_unified_cli.py
  • crates/core/src/replay/loadgen/snapshot.rs
  • CODEOWNERS
  • crates/core/src/replay/loadgen/mod.rs
  • python/aisimulate/src/aisimulate/runner.py
  • docs/aic-backward-compatibility/migration.md
  • python/aisimulate/src/aisimulate/sweeper/config.py
  • docs/sweeper/sdk.md
  • tests/test_agentx_live_warmup.py
  • docs/replay/workloads.md
  • python/aisimulate/src/aisimulate/config/traffic.py
  • crates/core/src/python.rs
  • docs/replay/agentic/warmup.md
  • crates/core/src/replay/loadgen/phase.rs
  • crates/core/src/replay/loadgen/driver.rs
Applicability reference: AGENTS.md: # AGENTS **Lint:** `python/aisimulate/.venv/bin/ruff check --config python/aisimulate/pyproject.toml python/aisimulate tests` and `python/aisimulate/.venv/bin/ruff format --check --config python/aisimulat...

📄 CodeRabbit inference engine (DEVELOPMENT.md)

Files:

  • python/aisimulate/src/aisimulate/compiler.py
  • python/aisimulate/src/aisimulate/supervision.py
  • python/aisimulate/src/aisimulate/main.py
  • python/aisimulate/src/aisimulate/recommend.py
  • python/aisimulate/src/aisimulate/sweeper/replay.py
  • python/aisimulate/src/aisimulate/runner.py
  • python/aisimulate/src/aisimulate/sweeper/config.py
  • python/aisimulate/src/aisimulate/config/traffic.py
🔀 Multi-repo context ai-dynamo/dynamo

Linked repositories findings

ai-dynamo/dynamo

  • Four Rust tests construct AgenticSnapshotOptions with seed-only struct literals. These must migrate to AgenticSnapshotOptions::seeded(7) after the PR’s API change. [::ai-dynamo/dynamo::lib/mocker/src/replay/agentic.rs:149-157] [::ai-dynamo/dynamo::lib/mocker/src/replay/agentic.rs:205-210] [::ai-dynamo/dynamo::lib/mocker/src/replay/agentic.rs:263-275]
  • Dynamo pins aisimulate-core to an exact separately published version, so the updated API requires coordinated dependency/version and downstream-source updates. [::ai-dynamo/dynamo::Cargo.toml:59-62]
  • Dynamo’s replay adapter currently exposes and forwards only agentic_snapshot, agentic_warmup, and agentic_profile; it has no agentic_warmup_policy field. [::ai-dynamo/dynamo::components/src/dynamo/replay/api.py:79-87] [::ai-dynamo/dynamo::components/src/dynamo/replay/api.py:313-326]
  • The Dynamo simulation path likewise builds its agentic options from only those three fields, so live_trajectory_v1 cannot be passed through this adapter without additional plumbing. [::ai-dynamo/dynamo::components/src/dynamo/replay/simulation.py:383-390]

ai-dynamo/aiconfigurator

  • No references to the new warmup policy or AgenticSnapshotOptions were found. Its configuration adapter is a separate strict contract and does not appear to consume these replay fields.
🔇 Additional comments: 26
docs/aic-backward-compatibility/migration.md: 1

616-617: 🗄️ Data Integrity & Integration

The paired-field invariant is enforced by into_prepared_snapshots, and negative tests already cover both partial-field cases. The migration note is accurate; no review change is needed.

crates/core/src/replay/loadgen/phase.rs: 1

4-9: LGTM!

Also applies to: 20-20, 32-45, 107-108, 119-119, 134-137, 146-167, 183-186, 219-224, 280-377, 391-407, 417-452, 463-540, 561-564, 663-665, 710-719, 772-772, 789-789, 914-1515

crates/core/src/replay/loadgen/mod.rs: 1

29-29: LGTM!

crates/core/src/replay/loadgen/snapshot.rs: 1

332-335: LGTM!

crates/core/src/replay/report.rs: 1

2336-2336: LGTM!

crates/core/src/replay/loadgen/driver.rs: 1

4-7: LGTM!

Also applies to: 19-21, 149-149, 187-187, 208-208, 261-269, 553-553, 572-572, 585-585, 595-599, 824-839, 848-848, 970-972, 987-987, 1004-1006, 1087-1132, 1152-1173, 1318-1333, 1353-1367, 1430-1466, 1477-1627, 1667-1668, 1683-1758, 1792-1840, 2029-2029, 2368-2368, 2689-2695, 2713-2713, 2724-2743, 2778-2782, 2812-2830, 2885-2885, 2898-2920, 2934-2934, 2988-2994, 3099-3101, 3123-3125, 3182-3188, 3229-3232, 3242-3248, 3401-3405, 3414-3435

crates/core/src/python.rs: 1

21-23: LGTM!

Also applies to: 104-105, 1556-1566, 1589-1593, 3187-3297

python/aisimulate/src/aisimulate/config/traffic.py: 1

163-171: LGTM!

Also applies to: 203-211, 273-287, 318-321

python/aisimulate/src/aisimulate/main.py: 1

160-161: LGTM!

Also applies to: 291-296

python/aisimulate/src/aisimulate/recommend.py: 1

735-736: LGTM!

python/aisimulate/src/aisimulate/runner.py: 1

86-86: LGTM!

Also applies to: 404-404

python/aisimulate/src/aisimulate/supervision.py: 1

431-436: LGTM!

python/aisimulate/src/aisimulate/sweeper/config.py: 1

284-284: LGTM!

Also applies to: 343-349, 413-416

python/aisimulate/src/aisimulate/sweeper/replay.py: 1

343-343: LGTM!

Also applies to: 542-552

python/aisimulate/src/aisimulate/compiler.py: 1

858-859: LGTM!

tests/test_runner.py: 1

2412-2432: LGTM!

tests/test_agentx_live_warmup.py: 1

1-121: LGTM!

tests/test_unified_cli.py: 1

1689-1689: LGTM!

THIRD_PARTY_NOTICES.md: 1

35-46: LGTM!

.github/codeowners/areas.yaml: 1

76-76: LGTM!

Also applies to: 278-279

CODEOWNERS: 1

80-80: LGTM!

Also applies to: 205-205

docs/replay/agentic/continuous-profiles.md: 1

92-96: LGTM!

docs/replay/agentic/warmup.md: 1

11-15: LGTM!

Also applies to: 173-183, 208-237, 262-264

docs/replay/workloads.md: 1

78-78: LGTM!

Also applies to: 422-423, 443-472

docs/sweeper/sdk.md: 1

216-219: LGTM!

Also applies to: 240-250

python/aisimulate/THIRD_PARTY_NOTICES.md: 1

35-46: LGTM!

📝 Summary

Risk: High

Human attention

  1. Verify source-clock handoff preserves causal delays only at the current frontier.
  2. Verify future spawn, join, replay-barrier, lane-offset, speedup, and recycled-play timing.
  3. Verify live-warmup gating and the AgenticSnapshotOptions migration across downstream callers.

Changed behavior

  • Adds opt-in live_trajectory_v1 warmup.
  • Keeps repeated_prefixes as the default.
  • Advances live dependency graphs, recycles requests, enforces lane quotas, and waits for server settlement before profiling.
  • Restores source-clock deadlines at handoff without changing engine scheduling or FPM timing.
  • Adds policy validation for offline engine execution, agentic warmup, agentic profiles, and runner capability support.
  • Adds AgenticWarmupPolicy and supports_agentic_live_warmup public contracts.
  • Changes AgenticSnapshotOptions construction. Seed-only callers must use seeded(seed). Exact imported selections must provide both selection fields. The type is no longer Copy or Eq.

Evidence supplied

  • 895 focused Python tests.
  • cargo test --workspace --locked --offline: 2,166 passed and 16 excluded public API tests.
  • Five public two-lane timing and capability probes.
  • Ten invalid-speedup cases.
  • Prior-head validation included 895 focused and 390 frozen-golden cases.
  • The supplied report states that frozen goldens were not rerun on the final head.
  • Documentation, SDK policy, imported-cut, snapshot migration, and primer-speedup updates are included.

Evidence still missing

  • Final-head frozen-golden results.
  • Hosted-check results for the exact current head.
  • Full AgentX/GPU benchmarking and hardware accuracy qualification.
  • Data coverage and empirical calibration.
  • Package-version and publication validation.
  • Downstream qualification for the public API migration.
  • Current review severity counts. No current review findings were supplied, so severity counts are unavailable.

Technical quality

The change has focused tests and explicit validation for policy configuration, timing, dependency advancement, failure handling, and capability checks. The implementation adds substantial Rust scheduling and warmup logic, so timing and handoff behavior require targeted human review.

Merge readiness

Not established. The supplied evidence does not include final-head golden results, hosted checks, downstream API qualification, or hardware qualification. The stated out-of-scope items remain release and production-qualification risks.

Adds the opt-in live_trajectory_v1 agentic warmup policy. It connects policy configuration to the native runtime, advances live dependency requests during preparation, and hands the surviving frontier into formal profiling. The change also documents policy support and a Rust snapshot-options API migration.

Changes: Live Agentic Warmup

Layer / File(s) Summary
Policy and primer scheduling
crates/core/src/replay/loadgen/phase.rs, crates/core/src/replay/loadgen/mod.rs, crates/core/src/replay/loadgen/snapshot.rs, crates/core/src/replay/report.rs
Adds AgenticWarmupPolicy, retains repeated_prefixes as the default, and implements live primer scheduling, per-lane quotas, and policy-specific preparation transitions. Tests cover scheduling, timing, and failure cases.
Live execution and profile handoff
crates/core/src/replay/loadgen/driver.rs
Integrates live requests with the workload scheduler. The driver compresses dependency waits during preparation, enforces lane quotas, excludes preparation-only activity from formal metrics, and restores the live frontier at handoff.
Configuration and runtime integration
crates/core/src/python.rs, python/aisimulate/src/aisimulate/config/traffic.py, python/aisimulate/src/aisimulate/sweeper/*, python/aisimulate/src/aisimulate/{compiler.py,main.py,recommend.py,runner.py,supervision.py}, tests/test_agentx_live_warmup.py, tests/test_runner.py, tests/test_unified_cli.py
Adds the policy to runtime and workload configuration, omits its default value from serialized output, and validates warmup, profile, stack, and runner requirements. Tests cover configuration, CLI rejection, runtime forwarding, and reports.
Policy documentation and ownership
docs/replay/agentic/*, docs/replay/workloads.md, docs/sweeper/sdk.md, THIRD_PARTY_NOTICES.md, python/aisimulate/THIRD_PARTY_NOTICES.md, CODEOWNERS, .github/codeowners/areas.yaml
Documents policy behavior, prerequisites, handoff, and support limits. Adds provenance notices and ownership rules for the new tests.

Snapshot Options Migration Note

Layer / File(s) Summary
Rust API migration guidance
docs/aic-backward-compatibility/migration.md
Documents the seeded constructor, paired optional selection fields, ownership changes, and continued compatibility of seed-only JSON.

Priority: ➖ Normal

Estimated code review effort: 4 (Complex) | ~60 minutes

Merge Risk: ⚪ Minimal · up to 5507c

Merge Risk: ⚪ Minimal · up to 5507c

This change adds an opt-in live trajectory warmup policy. The policy is limited to offline engine runs, and unsupported stacks and runners are rejected. The default warmup behavior is unchanged. No outstanding defects were found, so the change appears ready to merge once hosted checks pass on the current head.

Pre-merge checks: Passed 6 · Failed 2

Failed Failed checks: 2 warnings

Check name Status Explanation Resolution
Cross-Layer Contract Warning The live policy input is traced through Python validation, serialization, CLI gates, runner capability checks, Rust JSON, and native tests. The output/API contract is incomplete. `AgenticPhaseEvidence… Document agentic_phases.warmup_policy, including omission for repeated_prefixes and the value for live_trajectory_v1, in the replay result documentation. Document WorkloadDriver::new_agentic_warmup_with_policy and its policy and idl…
Modeling And Data Evidence Warning The PR changes timing formulas and dependency/handoff selection logic in crates/core/src/replay/loadgen/phase.rs and driver.rs. It supplies pinned AIPerf and AgentX methodology provenance (`phase.… Add reproducible before/after evidence for the changed timing behavior. Use the same pinned AgentX inputs and imported cuts with the base and head implementations, then check in a machine-readable summary containing per-request deadlines, s…
Passed Passed checks: 6 passed
Check name Status Explanation
Title check Passed The title precisely states the behavioral change: preserving causal delays after AgentX live warmup. It is specific despite using the fix: prefix.
Linked Issues check Passed Issue #464 is closed and supplies historical context only. The linked-issue record states that no active directly linked issue objectives or coding acceptance criteria apply. No coding requirement rem…
Out of Scope Changes check Passed The reported changes stay within the current pull request intent. Runtime changes implement selectable live AgentX warmup and causal-frontier timing. Tests cover the new policy and validation. Documen…
Compatibility Boundaries Passed PASS. The new agentic_warmup_policy uses the same two values and repeated_prefixes default in Python configuration, Rust deserialization, workload forwarding, runner validation, and documentation.…
Review Evidence Passed The description names commands and results, including focused Python tests, cargo test --workspace --locked --offline, public Rust probes, and frozen-golden cases. It includes negative and boundary …
Description check Passed The description clearly states the problem, implementation scope, causal-timing behavior, validation results, limitations, and integration state. It does not use the required Review map, Modeling or d…
Full details: Linked Issues check

Explanation

Issue #464 is closed and supplies historical context only. The linked-issue record states that no active directly linked issue objectives or coding acceptance criteria apply. No coding requirement remains for this pull request.

Full details: Out of Scope Changes check

Explanation

The reported changes stay within the current pull request intent. Runtime changes implement selectable live AgentX warmup and causal-frontier timing. Tests cover the new policy and validation. Documentation, SDK capability and migration updates describe those changes. CODEOWNERS and third-party notices support the touched implementation. The summary identifies unrelated streaming work, private frontend delay, package publication, benchmarking, and calibration as excluded.

Full details: Compatibility Boundaries

Explanation

PASS. The new agentic_warmup_policy uses the same two values and repeated_prefixes default in Python configuration, Rust deserialization, workload forwarding, runner validation, and documentation. Default serialization omits the field, and Rust report serialization omits the default policy, preserving legacy inputs and reports. The native Rust boundary accepts the policy and enforces the same prerequisites documented by Python. Package versions remain synchronized at 0.13.0; the PR changes no package, dependency, binding, or release-artifact files. Maturin still builds one aisimulate wheel from aisimulate-core, whose crate types remain rlib and cdylib. The docs state the wheel/crate version contract and keep Dynamo integration as downstream qualification, with no new Dynamo dependency or coupling introduced.

Full details: Review Evidence

Explanation

The description names commands and results, including focused Python tests, cargo test --workspace --locked --offline, public Rust probes, and frozen-golden cases. It includes negative and boundary checks for invalid speedups, unsupported stacks, 2x/0.5x scaling, caps, and timing cases. It separates exact-head local/native results, independent probes, prior-head parity evidence, and excluded AgentX/GPU production qualification. It also states that hosted checks must qualify the exact current head and that prior-head Full CI results do not transfer. The PR changes no workflow files and cites no inactive nested workflow as hosted CI evidence.

Full details: Description check

Explanation

The description clearly states the problem, implementation scope, causal-timing behavior, validation results, limitations, and integration state. It does not use the required Review map, Modeling or data provenance, or Tracking sections, and it does not explicitly identify the public or serialized contract change or provide the required Codex-reviewed commit. These are template omissions, but the description remains substantially complete and actionable.

Full details: Cross-Layer Contract

Explanation

The live policy input is traced through Python validation, serialization, CLI gates, runner capability checks, Rust JSON, and native tests. The output/API contract is incomplete. AgenticPhaseEvidence.warmup_policy is a new serialized field at crates/core/src/replay/loadgen/phase.rs:96-108, but the result documentation only lists generic agentic_phases contents at docs/replay/workloads.md:515-522 and does not define warmup_policy. The new public WorkloadDriver::new_agentic_warmup_with_policy at crates/core/src/replay/loadgen/driver.rs:1440-1475 is absent from docs/replay/api/rust.md:117-127, and the public API test covers only new_agentic_warmup at crates/tests/public-api/src/lib.rs:641-673.

Resolution

Document agentic_phases.warmup_policy, including omission for repeated_prefixes and the value for live_trajectory_v1, in the replay result documentation. Document WorkloadDriver::new_agentic_warmup_with_policy and its policy and idle-cap arguments in the Rust API/warmup documentation. Extend the public API test to import AgenticWarmupPolicy, construct the live-policy driver through the public method, and assert the live evidence field.

Full details: Modeling And Data Evidence

Explanation

The PR changes timing formulas and dependency/handoff selection logic in crates/core/src/replay/loadgen/phase.rs and driver.rs. It supplies pinned AIPerf and AgentX methodology provenance (phase.rs:7-16, THIRD_PARTY_NOTICES.md:16-45) and deterministic unit tests, including the causal-delay regression and speedup/cap cases (phase.rs:1263-1402). However, the tests use self-authored synthetic rows with hand-coded expected timestamps. They are not an independent oracle, held-out comparison, or machine-readable before/after summary with anomaly checks. The PR changes no golden or data artifact, and its documentation explicitly limits validation to native functional qualification rather than parity or performance evidence (docs/replay/agentic/warmup.md:228-236). Reported test counts do not provide the required explained before/after evidence.

Resolution

Add reproducible before/after evidence for the changed timing behavior. Use the same pinned AgentX inputs and imported cuts with the base and head implementations, then check in a machine-readable summary containing per-request deadlines, speedup/cap cases, expected causal delays, and anomaly checks for monotonicity, finite values, and cap handling. Alternatively, compare the supported behavior against the pinned AIPerf oracle and include an explained golden diff that documents intentional native-scheduler differences.

✨ Finishing Touches: 💡 2
⚔️ Resolve merge conflicts: 💡
  • Resolve merge conflict in branch hzhou-codex/fix-agentx-live-handoff-delays
🛠️ Fix failing CI checks: 💡
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

@tedzhouhk
tedzhouhk marked this pull request as ready for review October 16, 2026 05:11
@tedzhouhk
tedzhouhk requested review from a team as code owners October 16, 2026 05:11
Signed-off-by: hongkuanz <hongkuanz@nvidia.com>
Signed-off-by: hongkuanz <hongkuanz@nvidia.com>
Signed-off-by: hongkuanz <hongkuanz@nvidia.com>

@Harrilee Harrilee left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, approving. The same condition applies: #463's fixes plus a green stacked Full CI.

The fix is right. Only the current handoff frontier keeps a source-clock deadline. Blocked nodes with a pending Sequence/Spawn predecessor are skipped, so their timers come from the real dependency event (max(stale ≤ now, now + delay) after compressed_warmup_timing is cleared). Join/barrier gates keep their deadlines. Classification is a single O(nodes + edges) pass at handoff, not in the hot path. The regression reproduces the 4 s continuation behind a 300 s idle cap exactly.

Signed-off-by: hongkuanz <hongkuanz@nvidia.com>
Signed-off-by: hongkuanz <hongkuanz@nvidia.com>
Signed-off-by: hongkuanz <hongkuanz@nvidia.com>
Signed-off-by: hongkuanz <hongkuanz@nvidia.com>

@Harrilee Harrilee left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-approving on e4ff718. This PR's own delta against #465 is byte-identical to what I reviewed; the new commit only carries the #463/#465 fixes. This still assumes Full CI finishes green.

Signed-off-by: hongkuanz <hongkuanz@nvidia.com>
Signed-off-by: hongkuanz <hongkuanz@nvidia.com>
Signed-off-by: hongkuanz <hongkuanz@nvidia.com>
Signed-off-by: hongkuanz <hongkuanz@nvidia.com>
Signed-off-by: hongkuanz <hongkuanz@nvidia.com>
Signed-off-by: hongkuanz <hongkuanz@nvidia.com>
Base automatically changed from hzhou-codex/feat-agentx-live-warmup to main October 20, 2026 22:40
@tedzhouhk
tedzhouhk requested review from a team as code owners October 20, 2026 22:40
Signed-off-by: hongkuanz <hongkuanz@nvidia.com>
@tedzhouhk
tedzhouhk merged commit 3f8bcb9 into main Oct 21, 2026
73 checks passed
@tedzhouhk
tedzhouhk deleted the hzhou-codex/fix-agentx-live-handoff-delays branch October 21, 2026 00:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants