Skip to content

Commit 089ebcc

Browse files
authored
docs: plan post-release follow-up program (#541)
* docs: plan post-release follow-up program * docs: make Changesets v3 migration atomic
1 parent 492b499 commit 089ebcc

2 files changed

Lines changed: 218 additions & 0 deletions

File tree

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
# Post-release Follow-ups Implementation Plan
2+
3+
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
4+
5+
**Goal:** Resolve the approved dependency, correctness, and performance follow-ups as independently verified green-on-merge changes.
6+
7+
**Architecture:** Dependency updates remain isolated by compatibility boundary; the release Action follows the CLI migration. The sole new product fix defines scroll authority at the React/controller seam. Already-shipped issue work is verified against current main before issue closure.
8+
9+
**Tech Stack:** Node 24.19.0, pnpm 10.12.1, TypeScript 6, React 18-19, Vitest, Playwright, Changesets, GitHub Actions.
10+
11+
**Spec:** `docs/superpowers/specs/2026-08-30-post-release-followups-design.md`
12+
13+
---
14+
15+
### Task 1: Commit and merge the follow-up design
16+
17+
**Files:**
18+
- Create: `docs/superpowers/specs/2026-08-30-post-release-followups-design.md`
19+
- Create: `docs/superpowers/plans/2026-08-30-post-release-followups.md`
20+
21+
- [ ] Run `pnpm prettier --check docs/superpowers/specs/2026-08-30-post-release-followups-design.md docs/superpowers/plans/2026-08-30-post-release-followups.md`.
22+
- [ ] Review the two documents against the GitHub issue and PR state.
23+
- [ ] Commit, push, open a documentation PR, wait for required checks, and squash-merge.
24+
25+
### Task 2: Repair and merge dependency group PR #538
26+
27+
**Files:**
28+
- Modify: `status/milestones/2026-08-15-s2-comparative-rebaseline.json`
29+
- Existing PR files: `package.json`, `pnpm-lock.yaml`, `apps/bench/package.json`, `apps/website/package.json`
30+
- Test: `scripts/__tests__/bench-comparator-provenance.test.mjs`
31+
32+
- [ ] Refresh the PR branch from current `main` without force-pushing unrelated history.
33+
- [ ] Reproduce the provenance failure with `node --test scripts/__tests__/bench-comparator-provenance.test.mjs`.
34+
- [ ] Add an `adapterVersions.superseded` block naming MUI Data Grid, MUI Material, TanStack Table, and TanStack Virtual version drift; leave recorded versions unchanged.
35+
- [ ] Re-run the provenance test and inspect the complete PR diff.
36+
- [ ] Run `pnpm install --frozen-lockfile --ignore-scripts --ignore-pnpmfile`, `pnpm security:audit`, `pnpm test`, `pnpm typecheck`, `pnpm lint`, `pnpm format`, `pnpm build`, `pnpm api:check`, `pnpm consumer:check`, `pnpm react:compat`, and `pnpm lint:packaging`.
37+
- [ ] Push, wait for every required check, and squash-merge PR #538.
38+
39+
### Task 3: Combine Changesets CLI 3 and Action 2 in PR #474
40+
41+
**Files:**
42+
- Existing PR files: `package.json`, `pnpm-lock.yaml`
43+
- Modify: `.github/workflows/release.yml`
44+
- Inspect: `.changeset/config.json`, `scripts/publish-configured-packages.mjs`, `scripts/publish-preflight.mjs`
45+
- Test: `scripts/__tests__/publish-public-packages.test.mjs`, `scripts/__tests__/publish-preflight.test.mjs`, `scripts/__tests__/security-audit-workflow-contract.test.mjs`, `scripts/__tests__/node-toolchain-contract.test.mjs`
46+
47+
- [ ] Read the official CLI 3 and Action 2 migration notes and compare them to the repository configuration, workflow, and custom publish wrapper.
48+
- [ ] Refresh the PR branch from current `main`.
49+
- [ ] Write failing workflow-contract assertions for `version-script`, `publish-script`, `pr-title`, `commit-message`, `github-token`, `pr-number`, and output-file propagation.
50+
- [ ] Migrate the Action in the same PR as the CLI. Keep npm token variables absent and the OIDC preconditions fail-closed.
51+
- [ ] Run the focused workflow/publish/preflight tests and safe CLI commands (`changeset status`, config parsing, and a disposable versioning fixture if needed).
52+
- [ ] Run the full verification matrix from Task 2.
53+
- [ ] Push the combined migration, wait for green checks, and squash-merge PR #474.
54+
- [ ] Close PR #476 as superseded by the verified atomic migration.
55+
56+
### Task 4: Resolve fuzzysort 4 PR #472
57+
58+
**Files:**
59+
- Existing PR files: `apps/website/package.json`, `pnpm-lock.yaml`
60+
- Modify/Test: website search modules and their existing tests discovered with `rg -n "fuzzysort" apps/website`
61+
62+
- [ ] Read the official fuzzysort 4 migration notes.
63+
- [ ] Refresh the PR branch and run existing focused search tests to establish the failure or compatibility baseline.
64+
- [ ] Add a regression for every behavior affected by the v4 API change before changing production code.
65+
- [ ] Implement the minimal migration, verify red-green, then run website, typecheck, build, smoke, and full repository gates.
66+
- [ ] Push, wait for green checks, and squash-merge PR #472.
67+
68+
### Task 5: Resolve jest-dom 7 PR #475
69+
70+
**Files:**
71+
- Existing PR files: `package.json`, `pnpm-lock.yaml`
72+
- Inspect: every Vitest setup file and `tsconfig` matcher-type entry returned by `rg -n "jest-dom" .`
73+
74+
- [ ] Read the official jest-dom 7 migration notes and engine requirements.
75+
- [ ] Refresh the PR branch and run representative React, UI, bench, and website DOM suites.
76+
- [ ] Add a focused type/runtime regression before any setup migration required by v7.
77+
- [ ] Run all DOM suites plus the full repository gates.
78+
- [ ] Push, wait for green checks, and squash-merge PR #475.
79+
80+
### Task 6: Fix scroll authority issue #524
81+
82+
**Files:**
83+
- Modify: `packages/react/src/pretable-model.ts`
84+
- Test: create `packages/react/src/__tests__/scroll-authority.test.tsx` or extend the narrowest existing controller-seam test after investigation
85+
- Inspect: `packages/renderer-dom/src/row-layout-controller.ts`, `packages/react/src/pretable-surface.tsx`
86+
87+
- [ ] Trace user scroll, grid viewport, controller viewport, anchor restore, and status-change data flow on current `main`.
88+
- [ ] Write a React integration regression that reproduces stale viewport re-feed after an anchor-adjusting publish; confirm it fails for the #524 reason.
89+
- [ ] Make status-only controller publications unable to reassert stale DOM scroll while preserving legitimate viewport feeds.
90+
- [ ] Confirm the regression passes, mutation-check by restoring the old dependency/behavior, then restore the fix and run React plus renderer focused suites.
91+
- [ ] Run full repository gates and Chromium/WebKit smoke tests.
92+
- [ ] Push a dedicated PR, wait for green checks, squash-merge, and close #524 through the PR.
93+
94+
### Task 7: Verify and close #491
95+
96+
**Files:**
97+
- Existing test: `packages/renderer-dom/src/__tests__/indexed-renderer.test.ts`
98+
99+
- [ ] Run the focused journal-anchor test on current `main`.
100+
- [ ] Confirm PR #508's merge commit is an ancestor of current `main` and inspect the exact anchor ladder.
101+
- [ ] Comment with the test evidence and close #491 as completed.
102+
103+
### Task 8: Re-measure and close #452
104+
105+
**Files:**
106+
- Generated/committed measurement only if the bench workflow requires it: `status/runsets/*`, `status/milestones/*`
107+
108+
- [ ] Check the machine for a quiet measurement window.
109+
- [ ] Run Chromium S2 hypothesis sort, filter-metadata, and filter-text for Pretable and TanStack with at least three repeats in the same runset.
110+
- [ ] Compare interaction latency and correctness metrics to the original issue and PR #479/#487 evidence.
111+
- [ ] If the gap remains closed, comment exact results and close #452; if not, keep it open and write a new evidence-based implementation plan before changing code.
112+
113+
### Task 9: Final main and production audit
114+
115+
- [ ] Pull latest `main` into a fresh verification worktree.
116+
- [ ] Run security audit, full tests, typecheck, lint, format, build, API, packaging, packed consumers, React compatibility, and Chromium/WebKit smoke.
117+
- [ ] Verify npm package dist-tags and the latest main CI, CodeQL, Scorecard, release, and production-deploy checks.
118+
- [ ] Review open PRs/issues for superseded dependency branches or newly exposed blockers and report the final handoff.
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
# Post-release follow-ups design
2+
3+
Date: 2026-08-30
4+
5+
## Goal
6+
7+
Finish the open maintenance and correctness work after the `0.11.0` release
8+
without combining unrelated risk into one merge. Every lane starts from the
9+
then-current `main`, carries its own evidence, and merges only after required
10+
checks pass.
11+
12+
## Reassessment against current main
13+
14+
The released package architecture is already on `main`. Since the original
15+
handoff, PR #539 also merged, so follow-up branches must start at or after
16+
`ac1cbb41` rather than the release commit.
17+
18+
Two open issues describe work that has already shipped:
19+
20+
- #491 was fixed by PR #508. The journal path now uses the same exact-ref then
21+
old-neighbour anchor ladder as the replacement path, and the renderer test
22+
pins the previously divergent scroll result.
23+
- #452 was addressed by PR #479 for sort and PR #487 for filters. Their
24+
same-run measurements show sort interactions at or better than TanStack and
25+
filter interaction latency in the 15-18 ms band. Those issues need fresh
26+
verification and closure, not another speculative optimization.
27+
28+
#524 remains an unresolved ownership seam. A controller publish may compute an
29+
anchored `scrollTop`, after which React's viewport-feed layout effect can run
30+
because controller status changed and reapply the DOM/grid snapshot's older
31+
pixel offset. The fix must define authority at a publish boundary rather than
32+
paper over one replace scenario.
33+
34+
## Delivery lanes
35+
36+
### 1. Minor and patch dependency group (#538)
37+
38+
Refresh the Dependabot branch onto current `main`. Preserve historical
39+
benchmark truth: do not edit recorded comparator versions. The existing S2
40+
milestone is already superseded for pinning asymmetry, so add an explicit
41+
`adapterVersions.superseded` record naming the four comparator version moves
42+
and stating that its numbers describe the older releases. Run the full repo,
43+
packaging, audit, and browser checks before merge.
44+
45+
### 2. Atomic Changesets v3 migration (#474 + #476)
46+
47+
Changesets' official migration contract requires CLI 3 and Action 2 to move
48+
together: Action v1 is the CLI 2 maintenance line, and Action v2 validates CLI 3. Extend PR #474 into the atomic migration and close #476 as superseded only
49+
after #474 merges. Prove the repository config parses, status/version commands
50+
work on a disposable branch state, publish preflight still fails closed, and
51+
the release workflow contract remains green. Migrate the renamed Action
52+
inputs/outputs and explicit `github-token` input in the same commit series.
53+
54+
### 3. Other major updates (#472, #475, #476)
55+
56+
Each major gets dedicated compatibility evidence:
57+
58+
- fuzzysort 4: verify the documented API change against every website call
59+
site and preserve search ranking/result behavior with focused tests.
60+
- jest-dom 7: verify the Vitest setup, matcher types, Node floor, and all DOM
61+
suites.
62+
- PR #476 is resolved by the atomic Changesets migration above, not by a second
63+
release-workflow merge.
64+
65+
### 4. Scroll authority (#524)
66+
67+
The engine owns scroll position while committing an anchored row-layout
68+
publish. The DOM owns new scroll intent only when an actual viewport event or
69+
imperative viewport command changes the grid snapshot. A controller status
70+
transition alone must not manufacture new DOM intent.
71+
72+
Implement this at the React/controller seam. First add a regression that makes
73+
the controller publish an anchor-adjusted `scrollTop` while the grid snapshot
74+
still holds the old value, then proves a status-only rerender cannot overwrite
75+
the anchored value. Keep legitimate height, width, overscan, column, and user
76+
scroll feeds intact. Verify with controller-level and React integration tests.
77+
78+
### 5. Closure audits (#491 and #452)
79+
80+
For #491, run the focused journal-anchor mutation test on current `main`, link
81+
PR #508, and close the issue.
82+
83+
For #452, run the current Chromium S2 sort, filter-metadata, and filter-text
84+
matrix for Pretable and TanStack in one environment. Record the fresh runset
85+
or an issue comment with exact command, revisions, and results. Close only if
86+
the current measurements still establish that the originally reported
87+
interaction-latency gap is gone; otherwise reopen implementation scope from
88+
the evidence.
89+
90+
## Verification and merge policy
91+
92+
Each lane is a separate PR or an update to the existing Dependabot PR. Before
93+
merge: focused tests, full `pnpm test`, typecheck, lint, formatting, build,
94+
packaging checks, packed consumers, React compatibility, and security audit as
95+
applicable. Browser-sensitive changes additionally run Chromium and WebKit
96+
smoke/bench coverage. Merge only when required GitHub checks are green, then
97+
pull the new `main` before beginning the next lane.
98+
99+
No benchmark record is rewritten to claim an unperformed measurement. No
100+
major upgrade is accepted solely because installation succeeds.

0 commit comments

Comments
 (0)