Skip to content

fix(invites): keep deadlines active through JSON body reads - #4353

Merged
gabsprogrammer merged 1 commit into
Osmantic:public-betafrom
tang-vu:fix/beta-invite-body-deadlines
Sep 13, 2026
Merged

gabsprogrammer merged 1 commit into
Osmantic:public-betafrom
tang-vu:fix/beta-invite-body-deadlines

Conversation

@tang-vu

@tang-vu tang-vu commented Sep 11, 2026 •

Copy link
Copy Markdown
Contributor

Why this matters

The Owner access request helper cleared its 8-second deadline as soon as fetch returned headers. A stalled list, owner-status, generation or QR JSON body could then leave loading/submitting active indefinitely. A rendered regression reproduces the list case: HTTP 200 arrives, JSON never completes, and the page cannot refresh.

Read the body under the original AbortController deadline. Preserve the callers' response status and deferred JSON-error handling using a small result adapter. Timeout messages request a list refresh before another action; nothing is automatically retried.

Overlap check

Searched open/closed Invites.jsx PRs. Inspected #3038 (isolate owner-status failures): it changes Promise.all to allSettled, not the fetch/body deadline. #3833 ignores obsolete refreshes, #3846 filters inventory, and #2327 handles clipboard. None covers the body phase. The helper remains compatible with their existing ok/status/json callers.

Validation

  • New rendered page test failed on base: the request signal remained un-aborted after 8 seconds and the skeleton could not recover.
  • npx vitest run src/pages/InvitesBodyDeadline.test.jsx src/pages/Invites.test.jsx: 7 passed, including explicit refresh recovery, existing revocation, generation payloads, and QR flows.
  • Focused ESLint 0 errors; scoped pre-commit and git diff --check passed.

A timeout does not prove a server mutation failed. The UI asks for reconciliation and performs no retry; the existing server remains authoritative. Tests simulate the browser's body-read AbortError path, with no live card issued or revoked. Revert restores the headers-only deadline.

Batch integration receipt

Validated with the other 19 public-beta PRs on integration commit ce0d0132, based on upstream f5f49b7. All 20 patches compose without conflicts in creation order; no new PR requires another to fix its own behavior. For shared files, use #4325 before #4327 and #4339 before #4356 as the tested order.

  • Final combined dashboard: 118 test files / 932 tests pass; ESLint 0 errors (575 warnings); production build passes.
  • Affected API suites: 292 pass. APE full suite: 52 pass. Scoped pre-commit secret/private-key/large-file checks and git diff --check pass.
  • Native Linux make gate reaches an existing CLI-update failure also reproduced on the untouched base; fix(update): keep host-agent refresh non-fatal #3159 supplies its separate fix. BATS: 419/421 pass, with the same two baseline failures (non-GNU OSTYPE fixture detects the real WSL host; skip-Docker fixture lacks production helpers). Smoke tests and installer simulation pass. These are explicit validation gaps, not a claim that the whole release gate is green.

Latest candidate CI: 32 successful checks, 4 skipped. Draft status on filesystem/authorization changes is retained for independent human review despite green CI.

@tang-vu
tang-vu marked this pull request as ready for review September 11, 2026 16:47
@gabsprogrammer
gabsprogrammer merged commit 7e3434f into Osmantic:public-beta Sep 13, 2026
42 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants