QA report: external/www.arcfx.app at hosted
Missing required field validation allows empty invoice records to be saved and tracked.
Testing covered 12 deep-feature scenarios evaluating end-to-end invoice creation, wallet tracking lifecycles, EVM address validation, input boundary checks, PDF exports, and script sanitization.
One high-severity issue was confirmed (F3), where submitting an invoice with empty required fields succeeds and tracks a blank invoice without validation warnings. Two other findings concerning wallet address mismatch enforcement were withdrawn during audit as intended security constraints.
While address format verification, numerical limits, duplicate submission guards, and XSS sanitization passed, testing for whitespace-only input rejection was blocked before completion due to scenario budget constraints.
Run summary
| Metric | Count |
|---|
| Scenarios executed | 12 |
| Passed | 8 |
| Failed | 3 |
| Blocked | 1 |
| Findings raised | 3 |
| Issues after the audit | 1 |
| Withdrawn by the audit | 2 |
| Critical / high / medium / low | 0 / 1 / 0 / 0 |
Target: https://www.arcfx.app/app · Testing level: deep_feature · Stack: unknown
Issues
High severity
F3 · Missing validation allows saving empty invoice records
Severity: high · Type: functional · Verdict: confirmed · Scenario: S4
The observations confirm the user can submit a completely empty invoice and the application incorrectly treats it as saved and displays it in the tracked list. The live replay was inconclusive: The replay ran out of tool calls before it reached the reported state. The page reported 1 console error during the scenario.
Expected: The form prevents submission and displays validation error messages on required fields such as business name, client name, and line items.
Actual: The form submits and saves successfully with '✓ Saved', tracking the empty invoice without any validation warnings.
Steps to reproduce:
- Navigate to https://www.arcfx.app/invoice
- Leave 'Your name / company', 'Client name / company', line item description, and unit price empty
- Set invoice number to an unused number (e.g. INV-99999)
- Click 'Save & track this invoice'
Evidence: screenshots/S4-2.png, screenshots/S4-10.png, screenshots/S4-12.png
Withdrawn findings
The Critic re-examined these claims and found the evidence did not support them. They are kept here rather than deleted.
- Invoice cannot be saved and tracked when receiving address differs from connected wallet (S1, medium): The application explicitly validates wallet ownership and provides a clear error message; this is a deliberate security constraint, not a functional defect.
- Saving and tracking an invoice is rejected when the receiving wallet address differs from the connected wallet (S2, medium): Like F1, this finding complains about a deliberate authorization check that prevents tracking invoices for unconnected wallets.
Scenario results
| Scenario | Priority | Result | Issues |
|---|
| S1 End-to-End Invoice Creation | high | fail | none |
| S2 Tracked Invoice Record Lifecycle | high | fail | none |
| S3 Persistence of Invoice Data | high | pass | none |
| S4 Validation of empty required fields | high | fail | F3 |
| S5 Validation of EVM address format | high | pass | none |
| S6 Validation of negative unit price | medium | pass | none |
| S7 Duplicate form submission prevention | medium | pass | none |
| S8 PDF Export Functionality | medium | pass | none |
| S9 Whitespace-only input rejection | medium | blocked (Scenario budget was reached before the save action could be triggered and evaluated.) | none |
| S10 Boundary Value - Overly long description | medium | pass | none |
| S11 Cross-site Scripting input sanitization | low | pass | none |
| S12 Validation of zero Quantity field | low | pass | none |
The audit
The Critic reviewed 3 findings and re-verified 2 of them live in the browser, replaying the reported steps on a fresh page.
- Findings F1 and F2 mistakenly penalize the application for enforcing a deliberate wallet-ownership security constraint.
- The Content Security Policy errors regarding api.circle.com were overlooked in both scenarios S9 and S11.
- A possible defect in S11 ("Strict Content Security Policy blocks Circle API integration") was not promoted: the live replay came back inconclusive.
What to fix first
- F3: Implement client- and server-side validation on required fields to prevent saving and tracking empty invoice forms.
Coverage and caveats
In scope: Invoice creation form validation and submission; Invoice record lifecycle and listing on /invoices; Local storage persistence of tracked invoices; Boundary value and invalid input handling on invoice fields; PDF export functionality for invoices.
Not covered: Payment link generation (/pay): out of scope for the Invoices deep feature.; Multisend and Agent payments: out of scope for Invoices deep feature.; Trade, History, and Analytics pages: completely distinct features from invoice management.; Contacts management: separate modal logic not directly part of the invoice creation deep dive..
- A successful invoice creation either shows an observable success message or automatically redirects the user to the /invoices list.
- The PDF export function is exposed as a clickable element either immediately after saving an invoice or within the /invoices list.
- The test environment does not aggressively clear browser local storage between standard page navigations, allowing persistence checks.
- S9 could not be executed: Scenario budget was reached before the save action could be triggered and evaluated..
By the numbers
| Metric | Value |
|---|
| Scenarios | 8 passed, 3 failed, 1 blocked of 12 (82 planned steps) |
| Screenshots | 34 (8 explore, 25 scenario, 1 critic), 25 captioned |
| Coverage | 10 pages, 4 forms, 4 flows, 4 console errors |
| Audit | 3 findings, 2 re-verified live, 1 confirmed, 0 promoted, 2 withdrawn |
| Model calls | 243 |
| Tokens | 1,451,319 input, 14,366 output, 22,374 thinking |
| Time | 12 min |
| Wallet | 0 transactions, 25 signatures, 0 refusals on chain 5042002 |
| Stage | Calls | Input | Output | Thinking | Seconds |
|---|
| explore | 41 | 260,265 | 3,628 | 885 | 110 |
| plan | 1 | 4,611 | 2,951 | 7,074 | 73 |
| test | 183 | 1,099,457 | 6,832 | 10,141 | 437 |
| critique | 17 | 85,332 | 755 | 3,491 | 83 |
| report | 1 | 1,654 | 200 | 783 | 10 |