Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions docs/STATUS.md
Original file line number Diff line number Diff line change
Expand Up @@ -310,6 +310,19 @@ Platform lane (beta-platform-integrity, recorded from the lane's own merge packe

Corrections to earlier blocks in this file: (1) the thirteenth block's header bounds it at `540bc2abb`, but its platform-lane bullet records PR `#2669`'s merge `140213288`, which landed after that bound (2026-09-05T08:36Z); the bullet is a post-bound packet recorded early, and this block's range starts at `e96523907`, the thirteenth block's own merge, which follows it. (2) The sixth block's `#2425` bullet attributes the helper suite's stop at the `invalid-branch` case on the development box to the pinned Git rejecting the non-ASCII fixture name; re-measured 2026-09-05 by the platform lane on the same commit and the same Git, the cause is the launching host's argv encoding (the suite stops at scenario 19 only from a Git Bash parent, whose child PowerShell host decodes the superscript argv character differently from Git, and passes 29 of 29 from a native PowerShell parent), not the Git binary; a pointer clause is appended to that bullet.

v0.3 integration wave, fifteenth block (2026-09-05, `main` `1d94f1cb3`, the fourteenth block's own merge, to `a2fe24757`; alpha product-trust lane continued, no platform-lane packet in this range; the coordinator's D-12 sweep of the open Codex-session PRs also landed in this range and is left to the coordinator, who adds a coordination-lane subsection to this block after it lands; it is not recorded here). Codex review credits stayed exhausted (SC-9), so every PR below carried one fresh-context independent reviewer subagent, with a second read-only pass scoped to the round-2 fix diff where that diff changed logic (`#2690`); control-plane PRs stay parked under SC-10.

Review and proposal frontend:
- **The execute and reject receipt recorders carry the decision-locus guard (`#2128`, PR `#2692`, merge `38cfd8d38`; closes `#2128`).** `onConfirmExecute` and `onConfirmReject` in `PaperReviewView.vue` now record their decision receipt only when the current decision locus (`explicitActiveId`, then the active proposal) still equals the proposal the action started on, the guard `onApply` (`#2069`) and `onDefer` (PR `#2629`) already carry; before, a reviewer who selected proposal B while A's execute or reject was in flight was pulled back to A's receipt when the response landed, because `recordDecisionReceipt` also re-pins the selection. Neither sibling touches the deep link, and the Legacy review view records no receipt (the receipt is Paper-only, rendered by `ReviewMain.vue`), so nothing is owed there. Six specs beside the defer pair, four red-first (the pane re-anchored to the left proposal; the receipt rendered while the route hash still named it), the lagging navigation reproduced by aborting the pending route rather than by timing; `PaperReviewView.spec.ts` 183 of 183. Reviewer SHIP, one comment LOW declined. Exact head `7fbcb8eec`.

Board frontend:
- **The shared board-list read is bounded and aborted on logout, and the filter defaults have one source (`#2685`, PR `#2688`, merge `3d16334b9`; closes `#2685`).** The shared unfiltered board-list read from PR `#2681` now carries the bound the detail read already had (`signal`, `timeout: BOARD_REQUEST_TIMEOUT_MS`, `skipRetry: true`), for filtered reads too: before, the list read had no timeout and the retry layer allowed three waits of up to 60 s each, unbounded on a wedged socket and, under the share, pinning every unfiltered caller on the page together; after, one attempt of 10 s, a bounded failure rejecting every joiner with one `handleApiError` and releasing the share so the next call refetches. `resetForLogout` aborts in-flight list reads after bumping the list generation (no toast, no state write from the aborted read). `initialCardFilters()` in `boardState.ts` is the single source for the three filter-default sites. The generation-to-loading coupling is written beside the finally gate, and the `skipRetry` comment gives the real reason (the share, not the wedged socket). Reviewer SHIP, its recommendation to keep `skipRetry` adopted; the product cost, a one-off 503 no longer self-healing on a boards list that has no Retry control, plus a Metrics catch, translated timeout copy and the error clear on a successful read, tracked as `#2689`. Store suites 154 of 154 at the head; the first CI run's Windows Frontend Unit leg hit the `#2561` launcher signature and re-ran green. Exact head `effdd122b`.
- **The boards list can retry, and a bounded failure is caught, translated and cleared (`#2689` items 1 to 4, PR `#2690`, merge `a2fe24757`; Refs `#2689`, items 5 to 10 stay open).** `BoardsListView`'s error state gains a Retry control (`data-action="retry-board-load"`, `aria-describedby` on the alert paragraph, `role="alert"` moved onto the message so the sentence announces alone and the button stays focusable), with mount and retry sharing one load path and the skeleton shown while a retry is in flight; `MetricsView.loadBoards` catches a rejected list read instead of leaking an unhandled rejection from `onMounted`; at the board store's boundary `handleApiError` maps a client-side timeout (`ECONNABORTED`, `ETIMEDOUT`, or an axios error with no response whose message says timeout) and an axios cancel to translated copy (`boards.error.timeout`, `boards.error.cancelled`) for `state.error` and the toast, through `i18n.global.t` as the review store already does, a cancel mapped rather than silenced so the list cannot fall to the empty state on an aborted read; a current-generation list read that succeeds clears `state.error`, while the detail read is left alone because a background refresh must not clear an alert it does not own. Red-first across four specs (nine failing assertions on the unmodified code); the seven named suites 187 of 187, the whole store and views trees green. Reviewer SHIP; three MEDIUMs on the new control fixed in round 2 (an explicit retry bypasses the 5 s throttle, which had made the button a silent no-op after a mutation failure inside the window; the success clear is guarded to the error a list read itself wrote, so another surface's alert survives; focus returns to the new Retry button after a failed retry), with a verification pass scoped to the round-2 diff, SHIP, with the unconditional focus restore (a hung retry can pull the caret out of the create form) and four LOWs recorded on `#2689` as items 6 to 10 at the two-round ceiling; the unreachable `ETIMEDOUT` arm declined as defensive. Exact head `4b8138444`.

- **Not shipped reality:** `#2689` stays open on item 5 (the direct `boardsApi.getBoards` callers outside the store, five at this block's assembly: `ArchiveView.vue`, `AutomationQueueView.vue`, `BoardAccessView.vue`, `useAutomationChat.ts`, `useReviewProposals.ts`; the issue's own count of four is corrected there) and on the round-2 verification residuals recorded as items 6 to 10 (an unconditional focus restore after a failed retry, a throttle docblock still narrower than the truth, the collapsed timeout and offline copy making the guarded clear's identical-message collision routine, `BoardListFetchOptions` not re-exported, one spec comment over-claiming); the detail read's success-path error clear needs an intent gate (recorded on `#2689`); `#2682` (route-walk doc precision) stays tracked; `#2214` item 2 (persistent disclosure of repeated non-transient poll failures on both legs, the malformed-link panel copy and the explicit-path toast asymmetry) is the lane's next slice now that PRs `#2629` and `#2654` released the Paper review and inbox files; the ruling-gated items and the non-ruling residuals listed in the fourteenth block (`#2090`, `#1949`, `#2638`, the `#2215` Paper residuals, the two `#1940` residuals, `#1999` item 3) are unchanged. Control-plane PRs stay parked under SC-10; the platform lane's 2026-09-05 12:35Z checkpoint on `#2351` lists its five, and the queue's last full measurement (ten at `1e234a011`, thirteenth block) is re-measured by the coordinator with the sweep record, since the sweep may have merged the older half.

Corrections to earlier blocks in this file: the thirteenth block's coordination-lane sentence that the Codex session's `#2629` and `#2654` were unowned and "nothing of that session's has been reviewed or merged" is superseded as a present-tense claim: both landed in this range under the coordinator's D-12 sweep (`#2629` as `cf24dec01`, `#2654` as `221ed702d`), which the coordinator records; this block's `#2128` entry depends on the first and its `#2214` next-slice note on both.

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.
Expand Down
Loading