Skip to content

Audit SchemaExtensions v3 directives and regenerate both profiles - #3843

Open
Ramses Sanchez-Hernandez (ramsessanchez) wants to merge 11 commits into
powershell-v3from
ramsessanchez-schemaextensions-v3-migration
Open

Ramses Sanchez-Hernandez (ramsessanchez) wants to merge 11 commits into
powershell-v3from
ramsessanchez-schemaextensions-v3-migration

Conversation

@ramsessanchez

@ramsessanchez Ramses Sanchez-Hernandez (ramsessanchez) commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

N/A

Changes proposed in this pull request

Complete the SchemaExtensions shared-directive audit without inventing overrides for nonexistent directives, and keep both generated profiles compatible with the normally merged v3 framework and Authentication packaging.

Current revalidation target: 844672d7c2238f6b29a208f9ba73fe28e9e29cef (#3891), normally merged in b4c96784d0e9249e8342c7988aa56003888c04e2. Current pushed head: 86a1236a6d68fd91c5621976a051920ea7a37b47. All earlier audit, normal target integration and separate v1.0/beta generation history is preserved. Earlier 08e409a/Authentication 2.38.1 evidence is historical, not acceptance evidence for this target.

  • Scope remains only src/SchemaExtensions/SchemaExtensions.md: zero shared cmdlet directives, zero parameter alias/transform or schema/response directives to defer. Preserve the intentionally empty configuration and empty reviewed mapping ledger. No synthetic overrides, grouping policies or suppressed valid routes.
  • Explicitly exclude src/readme.graph.md and every profile-local directive. This module change does not edit or claim migration of those directives.
  • Require v1.0 and beta; neither is excluded. Preserve the existing wrapper/Beta Git casing. Current audit records aligned schemaExtension_* IDs and original-ID lineage for six unchanged HTTP operations.
  • Keep profile separate from the three GeneratorConfig settings. Tests cover both profiles with derived data on/off, naming/suppression outcomes, exact worker routes, and now explicit emitted GetRequestAdapter(profile) calls rather than removed bare calls.
  • Fresh combined generation updates six worker adapter calls and the generated project dependency-pruning policy per profile. Kiota client sources, projects and locks are genuinely unchanged in these latest runs. All projects/manifests were regenerated, not hand-edited.

New normal Authentication acceptance

Used only the normally packaged adapted Authentication 2.41.2 under:
C:\Users\ramsess\.copilot\session-state\4aa86cf9-d43c-4d2b-a4a3-aeaed01b8f29\files\authentication-v2-sync\final-source\modules.

A fresh child imported that exact root. All 64 package files match the provided SHA256 manifest; package SHA256 is 2FC09BFE6B70D313BC56DF8ADCCFB1976FB4E90A1898BF8A916B4B8B792898EB. Shipping Auth/Core/Loader/runtime/emitter/builder/template source was verified equal to producer 7ce0b474 in normal target 844672d7c2; the later Authentication.Test Xml change is not a shipping graph change. No stock gallery substitute, old 2.38 acceptance, manual DLL injection or load-context shim.

Both new wrapper bins and production packages contain exactly the three owned DLLs: wrapper, typed client and Wrapper.Runtime. Generated manifests require Authentication 2.41.2 and contain no dependency preloads. Authentication alone owns RMS, UriTemplate, Multipart and the Kiota closure. Previous bin output was retained in named historical evidence snapshots to prevent stale dependency copies contaminating the new packages. Nothing from those snapshots is packaged or committed.

Exact current validation commands/results

dotnet test .\tools\WrapperGenerator.Tests\WrapperGenerator.Tests.csproj -c Release --no-restore --filter 'FullyQualifiedName~SchemaExtensionsDirectiveMigrationTests|FullyQualifiedName~CmdletConfiguratorTests|FullyQualifiedName~NamingTests' --logger 'trx;LogFileName=targeted-tests.trx' --results-directory 'C:\Users\ramsess\.copilot\session-state\c94a4b5f-6be1-49ec-a511-bb8746d66ae3\files\post3891-844672' --nologo -v minimal
.\tools\Get-WrapperDirectiveMigrationInventory.ps1 -Module SchemaExtensions -FailOnUnresolved

Passed: 88/88 tests with nonzero TRX counters, zero failed/skipped; strict inventory passes with zero shared directives and no unresolved/invalid/unreviewed mappings. Existing NU1903 YamlReader 3.7.0 advisory is unchanged and outside module scope.

Fresh full profiles ran sequentially, v1.0 then beta, through the unchanged shared four-mutex queue:

& 'C:\Users\ramsess\.copilot\session-state\871a5292-dc5b-423e-8083-5165b0006603\files\Invoke-QueuedModuleBuild.ps1' -RepoRoot $PWD.Path -Module SchemaExtensions -ApiVersion v1.0 -Configuration Release
& 'C:\Users\ramsess\.copilot\session-state\871a5292-dc5b-423e-8083-5165b0006603\files\Invoke-QueuedModuleBuild.ps1' -RepoRoot $PWD.Path -Module SchemaExtensions -ApiVersion beta -Configuration Release

The queue invokes the unchanged full builder with openApiDocs_KiotaCompat. Spec existence and exact Git blobs were asserted first. No SkipKiota, GenerateOnly, NoCollisionData, legacy fallback or NO-CMDLETS result was used for the required full gates. Process-local isolated Kiota: 1.36.1+fd3bf87790149b87f40f7eae1a5feb9016625943; model parallelism 1; adapted Auth path first. PowerShell Core 7.6.9 and .NET SDK 10.0.403; PowerShell 5.1 is out of scope.

Supplemental normal production packaging reused each completed full client under the same bounded mutex. SkipKiota is used only for this separately recorded packaging step, not the full-generation acceptance gate:

$evidence = 'C:\Users\ramsess\.copilot\session-state\c94a4b5f-6be1-49ec-a511-bb8746d66ae3\files\post3891-844672'
pwsh -NoProfile -NonInteractive -File .\tools\Build-WrapperModule.ps1 -Module SchemaExtensions -ApiVersion v1.0 -Configuration Release -SpecRoot .\openApiDocs_KiotaCompat -SkipKiota -Pack -Prerelease alpha844672v1 -ArtifactsLocation "$evidence\v1.0\packages"
pwsh -NoProfile -NonInteractive -File .\tools\Build-WrapperModule.ps1 -Module SchemaExtensions -ApiVersion beta -Configuration Release -SpecRoot .\openApiDocs_KiotaCompat -SkipKiota -Pack -Prerelease alpha844672beta -ArtifactsLocation "$evidence\beta\packages"
Profile Compatible spec Git blob Fresh full build Supplemental pack Fresh package/transport gates Raw parity
v1.0 121c9a107ef31504c720af9f088c2b7bc685a707 Exit 0, OK, 7 exports, 53.2s Exit 0, OK, 18.3s All passed Exit 0, 7/7 routes
beta a0b0746ade2a173cb4e3aecdd2b299d96b63b39b Exit 0, OK, 7 exports, 59.1s Exit 0, OK, 21.2s All passed Exit 1, existing Mg/MgBeta differences on 7 routes

Normal package and actual merged Authentication transport gates, run in fresh children for each profile:

foreach ($profile in 'v1.0', 'beta') {
    $proof = Get-Content -Raw "$evidence\$profile\build-package-proof.json" | ConvertFrom-Json
    pwsh -NoProfile -NonInteractive -File .\tools\Test-WrapperModule.ps1 -PackagePath $proof.Package -ApiVersion $profile
    pwsh -NoProfile -NonInteractive -File .\tools\Test-WrapperAuthentication.ps1 -ManifestPath $proof.UnpackedManifest -ApiVersion $profile
    pwsh -NoProfile -NonInteractive -File "$evidence\Test-SchemaExtensionsNeighbors.ps1" -RepoRoot $PWD.Path -Profile $profile -ManifestPath $proof.UnpackedManifest -OutputPath "$evidence\$profile\neighbor-binder-http.json"
    pwsh -NoProfile -File .\tools\Compare-WrapperCmdletNames.ps1 -GeneratedPath ".\src\SchemaExtensions\wrapper\$profile\Cmdlets" -OutLedger "$evidence\$profile\raw-parity.csv"
}

Both normal package smoke gates pass: 7 exports/7 manifest entries, zero orphan workers, public dispatcher reaches NoGraphSession and 19 compiled untyped-binding cases. Complex/enum/scalar smoke cases are N/A for this module; actual typed array JSON is separately proven below.

Both actual merged Authentication gates pass all 17 checks using the real Connect-MgGraph session and GraphHttpClientFactory pipeline, with only an offline terminal handler and in-memory MockDataStore. Typed POST/PATCH JSON, typed results, 204 PATCH followed by selected-item GET refetch, exact encoded paths, bodyless DELETE, three WhatIf zero-HTTP cases and three genuine declined No prompts per profile are verified. Also verified session adapter reuse/rebuild/reconnect, alternating v1.0/beta service roots, explicit-token path, and 12 single Auth/Kiota dependency identities in their proper packaged load contexts. No live Graph/OAuth or credential-store operations.

Supplemental compiled-neighbor gates pass exact metadata for all seven exports, typed public item GET, ordinary default List, typed collection results, count, supported select/filter/top query binding, bodyless DELETE and three invalid-binding failures before HTTP. Beta generated requests use /beta even though the actual factory HttpClient retains its original /v1.0/ BaseAddress; the shared client is not mutated.

Limits kept explicit: raw beta Mg versus MgBeta parity remains unnormalized and unchanged. The Authentication gate verifies per-request headers on GET, but its typed PATCH/refetch case does not bind generic Headers. It does not prove generic bound PATCH Headers propagate to the fallback GET; the shared unmerged #3886 limitation remains and is not claimed fixed by #3891. No #3881/#3882/#3886 overlays or broad naming fixes are included.

History and retained evidence

  • Existing original audit 172de9b748, v1 generation b665f430a8, beta generation 91d6fd030f, and subsequent 08e409a revalidation history remain intact.
  • b4c96784d0: normal merge of current target.
  • 50e08973db: additive own test correction pinning emitted profile.
  • 0f5c1313d3: combined current v1.0 Kiota/client/cmdlet/project generation.
  • 86a1236a6d: separate combined current beta generation.

Evidence retained under $evidence: targeted-tests.trx, targeted-tests.log, strict-inventory-proof.json, source-auth-proof.json, complete auth-package-hashes.json, current-source-hashes.json, and verification-summary.json. Each profile retains raw full-build/supplemental-pack logs, actual packages and their extracted normal manifests, package/assembly/manifest SHA256s, normal package smoke logs, all actual HTTP captures/assembly contexts, neighbor/binder captures, and unnormalized parity logs/ledgers. Old target evidence is untouched. No bin/obj, binaries, packages or session logs are committed.

Other links

Record zero shared directives, compatible profile and route evidence, and preserve the empty configuration without synthetic overrides. Cover both compatible specs and the unchanged generated cmdlet surface.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Run full Kiota 1.36.1 client and wrapper generation plus Release compilation. Both regenerated source sets and generated projects are unchanged after Git line-ending normalization; the client lock records the Kiota version used. The built module exports all seven cmdlets.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Run full Kiota 1.36.1 client and wrapper generation plus Release compilation, preserving wrapper/Beta casing. Regenerated sources and projects are unchanged after Git normalization; locks record actual tool and compatible spec path casing. The built module exports all seven cmdlets.

Known baseline limitation: beta parity reports six existing Mg versus MgBeta name mismatches. Source identity against the powershell-v3 baseline confirms this audit introduces no rename or suppression; shared generator behavior is outside module directive scope.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Pass derived profile context separately for generation, naming and suppression, with both data modes covered. Refresh current aligned operation IDs and compatible spec hashes without changing empty shared directive configuration.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Run queued full Kiota 1.36.1 and cmdlet generation, project emission, Release compilation and fresh official Authentication 2.38.1 module import on integrated target 08e409a. All seven exports retain exact routes, List default and mutation ShouldProcess parameters; raw parity passes 7/7 routes.

Client and cmdlet sources and generated projects remain unchanged after Git normalization. The real client description hash changes for the current aligned compatible spec; preserve both generators in this profile boundary.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Run queued full Kiota 1.36.1 and cmdlet generation, project emission, Release compilation and fresh official Authentication 2.38.1 module import on integrated target 08e409a. All seven exports retain exact routes, List default and mutation ShouldProcess parameters; preserve tracked Beta casing.

Client and cmdlet sources and generated projects remain unchanged after Git normalization. The real client description hash changes for the current aligned compatible spec. Raw beta parity retains the existing Mg versus MgBeta limitation on seven metadata routes, including the dispatcher now counted by the current gate; no prefix normalization or broad naming change.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Assert explicit current profile on every generated worker with derived data enabled and disabled in both compatible profiles; reject removed bare adapter calls.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Fresh queued full Kiota and cmdlet generation/build on normal target 844672d, followed by supplemental production packaging reusing that client. Generated workers select v1.0 explicitly; the generated project removes obsolete wrapper dependency retention. Client sources and locks are unchanged.

Normal package carries only three owned DLLs and requires adapted Authentication 2.41.2 with no dependency preloads. Actual merged Authentication HTTP gate and package smoke pass: typed POST/PATCH/204-to-GET results, genuine declined confirmations, WhatIf, exact paths, session/profile/assembly identity, plus default GET/list/count, invalid binder zero-HTTP and bodyless DELETE. No binaries or logs committed.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Fresh queued full Kiota and cmdlet generation/build on normal target 844672d, followed by supplemental production packaging reusing that client. Generated workers select beta explicitly while shared factory HttpClient retains its v1.0 base; generated project removes obsolete wrapper dependency retention. Client sources and locks remain unchanged, preserving Beta casing.

Normal 3-DLL package and fresh compiled real Authentication transport proof pass: typed POST/PATCH/204GET/refetch, genuine No3, WhatIf0HTTP, exact beta URLs and single Auth/Kiota contexts. Supplemental GET/list/count/query/binder/bodyless DELETE gates pass. Raw Mg/MgBeta naming mismatch and unmerged generic refetch-header limitation are not claimed fixed.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

This branch has not been deployed

No deployments
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.

1 participant