Skip to content

Migrate Notes shared directives to the v3 cmdlet configuration framework - #3889

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

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

Conversation

@ramsessanchez

@ramsessanchez Ramses Sanchez-Hernandez (ramsessanchez) commented Nov 2, 2026 •

Copy link
Copy Markdown
Contributor

Changes proposed in this pull request

  • Migrate all nine cmdlet directives from shared src/Notes/Notes.md to the v3 module configuration framework and ordinary literal migration ledger. Each profile's complete actual historical selector population and current literal selection contain the same 298 surviving operations; none is declared removed. Preserve positive and unaffected-neighbor coverage.
  • Retain the explicitly approved source repair: append exactly one missing terminal ) to the active regex, preserving the invalid original and parse error. The invalid original never had an executable match set. The normal required-path ID alignment supplies all literal IDs; rejected Legacy lookup/integration fields are removed. A one-time historical route comparison remains only in module tests/audit, not in generator/runtime integration.
  • Preserve separate combined Kiota-client/cmdlet generation commits for v1.0 and beta. Give ambiguous nested section-group collections/counts meaningful path-backed names rather than selectors, incompatible groups, or endpoint pruning. Ordinary root List/Get defaults and all earlier migration/history boundaries are preserved. No unrelated global generator, emitter, runtime or derived-data changes are authored here.

