ARCHON / FICTIONAL BUSINESS DATA

User acceptance testbook

React UI, real Python HTTP API and durable sessions. Controlled-live sessions use actual Bedrock, Strands and explicitly approved restricted SES; retained simulation uses a scripted model and simulated mail. Check the workspace mode. Human signoff is independent of automation.

All full human signoffs: NOT_RUN. The owner's prior mailbox confirmation does not complete this testbook. Automation outcomes are not human acceptance.

Machine-readable testbook

Current AWS release acceptance compares the recorded frontend/backend pair with the serving versions. Dated results below remain historical.

AR-UAT-43 · Six optional stops and keyboard recovery

  1. Open a loaded workspace and choose Take a tour.
  2. Read Dashboard, Records, Incoming, Workspace, Guided check and History using Next and Previous.
  3. Close with Escape; reopen and Finish tour.

Expected: step headings receive focus; explanations never navigate. Closing restores focus to Take a tour. Reopening starts at step one; reload does not start a tour automatically.

AR-UAT-44 · Preserve input, case context and books

  1. Type an unsaved fictional email in Records, then open, step through and close the guide without opening another page.
  2. Finish that input before explicitly following Open [page] links.
  3. Inspect History and reload.

Expected: explanations preserve visible unsaved text and the route. Optional page links use existing case context; leaving a page can discard unsaved input, as warned. No seed, model, consent, incoming activation or send request is made by touring. Retained books and activity stay unchanged.

AR-UAT-45 · Pending and stale-state boundaries

In an isolated test, inspect the tour while the app reports a queued, running or unknown provider job, then an offline stale workspace. Optional guide links must be absent; explanations and Close remain available. CI supplies these states without new paid calls. This is not a global lock on every navigation control.

Automation: frontend/tests/product-tour.test.tsx, frontend/tests/app.test.tsx and frontend/e2e/business-portfolio.spec.ts. Retain business-product-tour.png from desktop, mobile Chromium and 375px WebKit. Exact-source CI and matching release acceptance are required separately. Human ten-second comprehension and signoff: NOT_RUN.

Business portfolio · source candidate

frontend/e2e/business-portfolio.spec.ts: separate zero-provider-call real-HTTP cases on desktop Chromium, mobile Chromium and 375px WebKit. Existing 45-call actual-provider suite unchanged. All builds, unit coverage and browser execution in CI only.

Exact-source CI pending; human signoff NOT_RUN. No deployment or independent bank-verification claim.

AR-UAT-40 · Preserve books; zero AI or send on load

  1. Open five-source joinery demo and retain its session
  2. Choose Load business portfolio
  3. Inspect 240-record and six-type disclosure
  4. Reload new books
  5. Return to previous workspace

Expected: Exactly business-v1. Old five-source books and revision unchanged. Loading makes one sessions POST, no intake/reason/approval or provider job. Graph, draft and outbound receipts stay empty. Wrong seed versions preserve browser access.

Automation: business portfolio preserves previous books with zero AI or send requests and six paged views; frontend/tests/api.test.ts; frontend/tests/demo-setup.test.tsx. Human signoff: NOT_RUN.

AR-UAT-41 · Six views, pagination and source drilldowns

  1. Open all six document views
  2. Check counts 80 sales invoices, 50 purchase invoices, 20 sales credits, 10 purchase credits, 50 client receipts, 30 supplier payments
  3. Use Next page and reload
  4. Search a reference and set inclusive dates
  5. Open retained source and linked invoice

Expected: At most 25 rows per view. URL filters persist; changing filters resets pagination. Late source links open their containing page. Five existing aliases remain. Supplier payment links inspect evidence, never execute payments. No page-level horizontal overflow at 375px.

Automation: frontend/e2e/business-portfolio.spec.ts; frontend/tests/business-records.test.tsx. Human signoff: NOT_RUN.

AR-UAT-42 · Credits, cash and quarter widgets

  1. Compare net sales and purchases with separate credits
  2. Inspect July, August and partial September cash
  3. Follow cash, aging, top-party and document-mix links
  4. Inspect credited invoice in Workspace and draft evidence

Expected: Only posted typed financial dates through 2026-09-09 contribute. Receipt/Payment documents are recorded cash; credits appear separately and server outstanding is not reduced twice. Native origin is a fictional typed fixture, not an AI-ingested email. Missing values stay Unknown. No forecast or complete net-profit claim; payroll is absent from this seed.

Automation: business credits retain source origin and invoice links while filters and cash drilldowns survive reload; frontend/tests/portfolio.test.ts; frontend/tests/business-records.test.tsx. Human signoff: NOT_RUN.

AR-UAT-37–39 · Truthful modes and automatic intake

Human signoff: NOT_RUN. Source tests and actual AWS verification are separate evidence levels. Incoming uses the existing controlled provider budget; never put genuine customer data or real credentials into screenshots.

  1. Compare Dashboard, Records, draft evidence and History in a live workspace and a retained simulation. Fictional data must not be described as a simulated provider in live mode.
  2. Open Incoming and explicitly authorize metered intake of fictional documents. Enable the intake-only key. Configure your external HTTP sender with its Bearer key in secret settings; this action does not connect Gmail, Outlook or a bank.
  3. POST one fictional invoice with a unique event_id and body. Observe the saved job, then inspect posted or refused evidence in Records. No draft or email may be created automatically.
  4. Retry the exact event after a lost response: same job, no repeated model processing. Changed content under the same event_id must be refused409. A busy workspace returns409; the external sender retains and retries its unsent event.
  5. Revoke the key and confirm a new event is refused401. An already accepted job may finish. The intake key must not authorize workspace reads or an email approval.

