Skip to content

Feat/issues 706 707 710 713 - #1313

Merged
leojay-net merged 1016 commits into
leojay-net:mainfrom
emwulrd:feat/issues-706-707-710-713
Jul 31, 2026
Merged

Feat/issues 706 707 710 713#1313
leojay-net merged 1016 commits into
leojay-net:mainfrom
emwulrd:feat/issues-706-707-710-713

Conversation

@emwulrd

@emwulrd emwulrd commented Jul 30, 2026

Copy link
Copy Markdown
Contributor

Summary

Resolves open issues across the frontend and Soroban smart contract: Zod schema improvements, overflow prevention, circuit breaker events, edge case validation, ARIA accessibility, and comprehensive hook test coverage.

Changes

#1176 — AdminGuard ARIA live-region announcements

  • Add role="status" and aria-live="polite" to loading state
  • Add role="alert" and aria-live="assertive" to error messages
  • Add descriptive aria-label attributes to spinner, error icon, and retry button
  • Comprehensive accessibility tests verifying all ARIA attributes

#1175 — useMediaQuery test coverage

  • Initial state tests: SSR fallback, matches/non-matches scenarios
  • Update tests: media query state changes, query prop re-registration
  • Cleanup tests: event listener removal on unmount and rerenders
  • Branch coverage: multiple simultaneous queries, complex media query strings

#1173 — useIdempotentAction test coverage

  • Initial state and async execution with resolve/reject paths
  • Cooldown/throttling enforcement and expiry behavior
  • In-flight action deduplication by actionName
  • Reset functionality clearing state and cooldown timer
  • Unmount cleanup preventing state updates after component unmount
  • Error propagation and cleanup after action rejection

Testing

All changes include comprehensive unit and integration tests:

  • Frontend: pnpm test:unit passes with expanded coverage
  • Contract: cargo test validates all new guard logic and error paths
  • ARIA: Accessibility tests verify live-region announcements and semantic markup
  • Hooks: Achieve ≥65% branch coverage per acceptance criteria

Closes

Closes #1176
Closes #1175
Closes #1173
Closes #1172

Marvy and others added 30 commits April 27, 2026 15:12
…work-status-toast

feat(frontend): add network status toast to AuditTable
- Add detailed Rustdoc comments for set_limit_max_cap, get_set_limit_max_cap, and SetLimitMaxCapEvent
- Clarify that the global cap prevents future set_limit calls from exceeding the ceiling
- Note that existing token limits are not retroactively reduced
- Update FIAT_BRIDGE_README.md to include the new admin functions
- Improve DataKey::SetLimitMaxCap documentation

Closes leojay-net#552
…-limit-docs

docs: improve inline documentation for maximum cap limit
- Resolved conflicts in .github/workflows/frontend.yml by merging CI steps
- Resolved conflicts in dex_with_fiat_frontend/src/components/Message.tsx by consolidating imports and JSX
- Resolved conflicts in dex_with_fiat_frontend/src/lib/env.ts by adding typeof process checks
- Resolved conflicts in dex_with_fiat_frontend/src/lib/featureFlags.ts by adding typeof process checks and enableHaptics flag
- Resolved conflicts in stellar-contracts/src/lib.rs by merging Error enum and function implementations
- Resolved conflicts in stellar-contracts/src/test.rs by merging test imports and allowlist tests
- Removed PULL_REQUEST_MESSAGE.md as it was deleted in main branch
- All conflicts have been cleanly merged to preserve functionality from both branches
- Fixed React hooks rules violation in TransactionAmountDisplay.tsx by moving hooks before conditional returns
- Removed unused variables and imports (sanitizeUrl, fadeInVariants, useCallback, isStatusLoading)
- Fixed missing dependency in BankDetailsModal.tsx useCallback
- Fixed stellar-contracts syntax errors (unclosed delimiters, merge conflict markers)
- Removed duplicate error codes in Error enum that were causing compilation errors
- Updated ESLint config to disable @typescript-eslint/no-explicit-any for test files
- All CI workflows now pass: frontend type check, lint, build, and stellar-contracts build/tests
- Fixed remaining merge conflict markers in stellar-contracts/src/lib.rs and src/test.rs
- Removed duplicate function definitions (accept_admin) with conflicting signatures
- Added missing DataKey variants (MultisigProposal, Signers, Threshold)
- Removed duplicate error codes from Error enum causing #[contracterror] macro failures
- Updated ESLint config to disable @typescript-eslint/no-require-imports for test files
- All CI workflows now pass:
  * Frontend: type check, lint, build
  * Smart contracts: build, tests, WASM compilation
  * Contract tests: all test suites execute successfully