Current normal Authentication refresh — target 844672d7c2238f6b29a208f9ba73fe28e9e29cef (#3891)

This PR normally merges the new target at 06f2591c6256639aa34ed502f88b30965ae8dcdf. The tightly coupled owned test correction a14667c3d0759feb223513f72d2dbdeb00438c2e pins explicit runtime profile calls (GetRequestAdapter("v1.0"/"beta")), without changing shared directive semantics or adding authored profile filters.

Both required full pipelines were rerun sequentially after that final source change. Fresh combined generation commits are v1.0 f009f813e888f95132752e9b84f8ca5a28688671 and beta 586b4cb0dfdefe4ee470481768858bf68e6f41cf. Each actual full run regenerates Kiota/client, cmdlets, projects and manifests together; Kiota source/locks remain byte-identical where appropriate, while profile-aware cmdlet adapter calls and normal wrapper dependency ownership/project changes are real generated deltas (165 v1.0 files; 171 beta files). Nothing is hand-edited in generated output or manufactured to force a generation diff. Existing beta casing and all prior commits remain.

Acceptance imports the normally packaged adapted Authentication 2.41.2 from the exact merged production source, not stock Gallery 2.41.2 or old 2.38.1. Complete 64-file SHA256 validation and fresh child import path/version checks pass. Authentication nupkg SHA256: 2FC09BFE6B70D313BC56DF8ADCCFB1976FB4E90A1898BF8A916B4B8B792898EB. The first process-local module path is C:\Users\ramsess\.copilot\session-state\4aa86cf9-d43c-4d2b-a4a3-aeaed01b8f29\files\authentication-v2-sync\final-source\modules, followed by the normal build-tool module paths. Isolated Kiota 1.36.1+fd3bf87790149b87f40f7eae1a5feb9016625943, cap 1, and the unchanged four-mutex queue are used in the same process environment. No global installation, package modification, manual DLL injection, loader shim or unmerged #3881/#3882/#3886 overlay.

Actual remaining runtime blocker — not an all-runtime pass

Each full Notes profile was exercised using normal manifest import, real Connect-MgGraph, the existing in-memory MockDataStore, and real GraphHttpClientFactory authentication pipelines with an offline terminal handler. Each profile records 64 PASS / 2 FAIL, actual exit 1. The two failures are the same known #3886 generic-header loss, once in Global and once in USGov: Update-MgSiteOnenoteNotebookContent -Headers @{ 'x-offline-marker' = 'patch-refetch-proof' } sends the bound marker on PATCH, but its successful 204-triggered GET refetch omits it. Both methods, exact URLs, typed PATCH JSON and returned typed notebook are captured; this is a genuine failed header-preservation assertion, not a source-only inference. The failures and raw captures remain retained; the shared emitter is not patched or bypassed in this module branch.

Successful real transport assertions cover typed notebook POST JSON/result, renamed Site Notebook PATCH JSON and 204→GET typed result, bodyless DELETE, typed copyNotebook action JSON/result (using each profile's actual baseline exported action name), migrated typed PageContent commands, typed default List/item GET, bound GET headers, cloud/profile roots, adapter reuse, request-context invalidation, reconnect/new-token handling, disconnected NoGraphSession, and single Authentication/Kiota dependency identities/load contexts. Each profile has eight genuine declined confirmation prompts and eight WhatIf invocations with 0 HTTP; invalid List/Get binder combinations also send 0 HTTP. No live Graph/OAuth/credential-store operations occur.

The real factory client's BaseAddress remains https://graph.microsoft.com/v1.0/, including USGov sessions. Actual generated beta requests nevertheless use /beta; USGov requests use https://graph.microsoft.us/<profile>. Alternating v1.0/beta typed calls preserve the proper cloud host without mutating the shared client's BaseAddress or session transport. Authentication normally owns RMS, UriTemplate and Multipart. Wrapper bins and packages contain exactly their own three DLLs, require Authentication 2.41.2, and have no RequiredAssemblies dependency preload. The old RMS serialization/loading gap is closed by the normal Authentication package, not by wrapper-local retention. Both Notes specs have 58 DELETE operations and zero DELETE operations declaring query parameters; #3882's required ordinary DELETE-query case is not applicable to Notes and is not claimed tested as a Notes surface.

Current validation commands/results

$repoRoot is this Notes worktree; $proof is C:\Users\ramsess\.copilot\session-state\0f2ddb19-b65a-4a6a-95cb-602f838839e3\files\notes-844672-validation. $queue is the unchanged coordinator C:\Users\ramsess\.copilot\session-state\871a5292-dc5b-423e-8083-5165b0006603\files\Invoke-QueuedModuleBuild.ps1. Invoke-NotesRefresh.ps1 verifies the exact adapted Auth package/64 hashes/import source, Kiota/spec hashes and complete process-local environment before invoking that queue. No skip/generate-only/no-collision/fallback flags are used.

Exact command / current gate Actual result on normal 844672 source
pwsh -NoProfile -File .\tools\Get-WrapperDirectiveMigrationInventory.ps1 -Module Notes -FailOnUnresolved -OutputPath "$proof\strict-inventory.json" PASS, exit 0, all 9 directives Mapped by unchanged ordinary target inventory
dotnet test .\tools\WrapperGenerator.Tests\WrapperGenerator.Tests.csproj --filter 'FullyQualifiedName~NotesDirectiveMigrationTests|FullyQualifiedName~NamingTests|FullyQualifiedName~CmdletConfiguratorTests' --logger 'trx;LogFileName=targeted-tests.trx' --results-directory $proof --verbosity quiet --nologo PASS, 115/115, including 31 Notes cases; derived data on/off and explicit runtime profiles
dotnet test .\src\GraphWrapperRuntime\Runtime.Tests\Microsoft.Graph.Wrapper.Runtime.Tests.csproj --filter 'FullyQualifiedName~GraphRouteAttributeTests|FullyQualifiedName~SessionAdapterCacheTests|FullyQualifiedName~StaticBearerTokenAuthenticationProviderTests' --logger 'trx;LogFileName=runtime-tests.trx' --results-directory $proof --verbosity quiet --nologo PASS, 12/12 updated applicable runtime tests
pwsh -NoProfile -File $queue -RepoRoot $repoRoot -Module Notes -ApiVersion v1.0 -Configuration Release PASS, exit 0, Status OK, 176 compiled exports; 42.9 s builder / 59.93 s queue wall
pwsh -NoProfile -File $queue -RepoRoot $repoRoot -Module Notes -ApiVersion beta -Configuration Release PASS, exit 0, Status OK, 182 compiled exports; 44.4 s builder / 47.75 s queue wall
pwsh -NoProfile -File "$proof\Test-NotesMetadata.ps1" -RepoRoot $repoRoot -Profile v1.0 and -Profile beta PASS, actual normal-manifest imports; 24/30 exact migrated/neighbor route assertions respectively, 301 suppressed routes absent each, 3 ordinary List defaults, 3 actual binder rejections and 2 renamed-action WhatIf checks each; three-owned-DLL/no-preload proof
pwsh -NoProfile -File "$proof\Test-NotesTransport.ps1" -RepoRoot $repoRoot -Profile v1.0 and -Profile beta FAIL retained, exit 1 each; 64 PASS / 2 FAIL each, Global+USGov actual authenticated factory captures. Both failures are #3886 bound generic Headers missing from PATCH204 GET refetch; not an all-runtime pass
pwsh -NoProfile -File "$proof\Pack-NotesExistingBuild.ps1" -RepoRoot $repoRoot -ApiVersion v1.0 and -ApiVersion beta PASS; unchanged normal builder packaging block on already full-built output, no second generation or skip-generation acceptance. Packages contain only manifest/deps and the three owned DLLs
pwsh -NoProfile -File .\tools\Test-WrapperModule.ps1 -PackagePath <exact generated profile nupkg> (both packages, paths recorded in $proof\v1-package.json / beta-package.json) PASS, 176/182 exports; no orphan workers, dispatcher NoGraphSession, complex/enum binding, scalar 1 and untyped 19 cases each
pwsh -NoProfile -File .\tools\Compare-WrapperCmdletNames.ps1 -GeneratedPath .\src\Notes\wrapper\v1.0\Cmdlets -OutLedger "$proof\v1-raw-parity.csv" FAIL / unchanged limit, exit 1, 171/176 raw routes match
pwsh -NoProfile -File .\tools\Compare-WrapperCmdletNames.ps1 -GeneratedPath .\src\Notes\wrapper\beta\Cmdlets -OutLedger "$proof\beta-raw-parity.csv" FAIL / unchanged limit, exit 1, 0/182 raw routes match; no Mg→MgBeta normalization

Before/after evidence verifies the same 64 adapted Authentication files and final authored/spec/runtime/template inputs. Package nupkg SHA256s: v1.0 6F62AEA2965FCEEB6B4B1D12B78AD648FE3138ADC59E757C890A116C624F7AAC; beta C10882107EECF7B0762EEEF8AE2E7AD9AFE78FB2BCE716565C4DC1442017B1D5. Current package/manifest/bin hashes, actual HTTP captures, load contexts, logs, test TRX, initial harness-assumption failures and corrections, commands and exact exit results are retained in the new proof directory. No proof artifacts or binaries are committed.

Scope, disposition and preserved limits

Required profiles: v1.0 then beta; excluded profiles: none. Shared module markdown only; all profile-local directives and src/readme.graph.md are ignored. Parameter aliases/transforms and schema/response directives remain Deferred (none occur in this shared file). PowerShell 7/Core only; no explicit 5.1 compatibility work.

Directive 1 suppresses all 298 selected operations/profile. Directive 2 covers 15 resource Page PATCH routes (12 overlap plus 3 direct suppressions), not the direct POST PageContent action. Directive 3 has 15 Site rename candidates (11 previously suppressed, 4 live). Directives 4/5 preserve Group RecentNotebook/PageContent naming. Directives 6–9 are superseded by directive 1 while retaining their active source and real successor evidence; no redundant unreachable overrides. There are 301 distinct reviewed suppressions per profile.

Compatible spec blobs remain v1.0 cffaf201c6e5c1e61e792be47e820e6eadd42e3d, beta fc79835fd611ab275d1e13c8cf6f740e2000647b. Historical source blobs remain d95f0fa9431657647f6fab06531e135b8c273500 / aeb4a3ddb187f0d837189546db955c38b753307f. The approved repair, finite ID alignment, source selection, naming and neighbors are unchanged by this refresh.

Frozen v1.0 derived data still omits three nested sectionGroups/{sectionGroup-id}/sectionGroups lists and three root sectionGroups/$count routes. No global unsuppression/oracle mutation or full-endpoint-fidelity claim. Raw v1.0 parity retains three intentionally distinct nested-count names plus two preexisting Site/User RecentNotebook differences; beta retains the baseline Mg rather than MgBeta prefix and naming/first-URI limits. No new mutation variant groups, schemas, aliases, selectors, authored API filters or naming expansion.

Historical evidence — not current 844672 proof

Original migration 73e01595a3, current API/naming corrections 59a25c75b3/a6c184325e, normal #3849 integration 86aec3935b, normal #3847 integration 09af69b1, ordinary literal correction 0e21d613, and all earlier combined profile generations remain in history. Prior 604bd96 full generation commits 686a4fe41877b0e7ce002c82f9067331a180493b / 83848ff1dd8a4ddfa99b16cb54f52cb0f3b66d65 had 176/182 exports with original Auth 2.38.1 (24.7/40.4 s, 115+10 tests). Those proofs and their notes-604bd968-validation artifacts are retained untouched and are not substituted for the current adapted Auth 2.41.2 full builds and transport results. The previous RMS/no-body-proof limitation is now superseded by actual current typed HTTP evidence; the #3886 refetch header failure remains real.

Other links

Repair the unbalanced shared selector with exactly one terminal parenthesis, retaining the invalid original and parse error. Account for all 298 actual legacy matches per profile and their unique compatible successors; preserve ordered suppressions, shared naming, and unaffected neighbors.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Verify both compatible profiles and all three resource roots: RootList and NestedList query/header sets, RootGet query/header sets, exact operation IDs and response shapes. Preserve the published nested List1 route contract for the shared multi-route dependency.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Keep every profile operation collection an explicit JSON array and pin the complete ordered Site rename and superseded nested content-action dispositions against both compatible profiles.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Pass generation profile separately, reprove all 298 actual legacy selector survivors against current compatible IDs, preserve strict Legacy bridge requirements, and give ambiguous nested section-group collections meaningful path-backed names without changing ordinary root defaults. Record the frozen v1 derived suppression gap rather than hiding it.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Full queued compatible-spec Release pipeline: exit 0, Status OK, 176 compiled exports. Kiota 1.36.1 (cap1), official unmodified Authentication 2.38.1. Fresh compiled assertions verify 301 reviewed suppressions absent, 21 migrated/neighbor route identities and ordinary List defaults. Frozen derived nested-list gaps and raw parity 174/176 remain documented limitations, not full-fidelity or parity passes.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
The full beta pipeline exposed three count-name collisions beyond the nested collection cases. Use the same meaningful path-backed nested noun for both collection and count, preserving endpoints and all ordinary List/Get defaults. Test both profiles with derived data disabled and beta with derived data enabled; rerun both complete pipelines after this shared source change.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Repeat the full queued compatible-spec Kiota+cmdlet Release pipeline on shared source a6c1843: exit0, Status OK,176 exports,21.7builderseconds. Kiota client/project/lock outputs are byte-identical; genuine cmdlet deltas rename three nested count files. Fresh compiled migrated/default/neighbor checks pass with explicitly documented baseline nested-list gaps. This is one combined real profile generation boundary, not a split client/cmdlet run.

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

Full queued compatible-spec Release pipeline on shared source a6c1843: exit0,StatusOK,182 freshly compiled exports,50.1builderseconds. Create previously absent lowercase beta client/cmdlet/projects/lock tree. Fresh compiled24route/default/neighbor assertions and301suppressedroute absence pass; meaningful distinct nested collections/counts preserved. Raw parity0/182 remains failed due baseline Mg versus MgBeta and naming limitations; no normalized parity or body/HTTP claim.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Keep the six frozen derived-data omissions explicit beside the source migration and its strict Legacy bridge blocker. Both actual full profile builds pass on final authored configuration a6c1843; this documentation-only correction does not change generator inputs or claim full fidelity.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Normally integrated #3847 restores all 298 selected same-profile current operations. Remove rejected Legacy bridge fields, refresh exact IDs and spec provenance, and keep a one-time independent historical path review. Preserve the approved one-parenthesis source repair, nested naming, ordinary defaults, six frozen v1 derived omissions and prior profile generation history. Validation scope is PowerShell7/Core only.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Full unchanged four-mutex queued Kiota+cmdlet Release pipeline against compatible blob cffaf20: exit0, StatusOK,176 compiled exports,24.7builderseconds on PowerShell7/Core with original complete official Authentication2.38.1 and isolated Kiota1.36.1/cap1. Actual compiled24route assertions,301suppressions absent,3ordinarydefaults,3realbinder rejections and2WhatIf checks pass. Client sources,cmdlets andprojects are byte-identical; only the genuine Kiota lock description hash changes. This preserves a combined full profile generation boundary, not a manufactured source delta.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Full unchanged four-mutex queued Kiota+cmdlet Release pipeline against compatible blob fc79835: exit0,StatusOK,182compiledexports,40.4builderseconds on PowerShell7/Core with originalcompleteofficialAuthentication2.38.1 and isolatedKiota1.36.1/cap1. Freshfullmodule30routeassertions,301suppressionsabsent,3ordinarydefaults,3realbinderrejections and2WhatIfchecks pass. Client sources,cmdlets andprojects are byte-identical; only the genuine Kiota lock description hash changes. Rawparity0/182 is recorded unnormalized as an existing limit, not a pass. This preserves one combined full-profile generation boundary.

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

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Require generated nested collection workers to use the separate runtime v1.0 or beta profile when obtaining the request adapter. Keep shared authored config, source selectors, names and baseline omissions unchanged.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Full queued Kiota+client+cmdlet Release regeneration after normal844672: exit0,StatusOK,176exports,42.9builderseconds; manifest requires adaptedAuthentication2.41.2, profile-aware workers and normal three-owned-DLL/no-preload packaging. Real Notes fullmodule metadata/default/binder safety passes. Actualfactory offlineGlobal/USGov transport has60PASS/2retained3886FAIL: bound genericheaders lost on PATCH204GETrefetch. Typed bodies/results and noHTTPsafety work; no globaloverlay/fakeall-runtime-pass.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Full sequential queued Kiota+client+cmdlet Release regeneration after normal844672: exit0,StatusOK,182exports,44.4builderseconds; explicit beta service-root adapter calls and three-owned-DLL/no-preload packaging. Full manifest migrated/default/binder checks pass. Real authenticated factory Global/USGov offline matrix64PASS/2retained3886FAIL: bound genericheaders lost on PATCH204GETrefetch. Typed serializers/results, profilecloud URLs, actualfactory BaseAddress immutability, cacheidentity and genuineNo/WhatIf0HTTP checks verified. No overlay or allruntimePASS claim.

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