QA report: external/trustgated.xyz at hosted
Token Shield analysis fails to return risk metrics due to an unresolved payment quote prompt, alongside missing client-side validation across several forms.
Testing covered 12 deep-feature scenarios across the Oracle Wallet Query, Token Shield analysis, Dashboard deposit and withdrawal flows, agent allowance settings, trust gating checks, and nanopayment simulation. Nine scenarios passed, two failed due to functional defects, and one scenario was blocked because an origin mismatch between domains prevented navigation to the gating interface.
The most severe breakdown occurs in Token Shield, where attempting to audit preset tokens halts in a payment quote request state instead of rendering risk metrics. In addition, client-side validation gaps allow malformed or incomplete data to be submitted: the Set Agent Allowance form permits invalid address strings without validation, and gating forms without selected rules submit directly to the server and trigger 400 Bad Request responses.
These issues prevent users from evaluating preset tokens and expose backend services to invalid inputs that should be handled gracefully at the interface level.
Run summary
| Metric | Count |
|---|
| Scenarios executed | 12 |
| Passed | 9 |
| Failed | 2 |
| Blocked | 1 |
| Findings raised | 2 |
| Issues after the audit | 3 |
| Withdrawn by the audit | 0 |
| Critical / high / medium / low | 0 / 1 / 1 / 1 |
Target: https://trustgated.xyz · Testing level: deep_feature · Stack: unknown
Issues
High severity
F1 · Token Shield requires 0.001 USDC payment quote and does not return risk metrics for preset tokens
Severity: high · Type: functional · Verdict: confirmed · Scenario: S4
Navigated to /token-shield?address=0x3600000000000000000000000000000000000000 and clicked the 'Check Token (0.001 USDC)' button. The button changed to a disabled state reading 'Requesting payment quote...' and no analysis results were displayed, confirming the reported behavior. The page reported 5 console errors during the scenario.
Expected: The token risk score, deployer credibility, and behavioral flags should be rendered on the page for preset tokens.
Actual: The button transitions to 'Requesting payment quote...' and halts waiting for payment flow without displaying the token analysis results.
Steps to reproduce:
- Navigate to /token-shield with preset token address (e.g. /token-shield?address=0x3600000000000000000000000000000000000000).
- Click the 'Check Token (0.001 USDC)' button.
Evidence: screenshots/S4-5.png, screenshots/S4-11.png
Medium severity
F2 · Set Agent Allowance form lacks client-side validation for malformed agent addresses
Severity: medium · Type: functional · Verdict: confirmed · Scenario: S8
The observations clearly establish that the Set Allowance button remains enabled and fails to trigger any client-side format validation when a malformed address string is entered. The page reported 2 console errors during the scenario.
Expected: The form should validate that the Agent Address is a valid Ethereum/Arc address (0x prefixed 40-character hex string), disable the submit button or display an inline validation error, and prevent submission.
Actual: The Set Allowance button is enabled with malformed address input, and no validation error or address format check is displayed to prevent submission.
Steps to reproduce:
- Navigate to /dashboard
- Under 'Set Agent Allowance', enter an invalid address string (e.g., 'not-an-address' or '0x1234') into the 'Agent Address' field
- Enter a valid numeric allowance (e.g., '10') into the 'Allowance (USDC)' field
- Click the 'Set Allowance' button
Evidence: screenshots/S8-4.png, screenshots/S8-9.png, screenshots/S8-11.png
Low severity
F3 · Form submitted without rule selection results in 400 Bad Request
Severity: low · Type: functional · Verdict: promoted · Scenario: S11
Surfaced by the audit of S11, which the Tester passed, and reproduced live: When clicking 'Run gating check + issue attestation' without a ladder selected on /gating, the button changes to a disabled 'Working…' state, indicating a network request is being sent. The request then fails and an error message regarding missing ladder bands is displayed, confirming that client-side validation is missing and the invalid request is indeed submitted to the backend. The page reported 3 console errors during the scenario.
Expected: The application should perform client-side validation to ensure a rule is selected and prevent network submission if missing.
Actual: The client attempts to submit the invalid request to the backend, resulting in a 400 Bad Request error.
Steps to reproduce:
- Navigate to /gating.
- Enter a valid wallet address.
- Leave the ladder rule buttons unselected.
- Click 'Run gating check + issue attestation'.
Evidence: screenshots/critic-M2-1.png
Scenario results
| Scenario | Priority | Result | Issues |
|---|
| S1 Verify navigation fails gracefully for broken dropdown links | high | pass | none |
| S2 Validate empty address on Oracle Wallet Query | high | pass | none |
| S3 Attempt Oracle Query with valid address expecting chain mismatch | high | pass | none |
| S4 Audit a preset token via Token Shield | high | fail | F1 |
| S5 Validate invalid contract address on Token Shield | high | pass | none |
| S6 Validate empty amount on Dashboard Deposit | medium | pass | none |
| S7 Attempt Dashboard Deposit expecting chain mismatch | medium | pass | none |
| S8 Validate invalid Agent Address on Set Allowance | medium | fail | F2 |
| S9 Validate empty amount on Dashboard Withdraw | medium | pass | none |
| S10 Run Trust Gating check and issue attestation | medium | blocked (Cannot navigate to /gating due to origin mismatch configuration between base target and browser session (https://trustgated.xyz vs https://www.trustgated.xyz) and absence of a /gating link in UI.) | none |
| S11 Validate missing rule selection on Gating check | medium | pass | F3 |
| S12 Control autonomous nanopayment simulation | low | pass | none |
The audit
The Critic reviewed 2 findings and re-verified 3 of them live in the browser, replaying the reported steps on a fresh page.
- A persistent CORS error attempting to reach eth.merkle.io appears across all scenarios, indicating a systemic configuration issue that the tester completely ignored.
- Scenario S10 was blocked due to an origin mismatch between the test harness and the browser session (trustgated.xyz vs www.trustgated.xyz), suggesting a flaw in the test environment setup.
- A possible defect in S1 ("Global CORS error blocks fetch requests to eth.merkle.io") was not promoted: the live replay came back inconclusive.
What to fix first
- F1: Restore the Token Shield audit flow to ensure preset tokens return risk metrics without stalling on payment quotes.
- F2: Add client-side address validation to the Set Agent Allowance form to prevent submission of malformed inputs.
- F3: Require rule selection before allowing gating check submissions to prevent 400 Bad Request errors.
Coverage and caveats
In scope: Oracle query form validation and failure handling; Token Shield analysis execution and validation; Dashboard fund management and allowance workflows; Gating rule evaluation and attestation generation; Link integrity across primary navigation.
Not covered: Discovery page ordering features; Staking intelligence and leaderboards; Protocol Guard interface; External links to Explorer, Docs, Sui site, X, Discord, and Swaparc.
- The wallet auto-connects to Arc testnet (5042002) as defined in the intake.
- Onchain transactions (Oracle query, Dashboard deposits/allowances) will fail due to the known chain ID mismatch between the testnet wallet and the mainnet target, and this failure is the expected observable state.
- Simulation behavior on the Demo page does not require a wallet transaction.
- S10 could not be executed: Cannot navigate to /gating due to origin mismatch configuration between base target and browser session (https://trustgated.xyz vs https://www.trustgated.xyz) and absence of a /gating link in UI..
By the numbers
| Metric | Value |
|---|
| Scenarios | 9 passed, 2 failed, 1 blocked of 12 (43 planned steps) |
| Browser actions | 251 (53 clicks, 27 inputs, 41 navigations, 130 snapshots) |
| Screenshots | 36 (4 explore, 30 scenario, 2 critic), 29 captioned |
| Coverage | 11 pages, 6 forms, 5 flows, 7 console errors |
| Audit | 2 findings, 3 re-verified live, 2 confirmed, 1 promoted, 0 withdrawn |
| Model calls | 233 |
| Tokens | 1,822,193 input, 12,124 output, 23,335 thinking |
| Time | 14 min |
| Wallet | 0 transactions, 0 signatures, 2 refusals on chain 5042002 |
| Stage | Calls | Input | Output | Thinking | Seconds |
|---|
| explore | 40 | 370,959 | 3,134 | 3,347 | 158 |
| plan | 1 | 4,992 | 2,039 | 3,808 | 45 |
| test | 169 | 1,308,940 | 5,238 | 8,784 | 512 |
| critique | 22 | 135,552 | 1,404 | 6,891 | 121 |
| report | 1 | 1,750 | 309 | 505 | 7 |