Automation: runtime-copy.test.tsx, incoming.test.tsx and test_incoming_api.py; incoming.spec.ts runs only with explicit CI provider doubles. This is not proof that an owner's real mailbox automation is configured. Full UAT remains NOT_RUN.

AR-UAT-35–36 · Populated demo and safe workspace switching

Human signoff: NOT_RUN. These checks supplement the historical simulation cases below. The application's workspace status determines whether later agent actions use real providers; loading demo data itself never calls AI or sends email.

  1. Open Explore populated demo, then Load demo workspace. Expect two customer invoices, two payments and one supplier invoice with retained fictional source emails.
  2. Inspect Dashboard and Records: clients owe 1,260.00 EUR; the supplier is owed 124.00 EUR. These are ledger-derived balances, not model-generated metrics. No graph, draft or email receipt has been created by loading.
  3. Reload: the same demo and balances remain. Use Return to previous workspace: prior books and receipts remain unchanged.
  4. Resume an older synthetic session while real providers are available. A visible warning offers a separate current-provider demo; old simulated receipts never become real sends.
  5. Run the agent only when ready. Any real email still requires review of its exact recipient, body and explicit consent.

Automation: populated demo survives reload and preserves the previous workspace without sending; provider journeys exercise the same seed/recovery boundary before their separately approved provider actions.

AR-UAT-29–31 · Introduction to recorded outcome

Source candidate, not yet deployment evidence. Open the root before any session API access. Try the example: inspect and submit an invoice, record its partial payment, prepare and review the exact draft, explicitly approve a simulated send, then inspect the retained result. Return through the introduction and reload: the same session and one receipt remain. The debt must remain 1,260.00 EUR after approval.

Additional cases: a forwarded duplicate holds collection without additional credit; offline recovery retains edited source text and requires explicit refresh; expired access must not appear as empty books or reset silently. Supported formats and simulated authority remain visible.

Automation: product-journey.spec.ts on desktop Chromium, mobile Chromium and 375px WebKit, against real HTTP; the AWS workflow uses the same cases with exact release-pair preflight and postflight. Existing dashboard tests explicitly use their dashboard route and keep their assertions. Frozen AR2, AR3 and X1 evidence is unchanged. Human ten-second comprehension and UAT: NOT_RUN.

UX-AR-10S · Alex's collections decision desk

Source candidate: requires its own exact-SHA GitHub Actions run. Existing cases and historical results below remain unchanged. Four added cases run in both existing desktop and mobile projects over the real HTTP API using isolated synthetic sessions. Publication and live acceptance belong to the coordinator.

  1. AR-UAT-25: use Tab, Enter and Space from cold start through invoice, old draft, new payment, reload, fresh review and one explicitly simulated approval. Expect 1,860.00 less 600.00 equals 1,260.00 EUR; approval never changes debt.
  2. AR-UAT-26: returning held evidence and offline recovery. Show posted or last-known balance; explicitly refresh after reconnecting. No automatic approval replay.
  3. AR-UAT-27: post a full-payment remittance after drafting. Reload: zero outstanding, no chase, old draft unusable, no receipt created.
  4. AR-UAT-28: unavailable session shows no invented zero balance. Creating empty books explicitly replaces browser access without claiming deletion.

Automation: frontend/e2e/decision-desk.spec.ts and frontend/tests/decision-desk.test.tsx, alongside every existing regression. Exact-run artifacts retain source/runtime attachments, JUnit, screenshots and journeys. No local tests or production execution.

C3 · independent ten-second comprehension

NOT_RUN. Show an unfamiliar independent participant the exact cold build for ten seconds without coaching, hide it, then record their own words: who uses it, which problem it solves, the expected result and the first action. Record independence, SHA, viewport, date, exact answers and misunderstandings in C3. Payment-change and authorization tasks are observed separately. Playwright is not human comprehension evidence.

Reconciliation desk · source candidate

Dated source checkpoint: 2026-09-10 11:08:24 UTC at 6ae7ad30b150f7c7ca6937f943c2914d0c1aaa20. Source CI passed: 588 Python tests, 79 frontend units, 38 real-HTTP browser journeys and 22 separate proof-renderer cases, from gh run view 34469372353 --repo upgradedev/archon-aws-strands --log. Later changes need their own exact-SHA CI. Current AWS status is reported only against the served pair there. Human signoff: NOT_RUN. Prior evidence remains pinned to its original revision.

AR-UAT-23 · A new payment changes the decision

  1. Dashboard: Start reconciliation, inspect and post the invoice.
  2. Review changed decision; run Strands and inspect the 1,860.00 EUR draft.
  3. Before approving, add the sample payment through Try new evidence before approving.
  4. Follow the linked receipt and before/current balance. The old draft must disappear.
  5. Prepare and review a fresh 1,260.00 EUR draft, then simulate approval.
  6. Prepare, inspect, copy and download durable evidence in Workspace; reload the receipt.

Expected: obsolete fingerprint refused even at current revision; review confirmation resets; exported and copied bytes match durable redacted evidence; exactly one simulated receipt remains. Stale, expired and non-priority cases keep their existing guards. Clipboard failure retains download and selectable text.

Automation: central journey withdraws the old draft after payment and exports the fresh reviewed outcome; test_reconciliation_payment_duplicate_and_export_keep_exact_evidence; frontend/tests/reconciliation.test.tsx. Source checkpoint passed at the commit and UTC above; current AWS status: release acceptance. Human NOT_RUN.

