$ErrorActionPreference = 'Stop' $root = Split-Path -Parent $PSScriptRoot $page = Get-Content -LiteralPath (Join-Path $root 'pages/tree/t04-add-relative.vue') -Raw -Encoding UTF8 foreach ($required in @( 'appApi.getPerson(', 'createRequestController', 'isRequestCancelled', 'addRequestController.abort()', 'let loadSequence = 0', 'relationType.value', 'const relationIntents = Object.freeze({', 'appApi.createPerson(', 'appApi.createRelatedPerson(', 'await returnTo("T01", { genealogyId: genealogyId.value })' )) { if (-not $page.Contains($required)) { throw "T04 remote close contract missing: $required" } } foreach ($forbidden in @( '@/data/mock.js', 'findTreeMemberFixture', 'setTimeout(', 'addState.value = "preview"', 'addState.value = "unavailable"' )) { if ($page.Contains($forbidden)) { throw "T04 must not retain local preview owner: $forbidden" } } Write-Output 'T04_RELATIVE_REMOTE_WRITE_CONTRACT PASS'