QA System — Before / After

The robust QA platform: page-by-page coverage, machine runs ahead, human always adjudicates. The AFTER diagram keeps every BEFORE box in place — new components are green, upgraded ones amber, so the overlay reads at a glance.

exists today — kept exists — upgraded newly forged

Before — what runs today

flowchart LR
  T["Tester (human)
runs scripted packs manually"] TR["Tracker app
persona task packs · ticks"] APP["App under test (staging)
version: unknown"] W["Bug widget
screenshot · console · network
rrweb replay · voice"] BW["Bug worker
sync Jira filing (8s, 502s)
hash auto-merge dk-/tp-"] J["Jira board
report+bug+fix in one ticket"] D["Developers"] RL["Railway backend logs
(disconnected island)"] RP["Retest page
hand-written JSON"] TR --> T T --> APP APP --> W W --> BW BW --> J J --> D D -."manual copy of steps".- RP RP -.-> T classDef keep fill:#E4EBF0,stroke:#8FA3B3,color:#33475B classDef island fill:#E4EBF0,stroke:#8FA3B3,color:#33475B,stroke-dasharray:5 4 class T,TR,APP,W,BW,J,D,RP keep class RL island

Pain lives in the grey: auto-merge buries reports, backend logs never reach the ticket, Jira progress never reaches the tester, and the human does the machine's job (scripted sweeps).

After — same skeleton, new muscle

flowchart LR
  subgraph TESTSIDE["Test side"]
    AGENT["Agent executor
runs packs page-by-page
span-per-action + video"] CON["Reconcile console
findings only: issue / pass / discuss
Take-Over button"] T2["Tester (human)
exploratory + adjudication"] TR2["Tracker app
packs + custom tasks (inline +)
+ retest tasks + live status bars"] end APP2["App under test
+ build stamp + update toast"] W2["Bug widget
(as is — already strong)"] subgraph PIPE["Report pipeline"] BW2["Bug worker
instant ack · queue · retries
auto-merge OFF → flags only"] LOGS["Log fetcher
±2 min around failure timestamp
identity-filtered"] LLM["LLM reconciler
%-similarity per prior report
what's-NEW · close/check notes"] end J2["Jira board
one ticket per report + links"] HG["Human gate
severity + merge approvals"] D2["Developers
ticket arrives armed"] RL2["Railway backend logs"] WH["Jira webhooks
status timeline stream"] TR2 --> AGENT AGENT --> APP2 AGENT --> CON CON --> T2 T2 -->|exploratory| APP2 T2 -->|verdicts| TR2 APP2 --> W2 W2 --> BW2 BW2 --> LOGS RL2 --> LOGS LOGS --> LLM LLM --> J2 LLM --> HG HG --> J2 J2 --> D2 J2 --> WH WH --> TR2 classDef keep fill:#E4EBF0,stroke:#8FA3B3,color:#33475B classDef new fill:#17A67D,stroke:#0E7D5D,color:#FFFFFF classDef changed fill:#FBEED2,stroke:#D99A2B,color:#5B4A1E class W2,D2,RL2 keep class APP2,BW2,TR2,J2 changed class AGENT,CON,LLM,LOGS,WH,HG,T2 new

Read it as the overlay: tracker, widget, worker, Jira, devs all stay where they were. Green is the forge-work; amber is surgery on what we own.

Build map — extend vs forge

ComponentActionWhat happensForged from
App build stamp + toastextendVersion in every report; "new version — refresh" prompt kills ghost bugsenv var + existing service worker
Bug workerextendInstant ack, queued Jira filing with retries; auto-merge → duplicate flagsour worker (zero-dep) + CF Queues
Log fetcherforge±2 min of backend logs around the failure's own timestamp, filtered to the testerRailway API + widget's network capture
LLM reconcilerforgePer-report notes: % match vs prior reports (incl. fixed), what's-NEW, close/check recommendation with trailpgvector (our Postgres) + one Claude call; trIAge (OSS) as reference
Agent executorforgeRuns the persona packs page-by-page, evidence per step, video per sessionPlaywright (ours) + browser-use (OSS) + computer-use for free-form steps
Reconcile consoleforgeHuman watches live, verdicts on findings only (issue / pass / discuss), Take-Overour tracker UI + span-per-action pattern
Tracker task systemextendInline "+" custom tasks · auto retest tasks · live Jira status bars per taskour D1 schema + Jira webhooks
Bug widgetextendAdds build number; replay/console/network capture already battle-readyours (rrweb replay already recording)

Later layer (production phase, parked by design): machine-first discovery (error tracking, canary) and AI fix-to-merge flows. Nothing above depends on them.