diff --git a/docs/implplan/SPRINT_20260313_001_Platform_scratch_iteration_007_full_route_action_audit.md b/docs/implplan/SPRINT_20260313_001_Platform_scratch_iteration_007_full_route_action_audit.md new file mode 100644 index 000000000..fbec0e397 --- /dev/null +++ b/docs/implplan/SPRINT_20260313_001_Platform_scratch_iteration_007_full_route_action_audit.md @@ -0,0 +1,76 @@ +# Sprint 20260313_001 - Platform Scratch Iteration 007 Full Route Action Audit + +## Topic & Scope +- Wipe Stella-owned runtime state again and rerun the documented setup path from zero state. +- Re-enter the application as a first-time user after bootstrap and rerun the full route, page, and page-action audit with Playwright. +- Group any newly exposed defects before fixing so the next commit closes a full iteration rather than a single page slice. +- Working directory: `.`. +- Expected evidence: wipe proof, setup convergence proof, fresh Playwright route/action evidence, grouped defect list, fixes, and retest results. + +## Dependencies & Concurrency +- Depends on local commit `27d024705` as the clean baseline for the next scratch cycle. +- Safe parallelism: none during wipe/setup because the environment reset is global to the machine. + +## Documentation Prerequisites +- `AGENTS.md` +- `docs/INSTALL_GUIDE.md` +- `docs/dev/DEV_ENVIRONMENT_SETUP.md` +- `docs/qa/feature-checks/FLOW.md` + +## Delivery Tracker + +### PLATFORM-SCRATCH-ITER7-001 - Rebuild from zero Stella runtime state +Status: DONE +Dependency: none +Owners: QA, 3rd line support +Task description: +- Remove Stella-only containers, images, volumes, and the frontdoor network, then rerun the documented setup entrypoint from zero Stella state. + +Completion criteria: +- [x] Stella-only Docker state is removed. +- [x] scripts/setup.ps1 is rerun from zero state. +- [x] The first setup outcome is captured before UI verification starts. + +### PLATFORM-SCRATCH-ITER7-002 - Re-run the first-user full route/page/action audit +Status: DONE +Dependency: PLATFORM-SCRATCH-ITER7-001 +Owners: QA +Task description: +- After scratch setup converges, rerun the canonical route sweep plus the full action audit suite and enumerate every newly exposed issue before repair work begins. + +Completion criteria: +- [x] Fresh route sweep evidence is captured on the rebuilt stack. +- [x] Fresh action sweep evidence is captured across the current aggregate suite. +- [x] Newly exposed defects are grouped before any fix commit is prepared. + +### PLATFORM-SCRATCH-ITER7-003 - Repair the grouped defects exposed by the fresh audit +Status: DONE +Dependency: PLATFORM-SCRATCH-ITER7-002 +Owners: 3rd line support, Architect, Developer +Task description: +- Diagnose the grouped failures exposed by the fresh audit, choose the clean product/architecture-conformant fix, implement it, and rerun the affected verification slices plus the aggregate audit before committing. + +Completion criteria: +- [x] Root causes are recorded for the grouped failures. +- [x] Fixes land with focused regression coverage where practical. +- [x] The rebuilt stack is retested before the iteration commit. + +## Execution Log +| Date (UTC) | Update | Owner | +| --- | --- | --- | +| 2026-03-13 | Sprint created for the next scratch iteration after local commit `27d024705` closed the previous clean baseline. | QA | +| 2026-03-13 | Removed Stella-only containers, `stellaops/*:dev` images, Stella compose volumes, and the `stellaops` / `stellaops_frontdoor` networks to return the machine to zero Stella runtime state for the new iteration. | QA / 3rd line support | +| 2026-03-13 | The zero-state setup rerun completed cleanly: `36/36` solution builds passed, the full image matrix rebuilt, platform services converged, and `61/61` Stella containers are healthy on `https://stella-ops.local`. | QA / 3rd line support | +| 2026-03-13 | Fresh canonical route verification completed cleanly on the rebuilt stack: `111/111` routes passed with no route regressions or runtime issues recorded in the route sweep artifact. | QA | +| 2026-03-13 | The full first-user aggregate Playwright audit completed cleanly: `20/20` suites passed, including the explicit user-reported admin/trust/reporting checks, search route matrix, search result action sweep, and the uncovered-surface release/security/evidence adjacency sweep. No grouped product defects were exposed in this scratch cycle. | QA | +| 2026-03-13 | The scratch iteration runner was hardened after root-causing a PowerShell pipeline contract bug: native child-process stdout was leaking into JSON-returning helper calls and corrupting typed audit results. `Invoke-External` now streams native output to the host while preserving object-only return values for the audit summary pipeline. | 3rd line support / Developer | + +## Decisions & Risks +- Decision: each scratch iteration remains a full wipe -> setup -> route/action audit -> grouped remediation loop; if the audit comes back clean, that still counts as a completed iteration because the full loop was executed. +- Risk: scratch rebuilds remain expensive, so verification stays Playwright-first with focused test/build slices rather than indiscriminate full-solution test runs. +- Decision: iteration 007 closes without product-code fixes because the full scratch audit stayed clean after the runner contract bug was removed; the only change required this cycle was to keep the automation truthful so future scratch iterations do not misclassify audit output. + +## Next Checkpoints +- Start iteration 008 from a fresh Stella-only wipe. +- Rerun the documented zero-state setup path and then the full Playwright route/page/action audit before considering any fixes. + diff --git a/scripts/run-clean-scratch-iterations.ps1 b/scripts/run-clean-scratch-iterations.ps1 index 91c685442..71804849c 100644 --- a/scripts/run-clean-scratch-iterations.ps1 +++ b/scripts/run-clean-scratch-iterations.ps1 @@ -31,9 +31,21 @@ function Invoke-External { Push-Location $WorkingDirectory try { - & $FilePath @ArgumentList + $resolvedFilePath = $FilePath + if (Test-Path $FilePath) { + $resolvedFilePath = (Resolve-Path $FilePath).Path + } + + if ([System.IO.Path]::GetExtension($resolvedFilePath).Equals('.ps1', [System.StringComparison]::OrdinalIgnoreCase)) { + $powershellPath = (Get-Command powershell.exe -ErrorAction Stop).Source + & $powershellPath -NoLogo -NoProfile -ExecutionPolicy Bypass -File $resolvedFilePath @ArgumentList 2>&1 | Out-Host + } + else { + & $resolvedFilePath @ArgumentList 2>&1 | Out-Host + } + if ($LASTEXITCODE -ne 0) { - throw "Command failed: $FilePath $($ArgumentList -join ' ')" + throw "Command failed: $resolvedFilePath $($ArgumentList -join ' ')" } } finally {