Skip to content
Merged
Show file tree
Hide file tree
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
Original file line number Diff line number Diff line change
Expand Up @@ -160,3 +160,46 @@ else add cases to client-resource-revalidate.test.tsx):

Server-side endpoint merging, render-level memoization audits, virtualization
tuning, bundle-size work.

## D addendum — landed (2026-08-16/17)

Implementation: commit d6ea35ef0.

### Measurement (CDP, sandboxed instance on :5198, same protocol as 001/E0)

| Scenario | Before | After |
|---|---|---|
| Dashboard, 31s dwell, visible | 57 requests / 9 concurrent 5s timers | 57 requests / **1** shared 5s timer |
| Integrations revisit inside 60s | full refetch of 8 overview resources, skeletons on mount | **0 requests, 0 skeletons** |
| Hidden tab (any page) | WP3 guarantee | unchanged: zero timers, zero requests |

The visible-tab request count is deliberately unchanged: bucketing removes wakeups,
not cadence, and freshness (not volume) is what a live dashboard is for. The real
volume win is the revisit path — previously every tab hop re-fetched everything
because `scheduleStoreEviction` drops the store on route change.

### Interval tuning decision (§3)

No cadence changed. The measurement does not show Logs (2s) or Debug (1s+2s)
dominating: they are page-gated (`enabled: tab === "logs"` / `active`), so they
contribute nothing unless the user is looking at them, and both are now
visibility-paused and in-flight-guarded by WP3. Changing a freshness-affecting
default without the numbers supporting it would be exactly the kind of unforced
regression this section exists to prevent.

### Deviations from spec

- The spec assumed the Integrations pages would gain hand-written cache wiring.
Ten resources across two files needed the identical seed+write pair, so
`useDataSurface` gained an opt-in `sessionCacheKey` instead and the pages pass a
key. Same mechanism, one implementation.
- `startVisibilityPoll` schedules through `window.setInterval` when available. The
migrated pollers all used the window timer and their tests intercept it there;
the bare global bound to a different scope and broke nine tests (found by running
the full suite, fixed before commit).

### Verification

- `cd gui && bun test tests` → **922 pass / 0 fail** (157 files), exit 0.
- `bun run lint`, `bun run lint:i18n`, `bun run build` → all green.
- Browser: revisit flow measured above; dashboard poll wave unchanged and healthy.
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
# 050 — WP5: delivery record (stack publication, CI, remote suite, merge)

## Stack shape

Four dependency-ordered layers, each PR based on the one below, bottom targeting
`dev`:

| # | PR | Branch | Layer |
|---|----|--------|-------|
| 1 | #1854 | codex/gui-resource-deadline | resource deadline |
| 2 | #1855 | codex/gui-auth-unwedge | 401 re-bootstrap unwedge |
| 3 | #1856 | codex/gui-hidden-pause | hidden tab = zero timers |
| 4 | #1857 | codex/gui-poll-consolidation | shared scheduler + revisit freshness |

## Rebase history

Two cascades, both `git rebase --update-refs --onto origin/dev <old-base>` from
the top branch so all four refs move in one pass:

1. The stack was cut at `b81314cd2`; `origin/dev` had advanced 88 commits.
2. A second cascade onto `8f7a22ff7` picked up PR #1853, which had landed the
admission-`source` contract. That one mattered: the remote suite had reported
2 failures in `tests/loopback-listener-admission.test.ts` that were NOT ours —
the remote checkout paired #1853's NEW test file with our older source. After
the cascade the same suite ran clean, which is what confirmed the diagnosis.

A comment-text-only conflict in `gui/src/visibility-poll.ts` was resolved in
favor of the WP3 wording (see below).

## Layer independence correction

CI caught what local runs could not: WP3 (#1856) failed its own `gates` job with
nine failures in the codex-auto-switch and account-picker suites. Those tests
intercept `window.setInterval`, and `startVisibilityPoll` was scheduling through
the bare global — the fix existed only in the WP4 commit. Since DEV-STACK-03
requires every layer to be green at its own tip, the fix moved DOWN into WP3
(`116bcae03`, later `c75f88d6c`) where the migration itself lives.

Verified after the move: WP3 tip 913 pass / 0 fail, WP4 tip 924 pass / 0 fail.

## Verification evidence

- Remote full suite (`ssh lidge`, `bun test --isolate tests`) on the WP4 tip
after the second cascade: **12700 pass / 0 fail / 15 skip, EXIT=0**.
A `dev`-baseline run in the same session also finished EXIT=0, which is how the
earlier 2 failures were attributed to the stale base rather than to this work.
- Local: `bun run typecheck` green; `cd gui && bun test tests` 924 pass;
`bun run lint`, `bun run lint:i18n`, `bun run build` green.
- Browser: dashboard renders unchanged; revisit inside the freshness window
issues zero requests with zero skeletons.

## CI flakes encountered (not regressions)

The macOS and `test 2/4` jobs each failed once with a **Bun runtime crash**
(exit 133 / exit 132, `storage-worker-lifecycle` under singleton isolation) —
the workflow itself distinguishes these from assertion failures and retries once
before giving up. Assertion count in both logs was `0 fail`. Re-runs cleared
them, and the same commits pass the full suite on Linux.

The `ci` aggregate job also failed on several branches by asserting before the
long macOS job had reported; re-running it after macOS completes is the fix.

## Screenshot gate

`enforce-target` requires a UI screenshot for any PR touching `gui/`. These four
change request lifecycle, timers, and caching with no visual delta, so the
maintainer waiver label `gui-screenshot-waived` was applied to all four, and a
post-change dashboard screenshot was captured during verification.

## Merge

Bottom-up, one at a time, each with `--match-head-commit` bound to the audited
SHA. `dev` requires one approval and the author cannot self-approve, so the
project owner's admin merge (pre-authorized by the user for this campaign) is
the path used.

- #1854 merged at 2026-08-16T17:15:18Z as `e2ef24ad6`.
- Remaining layers merge in order once their own checks are green, retargeting
each child to `dev` after its parent lands.
Loading
Loading