# Task 2 Report: Reuse shared PageHeader on G03 ## Status Complete. Commit: `9362c47` (`refactor: reuse shared header on G03`). ## Changed files - `pages/genealogy/g03-create-genealogy.vue` - `tests/g03-visual-states-contract.ps1` - `tests/g03-create-flow-contract.ps1` - `tests/g03-document-flow-contract.ps1` ## RED Command: ```powershell & powershell -ExecutionPolicy Bypass -File tests/g03-visual-states-contract.ps1 & powershell -ExecutionPolicy Bypass -File tests/g03-create-flow-contract.ps1 & powershell -ExecutionPolicy Bypass -File tests/g03-document-flow-contract.ps1 ``` Exit code: `1`. Failure evidence: - `G03 must use PageHeader with its dynamic title and custom back handler` - `Missing G03 flow contract: import PageHeader from "@/components/PageHeader.vue";` - `G03 must not retain private header token: flow-header` ## GREEN Command: ```powershell & powershell -ExecutionPolicy Bypass -File tests/g03-visual-states-contract.ps1 & powershell -ExecutionPolicy Bypass -File tests/g03-create-flow-contract.ps1 & powershell -ExecutionPolicy Bypass -File tests/g03-document-flow-contract.ps1 git diff --check ``` Result: exit code `0`; all three focused contracts emitted `PASS`, and `git diff --check` exited cleanly. Git emitted only LF-to-CRLF informational warnings for the four changed files. ## Self-review - Replaced only the private G03 header with `PageHeader`, using the required dynamic title, `custom-back`, and existing `goBack` handler. - Added the single shared-header import. - Removed all six specified private header style groups and the obsolete header asset reference. - Preserved G03 forms, dialogs, actions, backgrounds, data, and the existing two-step `goBack()` branching unchanged. - Updated contracts to require the shared header and reject private header tokens. ## Concerns - The known App-Plus `step=ancestor` route-parameter issue was deliberately not modified, as required. - No remaining task-specific concern. ## Follow-up: strict dynamic-title quotes Fixed `tests/g03-visual-states-contract.ps1` so its `PageHeader` title regex requires the Vue expression's internal single quotes. In the PowerShell single-quoted pattern, each required single quote is written as `''`. Regression commands: ```powershell # RED: old pattern incorrectly matched a candidate with double-quoted internal titles. $ErrorActionPreference = 'Stop'; $pattern = '(?s)'; $title1 = -join [char[]]@(0x5F55, 0x5165, 0x9996, 0x4EE3, 0x4EBA, 0x7269); $title2 = -join [char[]]@(0x521B, 0x5EFA, 0x5BB6, 0x8C31); $invalid = ''; if ($invalid -match $pattern) { throw 'Dynamic-title regex incorrectly matches double-quoted internal titles' } # GREEN and focused verification & powershell -ExecutionPolicy Bypass -File tests/g03-visual-states-contract.ps1 & powershell -ExecutionPolicy Bypass -File tests/g03-create-flow-contract.ps1 & powershell -ExecutionPolicy Bypass -File tests/g03-document-flow-contract.ps1 git diff --check ``` Output summary: the RED probe failed with `Dynamic-title regex incorrectly matches double-quoted internal titles`; after the fix, the strict-quote probe and all three G03 contracts emitted `PASS`, and `git diff --check` exited `0`. Commit: `a0d19f4` (`test: tighten G03 shared header contract`).