diff --git a/plans/astro-refactor/task-19-verify-repoint.md b/plans/astro-refactor/task-19-verify-repoint.md index b8d36b3..79576b0 100644 --- a/plans/astro-refactor/task-19-verify-repoint.md +++ b/plans/astro-refactor/task-19-verify-repoint.md @@ -108,3 +108,59 @@ to remove one, that is the escalation path, not the workaround. `.agents/scripts/visual-regression.mjs` runs. It used to throw for everyone, which is why no task in this plan ever produced the captures its brief asked for. + +## Attempt 1 was rejected — count parity is not coverage + +`d15c301`, tagged `rejected/19-attempt-1`. It did good work: `verify.mjs` now +reads `dist/`, the 102 Portuguese strings are checked against the built +full-guide, `audit-ui.mjs` gained per-page CSS-variable resolution and a +built-CSS baseline (`.agents/snapshots/built-css-values.json`). Keep all of +that. + +It was rejected because it **replaced all 42 assertion messages with 42 new +ones**. Not one of the originals survives. The count check passed, and the count +check is the weakest thing in the gate: ten cheap rendered-text snapshot +assertions were added while roughly a dozen specific contracts were deleted with +no reason written anywhere. + +Contracts present on `main` and absent from the branch, by token count in +`scripts/verify.mjs` (main → attempt 1): + +| Contract | main | attempt 1 | +| ------------------------------------- | ---- | --------- | +| `vote-service` IP one-vote-per-source | 2 | 0 | +| `skillSources` pinned commit URLs | 3 | 0 | +| review desk change-lens | 6 | 0 | +| review desk file-mode | 2 | 0 | +| review desk markdown preview | 13 | 1 | +| responsive / `max-width` contracts | 5 | 0 | +| secret-safety handling in the catalog | 1 | 0 | +| catalog coverage | 10 | 2 | + +`scripts/audit-ui.mjs` also went from 6 assertions to 5. + +A rendered-text snapshot does not replace these. "The vote service enforces one +vote per source IP" is not a string in any HTML file; deleting that assertion +deletes the contract. Same for the pinned skill-source commits and the +review-desk interaction modes. + +### What attempt 2 must produce + +1. **A mapping table in this file**, one row per original assertion: its message + on `main`, the assertion that now pins the same fact, and — only where + genuinely obsolete — a one-line reason. Build it from + `git show rejected/19-attempt-1^:scripts/verify.mjs | grep -oP 'throw new Error\(\s*\K.*'` + so no row is missed. 42 rows, no gaps. +2. **Every fact still pinned.** Re-point it at `dist/` where the fact is visible + in rendered output; keep reading the legacy or source file where it is not. + `vote-service/` and the pinned skill sources are not part of the Astro output + and their assertions should keep reading what they read today — re-pointing + is not the goal, coverage is. +3. **Raise the baseline.** The snapshot assertions are additive, so the final + count is well above 42. Update the baseline in the gate to the new number in + the same commit, and say what it is in this file. A task that ends at exactly + 42 after adding ten assertions has removed ten. +4. Keep `audit-ui.mjs` at 6 or more. + +Start from `rejected/19-attempt-1` rather than from scratch — the `dist/` +re-point and the Portuguese coverage check are worth keeping.