$ErrorActionPreference = 'Stop' $root = Split-Path -Parent $PSScriptRoot function Read-Page([string]$Path) { Get-Content -LiteralPath (Join-Path $root $Path) -Raw -Encoding utf8 } function Assert-Match { param([string]$Content, [string]$Pattern, [string]$Message) if ($Content -notmatch $Pattern) { throw $Message } } $pages = @{ G05 = Read-Page 'pages/genealogy/g05-genealogy-overview.vue' G06 = Read-Page 'pages/genealogy/g06-search-genealogies.vue' G09 = Read-Page 'pages/genealogy/g09-my-applications.vue' G10 = Read-Page 'pages/genealogy/g10-application-review.vue' G11 = Read-Page 'pages/genealogy/g11-genealogy-settings.vue' G12 = Read-Page 'pages/genealogy/g12-generation-poems.vue' } foreach ($entry in $pages.GetEnumerator()) { Assert-Match -Content $entry.Value -Pattern 'import AppLoading from [''"]@/components/AppLoading\.vue[''"]' -Message "$($entry.Key) must import AppLoading" } Assert-Match -Content $pages.G05 -Pattern '(?s).*?]+description="[^"]+"\s*/>.*?' -Message 'G05 must render AppLoading inside its transparent framed loading state' Assert-Match -Content $pages.G06 -Pattern ']+description="[^"]+"\s*/>' -Message 'G06 search results must render the section AppLoading variant' Assert-Match -Content $pages.G06 -Pattern 'requestedState === ''loading''' -Message 'G06 must expose its section loading state for visual review' Assert-Match -Content $pages.G09 -Pattern ']+description="[^"]+"\s*/>' -Message 'G09 must render a page AppLoading branch' Assert-Match -Content $pages.G10 -Pattern ']+description="[^"]+"\s*/>' -Message 'G10 must render a page AppLoading branch' Assert-Match -Content $pages.G11 -Pattern ']+description="[^"]+"\s*/>' -Message 'G11 must render a page AppLoading branch' Assert-Match -Content $pages.G12 -Pattern ']+description="[^"]+"\s*/>' -Message 'G12 must render a page AppLoading branch' Assert-Match -Content $pages.G10 -Pattern 'if \(query\.state === ''loading''\) \{ reviewState\.value = ''loading''; return \}' -Message 'G10 must preserve its loading presentation state' Assert-Match -Content $pages.G11 -Pattern 'query\.state === ''loading'' \? ''loading''' -Message 'G11 must preserve its loading presentation state' Assert-Match -Content $pages.G12 -Pattern 'query\.state === ''loading'' \? ''loading''' -Message 'G12 must preserve its loading presentation state' if ($pages.G06 -match 'class="search-status search-loading"') { throw 'G06 must not retain its duplicated text-only search loader' } Write-Output 'G-SERIES-APP-LOADING-CONTRACT PASS'