Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
91 commits
Select commit Hold shift + click to select a range
6d3fcb0
Migrate WinHttp semantic facts to prepared headers
jevansaks Oct 14, 2026
56795b3
Require repeatable selected SDK scraping before image publication
jevansaks Oct 14, 2026
e1f157b
Allow filtered scrapes without a global completeness marker
jevansaks Oct 14, 2026
d7fedd7
Preserve selected scrape inputs for repeatability diagnosis
jevansaks Oct 14, 2026
9faf8a2
Bind migration image receipts to immutable producer inputs
jevansaks Oct 14, 2026
f216b24
Isolate SDK ABI walks from in-process generator fixtures
jevansaks Oct 14, 2026
1df9435
Own raw SDK ABI cursors and record measured consumer compatibility
jevansaks Oct 14, 2026
3d62ae7
Preserve existing WinHttp logical scheme member names in headers
jevansaks Oct 15, 2026
d3c2c0a
Keep WinHttp metadata delta to native signatures and associations
jevansaks Oct 15, 2026
400231d
Record minimal WinHttp partition review delta and verified candidate
jevansaks Oct 15, 2026
bb83dc9
Use SDK-scanned imports and one shared header preparation stage
jevansaks Oct 15, 2026
5bef3c5
Record bounded WinHttp review cleanup evidence
jevansaks Oct 15, 2026
d816bcc
Document the reviewed header-annotation migration playbook
jevansaks Oct 15, 2026
0a01605
Migrate CEIP and ApplicationVerifier header facts
jevansaks Oct 15, 2026
bbe1829
Record exact first-batch grades and literal mutation controls
jevansaks Oct 15, 2026
7d89f8e
Migrate MagApi PsApi1 Time and Ual header facts
jevansaks Oct 15, 2026
1e97e92
Record second-batch grades and clarify reproduction scope
jevansaks Oct 15, 2026
ab29038
Migrate ToolHelp UpdateAssessment SecurityCenter and WinSat facts
jevansaks Oct 15, 2026
7bba885
Defer COM opt-ins with unapproved retval changes
jevansaks Oct 15, 2026
b9fae9d
Migrate Wsl and Xinput after opt-in admission
jevansaks Oct 15, 2026
162f811
Document native-derived annotation review policy
jevansaks Oct 15, 2026
5f10a5e
Merge tested scoped SupportedOS tooling into migration
jevansaks Oct 15, 2026
d6f8515
Adopt canonical SupportedOS spellings with matched direct inputs
jevansaks Oct 15, 2026
540e7e8
Merge qualified OS-only annotation tooling follow-up
jevansaks Oct 15, 2026
a8e1926
Require canonical OS spelling and exact accepted-image equivalence
jevansaks Oct 15, 2026
a18ba84
Factor existing OS facts into bounded SupportedOS scopes
jevansaks Oct 16, 2026
c5879a7
Record scoped OS equivalence and preserved evidence boundaries
jevansaks Oct 16, 2026
5cdbd64
Merge qualified constant OS annotation tooling
jevansaks Oct 16, 2026
8125cdd
Prepare SDK-pinned IDL annotations before MIDL
jevansaks Oct 16, 2026
129b900
Preserve pre-MIDL CI provenance and image equivalence
jevansaks Oct 16, 2026
25b752b
Consolidate patches by SDK artifact
jevansaks Oct 16, 2026
8ca41d8
Prepare public annotation macros in the bounded pilot
jevansaks Oct 16, 2026
9dea3ce
Merge qualified first-AST annotation tooling
jevansaks Oct 16, 2026
db6e7a4
Pin the qualified first-AST helper in the pilot recipe
jevansaks Oct 16, 2026
8bf75f2
Bind pilot groups before their first native association
jevansaks Oct 16, 2026
5df1154
Preserve compiler-projected type companions in pilot images
jevansaks Oct 16, 2026
b660cb3
Record source-bound local public-macro pilot grades
jevansaks Oct 16, 2026
0fa2577
Exercise property-storage source IDL in the annotation pilot
jevansaks Oct 17, 2026
972be22
Merge qualified first-AST method transport for the IDL pilot
jevansaks Oct 17, 2026
e662064
Pin the qualified method helper and SDK mirror for the IDL pilot
jevansaks Oct 17, 2026
4fce2e6
Bootstrap pilot annotations through shared SAL
jevansaks Oct 17, 2026
2cdeaa2
Merge qualified result encoding and SAL bootstrap tooling
jevansaks Oct 17, 2026
f446670
Merge final tooling playbook interfaces
jevansaks Oct 17, 2026
c479670
Grade canonical result encoding and native warning parity
jevansaks Oct 17, 2026
5e3bf6e
Merge qualified SDK sample annotation asset staging
jevansaks Oct 17, 2026
4d276d0
Reconcile historical constructor baseline with actual root images
jevansaks Oct 17, 2026
ac21a51
Use native C enum tags in property IDL annotations
jevansaks Oct 17, 2026
9dc3f51
Document native C enum spelling for association carriers
jevansaks Oct 17, 2026
e263bb3
Identify anonymous C records through the native cursor API
jevansaks Oct 17, 2026
57d7a31
Merge qualified logical-group tooling into pilot layer
jevansaks Oct 17, 2026
1bdfd55
Use native C enum tag for ApplicationVerifier association
jevansaks Oct 17, 2026
3767ccd
Check Avrf metadata with architecture-qualified identities
jevansaks Oct 17, 2026
31b5024
Consolidate SDK header annotation migration data
jevansaks Oct 24, 2026
2556a42
Inherit legacy-compatible annotation tooling
jevansaks Oct 24, 2026
4d4c007
Inherit GeneratorSdk managed dependency closure
jevansaks Oct 24, 2026
03959c8
Rebase SDK annotation patches onto SDK 28000 contexts
jevansaks Oct 24, 2026
e75d97d
Align SDK annotation preparation with SDK 28000
jevansaks Oct 24, 2026
7b205fd
Merge released Unicode header-context tooling
jevansaks Oct 24, 2026
75580ae
Inherit released native binding preservation tooling
jevansaks Oct 24, 2026
d86e5a5
Inherit released SDK preparation diagnostic envelope
jevansaks Oct 24, 2026
2b50230
Inherit native handle provenance tooling
jevansaks Oct 24, 2026
b9d787a
Merge released ANSI companion tooling
jevansaks Oct 24, 2026
36b7bf3
Inherit published source-proven RO and member naming tooling
jevansaks Oct 24, 2026
19ab971
Inherit published existing-enum Flags and MIDL spelling tooling
jevansaks Oct 24, 2026
3eed94a
Align header-only SDK preparation with published tooling
jevansaks Oct 24, 2026
c38adcf
Account for unavailable SDK originals without claiming migration comp…
jevansaks Oct 24, 2026
9a3cee6
Refresh deferred-source accounting without stale preservation claims
jevansaks Oct 24, 2026
214a8d2
Allow two hours for the full SDK scrape matrix
jevansaks Oct 24, 2026
a642ebc
Remove obsolete Hlsl namespace from SDK scraper prologue
jevansaks Oct 24, 2026
8f3c678
Inherit published tooling for SDK namespace fixtures
jevansaks Oct 24, 2026
fe46786
Align SDK import fixtures with the selected namespace surface
jevansaks Oct 24, 2026
20b5b87
Preserve SDK constant ownership and dependency storage
jevansaks Oct 25, 2026
58e469a
Merge qualified incomplete native typedef fixture correction
jevansaks Oct 25, 2026
d102d3c
Integrate qualified scanner-first tooling
jevansaks Oct 26, 2026
1012a7b
Annotate ImageHlp declarations and prioritize SDK constants
jevansaks Oct 26, 2026
435d9ec
Integrate qualified native provider optimization
jevansaks Oct 26, 2026
c9a5164
Integrate qualified tooling and batched tests
jevansaks Oct 27, 2026
4d10ff8
Synchronize reviewed SDK diagnostic tooling
jevansaks Oct 27, 2026
1946e9a
Merge optional SDK settings correction
jevansaks Oct 27, 2026
375de7f
Merge reviewed generated-source retirement diagnostics
jevansaks Oct 27, 2026
d0fa1b8
Merge reviewed external-header ownership tooling
jevansaks Oct 27, 2026
023ee90
Preserve reviewed SDK API and QueryInterface contracts
jevansaks Oct 27, 2026
b5f3021
Merge reviewed callback architecture composition
jevansaks Oct 27, 2026
f89cb10
Preserve reviewed SDK header compatibility contracts
jevansaks Oct 28, 2026
f0d40f2
Assert inferred HRESULT and documented PBI storage
jevansaks Oct 28, 2026
59084b4
Merge reviewed native typedef and constant tooling
jevansaks Oct 28, 2026
531c22a
Retire authored SDK typedef identity markers
jevansaks Oct 28, 2026
12aad22
Merge reviewed native typedef eligibility correction
jevansaks Oct 28, 2026
412c592
Merge published generic typedef ABI corrections
jevansaks Oct 28, 2026
df85f6f
Merge published native pointee ownership correction
jevansaks Oct 28, 2026
c69b6dd
Merge published native sibling ownership correction
jevansaks Oct 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
1 change: 1 addition & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
RecompiledIdlHeaders.zip filter=lfs diff=lfs merge=lfs -text
Windows.Win32.winmd filter=lfs diff=lfs merge=lfs -text
generation/WinSDK/patches/**/*.patch -text
2 changes: 1 addition & 1 deletion .github/copilot-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ Each arch job scrapes ALL partitions for that architecture.

