$ErrorActionPreference = 'Stop' $page = Get-Content -Raw 'pages/genealogy/g01-my-genealogies.vue' function Assert-Contains([string]$Content, [string]$Pattern, [string]$Message) { if (-not $Content.Contains($Pattern)) { throw $Message } } Assert-Contains $page 'v-for="item in visibleShortcuts"' 'G01 must render the membership-filtered shortcut list' Assert-Contains $page '{{ currentRoleLabel }}' 'G01 must render the membership-derived role label' Assert-Contains $page 'getGenealogyFixtureAccess(currentGenealogy.value?.id).accessRole' 'G01 must consume the shared fixture access resolver' Assert-Contains $page 'item.key !== "applications"' 'G01 must remove application review for joined members' $selectedBinding = ':selected="item.id === currentGenealogy.id"' if (([regex]::Matches($page, [regex]::Escape($selectedBinding))).Count -ne 2) { throw 'G01 created and joined groups must render the same current-genealogy state' } Write-Output 'G01-ROLE-SHORTCUT-CONTRACT PASS'