AR-UAT-24 · File preview and duplicate abstention

  1. Records: open a text email file. Try PDF and multipart input and inspect rejection.
  2. Preview UTF-8 plain-text invoice and payment files, explicitly use their text, then submit.
  3. Prepare a draft and use Check a forwarded duplicate, preserving its Transfer ID.
  4. Observe the collection hold and unchanged recorded payment.
  5. Link the original receipt with a human note and exact confirmation.
  6. Reload and export retained sources and resolution; review a fresh draft before any approval.

Expected: preview makes no intake request. Duplicate makes no extra credit or provider outcome. Resolution retains original bytes. Empty, binary, non-UTF8, oversized, MIME and unsupported files leave editor and ledger unchanged; late file reads cannot cross sessions.

Automation: plain text file preview leads to duplicate abstention and retained human resolution; frontend/tests/reconciliation.test.tsx; test_reconciliation_payment_duplicate_and_export_keep_exact_evidence. Source checkpoint passed at the commit and UTC above; current AWS status: release acceptance. Human NOT_RUN.

Reliable workflows · automation passed at pinned implementation

Payment identity, supplier direction, human resolution, evidence export and observed outcomes. AUTOMATION_PASS at implementation1793e7dfcc6002ecccff8767eb238d4a52466e1b only: primary CI34377859447, frontend CI34377859438 (561 Python tests;34 real-HTTP desktop/mobile journeys; full-history scan and frontend coverage gates passed). Later edits require their own exact-SHA CI; this is not human or live AWS acceptance. Previous blocks below remain historical only; they do not accept this scope. Human signoff and live AWS acceptance: NOT_RUN. Parent owns release.

Previous accepted AWS evidence is retained as opaque bytes with original IDs and SHA256 manifest in 90-day archive. This is preservation, not new application acceptance.

AR-UAT-18 · Semantic payment identity and retained correction

Joiner reconciling inbox evidence

  1. Post Sample invoice
  2. Try identity refusal; submit missing Transfer ID
  3. Correct held payment with distinct supplied reference
  4. Forward same reference with changed subject; link original as duplicate
  5. Post equal amount with a different real-event reference

Missing identity and duplicates hold; correction retains original; same bank event credits once; distinct equal instalments remain valid.

Automation mapping: test_missing_identity_holds_then_corrects_with_original_retained; test_same_bank_event_never_credits_twice; editable payment refusal correction and semantic duplicate resolution use real HTTP

Observed result: AUTOMATION_PASS at implementation1793e7dfcc6002ecccff8767eb238d4a52466e1b only: primary CI34377859447, frontend CI34377859438 (561 Python tests;34 real-HTTP desktop/mobile journeys; full-history scan and frontend coverage gates passed). Later edits require their own exact-SHA CI; this is not human or live AWS acceptance.. Human signoff: NOT_RUN.

AR-UAT-19 · Supplier and sales economic direction

Joiner reconciling inbox evidence

  1. Use original issuer/customer headers with configured My Joinery identity
  2. Forward supplier Billed to: My Joinery through owner/accountant
  3. Post a genuine outbound invoice
  4. Try conflicting and unsupported threads

Supplier remains payable, outbound remains receivable with correct recipient, ambiguity visibly refuses; redaction remains.

Automation mapping: test_common_forward_formats_never_turn_supplier_debt_into_a_sale; supplier direction and externally resolved dispute retain evidence and require fresh review

Observed result: AUTOMATION_PASS at implementation1793e7dfcc6002ecccff8767eb238d4a52466e1b only: primary CI34377859447, frontend CI34377859438 (561 Python tests;34 real-HTTP desktop/mobile journeys; full-history scan and frontend coverage gates passed). Later edits require their own exact-SHA CI; this is not human or live AWS acceptance.. Human signoff: NOT_RUN.

AR-UAT-20 · Human dispute and historical-payment resolution

Joiner reconciling inbox evidence

  1. Open a persisted session with two equal pre-upgrade receipts missing identity
  2. Read hold and original source bytes
  3. Attest distinct supplied bank references and review note
  4. Try same reference for both; it must remain held
  5. After a valid attestation, run Strands and review a fresh draft

Original posted records unchanged. Valid distinct-event attestation is additive. Suspected duplicate legacy entries need operator accounting correction; no fabricated identities or journal reversal.

Automation mapping: test_historical_equal_receipts_view_attest_and_progress_without_rewriting; test_legacy_resolution_is_revision_bound_durable_and_does_not_rewrite; generated legacy hold is visible and takes additive explicit references, never intake. Legacy seed is covered by API/unit tests; human browser legacy UAT is NOT_RUN.

Observed result: AUTOMATION_PASS at implementation1793e7dfcc6002ecccff8767eb238d4a52466e1b only: primary CI34377859447, frontend CI34377859438 (561 Python tests;34 real-HTTP desktop/mobile journeys; full-history scan and frontend coverage gates passed). Later edits require their own exact-SHA CI; this is not human or live AWS acceptance.. Human signoff: NOT_RUN.

AR-UAT-21 · Readable evidence and session-isolated recovery

Joiner reconciling inbox evidence

  1. Open History and Prepare evidence bundle
  2. Inspect source decisions, revisions, mode, hashes and limits
  3. Lose an evidence HTTP response, retry the read
  4. Start a new workspace while staying in History; old/late evidence must disappear

Redacted human-readable bundle, actual revisions and outcomes, no truth/authenticity claim. New session cannot inherit old evidence.

Automation mapping: test_evidence_is_session_scoped_redacted_and_tracks_corrections; evidence export is read on demand, retryable, literal and revision scoped; a late evidence response cannot appear in a different session