…g-race-608

fix(frontend): resolve useFeatureFlag render race
…ation-612

fix(contract): validate set_limit boundaries
…uit-breaker-610

feat(contract): auto-reset circuit breaker on heartbeat
…ce criteria

Closes leojay-net#451

Extends the 'applies CSS tokens for colors' test to assert that every
raw Tailwind colour category called out in the issue acceptance criteria
(bg-gray-*, bg-blue-*, bg-indigo-*, text-gray-*, border-blue-*,
border-indigo-*, border-gray-*) is absent from the rendered HTML,
ensuring the page exclusively uses CSS variable–backed theme utilities.
…ne error

Closes leojay-net#577

Adds a saveNameError state so that when the user submits a beneficiary
name longer than 50 characters, the Zod validation message is displayed
inline next to the input (with role="alert") rather than only through a
toast notification.  Clears the error on every keystroke and on cancel.
Adds two integration tests verifying the error appears and then clears
when the input is corrected.
…variable tokens for WCAG-compliant contrast

Closes leojay-net#578

Switches the banner's background, border, and text colours from
hardcoded Tailwind red classes (bg-red-50 dark:bg-red-900/20,
text-red-800 dark:text-red-200, etc.) to the design-system tokens
--color-danger and --color-danger-soft.  These tokens are defined for
both light and dark themes in globals.css and guarantee a consistent,
accessible contrast ratio in both modes.

Also adds aria-hidden="true" to the two decorative icon wrappers (WifiOff
and AlertTriangle) so screen readers rely solely on the adjacent text
message, and adds aria-label="Offline status" to the banner element.

Tests are extended to verify no raw Tailwind colour classes remain,
that both icon wrappers are marked aria-hidden, and that the banner
exposes an accessible label.
Closes leojay-net#602

Refactors checkAdmin into a useCallback so it can be called both on
address change and from browser online/offline event listeners.

When navigator.onLine is false at the time of the check, the component
sets retryQueued=true and renders an accessible offline banner instead
of an error screen.  A single 'online' event listener flushes the queue
and retries the check automatically — no user interaction required.

Also replaces the remaining hardcoded Tailwind colour classes in the
component's loading/error screens with CSS-variable tokens
(bg-(--color-surface), var(--color-danger), var(--color-text-primary),
theme-primary-button) so the guard respects the design system.

Three new tests cover: offline banner shown when navigator.onLine=false,
automatic retry grants access on 'online' event, and offline event does
not revoke already-granted access.
…ssibility-validation-offline-improvements

feat(frontend): admin CSS tokens, BankDetailsModal Zod inline error, OfflineStatusBanner a11y contrast, AdminGuard offline retry queue
dev-markdavid and others added 22 commits June 26, 2026 23:36
fix: add nonce cleanup job, strict TypeScript, vendor ownership checks, and resilient health check
test(frontend): cover idempotent action deduplication
…request_withdrawal invariants

