Wave 7 prep - record the Aug 18 decisions as D1-D10 and amend the waves
Nick answered 21 questions at the wave 6 exit and 11 follow-ups. Seven answers are new build work, three amend acceptance criteria on tasks already scheduled, and two close questions without work. None of it had an item ID, so none of it could be built under CLAUDE.md's first rule. New items D1-D10 in docs/waves/decisions-2026-08-18.md. A new prefix rather than widened CR/F/S/A/B/C numbers - those are referenced in documents outside this repo and CLAUDE.md forbids reinterpreting them. Every D entry names the item it amends and quotes the criterion it replaces, so a reader of R2 can see what moved. D1 sample data returns to the creator B7, S7 T7.1 D2 QA distribution list configured in the SOP CR-014 T7.6 D3 side navigation and collapsible sections, not tabs F6 T7.2 D4 Urgent surfaces the audited override, never bypasses CR-003/A1 T7.3 D5 usage data moves to the admin console B7 T7.10 (new) D6 material list uploads at SOP configuration CR-013 T8.6 (new) D7 archived projects readable by project admins B3, C1 T9.8 (new) D8 5MB a file, 2GB a project, PDFs and images, one DB CR-007 T7.7 D9 Ready for QA appears in Field View CR-014 T7.6 D10 email switched on and off from the admin console CR-011/14 T7.6, T8.3 Two decisions were mine to make and are recorded as such. D3: the written F6 criterion (no view over two screen heights) and the answer (one long form with side nav) cannot both hold, so the criterion now reads 'at rest' and sections collapse by default - tabs hide sections a first-time author does not know exist. D8: keeping 5MB files in the same database means every encrypted backup carries them; splitting them out was rejected because a backup without the drawings cannot restore, so a 2GB per-project ceiling was approved instead. Also corrected, not amended: CLAUDE.md and IMPLEMENTATION.md X2 both cited wp-creation-app.js:1962-1972 as the protected logged-override path that T7.3 is forbidden to remove. Those lines are deletePackage() and clearSaved(). The path is confirmEarlyRelease() at :1002. Both documents now name it by function so the reference survives the T7.1 rewrite that is about to move it. Wave 9 gains T9.9, a sweep of the nine backlog entries that name wave 9 as their home. Left unscheduled they surface at T9.7, which has no room to fix anything. The four colour items in it (BL-004/005/008/009) are now approved work. T9.5's help-tip count corrected from 15 to 18 and dated: three were added during waves 5 and 6 by tasks reusing the component as designed, each unreachable for the same reason. Scheduling a broken component late makes every reuse cost more. Closed without work: the free-text location migration. Every location on record is sample data because no real list has been loaded, so there is nothing to migrate. Recorded with the condition that invalidates it - the first real project - so it is a decision rather than a surprise. Items: D1 D2 D3 D4 D5 D6 D7 D8 D9 D10 Task: T7.0 (wave 7 prep) Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,7 +1,13 @@
|
||||
# Wave 9 — Verification and cleanup
|
||||
|
||||
**Items:** `CR-008`, `CR-017` (guard), `S6`, `S7`, `S8`, `C1` audit, `C2` audit, part of `C4`
|
||||
**Items:** `CR-008`, `CR-017` (guard), `S6`, `S7`, `S8`, `C1` audit, `C2` audit, part of `C4`,
|
||||
and from August 18: `D7`
|
||||
**Depends on:** wave 8 merged
|
||||
|
||||
**Build order is not task order.** `T9.8` and `T9.9` were added on August 18 and are numbered
|
||||
after `T9.7`, but `T9.7` is the reconciliation and stays last. Build `T9.1` through `T9.6`,
|
||||
then `T9.8`, `T9.9`, then `T9.7`. They appear in that order in this file. Task IDs are
|
||||
referenced outside this repo and are not renumbered to make the order read left to right.
|
||||
**Why last:** `CR-008` reviews the PDF export against the final structure rather than
|
||||
reviewing it twice. The audits confirm the standing requirements actually held across eight
|
||||
waves rather than being asserted per PR.
|
||||
@@ -117,6 +123,11 @@ sample project only.
|
||||
- [ ] it cannot touch live project data; verify by attempting it against a real project
|
||||
- [ ] the other three affordances are removed; grep confirms
|
||||
|
||||
**Reconciled with `D1`.** `T7.1` makes the creator's sample-data control **visible** - it was
|
||||
hidden only because the page was framed. That is not a fourth affordance returning; it is the
|
||||
one that should survive becoming reachable. This task still ends with exactly one, and if the
|
||||
survivor is the creator's, the launcher and wizard copies go.
|
||||
|
||||
---
|
||||
|
||||
### T9.5 — C1 + S8: Accessibility audit
|
||||
@@ -128,9 +139,15 @@ sample project only.
|
||||
- **Files:** all pages, `.help-tip` elements
|
||||
|
||||
**`S8` is finished here** because tooltips are the one accessibility item with no natural
|
||||
host component earlier in the plan. 15 `.help-tip` badges are `<span>` elements with no
|
||||
host component earlier in the plan. `.help-tip` badges are `<span>` elements with no
|
||||
`tabindex`, so the `:focus` half of their CSS rule is dead code and there is no touch path at
|
||||
all — on tablets, which is exactly what Field View targets.
|
||||
all - on tablets, which is exactly what Field View targets.
|
||||
|
||||
**The count went up, not down.** Wave 0 measured 15. At the wave 6 exit there were **18**:
|
||||
three were added during waves 5 and 6 by tasks reusing the component as designed, and every
|
||||
one of them is unreachable for the same reason. That is the cost of scheduling a broken
|
||||
component late - each wave that reuses it makes this task bigger. Measure again before
|
||||
starting and record the number; do not inherit 15 or 18.
|
||||
|
||||
**Do:** Make every `.help-tip` reachable by keyboard and by touch. Then audit the whole app
|
||||
against the `CLAUDE.md` rules and record results in `docs/reference/accessibility-audit.md`.
|
||||
@@ -140,7 +157,7 @@ Compare against the wave 0 baseline counts:
|
||||
| Metric | Baseline | Target |
|
||||
|---|---|---|
|
||||
| `<div>` / `<span>` with `onclick` | 12 / 2 | 0 |
|
||||
| `.help-tip` unreachable by keyboard | 15 | 0 |
|
||||
| `.help-tip` unreachable by keyboard | 15 at wave 0, 18 at the wave 6 exit | 0 |
|
||||
| `aria-live` regions | 0 | at least 1 per toast system and banner |
|
||||
| Text below 4.5:1 | present | 0 |
|
||||
| `outline: none` without replacement | present | 0 |
|
||||
@@ -159,7 +176,7 @@ Compare against the wave 0 baseline counts:
|
||||
|
||||
- **Items:** `C2`
|
||||
- **Depends on:** T9.5
|
||||
- **Blocks:** nothing
|
||||
- **Blocks:** T9.8
|
||||
- **Surface:** `html/`
|
||||
- **Files:** all pages
|
||||
|
||||
@@ -180,15 +197,95 @@ after screenshots and compare against the wave 0 baseline.
|
||||
|
||||
---
|
||||
|
||||
### T9.8 — D7: Archived projects, readable by project admins
|
||||
|
||||
- **Items:** `D7`
|
||||
- **Depends on:** T9.6
|
||||
- **Blocks:** T9.7
|
||||
- **Surface:** `server/` + `html/`
|
||||
- **Files:** launcher project list, project routes, role checks
|
||||
|
||||
**Problem:** Archiving already exists for projects and for work packages, and the server
|
||||
already refuses writes to an archived project. What does not exist is a way back in: an
|
||||
archived project leaves the launcher and there is no route to it, so archiving reads as
|
||||
deletion to everyone using it. Asked on August 18 who should be able to open one, the answer
|
||||
was **project admins only**.
|
||||
|
||||
**Do:** List archived projects behind a role check, separately from the live list so nobody
|
||||
opens one by accident. Opening one renders read-only. The server is the enforcement point:
|
||||
the read-only view is a courtesy, the role check and the write refusal are the rule.
|
||||
|
||||
**Do not:** build a second archive mechanism, add an unarchive button, or show archived
|
||||
projects to anyone below project admin - including in counts, pickers or aggregate totals
|
||||
where the number would leak their existence.
|
||||
|
||||
**Done when:**
|
||||
|
||||
- [ ] a project admin can list archived projects and open one
|
||||
- [ ] everything in the opened project renders read-only, with no reachable write control
|
||||
- [ ] the server refuses writes to it regardless of what the browser sends; verify by calling the endpoint directly
|
||||
- [ ] a non-admin sees no archived projects anywhere, including in counts and pickers
|
||||
- [ ] the archived list is visually distinct from the live list and says what it is
|
||||
- [ ] it works at 390px
|
||||
|
||||
---
|
||||
|
||||
### T9.9 — Backlog sweep: the items wave 9 was told to own
|
||||
|
||||
- **Items:** `C4`, plus `BL-004`, `BL-005`, `BL-008`, `BL-009`, `BL-011`, `BL-012`, `BL-016`, `BL-018`, `BL-019`
|
||||
- **Depends on:** T9.5
|
||||
- **Blocks:** T9.7
|
||||
- **Surface:** `html/` + `tests/`
|
||||
- **Files:** as listed per entry in `docs/waves/backlog.md`
|
||||
|
||||
**Why this is a task and not a list.** Nine backlog entries name wave 9 as their home. Left
|
||||
unscheduled they get discovered at `T9.7`, which is a reconciliation task with no room to fix
|
||||
anything. Each was deferred for a stated reason and every one of those reasons has now
|
||||
expired.
|
||||
|
||||
**The four colour items are approved work, not open questions.** `BL-004` (the help centre's
|
||||
separate 52-colour palette, loaded on four pages), `BL-005` (35 colour literals in two
|
||||
JS-built dialogs), `BL-008` (a second brand blue, `#2563d6`) and `BL-009` (a ninth amber, four
|
||||
points from the eighth) were each deferred on the same grounds: fixing them changes a rendered
|
||||
colour and the wave that found them was forbidden to change one. Asked on August 18, the
|
||||
answer was **change them**. That is the `C4` half of this task and it is the only part with a
|
||||
visible diff.
|
||||
|
||||
The rest are correctness and tooling:
|
||||
|
||||
| Entry | What it is | Note |
|
||||
|---|---|---|
|
||||
| `BL-011` | Three overlays race to append on the SOP page | Re-check first - `T7.1` may have removed the cause |
|
||||
| `BL-012` | `admin` and the creator are not stable enough to screenshot-diff | Freeze the clock in the fixture; the creator half may be gone after `T7.2` |
|
||||
| `BL-016` | Back to a URL with no `step` leaves the wizard where it was | One expression. `stepper_check.py` already pins the wrong behaviour, so the test flips with the fix |
|
||||
| `BL-018` | The work package gate is the last localStorage-derived status | `T7.1` may have resolved it; if not, it is `B4`'s last hole. Fix `browser_check.py`'s fixture either way |
|
||||
| `BL-019` | A cost code that left the list is silently blanked on edit | The four lines already written for `gov_wosize` |
|
||||
|
||||
**Do not:** fix anything here that a wave 7 or 8 task already fixed. Re-measure each before
|
||||
touching it - four of these were logged against code that has since been rewritten, and a fix
|
||||
applied to a problem that no longer exists is worse than the problem.
|
||||
|
||||
**Done when:**
|
||||
|
||||
- [ ] every colour literal outside `theme-light.css` is gone, help centre and JS-built dialogs included; grep confirms
|
||||
- [ ] one accent blue and one warning amber app-wide
|
||||
- [ ] each of `BL-011`, `BL-012`, `BL-016`, `BL-018`, `BL-019` is fixed, or closed with a recorded measurement showing it no longer reproduces
|
||||
- [ ] `stepper_check.py`'s pinned `BL-016` check is inverted to assert the fixed behaviour
|
||||
- [ ] `browser_check.py`'s fixture uses the production SOP shape
|
||||
- [ ] `docs/waves/backlog.md` has no entry still pointing at wave 9
|
||||
|
||||
---
|
||||
|
||||
### T9.7 — Final reconciliation
|
||||
|
||||
- **Items:** all
|
||||
- **Depends on:** T9.6
|
||||
- **Depends on:** T9.8, T9.9
|
||||
- **Blocks:** nothing
|
||||
- **Surface:** documentation
|
||||
- **Files:** creates `docs/reference/completion.md`
|
||||
|
||||
**Do:** Walk all 55 items from `IMPLEMENTATION.md` section 6 and record, for each: built /
|
||||
**Do:** Walk all 65 items - the 55 in `IMPLEMENTATION.md` section 6 and the 10 in
|
||||
`docs/waves/decisions-2026-08-18.md` and record, for each: built /
|
||||
deferred / not applicable, the PR that delivered it, and any deviation from its written
|
||||
acceptance criteria.
|
||||
|
||||
@@ -200,7 +297,7 @@ criteria turned out wrong, inputs still outstanding, and follow-ups logged along
|
||||
|
||||
**Done when:**
|
||||
|
||||
- [ ] all 55 items are accounted for with a PR reference or a stated reason
|
||||
- [ ] all 65 items are accounted for with a PR reference or a stated reason - the 55 from section 6 and the 10 from `decisions-2026-08-18.md`
|
||||
- [ ] every deviation from written acceptance criteria is documented
|
||||
- [ ] the four out-of-scope items are confirmed unbuilt
|
||||
- [ ] outstanding inputs from `IMPLEMENTATION.md` section 8 are restated with current status
|
||||
@@ -214,4 +311,6 @@ criteria turned out wrong, inputs still outstanding, and follow-ups logged along
|
||||
- [ ] one icon system, one sample-data affordance
|
||||
- [ ] accessibility metrics hit target or are documented
|
||||
- [ ] the primary flow works at 390px
|
||||
- [ ] every item is reconciled
|
||||
- [ ] archived projects are readable by project admins and invisible to everyone else (`D7`)
|
||||
- [ ] the backlog has no entry still pointing at wave 9
|
||||
- [ ] every item is reconciled - all 65
|
||||
|
||||
Reference in New Issue
Block a user