Observed result: AUTOMATION_PASS at implementation1793e7dfcc6002ecccff8767eb238d4a52466e1b only: primary CI34377859447, frontend CI34377859438 (561 Python tests;34 real-HTTP desktop/mobile journeys; full-history scan and frontend coverage gates passed). Later edits require their own exact-SHA CI; this is not human or live AWS acceptance.. Human signoff: NOT_RUN.

AR-UAT-22 · Observed outcomes and model/evaluator contracts

Joiner reconciling inbox evidence

  1. Read Dashboard after posting, correction and resolution
  2. Inspect current mode and backend revision in History
  3. Inspect CI model factory and fresh evaluator oracle cases

Actual session counts only. Human active time/benefits Unknown; public model scripted, no delivery. Exact invoice, nonempty correct recipient and amount required by evaluator.

Automation mapping: dashboard counts observed human resolutions while benefits remain unknown; test_factory_arguments_reach_real_graph_without_live_inference; test_fresh_evaluator_oracles

Observed result: AUTOMATION_PASS at implementation1793e7dfcc6002ecccff8767eb238d4a52466e1b only: primary CI34377859447, frontend CI34377859438 (561 Python tests;34 real-HTTP desktop/mobile journeys; full-history scan and frontend coverage gates passed). Later edits require their own exact-SHA CI; this is not human or live AWS acceptance.. Human signoff: NOT_RUN.

AUTOMATION_PASS for implementation commit 9a6bfe6adfd79cda9b20d67fdb5e39bfa155168c only. GitHub Actions https://github.com/upgradedev/archon-aws-strands/actions/runs/34356632094: npm test 49 passed; Python regression 518 passed; Playwright real-HTTP desktop/mobile 30 passed. Mapped automated coverage, not human execution or live AWS acceptance of this UX. Current release identity and exact-run artifacts remain authoritative.

Desktop/mobile screenshots. Hosting contract checks also passed in run 34356809399: 11 hosting, 4 API stack, 8 release workflow tests. Subsequent documentation commits require their own green CI.

Dashboard / Workspace implementation: automated checks passed

The historical PASS evidence below applies only to its named commits and runs. It does not attest the new Dashboard, selected collections Workspace, Records search or navigation. Current acceptance comes from exact-commit GitHub Actions artifacts and deployed /release.json plus /api/health.

Human signoff: NOT_RUN. Live AWS acceptance for this revision: NOT_RUN; the parent owns release. Successful dashboard and selected workspace PNGs are attached for both desktop and mobile. The separate ui-screenshots-<run_id> artifact contains PNGs; the existing full report retains traces and videos.

AR-UAT-14 · Truthful Dashboard and drilldowns

persona
Sole-trader owner
preconditions
Isolated synthetic workspace on the exact build under review
steps
  1. Post the application's invoice and payment samples in Records
  2. Open Dashboard and follow outstanding, overdue, recorded receipts and pending draft metrics
  3. Inspect the scoped matching records; reload
expected outcome
Actual ledger totals and exact cents; unknown is not zero; no duplicate counting, invented trends or bank verification.
negative/recovery case
Duplicate source and malformed/unknown amount tests; held arrangements remain owed but not actionable.
automation mapping
Dashboard metrics drill into actual records and selected workspace screenshots; workspaces.test.tsx metric cases
observed result/evidence
AUTOMATION_PASS for implementation commit 9a6bfe6adfd79cda9b20d67fdb5e39bfa155168c only. GitHub Actions https://github.com/upgradedev/archon-aws-strands/actions/runs/34356632094: npm test 49 passed; Python regression 518 passed; Playwright real-HTTP desktop/mobile 30 passed. Mapped automated coverage, not human execution or live AWS acceptance of this UX. Current release identity and exact-run artifacts remain authoritative.
human signoff
NOT_RUN

AR-UAT-15 · Persistent case selection and search focus

persona
Sole-trader owner
preconditions
Isolated synthetic workspace on the exact build under review
steps
  1. Select the recorded receipt in Workspace
  2. Navigate Dashboard; reload; return Workspace
  3. In Records type a multi-character search; use browser back and reload
expected outcome
Same invoice/source context after page navigation and reload. Search remains focused as query changes.
negative/recovery case
Missing/foreign source cannot authorize another case; unknown route remains recoverable.
automation mapping
query typing keeps focus and case context survives navigation, browser back and reload; route aliases and encoded context are retained with no arbitrary target action
observed result/evidence
PENDING_CI: use exact branch run and attached artifacts; no current PASS is asserted.
human signoff
NOT_RUN

AR-UAT-16 · Backend target and late response isolation

persona
Sole-trader owner
preconditions
Isolated synthetic workspace on the exact build under review
steps
  1. Post two overdue invoices
  2. Inspect the nonpriority case; preparation must be disabled
  3. Delay a real reason response and select the other case
expected outcome
Reason mutation contains no invoice_id. The resulting stored draft stays associated with its actual invoice. No late navigation or automatic approval.
negative/recovery case
Recipient-less priority, ambiguous arrangement projection, duplicate or missing evidence hold preparation.
automation mapping
late reasoning response cannot attach a draft to another selected case; backend target includes recipient-less priority and never substitutes a ready invoice
observed result/evidence
PENDING_CI: use exact branch run and attached artifacts; no current PASS is asserted.
human signoff
NOT_RUN

AR-UAT-17 · Expiry, consent reset and correction recovery

persona
Sole-trader owner
preconditions
Isolated synthetic workspace on the exact build under review
steps
  1. Check exact draft consent; change evidence or advance the browser clock past expiry
  2. Try a known validation refusal and correct the input
  3. Disconnect, reconnect, explicitly refresh; retry an uncertain request