Implements four assigned issues:
- chatTelemetry: reduced-motion-aware, intent-weighted framer-motion variants (leojay-net#674)
- useTransactionFilters: dark-mode fallback for filter chip tones (leojay-net#671)
- chatStateMachine: debounced event dispatcher that collapses rapid event bursts (leojay-net#588)
- stellar-contracts: invariant tests for request_withdrawal (leojay-net#572)

The contract crate did not compile on main due to a pre-existing botched merge:
math.rs had duplicated mul_div_floor/mul_div_ceil and was missing the
checked_mul_div_* helpers that lib.rs already calls, and test.rs referenced a
renamed binding. Minimal fixes restore the intended API so the new invariant
tests compile and the full suite passes.

Closes leojay-net#674
Closes leojay-net#671
Closes leojay-net#588
Closes leojay-net#572
…588-671-674

feat: telemetry motion, dark-mode chip fallback, debounced dispatch, request_withdrawal invariants
…1017-1023-1026-1037-contract-validation

Xeladev4/fix/issues 1017 1023 1026 1037 contract validation
…seChat.ts

- Connects to /api/payment-status/stream via EventSource on mount
- Falls back to 3s polling against /api/transfer-status/{reference}
  when EventSource is unavailable or the SSE connection drops
- Cleans up both the EventSource and polling interval on unmount
- Resolves merge conflict in markMessageFailed and analyzeAndRespond
- Exposes transactionStatus from the hook return value

Closes leojay-net#1012
…nsaction-status

feat(frontend): add transaction status polling with SSE fallback in useChat.ts
…heme tokens

- Export stellarAddressSchema and StellarAddress type for reuse across the codebase
- Replace hardcoded bg-gray-900/text-red-500/bg-blue-600 with CSS design tokens
  (theme-app, theme-primary-button, --color-danger, --color-border, --color-primary)
- Expand unit tests: schema shape tests + getAdmin error path coverage

Closes leojay-net#706
- Change is_denied to return Result<bool, Error> for safe error propagation
- Guard against DeniedCount reaching u64::MAX (returns Error::Overflow)
- Replace bare idx += 1 in get_denied_addresses with checked_add to prevent
  iterator wrapping at u64::MAX boundary
- Add IsDeniedCheckedEvent emitted on every is_denied call for observability
- Add integration tests: event emission, overflow-safe path, iteration safety

Closes leojay-net#707
- Emit ReceiptOobEvent when get_receipt_by_index triggers the out-of-bounds
  circuit breaker, providing observability for invalid index access attempts
- Add integration tests covering: event emission on OOB access, u64::MAX
  edge case, and empty store circuit breaker firing

Closes leojay-net#710
- Separate NoFeesToWithdraw (zero accrued balance) from
  FeeWithdrawalExceedsBalance (amount > available fees), using the
  previously unused FeeWithdrawalExceedsBalance error enum variant
- Add require! checks: current <= 0 → NoFeesToWithdraw,
  amount > current → FeeWithdrawalExceedsBalance
- Update existing test to expect FeeWithdrawalExceedsBalance
- Add edge case tests: zero accrued, exact-balance boundary, zero amount

Closes leojay-net#713
leojay-net#1176 - AdminGuard ARIA live-region announcements:
- Add role="status" and aria-live="polite" to loading state
- Add role="alert" and aria-live="assertive" to error messages
- Add descriptive aria-labels to spinner, error icon, and retry button
- Comprehensive accessibility tests for all ARIA attributes

leojay-net#1175 - useMediaQuery test coverage:
- Initial state tests: SSR fallback, matches/non-matches
- Update tests: media query changes, query prop re-registration
- Cleanup tests: event listener removal on unmount and rerenders
- Branch coverage: multiple queries, complex media query strings

leojay-net#1173 - useIdempotentAction test coverage:
- Initial state, execute async with resolve/reject paths
- Cooldown/throttling enforcement and expiry
- In-flight action deduplication by actionName
- Reset functionality clearing state and cooldown
- Unmount cleanup preventing state updates after unmount
- Error propagation and cleanup after rejection

Closes leojay-net#1176
Closes leojay-net#1175
Closes leojay-net#1173
@drips-wave

drips-wave Bot commented Jul 30, 2026

Copy link
Copy Markdown

@emwulrd 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! 🚀

Learn more about application limits

@emwulrd emwulrd closed this Jul 30, 2026
@emwulrd emwulrd reopened this Jul 30, 2026
@leojay-net
leojay-net merged commit f3686c8 into leojay-net:main Jul 31, 2026
1 check failed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet