test: correlate original MSVC invocations with calibrated PDB events - #175
Conversation
…events Add explicit invocation-only QPC/owner begin/end records and read-only outcome correlation using the accepted ETW recorder. Preserve concurrent child ambiguity and shared-service RPC limits. Run a predeclared eight-case PCH Release/Modules Debug study with original workloads and RM queries, retaining the four-case recorder regression and negative readiness controls. Original errors and recovery outcomes remain separate; a complete record never makes a failed compiler control pass. Product source, scheduler, benchmark, VERSION5.5.0 and historical held PRs unchanged.
Source review found a cross-volume process-image correlation defectBefore accepting current-head Windows results, re-read the unchanged prior raw ETW artifact10093649346 (SHA256 Targeted amendment records the executable's own current Added four contract cases: cross-volume accepted, missing/wrong device and mismatched DOS-root rejected. New total40/40 local Python expectations (11accepted/29rejected), old36 retained. A synthetic regression independently rejects the old implementation and accepts the mapped one; the three extracted C++ wrapper tests still pass with explicit Win32/Windows-path mocks and strict GCC23+ASan/UBSan. No local MSVC execution is claimed. The old raw ETL and compiled workload are unchanged. The amendment is two files,23additions/2deletions relative to the submitted head. It does not change the eight-case budget, source input, compiler flags, success criteria, original matrix behavior, ETW readiness, external ABBA threshold or held decisions. The corrected head receives its own full exact-source validation. Initial-head completed/failed/cancelled artifacts will remain labeled with their actual source; no same-head rerun requested. |
Prior real trace shows compiler on C: and fixture on D:; trace-root-only normalization falsely reports absent cl.exe lifetimes. Capture the executable's current QueryDosDeviceW mapping in its invocation record and use it for process-image comparison. Add four positive/negative mapping contracts, preserving the original 36 tests. No basename/volume guesses, no compiler behavior, study budget or gate change. Earlier source results retained; corrected source requires separate CI and ABBA. VERSION5.5.0 unchanged.
Corrected source published; prior source remains separate evidenceNew head New invocation contracts are 40expected outcomes(11accepted/29rejected); the existing36trace contracts, native negative admission controls, new8/old4traces, original56/42matrices and unchanged independent19x4ABBA/fullnative/selfhost/package gates remain. This adds coverage, not a lowered acceptance requirement. Any cancelled/incomplete initial-head run is retained as such, never relabeled corrected-head validation. No same-head CI/benchmark rerun was requested. |
Iviesever
left a comment
There was a problem hiding this comment.
Final iteration review — accept bounded invocation/event correlation, retain historical holds
Source/evidence self-review with separate read-only reconstruction and raw-artifact recomputation; not an independent human approval. The already-published PR was resumed rather than duplicated or overwritten.
Base 11489fa74da519a20c8e3b91e8f8ce52f7e8cbd4; reviewed head 7ce1422b591366c5d4445c8cebd060ab73b01b0b; tree 9bd2908d7f8cc18ed4d37f1ea2143bf554106c1f. Native test-merge 14c7f76d72a1d0c44fbece23c0235608826a96a3 has that identical tree and exactly those parents. Reconstructed the complete published source, not the unused local alternative draft, and matched the Git tree. Full diff: four test/CI files, 497 additions / 25 deletions. No product src/include, scheduler, accepted ETW recorder/readiness/verifier, original benchmark/ABBA, manifest, native executable inventory, CLI/freshness or VERSION changes.
Matched blobs: probe 8a77eb59eec94f619e24d64751b2e55a7f90ac8e; collector 6ada00c64c2916dcac527389fec257fa909afcb5; invocation verifier 20eb688dd04a9ebaa74698cff768c33fe71db99b; workflow 4ee7df35ee7b1f356d52f9fbc3f425cb0928700e. Published Python40 and original trace36 contracts were independently executed locally after this reconstruction. No local MSVC/PowerShell/ETW execution is claimed.
Scope review
Explicit investigation entry points set the per-process span flag before workers start. Original tool stdout/stderr/result are saved before the ending timestamp/sidecar. The interval includes begin-sidecar and diagnostic serialization, not pure compiler execution. QueryDosDevice records the executable's own volume mapping, avoiding guessed device names or basename matching on cross-volume hosts. The physical file snapshots remain finite observations, not continuous file identity or locks.
The auditor matches native owner PID+creation time and returns all parent/image/time-compatible child starts. It deliberately does not use ordering to select an exact B child. A candidate start is not a retained child HANDLE or a per-RPC identity/completion certificate; the list should not be presented as either. Shared-service events merely contained in a compilation interval are not assigned exclusive request ownership. Incomplete spans/diagnostics and original failure/recovery outcomes remain distinct and fail closed where required.
Completed current-head execution
- Native Debug #721 /34332200130: actual Debug build, all paired subshards, runtime/ambient/include/parameter and freshness/side-output checks and final gate passed, not a classifier skip.
- Native Release #612 /34332200125: Stage0, all four Release shard jobs, full self-host, staging and exact runtime-only package validation passed. publish-release skipped.
- Documentation #173 /34332200079, Cross-Stage #198 /34332200075, existing PDB Open Investigation #3 /34332200070 passed.
- File Event #6 /34332200078: actual recorder/probe build, PowerShell parsing, 40/40 invocation expectations (11 accepted/29 rejected) and 36/36 original trace expectations (4 accepted/32 rejected), both native missing-readiness controls, new eight-case study and old four-case calibration study passed.
- Original default #16 /34332200045 and private #18 /34332200087: full56/42 matrices with their required positive controls passed.
- Independent Performance #570 /34332200063: exact base/head checkouts, both Release builds, instrumentation check, actual19x4ABBA and upload all ran. This is not a skipped performance job.
Raw investigation results — a useful attribution distinction
Verified immutable ZIP hashes/CRCs and reran the exact published trace and invocation analyzers against all raw files, comparing their entire recomputed results with saved reports:
- New study artifact 10096645386,25,227,758bytes,775entries; SHA256
341da88d5711eaa07fd18c3736797761927e3a75d916e5bb4258cf9ca8ff8725. - Existing calibration regression 10096595055,12,169,038bytes,331entries; SHA256
e67bede75da1e27ea279f0a3292595c490f02e41a1a9ad88e58efbc22812fda8. - Actual input 10096526922,1,372,060bytes; SHA256
6fd52d433de8a4de6a74d6027aaf35bef8ecb6e516099e9e822c823ec11a2a9a. - Contract artifact 10096224603,2,350bytes; SHA256
af93fe03d1a1df66b178ab790b5c747abaecbe6b145ffca5265a6d4fe8a8f47b.
8/8 new +4/4 reference traces complete, preserving the predeclared order. All original A compiles/B compile-link-run controls pass, pending A work is suppressed and original service survives. Each study's separately withheld-provider negative passes with no admitted child. Across12positive traces all24native failure calibrations and24successful-open calibrations rematch to the ETL-decoded stream. The Python verifier is not a second binary ETL decoder.
New study: 80 original/recovery invocation intervals,88 tool result files and176 stdout/stderr files checked. 10 intervals retain multiple direct-child candidates; none was guessed away. Original reference study adds44results/88diagnostics. Compared 80 workload source files and80 argv records to the same-head uninstrumented default-matrix controls; sources are byte-identical and argv equal after normalizing only fixture-directory identity.
The new traces retain502real PDB/PCH open-completion pairs and78nonzero statuses:72x0xc0000034 and6x0xc0000043. Crucially, all six sharing-violation events in slots02/03/06 are attributed by PID+creation identity to the coordinator ownership-probe process, not a candidate cl.exe or MSPDBSRV process. They overlap A/work0 intervals while the original compiler succeeds. Therefore they are not evidence of compiler failure or a compiler RPC retry. Per-API call stacks were not captured; no exact observer API or historical C1041 cause is established. This is precisely why temporal overlap must not be reported as exclusive attribution. The old four calibration cases retain302real pairs, including24x0xc0000034 and2x0xc0000043; no raw nonzero result was deleted.
Original source/capture provenance matches actual three executable members: MQB 7d0d5f6f176866e005ef79bd3fa389a923b3c5e658083f355a3c90b5a4d6a939; ownership probe 434400e9598a418f545ca39d012c8da10c38a3ccca8de3d4fb7f39f1c6c08508; recorder 7efcf4af9e80e3a86ee15bcbd903150eb983f7fcf4636136810e5b5e22df26cf. These are observer inputs, not the independent performance executable pair. No C1041 recurred in the new eight-case study; that does not explain or waive either historical failed control.
Independent ABBA — every scenario retained
Artifact 10096562695,35,856bytes,SHA256 29decbb05e8cba1dda23a08fc7077da3ff9dd89783635c34b9641ba0a66b1bb7. Recomputed all76paired samples, arithmetic, medians/MAD/nearest-rank P95, AB/BA/AB/BA orientation and marginal medians. 72/72 instrumented complete counters/breakdowns/compile-link-archive hit-miss match. Four external samples have unavailable counters, not zero. Only the last row is timings-off external Stopwatch elapsed; other rows use mqb.timings. Four-pair P95 is merely the maximum.
| Scenario | Paired median Δms | Paired median Δ% | MAD ms | Paired P95 Δms | Slower |
|---|---|---|---|---|---|
| cold | +39.846 | +2.31 | 13.953 | +63.336 | 3/4 |
| no-op | −0.090 | −1.93 | 0.091 | +0.071 | 1/4 |
| single-tu | −7.733 | −7.10 | 5.591 | +0.204 | 1/4 |
| public-header | −7.982 | −6.51 | 8.544 | +2.649 | 1/4 |
| build-run | −0.098 | −0.55 | 0.696 | +0.698 | 2/4 |
| link-only | −8.561 | −10.71 | 11.115 | +3.739 | 2/4 |
| target-scale-cold | −891.374 | −14.99 | 935.969 | +84.439 | 2/4 |
| target-scale-no-op | −1.138 | −3.13 | 2.110 | +2.358 | 1/4 |
| target-scale-no-op-auto | −0.331 | −0.99 | 0.665 | +0.814 | 1/4 |
| target-scale-no-op-j1 | +0.412 | +0.92 | 1.155 | +2.436 | 3/4 |
| target-scale-common-header-no-op | +2.692 | +6.58 | 6.384 | +15.937 | 2/4 |
| target-scale-single-tu | −22.959 | −14.19 | 10.843 | −1.679 | 0/4 |
| discovery-cold | +124.718 | +6.96 | 136.736 | +755.829 | 3/4 |
| discovery-no-op | +0.875 | +10.52 | 0.484 | +3.822 | 4/4 |
| discovery-header | +126.062 | +110.26 | 132.467 | +289.533 | 2/4 |
| modules-cold | −11.842 | −0.65 | 71.740 | +227.026 | 1/4 |
| modules-no-op | −0.053 | −0.89 | 0.234 | +0.417 | 2/4 |
| timings-enabled-no-op | −0.145 | −3.54 | 0.108 | +0.012 | 1/4 |
| timings-disabled-no-op (external) | +1.296 | +9.73 | 1.233 | +2.872 | 3/4 |
Unrounded external paired median +1.29565ms/+9.7257307% is close to the boundary: it exceeds1ms but does not exceed10%, so the predeclared conjunction is not crossed. Do not round it up/down to change acceptance or call it zero overhead. The 4/4slower discovery-no-op and+755.829ms discovery-cold tail remain; discovery-header's+110.26% instrumented median is not an external whole-process claim. No attribution to source changes has been established, no sample was discarded as noise, and favorable scale-cold observations do not cancel these adverse results. Historical #170 crossing and cold-tail debt remain open.
Original ownership failures and source correction retained
Current default56/private42 independently audited556/417tool results and1112/834diagnostics. All required unmanaged/drain controls pass, while seven default managed B failures (C1090/C1051/C2471) remain. Private original B builds happened to succeed, but all28A-started managed endings across both modes still kill the original service. Recovery does not replace original failures. B-resource identity is observed13/56default and3/42private; empty sets do not establish writer quiescence. Raw default10096706689 SHA256 f74f5b2230ab45310112aab17949a8a103afde25e7c608aaf547d6a0f866376a; private10096638752 42cc628bd483ff41d619dda7567bcd7422facb139a9961c6f82c20a4950a05bb.
Initial head0848071's invocation artifact 10096185164 (3,315,007bytes),SHA256 ac1374e247a042d7c550f0953d38008317992b80aee67edf2a094268c7c0773b, is preserved: one rejected slot/seven unattempted, error tool child lifetime absent. Its missing cross-volume mapping is not retroactively supplied. The new verifier also rejects that original record as missing mapping. The actual correction adds the current executable mapping plus four regression cases; no workload/threshold/sample-budget change or same-head retry.
Initial ABBA#569/34331286594 completed and is independently recomputed: artifact10096188161 SHA256 f6be3e2811fdfaed63e06a1f9b5612dd7cb80a736ca97bdb5d35a63831ee5e95, external median−1.2762ms/−9.1115%, maximum adverse+6.221ms;72semantic identities match. Keep its+927.861ms modules-cold tail. Initial Native Debug#720/Release#611/default#15/private#17/Event#5/PDB-study#2 were cancelled by the source correction; they are not completed current-head validation. Initial documentation/Cross-Stage passed separately.
A read-only external audit initially asserted an incorrect clock-label spelling (external-elapsed); the actual recorded value and original script use external_stopwatch. Corrected the audit, preserved that local failure, and reran only offline JSON analysis—no source, CI or raw measurements changed.
Decision / handoff
Accept ordinary merge with expected head 7ce1422b591366c5d4445c8cebd060ab73b01b0b, under current main/protection. This accepts a bounded evidence-correlation capability, not historical-cause resolution. The original gates were not relaxed. Keep VERSION5.5.0, #170/#172 held, M1b incomplete, both safety-authority fields false. No CLI cancellation, RPC ownership, complete-writer quiescence, transaction/lease or formal release authority is granted.
Next focus on distinguishing the coordinator's own file/query operations from compiler/shared-service operations using this accepted recorder and retained raw events—particularly the six actual coordinator-origin sharing violations—before attributing a C1041 to a compiler. Add only the minimal same-clock query boundary needed to disambiguate the existing evidence, not another competing observer or success-only remeasurement campaign. Historic missing events cannot be fabricated; any later held-PR review needs the current combined tree and explicit disposition of original failures.
Raw current/initial investigation and performance ZIPs, exact published source and replayable audits are retained in delivery; Actions artifacts expire after30days. Compiler-generated binaries are excluded by the diagnostic contract; finite post-case inventories are not failure-time snapshots. A title/ready-triggered skipped performance job is not a replacement for actual#570, and post-merge push CI is not claimed completed here.
Final decision: accept correlation tooling; retain #170/#172 HOLD
Final exact-source, execution, raw-artifact, full19-rowABBA review and decision
11489fa74da519a20c8e3b91e8f8ce52f7e8cbd4.7ce1422b591366c5d4445c8cebd060ab73b01b0b.9bd2908d7f8cc18ed4d37f1ea2143bf554106c1f.14c7f76d72a1d0c44fbece23c0235608826a96a3, exactly those base/head parents.Continue #164 with one bounded invocation/event-correlation topic. No held #170/#172 code is imported, no historical failure is explained away by later success, and M1b remains incomplete.
Delivered contract
Explicit
--invocation-caserecords separate begin/end QPC sidecars, native caller PID+creation FILETIME, executable identity and its own DOS-device mapping, and the original tool result. Original diagnostics/results are saved before the ending timestamp and sidecar; the interval therefore includes diagnostic serialization, not just tool execution. The per-process flag is set before workers. Normal probe modes take no new timestamps, though wrapper construction remains possible overhead.The new read-only verifier reuses the accepted calibrated trace audit, checks required AND observed result/argv/span/diagnostic inventories and finite A/B PDB physical identities, and returns all parent/image/interval-compatible tool-child starts. Concurrent B calls retain ambiguous candidates instead of choosing by order. Candidate starts are not retained tool HANDLEs, exact RPC identities or full child-completion certificates. Time overlap does not assign a shared service to a request. Missing evidence, original failure and later recovery remain distinct results.
The workflow retains the original four-case calibration study and adds the predeclared eight fresh A-started/direct-drain cases: PCH Release/Modules Debug, M/P, P/M, M/P (P/M,M/P,P/M,M/P overall). Original RM queries stay on; original24kA/6kB inputs,/FS,/Zi, PCH/Modules/optimization/runtime flags and large-A-only/bigobj stay unchanged. Each study has its own actual missing-readiness negative test, and every positive trace retains original before/after success/error32 calibrations. Missing evidence or failed original controls stops remaining slots without retries.
Completed accepted-head gates
The complete published source was reconstructed and its Git tree matched. Exact Python analyzers were rerun over raw ZIPs and compared with saved reports, not merely green workflow status.80source files and80argv records match the same-head uninstrumented default controls after normalizing only fixture directories.
New evidence and its limits
Eight new cases yield80invocation intervals,88tool results and176stdout/stderr records. Ten intervals preserve multiple candidates. All original A/B controls pass; original recovery is separate. New traces retain502real PDB/PCH completion pairs and78nonzero statuses, including six0xc0000043 sharing violations.
All six sharing violations are attributed to the coordinator ownership-probe process, not a candidate cl.exe or MSPDBSRV process, despite overlapping A/work0 intervals. They must not be described as compiler failure or proven compiler retry. Per-API call stacks were not captured, so no exact observer API or historical C1041 cause is established. The four reference traces retain302real pairs and26nonzero statuses. Raw failures are not removed because compilation succeeded. No C1041 recurred in the new8cases; historic cause remains unresolved.
All12positive traces have24matched native sharing-failure calibrations and24successful-open calibrations; native no-readiness controls admit no child. Actual observer-input executable hashes match provenance, but are not the independent performance binary pair. ETW raw/decoded correspondence is checked using the accepted decoder; Python is not a second binary ETL implementation. Finite file identities, calibrated coverage and zero reported loss do not enumerate all writers or prove durable quiescence.
Original default matrices retain seven intentionally adverse managed B failures(C1090/C1051/C2471). Private B results happened to succeed, but all28A-started managed endings still kill the original service. Recovery does not erase failure; missing resource identity is not a writer-lease certificate.
Independent performance and unchanged gates
External timings-off no-op paired median +1.29565ms/+9.7257307%,3/4slower: exceeds1ms but not10%, so it does not cross the unchanged predeclared BOTH>1ms AND>10% gate. It is close to the boundary, not zero overhead. Keep discovery-no-op4/4slower, discovery-cold+755.829ms tail and discovery-header+110.26% instrumented paired median. Every favorable/adverse sample and all72complete instrumented counter/breakdown/hit-miss identities are retained. Four external counter sets are unavailable, not zero; only that row uses external elapsed. Four-pair P95 is a maximum. No speedup claim, AA subtraction, presumed-noise deletion or historic #170/cold-tail debt closure.
Initial ABBA#569 remains separately recomputed and retained: externalmedian−1.2762ms/−9.1115%, adversemax+6.221ms, modules-cold tail+927.861ms. No same-head remeasurement was requested. A local read-only clock-label assertion was corrected to actual
external_stopwatch; only offline JSON was rerun, not CI/raw measurements.Original acceptance gates remain: exact-source full native/selfhost/package, original/new calibrated traces and negative controls, all required original matrix controls, synthetic record tests and independent19x4ABBA with the declared conjunction. The cross-volume amendment added four tests rather than dropping old36. All current applicable gates pass; acceptance does not waive held-PR requirements.
Initial failure and handoff
Initial
08480710...used only the trace directory's device mapping and rejected a real C:-tool/D:-fixture layout. Its first invocation slot reportstool child lifetime absent, one rejected/seven unattempted. Raw artifact10096185164 is preserved; the current verifier still rejects that unamended historical record for missing executable mapping. The two-file23addition/2deletion fix records the actual executable mapping, not a guessed path. Initial cancelled workflows are not new-head validation; completed old ABBA/doc/Cross-Stage results remain separately labeled.Accept ordinary expected-head merge under unchanged protection; keep #170/#172 held. Next distinguish coordinator query/file operations from compiler/shared-service operations using this recorder and retained events, with only the minimal same-clock observer-query boundary needed to investigate the six actual coordinator-origin conflicts. Do not create another competing observer, infer causality from overlap, or rely on success-only reruns. Historical missing events cannot be fabricated. Future held-PR decisions need the then-current combined tree and explicit original-failure disposition.
No CLI cancellation, writer-lease/transaction/build-run/session/residency or formal release authority is included. Raw current/initial artifacts, exact published sources and repeatable audits are retained; Actions retention30days. Compiler-generated binary bodies are excluded by the diagnostic contract, while separate input ZIPs retain actual observer tools. Post-case hashes are not failure-instant snapshots. Temporary perf title changed only after actual#570 finished; subsequent skipped perf jobs do not replace that measurement.