expected outcome
Expired/changed consent disabled; known 400/422 refusal remains editable; unknown/timeout/409 requires durable refresh and explicit renewed consent.
negative/recovery case
Payment-invalidated approval, lost-response retry, no duplicated receipt and isolated session recovery remain mandatory.
automation mapping
checked consent expires on an open page and no simulated receipt is created; duplicate intake leaves ledger metrics intact and offline records require explicit refresh; existing stale and lost-response journeys
observed result/evidence
PENDING_CI: use exact branch run and attached artifacts; no current PASS is asserted.
human signoff
NOT_RUN

Historical UI polish verification

UI polish mapped automation PASS — https://github.com/upgradedev/archon-aws-strands/actions/runs/34336011792 at 12814e10013e798bc9f064a0d1ef05d4365088d8 on 2026-09-09. 30 unit tests, 518 Python tests and 20 real-HTTP browser journeys (10 desktop, 10 mobile) passed; zero failures/errors/skips. Original 16 browser journeys retained. Font-size floors, mobile sample reflow, actual source deep links, unchanged exact draft and reduced motion passed. Human signoff NOT_RUN; high-contrast manual review and live AWS acceptance for this revision NOT_RUN.

Readability and source-evidence verification · commit 12814e10013e798bc9f064a0d1ef05d4365088d8

npm test (Vitest measured coverage)
30 passed; 0 failures, errors or skipped tests. Coverage: statements 196/198 (98.98%), branches 194/200 (97%), lines 136/136, functions 72/72. All src TS/TSX included; unchanged 85% floors.
python -m pytest --junitxml=frontend/artifacts/python-junit.xml --cov
518 passed; 0 failures, errors or skipped tests. One existing warning.
npm run test:e2e (real Python HTTP API and SQLite on GitHub Actions)
20 passed: 10 desktop and 10 mobile; 0 failures, errors or skipped tests. Original 16 preserved, plus four source-evidence/selection/readability executions.
npm run build; python -m ruff check src tests
Both passed. Committed lock used via npm ci in GitHub Actions; no local installs, builds or test execution.
npm audit --json; npm audit --omit=dev --audit-level=low
Full audit reports 0 known vulnerabilities; runtime audit passed. No new dependencies or lock edits.

Gross, settled and outstanding come from Workspace.sales for draft.invoice_id. Source links use existing Source.id with status=posted, SalesInvoice.document.doc_id or Receipt.document.settles equal to that invoice. Receipt amounts use document.amount, never extracted from prose. Reconciled means linked in this ledger, not independently bank-verified. Sample selection is exact current textarea/sample equality.

Agent inspected all six desktop/mobile CI screenshots: source figures and badges visible, two-column phone samples/navigation and readable dark KPI tiles. Money tables retain their scoped horizontal scrolling on narrow screens. This is agent evidence review, not human acceptance.

Run 34335504722 had one failing new unit assertion that incorrectly included the decorative aria-hidden arrow in a link's accessible name. Commit 1315bcb asserts the actual accessible name, href and aria-hidden decoration. No threshold was weakened; readability revision 12814e1 passed the complete pipeline.

Artifact: frontend-evidence-34336011792. Screenshots within the artifact:

No live AWS acceptance claimed for this UI revision. Parent owns merge/deployment and post-deployment verification. High-contrast manual review, screen-reader acceptance and all human signoffs NOT_RUN. Source relationships mean linkage in these books, not independent bank verification; delivery remains simulated.

Prior baseline automated results

Verified 2026-09-09 at commit 2c2a6ce6e7322c8536b207f1cc4151fbe543e715.

Locked frontend verification · Original Python CI

AWS target: ARCHON workstation. PASS: Live AWS acceptance, 2026-09-09: all 16 desktop/mobile journeys passed against CloudFront, Lambda and private S3. Tested frontend d83b611c9e3e360cefa1428d27beab0e4b4420bf, API 08fd7f8c266409891475fbc7bad878d103ec3dcc. Command: ARCHON_UI_URL=https://d2ssmv59q16d0b.cloudfront.net/ npm run test:e2e. Automated synthetic acceptance only; human signoff remains NOT_RUN.

Committed generated package-lock.json; npm ci on the verified commit

python -m pytest --junitxml=frontend/artifacts/python-junit.xml --cov
518 passed; 0 failed, 0 errors, 0 skipped
npm test (vitest run --coverage)
25 passed; 0 failed, 0 errors, 0 skipped
npm run test:e2e (Playwright with real Python HTTP API)
16 passed: 8 desktop and 8 mobile; 0 failed, 0 skipped
npm run build; python -m ruff check src tests
Both passed
npm audit --json; npm audit --omit=dev --audit-level=low
0 known vulnerabilities in full dependency audit; runtime audit passed
Vitest4 coverage/coverage-summary.json
Statements 183/185 (98.91%); branches 175/181 (96.68%); lines 126/126; functions 64/64. All frontend src TS/TSX included; 85% floor passed, no relevant-code exclusions.

Artifacts: frontend-evidence-34326637050, frontend-lock-34326637050. dist, Python/unit/browser JUnit, measured coverage, full npm audit, desktop/mobile traces and screenshots.

Mapped automation passed; this does not attest human execution of every testbook step. Live AWS/S3 browser acceptance is recorded separately above. Human UAT and independent real delivery remain unverified. Public model is scripted and provider simulated; no real model or email calls occurred.

Human signoff: NOT_RUN.

AR-UAT-01 · Isolated empty workspace

