Skip to content

fix(notifications): serialize preference saves by intent - #3343

Draft
Chris0Jeky wants to merge 4 commits into
audit/3339-notification-read-ownershipfrom
audit/3341-notification-preference-order
Draft

Chris0Jeky wants to merge 4 commits into
audit/3339-notification-read-ownershipfrom
audit/3341-notification-preference-order

Conversation

@Chris0Jeky

@Chris0Jeky Chris0Jeky commented Sep 21, 2026

Copy link
Copy Markdown
Owner

Closes #3341.

Stack

Stacked on PR #3340 (audit/3339-notification-read-ownership) at parent head 49b903a61a744061f04511377a97f2807dfeed1b.

Retarget to main only after #3340 lands, verify the child-only diff, then requalify the resulting exact head.

Summary

Serializes notification preference saves in this client’s submission order:

This queue does not claim cross-device concurrency safety or add a backend revision precondition.

Test-first evidence

  • Test-only child: 4f89c6f2969d5dbad923841b4984ef152daef824
  • Corrective implementation: af8fde45f58f9dab0027ce11e7530ca03e2f2d2e
  • Documented implementation head: 0d1ef8e21cc15f94f3bb86f3d86f21097432c0a9
  • Current lint-corrected head: 9e6b675805e6b100952743d900b1458ae7888746

The committed Pinia/Vitest suite covers:

  1. immediate first transport and serialized second intent;
  2. failed-predecessor continuation;
  3. queued old-credential intent after token rotation;
  4. loading ownership while work waits;
  5. preservation of an independent inbox failure when queued transport starts.

A supplemental runner transpiled and executed the actual stores:

The production module and current test file transpile under TypeScript 5.8.3 with zero diagnostics.

Hosted qualification history

At 0d1ef8e21cc15f94f3bb86f3d86f21097432c0a9, Self-Test and Extended passed. Required CI failed before typecheck/tests because the new test file retained one unused local notification() factory. Ubuntu and Windows reported the same @typescript-eslint/no-unused-vars error; backend unit/API integration, architecture, migrations, security, governance and worktree lanes were green. Container frontend build failed downstream of the same frontend source gate.

Current head 9e6b675805e6b100952743d900b1458ae7888746 removes only that unused factory. Runtime source and behavioral assertions are unchanged. Its exact-head workflows are pending.

Keep draft until the complete current-head Self-Test, Extended, Required CI and independent review are inspected. After #3340 merges, retarget to current main, verify the child-only diff and rerun all qualification. Green CI will be evidence, not merge authorization.

Copy link
Copy Markdown
Owner Author

Parent reconciliation required before any further qualification.

PR #3340 now ends at 4f8134d6c6ecd840041c0127371798e0c412f06a, not the 49b903a parent snapshot currently embedded here. The parent now preserves settled inbox/preferences across same-user refresh and retries only active empty read lanes; mark-read, mark-all, and preference mutations are never replayed.

Keep this child draft and treat its current non-mergeable state and prior CI as superseded. After #3340's exact final head is green/reviewed, rebuild the preference-save serialization/error-receipt delta on 4f8134d, verify the child-only diff, then rerun Self-Test, Extended, Required CI, and review.

Copy link
Copy Markdown
Owner Author

Handoff: this child is fully saved at 9e6b675805e6b100952743d900b1458ae7888746. Parent #3340 has since advanced to 4f8134d6c6ecd840041c0127371798e0c412f06a, so keep this PR draft. Reconcile/restack onto the corrected parent, verify the child-only diff, and rerun exact-head CI/review before changing readiness.

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

Labels

None yet

Projects

Status: Pending

Development

Successfully merging this pull request may close these issues.

1 participant