**Import discovery before header overrides:** Before adding `_Win32_ImportLibrary_` or a manual DLL mapping, inspect the selected SDK's import libraries and the library-processing set in `scripts\CreateProcLibMappingForAllLibs.ps1`. Use `WinmdUtils dumpImports --lib <path>` to verify the actual symbols and DLL, not just the library filename. If a matching `.lib` was omitted or its imports were missed, fix shared discovery instead of adding a redundant header annotation. Use an authored override only when no authoritative SDK library mapping is available or the native contract genuinely requires an override; record the SDK/library search evidence.

**Header-annotation migration:** Follow `docs\copilot\plans\header-annotation-migration-playbook.md`. Classify the original artifact before editing: patch authored `.h` files directly, but patch original `.idl` and regenerate all affected outputs for IDL-owned declarations. Never patch a generated `.h` or independently patch the same shared artifact in different partitions. Use exact qualified tooling/pilot pins and keep raw OLD-to-NEW differences visible.
**Header-annotation migration:** Follow `docs\copilot\plans\header-annotation-migration-playbook.md`. Annotate the definition consumed by the actual SDK preparation. If preparation runs MIDL to regenerate that header, patch the owning IDL input before MIDL and regenerate the affected outputs. Otherwise, patch the consumed shipped SDK header in the established patch phase, even if it has a generated banner or corresponding IDL/ODL is present but not regenerated. An external IDL/ODL import or version match is not a prerequisite for that header patch. Do not edit the SDK mirror or prepared outputs directly, or independently patch the same shared artifact in different partitions. Use exact qualified tooling/pilot pins and keep raw OLD-to-NEW differences visible.

