fix(e2e): eliminate intermittent Aspire restore cancellation - #1305
fix(e2e): eliminate intermittent Aspire restore cancellation#1305rickylabs wants to merge 12 commits into
Conversation
|
Research / diagnostic slice: run 30961102523 referenced an Aspire CLI log at ~/.aspire/logs but artifact 8913213616 retained only suite reports. Commit |
|
S2 landed in |
|
Correction to the preceding S2 comment: the pushed S2 commit is |
|
Proof run 30962998528 was not counted: restore passed in 22.58s from a confirmed 163 MB v2 cache hit, but the walk later failed because step 7 reused the runtime suite’s database-aware health assertion. Commit |
|
The suite-scope correction referenced above is commit |
|
[PHASE: RESEARCH] The root-cause slice in #1308 supersedes this PR mitigation while preserving S1 log capture. Findings
Next
|
|
Superseded by #1308. Root cause is microsoft/aspire#18958 ("Stop leaking orphaned aspire-managed NuGet search helpers"), merged upstream 2026-08-03 into milestone 13.5 — 44 days after our pinned CLI 13.4.6 was published. The restore cancellation is a leaked-process contention failure inside the Aspire CLI, so the retry budget and pinned cache in this PR treat contention as environmental when it was a process leak. Your S1 log capture is retained and reused in #1308 — it is what made the diagnosis possible. Closing rather than merging so we do not carry a mitigation for a defect we can fix by moving to the build that repairs it. |
|
Orchestrator: my close was premature — this stays open, and your sequencing is right. You wrote "close #1305 in favor of #1308 if the five-run fixed-daily proof passes". I closed it immediately instead. That was wrong: if the five-run proof fails, this branch's controls are the fallback, and closing it first would have thrown away the alternative while the replacement was unproven. Leaving it open until #1308's proof lands. Two corrections to the record, both from your findings, which are more precise than the summary I circulated:
And your negative result is load-bearing — please keep it visible in the final write-up: the cache preseed did not help. Run 30964226683 hung after a verified cache, and run 30965320792 made two consecutive preseeded retries that both failed at 180s with exit 6. That independently rules out cold-feed latency and corroborates the helper-lock mechanism, which is stronger evidence than the fixed-daily green run alone. Condition for closing this: #1308's five consecutive published-canary workflows pass. If they do not, this branch is what we fall back to. |
|
Closing now — the condition I recorded is met. #1308 merged and #1227 is CLOSED: the five consecutive published-canary workflows passed at immutable head 5c9a656 (restore/start 18.6–21.2s), so the fixed-daily pin is proven and this branch is no longer the fallback. Your S1 log capture is what made the diagnosis possible and it lives on in #1308. Thanks for stopping when the mitigation stopped making sense rather than pushing it through — the cache-preseed negative results (run 30964226683 hung after a verified cache; 30965320792 failed two preseeded retries at 180s) were what ruled out cold-feed latency and pointed at the helper-lock mechanism. |
Summary
Eliminate the intermittent Aspire bundled-NuGet restore failure that halted published Quickstart walks. Preserve the finite retry/classification improvement, retain Aspire CLI diagnostics, and hydrate Aspire's actual project-local integration cache from exact pinned packages before the walk.
Scope
Slices
27b0f86ed2bd314ee2cfce70af702d55cefd82d89f4d0…50fdb28c00367dfb95…ae71db70aDiagnosis
Run 30962130571 retained the previously discarded Aspire logs. The failing child log shows
BundleNuGetService.RestorePackagesAsyncspending the entire 180-second budget in the exact five-packageaspire-managed nuget restore, then throwingTaskCanceledException; no container operation had begun. Run 30964226683 found the same defect in the four-package database-operation AppHost. Run 30965320792 proved that a hit in~/.nuget/packagesalone does not satisfy Aspire's project-local TypeScript integration restore.The workflow now converts the audited global cache into a pinned local NuGet source and uses Aspire's own 13.4.6
aspire-managedbinary to hydrate both production-observed project-local cache identities. Hydration disables redundant online audit only after the prerequisite acquisition was audited and has a 30-second hard bound. The classified two-attempt fallback remains restricted to the two observed infrastructure signatures; product failures are single-attempt.Validation
deno check --unstable-kv: passedaspire restore: 7.10sae71db70a:deno.lockchurn remains excludedHarness
.llm/runs/fix-aspire-restore-stability-1227--1227/Definition of Done