persona
Sole-trader owner
preconditions
No session handle
steps
  1. Open #/queue
  2. open a second browser context
expected outcome
Each visitor has independent empty books
negative/recovery case
Unavailable/expired handle permits a new session
automation mapping
test_empty_session_is_isolated_and_has_no_seeded_outcome; independent visitors, deep links, keyboard skip, and new workspace; unavailable session recovers by explicitly creating a new workspace
observed result/evidence
Mapped automation PASS — CI https://github.com/upgradedev/archon-aws-strands/actions/runs/34326637050 at 2c2a6ce. See verification counts and frontend-evidence-34326637050 (JUnit, coverage, desktop/mobile traces and screenshots). Pipeline evidence only, not human execution of every step or live AWS acceptance.
human signoff
NOT_RUN

AR-UAT-02 · Exact partial payment arithmetic

persona
Owner receiving client post
preconditions
Empty synthetic workspace
steps
  1. Documents: Sample invoice → Read & post
  2. Sample payment → Read & post
  3. In Approvals, open the invoice and receipt source badges; reload each deep link
expected outcome
Invoice 1860.00 EUR less receipt 600.00 EUR gives 1260.00 EUR outstanding; source links reveal original post. Exact source handles open the original posted invoice/receipt. Current ledger figures are read from API fields; no draft-text parsing or independent bank-verification claim.
negative/recovery case
Missing reference, USD or contradictory totals produce visible refusal
automation mapping
test_raw_post_real_strands_exact_approval_and_durable_receipt; raw emails → real HTTP / Strands → exact draft → simulated durable receipt; draft ledger badges open actual invoice and receipt sources without approving; evidence uses explicit posted invoice and receipt relationships, not matching prose
observed result/evidence
Mapped automation PASS — CI https://github.com/upgradedev/archon-aws-strands/actions/runs/34326637050 at 2c2a6ce. See verification counts and frontend-evidence-34326637050 (JUnit, coverage, desktop/mobile traces and screenshots). Pipeline evidence only, not human execution of every step or live AWS acceptance. UI polish mapped automation PASS — https://github.com/upgradedev/archon-aws-strands/actions/runs/34336011792 at 12814e10013e798bc9f064a0d1ef05d4365088d8 on 2026-09-09. 30 unit tests, 518 Python tests and 20 real-HTTP browser journeys (10 desktop, 10 mobile) passed; zero failures/errors/skips. Original 16 browser journeys retained. Font-size floors, mobile sample reflow, actual source deep links, unchanged exact draft and reduced motion passed. Human signoff NOT_RUN; high-contrast manual review and live AWS acceptance for this revision NOT_RUN.
human signoff
NOT_RUN

AR-UAT-03 · Strands remains load-bearing

persona
Owner collecting an overdue invoice
preconditions
Supported invoice and payment posted
steps
  1. Action queue → Run Strands & prepare draft
  2. expand six reports
expected outcome
Six real ledger tools report through Strands before composer; scripted model and no AI judgment labelled
negative/recovery case
Any refused source holds draft generation
automation mapping
test_raw_post_real_strands_exact_approval_and_durable_receipt; raw emails → real HTTP / Strands → exact draft → simulated durable receipt
observed result/evidence
Mapped automation PASS — CI https://github.com/upgradedev/archon-aws-strands/actions/runs/34326637050 at 2c2a6ce. See verification counts and frontend-evidence-34326637050 (JUnit, coverage, desktop/mobile traces and screenshots). Pipeline evidence only, not human execution of every step or live AWS acceptance.
human signoff
NOT_RUN

AR-UAT-04 · Exact content approval

persona
Owner approving collection
preconditions
A current draft
steps
  1. Read recipient, subject, body and fingerprint
  2. tick review
  3. approve exact draft
  4. Inspect the current-ledger evidence block without approving
expected outcome
One simulated provider-accepted receipt, same fingerprint; no real email; delivery unproven. Opening source links neither changes the exact email nor checks its approval confirmation; absent, unrelated, refused or corrected sources produce no fabricated links.
negative/recovery case
Approval disabled without confirmation; altered evidence or old draft refused
automation mapping
test_late_payment_invalidates_exact_approval; stale approval after another tab posts payment is refused by actual API; source badge does not rewrite the exact draft or supply an approval; missing source relationships stay unavailable and never manufacture a badge
observed result/evidence
Mapped automation PASS — CI https://github.com/upgradedev/archon-aws-strands/actions/runs/34326637050 at 2c2a6ce. See verification counts and frontend-evidence-34326637050 (JUnit, coverage, desktop/mobile traces and screenshots). Pipeline evidence only, not human execution of every step or live AWS acceptance. UI polish mapped automation PASS — https://github.com/upgradedev/archon-aws-strands/actions/runs/34336011792 at 12814e10013e798bc9f064a0d1ef05d4365088d8 on 2026-09-09. 30 unit tests, 518 Python tests and 20 real-HTTP browser journeys (10 desktop, 10 mobile) passed; zero failures/errors/skips. Original 16 browser journeys retained. Font-size floors, mobile sample reflow, actual source deep links, unchanged exact draft and reduced motion passed. Human signoff NOT_RUN; high-contrast manual review and live AWS acceptance for this revision NOT_RUN.
human signoff
NOT_RUN

AR-UAT-05 · Retry safety and durable readback

persona
Owner recovering after lost connection
preconditions
Current draft
steps
  1. Approve while response is dropped after actual HTTP success
  2. refresh durable state
  3. open Activity