**Winmd equivalence:** After any change, the winmd must be compared against the baseline. The `NoSuggestedRemappings` test in `Windows.Win32.Tests` validates that no new unhandled remappings were introduced. API diffs are automatically posted as PR comments by CI. Run `.\scripts\DiffWinmdToBaseline.ps1` locally to see a full C# declaration diff against the last release.

Expand Down
5 changes: 5 additions & 0 deletions .github/tests/pr-api-diff-comment.test.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,11 @@ test('both artifact uploads still include the generated patch', () => {
}
});

test('full SDK scrapes have a bounded two-hour budget while build and test keep one hour', () => {
assert.match(validationJob('scrape'), /^ timeout-minutes: 120$/m);
assert.match(validationJob('build-test'), /^ timeout-minutes: 60$/m);
});

for (const [jobName, uploadCount] of [['scrape', 1], ['build-test', 2]]) {
test(`${jobName} always-run local uploads require a successful checkout`, () => {
const job = validationJob(jobName);
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/pr-validation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ jobs:
needs: [changes]
if: needs.changes.outputs.build_needed == 'true'
runs-on: windows-2022
timeout-minutes: 60
timeout-minutes: 120

strategy:
fail-fast: false
Expand Down
54 changes: 51 additions & 3 deletions docs/copilot/header-annotation-decisions.md
Original file line number Diff line number Diff line change
@@ -1,13 +1,59 @@
# Header annotation migration: problems and decisions

Updated: 2026-10-23 (UTC).
Updated: 2026-10-25 (UTC).

This is the running record of migration blockers, their evidence, and the decisions
made while resolving them. The goal is to express win32metadata's intended API
metadata faithfully in the selected SDK's original headers and IDL. A zero-difference
OLD-to-NEW WinMD is not a goal. Breaking changes and unexplained differences remain
visible for review.

## Constant conflict policy

Use `E_NOTFOUND = 0x80070490` from `um\devicetopology.h` as canonical.
Resolve competing loose constant projections by header priority and first-wins
selection. Give that header explicit priority; preserve the actual project
partition, traversed-header and native declaration order for unlisted headers.
Keep source-bound group ownership distinct from choosing between unrelated
native definitions.

Produce warnings and a complete conflict dump for final review. Retain every
candidate's native identity, header and source location, architecture, type,
storage and raw value, with the winner and selection reason. Include discarded
definitions even when their values match. The competing definitions remain
distinct native contracts, and raw OLD-to-NEW differences remain visible.

## Full generation and green PR gates

Produce the complete ordinary SDK image and its unfiltered same-SDK OLD-to-NEW
comparison using one coherent published toolchain and prepared-header identity.
Do not wait for individual native or physical investigations, projected-storage
changes, or character-projection fixes before running the full scrape, constant
extraction, manual-source composition, and emission.

Both stacked PRs must pass their exact-head normal CI gates. Parser, compiler,
emitter, integrity, and regression-test failures remain blocking and require
repairs. Do not disable jobs, blanket-skip tests, suppress diagnostics, or report
an incomplete image as successful.

Keep the migration-difference report separate from those build gates. Known
`PSTR` versus `CHAR*` projection and `VARENUM` storage differences are nonblocking
follow-up findings for image production; they are not equality or qualified
compatibility. Preserve the full raw differences and independent Const, import,
flag, and parameter-sequence evidence. Retain native, SAL, and coverage findings
without turning each investigation into a prerequisite for the next full image.
After establishing green normal CI, make further repairs with focused regression
coverage and a fresh normal CI run.

For original IDL unavailable in the shipped SDK, ordinary tests enforce exact
deferred-fact accounting rather than unconditional migration completion. The
report-only `tests\SdkAnnotationCoverage.Tests\SourceBlockedMetadata.json` ledger
retains all 30 historical units: 26 availability values, three associations and
`IdentityUpdateEvent` Flags. It supplies no emitter input or semantic fallback.
Missing entries, altered values, generated-header patches and false coverage or
preservation claims remain failures. Current physical projection is unqualified;
raw losses remain visible in the bulk comparison.

## Completion plan and next review

The next run follows a reviewed repair of the header-only source migration.
Expand Down Expand Up @@ -66,8 +112,10 @@ unchanged preparation test fails with MIDL9008 beneath the long session-artifact
prefix and passes beneath `artifacts\t-002`; no preparation success policy or
fixture spaces/quoting is changed. Source-state tests inspect effective global
plus partition annotation settings and source-owned facts, not retired sidecar
rows. Retiring a row does not prove source coverage: missing original-IDL floors
and native associations remain explicit test failures, not accepted baselines.
rows. Retiring a row does not prove source coverage. Missing original-IDL floors,
native associations and Flags remain exactly inventoried, deferred and
unqualified; ordinary accounting regressions reject unaccounted changes or false
coverage claims without making incomplete migration a generation prerequisite.

The manual-type inventory exposed replacement-era exclusions that survived
deletion of their handwritten providers. The frozen source packet retires ten
Expand Down
Loading
Loading