Skip to content

Queue-flake anchor: src/pages/settings/__tests__/SettingsView.shellLeave-13231.test.tsx #26096

Closed

Description

@github-actions

src/pages/settings/__tests__/SettingsView.shellLeave-13231.test.tsx has ejected 2 pull requests from the merge
queue within a rolling 24 hours — 2 independent hits once
GitHub's speculative stacking is accounted for. This issue is the single place for
that conversation; it is refreshed by the merge-queue-triage workflow on every
further ejection.

PR stack queue build
#26027 independent 40337868008
#26057 independent 40316529606

This issue is a NAME, not a diagnosis. The workflow that files it reads the
failing test file path out of the job logs and counts PRs; it does not
know whether this is a flake, a load/timing cliff, a semantic conflict between
queued PRs, or a real regression, and it does not act on any of those. No test is
skipped, quarantined or re-queued by it, and no PR is labelled by it — weakening
a gate stays a human act.

What to do with it: read one victim PR's triage comment for the failure REASON
line beside the FAIL line (a timeout and an assertion are the same FAIL line and
opposite diagnoses), decide the cause, and close this issue with the fix or with
the reason it is not one.

Last refreshed by queue build 40337868008 (PR #26027).


Filed by the merge-queue-triage workflow (#4859, aggregation #10128).

Activity

  1. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    Contributor

    Triage: first grade — bug · tests · priority:p2 · domain:ui · area:records · pm:queue (finding removed) · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-26T12:14Z

    ⛔ Not a claim, ⛔ not a dispatch.


    Generated by Claude Code

  2. added
    area:recordsBusiness objects, records, the views that show data, usable forms, search
    bugSomething isn't working
    and removed on Oct 26, 2026
  3. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    Contributor

    Claim: PM loop round 3 · 2026-10-26T14:31Z
    Session: session_01SMps7wq7rBTk53e8KTSEup
    Account: os-steve
    Branch: claude/issue-26096-settings-shell-leave-wait
    Worktree: objectstack-issue-26096
    Domain: domain:ui
    Seat: domain:ui#2
    File surface: ui/apps/console/src/pages/settings/__tests__/SettingsView.shellLeave-13231.test.tsx only (the waits before the post-navigation queries); root .changeset/ only if the repo's changeset gate asks for one on a test-only diff (stop on breach; explain in the report). ⛔ SettingsView sources, ui/packages/**, ui/.github/** and the root .github/workflows/ci.yml are out of bounds. scripts/sdui-manifest.* stays untouched (apps/console is outside the registry closure).
    Container & model: S, mode:subagent, model: default tier, effort: medium
    Clause-②: no
    Metadata-protocol: none
    Responsibility: the console settings page's shell-leave test, which races a 1000 ms default wait on a loaded shard | the save's settled state the case already observes | every ui PR whose merge-queue build lands on that shard (#26027, #26057, #25996 so far)
    Thread-read: 6415752036
    Premise: holds 2026-10-26T14:30Z — on origin/main 3993793dc8, SettingsView.shellLeave-13231.test.tsx:195 await screen.findByText('Profile page') after the save-settled waitFor (:192) uses the default 1000 ms; queue build 40337868008 (#26027) failed it at 1064 ms and the triage seat measured 1066 ms on #26057 — a timing cliff, not a behaviour change. Same pattern at :162 and :184.
    Serial constraints cleared: none — no open claim holds this test file.
    Writes: PR only via the relay op pr_create; comments only via the relay write tools; ⛔ no GitHub MCP writes.

    • Ruling section: triage 6415752036 — make the wait match what the case awaits; ⛔ no quarantine, no skip, no retry.
    • Seat's route: the post-navigation query awaits the route change it depends on (e.g. findByText(..., {}, { timeout }) sized to the suite's established budget for console route loads, or awaiting the navigation signal the test already has) — no product change, no sleep. Apply the same to the other two findByText('Profile page') sites. Fixes #26096 (the anchor closes with the fix).
  4. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    Contributor

    os-dev-report

    {
      "issue": 26096,
      "status": "done",
      "branch": "claude/issue-26096-settings-shell-leave-wait",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/26212",
      "session": "session_01SMps7wq7rBTk53e8KTSEup",
      "premise_still_valid": true,
      "summary": "The flake is real and pinned to :195 (the after-save case, both ejections), but it is not a timing cliff. The save commits outside act. The page's unsaved-edits registration is released one passive-effect task later, and on a loaded worker the bar-wait returns in between. The Profile click then meets a still-registered page, confirmUnsavedLeave asks, the stubbed confirm answers Cancel, and the route never changes, so no timeout could help. The fix waits on the registration itself before the click: a cancelable beforeunload that is no longer prevented. This is the exact pattern the sibling SettingsView.leaveGuard-13163 save case already uses (objectui#13317). It is test-only, +16/-0 in the one claimed file, with assertions unchanged and no timeout, sleep, retry, skip or product change. :162 and :184 are untouched: a probe showed Profile page is already in the DOM synchronously after those clicks, and neither case can hit the race. This deviates from the seat's suggested timeout-sizing route, which would not fix it and which ui/AGENTS.md (测试纪律) forbids.",
      "tests": "All runs under os-verify-lock, vitest --project @object-ui/console --maxWorkers=2. (1) Mechanism probe (throwaway, deleted): the save commit runs with IS_REACT_ACT_ENVIRONMENT=false, and at that commit held=true bar=false. (2) Unfixed case with an emulated starved worker (3 ms CPU burn after the queued microtasks once the bar goes): FAILED 2/2 with registrationHeld=true at the click, confirmCalls=1, path=/settings/localization, 'NOT FOUND after 1006 ms', which is the CI signature; it passes without the emulation. (3) Fixed case under the same emulation: 3/3 'Tests 6 passed (6)'. (4) Natural load on main: NOT reproduced (plain main runs are green; no CPU hog was run on the shared box). (5) Fixed file 5x in a row at f7b810df: 5 x 'Tests 6 passed (6)', VERDICT command-exit 0. (6) Whole @object-ui/console project at f7b810df: 'Test Files 247 passed (247) / Tests 2488 passed (2488)', VERDICT command-exit 0 (839 s held). (7) After merging origin/main (head 9c7d1a00) and rebuilding console^... (70/70 tasks): this file plus leaveGuard-13163 gave 'Test Files 2 passed (2) / Tests 18 passed (18)', VERDICT command-exit 0. Ablation: n/a, because a test-only diff changes no tested behaviour; the unfixed-vs-fixed emulation pair is the reverse proof.",
      "gates": "At head 9c7d1a00: node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack derived 23 commands; each was run with its exit captured before any pipe, and all 23 exit 0 (check-sdui-manifest exit 0, so the record is untouched). --ran reconciliation: '23 derived, 23 run, 0 NOT-MEASURED, 0 UNRUN (a DERIVED zero)'. pnpm --filter @object-ui/console run type-check exits 0, but its program does not list this test file (--listFiles count 0), so it is not coverage of the change. CI on the PR: in_progress at report time (28 check-runs: 19 in_progress, 2 success, 7 skipped, none red). Not waited on, per contract.",
      "dogfood_battery": "n/a: no '!' in the PR title and no (narrowing) arm",
      "mcp_calls": "0",
      "api_writes": "2: (1) fleet-write relay pr_create (POST /repos/objectstack-ai/objectstack/dispatches, run 40352715114, which executed POST /pulls plus POST /issues/26212/assignees [os-steve] and POST /issues/26212/labels [skip-changeset]; read-back identical, 5236 bytes); (2) this os-dev-report comment via post-stamped.mjs (POST /issues/26096/comments). Plus 3 git pushes (empty branch, fix commit, merge of origin/main), which are not REST writes.",
      "open_questions": [],
      "out_of_scope_findings": [
        "carrier: none. Noted in the PR Acceptance notes only: the triage reading 'timing cliff, 1066 ms against the 1000 ms default' (triage 6415752036, and the devx re-queue on #26057 citing a 'timeout-shaped red') misread a swallowed click as a slow navigation. A re-queue cannot cure this signature on a loaded shard. No card is filed (not a defect class)."
      ]
    }

    Generated by Claude Code

  5. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    Contributor

    Landed · seat 2 · 2026-10-26T16:58Z

    probe reading
    PR #26212 MERGED 2026-10-26T16:58Z, merge commit f42b55f2, head 9c7d1a00 (test-only, +16/−0, ACCEPT 6420477259)
    origin/main at f2e70836, contains f42b55f2 (git merge-base --is-ancestor exit 0)
    queue branch gh-readonly-queue/main/pr-26212-*: none left (consumed)
    card closed (completed) by Fixes #26096 on #26212

    Status: the after-save case now waits until the page releases its unsaved-edits registration, rather than a timeout. The flake's measured cause was a swallowed click: the registration was still held when the test clicked. pm:dispatched removed; the anchor is done.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:recordsBusiness objects, records, the views that show data, usable forms, searchbugSomething isn't workingdomain:uipriority:p2Medium: important, M3queue-flake-anchortests

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions