Repository navigation
ci(h3): qualify synthetic MIDL generation and C object compilation - #210
Draft
bitmaster162 wants to merge 6 commits into
Draft
bitmaster162 wants to merge 6 commits into
bitmaster162 wants to merge 6 commits into
Conversation
Add a separate G3 workflow with pinned Windows tools, a closed child environment, bounded diagnostics and deadlines, and verified COFF outputs. Keep the existing G2 workflow unchanged and retain runtime/security HOLD.
Record bounded temporary-file snapshots around each successful compiler stage to identify the observed residual output. Preserve the empty-temp HOLD gate, compiler arguments, output bounds and cleanup behavior.
Extend only bounded diagnostic depth from two to four for the observed Microsoft/VSApplicationInsights hierarchy. Keep the entry/read limits and all compilation and residual-output HOLD rules unchanged.
Validate the observed three-directory shape, recheck it on disk, and remove only empty directories non-recursively from leaf to root. Record verified removals and retain HOLD for any file, unknown entry, reparse point or partial failure. Keep the final empty-temp check unchanged.
This was referenced Oct 12, 2026
This was referenced Oct 20, 2026
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why this change is needed
G2 R2 established that the synthetic IDL generates three C/header files. G3 verifies the next bounded step: the generated client and server C stubs compile into two unlinked AMD64 COFF objects. It does not qualify an RPC broker or authorize production use.
Changes and current identity
32f4682a410452adf06b7b1f480e35d2ba6bbf3b..github/workflows/h3-g3-c-stubs-object-only.yml.719ed32a64301fc8083a5aad0c4ed7bed316040e.46ac6bc46abde21b850e40f74e476a6a26d8107c.287d30cabcc395d7a4b28fa4f155a70eeed2b26a.7e119ccd1576b039065a37279a25632f0f8ce3c6.c2e96a0c8a5e3cf7d06e0011966a6a62c505230eac457e3d14c34475378a193a.c9462504ccd8ff39028f3b83adf1b020e4056758.67915aa4c68d7bf8d8dd3a8879f7abed0c12a5262e577f4e4bf9c8c7fe87fe09, identical to G2 R2.Resulting behavior
The G3 job uses
windows-2025-vs2026, observed image20260925.250.1, and six checked tool/file digests. It runs one MIDL stage followed by two separatecl.exe /TC /c /W3 /WX /Odinvocations, with absolute source and/Fopaths. MIDL can itself invoke CL for preprocessing.Child processes receive a closed environment, without inherited
CLor_CL_options. Arguments useArgumentList. Each raw diagnostic stream is limited to 16 KiB while reading, with FULL/PREFIX hash scope. MIDL has a 90-second deadline, each direct CL invocation 60 seconds, and the job six minutes. The first error stops later stages; there are no retries.Before/after manifests bind the IDL, generated files and compiled objects. Output names/counts/sizes and AMD64 COFF structure are checked. No LINK or generated program execution is performed.
Correction for the observed temporary directories
The initial native run compiled both objects successfully but correctly reported HOLD for an unidentified temporary entry. Bounded diagnostic revisions established a complete, unchanged three-directory structure after compilation:
Microsoft / VSApplicationInsights / vstel[0-9a-f]{32}The observed structure contained no files. The final correction accepts only an empty TMP directory or exactly this fully checked empty directory chain. It rechecks every level, rejects extra entries and reparse points, and deletes only empty directories leaf-first using non-recursive
Directory.Delete(path, false). Each removal is recorded after absence verification. A late file or partial failure remains HOLD. The original final-empty gate and verified whole-workspace cleanup remain in place.The pre-deletion snapshot stays in the receipt. This is not a telemetry exemption, telemetry opt-out, or proof of the creator PID. No registry, toolchain binary, compiler flag or environment change was used to hide the directory.
Evidence of the diagnosed behavior:
b25e5e2f9d6a130c3958a298abc7f0367d69eaaf.287d30cabcc395d7a4b28fa4f155a70eeed2b26a. Both objects validated; the old empty-TMP gate still reported HOLD; cleanup succeeded.Validation
38290669436, attempt1, job 114949710800 and actual receipt. All three stages exited0; warnings0; full bounded stdout/stderr hashes; both AMD64 COFF objects validated; three checked empty directories removed non-recursively; final TMP and whole-workspace cleanup verified.h3_r7b1c_lab_c.obj, 2,738 B, SHA-25610d7bb5ae761612be0c5bef3644dd63fa80a796eefa63cd57252d8cb6c664a5d.h3_r7b1c_lab_s.obj, 2,166 B, SHA-2563e208976eb201b5976a44497a9fe66a664a26d869ba919a2e26466470e9b8f6a.The native receipt above qualifies the current head. Local helper checks support its control behavior; historical results remain bound to their stated heads.
Scope and remaining limits
The G3 job performs no source checkout, artifact upload, RPC endpoint/service, owner-workstation action, production-memory access, manual dispatch/rerun, merge, deployment or branch deletion. The per-job subprocess bounds do not describe every automatic PR check: cumulative PR path filters also trigger G2 and existing repository CI.
Six digests do not claim a complete transitive SDK/compiler-backend closure. A process-tree kill request does not prove every descendant exited; unknown termination or missing cleanup evidence remains HOLD.
Success establishes only
PASS_OBJECT_COMPILE_ONLY.security_C0=UNVERIFIED_HOLD,native_T11_T12=UNEXECUTED, andproduction=HOLDremain unchanged. PR stays draft.