$ErrorActionPreference = 'Stop' $root = Split-Path -Parent $PSScriptRoot $page = Get-Content -LiteralPath (Join-Path $root 'pages/family/f01-family-feed.vue') -Raw -Encoding UTF8 foreach ($route in @('people: "R01"','gifts: "R03"','merits: "R11"','videos: "F10"')) { if (-not $page.Contains($route)) { throw "F01 product entry missing: $route" } } if ($page -match '(?s)\.family-page\s*\{[^}]*overflow:\s*hidden') { throw 'F01 must not clip long page content' } if (-not $page.Contains('return openPage(routes[key], { genealogyId: genealogyId.value }, "F01");')) { throw 'F01 child routes must preserve genealogy context through the navigation gateway' } if ($page.Contains('/pages/')) { throw 'F01 must not retain route literals outside the unique registry' } Write-Output 'F01-PRODUCT-ENTRY-CONTRACT PASS'