expected outcome
One durable receipt; UI prevents a second approval; same intent ID retained if retry is needed
negative/recovery case
Unknown outcome never automatically resent
automation mapping
test_retry_approval_across_new_api_client_retains_one_receipt; lost approval response reconciles to one durable receipt without resending; approval lost before reaching the API retries the same intent after durable refresh
observed result/evidence
Mapped automation PASS — CI https://github.com/upgradedev/archon-aws-strands/actions/runs/34326637050 at 2c2a6ce. See verification counts and frontend-evidence-34326637050 (JUnit, coverage, desktop/mobile traces and screenshots). Pipeline evidence only, not human execution of every step or live AWS acceptance.
human signoff
NOT_RUN

AR-UAT-06 · Exact proposal approval and durable hold

persona
Owner arranging payment
preconditions
1260.00 EUR outstanding
steps
  1. Propose 2026-09-20: 600.00 EUR and 2026-10-05: 660.00 EUR
  2. inspect
  3. tick
  4. approve
  5. reload queue
expected outcome
Held collection, debt still 1260.00 EUR; previous 600.00 EUR is baseline, not a future instalment
negative/recovery case
Wrong total, past dates, stale fingerprint or duplicate dates refused
automation mapping
test_arrangement_exact_approval_survives_store_reopen_without_changing_debt; arrangement approval holds collections across reload without reducing the debt
observed result/evidence
Mapped automation PASS — CI https://github.com/upgradedev/archon-aws-strands/actions/runs/34326637050 at 2c2a6ce. See verification counts and frontend-evidence-34326637050 (JUnit, coverage, desktop/mobile traces and screenshots). Pipeline evidence only, not human execution of every step or live AWS acceptance.
human signoff
NOT_RUN

AR-UAT-07 · Refusal recovery without weakening the gate

persona
Owner triaging unclear post
preconditions
Posted supported invoice
steps
  1. Post refusal sample
  2. see collection held
  3. correct refused source with supplier sample
expected outcome
Original refusal retained and linked to correction; collections enabled only after valid correction
negative/recovery case
Posted source immutable; duplicate email is not posted twice
automation mapping
test_refused_input_holds_every_chase_until_corrected; refused raw evidence holds collections and a corrected source releases them
observed result/evidence
Mapped automation PASS — CI https://github.com/upgradedev/archon-aws-strands/actions/runs/34326637050 at 2c2a6ce. See verification counts and frontend-evidence-34326637050 (JUnit, coverage, desktop/mobile traces and screenshots). Pipeline evidence only, not human execution of every step or live AWS acceptance.
human signoff
NOT_RUN

AR-UAT-08 · Human escalation

persona
Owner handling a dispute
preconditions
Open sales invoice
steps
  1. Enter 'I dispute this debt' as client reply
  2. read terms
expected outcome
No arrangement agreed; dispute visible; collections held. Replacing the reply with an invoice cannot release it; separate human resolution is outside this demo
negative/recovery case
Ambiguous 'soon' is also held, never guessed into dated money
automation mapping
test_ambiguous_or_disputed_reply_holds_collection
observed result/evidence
Mapped automation PASS — CI https://github.com/upgradedev/archon-aws-strands/actions/runs/34326637050 at 2c2a6ce. See verification counts and frontend-evidence-34326637050 (JUnit, coverage, desktop/mobile traces and screenshots). Pipeline evidence only, not human execution of every step or live AWS acceptance.
human signoff
NOT_RUN

AR-UAT-09 · Accessible persistent navigation

persona
Owner using a phone or keyboard
preconditions
Desktop and mobile browser
steps
  1. Use all navigation links
  2. reload document deep link
  3. Tab to skip link and press Enter
  4. Use Tab, Enter and Space on the sample switcher; edit its text, then repeat with reduced motion
  5. At phone width, check two-by-two sample buttons and readable navigation, controls and source labels
expected outcome
Correct page persists; main receives focus; document evidence opens; no page-wide horizontal overflow. Existing Sample button names remain; aria-pressed marks only the sample matching current text. Editing/clearing deselects it, selection does not post, and reduced motion disables pill/KPI transitions. Regular controls/navigation and source labels are at least 14px, main explanatory copy 16px, and secondary source IDs/demo labels 12px. Four sample buttons reflow into two columns on narrow screens.
negative/recovery case
Unknown route provides return link; loading/empty/error states remain operable
automation mapping
independent visitors, deep links, keyboard skip, and new workspace; raw emails → real HTTP / Strands → exact draft → simulated durable receipt; sample pill selection follows current text and native keyboard without posting; sample sliding pill preserves keyboard selection and reduced-motion preferences
observed result/evidence
Mapped automation PASS — CI https://github.com/upgradedev/archon-aws-strands/actions/runs/34326637050 at 2c2a6ce. See verification counts and frontend-evidence-34326637050 (JUnit, coverage, desktop/mobile traces and screenshots). Pipeline evidence only, not human execution of every step or live AWS acceptance. UI polish mapped automation PASS — https://github.com/upgradedev/archon-aws-strands/actions/runs/34336011792 at 12814e10013e798bc9f064a0d1ef05d4365088d8 on 2026-09-09. 30 unit tests, 518 Python tests and 20 real-HTTP browser journeys (10 desktop, 10 mobile) passed; zero failures/errors/skips. Original 16 browser journeys retained. Font-size floors, mobile sample reflow, actual source deep links, unchanged exact draft and reduced motion passed. Human signoff NOT_RUN; high-contrast manual review and live AWS acceptance for this revision NOT_RUN.
human signoff
NOT_RUN

AR-UAT-10 · Five truthful receipt states

persona
Operator reviewing delivery evidence
preconditions
Activity view
steps
  1. Read queued, unknown, provider-accepted, delivered and failed descriptions
