Repository navigation
feat/operation-browser-critical-journey-notifications-a11y-cursor - #73
Merged
Conversation
|
@nasarajoe Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits. You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Hardens the public account-history journey end to end: it now has a deterministic
Playwright spec (#49), a first-class notification centre with recipient isolation and
redaction (#56), verified keyboard/screen-reader behaviour plus documented manual
checks (#57), and stable cursor pagination shared by exports and the operation browser
(#58).
tests/e2e/critical-journey.spec.ts,package.json): five deterministic Playwright scenarios with Horizon mocked at thenetwork edge — successful load plus a cursor hop to an older page, empty input that
never contacts Horizon, missing account, rate limiting, and a transient transport
failure that recovers via Try again.
npm run test:e2e:criticalruns only this spec.core/notifications/): typed events(
failure,approval_required,completed,recovery,retry), a storage-backedstore with per-recipient isolation, deterministic ids, dedupe, bounded history
(50), read/unread state, internal-link-only hrefs, runtime validation of persisted
payloads and secret-shaped redaction (
S…) in title, message, href and dedupe key.NotificationProviderpublishes and restores state;NotificationCenterrenders anaccessible bell, badge, event labels, deep links, mark-read/all and clear. Wired into
AppShell/AppHeaderand the sharedrenderFeaturetest wrapper. The operationbrowser publishes failure, retry, completed and recovery events with a recovery
transition on the next successful request.
the invalid field on submit errors,
aria-busyon the form and pager, ansr-onlypolite live region announcing “N operations shown on page M”, a labelled results
list, and manual keyboard/screen-reader/200 %-zoom guidance in
README.md. Twoaxe states still report zero WCAG 2.1 A/AA violations.
core/pagination/cursor.ts): opaqueutix1:<offset>:<key>cursors that anchor on a record key, so records insertedbefore the anchor neither repeat nor skip a page, with an offset fallback and
nextCursor/hasMore. Wired intocore/export/exporter.ts(scope filtering happensbefore cursor keys are generated, so a cursor can never cross an authorization scope)
and into the operation browser, which now dedupes by the composite operation identity
(
id,pagingToken,transactionHash,type) and appends older pages withoutduplicating records. Documented in
docs/EXPORTS.md.Fixes found while validating: older pages were merged into the previous page while the
page index advanced (page 2 rendered empty), and
Inputdid not exposerefin itsprop type, so error focus was untyped.
Closes #49
Closes #56
Closes #57
Closes #58
Feature directory:
features/operation-browser/(pluscore/notifications/,core/pagination/,core/export/,core/layout/,core/testing/,tests/e2e/)How to Test
http://localhost:3000/tools/operation-browser(testnet, default)G…account address and click Browse operationsbutton; Load more shows “Page 2 of 2” with older records and a failed transaction
badged Failed in transaction
Horizon” with Try again; the retry succeeds and a “Recovered” notification appears
Checklist
Result<T, Code>for every expected failurecopy.tsREADME.mdrecords the non-obvious technical decisions (critical journey, manual a11y checks)npm run checkpasses locally — blocked by pre-existing breakage outside this slice