From 3ff17061858cc9c57bd10bafc0a5eb5a7214e7a6 Mon Sep 17 00:00:00 2001 From: Chris0Jeky Date: Sat, 5 Sep 2026 19:16:21 +0100 Subject: [PATCH 1/2] docs: sixteenth-block coordination subsection, D-15 (shell scroll model), clause 4 green at 42d3007f0 docs/STATUS.md: coordination-lane subsection on the sixteenth block (the #2695 self-record, the tip run green at 15:37Z, the board reconciliation of the alpha lane's claims in the range). OUTSTANDING_TASKS.md: new D-15 from the alpha lane's 2026-09-05 18:10Z measurement on #2638: neither the decision rail nor the degraded warning pins because the document is the scrollport and three never-overflowing ancestors capture position: sticky; three measured options, proposed default A (make .td-content the bounded scroller as its own browser-proven slice), maintainer rules by letter on #2638. docs/releases/V0_3_0_READINESS.md: clause 4 reads green at 42d3007f0 (run 33974150710, 15:37Z, 16 of 17 success, Secret Scan skipped) now that the run the file recorded as in progress completed. --- OUTSTANDING_TASKS.md | 1 + docs/STATUS.md | 5 +++++ docs/releases/V0_3_0_READINESS.md | 4 ++-- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/OUTSTANDING_TASKS.md b/OUTSTANDING_TASKS.md index 5b0522f00..311c469eb 100644 --- a/OUTSTANDING_TASKS.md +++ b/OUTSTANDING_TASKS.md @@ -185,6 +185,7 @@ Source: the alpha lane audited 15 open v0.3 issues on 2026-09-04 against `main` - [x] **D-12 — the Codex session's thirty-one open PRs (ruled 2026-09-05).** Between 01:38Z and 06:19Z on 2026-09-05 a session using your local git identity opened thirty-three PRs under the alpha lane name with `Refs`-only bodies and no fresh-context review (two were closed as superseded the same morning: `#2595` duplicate of `#2592`, `#2596` superseded by `#2609`). Both Claude lanes confirmed they did not open them; the interim rule (first recorded claim or open PR on an issue wins, whatever the marker form) held while the item was open. **Ruled by you in the coordinator session on 2026-09-05 (about 13:15Z): the PRs are wanted; check them, give the sensitive or fragile ones a further Opus 5 review pass, and merge them when ready.** Done the same afternoon: every PR got one fresh-context read-only Opus 5 review (record on the PR; ten in a full worktree of the head), 26 SHIP and 5 FIX-FIRST with the MEDIUMs fixed in-PR (`#2643` classifier literal shared with its producer plus the quick-start entry; `#2626` the code-side CSP default; `#2633` a bounded pre-mount locale wait, with a scoped round-2 pass; `#2620` the cooperative-stop assertion; `#2641` the Claude GitHub-path wording), all 31 merged as merge commits between 13:27Z and 14:32Z (last: `#2626` at `6cf9ef7a1`), three unrelated reds attributed and re-proven once (`#2378` twice, `#2588` once, and a new Windows Backend Unit shape seeded as `#2691`). No PR used `Closes`, so no issue auto-closed: each of the 28 issues carries a coordinator comment naming the merge SHA, what remains and the tracked LOWs; `#1140` row 3 and `#1991` L2 are ticked; the issues left with no open PR moved Review to Pending on the board. Which session it was is still unknown and no longer matters for this item; the claim-search rule (both marker forms plus the open PR list before claiming) stays in `.codex/memories/00_ACTIVE.md`. - [ ] **D-13 — `#1999` item 2, Paper triage edit on Triaged rows.** Paper gates Edit at `New | Failed` while the server and the Legacy inbox allow editing a `Triaged` row, and enabling the edit in Paper alone would create a dead write because re-triage answers 409 on a Completed queue row. A = keep Paper gated and record the skin divergence on the issue; B = allow the edit and add a backend re-triage path for Completed rows; C = allow the edit with no re-triage (the edit lands on the capture but never reaches the board). Proposed default: A. Items 1 and 4 are shipped (PR `#2426` for the stalled-load Close was never recorded in STATUS; the alpha lane records it in its next block); item 3 shipped in PR `#2698` (merge `a789dabbe`, the correction kept and announced, restored through Edit) and the close/reopen race in PR `#2668`, so only item 2 waits on this ruling; the held-draft line for a `Triaged` capture follows it. - [ ] **D-14 — `#2439` CI-16 public mirror: nine questions before the workflow PR.** The agent-preparable half shipped as `docs/ci/PUBLIC_MIRROR_OPTIONS.md` (PR `#2680`, merge `62d1bb42b`): it scores the three SC-8 options and recommends (a), a source snapshot per release tag plus the Release assets, with a fail-closed export allowlist, private-asset checksum verification before anything public is written, and the mirror publish done last. Its section "Open questions for the maintainer" lists nine, with the memo's proposed default where it states one: (1) mirror repository name (default `Chris0Jeky/taskdeck-release`); (2) confirm option (a) over (b) and (c); (3) the snapshot export allowlist (`ci/mirror-export.txt`); (4) a source tarball on every Release in addition to the pushed tree (default yes); (5) backfill of v0.1.0 through v0.2.x as snapshot commits and releases; (6) Issues and Discussions on the mirror (default both off, README pointing back); (7) credential shape and rotation (`MIRROR_PUBLISH_TOKEN`, fine-grained, Contents read and write); (8) GHCR image visibility; (9) whether `ci/` and `scripts/ci/` count as ADR-0050 corresponding source under GPLv3. Answer by number on `#2439`; the workflow PR is control-plane and parks under SC-10 once written, and the mirror repository itself is created by you (repository creation is outside agent authority). Nothing is built until the numbers are answered; the memo's defaults are proposals. +- [ ] **D-15 — `#2638` items 1 and 3: the shell's scroll model decides whether anything in the Review view can pin.** The alpha lane measured on 2026-09-05 (Chromium 1280x720, the real stack, the real degraded warning raised by answering the proposals GET with 503 for three polls; release comment on `#2638` at 18:10Z) that neither the Paper decision rail's sticky handshake from `#2630` nor the `#2214`/`#2630` "pinned" degraded warning pins: the document is the scrollport (`documentElement` clientHeight 720, scrollHeight 3166) because `.td-shell` is `min-height: 100vh` and grows with content, and three ancestors that never overflow (`.td-content` in `AppShell.vue` plus two review-side `overflow: auto` rules) capture `position: sticky`; after `window.scrollTo(0, 788)` the rail sits at top -260 and the warning at -712, both moving 1:1 with the page. The `--paper-review-sticky-offset` ResizeObserver seam itself works (37 px). The acceptance's fallback (delete the inert rail handshake, keep the warning sticky) would leave an equally false claim, so the lane parked before implementation, no PR, worktree removed with no commits, and the thirteenth block's `#2630` sticky sentences are corrected in the next STATUS block as rules with no effect. Three options, measured not built: A = shell fix, make `.td-content` the bounded scroller (`.td-shell` at `height: 100vh` with a `min-height: 0` chain) and drop the two review-side `overflow: auto` rules; largest blast radius (every route, both themes, the responsive and E2E suites), fixes every sticky in the app; B = bound the review grid inside `PaperReviewView.vue` with a definite height so its columns scroll internally (about 616 px at a 720 px viewport), magic numbers and three independent scrollers instead of one page scroll; C = honest comments only, delete the offset machinery and the warning's pinned rule and record the constraint, retiring the `#2214`/`#2630` sticky behaviour as shipped in name only. Proposed default: A, as its own slice with a browser-proven Playwright leg across the routes the responsive suite covers; it is yours to rule because it changes the scroll model of the whole shell. Answer by letter on `#2638`. Item 2 of `#2638` (the recovery sentence retired by an explicit load) is unaffected and claimable separately. - Section K additions from the 2026-09-05 alpha audits, no ruling needed, recorded for the file's completeness: `#1949` cannot close on evidence (AC4 route-walking has no mechanization; AC3's registry has no stated inventory; wrapper buttons are invisible to the button scan, claimed as a guards-only slice); `#2090` width and collapse shipped (PRs `#2158`, `#2165`), titles-only open and Paper-only; `#1940` honest-empty slice claimed in the keep-the-disclosures shape (surface the empty truth and the confidence source at card level) because removing the expander would break the held `PaperReviewView.spec.ts`; this does not touch D-9; new `#1940` residual: the right rail shows proposal A's confidence and similar-past under B's identity while B loads. ## Changelog diff --git a/docs/STATUS.md b/docs/STATUS.md index 38ecbd38a..de9d8921b 100644 --- a/docs/STATUS.md +++ b/docs/STATUS.md @@ -345,6 +345,11 @@ Inbox frontend: - **Not shipped reality:** `#2214` stays open on the residuals recorded before and after PR `#2694` (the refusal retraction's recovery sentence, the explicit 403 toast beside the revoked panel, the hash watcher under a revoked queue, the double announcement over a visible degraded warning, the empty-queue wording on the boardId-400 path, and the earlier list); `#1871` stays open on the review-i18n half, the four selector-constrained composer accessible names (a selector-to-testid migration first) and the bare English outside the coordinator's list; `#1434` stays open on finding 1's action-label transform and the Legacy card's duplicated note; `#1999` returns to Blocked on item 2 (D-13), with the Triaged held-line wording following that ruling and the picker E2E leg listed; `#2689` (items 5 to 10) and `#2682` stay tracked; the ruling-gated items and the non-ruling residuals listed in the fifteenth block (`#2090`, `#1949`, `#2638`, the `#2215` Paper residuals, the two `#1940` residuals) are unchanged. Control-plane PRs stay parked under SC-10: twelve at the coordinator's 2026-09-05 measurement, none touched by the D-12 sweep. +Coordination lane (coordinator session; docs, issue topology and Project state only, no product code): +- **The D-12 sweep is recorded (PR `#2695`, merge `19528031a`; docs-only, `docs/STATUS.md`, `OUTSTANDING_TASKS.md`, `docs/releases/V0_3_0_READINESS.md`).** The fifteenth block's coordination-lane subsection carries the full record; D-12 is ticked with its rule-3 Changelog entry; the readiness view is measured at `42d3007f0` (44 open, 10 `dogfooding` / 21 `ci` / 13 other, 21 gated / 23 un-gated) with clause 4 written as in progress at that tip. The tip run at `42d3007f0` (`ci-required` run `33974150710`) then completed green at 15:37Z, so `main` was green at the sixteenth block's first commit; the file's wording is conservative, not wrong, and the next re-measure records it. +- **Project board:** every alpha claim in this range moved through Now on a packet and back when its PR merged (`#2214` on `#2694`, `#1871` on `#2696` and again for its follow-up PR `#2700`, `#1434` on `#2697`, `#1999` on `#2698`, returned to Blocked for item 2 behind D-13; `#2638` went Now for items 1 and 3, Blocked when the alpha lane parked them on the shell scroll-model finding that is now D-15, and Now again for item 2). The alpha lane's own board moves were not landing, so the coordinator applies every move it reports; Now never exceeded two. `#2691`'s seeding and the twenty-seven Review to Pending moves are the fifteenth block's. +- **Not verified:** nothing executable changed in the coordinator's PRs. + v0.3.0-rc.1 SHIPPED (2026-08-30, annotated tag `3fc9f6e8e` peels to `9d2ea3c7c`): - **The public v0.3.0-rc.1 pre-release exists**, cut by the agent under the maintainer's v0.3 RC deck reply q-1 A (2026-08-30; map `map:v1:bec0a8dd…dd9138`; record `#1947`) and the repository's declared authority. The GitHub Release is `prerelease=true`, `draft=false`, published 2026-08-30T02:26:06Z with three assets — `taskdeck-v0.3.0-rc.1-win-x64.zip` (53,916,746 bytes), its `.sha256` sidecar, and `taskdeck-v0.3.0-rc.1-provenance.txt` — and a composed page (download badge first, RC banner, SHA-256, quick-start link, `## Breaking changes` lifted from UPGRADING, `## Highlights` from `docs/releases/notes/v0.3.0-rc.1.md`, grouped `## What's changed`). `/releases/latest` still resolves to `v0.2.0`. - **Tag workflows:** CI Release 33287786328, Release Security 33287786318, Release Container 33287786267, Release Desktop 33287786253 — all four success. **GHCR:** `ghcr.io/chris0jeky/taskdeck:0.3.0-rc.1` published (`sha256:d47bdf2d…2db67`), `latest` and `0.2` both still `sha256:e4915d72…8c752`, and no `0.3` alias exists — the floating `latest` / `0.2` index digest is unchanged from the pre-tag capture (`sha256:e4915d72…8c752`) and no `0.3` alias was created, which is the live proof of `#2217`/PR `#2223` that the threat-model row was waiting for. diff --git a/docs/releases/V0_3_0_READINESS.md b/docs/releases/V0_3_0_READINESS.md index dfcef25b5..bf25bcf60 100644 --- a/docs/releases/V0_3_0_READINESS.md +++ b/docs/releases/V0_3_0_READINESS.md @@ -13,14 +13,14 @@ issue numbers below. ## 1. The gate -The five clauses are `docs/REVIVAL_PLAN.md` §3, the v0.3 row. Clauses 2 and 4 and the section 5 label split re-measured 2026-09-05 at 15:15Z against `main` `42d3007f0` (a dated snapshot; the lanes were still merging when it was taken); the section 3 human-gate table carries its 04:00Z measurement, re-checked at 08:50Z with no change and at 15:15Z with one change, the SC-10 row now counts twelve; the section 2 clause-5 chain carries its earlier 2026-09-04 measurement and clauses 1 and 3 their 2026-09-03 one. +The five clauses are `docs/REVIVAL_PLAN.md` §3, the v0.3 row. Clause 2 and the section 5 label split re-measured 2026-09-05 at 15:15Z against `main` `42d3007f0`, clause 4 re-read at 18:16Z from the completed tip run (a dated snapshot; the lanes were still merging when it was taken); the section 3 human-gate table carries its 04:00Z measurement, re-checked at 08:50Z with no change and at 15:15Z with one change, the SC-10 row now counts twelve; the section 2 clause-5 chain carries its earlier 2026-09-04 measurement and clauses 1 and 3 their 2026-09-03 one. | # | Gate clause | State | What it waits on | |---|---|---|---| | 1 | RC checks green on the exact head | Not yet applicable | Measured at the final tag head, not before | | 2 | Milestone closed or explicitly re-ruled | **Not met.** 44 open (re-measured 2026-09-05 15:15Z against `main` `42d3007f0`; the total is unchanged since the 04:00Z measurement at `1e234a011` while two lists moved: `#1961` closed on PR `#2681` (merge `8d6e6355f`, 11:54Z) and `#2691` was seeded at 13:56Z from PR `#2627`'s unrelated 03:26Z Windows Backend Unit red, so the §5 split is now 10 `dogfooding` / 21 `ci` / 13 other; the earlier history: since the 22:50Z count of 48, six closed on evidence (`#2460`, `#2501`, `#2524`, `#2563`, `#2570`, `#2572`), two seeded and still open (`#2582`, `#2588`), two seeded and closed the same night (`#2583`, `#2604`); at 08:50Z the split was 11 `dogfooding` / 20 `ci` / 13 other). `#2639` entered and left the milestone between measurements: seeded at 04:19Z as Priority I security, re-read by the beta lane at 06:55Z on an unmodified build (the PR `#2416` activate-time sweep does fire, 3 of 3 lifecycle paths; the earlier red was an observation race inside the `#2475` test case, so the `#2411` re-poisoning window has been closed since that PR merged), and closed at 07:37Z on PR `#2660` (merge `58c5a3bfe`) as hardening. **Ruled 2026-09-03: nothing else is re-ruled out; the one exception is `#1972`, moved to v0.5 with CF-21** | Every open issue closing on evidence, sections 2 to 5 below | | 3 | Launch kit drafted (`#2242`) | **Met.** `#2242` closed | Nothing | -| 4 | `main` green | **In progress at `42d3007f0`** (`ci-required` run `33974150710`, started 15:14Z). The wave's last-merge run at `6cf9ef7a1` (run `33972125374`) had 15 of 17 jobs green, `Secret Scan` skipped by design, and was cancelled inside `E2E Smoke` at 15:14Z when PR `#2693` merged. Before it, the previous green stood at `140213288` (run `33954576258`, 08:36Z); between the two, the D-12 merge wave landed thirty-one PRs in about fifty minutes and the workflow's own concurrency group cancelled every intermediate `main` run as the next merge landed (`794fef74f` through `5d9f3c1ca`), which is the `#2582` shape and the reason a green tip run exists only when the queue drains: `#2582` (its PR `#2610` parked under SC-10) ends the cancellation and `#2378` the timeout. Ten cancelled runs (`bb59aa97a` through `540bc2abb`) and the `1e234a011` `#2378` red (a docs-only merge, run `33942989127`) sat between the `330ccb4de` green (2026-09-04 23:19Z) and the `140213288` green (16 of 17 jobs success, `Secret Scan` skipped by design) earlier the same day, recorded on `#2378` | `#2378` and `#2610`, section 2 and SC-10 | +| 4 | `main` green | **Green at `42d3007f0`** (`ci-required` run `33974150710`, completed 2026-09-05 15:37Z: 16 of 17 jobs success, `Secret Scan` skipped by design; read 18:16Z, when the file was last written the run was still in progress). The wave's last-merge run at `6cf9ef7a1` (run `33972125374`) had 15 of 17 jobs green, `Secret Scan` skipped by design, and was cancelled inside `E2E Smoke` at 15:14Z when PR `#2693` merged. Before it, the previous green stood at `140213288` (run `33954576258`, 08:36Z); between the two, the D-12 merge wave landed thirty-one PRs in about fifty minutes and the workflow's own concurrency group cancelled every intermediate `main` run as the next merge landed (`794fef74f` through `5d9f3c1ca`), which is the `#2582` shape and the reason a green tip run exists only when the queue drains: `#2582` (its PR `#2610` parked under SC-10) ends the cancellation and `#2378` the timeout. Ten cancelled runs (`bb59aa97a` through `540bc2abb`) and the `1e234a011` `#2378` red (a docs-only merge, run `33942989127`) sat between the `330ccb4de` green (2026-09-04 23:19Z) and the `140213288` green (16 of 17 jobs success, `Secret Scan` skipped by design) earlier the same day, recorded on `#2378` | `#2378` and `#2610`, section 2 and SC-10 | | 5 | CI-13 `#2337` cutover by the maintainer, private repository with `Smart CI / Required Gate` enforced | **Not met** | Section 3, and the section 2 chain below it | Clause 2 does not by itself require every open issue to close. "Explicitly re-ruled" means each one From ffb2d4288768f2d9b71fd46abf2dfbb13609d7bb Mon Sep 17 00:00:00 2001 From: Chris0Jeky Date: Sat, 5 Sep 2026 19:27:07 +0100 Subject: [PATCH 2/2] docs: fix-round on the sixteenth-block record (review round 1 wording) --- OUTSTANDING_TASKS.md | 2 +- docs/STATUS.md | 6 +++--- docs/releases/V0_3_0_READINESS.md | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/OUTSTANDING_TASKS.md b/OUTSTANDING_TASKS.md index 311c469eb..1e8feadd9 100644 --- a/OUTSTANDING_TASKS.md +++ b/OUTSTANDING_TASKS.md @@ -185,7 +185,7 @@ Source: the alpha lane audited 15 open v0.3 issues on 2026-09-04 against `main` - [x] **D-12 — the Codex session's thirty-one open PRs (ruled 2026-09-05).** Between 01:38Z and 06:19Z on 2026-09-05 a session using your local git identity opened thirty-three PRs under the alpha lane name with `Refs`-only bodies and no fresh-context review (two were closed as superseded the same morning: `#2595` duplicate of `#2592`, `#2596` superseded by `#2609`). Both Claude lanes confirmed they did not open them; the interim rule (first recorded claim or open PR on an issue wins, whatever the marker form) held while the item was open. **Ruled by you in the coordinator session on 2026-09-05 (about 13:15Z): the PRs are wanted; check them, give the sensitive or fragile ones a further Opus 5 review pass, and merge them when ready.** Done the same afternoon: every PR got one fresh-context read-only Opus 5 review (record on the PR; ten in a full worktree of the head), 26 SHIP and 5 FIX-FIRST with the MEDIUMs fixed in-PR (`#2643` classifier literal shared with its producer plus the quick-start entry; `#2626` the code-side CSP default; `#2633` a bounded pre-mount locale wait, with a scoped round-2 pass; `#2620` the cooperative-stop assertion; `#2641` the Claude GitHub-path wording), all 31 merged as merge commits between 13:27Z and 14:32Z (last: `#2626` at `6cf9ef7a1`), three unrelated reds attributed and re-proven once (`#2378` twice, `#2588` once, and a new Windows Backend Unit shape seeded as `#2691`). No PR used `Closes`, so no issue auto-closed: each of the 28 issues carries a coordinator comment naming the merge SHA, what remains and the tracked LOWs; `#1140` row 3 and `#1991` L2 are ticked; the issues left with no open PR moved Review to Pending on the board. Which session it was is still unknown and no longer matters for this item; the claim-search rule (both marker forms plus the open PR list before claiming) stays in `.codex/memories/00_ACTIVE.md`. - [ ] **D-13 — `#1999` item 2, Paper triage edit on Triaged rows.** Paper gates Edit at `New | Failed` while the server and the Legacy inbox allow editing a `Triaged` row, and enabling the edit in Paper alone would create a dead write because re-triage answers 409 on a Completed queue row. A = keep Paper gated and record the skin divergence on the issue; B = allow the edit and add a backend re-triage path for Completed rows; C = allow the edit with no re-triage (the edit lands on the capture but never reaches the board). Proposed default: A. Items 1 and 4 are shipped (PR `#2426` for the stalled-load Close was never recorded in STATUS; the alpha lane records it in its next block); item 3 shipped in PR `#2698` (merge `a789dabbe`, the correction kept and announced, restored through Edit) and the close/reopen race in PR `#2668`, so only item 2 waits on this ruling; the held-draft line for a `Triaged` capture follows it. - [ ] **D-14 — `#2439` CI-16 public mirror: nine questions before the workflow PR.** The agent-preparable half shipped as `docs/ci/PUBLIC_MIRROR_OPTIONS.md` (PR `#2680`, merge `62d1bb42b`): it scores the three SC-8 options and recommends (a), a source snapshot per release tag plus the Release assets, with a fail-closed export allowlist, private-asset checksum verification before anything public is written, and the mirror publish done last. Its section "Open questions for the maintainer" lists nine, with the memo's proposed default where it states one: (1) mirror repository name (default `Chris0Jeky/taskdeck-release`); (2) confirm option (a) over (b) and (c); (3) the snapshot export allowlist (`ci/mirror-export.txt`); (4) a source tarball on every Release in addition to the pushed tree (default yes); (5) backfill of v0.1.0 through v0.2.x as snapshot commits and releases; (6) Issues and Discussions on the mirror (default both off, README pointing back); (7) credential shape and rotation (`MIRROR_PUBLISH_TOKEN`, fine-grained, Contents read and write); (8) GHCR image visibility; (9) whether `ci/` and `scripts/ci/` count as ADR-0050 corresponding source under GPLv3. Answer by number on `#2439`; the workflow PR is control-plane and parks under SC-10 once written, and the mirror repository itself is created by you (repository creation is outside agent authority). Nothing is built until the numbers are answered; the memo's defaults are proposals. -- [ ] **D-15 — `#2638` items 1 and 3: the shell's scroll model decides whether anything in the Review view can pin.** The alpha lane measured on 2026-09-05 (Chromium 1280x720, the real stack, the real degraded warning raised by answering the proposals GET with 503 for three polls; release comment on `#2638` at 18:10Z) that neither the Paper decision rail's sticky handshake from `#2630` nor the `#2214`/`#2630` "pinned" degraded warning pins: the document is the scrollport (`documentElement` clientHeight 720, scrollHeight 3166) because `.td-shell` is `min-height: 100vh` and grows with content, and three ancestors that never overflow (`.td-content` in `AppShell.vue` plus two review-side `overflow: auto` rules) capture `position: sticky`; after `window.scrollTo(0, 788)` the rail sits at top -260 and the warning at -712, both moving 1:1 with the page. The `--paper-review-sticky-offset` ResizeObserver seam itself works (37 px). The acceptance's fallback (delete the inert rail handshake, keep the warning sticky) would leave an equally false claim, so the lane parked before implementation, no PR, worktree removed with no commits, and the thirteenth block's `#2630` sticky sentences are corrected in the next STATUS block as rules with no effect. Three options, measured not built: A = shell fix, make `.td-content` the bounded scroller (`.td-shell` at `height: 100vh` with a `min-height: 0` chain) and drop the two review-side `overflow: auto` rules; largest blast radius (every route, both themes, the responsive and E2E suites), fixes every sticky in the app; B = bound the review grid inside `PaperReviewView.vue` with a definite height so its columns scroll internally (about 616 px at a 720 px viewport), magic numbers and three independent scrollers instead of one page scroll; C = honest comments only, delete the offset machinery and the warning's pinned rule and record the constraint, retiring the `#2214`/`#2630` sticky behaviour as shipped in name only. Proposed default: A, as its own slice with a browser-proven Playwright leg across the routes the responsive suite covers; it is yours to rule because it changes the scroll model of the whole shell. Answer by letter on `#2638`. Item 2 of `#2638` (the recovery sentence retired by an explicit load) is unaffected and claimable separately. +- [ ] **D-15 — `#2638` items 1 and 3: the shell's scroll model decides whether anything in the Review view can pin.** The alpha lane measured on 2026-09-05 (Chromium 1280x720, the real stack, the real degraded warning raised by answering the proposals GET with 503 for three polls; release comment on `#2638` at 18:10Z) that neither the Paper decision rail's sticky handshake from `#2630` nor the `#2214`/`#2630` "pinned" degraded warning pins: the document is the scrollport (`documentElement` clientHeight 720, scrollHeight 3166) because `.td-shell` is `min-height: 100vh` and grows with content, and three ancestors that never overflow (`.td-content` in `AppShell.vue` plus two review-side `overflow: auto` rules) capture `position: sticky`; after `window.scrollTo(0, 788)` the rail sits at top -260 and the warning at -712, both moving 1:1 with the page. The `--paper-review-sticky-offset` ResizeObserver seam itself works (37 px). The acceptance's fallback (delete the inert rail handshake, keep the warning sticky) would leave an equally false claim, so the lane parked before implementation, no PR, worktree removed with no commits, and the thirteenth block's `#2630` sticky sentences are corrected in the next STATUS block as rules with no effect. Three options, measured not built: A = shell fix, make `.td-content` the bounded scroller (`.td-shell` at `height: 100vh` with a `min-height: 0` chain) and drop the two review-side `overflow: auto` rules; largest blast radius (every route, both themes, the responsive and E2E suites), the lane expects it to fix every sticky element that shares this ancestor chain (measured on the Review route only); B = bound the review grid inside `PaperReviewView.vue` with a definite height so its columns scroll internally (about 616 px at a 720 px viewport), magic numbers and three independent scrollers instead of one page scroll; C = honest comments only, delete the offset machinery and the warning's pinned rule and record the constraint, retiring the `#2214`/`#2630` sticky behaviour as shipped in name only. Proposed default: A, as its own slice with a browser-proven Playwright leg across the routes the responsive suite covers; it is yours to rule because it changes the scroll model of the whole shell. Answer by letter on `#2638`. Item 2 of `#2638` (the recovery sentence retired by an explicit load) is unaffected and claimable separately. - Section K additions from the 2026-09-05 alpha audits, no ruling needed, recorded for the file's completeness: `#1949` cannot close on evidence (AC4 route-walking has no mechanization; AC3's registry has no stated inventory; wrapper buttons are invisible to the button scan, claimed as a guards-only slice); `#2090` width and collapse shipped (PRs `#2158`, `#2165`), titles-only open and Paper-only; `#1940` honest-empty slice claimed in the keep-the-disclosures shape (surface the empty truth and the confidence source at card level) because removing the expander would break the held `PaperReviewView.spec.ts`; this does not touch D-9; new `#1940` residual: the right rail shows proposal A's confidence and similar-past under B's identity while B loads. ## Changelog diff --git a/docs/STATUS.md b/docs/STATUS.md index de9d8921b..d4ae22d18 100644 --- a/docs/STATUS.md +++ b/docs/STATUS.md @@ -343,11 +343,11 @@ Inbox frontend: - **The Paper triage table and capture composer render the listed English literals from the catalogs (`#1871` board-picker half, PR `#2696`, merge `c574b2f19`; Refs `#1871`, the review-i18n half stays open).** The thirteen English literals the coordinator's 2026-09-05 residual comment listed in `PaperTriageTable.vue` and `PaperCaptureComposer.vue` (the table's `Captured items` name, the `Board` eyebrows and picker names, the composer's `Body`, `Labels` and `Due (optional)` eyebrows, its four accessible names, two placeholders and the attachments note) render from `inbox.*` keys in en, es and it, with a new `inbox.composer` namespace and the triage picker's accessible name label-first; Italian re-render cases in both component specs, red-first; two Italian assertions close the `#2625` LOW on the transcript viewer. Four composer accessible names keep their English byte-identical because `PaperInboxView.spec.ts` and three E2E specs select by them (47 plus 3 selectors), so their label-first rewrite waits on a selector-to-testid migration, recorded in the en docblock; bare English outside the listed set (the composer's eyebrow, meta line, footer and Capture button; eleven triage lines including a template-literal plural and the edit labels the catalog guard asserts by name) is enumerated on the issue as a separate slice. The es/it wording is the lane's, not native-reviewed (`#1770`). Reviewer SHIP; two LOWs recorded on the issue for the follow-up slice. Exact head `9bc3e284b`. - **An unsaved triage correction survives its row leaving the list, and its fate is announced (`#1999` item 3, PR `#2698`, merge `a789dabbe`; Refs `#1999`, item 2 waits on D-13).** When a Paper triage row editor's row leaves the list (a board-filter change or same-scope refresh replacing the items, or the archive switch making the table read-only), the unsaved correction is no longer destroyed silently: the table reads the editor's draft through an exposed getter at the one involuntary moment it controls, keeps it in component state keyed by capture id (nothing persisted, nothing sent), and says so in a `role="status"` region naming the capture; when the row is back a held line says the correction is there and that Edit brings it back (no automatic restore, recomputed on every items run), Edit lays only the touched fields over the current server values so a restore cannot revert metadata the user never edited, the editor-open gate yields a blocked notice instead of a second editor, a held copy is released only on a close from a ready editor, and a kept draft is discarded only with a receipt on a settled status the server would refuse (the server's New, Failed, Triaged rule; a transient Triaging never drops it; a Triaged return is held with a D-13 note), never by time or a later filter change; the notices merge and their live region is always mounted; copy in `inbox.triage.draft.*` for en, es and it. Round 2 rewrote the mechanism after a FIX-FIRST review (two HIGHs closed: the held copy is released only from a ready editor; the automatic restore is gone); 18 assertions red-first on the round-1 components, the eight named suites 300 of 300. The picker E2E leg stays listed (it needs a board-less capture helper and a narrow-width rule first). Reviewer FIX-FIRST in round 1, the rewrite verified SHIP over the whole mechanism; one MEDIUM (the Triaged held line's promise, which is the D-13 tension) and two LOWs recorded on the issue. Exact head `94859670a`. -- **Not shipped reality:** `#2214` stays open on the residuals recorded before and after PR `#2694` (the refusal retraction's recovery sentence, the explicit 403 toast beside the revoked panel, the hash watcher under a revoked queue, the double announcement over a visible degraded warning, the empty-queue wording on the boardId-400 path, and the earlier list); `#1871` stays open on the review-i18n half, the four selector-constrained composer accessible names (a selector-to-testid migration first) and the bare English outside the coordinator's list; `#1434` stays open on finding 1's action-label transform and the Legacy card's duplicated note; `#1999` returns to Blocked on item 2 (D-13), with the Triaged held-line wording following that ruling and the picker E2E leg listed; `#2689` (items 5 to 10) and `#2682` stay tracked; the ruling-gated items and the non-ruling residuals listed in the fifteenth block (`#2090`, `#1949`, `#2638`, the `#2215` Paper residuals, the two `#1940` residuals) are unchanged. Control-plane PRs stay parked under SC-10: twelve at the coordinator's 2026-09-05 measurement, none touched by the D-12 sweep. +- **Not shipped reality:** `#2214` stays open on the residuals recorded before and after PR `#2694` (the refusal retraction's recovery sentence, the explicit 403 toast beside the revoked panel, the hash watcher under a revoked queue, the double announcement over a visible degraded warning, the empty-queue wording on the boardId-400 path, and the earlier list); `#1871` stays open on the review-i18n half, the four selector-constrained composer accessible names (a selector-to-testid migration first) and the bare English outside the coordinator's list; `#1434` stays open on finding 1's action-label transform and the Legacy card's duplicated note; `#1999` returns to Blocked on item 2 (D-13), with the Triaged held-line wording following that ruling and the picker E2E leg listed; `#2689` (items 5 to 10) and `#2682` stay tracked; the ruling-gated items and the non-ruling residuals listed in the fifteenth block (`#2090`, `#1949`, `#2638`, the `#2215` Paper residuals, the two `#1940` residuals) are unchanged, except `#2638` items 1 and 3, now gated on D-15 (coordinator's subsection below). Control-plane PRs stay parked under SC-10: twelve at the coordinator's 2026-09-05 measurement, none touched by the D-12 sweep. Coordination lane (coordinator session; docs, issue topology and Project state only, no product code): -- **The D-12 sweep is recorded (PR `#2695`, merge `19528031a`; docs-only, `docs/STATUS.md`, `OUTSTANDING_TASKS.md`, `docs/releases/V0_3_0_READINESS.md`).** The fifteenth block's coordination-lane subsection carries the full record; D-12 is ticked with its rule-3 Changelog entry; the readiness view is measured at `42d3007f0` (44 open, 10 `dogfooding` / 21 `ci` / 13 other, 21 gated / 23 un-gated) with clause 4 written as in progress at that tip. The tip run at `42d3007f0` (`ci-required` run `33974150710`) then completed green at 15:37Z, so `main` was green at the sixteenth block's first commit; the file's wording is conservative, not wrong, and the next re-measure records it. -- **Project board:** every alpha claim in this range moved through Now on a packet and back when its PR merged (`#2214` on `#2694`, `#1871` on `#2696` and again for its follow-up PR `#2700`, `#1434` on `#2697`, `#1999` on `#2698`, returned to Blocked for item 2 behind D-13; `#2638` went Now for items 1 and 3, Blocked when the alpha lane parked them on the shell scroll-model finding that is now D-15, and Now again for item 2). The alpha lane's own board moves were not landing, so the coordinator applies every move it reports; Now never exceeded two. `#2691`'s seeding and the twenty-seven Review to Pending moves are the fifteenth block's. +- **The D-12 sweep is recorded (PR `#2695`, merge `19528031a`; docs-only, `docs/STATUS.md`, `OUTSTANDING_TASKS.md`, `docs/releases/V0_3_0_READINESS.md`).** The fifteenth block's coordination-lane subsection carries the full record; D-12 is ticked with its rule-3 Changelog entry; the readiness view is measured at `42d3007f0` (44 open, 10 `dogfooding` / 21 `ci` / 13 other, 21 gated / 23 un-gated) with clause 4 written as in progress at that tip. The tip run at `42d3007f0` (`ci-required` run `33974150710`) then completed green at 15:37Z, so `main` was green at the sixteenth block's first commit; the file's wording is conservative, not wrong, and this PR's 18:16Z re-read records it. +- **Project board:** every alpha claim in this range moved through Now on a packet and back when its PR merged (`#2214` on `#2694`, `#1871` on `#2696` and again for its follow-up PR `#2700`, still open at this writing so `#1871` is on Now, `#1434` on `#2697`, `#1999` on `#2698`, returned to Blocked for item 2 behind D-13; `#2638` went Now for items 1 and 3, Blocked when the alpha lane parked them on the shell scroll-model finding that is now D-15, and Now again for item 2). The alpha lane's own board moves were not landing, so the coordinator applies every move it reports; Now never exceeded two. `#2691`'s seeding and the twenty-seven Review to Pending moves are the fifteenth block's. - **Not verified:** nothing executable changed in the coordinator's PRs. v0.3.0-rc.1 SHIPPED (2026-08-30, annotated tag `3fc9f6e8e` peels to `9d2ea3c7c`): diff --git a/docs/releases/V0_3_0_READINESS.md b/docs/releases/V0_3_0_READINESS.md index bf25bcf60..7c6b85dbd 100644 --- a/docs/releases/V0_3_0_READINESS.md +++ b/docs/releases/V0_3_0_READINESS.md @@ -13,7 +13,7 @@ issue numbers below. ## 1. The gate -The five clauses are `docs/REVIVAL_PLAN.md` §3, the v0.3 row. Clause 2 and the section 5 label split re-measured 2026-09-05 at 15:15Z against `main` `42d3007f0`, clause 4 re-read at 18:16Z from the completed tip run (a dated snapshot; the lanes were still merging when it was taken); the section 3 human-gate table carries its 04:00Z measurement, re-checked at 08:50Z with no change and at 15:15Z with one change, the SC-10 row now counts twelve; the section 2 clause-5 chain carries its earlier 2026-09-04 measurement and clauses 1 and 3 their 2026-09-03 one. +The five clauses are `docs/REVIVAL_PLAN.md` §3, the v0.3 row. Clause 2 and the section 5 label split re-measured 2026-09-05 at 15:15Z against `main` `42d3007f0` (a dated snapshot; the lanes were still merging when it was taken), clause 4 re-read at 18:16Z from the completed tip run; the section 3 human-gate table carries its 04:00Z measurement, re-checked at 08:50Z with no change and at 15:15Z with one change, the SC-10 row now counts twelve; the section 2 clause-5 chain carries its earlier 2026-09-04 measurement and clauses 1 and 3 their 2026-09-03 one. | # | Gate clause | State | What it waits on | |---|---|---|---|