{
  "product_tour_wave": {
    "status": "EXACT_SOURCE_CI_AND_RELEASE_RECEIPT_REQUIRED",
    "human_uat": "NOT_RUN",
    "scope": "Optional read-only guide; no automatic navigation, model invocation, import, key activation or email approval.",
    "cases": [
      {
        "id": "AR-UAT-43",
        "steps": ["Open a loaded workspace", "Choose Take a tour", "Read all six stops with Next and Previous", "Close with Escape", "Reopen and Finish tour"],
        "expected": "Each step heading receives focus. Next and Previous leave the current page unchanged. Close returns focus to Take a tour; reopening starts at step one. Reload does not start a tour automatically.",
        "automated_test": "frontend/tests/product-tour.test.tsx; frontend/e2e/business-portfolio.spec.ts",
        "human_signoff": "NOT_RUN"
      },
      {
        "id": "AR-UAT-44",
        "steps": ["Type an unsaved fictional email in Records", "Open, step through and close the tour without opening another page", "Finish that input before explicitly following Open [page] links", "Inspect History and reload"],
        "expected": "Explanations preserve the visible unsaved textarea and route. Explicit page links use existing case context; leaving a page can discard unsaved input, as warned. Retained books and activity stay unchanged; no seed, AI, consent, incoming activation or send request.",
        "automated_test": "frontend/tests/app.test.tsx; frontend/e2e/business-portfolio.spec.ts",
        "human_signoff": "NOT_RUN"
      },
      {
        "id": "AR-UAT-45",
        "steps": ["In an isolated test, observe a queued, running or unknown provider job", "Open the tour", "Separately observe an offline stale workspace", "Inspect the optional page link"],
        "expected": "Guide navigation is absent while the app reports busy, provider-pending or stale state; explanations and Close remain available. CI supplies these states without new paid calls. The guide is not a global lock on every navigation control.",
        "automated_test": "frontend/tests/app.test.tsx; frontend/tests/product-tour.test.tsx",
        "human_signoff": "NOT_RUN"
      }
    ],
    "evidence": "Exact-head unit/browser results and business-product-tour.png on desktop, mobile Chromium and 375px WebKit. Deployed acceptance is separate from source CI. Human ten-second comprehension remains NOT_RUN."
  },
  "business_portfolio_wave": {
    "status": "SOURCE_CANDIDATE_REQUIRES_EXACT_SHA_CI",
    "human_uat": "NOT_RUN",
    "scope": "240 fictional typed source documents, six record views, 25-row pagination, quarter widgets through 2026-09-09. Native demo fixtures are not AI mail extraction evidence. Credits reduce outstanding separately from cash.",
    "automation": "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.",
    "cases": [
      {
        "id": "AR-UAT-40",
        "steps": [
          "Open five-source joinery demo and retain its session",
          "Choose Load business portfolio",
          "Inspect 240-record and six-type disclosure",
          "Reload new books",
          "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.",
        "automated_test": "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"
      },
      {
        "id": "AR-UAT-41",
        "steps": [
          "Open all six document views",
          "Check counts 80 sales invoices, 50 purchase invoices, 20 sales credits, 10 purchase credits, 50 client receipts, 30 supplier payments",
          "Use Next page and reload",
          "Search a reference and set inclusive dates",
          "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.",
        "automated_test": "frontend/e2e/business-portfolio.spec.ts; frontend/tests/business-records.test.tsx",
        "human_signoff": "NOT_RUN"
      },
      {
        "id": "AR-UAT-42",
        "steps": [
          "Compare net sales and purchases with separate credits",
          "Inspect July, August and partial September cash",
          "Follow cash, aging, top-party and document-mix links",
          "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.",
        "automated_test": "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"
      }
    ],
    "evidence": "PENDING_CI: retain browser JUnit, traces and business-dashboard.png, business-credit-evidence.png, business-filtered-records.png from exact integrated source run. No local execution or deployment acceptance claimed."
  },
  "incoming_clarity_wave": {
    "status": "SOURCE_CANDIDATE_REQUIRES_CI_AND_DEPLOYED_ACCEPTANCE",
    "human_uat": "NOT_RUN",
    "scope": "Fictional data is separate from real provider execution. Opt-in intake-only webhook; no connected mailbox or automatic email approval.",
    "cases": [
      { "id": "AR-UAT-37", "steps": ["Open a controlled-live workspace", "Compare Dashboard, Records, Workspace draft evidence and History mode labels", "Return to an older simulation workspace"], "expected": "Live session says Bedrock and controlled SES, not simulated delivery. Retained simulation stays scripted and simulated. A provider ID never claims independent delivery.", "automated_test": "frontend/tests/runtime-copy.test.tsx" },
      { "id": "AR-UAT-38", "steps": ["Open Incoming", "Read scope and explicitly authorize metered fictional intake", "Enable the intake-only key", "Configure an external HTTP sender with the key in secret settings", "POST one fictional invoice with a unique event_id", "Observe status then inspect Records"], "expected": "Accepted event has a durable job and checked source. No draft or email is created automatically. Key is not a workspace-read or approval credential. Automatic arrival is not proof of correct extraction.", "automated_test": "tests/test_incoming_api.py; frontend/e2e-live/incoming.spec.ts (CI provider doubles only)" },
      { "id": "AR-UAT-39", "steps": ["Retry identical event after a lost response", "Try changed text under the same event_id", "Revoke key", "Attempt a new incoming event with old key"], "expected": "Identical event reuses its saved job. Changed content is refused409. Revoked key is refused401; already accepted work may finish. No automatic send, new operating grant or budget reset.", "automated_test": "tests/test_incoming_api.py; frontend/tests/incoming.test.tsx" }
    ]
  },
  "populated_demo_wave": {
    "status": "SOURCE_CANDIDATE_REQUIRES_CI_AND_DEPLOYED_ACCEPTANCE",
    "human_uat": "NOT_RUN",
    "cases": [
      { "id": "AR-UAT-35", "steps": ["Open Explore populated demo", "Confirm Load demo workspace", "Inspect Dashboard and Records", "Reload", "Return to previous workspace"], "expected": "Five fictional source emails; 1260.00 EUR owed by clients and 124.00 EUR owed to supplier; no model calls, graph, draft or email on load; previous books unchanged.", "automated_test": "populated demo survives reload and preserves the previous workspace without sending" },
      { "id": "AR-UAT-36", "steps": ["Resume a saved synthetic workspace while live providers are enabled", "Read mode warning", "Open a separate populated demo", "Return to previous workspace"], "expected": "Old receipts remain simulated. New workspace uses current providers, without invoking them on load. Exact reviewed email consent remains required.", "automated_test": "test_populated_live_demo_has_no_provider_job_and_preserves_old_mode; legacy warning is based on actual workspace and provider availability" }
    ]
  },
  "product_closeout_wave": {
    "status": "SOURCE_CANDIDATE_REQUIRES_EXACT_PAIR_ACCEPTANCE",
    "human_uat": "NOT_RUN",
    "scope": "Public bounded-post-v2, owner counterproposal with retained original reply, no client-acceptance/payment/delivery claim; no frozen benchmark rebaseline.",
    "cases": [
      { "id": "AR-UAT-32", "steps": ["Post invoice and partial payment", "Read client terms", "Review and record different owner terms", "Reload and inspect the retained original", "Read a fresh client reply and explicitly approve it"], "expected": "Counterproposal leaves 1260.00 EUR outstanding, no arrangement hold and no provider receipt. Only approved client terms hold collection; all original replies remain.", "automated_test": "counterproposal retains the client reply without inventing acceptance or reducing debt" },
      { "id": "AR-UAT-33", "steps": ["Paste explicit English dates and EUR comma-decimal invoice", "Record an identified payment", "Submit a separate invoice with conflicting totals"], "expected": "2976.00 less 900.00 equals 2076.00 EUR. Conflicting source retained and held, not posted. No real model or mail.", "automated_test": "human date and EUR notation posts explicit facts but conflicting totals stay held" },
      { "id": "AR-UAT-34", "steps": ["Open a cold browser context at CloudFront root", "Observe main/CTA before any session mutation", "Retain supported paint entries and screenshot"], "expected": "Main visibility below 2500ms; FCP/LCP below 2500ms where the browser supports each API. Unsupported entries remain null, not zero; visibility is not FCP. CDN cache is not purged. Separate from frozen X1.", "automated_test": "cold landing records paint support and main visibility without a session request" }
    ],
    "matrix": "Desktop Chromium, 375px Chromium and 375px WebKit via product-journey.spec.ts; existing real-HTTP suites and assertions retained.",
    "collector": "Changed product source is denied by the frozen AR3 collector. Positive prepare-only control remains pinned to d8194c0 with its own source imports. No model grant activated."
  },
  "guided_product_wave": {
    "status": "SOURCE_CANDIDATE_REQUIRES_CI_AND_DEPLOYED_ACCEPTANCE",
    "scope": "Public introduction renders without session access, guided invoice/payment/review/outcome, retained workspace return, supported text/file preview, offline correction preservation, explicit approval and recorded simulation.",
    "automation": "product-journey.spec.ts: desktop Chromium, mobile Chromium and 375px WebKit against real HTTP. In AWS acceptance the same cases target the exact deployed CloudFront/API pair. Other existing suites retain their original browser matrix and assertions; dashboard regression cases now explicitly enter /#/dashboard.",
    "human_uat": "NOT_RUN; ten-second comprehension requires an independent person, not screenshot or test counts.",
    "frozen_evidence": "AR2, AR3 and X1 protocols, sources and historical results are unchanged. The pinned X1 launcher intentionally refuses this changed product; do not retarget the historical instrument or claim new performance results.",
    "cases": [
      { "id": "AR-UAT-29", "steps": ["Open root with no session", "Explain the product and start using the keyboard", "Review and post invoice and partial payment", "Prepare, inspect and explicitly approve the exact simulated draft", "Export evidence, reload and return via landing"], "expected": "No session write on landing. Actual outstanding 1260.00 EUR. One simulated receipt, unchanged debt, same retained session, no silent reset.", "automated_test": "landing paints before session access and the guided decision survives return and reload" },
      { "id": "AR-UAT-30", "steps": ["Complete invoice and payment", "Post a forwarded duplicate with original transfer identity", "Follow the held source to correction"], "expected": "No additional money, no automatic resolution or approval. Refused source and original evidence retained.", "automated_test": "guided duplicate holds collection without adding money or automatically resolving evidence" },
      { "id": "AR-UAT-31", "steps": ["Edit invoice", "Disconnect and reconnect", "Explicitly refresh", "Open an unavailable session via the landing", "Decline replacement"], "expected": "Input retained while disabled. Reconnection alone does not restore authority. Expired session is not zero; replacement requires explicit consent.", "automated_test": "guided source survives offline recovery and expired session never looks like empty books" }
    ]
  },
  "decision_desk_wave": {
    "milestone": "UX-AR-10S",
    "status": "SOURCE_CANDIDATE_REQUIRES_EXACT_SHA_CI",
    "scope": "Alex's collections decision desk, state-specific return path, current ledger provenance, durable review invalidation, explicit simulated authority, recoverable unavailable/offline states. Previous cases and historical evidence remain applicable at their named revisions.",
    "automation": "frontend/e2e/decision-desk.spec.ts in the existing desktop/mobile real-HTTP suite; frontend/tests/decision-desk.test.tsx plus all existing regressions. GitHub Actions only; synthetic sessions, LedgerScriptModel and SimulatedProvider checked before each new browser journey.",
    "evidence": "Exact run frontend-evidence and ui-screenshots artifacts; browser JUnit and source-and-runtime.json attachments. Screenshots: desk-cold-start, desk-returning-payment, desk-invalidated-draft, desk-completed-simulation, desk-held-evidence, desk-offline-recovery, desk-settled-no-chase, desk-unavailable-session.",
    "acceptance_scope": "Source CI is not deployment evidence or independent human UAT. Coordinator owns merge and current AWS acceptance. Publication workflow, old case counts, freshness checks and backend source-byte parity stay unchanged.",
    "human_comprehension_C3": {
      "status": "NOT_RUN",
      "method": "An independent participant unfamiliar with the app sees the exact build at cold start for ten seconds without coaching. Hide it, then record their own words: who uses it, what problem it solves, what result they expect, and which action they would take first. Record participant independence, build SHA, viewport, date, exact responses and misunderstandings in C3. Then observe payment-change and simulated-authorization tasks separately.",
      "owner": "Coordinator records real human evidence in C3; neither Playwright nor this testbook claims comprehension."
    },
    "added_cases": [
      { "id": "AR-UAT-25", "requirement": "Cold and returning decision desk with keyboard completion", "steps": ["Identify Alex's job and the first action", "Use Tab and Enter to post the invoice and prepare a draft", "Check review, then add payment before approving", "Reload Dashboard and follow the new decision", "Reload the withdrawn-draft explanation", "Prepare and explicitly authorize the fresh simulated draft", "Read and reload the one recorded outcome"], "expected": "1860.00 less 600.00 leaves 1260.00 EUR; prior draft absent; consent does not carry; exactly one simulated receipt and unchanged debt after approval.", "automation_mapping": "decision desk keyboard journey returns to changed evidence and explicitly simulates one approval", "human_signoff": "NOT_RUN" },
      { "id": "AR-UAT-26", "requirement": "Held and offline returning state", "steps": ["Post invoice and refused source", "Return Dashboard", "Disconnect and refresh", "Reconnect, explicitly refresh, then resolve source evidence"], "expected": "Posted balance remains visible as partial/last-known evidence. Hold never invites approval. Reconnecting alone does not restore authorization.", "automation_mapping": "returning held desk keeps the posted amount visible and requires offline recovery before action", "human_signoff": "NOT_RUN" },
      { "id": "AR-UAT-27", "requirement": "Fully settled abstention", "steps": ["Prepare a draft", "Post an editable full-payment remittance", "Reload Dashboard and inspect the case"], "expected": "Zero outstanding with linked receipts, no chase, old review unusable, no approval or simulated provider outcome.", "automation_mapping": "full payment returns a no-chase decision with the prior draft unusable", "human_signoff": "NOT_RUN" },
      { "id": "AR-UAT-28", "requirement": "Unavailable session and explicit empty recovery", "steps": ["Open a session whose handle is unavailable", "Read the error", "Choose a new workspace and confirm"], "expected": "Unavailable balance is never shown as zero. Replacing browser access is explicit and does not claim record deletion; new books are empty.", "automation_mapping": "unavailable desk never invents zero balances and offers explicit empty-workspace recovery", "human_signoff": "NOT_RUN" }
    ]
  },
  "reconciliation_revision": {
    "status": "SOURCE_CHECKPOINT_PASS",
    "observed_at": "2026-09-10T11:08:24Z",
    "source_commit": "6ae7ad30b150f7c7ca6937f943c2914d0c1aaa20",
    "run_url": "https://github.com/upgradedev/archon-aws-strands/actions/runs/34469372353",
    "measured": { "python_tests": 588, "frontend_unit_tests": 79, "real_http_browser_tests": 38, "separate_proof_renderer_tests": 22 },
    "measurement_command": "gh run view 34469372353 --repo upgradedev/archon-aws-strands --log",
    "scope": "Guided new-payment decision, duplicate abstention, plain-text file preview, exact durable evidence copy/download. Existing backend contracts, thresholds and receipts unchanged.",
    "human_signoff": "NOT_RUN",
    "current_aws_status": "/acceptance.html",
    "scope_note": "Dated source-only checkpoint at the named commit, not a current deployment claim. Later changes require their own exact-SHA CI. Current AWS status is exclusively reported by /acceptance.html against the served frontend/backend pair."
  },
  "current_automated_acceptance": {
    "page": "/acceptance.html",
    "receipt": "/acceptance.json",
    "scope": "Observed AWS browser automation at a specific frontend/backend pair, compared with the currently served pair. Missing or mismatched evidence is not a pass. Historical blocks below remain pinned to their original runs.",
    "human_uat": "NOT_RUN"
  },
  "reliable_workflows_revision": {
    "status": "AUTOMATION_PASS_AT_PINNED_REVISION",
    "verified_implementation_commit": "1793e7dfcc6002ecccff8767eb238d4a52466e1b",
    "run_url": "https://github.com/upgradedev/archon-aws-strands/actions/runs/34377859438",
    "scope_note": "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.",
    "scope": "Payment identity, economic direction, bounded human resolution, evidence export, observed outcomes, configured operator model, evaluator contract. Prior blocks remain historical only.",
    "human_signoff": "NOT_RUN",
    "live_aws_acceptance": "NOT_RUN; parent owns backend/frontend deployment and final live acceptance",
    "prior_acceptance_archive": {
      "status": "CI_PASS",
      "run": 34375770102,
      "artifact": 10113786818,
      "original_run": 34357703424,
      "original_artifact": 10106786411,
      "retention_days": 90,
      "artifact_sha256": "a6c8484b3748e885c4ed79075012c69459e5517b594ac9e509ec6a80efde4ede",
      "limits": "Opaque source bytes and SHA256 manifest, not reexecution or current application acceptance."
    }
  },
  "title": "ARCHON synthetic workspace UAT testbook",
  "version": 2,
  "scope": "React UI, real Python HTTP API, Strands scripted tool calls, durable demo sessions. No live email/model calls. Human signoff is independent of automation.",
  "cases": [
    {
      "id": "AR-UAT-23",
      "requirement": "New payment withdraws an obsolete draft and makes the next decision explicit",
      "steps": ["Dashboard: Start reconciliation; review and post invoice", "Review changed decision; run Strands and inspect the 1860 EUR draft", "Before approval, add sample payment from Try new evidence before approving", "Inspect linked receipt and derived before/current balance; old draft must disappear", "Run Strands again; review fresh 1260 EUR draft and simulate approval", "Prepare, inspect, copy and download durable evidence in Workspace; reload receipt"],
      "expected outcome": "Obsolete fingerprint refused even with current revision. Review confirmation resets. Export and clipboard match durable redacted bytes; exactly one simulated receipt persists.",
      "automation mapping": "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",
      "persona": "Joiner reviewing collections after new inbox evidence",
      "preconditions": "Fresh isolated synthetic session; source candidate or explicitly identified release",
      "observed result/evidence": "SOURCE_CHECKPOINT_PASS at 6ae7ad30b150f7c7ca6937f943c2914d0c1aaa20, 2026-09-10T11:08:24Z, run34469372353. See reconciliation_revision. Current AWS status: /acceptance.html. Human signoff remains NOT_RUN.",
      "human signoff": "NOT_RUN",
      "negative/recovery case": "Old draft cannot be approved; expired, stale and non-priority cases cannot bypass the existing gate. Clipboard failure offers the same download and selectable text."
    },
    {
      "id": "AR-UAT-24",
      "requirement": "Ordinary supported file intake and evidence-backed duplicate abstention",
      "steps": ["Open a text email file in Records", "Try unsupported PDF and multipart email; inspect clear rejection", "Preview plain-text invoice and payment files, explicitly use text and submit", "Prepare draft; use Check a forwarded duplicate and submit retained Transfer ID", "Read hold and unchanged balance; resolve against original receipt with note and consent", "Reload and export evidence; original sources and resolution must remain"],
      "expected outcome": "File preview performs no intake request. Duplicate blocks preparation, makes no additional credit and creates no provider outcome. Explicit resolution retains original bytes and requires fresh draft review.",
      "automation mapping": "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",
      "persona": "Joiner checking whether a forwarded remittance is another payment",
      "preconditions": "Fresh isolated synthetic session and UTF-8 plain-text .txt/.eml inputs",
      "observed result/evidence": "SOURCE_CHECKPOINT_PASS at 6ae7ad30b150f7c7ca6937f943c2914d0c1aaa20, 2026-09-10T11:08:24Z, run34469372353. See reconciliation_revision. Current AWS status: /acceptance.html. Human signoff remains NOT_RUN.",
      "human signoff": "NOT_RUN",
      "negative/recovery case": "Empty, binary, non-UTF8, oversized, MIME and unsupported files leave editor/ledger unchanged. Late reads cannot cross sessions. A duplicate must never get an invented second identity."
    },
    {
      "id": "AR-UAT-18",
      "requirement": "Semantic payment identity and retained correction",
      "steps": [
        "Post Sample invoice",
        "Try identity refusal; submit missing Transfer ID",
        "Correct held payment with distinct supplied reference",
        "Forward same reference with changed subject; link original as duplicate",
        "Post equal amount with a different real-event reference"
      ],
      "expected outcome": "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",
      "persona": "Joiner reconciling inbox evidence",
      "preconditions": "Isolated synthetic session on candidate SHA; historical seed requires controlled CI/API fixture",
      "observed result/evidence": "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",
      "negative/recovery case": "Missing identity and duplicates hold; correction retains original; same bank event credits once; distinct equal instalments remain valid."
    },
    {
      "id": "AR-UAT-19",
      "requirement": "Supplier and sales economic direction",
      "steps": [
        "Use original issuer/customer headers with configured My Joinery identity",
        "Forward supplier Billed to: My Joinery through owner/accountant",
        "Post a genuine outbound invoice",
        "Try conflicting and unsupported threads"
      ],
      "expected outcome": "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",
      "persona": "Joiner reconciling inbox evidence",
      "preconditions": "Isolated synthetic session on candidate SHA; historical seed requires controlled CI/API fixture",
      "observed result/evidence": "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",
      "negative/recovery case": "Supplier remains payable, outbound remains receivable with correct recipient, ambiguity visibly refuses; redaction remains."
    },
    {
      "id": "AR-UAT-20",
      "requirement": "Human dispute and historical-payment resolution",
      "steps": [
        "Open a persisted session with two equal pre-upgrade receipts missing identity",
        "Read hold and original source bytes",
        "Attest distinct supplied bank references and review note",
        "Try same reference for both; it must remain held",
        "After a valid attestation, run Strands and review a fresh draft"
      ],
      "expected outcome": "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.",
      "persona": "Joiner reconciling inbox evidence",
      "preconditions": "Isolated synthetic session on candidate SHA; historical seed requires controlled CI/API fixture",
      "observed result/evidence": "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",
      "negative/recovery case": "Original posted records unchanged. Valid distinct-event attestation is additive. Suspected duplicate legacy entries need operator accounting correction; no fabricated identities or journal reversal."
    },
    {
      "id": "AR-UAT-21",
      "requirement": "Readable evidence and session-isolated recovery",
      "steps": [
        "Open History and Prepare evidence bundle",
        "Inspect source decisions, revisions, mode, hashes and limits",
        "Lose an evidence HTTP response, retry the read",
        "Start a new workspace while staying in History; old/late evidence must disappear"
      ],
      "expected outcome": "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",
      "persona": "Joiner reconciling inbox evidence",
      "preconditions": "Isolated synthetic session on candidate SHA; historical seed requires controlled CI/API fixture",
      "observed result/evidence": "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",
      "negative/recovery case": "Redacted human-readable bundle, actual revisions and outcomes, no truth/authenticity claim. New session cannot inherit old evidence."
    },
    {
      "id": "AR-UAT-22",
      "requirement": "Observed outcomes and model/evaluator contracts",
      "steps": [
        "Read Dashboard after posting, correction and resolution",
        "Inspect current mode and backend revision in History",
        "Inspect CI model factory and fresh evaluator oracle cases"
      ],
      "expected outcome": "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",
      "persona": "Joiner reconciling inbox evidence",
      "preconditions": "Isolated synthetic session on candidate SHA; historical seed requires controlled CI/API fixture",
      "observed result/evidence": "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",
      "negative/recovery case": "Actual session counts only. Human active time/benefits Unknown; public model scripted, no delivery. Exact invoice, nonempty correct recipient and amount required by evaluator."
    },
    {
      "id": "AR-UAT-01",
      "persona": "Sole-trader owner",
      "requirement": "Isolated empty workspace",
      "preconditions": "No session handle",
      "steps": [
        "Open #/queue",
        "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",
      "historical evidence scope": "Only the commits and run URLs in observed result/evidence; not acceptance of current UX.",
      "current UX verification": "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."
    },
    {
      "id": "AR-UAT-02",
      "persona": "Owner receiving client post",
      "requirement": "Exact partial payment arithmetic",
      "preconditions": "Empty synthetic workspace",
      "steps": [
        "Documents: Sample invoice → Read & post",
        "Sample payment → Read & post",
        "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",
      "historical evidence scope": "Only the commits and run URLs in observed result/evidence; not acceptance of current UX.",
      "current UX verification": "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."
    },
    {
      "id": "AR-UAT-03",
      "persona": "Owner collecting an overdue invoice",
      "requirement": "Strands remains load-bearing",
      "preconditions": "Supported invoice and payment posted",
      "steps": [
        "Action queue → Run Strands & prepare draft",
        "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",
      "historical evidence scope": "Only the commits and run URLs in observed result/evidence; not acceptance of current UX.",
      "current UX verification": "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."
    },
    {
      "id": "AR-UAT-04",
      "persona": "Owner approving collection",
      "requirement": "Exact content approval",
      "preconditions": "A current draft",
      "steps": [
        "Read recipient, subject, body and fingerprint",
        "tick review",
        "approve exact draft",
        "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",
      "historical evidence scope": "Only the commits and run URLs in observed result/evidence; not acceptance of current UX.",
      "current UX verification": "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."
    },
    {
      "id": "AR-UAT-05",
      "persona": "Owner recovering after lost connection",
      "requirement": "Retry safety and durable readback",
      "preconditions": "Current draft",
      "steps": [
        "Approve while response is dropped after actual HTTP success",
        "refresh durable state",
        "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",
      "historical evidence scope": "Only the commits and run URLs in observed result/evidence; not acceptance of current UX.",
      "current UX verification": "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."
    },
    {
      "id": "AR-UAT-06",
      "persona": "Owner arranging payment",
      "requirement": "Exact proposal approval and durable hold",
      "preconditions": "1260.00 EUR outstanding",
      "steps": [
        "Propose 2026-09-20: 600.00 EUR and 2026-10-05: 660.00 EUR",
        "inspect",
        "tick",
        "approve",
        "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",
      "historical evidence scope": "Only the commits and run URLs in observed result/evidence; not acceptance of current UX.",
      "current UX verification": "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."
    },
    {
      "id": "AR-UAT-07",
      "persona": "Owner triaging unclear post",
      "requirement": "Refusal recovery without weakening the gate",
      "preconditions": "Posted supported invoice",
      "steps": [
        "Post refusal sample",
        "see collection held",
        "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",
      "historical evidence scope": "Only the commits and run URLs in observed result/evidence; not acceptance of current UX.",
      "current UX verification": "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."
    },
    {
      "id": "AR-UAT-08",
      "persona": "Owner handling a dispute",
      "requirement": "Human escalation",
      "preconditions": "Open sales invoice",
      "steps": [
        "Enter 'I dispute this debt' as client reply",
        "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",
      "historical evidence scope": "Only the commits and run URLs in observed result/evidence; not acceptance of current UX.",
      "current UX verification": "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."
    },
    {
      "id": "AR-UAT-09",
      "persona": "Owner using a phone or keyboard",
      "requirement": "Accessible persistent navigation",
      "preconditions": "Desktop and mobile browser",
      "steps": [
        "Use all navigation links",
        "reload document deep link",
        "Tab to skip link and press Enter",
        "Use Tab, Enter and Space on the sample switcher; edit its text, then repeat with reduced motion",
        "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",
      "historical evidence scope": "Only the commits and run URLs in observed result/evidence; not acceptance of current UX.",
      "current UX verification": "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."
    },
    {
      "id": "AR-UAT-10",
      "persona": "Operator reviewing delivery evidence",
      "requirement": "Five truthful receipt states",
      "preconditions": "Activity view",
      "steps": [
        "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",
      "historical evidence scope": "Only the commits and run URLs in observed result/evidence; not acceptance of current UX.",
      "current UX verification": "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."
    },
    {
      "id": "AR-UAT-11",
      "persona": "Operator validating AWS package",
      "requirement": "Lambda and storage contract",
      "preconditions": "CI dependencies; local SQLite or fake S3 client",
      "steps": [
        "Pass API Gateway v2 events through actual handler",
        "create/read/post",
        "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",
      "historical evidence scope": "Only the commits and run URLs in observed result/evidence; not acceptance of current UX.",
      "current UX verification": "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."
    },
    {
      "id": "AR-UAT-12",
      "persona": "Owner with restricted browser settings",
      "requirement": "Bounded network and blocked storage recovery",
      "preconditions": "Storage blocked or API unresponsive",
      "steps": [
        "Open workspace",
        "read warning",
        "trigger timed-out action",
        "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",
      "historical evidence scope": "Only the commits and run URLs in observed result/evidence; not acceptance of current UX.",
      "current UX verification": "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."
    },
    {
      "id": "AR-UAT-13",
      "persona": "Sole trader reviewing daily finances on desktop or phone",
      "requirement": "Precision financial presentation without invented performance signals",
      "preconditions": "Synthetic invoice and partial receipt posted; desktop/mobile and reduced-motion settings",
      "steps": [
        "Open Action queue",
        "Read all four KPI tiles and source money tables",
        "Hover a tile with a pointer, repeat with reduced motion",
        "Check narrow-screen layout and high-contrast focus/selection",
        "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",
      "historical evidence scope": "Only the commits and run URLs in observed result/evidence; not acceptance of current UX.",
      "current UX verification": "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."
    },
    {
      "id": "AR-UAT-14",
      "persona": "Sole-trader owner",
      "requirement": "Truthful Dashboard and drilldowns",
      "preconditions": "Isolated synthetic workspace on the exact build under review",
      "steps": [
        "Post the application's invoice and payment samples in Records",
        "Open Dashboard and follow outstanding, overdue, recorded receipts and pending draft metrics",
        "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",
      "current UX verification": "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."
    },
    {
      "id": "AR-UAT-15",
      "persona": "Sole-trader owner",
      "requirement": "Persistent case selection and search focus",
      "preconditions": "Isolated synthetic workspace on the exact build under review",
      "steps": [
        "Select the recorded receipt in Workspace",
        "Navigate Dashboard; reload; return Workspace",
        "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": "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",
      "current UX verification": "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."
    },
    {
      "id": "AR-UAT-16",
      "persona": "Sole-trader owner",
      "requirement": "Backend target and late response isolation",
      "preconditions": "Isolated synthetic workspace on the exact build under review",
      "steps": [
        "Post two overdue invoices",
        "Inspect the nonpriority case; preparation must be disabled",
        "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": "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",
      "current UX verification": "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."
    },
    {
      "id": "AR-UAT-17",
      "persona": "Sole-trader owner",
      "requirement": "Expiry, consent reset and correction recovery",
      "preconditions": "Isolated synthetic workspace on the exact build under review",
      "steps": [
        "Check exact draft consent; change evidence or advance the browser clock past expiry",
        "Try a known validation refusal and correct the input",
        "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": "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",
      "current UX verification": "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."
    }
  ],
  "verification": {
    "deployment_target": "https://d2ssmv59q16d0b.cloudfront.net/",
    "deployment_status": "PASS: all 16 desktop/mobile journeys against CloudFront/Lambda/private S3, run https://github.com/upgradedev/archon-aws-strands/actions/runs/34327809017 on 2026-09-09. Tested frontend d83b611c9e3e360cefa1428d27beab0e4b4420bf; API 08fd7f8c266409891475fbc7bad878d103ec3dcc. Command: ARCHON_UI_URL=https://d2ssmv59q16d0b.cloudfront.net/ npm run test:e2e. Automated synthetic acceptance, not human signoff.",
    "evidence_level": "Pipeline — synthetic data only",
    "verified_commit": "2c2a6ce6e7322c8536b207f1cc4151fbe543e715",
    "run_url": "https://github.com/upgradedev/archon-aws-strands/actions/runs/34326637050",
    "original_python_workflow": "https://github.com/upgradedev/archon-aws-strands/actions/runs/34326637047",
    "observed_on": "2026-09-09",
    "lock": "Committed generated package-lock.json; npm ci on the verified commit",
    "results": [
      {
        "command": "python -m pytest --junitxml=frontend/artifacts/python-junit.xml --cov",
        "observed": "518 passed; 0 failed, 0 errors, 0 skipped"
      },
      {
        "command": "npm test (vitest run --coverage)",
        "observed": "25 passed; 0 failed, 0 errors, 0 skipped"
      },
      {
        "command": "npm run test:e2e (Playwright with real Python HTTP API)",
        "observed": "16 passed: 8 desktop and 8 mobile; 0 failed, 0 skipped"
      },
      {
        "command": "npm run build; python -m ruff check src tests",
        "observed": "Both passed"
      },
      {
        "command": "npm audit --json; npm audit --omit=dev --audit-level=low",
        "observed": "0 known vulnerabilities in full dependency audit; runtime audit passed"
      },
      {
        "command": "Vitest4 coverage/coverage-summary.json",
        "observed": "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"
    ],
    "artifact_contents": "dist, Python/unit/browser JUnit, measured coverage, full npm audit, desktop/mobile traces and screenshots",
    "limitations": "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",
    "release_scope": "Historical release only: verified_commit and separately named deployment_status commit. Not current Dashboard/Workspace acceptance."
  },
  "ui_polish": {
    "status": "AUTOMATION_PASS",
    "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.",
    "source_contract": "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.",
    "dependencies": "No new dependencies; APIs, types and approval mutations unchanged.",
    "verified_commit": "12814e10013e798bc9f064a0d1ef05d4365088d8",
    "run_url": "https://github.com/upgradedev/archon-aws-strands/actions/runs/34336011792",
    "observed_on": "2026-09-09",
    "results": [
      {
        "command": "npm test (Vitest measured coverage)",
        "observed": "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."
      },
      {
        "command": "python -m pytest --junitxml=frontend/artifacts/python-junit.xml --cov",
        "observed": "518 passed; 0 failures, errors or skipped tests. One existing warning."
      },
      {
        "command": "npm run test:e2e (real Python HTTP API and SQLite on GitHub Actions)",
        "observed": "20 passed: 10 desktop and 10 mobile; 0 failures, errors or skipped tests. Original 16 preserved, plus four source-evidence/selection/readability executions."
      },
      {
        "command": "npm run build; python -m ruff check src tests",
        "observed": "Both passed. Committed lock used via npm ci in GitHub Actions; no local installs, builds or test execution."
      },
      {
        "command": "npm audit --json; npm audit --omit=dev --audit-level=low",
        "observed": "Full audit reports 0 known vulnerabilities; runtime audit passed. No new dependencies or lock edits."
      }
    ],
    "artifacts": [
      "frontend-evidence-34336011792",
      "frontend-lock-34336011792"
    ],
    "screenshots": [
      "test-results/workspace-draft-ledger-bad-20a33-t-sources-without-approving-desktop/source-backed-approval.png",
      "test-results/workspace-draft-ledger-bad-20a33-t-sources-without-approving-desktop/precision-ledger-kpis.png",
      "test-results/workspace-sample-sliding-p-a4be8--reduced-motion-preferences-desktop/selected-sample-pill.png",
      "test-results/workspace-draft-ledger-bad-20a33-t-sources-without-approving-mobile/source-backed-approval.png",
      "test-results/workspace-draft-ledger-bad-20a33-t-sources-without-approving-mobile/precision-ledger-kpis.png",
      "test-results/workspace-sample-sliding-p-a4be8--reduced-motion-preferences-mobile/selected-sample-pill.png"
    ],
    "visual_review": "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.",
    "failure_resolution": "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.",
    "limitations": "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.",
    "human_signoff": "NOT_RUN",
    "release_scope": "Historical release only: 12814e10013e798bc9f064a0d1ef05d4365088d8. Not current Dashboard/Workspace acceptance."
  },
  "current_workspace_revision": {
    "status": "AUTOMATION_PASS",
    "scope": "Dashboard, selected collections Workspace, filtered Records and History. Frontend only; API/backend contracts unchanged.",
    "evidence_source": "Exact branch GitHub Actions artifacts; deployed frontend /release.json and API /api/health. Historical verification blocks below cover only their named commits.",
    "human_signoff": "NOT_RUN",
    "live_aws_acceptance": "NOT_RUN for this UX revision; parent owns merge and release",
    "screenshots": "Successful Dashboard metrics journey attaches dashboard.png and selected-workspace.png in both Playwright projects. ui-screenshots-<run_id> is PNG-only; full evidence remains unchanged.",
    "verified_implementation_commit": "9a6bfe6adfd79cda9b20d67fdb5e39bfa155168c",
    "run_url": "https://github.com/upgradedev/archon-aws-strands/actions/runs/34356632094",
    "results": {
      "frontend_unit": "49 passed (npm test)",
      "python": "518 passed (python -m pytest --cov)",
      "browser": "30 passed (npm run test:e2e; real HTTP; desktop and mobile)",
      "hosting_contract": "11 hosting + 4 API stack + 8 release workflow tests printed by https://github.com/upgradedev/archon-aws-strands/actions/runs/34356809399"
    },
    "scope_note": "This checked-in evidence is pinned to the named implementation commit. Subsequent documentation commits require their own green CI. It does not claim live deployment or human acceptance."
  }
}