expected outcome
Acceptance explicitly does not prove arrival; delivered unavailable without independent evidence
negative/recovery case
Live adapter requires separate authorization, durable ledger and controlled verified recipient
automation mapping
test_live_adapter_requires_operator_authorization_and_durable_log; test_the_transport_does_not_retry_underneath_the_record
observed result/evidence
Mapped automation PASS — CI https://github.com/upgradedev/archon-aws-strands/actions/runs/34326637050 at 2c2a6ce. See verification counts and frontend-evidence-34326637050 (JUnit, coverage, desktop/mobile traces and screenshots). Pipeline evidence only, not human execution of every step or live AWS acceptance.
human signoff
NOT_RUN

AR-UAT-11 · Lambda and storage contract

persona
Operator validating AWS package
preconditions
CI dependencies; local SQLite or fake S3 client
steps
  1. Pass API Gateway v2 events through actual handler
  2. create/read/post
  3. race conditional state writes
expected outcome
Commit/model labels correct; isolated persisted state; concurrent write conflicts recoverable
negative/recovery case
S3 AccessDenied says unavailable, logs code only; no ListBucket/SES/Bedrock permission needed
automation mapping
test_real_lambda_handler_http_api_v2_health_commit_and_session_journey; test_s3_no_list_bucket_denial_is_unavailable_not_claimed_missing
observed result/evidence
Mapped automation PASS — CI https://github.com/upgradedev/archon-aws-strands/actions/runs/34326637050 at 2c2a6ce. See verification counts and frontend-evidence-34326637050 (JUnit, coverage, desktop/mobile traces and screenshots). Pipeline evidence only, not human execution of every step or live AWS acceptance.
human signoff
NOT_RUN

AR-UAT-12 · Bounded network and blocked storage recovery

persona
Owner with restricted browser settings
preconditions
Storage blocked or API unresponsive
steps
  1. Open workspace
  2. read warning
  3. trigger timed-out action
  4. refresh before retry
expected outcome
Memory-only session remains usable with limitation stated; request aborts after 35 seconds
negative/recovery case
Session creation is single-flight; no automatic retry of uncertain approval
automation mapping
blocked storage still opens a session and discloses its lifetime; requests abort after 35 seconds and clear their timer
observed result/evidence
Mapped automation PASS — CI https://github.com/upgradedev/archon-aws-strands/actions/runs/34326637050 at 2c2a6ce. See verification counts and frontend-evidence-34326637050 (JUnit, coverage, desktop/mobile traces and screenshots). Pipeline evidence only, not human execution of every step or live AWS acceptance.
human signoff
NOT_RUN

AR-UAT-13 · Precision financial presentation without invented performance signals

persona
Sole trader reviewing daily finances on desktop or phone
preconditions
Synthetic invoice and partial receipt posted; desktop/mobile and reduced-motion settings
steps
  1. Open Action queue
  2. Read all four KPI tiles and source money tables
  3. Hover a tile with a pointer, repeat with reduced motion
  4. Check narrow-screen layout and high-contrast focus/selection
  5. Read current-ledger invoice and receipt figures beside their corresponding source groups; inspect regular label, explanation and secondary-ID sizes
expected outcome
Dark elevated KPI cards show the unchanged API amounts with tabular numerals; source tables stay crisp and readable. Hover is subtle and decorative, never a trend or confidence metric. Reduced motion removes movement; high contrast retains selected-state borders. Invoice/receipt figure accents correspond to their named source groups without implying independent verification. KPI labels remain at least 14px, explanations 16px and secondary IDs 12px; mobile navigation is readable rather than compressed.
negative/recovery case
No sources or incomplete evidence retain existing empty/held states. No badge implies bank verification or real delivery.
automation mapping
draft ledger badges open actual invoice and receipt sources without approving (precision-ledger-kpis.png); sample sliding pill preserves keyboard selection and reduced-motion preferences; existing stale-evidence and safe-retry journeys
observed result/evidence
UI polish mapped automation PASS — https://github.com/upgradedev/archon-aws-strands/actions/runs/34336011792 at 12814e10013e798bc9f064a0d1ef05d4365088d8 on 2026-09-09. 30 unit tests, 518 Python tests and 20 real-HTTP browser journeys (10 desktop, 10 mobile) passed; zero failures/errors/skips. Original 16 browser journeys retained. Font-size floors, mobile sample reflow, actual source deep links, unchanged exact draft and reduced motion passed. Human signoff NOT_RUN; high-contrast manual review and live AWS acceptance for this revision NOT_RUN.
human signoff
NOT_RUN

AR-UAT-32–34 · Product closeout

Candidate changes require exact-pair AWS acceptance; human signoff remains NOT_RUN.

  1. Read the client's dated terms, enter different owner terms, review and record the counterproposal. Reload: original reply and counterproposal remain; no email, payment, acceptance or collection hold was invented. Read a fresh client reply and approve its exact plan to hold collections without changing debt.
  2. Post an invoice with explicit English month names and EUR comma decimals, then an identified payment. Expect 2,976.00 less 900.00 equals 2,076.00 EUR. Conflicting totals on another invoice must be retained and held, never posted.
  3. Open a cold browser context at the root. Retain main visibility, supported FCP/LCP entries and screenshot. Each supported measurement must be below 2,500ms. Unsupported paint APIs remain null; visibility is not FCP and CDN cache is not purged. This is not a frozen X1 rerun.

Automated on desktop Chromium, 375px Chromium and 375px WebKit through the real HTTP API. The frozen AR3 collector continues to reject changed product source; no model grant is activated.