Demo · every value on this page is invented

← back to the write-upmalay.adalja

QA automation platform · walkthrough

The Aegis-QA portal

Run orchestration across UI, API, flow and security layers. Session recording that compiles to Gherkin and Playwright. Self-healing locators that wait for a human. Automatic failure triage, database reconciliation, coverage, and a knowledge graph of the application.

The real one drives live payment systems, so every screen in it carries merchant names, transaction ids and keys. None of that can be published, blurred or otherwise. This is the same interface rebuilt with invented data: same layout, same states, same language, and not one number that means anything.

aegis

ACME Store · staging

malay

Overview

Runs this week
38
Pass rate
96.4%
Locators healed
11
Awaiting approval
3

Pass rate · last 7 days

M
T
W
T
F
S
S

Waiting for approval

  • payout.idempotency_key

    locator moved into a dialog

  • checkout.saved_card

    label renamed in build 218

  • swap.rate_drift

    tolerance widened by 0.2%

nothing applies itself

Runs

RunModeSuiteResultTook
#1482suiteCheckout · regression42/45 failed6m 12s
#1481flowPayout lifecycle18/18 passed4m 02s
#1480fullPre-release · all layers211/214 failed37m 55s
#1479singlerefund.partial_amount1/1 passed2.8s
#1478allNightly486/486 passed1h 12m

Recorder

A working demonstration, running in your browser. It talks to nothing: the run is on a timer, the failure is scripted, and every value is invented. The real tool drives live payment systems, and no capture of that belongs on a public page.

Run a suite

aegis · demo
mode

5 passed · 1 failed · mode suite

  • checkout.guest_card4.1s
  • checkout.saved_card2.2s
  • refund.partial_amount2.8s
  • payout.idempotency_key9.4s
  • ledger.reconcile_on_read1.2s
  • webhook.replay_is_ignored0.9s

Record a test

aegis · demo

4 of 4 captured

What the recorder saw

  • click · button "Add to basket"
  • fill · field "Email" · acme@example.test
  • click · button "Pay now"
  • expect · text "Order ord_4821 confirmed"

What it compiled to

page.get_by_role("button", name="Add to basket").click()
page.get_by_label("Email").fill(email)
page.get_by_role("button", name="Pay now").click()
expect(page.get_by_text(f"Order {order_id} confirmed")).to_be_visible()

Triage a failure

aegis · demo

✗ payout.idempotency_key

stops here until a human approves

  1. ClassifiedLocator no longer matches. This is not a product defect.
  2. DiagnosedThe Continue button moved inside a dialog in build 218.
  3. Fix proposedget_by_role("button", name="Continue") scoped to the dialog.
  4. Sandbox verifiedRuns green in isolation. That is not proof the bug is gone.
  5. Waiting for a humanNothing is applied until someone approves it.

Test cases

TC-2041 · Automated · covered by checkout.guest_card

Guest checkout with a card

Feature: Guest checkout

  Scenario: A guest pays with a card
    Given a basket holding one item
    When the guest submits a valid card
    Then the order is confirmed exactly once
    And the ledger records a single capture
def test_guest_card(page, order_id):
    page.get_by_role("button", name="Add to basket").click()
    page.get_by_label("Email").fill("acme@example.test")
    page.get_by_role("button", name="Pay now").click()
    expect(page.get_by_text(f"Order {order_id} confirmed")).to_be_visible()
    assert db.captures_for(order_id) == 1
  1. Basket
  2. Checkout
  3. Authorise
  4. Capture
  5. Ledger write
  6. Receipt
POST /checkout/session20184ms
api-gateway18%
payments-svc64%
ledger-svc12%
chain-watcher6%

pulled from the dashboard for this request

TC-2043 · Automated · covered by payout.idempotency_key

Payout retries reuse no key

Feature: Payout idempotency

  Scenario: A retried payout is not paid twice
    Given a payout that timed out once
    When the client retries it
    Then the retry carries a fresh idempotency key
    And exactly one payout exists on the ledger
def test_payout_idempotency(api, payout_id):
    api.payout(payout_id, key=new_key())
    retry = api.payout(payout_id, key=new_key())
    assert retry.status == 409
    assert db.payouts_for(payout_id) == 1
  1. Requested
  2. Address verified
  3. Approved
  4. Broadcast
  5. Confirmed
  6. Reconciled
POST /payouts5009.4s
api-gateway18%
payments-svc64%
ledger-svc12%
chain-watcher6%

pulled from the dashboard for this request

TC-2045 · Manual · covered by not automated

Expired invoice reissues

Feature: Invoice expiry

  Scenario: An invoice that expires mid-checkout
    Given an invoice past its expiry
    When the payer returns to the page
    Then a fresh invoice is issued
    And the old one can never be paid
# Still a manual case. The Gherkin exists; the spec does not yet.
  1. Invoice issued
  2. Expired
  3. Payer returns
  4. Reissued
GET /invoice/ord_482141031ms
api-gateway18%
payments-svc64%
ledger-svc12%
chain-watcher6%

pulled from the dashboard for this request

Coverage

UIAPIDBPERFSEC
Merchant checkout
Merchant checkout UI covered
Merchant checkout API covered
Merchant checkout DB covered
Merchant checkout PERF covered
Merchant checkout SEC not claimed
Payment links
Payment links UI covered
Payment links API covered
Payment links DB covered
Payment links PERF not claimed
Payment links SEC not claimed
Refunds
Refunds UI covered
Refunds API covered
Refunds DB covered
Refunds PERF not claimed
Refunds SEC not claimed
Instant payout
Instant payout UI covered
Instant payout API covered
Instant payout DB covered
Instant payout PERF covered
Instant payout SEC covered
Swap
Swap UI covered
Swap API covered
Swap DB covered
Swap PERF not claimed
Swap SEC not claimed
Withdrawals
Withdrawals UI not claimed
Withdrawals API covered
Withdrawals DB not claimed
Withdrawals PERF covered
Withdrawals SEC not claimed

Blank means not claimed

Knowledge

What this change touches

checkout/PaymentButton.tsx

  • 4 tests cover this
  • 2 flows pass through it
  • 1 surface has no DB assertion

Known failures

  • Dialog moved the Continue button

    seen 4× · fixed 4×

  • Dynamic id in the payout table

    seen 7× · fixed 7×

  • Rate drifts on the fallback path

    seen 2× · open

only verified fixes are kept

Built from HTML rather than screenshots, so it reflows on a phone, stays sharp on any display and costs nothing to load. Nothing here connects to anything.