Public/New-KadenBetaInvitation.ps1

function New-KadenBetaInvitation {
    <#
    .SYNOPSIS
        Generate a PascalCase beta invitation passphrase.
    .DESCRIPTION
        Produces five curated words in PascalCase with no spaces, then the
        literal Beta suffix. Example shape: YarrowHavenDeltaOrchidWaveBeta.
        This is a shareable feedback-cohort signal only - not authentication,
        authorization, or a technical restriction.
    #>

    [CmdletBinding(SupportsShouldProcess = $true)]
    param()

    if (-not $PSCmdlet.ShouldProcess('beta invitation', 'New-KadenBetaInvitation')) {
        return
    }

    $words = @(Get-KadenInvitationWordList)
    $rng = [System.Random]::new()
    $picked = [System.Collections.Generic.List[string]]::new()
    while ($picked.Count -lt 5) {
        $candidate = $words[$rng.Next(0, $words.Count)]
        if (-not $picked.Contains($candidate)) {
            $picked.Add($candidate)
        }
    }
    $tokens = @(
        foreach ($word in $picked) {
            ConvertTo-KadenInvitationToken -Word $word
        }
    )
    return (($tokens -join '') + 'Beta')
}