You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
#31 converted 56 New-/Update- cmdlets to typed body parameters — implemented, independently
reviewed, merged into the integration branch, drift-confidence-guarded, full-suite regression
tested on both pwsh 7 and Windows PowerShell 5.1, and 22 live-tested against a real FlashBlade
(FB-A) with zero defects found. Nothing about those 56 cmdlets needs further work.
This issue exists purely to capture what the plan deliberately left out of scope, so it isn't
silently lost. Two groups below: (A) scope named in the original plan's own Task 13, and (B) items
surfaced and deferred during the #31 SDD session itself (2026-07-27 through 2026-07-28).
Group A — originally out of scope per the plan
Three cmdlets Don named on 2026-07-26 that fall outside the 56-cmdlet scope:
New-PfbActiveDirectory — 13 body fields + join_existing_account/names query params.
Also carries two of Don's live-behavior claims that need verifying against a real array, not
just the spec: the vserver::name default-attachment behavior, and a claimed silent aes256 encryption-type default.
New-PfbServer — dns field. create_ds and create_local_directory_service are already
confirmed as genuinely distinct query parameters (settled, not open).
Update-PfbServer — 1 documented body field (see the field-reference doc / drift report for
which one).
Unpersisted DeprecatedBodyProperties gap.tools/lib/PfbSpecTools.ps1 computes which
body properties are spec-deprecated, but Build-PfbCapabilityMap.ps1 never writes that flag
to Data/PfbCapabilityMap.json. Consequence: deprecated fields keep surfacing as addable gaps
in the drift report even after being deliberately excluded by hand. Write cmdlets silently drop documented body parameters (~48 New-*/Update-* cmdlets) #31 hand-excluded 3 such
fields (role on Update-PfbAdmin and Update-PfbDirectoryServiceRole, max_role on Update-PfbApiClient) — a persisted flag would make this automatic going forward.
Group B — surfaced and deferred during the #31 session
.EXAMPLE block rewrite-vs-append pattern. The plan's Global Constraint 12 said to keep
existing .EXAMPLE blocks and add new ones, but several implementers rewrote examples in
place instead. Quantified by the whole-branch review: 25 of the 56 converted cmdlets lost 34 -Attributes example blocks total (1 file lost 3, 7 lost 2, 17 lost 1). Two files have zero -Attributes examples left: Update-PfbLifecycleRule.ps1, New-PfbLegalHoldEntity.ps1 —
prioritize those two if this only gets partially fixed.
Two test-coverage gaps (code is correct, only coverage is missing):
Tests/Update-PfbLag.Tests.ps1 covers -Ports @() but not -AddPorts @()/-RemovePorts @().
Tests/Update-PfbLifecycleRule.Tests.ps1 covers two integer fields with an explicit 0 test
but not -KeepCurrentVersionFor/-KeepCurrentVersionUntil/-KeepPreviousVersionFor.
Dispatch-idiom drift.Public/Replication/New-PfbArrayConnection.ps1 and Public/Network/Update-PfbDns.ps1 use $PSCmdlet.ParameterSetName -eq 'Attributes' instead of
Global Constraint 4's mandated -like '*Attributes'. Harmless today (neither cmdlet has a
selector-axis parameter set to multiply against), but will silently stop working the moment
either cmdlet gains one. The other 39 split cmdlets in this plan use the correct idiom.
Two unresolved API-behavior puzzles from live-testing against FB-A (cmdlet-level puzzles,
not confirmed defects — worth a fresh investigation rather than further guessing, since
several plausible fixes were already tried and rejected by the array):
New-PfbLegalHoldEntity -Names <holdname> -FileSystemNames <fsname> fails with "Names query
parameter is missing" even though -Names was supplied. Tried once, not chased further.
Needs a raw curl/Invoke-RestMethod probe against POST /legal-holds/held-entities before
touching the cmdlet, to isolate cmdlet bug vs. documentation/understanding gap.
Update-PfbObjectStoreAccountExport fails with "Object store account export identifier is
required" regardless of -Name format tried (bare name, account/name compound) or -Attributes shape supplied. Three attempts made this session, all rejected. Needs the same
raw-probe treatment before assuming anything about the cmdlet's own code.
M5: -Locked $null on Update-PfbAdmin sends a literal JSON null to the array rather
than omitting the key or rejecting the input. Not necessarily a bug, but worth an explicit
decision on intended behavior.
M7: New-PfbApiToken -Timeout supplied alone (no -Name/-Id) is unusable due to a
pre-existing parameter-set ambiguity — predates this plan.
M9: piecemeal Everpure rebrand — at least 37 files under Public/Admin/ alone still say
"Pure Storage" in header comments even where the same file's .DESCRIPTION already says
"Everpure" a few lines below (self-contradictory). Repo-wide pre-existing condition, not
something Write cmdlets silently drop documented body parameters (~48 New-*/Update-* cmdlets) #31 introduced or was meant to fix — scope as "worth a dedicated rebrand pass."
Context
#31 converted 56
New-/Update-cmdlets to typed body parameters — implemented, independentlyreviewed, merged into the integration branch, drift-confidence-guarded, full-suite regression
tested on both pwsh 7 and Windows PowerShell 5.1, and 22 live-tested against a real FlashBlade
(FB-A) with zero defects found. Nothing about those 56 cmdlets needs further work.
This issue exists purely to capture what the plan deliberately left out of scope, so it isn't
silently lost. Two groups below: (A) scope named in the original plan's own Task 13, and (B) items
surfaced and deferred during the #31 SDD session itself (2026-07-27 through 2026-07-28).
Group A — originally out of scope per the plan
Three cmdlets Don named on 2026-07-26 that fall outside the 56-cmdlet scope:
New-PfbActiveDirectory— 13 body fields +join_existing_account/namesquery params.Also carries two of Don's live-behavior claims that need verifying against a real array, not
just the spec: the
vserver::namedefault-attachment behavior, and a claimed silentaes256encryption-type default.New-PfbServer—dnsfield.create_dsandcreate_local_directory_serviceare alreadyconfirmed as genuinely distinct query parameters (settled, not open).
Update-PfbServer— 1 documented body field (see the field-reference doc / drift report forwhich one).
The other ~78
New-/Update-cmdlets with body gaps this plan didn't touch. PR Drift Report enhancements: per-parameter confidence, enrichment, systemic gaps, annotations #60'sdrift-confidence rework made these visible: 137 total write cmdlets have body gaps across the
whole module; Write cmdlets silently drop documented body parameters (~48 New-*/Update-* cmdlets) #31 closed 56 of them. The remaining ~78 are a distinct, larger follow-up effort
— see
Reports/PfbApiDriftReport.mdfor the current list rather than duplicating it here.Parser-gap triage for the
Enabled/Nameescape-hatch clusters. 41 endpoints are stuck atpartialdrift-confidence because of two escape-hatch field-name clusters (Enabledon 15+endpoints,
Nameon 12+) that the AST resolver can't currently trace through. This blocksconfidence-based enrichment for most of the remaining ~78-cmdlet scope in item 2. Related:
API drift report: systemicGaps/conventionStrength only aggregate over high-confidence endpoints, undercounting some field names #59.
Unpersisted
DeprecatedBodyPropertiesgap.tools/lib/PfbSpecTools.ps1computes whichbody properties are spec-deprecated, but
Build-PfbCapabilityMap.ps1never writes that flagto
Data/PfbCapabilityMap.json. Consequence: deprecated fields keep surfacing as addable gapsin the drift report even after being deliberately excluded by hand. Write cmdlets silently drop documented body parameters (~48 New-*/Update-* cmdlets) #31 hand-excluded 3 such
fields (
roleonUpdate-PfbAdminandUpdate-PfbDirectoryServiceRole,max_roleonUpdate-PfbApiClient) — a persisted flag would make this automatic going forward.Group B — surfaced and deferred during the #31 session
.EXAMPLEblock rewrite-vs-append pattern. The plan's Global Constraint 12 said to keepexisting
.EXAMPLEblocks and add new ones, but several implementers rewrote examples inplace instead. Quantified by the whole-branch review: 25 of the 56 converted cmdlets lost 34
-Attributesexample blocks total (1 file lost 3, 7 lost 2, 17 lost 1). Two files have zero-Attributesexamples left:Update-PfbLifecycleRule.ps1,New-PfbLegalHoldEntity.ps1—prioritize those two if this only gets partially fixed.
Two test-coverage gaps (code is correct, only coverage is missing):
Tests/Update-PfbLag.Tests.ps1covers-Ports @()but not-AddPorts @()/-RemovePorts @().Tests/Update-PfbLifecycleRule.Tests.ps1covers two integer fields with an explicit0testbut not
-KeepCurrentVersionFor/-KeepCurrentVersionUntil/-KeepPreviousVersionFor.Dispatch-idiom drift.
Public/Replication/New-PfbArrayConnection.ps1andPublic/Network/Update-PfbDns.ps1use$PSCmdlet.ParameterSetName -eq 'Attributes'instead ofGlobal Constraint 4's mandated
-like '*Attributes'. Harmless today (neither cmdlet has aselector-axis parameter set to multiply against), but will silently stop working the moment
either cmdlet gains one. The other 39 split cmdlets in this plan use the correct idiom.
Two pre-existing dead query keys (not introduced by Write cmdlets silently drop documented body parameters (~48 New-*/Update-* cmdlets) #31; found via the live-testing sweep
and the whole-branch review's wire-key audit) — tracked separately given the unfiltered-write
risk on one of them: see Pre-existing dead query keys on Update-PfbArrayConnection and Update-PfbAsyncLog (unfiltered-PATCH risk on the former) #64 (
Update-PfbArrayConnection's dead-Namequery key, plusUpdate-PfbAsyncLog's deadnames/idsquery keys).Two unresolved API-behavior puzzles from live-testing against FB-A (cmdlet-level puzzles,
not confirmed defects — worth a fresh investigation rather than further guessing, since
several plausible fixes were already tried and rejected by the array):
New-PfbLegalHoldEntity -Names <holdname> -FileSystemNames <fsname>fails with "Names queryparameter is missing" even though
-Nameswas supplied. Tried once, not chased further.Needs a raw
curl/Invoke-RestMethodprobe againstPOST /legal-holds/held-entitiesbeforetouching the cmdlet, to isolate cmdlet bug vs. documentation/understanding gap.
Update-PfbObjectStoreAccountExportfails with "Object store account export identifier isrequired" regardless of
-Nameformat tried (bare name,account/namecompound) or-Attributesshape supplied. Three attempts made this session, all rejected. Needs the sameraw-probe treatment before assuming anything about the cmdlet's own code.
Stale, superseded local branch
fix/fleet-member-wire-contract(tip663c771,2026-07-23) — not an ancestor of the merged Write cmdlets silently drop documented body parameters (~48 New-*/Update-* cmdlets) #31 branch, and diverges in design from what
shipped (
New-PfbFleetMemberon Write cmdlets silently drop documented body parameters (~48 New-*/Update-* cmdlets) #31 exposes-FleetName/-FleetId+-Members [hashtable[]]; the old branch exposed-FleetName+-FleetKeyinstead). The Write cmdlets silently drop documented body parameters (~48 New-*/Update-* cmdlets) #31 shape isspec-correct (
POST /fleets/memberstakes{ members: [ { key, member } ] }). Recommendclosing/deleting the old branch rather than ever merging it.
Older deferred audit items, carried forward from before Write cmdlets silently drop documented body parameters (~48 New-*/Update-* cmdlets) #31's Tasks 2–10 even started
(out of scope for a correctness pass):
-Locked $nullonUpdate-PfbAdminsends a literal JSONnullto the array ratherthan omitting the key or rejecting the input. Not necessarily a bug, but worth an explicit
decision on intended behavior.
New-PfbApiToken -Timeoutsupplied alone (no-Name/-Id) is unusable due to apre-existing parameter-set ambiguity — predates this plan.
Public/Admin/alone still say"Pure Storage" in header comments even where the same file's
.DESCRIPTIONalready says"Everpure" a few lines below (self-contradictory). Repo-wide pre-existing condition, not
something Write cmdlets silently drop documented body parameters (~48 New-*/Update-* cmdlets) #31 introduced or was meant to fix — scope as "worth a dedicated rebrand pass."
References
item 8 above)