diff --git a/README.md b/README.md index 6934479..25bc46c 100644 --- a/README.md +++ b/README.md @@ -7,10 +7,10 @@ that collects evidence and reusable method for AI-assisted quality engineering i The homepage includes two audience presentations: -- [Executive strategic vision](https://tomqwu.github.io/ai_qe/briefings/evp/): 25 slides on +- [Executive strategic vision](https://tomqwu.github.io/ai_qe/briefings/evp/): 26 slides on industry outlook, strategic vision, value, ownership and capability expansion. - [Technical delivery architecture](https://tomqwu.github.io/ai_qe/briefings/technical/): - 35 slides on context, test validity, evaluation, agent controls, deployment, recovery and integration. + 36 slides on context, test validity, evaluation, agent controls, deployment, recovery and integration. These are research-informed perspectives and a proposed architecture, not measured bank results. @@ -60,7 +60,7 @@ the site edition; source review dates remain attached to their individual resear ## Maintaining the briefings -The [fintech case explorer](https://tomqwu.github.io/ai_qe/case-studies/fintech/) has its own 19-slide executive and 30-slide technical decks. `_data/fintech_case.json` holds the fictional assumptions, workflow, sources and maturity profiles. `_data/fintech_decks.json` holds the slide narratives; `_includes/fintech/` contains their editable diagrams and shared layouts. Keep this illustrative case distinct from observed industry findings. +The [fintech case explorer](https://tomqwu.github.io/ai_qe/case-studies/fintech/) has its own 21-slide executive and 33-slide technical decks. `_data/fintech_case.json` holds the fictional assumptions, workflow, sources and maturity profiles. `_data/fintech_decks.json` holds the slide narratives; `_includes/fintech/` contains their editable diagrams and shared layouts. Keep this illustrative case distinct from observed industry findings. Run `node tools/export_decks.cjs --fintech` against the preview to export the case PDFs. The edition in the case data, deck front matter and `fintech_edition` release field must agree. Run `node tools/fintech-browser-test.cjs` and `python tools/verify_fintech.py _site` after the build. `npm test` includes capacity and payment-model checks. The browser case is a deterministic teaching model; it does not connect to a payment service or invoke the example QA frameworks. @@ -233,3 +233,5 @@ Fintech decks accept `?route=client#slide-N` for a curated sequence. Original an ## AI adoption roadmap `_data/ai_adoption.json` defines four capability layers, PAY-142 examples, authority boundaries, prerequisites, evidence gates and reviewed primary sources. `/ai-adoption/` provides an interactive leadership view; the same native diagrams appear on fintech executive slide 17 and technical slide 28. Layer 4 supports reuse of layers 1–3; shared foundations start at every layer and agent authority is optional. This is an authored roadmap, not a client maturity assessment. Run `node tools/ai-adoption-browser-test.cjs` for selection, history, readiness links, responsive layout, search and no-JavaScript access. + +The banking AI walkthrough uses `_data/qe_journey.json` for nine explicit handoffs and the three-state comparison. Caption-anchored profiles in `assets/data/narration-flows.json` synchronize the same visuals on pages and slides. The QA effort model retains its eight stages; developer unit work has no added savings assumption. diff --git a/_data/briefing_room.json b/_data/briefing_room.json index 550d942..68f1126 100644 --- a/_data/briefing_room.json +++ b/_data/briefing_room.json @@ -9,7 +9,7 @@ "url": "/briefings/fintech-evp/", "pdf_prefix": "ai-qe-fintech-evp", "edition": "fintech_edition", - "slides": 19, + "slides": 21, "time": "25–30 min", "outline": [ "The payment story and manual-work baseline", @@ -22,7 +22,8 @@ "Before / after: manual API work and the target pilot workflow", "Observed time framework for the API pilot and brainstorm questions", "Four AI adoption layers: individual copilots, connected workflows, bounded agents and shared platform services", - "Before/after architecture and outcomes beyond hours · slides 18–19" + "Before/after architecture and outcomes beyond hours · slides 18–19", + "AI contribution and artifact handoffs · slides 20–21" ] }, { @@ -35,7 +36,7 @@ "url": "/briefings/fintech-technical/", "pdf_prefix": "ai-qe-fintech-technical", "edition": "fintech_edition", - "slides": 30, + "slides": 33, "time": "35–45 min", "outline": [ "System boundaries and payment API contract · slides 1–5", @@ -43,7 +44,8 @@ "Failure injection, readiness proof and promotion rules · slides 13–19", "Virtualization, deployment and candidate validation · slides 20–25", "Adapter contracts, before/after and AI integration layers · slides 26–28", - "Before/after architecture and outcomes beyond hours · slides 27, 29–30" + "Before/after architecture and outcomes beyond hours · slides 27, 29–30", + "Nine-step workflow, artifact trace and three-state comparison · slides 31–33" ] }, { @@ -56,7 +58,7 @@ "url": "/briefings/evp/", "pdf_prefix": "ai-qe-evp", "edition": "slide_edition", - "slides": 25, + "slides": 26, "time": "30–40 min", "outline": [ "Vision and value · slides 1–5", @@ -64,7 +66,8 @@ "Roadmap, leadership and proof · slides 15–21", "Client adoption assumptions and foundation ownership", "QE modernization, repeatable environments and virtual services", - "Financial-services evidence and a focused client trial" + "Financial-services evidence and a focused client trial", + "AI-assisted banking QE: end-to-end workflow · final slide" ] }, { @@ -77,7 +80,7 @@ "url": "/briefings/technical/", "pdf_prefix": "ai-qe-technical", "edition": "slide_edition", - "slides": 35, + "slides": 36, "time": "45–60 min", "outline": [ "Architecture, context and test validity · slides 1–12", @@ -85,7 +88,8 @@ "Integration, delivery and failure resolution · slides 22–29", "Client adoption assumptions and foundation ownership", "QE modernization, repeatable environments and virtual services", - "Financial-services evidence and a focused client trial" + "Financial-services evidence and a focused client trial", + "AI-assisted banking QE: end-to-end workflow · final slide" ] } ] diff --git a/_data/fintech_case.json b/_data/fintech_case.json index b61bbc1..9b1db7f 100644 --- a/_data/fintech_case.json +++ b/_data/fintech_case.json @@ -1,5 +1,5 @@ { - "edition": "1.16.1", + "edition": "1.22.0", "reviewed": "2026-09-07", "adoptionAssumptions": "/platform-readiness/?preset=harbor", "company": "Our Banking Client", diff --git a/_data/fintech_decks.json b/_data/fintech_decks.json index ed4b2ad..7b44f6b 100644 --- a/_data/fintech_decks.json +++ b/_data/fintech_decks.json @@ -56,14 +56,14 @@ "chapter": "The proposed change" }, { - "title": "Before / after: the API testing workflow", + "title": "Before / after: separate modernization from AI", "visual": "before-after", "lead": "", "rows": null, "columns": null, "points": null, - "note": "Pilot target; validate foundations and measure effort, review, rework and quality before claiming gains.", - "sources": "S1,S2,S5,S6,S7", + "note": "Same payment scope. The two target states are proposed; no productivity or quality improvement has been measured.", + "sources": "AL1,AL2,S5,S6,S7", "chapter": "" }, { @@ -253,6 +253,28 @@ "note": "Business aims: fewer escaped payment defects and emergency fixes. These proposed pilot measures do not establish those outcomes.", "sources": "QO1,QO2", "chapter": "Architecture and outcomes" + }, + { + "title": "What AI contributes, from requirement to release", + "visual": "ai-journey", + "lead": "", + "rows": null, + "columns": null, + "points": null, + "note": "PAY-142 is an authored scenario. Each AI output needs review; test runners execute and people decide.", + "sources": "AL1,AL2,S5,S6,S7", + "chapter": "AI through the release" + }, + { + "title": "Follow one payment test through the handoffs", + "visual": "artifact-trace", + "lead": "", + "rows": null, + "columns": null, + "points": null, + "note": "Illustrative artifacts and outcomes. Preserve failed evidence; a passing retest alone does not approve release.", + "sources": "AL1,AL2,S5,S6,S7", + "chapter": "AI through the release" } ], "technical": [ @@ -360,6 +382,10 @@ "visual": null, "lead": "", "rows": [ + [ + "Developer unit", + "Copilot drafts JUnit tests for idempotency logic; developers review. A fake repository cannot prove real payment integration." + ], [ "Service and API", "REST Assured + JUnit. Cover retry, concurrent requests, idempotency conflicts and journal outcomes." @@ -383,7 +409,7 @@ ], "points": null, "note": "Test distribution follows behavior and observability. A new browser framework does not solve a shared settlement environment.", - "sources": "S6,S8", + "sources": "AL1,S6,S8", "chapter": "" }, { @@ -734,6 +760,39 @@ "sources": "QO2", "chapter": "Outcomes beyond hours", "metric_role": "supporting" + }, + { + "title": "Nine AI-assisted steps, with explicit handoffs", + "visual": "ai-journey", + "lead": "", + "rows": null, + "columns": null, + "points": null, + "note": "AI drafts; reviewers approve; CI executes. Context, artifacts and evidence remain versioned.", + "sources": "AL1,AL2,S5,S6,S7", + "chapter": "AI through the release" + }, + { + "title": "PAY-142: requirement, test, failure, fix and proof", + "visual": "artifact-trace", + "lead": "", + "rows": null, + "columns": null, + "points": null, + "note": "Authored trace IDs. Fixed assertions: original transfer ID, one journal, payer 90000 and recipient 10000 minor units.", + "sources": "AL1,AL2,S5,S6,S7", + "chapter": "AI through the release" + }, + { + "title": "Three states: isolate the incremental AI contribution", + "visual": "before-after", + "lead": "", + "rows": null, + "columns": null, + "points": null, + "note": "Compare equivalent payment packs. Retain real-provider checks and measure review, rework and platform overhead.", + "sources": "AL1,AL2,S5,S6,S7", + "chapter": "AI through the release" } ] } diff --git a/_data/qe_journey.json b/_data/qe_journey.json new file mode 100644 index 0000000..11497c6 --- /dev/null +++ b/_data/qe_journey.json @@ -0,0 +1,560 @@ +{ + "disclosure": "Authored PAY-142 walkthrough for Our Banking Client. Proposed capabilities and sample artifacts; no live bank integration or measured result.", + "figures": { + "qe-journey": { + "nodes": [ + { + "id": "intent", + "title": "01 / Understand the change", + "lines": [ + "Clarify retry behavior", + "PAY-142 · accepted criteria" + ], + "technical": [ + "Story + contract + prior defects", + "Clarification questions → AC-142" + ], + "owner": "Product owner + domain QA", + "before": "Copy the story; chase ambiguous retry rules.", + "detail": "AI drafts questions about a timeout after acceptance. The product owner confirms that the same key and payload return the original transfer.", + "input": "Approved PAY-142 revision + payment contract", + "artifact": "AC-142: retry must preserve the transfer ID and create no second posting.", + "x": 12, + "y": 12 + }, + { + "id": "design", + "title": "02 / Design test cases", + "lines": [ + "Draft scenarios and boundaries", + "MATRIX-142 · reviewed cases" + ], + "technical": [ + "Accepted criteria + risk history", + "Scenario matrix → CASE-142-R" + ], + "owner": "Domain QA", + "before": "Assemble spreadsheet cases and check gaps by hand.", + "detail": "AI proposes normal, timeout, duplicate callback, concurrent retry and conflicting-payload cases. Domain QA defines expected results independently.", + "input": "AC-142", + "artifact": "CASE-142-R: timeout after acceptance; retry same key; expect one transfer.", + "x": 402, + "y": 12 + }, + { + "id": "unit", + "title": "03 / Draft unit tests", + "lines": [ + "Test retry and dedupe logic", + "UNIT-142 · developer review" + ], + "technical": [ + "Service source + approved behavior", + "JUnit candidate → reviewed unit test" + ], + "owner": "Application developer", + "before": "Developers handwrite unit tests; QA finds missing behavior later.", + "detail": "AI drafts a unit test for the idempotency handler. The developer reviews the fake repository and verifies repeated calls do not create a second transfer. This does not prove integration.", + "input": "AC-142 + handler source", + "artifact": "JUnit: create twice with the same key; verify one repository insertion.", + "x": 792, + "y": 12 + }, + { + "id": "code", + "title": "04 / Build API / UI tests", + "lines": [ + "Turn cases into test code", + "PR-142 · reviewed test commit" + ], + "technical": [ + "Matrix + helpers + API contract", + "REST Assured / Playwright → PR-142" + ], + "owner": "Automation engineer + domain QA", + "before": "Handwrite requests, selectors, assertions and helpers.", + "detail": "AI drafts API tests and selected UI checks. Reviewers reject a status-only assertion and require the original transfer ID, one journal and agreed balances.", + "input": "CASE-142-R + reviewed test patterns", + "artifact": "PR-142: API assertions for transfer ID, journal count and balances; UI pending/retry state.", + "x": 792, + "y": 160 + }, + { + "id": "fixtures", + "title": "05 / Prepare data and stubs", + "lines": [ + "Draft isolated test inputs", + "FIX-142 + STUB-142 · validated" + ], + "technical": [ + "Synthetic accounts + provider contract", + "Seed scripts + WireMock mappings" + ], + "owner": "Data / platform engineer", + "before": "Find usable accounts; book vendor slots; wait for shared resets.", + "detail": "AI drafts seed scripts and timeout mappings. Engineers validate fixtures and the provider model; containers and CI create repeatable runs. Real-provider checks still need vendor slots.", + "input": "Known balances + provider behavior", + "artifact": "FIX-142: payer 100000, recipient 0 minor units; STUB-142: accept then timeout.", + "x": 402, + "y": 160 + }, + { + "id": "run", + "title": "06 / Select and run tests", + "lines": [ + "Recommend affected coverage", + "RUN-142 · runner verdict" + ], + "technical": [ + "Approved commit + mandatory suite", + "Azure Pipelines → JUnit XML + traces" + ], + "owner": "DevOps + application QA", + "before": "Run manual regression packs, collect screenshots and queue reruns.", + "detail": "AI recommends affected tests or requests an authorized pipeline. Azure Pipelines and test runners execute approved tests. Required payment coverage cannot be silently omitted.", + "input": "PR-142 + FIX-142 + STUB-142", + "artifact": "RUN-142: immutable build, test, fixture and stub versions; raw assertion results.", + "x": 12, + "y": 160 + }, + { + "id": "triage", + "title": "07 / Investigate failures", + "lines": [ + "Link evidence to a hypothesis", + "DEF-142 · reviewed diagnosis" + ], + "technical": [ + "Assertion + trace + journal evidence", + "Evidence-linked defect draft" + ], + "owner": "QA lead + application developer", + "before": "Compare logs across systems and reconstruct the failure.", + "detail": "AI groups related failures and proposes duplicate posting as a cause, linking the assertion and journal evidence. A person confirms the diagnosis; AI cannot rewrite the failing verdict.", + "input": "RUN-142 failing assertion + trace", + "artifact": "DEF-142: expected 1 journal; observed 2 in the injected-defect example.", + "x": 12, + "y": 308 + }, + { + "id": "repair", + "title": "08 / Repair and retest", + "lines": [ + "Propose reviewed changes", + "RERUN-143 · fresh proof" + ], + "technical": [ + "Reviewed defect + source + tests", + "Approved fix → fresh required suite" + ], + "owner": "Developer + QA reviewer", + "before": "Coordinate fixes, reset shared data and wait for another test slot.", + "detail": "AI can propose a repair. The developer reviews the production change; test expectations stay fixed. CI performs a fresh run and challenges the tests with the duplicate-posting variant.", + "input": "Confirmed DEF-142 + reviewed fix", + "artifact": "RERUN-143: corrected build passes; deliberately faulty variant must still fail.", + "x": 402, + "y": 308 + }, + { + "id": "evidence", + "title": "09 / Review release evidence", + "lines": [ + "Summarize gaps and retain cases", + "PACK-142 · human decision" + ], + "technical": [ + "Raw runs + coverage + dispositions", + "Evidence pack + regression case" + ], + "owner": "Release owner + QA lead", + "before": "Reconcile screenshots and spreadsheets; chase approvals.", + "detail": "AI drafts a release summary and suggests reviewed defects for regression. Owners inspect required coverage, real-provider checks and unresolved gaps before deciding.", + "input": "RUN-142 + RERUN-143 + integration evidence", + "artifact": "PACK-142: retain the failed run, repaired run, review and remaining release gates.", + "x": 792, + "y": 308 + } + ], + "flows": [ + { + "node": "intent", + "title": "01 / Understand the change", + "detail": "AI drafts questions about a timeout after acceptance. The product owner confirms that the same key and payload return the original transfer.", + "routes": [] + }, + { + "node": "design", + "title": "02 / Design test cases", + "detail": "AI proposes normal, timeout, duplicate callback, concurrent retry and conflicting-payload cases. Domain QA defines expected results independently.", + "routes": [ + "intent:design" + ] + }, + { + "node": "unit", + "title": "03 / Draft unit tests", + "detail": "AI drafts a unit test for the idempotency handler. The developer reviews the fake repository and verifies repeated calls do not create a second transfer. This does not prove integration.", + "routes": [ + "design:unit" + ] + }, + { + "node": "code", + "title": "04 / Build API / UI tests", + "detail": "AI drafts API tests and selected UI checks. Reviewers reject a status-only assertion and require the original transfer ID, one journal and agreed balances.", + "routes": [ + "unit:code" + ] + }, + { + "node": "fixtures", + "title": "05 / Prepare data and stubs", + "detail": "AI drafts seed scripts and timeout mappings. Engineers validate fixtures and the provider model; containers and CI create repeatable runs. Real-provider checks still need vendor slots.", + "routes": [ + "code:fixtures" + ] + }, + { + "node": "run", + "title": "06 / Select and run tests", + "detail": "AI recommends affected tests or requests an authorized pipeline. Azure Pipelines and test runners execute approved tests. Required payment coverage cannot be silently omitted.", + "routes": [ + "fixtures:run" + ] + }, + { + "node": "triage", + "title": "07 / Investigate failures", + "detail": "AI groups related failures and proposes duplicate posting as a cause, linking the assertion and journal evidence. A person confirms the diagnosis; AI cannot rewrite the failing verdict.", + "routes": [ + "run:triage" + ] + }, + { + "node": "repair", + "title": "08 / Repair and retest", + "detail": "AI can propose a repair. The developer reviews the production change; test expectations stay fixed. CI performs a fresh run and challenges the tests with the duplicate-posting variant.", + "routes": [ + "triage:repair" + ] + }, + { + "node": "evidence", + "title": "09 / Review release evidence", + "detail": "AI drafts a release summary and suggests reviewed defects for regression. Owners inspect required coverage, real-provider checks and unresolved gaps before deciding.", + "routes": [ + "repair:evidence" + ] + } + ], + "height": 454, + "caption": "Nine steps, one payment scenario. AI drafts or recommends; engineers review; CI executes; release owners decide.", + "node_height": 120, + "edges": [ + { + "from": "intent", + "to": "design", + "d": "M372 72.0H399" + }, + { + "from": "design", + "to": "unit", + "d": "M762 72.0H789" + }, + { + "from": "unit", + "to": "code", + "d": "M972 132V157" + }, + { + "from": "code", + "to": "fixtures", + "d": "M792 220.0H765" + }, + { + "from": "fixtures", + "to": "run", + "d": "M402 220.0H375" + }, + { + "from": "run", + "to": "triage", + "d": "M192 280V305" + }, + { + "from": "triage", + "to": "repair", + "d": "M372 368.0H399" + }, + { + "from": "repair", + "to": "evidence", + "d": "M762 368.0H789" + } + ] + }, + "qe-artifact-trace": { + "nodes": [ + { + "id": "criteria", + "title": "01 / Approved intent", + "lines": [ + "PAY-142 → AC-142", + "Same-key retry = one transfer" + ], + "technical": [ + "Input: accepted contract", + "AC-142 → CASE-142-R" + ], + "x": 12, + "y": 12 + }, + { + "id": "candidate", + "title": "02 / AI candidate", + "lines": [ + "Status-only test rejected", + "PR-142 adds money assertions" + ], + "technical": [ + "UNIT-142 + PR-142", + "One insert + one journal + balances" + ], + "x": 402, + "y": 12 + }, + { + "id": "failed", + "title": "03 / Challenge the test", + "lines": [ + "RUN-142 · injected defect", + "Expected 1 journal; observed 2" + ], + "technical": [ + "FIX-142 + STUB-142", + "JUnit FAIL → trace + journal IDs" + ], + "x": 792, + "y": 12 + }, + { + "id": "diagnosis", + "title": "04 / Investigate and repair", + "lines": [ + "DEF-142 links the evidence", + "Human approves the proposed fix" + ], + "technical": [ + "RUN-142 → DEF-142 → fix commit", + "AI hypothesis; reviewer confirms" + ], + "x": 792, + "y": 162 + }, + { + "id": "retest", + "title": "05 / Fresh retest", + "lines": [ + "RERUN-143 · retained evidence", + "Correct build passes; mutant fails" + ], + "technical": [ + "New run ID; unchanged oracle", + "Original failed run remains stored" + ], + "x": 402, + "y": 162 + }, + { + "id": "decision", + "title": "06 / Release review", + "lines": [ + "PACK-142 links both runs", + "Owner checks remaining gates" + ], + "technical": [ + "Coverage + dispositions + source IDs", + "Real-provider evidence still required" + ], + "x": 12, + "y": 162 + } + ], + "flows": [ + { + "node": "criteria", + "title": "01 / Approved intent", + "detail": "PAY-142 → AC-142 · Same-key retry = one transfer", + "routes": [] + }, + { + "node": "candidate", + "title": "02 / AI candidate", + "detail": "Status-only test rejected · PR-142 adds money assertions", + "routes": [ + "criteria:candidate" + ] + }, + { + "node": "failed", + "title": "03 / Challenge the test", + "detail": "RUN-142 · injected defect · Expected 1 journal; observed 2", + "routes": [ + "candidate:failed" + ] + }, + { + "node": "diagnosis", + "title": "04 / Investigate and repair", + "detail": "DEF-142 links the evidence · Human approves the proposed fix", + "routes": [ + "failed:diagnosis" + ] + }, + { + "node": "retest", + "title": "05 / Fresh retest", + "detail": "RERUN-143 · retained evidence · Correct build passes; mutant fails", + "routes": [ + "diagnosis:retest" + ] + }, + { + "node": "decision", + "title": "06 / Release review", + "detail": "PACK-142 links both runs · Owner checks remaining gates", + "routes": [ + "retest:decision" + ] + } + ], + "height": 310, + "caption": "An illustrative failure-to-fix trace. A deliberately faulty build must fail; a passing retest alone is not release approval.", + "node_height": 120, + "edges": [ + { + "from": "criteria", + "to": "candidate", + "d": "M372 72.0H399" + }, + { + "from": "candidate", + "to": "failed", + "d": "M762 72.0H789" + }, + { + "from": "failed", + "to": "diagnosis", + "d": "M972 132V159" + }, + { + "from": "diagnosis", + "to": "retest", + "d": "M792 222.0H765" + }, + { + "from": "retest", + "to": "decision", + "d": "M402 222.0H375" + } + ] + }, + "qe-three-states": { + "nodes": [ + { + "id": "manual", + "title": "01 / Manual QE", + "lines": [ + "Copy cases and run by hand", + "Shared data + scarce vendor slots", + "Reconcile screenshots and logs" + ], + "technical": [ + "Manual API requests / spreadsheets", + "Shared environments; no provider model", + "QA collects and reconciles evidence" + ], + "x": 12, + "y": 15, + "measure": "Establish the baseline", + "measure_detail": "Active work · vendor waits · coverage gaps" + }, + { + "id": "modernized", + "title": "02 / Modernized QE", + "lines": [ + "Reviewed automated tests", + "Isolated data + virtual services", + "CI retains repeatable run evidence" + ], + "technical": [ + "REST Assured / JUnit + CI", + "Testcontainers + validated WireMock", + "Raw assertions, traces and run IDs" + ], + "x": 402, + "y": 15, + "measure": "Prove repeatability", + "measure_detail": "Environment readiness · reruns · raw evidence" + }, + { + "id": "assisted", + "title": "03 / AI-assisted QE", + "lines": [ + "Draft cases, code and fixtures", + "Suggest scope, diagnosis and repair", + "Summarize proof for human review" + ], + "technical": [ + "Approved context → AI candidates", + "Reviewed PRs → existing CI runners", + "Evidence → AI summary → owner" + ], + "x": 792, + "y": 15, + "measure": "Isolate added AI value", + "measure_detail": "Candidate acceptance · review · rework" + } + ], + "flows": [ + { + "node": "manual", + "title": "01 / Manual QE", + "detail": "Copy cases and run by hand · Shared data + scarce vendor slots · Reconcile screenshots and logs", + "routes": [] + }, + { + "node": "modernized", + "title": "02 / Modernized QE", + "detail": "Reviewed automated tests · Isolated data + virtual services · CI retains repeatable run evidence", + "routes": [ + "manual:modernized" + ] + }, + { + "node": "assisted", + "title": "03 / AI-assisted QE", + "detail": "Draft cases, code and fixtures · Suggest scope, diagnosis and repair · Summarize proof for human review", + "routes": [ + "modernized:assisted" + ] + } + ], + "height": 205, + "caption": "Compare the same payment scope. Modernization removes execution bottlenecks; assess incremental AI value against that repeatable baseline.", + "node_height": 175, + "edges": [ + { + "from": "manual", + "to": "modernized", + "d": "M372 102.5H399" + }, + { + "from": "modernized", + "to": "assisted", + "d": "M762 102.5H789" + } + ] + } + } +} diff --git a/_data/release.yml b/_data/release.yml index 4139519..442425d 100644 --- a/_data/release.yml +++ b/_data/release.yml @@ -1,7 +1,7 @@ -version: "1.21.2" -slide_edition: "1.12.2" -fintech_edition: "1.16.1" +version: "1.22.0" +slide_edition: "1.22.0" +fintech_edition: "1.22.0" updated: "2026-09-09" -latest_change: "The 3D platform has a higher, more balanced camera view, proportional framing at every screen size and a complete zoom-and-angle reset." +latest_change: "Follow AI through nine banking QE steps, distinguish modernization from AI, and trace one test from requirement to release with synchronized narration and captions." questionnaire_edition: "4" research_edition: "1.7.0" diff --git a/_data/visual_story.json b/_data/visual_story.json index 52f56bb..d324fea 100644 --- a/_data/visual_story.json +++ b/_data/visual_story.json @@ -211,37 +211,42 @@ "routes": { "evp": [ 1, - 15, 3, + 20, 6, + 21, 18, 19, 17, 5, 13, 14, + 15, 16, 10, 12 ], "technical": [ 1, - 27, - 3, + 31, + 33, + 32, 4, - 5, + 9, + 6, 7, 8, 10, 11, 12, + 27, + 3, + 28, 29, 30, - 16, 21, 25, 26, - 28, 19, 18 ] diff --git a/_includes/fintech/ai-journey.html b/_includes/fintech/ai-journey.html new file mode 100644 index 0000000..fbf9e55 --- /dev/null +++ b/_includes/fintech/ai-journey.html @@ -0,0 +1 @@ +{% include fintech/journey-figure.html name="qe-journey" %} diff --git a/_includes/fintech/artifact-trace.html b/_includes/fintech/artifact-trace.html new file mode 100644 index 0000000..5bc35ec --- /dev/null +++ b/_includes/fintech/artifact-trace.html @@ -0,0 +1 @@ +{% include fintech/journey-figure.html name="qe-artifact-trace" %} diff --git a/_includes/fintech/before-after.html b/_includes/fintech/before-after.html index 16553f6..79b2670 100644 --- a/_includes/fintech/before-after.html +++ b/_includes/fintech/before-after.html @@ -1,11 +1 @@ -{% assign comparison = site.data.visual_story.api_comparison %} -
-
{{ comparison.intent }}
-
- {% assign sides = 'before,after' | split: ',' %}{% for side in sides %}{% assign lane = comparison[side] %} -

{{ lane.title }}

    {% for step in lane.steps %}
  1. {{ step.title }}{% if page.case_audience == 'technical' %}{{ step.stack }}{% else %}{{ step.description }}{% if page.layout != 'deck' %}{{ step.stack }}{% endif %}{% endif %}
  2. {% endfor %}
- {% endfor %} -
-

{% if page.layout == 'deck' %}{{ comparison.slide_dependency }}{% else %}{{ comparison.dependency }}{% endif %}

-
{{ comparison.disclosure }}
-
+{% include fintech/journey-figure.html name="qe-three-states" %} diff --git a/_includes/fintech/briefing-embed.html b/_includes/fintech/briefing-embed.html index b73beb0..f04f4a7 100644 --- a/_includes/fintech/briefing-embed.html +++ b/_includes/fintech/briefing-embed.html @@ -3,7 +3,7 @@ ExecutiveFintech strategic vision{{ site.data.fintech_decks.evp.size }} slides · 25–30 minutes Technical SDs & leadsBanking QE engineering blueprint{{ site.data.fintech_decks.technical.size }} slides · 35–45 minutes - +

Open the deck for a full presentation view.

Open fintech strategic vision ↗
diff --git a/_includes/fintech/journey-figure.html b/_includes/fintech/journey-figure.html new file mode 100644 index 0000000..acbdd16 --- /dev/null +++ b/_includes/fintech/journey-figure.html @@ -0,0 +1,24 @@ +{% assign journey = site.data.qe_journey.figures[include.name] %} +
+ +
+ + + {% for edge in journey.edges %}{% endfor %} + {% for node in journey.nodes %} + + + {{ node.title | escape }} + {% assign lines = node.lines %}{% if page.case_audience == 'technical' or page.narration_deck == 'industry-technical' or include.technical %}{% assign lines = node.technical %}{% endif %} + {% for line in lines %}{{ line | escape }}{% endfor %} + + {% endfor %} + +
+ {% if include.name == "qe-three-states" %}
{% for node in journey.nodes %}
{{ node.measure }}{{ node.measure_detail }}
{% endfor %}
{% endif %} +
{{ journey.caption }}
+
diff --git a/_includes/head_custom.html b/_includes/head_custom.html index 38c1b2e..4a00f22 100644 --- a/_includes/head_custom.html +++ b/_includes/head_custom.html @@ -34,6 +34,7 @@ {% if page.fintech_evidence %}{% endif %} + {% unless page.readiness %}{% endunless %} diff --git a/_layouts/deck.html b/_layouts/deck.html index e9aff67..5b754aa 100644 --- a/_layouts/deck.html +++ b/_layouts/deck.html @@ -28,6 +28,7 @@ + {% if page.fintech and page.case_audience == "technical" %}{% endif %} {% if page.fintech %}{% endif %} diff --git a/assets/audio/banking-journey-v1.22.0/evp/slide-20.mp3 b/assets/audio/banking-journey-v1.22.0/evp/slide-20.mp3 new file mode 100644 index 0000000..e6ff417 Binary files /dev/null and b/assets/audio/banking-journey-v1.22.0/evp/slide-20.mp3 differ diff --git a/assets/audio/banking-journey-v1.22.0/evp/slide-20.vtt b/assets/audio/banking-journey-v1.22.0/evp/slide-20.vtt new file mode 100644 index 0000000..385d6b9 --- /dev/null +++ b/assets/audio/banking-journey-v1.22.0/evp/slide-20.vtt @@ -0,0 +1,120 @@ +WEBVTT + +00:00:00.000 --> 00:00:03.120 +Let's follow what AI contributes +to one banking release. + +00:00:03.320 --> 00:00:06.960 +Our example is a payment that +times out after acceptance. + +00:00:07.080 --> 00:00:12.080 +The customer retries, and the team +must prove that the money moves once. + +00:00:12.160 --> 00:00:14.560 +First, AI helps clarify the requirement. + +00:00:14.720 --> 00:00:17.640 +The product owner confirms +the expected behavior. + +00:00:17.829 --> 00:00:22.400 +Second, AI drafts the test +scenarios: normal payment, + +00:00:22.460 --> 00:00:27.600 +timeout, repeated callback, concurrent +retry, and a conflicting request. + +00:00:27.760 --> 00:00:31.440 +Domain testers review the coverage +and expected outcomes. + +00:00:31.953 --> 00:00:36.720 +Third, AI helps developers write unit +tests for retry and duplicate-request + +00:00:36.787 --> 00:00:40.400 +logic. These are fast +checks of code behavior; + +00:00:40.432 --> 00:00:42.641 +they do not replace +payment integration tests. + +00:00:42.937 --> 00:00:46.480 +Fourth, AI turns accepted +cases into candidate + +00:00:46.700 --> 00:00:49.800 +API and user-interface tests. + +00:00:49.886 --> 00:00:52.400 +Reviewers require +money-movement assertions, + +00:00:52.460 --> 00:00:54.280 +not just a successful response. + +00:00:54.480 --> 00:00:57.760 +Fifth, AI helps draft synthetic data + +00:00:57.780 --> 00:01:00.880 +and provider simulations. +Engineers validate them. + +00:01:01.200 --> 00:01:05.760 +Isolated environments and service +virtualization make the work repeatable. + +00:01:06.647 --> 00:01:12.000 +Sixth, AI recommends relevant tests +or requests an authorized pipeline run. + +00:01:12.180 --> 00:01:14.880 +The delivery pipeline executes the tests. + +00:01:14.984 --> 00:01:17.840 +Mandatory payment coverage stays in place. + +00:01:18.060 --> 00:01:21.200 +Seventh, AI connects failed assertions + +00:01:21.232 --> 00:01:24.560 +with logs and traces, +and drafts a diagnosis. + +00:01:24.740 --> 00:01:28.720 +The team checks the evidence +before accepting the explanation. + +00:01:29.177 --> 00:01:32.080 +Eighth, AI can propose a repair. + +00:01:32.280 --> 00:01:37.360 +A developer reviews the change, and the +pipeline reruns the tests with fresh data. + +00:01:37.540 --> 00:01:40.400 +The expected payment behavior stays fixed. + +00:01:41.107 --> 00:01:45.520 +Ninth, AI assembles a linked release +summary and suggests reviewed + +00:01:45.582 --> 00:01:50.000 +failures for the regression suite. People +decide whether the evidence is sufficient. + +00:01:50.144 --> 00:01:55.120 +That is the end-to-end opportunity: less +repetitive preparation and investigation, + +00:01:55.160 --> 00:01:58.960 +supported by dependable +execution and accountable review. + +00:01:59.056 --> 00:02:02.240 +This is a proposed workflow +to validate in a pilot. diff --git a/assets/audio/banking-journey-v1.22.0/evp/slide-21.mp3 b/assets/audio/banking-journey-v1.22.0/evp/slide-21.mp3 new file mode 100644 index 0000000..524b861 Binary files /dev/null and b/assets/audio/banking-journey-v1.22.0/evp/slide-21.mp3 differ diff --git a/assets/audio/banking-journey-v1.22.0/evp/slide-21.vtt b/assets/audio/banking-journey-v1.22.0/evp/slide-21.vtt new file mode 100644 index 0000000..c6b2256 --- /dev/null +++ b/assets/audio/banking-journey-v1.22.0/evp/slide-21.vtt @@ -0,0 +1,83 @@ +WEBVTT + +00:00:00.000 --> 00:00:03.040 +Follow the same payment +test through six handoffs. + +00:00:03.240 --> 00:00:06.480 +The approved requirement says +a retry with the same key + +00:00:06.560 --> 00:00:09.840 +returns the original transfer +and creates no second posting. + +00:00:10.060 --> 00:00:13.440 +The reviewed test matrix +carries that intent forward. + +00:00:14.187 --> 00:00:16.240 +AI drafts a candidate test. + +00:00:16.440 --> 00:00:20.880 +A response-status check alone is too weak, +so the reviewer requires the original + +00:00:20.924 --> 00:00:25.280 +transfer identifier, one journal, +and independently agreed balances. + +00:00:25.440 --> 00:00:28.800 +That reviewed test becomes +the change we can inspect. + +00:00:29.250 --> 00:00:32.720 +Now challenge the test +with a deliberately faulty build. + +00:00:32.940 --> 00:00:36.880 +Our illustrative run finds two +journals where one was expected. + +00:00:36.920 --> 00:00:40.320 +The test fails, and the original +failure evidence is retained. + +00:00:40.960 --> 00:00:44.880 +AI links the failed assertion +to the journal and trace evidence, + +00:00:44.920 --> 00:00:47.600 +and proposes +a duplicate-posting diagnosis. + +00:00:47.813 --> 00:00:51.520 +An engineer confirms the cause +and reviews the proposed fix. + +00:00:51.740 --> 00:00:54.400 +The pipeline performs a fresh retest. + +00:00:54.540 --> 00:00:58.880 +The corrected build must pass, while +the deliberately faulty variant must still + +00:00:58.960 --> 00:01:04.400 +fail. Changing the test simply to accept +two debits would invalidate the result. + +00:01:04.985 --> 00:01:10.000 +Finally, the release pack links the +requirement, reviewed test, failed run, + +00:01:10.080 --> 00:01:14.560 +fix and retest. The release owner checks +remaining coverage and real-provider + +00:01:14.607 --> 00:01:19.440 +integration evidence. A passing +retest is an input to that decision, + +00:01:19.500 --> 00:01:24.080 +not automatic approval. All identifiers +and results here are authored examples. diff --git a/assets/audio/banking-journey-v1.22.0/evp/slide-6.mp3 b/assets/audio/banking-journey-v1.22.0/evp/slide-6.mp3 new file mode 100644 index 0000000..d330389 Binary files /dev/null and b/assets/audio/banking-journey-v1.22.0/evp/slide-6.mp3 differ diff --git a/assets/audio/banking-journey-v1.22.0/evp/slide-6.vtt b/assets/audio/banking-journey-v1.22.0/evp/slide-6.vtt new file mode 100644 index 0000000..5ed1af3 --- /dev/null +++ b/assets/audio/banking-journey-v1.22.0/evp/slide-6.vtt @@ -0,0 +1,59 @@ +WEBVTT + +00:00:00.000 --> 00:00:04.720 +Start with today's manual workflow. People +copy cases, prepare shared accounts, + +00:00:04.768 --> 00:00:08.240 +wait for a vendor test slot, +and reconcile screenshots and logs. + +00:00:08.411 --> 00:00:12.840 +Seventy-five testers still face +the same environment bottleneck. + +00:00:13.040 --> 00:00:15.360 +Now separate the modernization step. + +00:00:15.456 --> 00:00:18.560 +Engineers create reviewed automated tests, + +00:00:18.622 --> 00:00:22.440 +isolated data, and validated +simulations of the payment provider. + +00:00:22.570 --> 00:00:26.880 +The delivery pipeline runs those +tests and retains the evidence. + +00:00:26.976 --> 00:00:29.760 +That repeatability is +valuable even without AI. + +00:00:29.952 --> 00:00:33.040 +Real-provider checks still +need vendor capacity. + +00:00:33.568 --> 00:00:38.960 +Then add AI assistance. It helps +draft cases, test code and fixtures, + +00:00:39.004 --> 00:00:43.200 +recommends relevant coverage, and helps +explain failures and summarize proof. + +00:00:43.328 --> 00:00:48.240 +Engineers review the outputs, +existing runners execute, and people make + +00:00:48.280 --> 00:00:53.200 +release decisions. Compare equivalent +payment packs at all three stages. + +00:00:53.310 --> 00:00:58.080 +Measure waiting and reliability +separately from AI drafting, review + +00:00:58.200 --> 00:01:03.440 +and rework. These are proposed states, +not measured client improvements. diff --git a/assets/audio/banking-journey-v1.22.0/industry-technical/slide-1.mp3 b/assets/audio/banking-journey-v1.22.0/industry-technical/slide-1.mp3 new file mode 100644 index 0000000..7a935ff Binary files /dev/null and b/assets/audio/banking-journey-v1.22.0/industry-technical/slide-1.mp3 differ diff --git a/assets/audio/banking-journey-v1.22.0/industry-technical/slide-1.vtt b/assets/audio/banking-journey-v1.22.0/industry-technical/slide-1.vtt new file mode 100644 index 0000000..c9e4bad --- /dev/null +++ b/assets/audio/banking-journey-v1.22.0/industry-technical/slide-1.vtt @@ -0,0 +1,43 @@ +WEBVTT + +00:00:00.000 --> 00:00:04.960 +This industry briefing explains assurance +across the AI lifecycle: context, + +00:00:05.024 --> 00:00:10.080 +generated tests, independent evaluation, +action controls and release evidence. + +00:00:10.320 --> 00:00:15.200 +It includes testing AI applications as +well as using AI in quality engineering. + +00:00:15.440 --> 00:00:20.400 +If your immediate question is how AI +helps an existing banking QA team, + +00:00:20.457 --> 00:00:22.960 +follow the banking workflow +link on this slide. + +00:00:23.024 --> 00:00:27.440 +That engineering walkthrough traces one +payment requirement through unit tests, + +00:00:27.540 --> 00:00:31.120 +API tests, fixtures, execution, + +00:00:31.192 --> 00:00:34.080 +diagnosis, repair and release evidence. + +00:00:34.300 --> 00:00:38.400 +The final slide here also +provides that nine-step overview. + +00:00:38.446 --> 00:00:41.600 +Choose the banking route +for concrete delivery handoffs, + +00:00:41.640 --> 00:00:44.640 +and this industry route +for the wider assurance architecture. diff --git a/assets/audio/banking-journey-v1.22.0/technical/slide-31.mp3 b/assets/audio/banking-journey-v1.22.0/technical/slide-31.mp3 new file mode 100644 index 0000000..e69baa5 Binary files /dev/null and b/assets/audio/banking-journey-v1.22.0/technical/slide-31.mp3 differ diff --git a/assets/audio/banking-journey-v1.22.0/technical/slide-31.vtt b/assets/audio/banking-journey-v1.22.0/technical/slide-31.vtt new file mode 100644 index 0000000..df97da3 --- /dev/null +++ b/assets/audio/banking-journey-v1.22.0/technical/slide-31.vtt @@ -0,0 +1,194 @@ +WEBVTT + +00:00:00.000 --> 00:00:02.360 +Trace one release through nine handoffs. + +00:00:02.448 --> 00:00:05.920 +This is AI assistance to an existing +payments testing team, + +00:00:05.973 --> 00:00:08.480 +distinct from evaluating +an AI application. + +00:00:08.667 --> 00:00:13.280 +Start with approved context: +the payment story, API contract + +00:00:13.360 --> 00:00:17.440 +and relevant defects. +AI drafts clarification questions. + +00:00:17.580 --> 00:00:21.760 +Product and domain QA approve +the rule that a same-key, + +00:00:21.824 --> 00:00:26.853 +same-payload retry returns the original +transfer without a second posting. + +00:00:27.301 --> 00:00:30.240 +Next, test design produces +a reviewed matrix. + +00:00:30.560 --> 00:00:33.920 +AI proposes timeout, duplicate callback, + +00:00:33.987 --> 00:00:37.080 +concurrency and conflicting-payload cases. + +00:00:37.154 --> 00:00:42.200 +Domain QA supplies the expected behavior +independently of the implementation. + +00:00:42.420 --> 00:00:46.480 +A written case is an input to executable +test code, not the code itself. + +00:00:46.880 --> 00:00:51.280 +The developer unit-test step uses +the handler source and accepted behavior. + +00:00:51.520 --> 00:00:56.720 +Copilot can draft JUnit candidates for key +validation and duplicate-request logic. + +00:00:56.900 --> 00:01:00.400 +The developer checks the fake +repository and verifies + +00:01:00.460 --> 00:01:04.080 +one insertion for repeated +calls. A passing unit test + +00:01:04.176 --> 00:01:07.733 +does not establish correctness across +the real database and provider. + +00:01:08.100 --> 00:01:12.720 +The API and user-interface step turns +the reviewed matrix into a pull request. + +00:01:12.880 --> 00:01:16.480 +REST Assured tests exercise +the payment service; + +00:01:16.533 --> 00:01:21.000 +selected Playwright checks cover the +customer's pending state and retry action. + +00:01:21.074 --> 00:01:24.960 +Reviewers require the original +transfer identifier, one journal, + +00:01:24.980 --> 00:01:28.560 +and balances of ninety thousand +and ten thousand minor units. + +00:01:28.760 --> 00:01:30.880 +A status-only assertion is rejected. + +00:01:31.552 --> 00:01:34.560 +Data and provider behavior +are versioned inputs. + +00:01:34.880 --> 00:01:40.160 +AI can draft synthetic seed scripts and +WireMock mappings for acceptance followed + +00:01:40.187 --> 00:01:44.640 +by a timeout. Engineers validate those +mappings against the provider contract. + +00:01:44.768 --> 00:01:48.880 +Testcontainers and the delivery +pipeline supply repeatable resources. + +00:01:49.072 --> 00:01:52.680 +Real-provider and settlement checks +remain separate requirements. + +00:01:52.900 --> 00:01:57.840 +For execution, AI may recommend +affected tests or request an authorized + +00:01:57.893 --> 00:02:02.560 +pipeline job. Azure Pipelines runs +the approved suite and publishes raw + +00:02:02.760 --> 00:02:08.160 +JUnit results and traces. The mandatory +payment suite cannot be silently omitted. + +00:02:08.286 --> 00:02:10.880 +Record the build, test commit, + +00:02:10.960 --> 00:02:14.480 +fixture and stub versions +under the run identifier. + +00:02:14.846 --> 00:02:19.800 +During investigation, AI reads +retained evidence and proposes a cause. + +00:02:19.947 --> 00:02:24.400 +In our injected-defect example, the +assertion expects one journal but observes + +00:02:24.480 --> 00:02:28.280 +two. The defect draft +must link that evidence. + +00:02:28.460 --> 00:02:30.480 +A reviewer confirms the diagnosis, + +00:02:30.500 --> 00:02:33.280 +and the original failing +verdict remains unchanged. + +00:02:33.481 --> 00:02:37.961 +For repair, AI may propose a source +change for developer review. + +00:02:38.049 --> 00:02:40.321 +Keep the accepted +payment assertions fixed. + +00:02:40.481 --> 00:02:45.601 +The pipeline uses a fresh run identifier +and isolated data for the retest. + +00:02:45.821 --> 00:02:48.481 +The corrected build must pass, + +00:02:48.521 --> 00:02:51.801 +and the deliberate duplicate-posting +variant must still fail. + +00:02:52.041 --> 00:02:55.601 +For release evidence, +AI drafts a summary of coverage, + +00:02:55.641 --> 00:02:59.481 +run results, reviewed +dispositions and missing checks. + +00:02:59.591 --> 00:03:04.081 +The release owner reviews the linked pack, +including required real-provider evidence. + +00:03:04.205 --> 00:03:08.441 +Accepted defects can become +reviewed regression cases. + +00:03:08.531 --> 00:03:11.361 +The shared platform +provides context access, + +00:03:11.405 --> 00:03:15.041 +artifact versions, scoped +pipeline access and evidence + +00:03:15.097 --> 00:03:18.961 +retention across these steps; +it does not replace the named owners. diff --git a/assets/audio/banking-journey-v1.22.0/technical/slide-32.mp3 b/assets/audio/banking-journey-v1.22.0/technical/slide-32.mp3 new file mode 100644 index 0000000..79e43f3 Binary files /dev/null and b/assets/audio/banking-journey-v1.22.0/technical/slide-32.mp3 differ diff --git a/assets/audio/banking-journey-v1.22.0/technical/slide-32.vtt b/assets/audio/banking-journey-v1.22.0/technical/slide-32.vtt new file mode 100644 index 0000000..d10827c --- /dev/null +++ b/assets/audio/banking-journey-v1.22.0/technical/slide-32.vtt @@ -0,0 +1,112 @@ +WEBVTT + +00:00:00.000 --> 00:00:03.520 +Begin with the approved requirement +and its test-case reference. + +00:00:03.660 --> 00:00:08.080 +The same idempotency key and payload +must return the original transfer. + +00:00:08.280 --> 00:00:13.160 +The test matrix carries that criterion +into the unit and API layers. + +00:00:13.250 --> 00:00:16.321 +The identifiers in this diagram +are authored trace examples. + +00:00:16.600 --> 00:00:19.680 +The AI candidate becomes +a reviewed pull request. + +00:00:19.820 --> 00:00:23.360 +The unit test checks one insertion +through a fake repository. + +00:00:23.540 --> 00:00:27.520 +The API test independently +checks the original transfer ID, + +00:00:27.580 --> 00:00:32.240 +one balanced journal, payer balance +ninety thousand, and recipient balance + +00:00:32.320 --> 00:00:36.561 +ten thousand minor units. +A response-status check alone is rejected. + +00:00:36.820 --> 00:00:40.320 +The first run pins the fixture +and provider-model revisions. + +00:00:40.450 --> 00:00:45.280 +Execute the deliberate duplicate-posting +variant: one journal is expected, + +00:00:45.380 --> 00:00:48.720 +but two are observed. +JUnit reports a failure. + +00:00:48.940 --> 00:00:53.240 +Retain the assertion, trace +and journal identifiers before cleanup. + +00:00:53.312 --> 00:00:57.120 +This is a designed challenge, +not a reported banking incident. + +00:00:57.340 --> 00:00:59.840 +The defect record links that failed run. + +00:01:00.133 --> 00:01:05.040 +AI proposes duplicate posting as +a hypothesis, with evidence references. + +00:01:05.227 --> 00:01:08.720 +An engineer confirms the cause +and reviews a production-code repair. + +00:01:08.850 --> 00:01:11.760 +Neither the AI summary +nor the repair process + +00:01:11.900 --> 00:01:14.640 +may turn the original +failed run into a pass. + +00:01:15.080 --> 00:01:19.680 +A fresh retest uses a new +run identifier and unchanged + +00:01:19.720 --> 00:01:23.360 +payment expectations. +The corrected build should pass, + +00:01:23.373 --> 00:01:25.920 +while the deliberately faulty +variant must still fail. + +00:01:26.112 --> 00:01:30.920 +Link the source change and both results so +the reviewer can inspect the difference. + +00:01:31.120 --> 00:01:35.920 +The release pack includes the approved +requirement, test commit, fixture and stub + +00:01:35.984 --> 00:01:40.960 +revisions, failed run, +reviewed defect, repair and retest. + +00:01:41.107 --> 00:01:44.720 +Check required coverage and real-provider +evidence before deciding. + +00:01:44.853 --> 00:01:48.320 +If integration proof is absent, +the pack records that gap; + +00:01:48.460 --> 00:01:50.880 +the diagram does not +grant release approval. diff --git a/assets/audio/banking-journey-v1.22.0/technical/slide-33.mp3 b/assets/audio/banking-journey-v1.22.0/technical/slide-33.mp3 new file mode 100644 index 0000000..ee4896a Binary files /dev/null and b/assets/audio/banking-journey-v1.22.0/technical/slide-33.mp3 differ diff --git a/assets/audio/banking-journey-v1.22.0/technical/slide-33.vtt b/assets/audio/banking-journey-v1.22.0/technical/slide-33.vtt new file mode 100644 index 0000000..9d2025b --- /dev/null +++ b/assets/audio/banking-journey-v1.22.0/technical/slide-33.vtt @@ -0,0 +1,69 @@ +WEBVTT + +00:00:00.000 --> 00:00:03.440 +The starting state has manual +API requests and spreadsheets, + +00:00:03.474 --> 00:00:06.560 +shared environments, and no +virtualized provider backend. + +00:00:06.720 --> 00:00:09.280 +QA engineers collect +and reconcile evidence. + +00:00:09.394 --> 00:00:12.960 +Vendor test-slot availability +constrains parallel execution. + +00:00:13.360 --> 00:00:18.400 +The modernized state introduces +reviewed REST Assured and JUnit tests, + +00:00:18.444 --> 00:00:23.200 +delivery-pipeline execution, isolated +fixtures and a validated WireMock provider + +00:00:23.253 --> 00:00:28.160 +model. Testcontainers supports +repeatable service-test resources. + +00:00:28.320 --> 00:00:32.320 +Raw assertions, traces and run +identifiers survive cleanup. + +00:00:32.480 --> 00:00:35.960 +This foundation creates repeatability +without depending on AI. + +00:00:36.140 --> 00:00:40.080 +The AI-assisted state adds +approved context, candidate + +00:00:40.136 --> 00:00:44.240 +artifacts and evidence-based assistance +around that same execution path. + +00:00:44.560 --> 00:00:50.240 +AI drafts tests and fixtures, proposes +relevant scope and diagnoses failures. + +00:00:50.366 --> 00:00:55.040 +Reviewers approve changes before +existing runners execute them. + +00:00:55.110 --> 00:00:58.640 +Compare equivalent payment packs +to distinguish modernization + +00:00:58.693 --> 00:01:02.400 +gains from incremental AI +benefit. Include review, + +00:01:02.451 --> 00:01:06.081 +correction, platform overhead +and real-provider checks. + +00:01:06.293 --> 00:01:08.800 +No measured improvement is +claimed in this scenario. diff --git a/assets/audio/banking-journey-v1.22.0/technical/slide-9.mp3 b/assets/audio/banking-journey-v1.22.0/technical/slide-9.mp3 new file mode 100644 index 0000000..7a83016 Binary files /dev/null and b/assets/audio/banking-journey-v1.22.0/technical/slide-9.mp3 differ diff --git a/assets/audio/banking-journey-v1.22.0/technical/slide-9.vtt b/assets/audio/banking-journey-v1.22.0/technical/slide-9.vtt new file mode 100644 index 0000000..a4d83b4 --- /dev/null +++ b/assets/audio/banking-journey-v1.22.0/technical/slide-9.vtt @@ -0,0 +1,52 @@ +WEBVTT + +00:00:00.000 --> 00:00:02.640 +Choose the test layer +for the behavior you need to prove. + +00:00:02.773 --> 00:00:06.800 +Start with developer unit tests +for idempotency-key validation + +00:00:06.900 --> 00:00:11.920 +and duplicate-request logic. +Copilot can draft JUnit candidates, + +00:00:11.940 --> 00:00:14.560 +but developers review +the assertions and test doubles. + +00:00:14.960 --> 00:00:18.560 +A fake repository cannot establish +real payment integration. + +00:00:18.853 --> 00:00:23.920 +At the service and API layer, +REST Assured and JUnit cover retry, + +00:00:23.973 --> 00:00:26.880 +concurrency, conflicts +and journal outcomes. + +00:00:27.093 --> 00:00:30.560 +At the web layer, Playwright +checks the pending state, + +00:00:30.640 --> 00:00:33.720 +retry action and final customer message. + +00:00:33.808 --> 00:00:37.920 +Keep the owned Selenium and Appium +coverage for existing browser and mobile + +00:00:37.982 --> 00:00:42.800 +journeys. Batch settlement reconciliation +and real-provider sandbox checks + +00:00:42.891 --> 00:00:47.920 +remain separate requirements. Generate +tests within the appropriate layer; + +00:00:47.954 --> 00:00:51.760 +adding a browser framework does not +resolve a scarce settlement environment. diff --git a/assets/css/qe-journey.css b/assets/css/qe-journey.css new file mode 100644 index 0000000..5d07c11 --- /dev/null +++ b/assets/css/qe-journey.css @@ -0,0 +1,29 @@ +/* The same authored handoffs are used by the reading page and narrated decks. */ +.qe-journey-figure .node-title { font-size:20px; } +.qe-journey-figure .node-text { font-size:18px; } +.qe-journey-details { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:14px; margin:20px 0; } +.qe-journey-details > details { border:1px solid #bdcfca; border-radius:8px; padding:14px 18px; background:#fff; } +.qe-journey-details summary { cursor:pointer; color:#173744; font-weight:650; } +.qe-journey-details dl { margin:12px 0 0; } +.qe-journey-details dt { text-align:left; color:#096d69; margin-top:12px; font-weight:650; } +.qe-journey-details dd { margin:4px 0 0; } +.qe-journey-details code { white-space:normal; } +.qe-journey-boundary { padding:14px 18px; background:#eef5f2; border-left:4px solid #096d69; } +.qe-journey-links { display:flex; flex-wrap:wrap; gap:10px 20px; margin:16px 0; } +.ft-slide:has(.qe-journey-figure) .slide-content { gap:8px; } +.ft-slide:has(.qe-journey-figure) .ft-note { margin-top:6px; } +.ft-slide:has([data-diagram="qe-journey"]) .qe-journey-figure .research-diagram { max-height:48cqw; } +@media(max-width:700px) { .qe-journey-details { grid-template-columns:1fr; } } +@media print { + .qe-journey-figure .diagram-view-controls,.qe-journey-figure .diagram-tour,.qe-journey-figure .diagram-overview { display:none!important; } + .qe-journey-figure .diagram-shell { display:block!important; } +} + +.qe-state-measures { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:18px; margin:18px 0; } +.qe-state-measures > div { padding:14px 16px; border-top:3px solid #68a99c; background:#eef5f2; } +.qe-state-measures strong,.qe-state-measures span { display:block; } +.qe-state-measures span { margin-top:8px; color:#425f6d; } +.deck-page .qe-state-measures { margin:1.3cqw 0; gap:1.5cqw; font-size:1.6cqw; line-height:1.35; } +.deck-page .qe-state-measures > div { padding:1.2cqw; } +.qe-cover-route { display:block; margin-top:12px; font-size:.85em; line-height:1.4; } +@media(max-width:700px) { .qe-state-measures { grid-template-columns:1fr; }.deck-page .qe-state-measures { font-size:16px; } } diff --git a/assets/data/narration-flows.json b/assets/data/narration-flows.json index 6aa143a..b1c6b0b 100644 --- a/assets/data/narration-flows.json +++ b/assets/data/narration-flows.json @@ -968,6 +968,632 @@ "routes": [] } ] + }, + { + "diagram": "qe-three-states", + "clip": "evp/slide-6", + "cues": [ + { + "caption": 0, + "text": "Start with today's manual workflow. People copy cases, prepare shared accounts,", + "title": "01 / Manual QE", + "nodes": [ + "manual" + ], + "routes": [] + }, + { + "caption": 3, + "text": "Now separate the modernization step.", + "title": "02 / Modernized QE", + "nodes": [ + "modernized" + ], + "routes": [ + "manual:modernized" + ] + }, + { + "caption": 9, + "text": "Then add AI assistance. It helps draft cases, test code and fixtures,", + "title": "03 / AI-assisted QE", + "nodes": [ + "assisted" + ], + "routes": [ + "modernized:assisted" + ] + } + ] + }, + { + "diagram": "qe-journey", + "clip": "evp/slide-20", + "cues": [ + { + "caption": 0, + "text": "Let's follow what AI contributes to one banking release.", + "title": "01 / Understand the change", + "nodes": [ + "intent" + ], + "routes": [] + }, + { + "caption": 5, + "text": "Second, AI drafts the test scenarios: normal payment,", + "title": "02 / Design test cases", + "nodes": [ + "design" + ], + "routes": [ + "intent:design" + ] + }, + { + "caption": 8, + "text": "Third, AI helps developers write unit tests for retry and duplicate-request", + "title": "03 / Draft unit tests", + "nodes": [ + "unit" + ], + "routes": [ + "design:unit" + ] + }, + { + "caption": 11, + "text": "Fourth, AI turns accepted cases into candidate", + "title": "04 / Build API / UI tests", + "nodes": [ + "code" + ], + "routes": [ + "unit:code" + ] + }, + { + "caption": 15, + "text": "Fifth, AI helps draft synthetic data", + "title": "05 / Prepare data and stubs", + "nodes": [ + "fixtures" + ], + "routes": [ + "code:fixtures" + ] + }, + { + "caption": 18, + "text": "Sixth, AI recommends relevant tests or requests an authorized pipeline run.", + "title": "06 / Select and run tests", + "nodes": [ + "run" + ], + "routes": [ + "fixtures:run" + ] + }, + { + "caption": 21, + "text": "Seventh, AI connects failed assertions", + "title": "07 / Investigate failures", + "nodes": [ + "triage" + ], + "routes": [ + "run:triage" + ] + }, + { + "caption": 24, + "text": "Eighth, AI can propose a repair.", + "title": "08 / Repair and retest", + "nodes": [ + "repair" + ], + "routes": [ + "triage:repair" + ] + }, + { + "caption": 27, + "text": "Ninth, AI assembles a linked release summary and suggests reviewed", + "title": "09 / Review release evidence", + "nodes": [ + "evidence" + ], + "routes": [ + "repair:evidence" + ] + } + ] + }, + { + "diagram": "qe-artifact-trace", + "clip": "evp/slide-21", + "cues": [ + { + "caption": 0, + "text": "Follow the same payment test through six handoffs.", + "title": "01 / Approved intent", + "nodes": [ + "criteria" + ], + "routes": [] + }, + { + "caption": 4, + "text": "AI drafts a candidate test.", + "title": "02 / AI candidate", + "nodes": [ + "candidate" + ], + "routes": [ + "criteria:candidate" + ] + }, + { + "caption": 8, + "text": "Now challenge the test with a deliberately faulty build.", + "title": "03 / Challenge the test", + "nodes": [ + "failed" + ], + "routes": [ + "candidate:failed" + ] + }, + { + "caption": 11, + "text": "AI links the failed assertion to the journal and trace evidence,", + "title": "04 / Investigate and repair", + "nodes": [ + "diagnosis" + ], + "routes": [ + "failed:diagnosis" + ] + }, + { + "caption": 14, + "text": "The pipeline performs a fresh retest.", + "title": "05 / Fresh retest", + "nodes": [ + "retest" + ], + "routes": [ + "diagnosis:retest" + ] + }, + { + "caption": 17, + "text": "Finally, the release pack links the requirement, reviewed test, failed run,", + "title": "06 / Release review", + "nodes": [ + "decision" + ], + "routes": [ + "retest:decision" + ] + } + ] + }, + { + "diagram": "qe-journey", + "clip": "technical/slide-31", + "cues": [ + { + "caption": 0, + "text": "Trace one release through nine handoffs.", + "title": "01 / Understand the change", + "nodes": [ + "intent" + ], + "routes": [] + }, + { + "caption": 7, + "text": "Next, test design produces a reviewed matrix.", + "title": "02 / Design test cases", + "nodes": [ + "design" + ], + "routes": [ + "intent:design" + ] + }, + { + "caption": 12, + "text": "The developer unit-test step uses the handler source and accepted behavior.", + "title": "03 / Draft unit tests", + "nodes": [ + "unit" + ], + "routes": [ + "design:unit" + ] + }, + { + "caption": 17, + "text": "The API and user-interface step turns the reviewed matrix into a pull request.", + "title": "04 / Build API / UI tests", + "nodes": [ + "code" + ], + "routes": [ + "unit:code" + ] + }, + { + "caption": 23, + "text": "Data and provider behavior are versioned inputs.", + "title": "05 / Prepare data and stubs", + "nodes": [ + "fixtures" + ], + "routes": [ + "code:fixtures" + ] + }, + { + "caption": 28, + "text": "For execution, AI may recommend affected tests or request an authorized", + "title": "06 / Select and run tests", + "nodes": [ + "run" + ], + "routes": [ + "fixtures:run" + ] + }, + { + "caption": 33, + "text": "During investigation, AI reads retained evidence and proposes a cause.", + "title": "07 / Investigate failures", + "nodes": [ + "triage" + ], + "routes": [ + "run:triage" + ] + }, + { + "caption": 38, + "text": "For repair, AI may propose a source change for developer review.", + "title": "08 / Repair and retest", + "nodes": [ + "repair" + ], + "routes": [ + "triage:repair" + ] + }, + { + "caption": 43, + "text": "For release evidence, AI drafts a summary of coverage,", + "title": "09 / Review release evidence", + "nodes": [ + "evidence" + ], + "routes": [ + "repair:evidence" + ] + } + ] + }, + { + "diagram": "qe-artifact-trace", + "clip": "technical/slide-32", + "cues": [ + { + "caption": 0, + "text": "Begin with the approved requirement and its test-case reference.", + "title": "01 / Approved intent", + "nodes": [ + "criteria" + ], + "routes": [] + }, + { + "caption": 4, + "text": "The AI candidate becomes a reviewed pull request.", + "title": "02 / AI candidate", + "nodes": [ + "candidate" + ], + "routes": [ + "criteria:candidate" + ] + }, + { + "caption": 9, + "text": "The first run pins the fixture and provider-model revisions.", + "title": "03 / Challenge the test", + "nodes": [ + "failed" + ], + "routes": [ + "candidate:failed" + ] + }, + { + "caption": 14, + "text": "The defect record links that failed run.", + "title": "04 / Investigate and repair", + "nodes": [ + "diagnosis" + ], + "routes": [ + "failed:diagnosis" + ] + }, + { + "caption": 19, + "text": "A fresh retest uses a new run identifier and unchanged", + "title": "05 / Fresh retest", + "nodes": [ + "retest" + ], + "routes": [ + "diagnosis:retest" + ] + }, + { + "caption": 23, + "text": "The release pack includes the approved requirement, test commit, fixture and stub", + "title": "06 / Release review", + "nodes": [ + "decision" + ], + "routes": [ + "retest:decision" + ] + } + ] + }, + { + "diagram": "qe-three-states", + "clip": "technical/slide-33", + "cues": [ + { + "caption": 0, + "text": "The starting state has manual API requests and spreadsheets,", + "title": "01 / Manual QE", + "nodes": [ + "manual" + ], + "routes": [] + }, + { + "caption": 4, + "text": "The modernized state introduces reviewed REST Assured and JUnit tests,", + "title": "02 / Modernized QE", + "nodes": [ + "modernized" + ], + "routes": [ + "manual:modernized" + ] + }, + { + "caption": 9, + "text": "The AI-assisted state adds approved context, candidate", + "title": "03 / AI-assisted QE", + "nodes": [ + "assisted" + ], + "routes": [ + "modernized:assisted" + ] + } + ] + }, + { + "diagram": "qe-journey", + "clip": "industry-evp/slide-26", + "cues": [ + { + "caption": 0, + "text": "Let's follow what AI contributes to one banking release.", + "title": "01 / Understand the change", + "nodes": [ + "intent" + ], + "routes": [] + }, + { + "caption": 5, + "text": "Second, AI drafts the test scenarios: normal payment,", + "title": "02 / Design test cases", + "nodes": [ + "design" + ], + "routes": [ + "intent:design" + ] + }, + { + "caption": 8, + "text": "Third, AI helps developers write unit tests for retry and duplicate-request", + "title": "03 / Draft unit tests", + "nodes": [ + "unit" + ], + "routes": [ + "design:unit" + ] + }, + { + "caption": 11, + "text": "Fourth, AI turns accepted cases into candidate", + "title": "04 / Build API / UI tests", + "nodes": [ + "code" + ], + "routes": [ + "unit:code" + ] + }, + { + "caption": 15, + "text": "Fifth, AI helps draft synthetic data", + "title": "05 / Prepare data and stubs", + "nodes": [ + "fixtures" + ], + "routes": [ + "code:fixtures" + ] + }, + { + "caption": 18, + "text": "Sixth, AI recommends relevant tests or requests an authorized pipeline run.", + "title": "06 / Select and run tests", + "nodes": [ + "run" + ], + "routes": [ + "fixtures:run" + ] + }, + { + "caption": 21, + "text": "Seventh, AI connects failed assertions", + "title": "07 / Investigate failures", + "nodes": [ + "triage" + ], + "routes": [ + "run:triage" + ] + }, + { + "caption": 24, + "text": "Eighth, AI can propose a repair.", + "title": "08 / Repair and retest", + "nodes": [ + "repair" + ], + "routes": [ + "triage:repair" + ] + }, + { + "caption": 27, + "text": "Ninth, AI assembles a linked release summary and suggests reviewed", + "title": "09 / Review release evidence", + "nodes": [ + "evidence" + ], + "routes": [ + "repair:evidence" + ] + } + ] + }, + { + "diagram": "qe-journey", + "clip": "industry-technical/slide-36", + "cues": [ + { + "caption": 0, + "text": "Trace one release through nine handoffs.", + "title": "01 / Understand the change", + "nodes": [ + "intent" + ], + "routes": [] + }, + { + "caption": 7, + "text": "Next, test design produces a reviewed matrix.", + "title": "02 / Design test cases", + "nodes": [ + "design" + ], + "routes": [ + "intent:design" + ] + }, + { + "caption": 12, + "text": "The developer unit-test step uses the handler source and accepted behavior.", + "title": "03 / Draft unit tests", + "nodes": [ + "unit" + ], + "routes": [ + "design:unit" + ] + }, + { + "caption": 17, + "text": "The API and user-interface step turns the reviewed matrix into a pull request.", + "title": "04 / Build API / UI tests", + "nodes": [ + "code" + ], + "routes": [ + "unit:code" + ] + }, + { + "caption": 23, + "text": "Data and provider behavior are versioned inputs.", + "title": "05 / Prepare data and stubs", + "nodes": [ + "fixtures" + ], + "routes": [ + "code:fixtures" + ] + }, + { + "caption": 28, + "text": "For execution, AI may recommend affected tests or request an authorized", + "title": "06 / Select and run tests", + "nodes": [ + "run" + ], + "routes": [ + "fixtures:run" + ] + }, + { + "caption": 33, + "text": "During investigation, AI reads retained evidence and proposes a cause.", + "title": "07 / Investigate failures", + "nodes": [ + "triage" + ], + "routes": [ + "run:triage" + ] + }, + { + "caption": 38, + "text": "For repair, AI may propose a source change for developer review.", + "title": "08 / Repair and retest", + "nodes": [ + "repair" + ], + "routes": [ + "triage:repair" + ] + }, + { + "caption": 43, + "text": "For release evidence, AI drafts a summary of coverage,", + "title": "09 / Review release evidence", + "nodes": [ + "evidence" + ], + "routes": [ + "repair:evidence" + ] + } + ] } ] } diff --git a/assets/data/narration-guides.json b/assets/data/narration-guides.json index eb686d9..ed2bc59 100644 --- a/assets/data/narration-guides.json +++ b/assets/data/narration-guides.json @@ -216,7 +216,7 @@ "selector": "figure.ft-before-after", "deck": "evp", "slide": "slide-6", - "guide": "Compare the two lanes from left to right. Point out the new environment and evidence capabilities before discussing AI assistance." + "guide": "Compare manual QE, modernized QE and AI-assisted QE for the same payment scope. Separate repeatability and environment capacity from incremental AI drafting and investigation. Each state follows the spoken explanation." }, { "selector": "figure.ft-pilot-time", @@ -411,6 +411,20 @@ "slide": "slide-4", "guide": "Read the estimates with their confidence intervals and study populations. The overview explains why different task-level results cannot be pooled into a bank-wide saving.", "baseline": true + }, + { + "selector": "figure[data-diagram=\"qe-journey\"]", + "deck": "technical", + "slide": "slide-31", + "guide": "Follow nine caption-timed steps from approved intent through unit and API test candidates, fixtures, CI execution, diagnosis, repair and release evidence. AI outputs require review; the runner preserves its own verdict. The numbered path tells one proposed delivery story, not a mandatory order for every team.", + "format": "Full workflow walkthrough" + }, + { + "selector": "figure[data-diagram=\"qe-artifact-trace\"]", + "deck": "technical", + "slide": "slide-32", + "guide": "Follow the same PAY-142 references through approved intent, rejected and repaired candidate assertions, injected-defect failure, reviewed diagnosis, fresh retest and release review. The original failure stays in the evidence pack.", + "format": "Artifact walkthrough" } ], "demo": { diff --git a/assets/data/narration-scripts.json b/assets/data/narration-scripts.json index 490ce02..8265f40 100644 --- a/assets/data/narration-scripts.json +++ b/assets/data/narration-scripts.json @@ -34,9 +34,9 @@ "speakText": "The platform investment makes useful capabilities available to every squad. Versioned context explains what should happen. Fixtures and controlled dependencies make tests repeatable. Existing frameworks and pipelines run approved changes, and an evidence service preserves the original results. AI helps prepare tests and interpret failures. Application teams still own payment behavior, code review and release decisions. The value comes from connecting these capabilities into the team's existing work." }, "slide-6": { - "title": "Before / after: the API testing workflow", - "text": "Compare the two workflows. Today, engineers interpret requirements, prepare cases and data, wait for a shared environment, then collect evidence manually. The target adds approved context, repeatable execution and retained results. AI can propose a test or draft a diagnostic explanation at the appropriate stage. A human reviews the result before it progresses. This is a pilot target: foundation work, review effort and rework must be measured alongside any faster drafting.", - "speakText": "Compare the two workflows. Today, engineers interpret requirements, prepare cases and data, wait for a shared environment, then collect evidence manually. The target adds approved context, repeatable execution and retained results. AI can propose a test or draft a diagnostic explanation at the appropriate stage. A human reviews the result before it progresses. This is a pilot target: foundation work, review effort and rework must be measured alongside any faster drafting." + "title": "Before / after: separate modernization from AI", + "text": "Start with today's manual workflow. People copy cases, prepare shared accounts, wait for a vendor test slot, and reconcile screenshots and logs. Seventy-five testers still face the same environment bottleneck.\n\nNow separate the modernization step. Engineers create reviewed automated tests, isolated data, and validated simulations of the payment provider. The delivery pipeline runs those tests and retains the evidence. That repeatability is valuable even without AI. Real-provider checks still need vendor capacity.\n\nThen add AI assistance. It helps draft cases, test code and fixtures, recommends relevant coverage, and helps explain failures and summarize proof. Engineers review the outputs, existing runners execute, and people make release decisions. Compare equivalent payment packs at all three stages. Measure waiting and reliability separately from AI drafting, review and rework. These are proposed states, not measured client improvements.", + "speakText": "Start with today's manual workflow. People copy cases, prepare shared accounts, wait for a vendor test slot, and reconcile screenshots and logs. Seventy-five testers still face the same environment bottleneck.\n\nNow separate the modernization step. Engineers create reviewed automated tests, isolated data, and validated simulations of the payment provider. The delivery pipeline runs those tests and retains the evidence. That repeatability is valuable even without AI. Real-provider checks still need vendor capacity.\n\nThen add AI assistance. It helps draft cases, test code and fixtures, recommends relevant coverage, and helps explain failures and summarize proof. Engineers review the outputs, existing runners execute, and people make release decisions. Compare equivalent payment packs at all three stages. Measure waiting and reliability separately from AI drafting, review and rework. These are proposed states, not measured client improvements." }, "slide-7": { "title": "Delivery maturity changes the first move", @@ -102,6 +102,16 @@ "title": "Outcomes beyond hours", "text": "Success needs evidence beyond hours saved. We propose three primary measures for the banking pilot.\n\nFirst, detect every approved critical payment fault that we deliberately introduce. Second, exercise every critical scenario with reviewed assertions and a valid result. Third, make each release decision traceable to its requirements, build, test data and raw results.\n\nThen check the foundation: can the team repeat runs reliably, validate agreed behaviors against the real provider, and help a second squad run independently?\n\nThese measures have no recorded baseline or after result yet. We will compare today's workflow, modernized quality engineering, and AI assistance on that foundation. Fewer escaped defects and emergency fixes are business aims to validate across releases. A complete evidence pack can still recommend stopping a release.", "speakText": "Success needs evidence beyond hours saved. We propose three primary measures for the banking pilot.\n\nFirst, detect every approved critical payment fault that we deliberately introduce. Second, exercise every critical scenario with reviewed assertions and a valid result. Third, make each release decision traceable to its requirements, build, test data and raw results.\n\nThen check the foundation: can the team repeat runs reliably, validate agreed behaviors against the real provider, and help a second squad run independently?\n\nThese measures have no recorded baseline or after result yet. We will compare today's workflow, modernized quality engineering, and AI assistance on that foundation. Fewer escaped defects and emergency fixes are business aims to validate across releases. A complete evidence pack can still recommend stopping a release." + }, + "slide-20": { + "title": "What AI contributes, from requirement to release", + "text": "Let's follow what AI contributes to one banking release. Our example is a payment that times out after acceptance. The customer retries, and the team must prove that the money moves once. First, AI helps clarify the requirement. The product owner confirms the expected behavior.\n\nSecond, AI drafts the test scenarios: normal payment, timeout, repeated callback, concurrent retry, and a conflicting request. Domain testers review the coverage and expected outcomes.\n\nThird, AI helps developers write unit tests for retry and duplicate-request logic. These are fast checks of code behavior; they do not replace payment integration tests.\n\nFourth, AI turns accepted cases into candidate API and user-interface tests. Reviewers require money-movement assertions, not just a successful response.\n\nFifth, AI helps draft synthetic data and provider simulations. Engineers validate them. Isolated environments and service virtualization make the work repeatable.\n\nSixth, AI recommends relevant tests or requests an authorized pipeline run. The delivery pipeline executes the tests. Mandatory payment coverage stays in place.\n\nSeventh, AI connects failed assertions with logs and traces, and drafts a diagnosis. The team checks the evidence before accepting the explanation.\n\nEighth, AI can propose a repair. A developer reviews the change, and the pipeline reruns the tests with fresh data. The expected payment behavior stays fixed.\n\nNinth, AI assembles a linked release summary and suggests reviewed failures for the regression suite. People decide whether the evidence is sufficient. That is the end-to-end opportunity: less repetitive preparation and investigation, supported by dependable execution and accountable review. This is a proposed workflow to validate in a pilot.", + "speakText": "Let's follow what AI contributes to one banking release. Our example is a payment that times out after acceptance. The customer retries, and the team must prove that the money moves once. First, AI helps clarify the requirement. The product owner confirms the expected behavior.\n\nSecond, AI drafts the test scenarios: normal payment, timeout, repeated callback, concurrent retry, and a conflicting request. Domain testers review the coverage and expected outcomes.\n\nThird, AI helps developers write unit tests for retry and duplicate-request logic. These are fast checks of code behavior; they do not replace payment integration tests.\n\nFourth, AI turns accepted cases into candidate API and user-interface tests. Reviewers require money-movement assertions, not just a successful response.\n\nFifth, AI helps draft synthetic data and provider simulations. Engineers validate them. Isolated environments and service virtualization make the work repeatable.\n\nSixth, AI recommends relevant tests or requests an authorized pipeline run. The delivery pipeline executes the tests. Mandatory payment coverage stays in place.\n\nSeventh, AI connects failed assertions with logs and traces, and drafts a diagnosis. The team checks the evidence before accepting the explanation.\n\nEighth, AI can propose a repair. A developer reviews the change, and the pipeline reruns the tests with fresh data. The expected payment behavior stays fixed.\n\nNinth, AI assembles a linked release summary and suggests reviewed failures for the regression suite. People decide whether the evidence is sufficient. That is the end-to-end opportunity: less repetitive preparation and investigation, supported by dependable execution and accountable review. This is a proposed workflow to validate in a pilot." + }, + "slide-21": { + "title": "Follow one payment test through the handoffs", + "text": "Follow the same payment test through six handoffs. The approved requirement says a retry with the same key returns the original transfer and creates no second posting. The reviewed test matrix carries that intent forward.\n\nAI drafts a candidate test. A response-status check alone is too weak, so the reviewer requires the original transfer identifier, one journal, and independently agreed balances. That reviewed test becomes the change we can inspect.\n\nNow challenge the test with a deliberately faulty build. Our illustrative run finds two journals where one was expected. The test fails, and the original failure evidence is retained.\n\nAI links the failed assertion to the journal and trace evidence, and proposes a duplicate-posting diagnosis. An engineer confirms the cause and reviews the proposed fix.\n\nThe pipeline performs a fresh retest. The corrected build must pass, while the deliberately faulty variant must still fail. Changing the test simply to accept two debits would invalidate the result.\n\nFinally, the release pack links the requirement, reviewed test, failed run, fix and retest. The release owner checks remaining coverage and real-provider integration evidence. A passing retest is an input to that decision, not automatic approval. All identifiers and results here are authored examples.", + "speakText": "Follow the same payment test through six handoffs. The approved requirement says a retry with the same key returns the original transfer and creates no second posting. The reviewed test matrix carries that intent forward.\n\nAI drafts a candidate test. A response-status check alone is too weak, so the reviewer requires the original transfer identifier, one journal, and independently agreed balances. That reviewed test becomes the change we can inspect.\n\nNow challenge the test with a deliberately faulty build. Our illustrative run finds two journals where one was expected. The test fails, and the original failure evidence is retained.\n\nAI links the failed assertion to the journal and trace evidence, and proposes a duplicate-posting diagnosis. An engineer confirms the cause and reviews the proposed fix.\n\nThe pipeline performs a fresh retest. The corrected build must pass, while the deliberately faulty variant must still fail. Changing the test simply to accept two debits would invalidate the result.\n\nFinally, the release pack links the requirement, reviewed test, failed run, fix and retest. The release owner checks remaining coverage and real-provider integration evidence. A passing retest is an input to that decision, not automatic approval. All identifiers and results here are authored examples." } }, "technical": { @@ -147,8 +157,8 @@ }, "slide-9": { "title": "The appropriate test layer", - "text": "Choose the test layer that exposes the behavior. Service tests can check idempotency, concurrency and journal outcomes directly. A browser journey checks pending states, the retry action and the final message. Existing Selenium and Appium suites remain where they are owned and useful. Settlement reconciliation and provider checks stay scheduled separately. Replacing the browser framework does not create another settlement environment or remove a vendor access constraint.", - "speakText": "Choose the test layer that exposes the behavior. Service tests can check idempotency, concurrency and journal outcomes directly. A browser journey checks pending states, the retry action and the final message. Existing Selenium and Appium suites remain where they are owned and useful. Settlement reconciliation and provider checks stay scheduled separately. Replacing the browser framework does not create another settlement environment or remove a vendor access constraint." + "text": "Choose the test layer for the behavior you need to prove. Start with developer unit tests for idempotency-key validation and duplicate-request logic. Copilot can draft JUnit candidates, but developers review the assertions and test doubles. A fake repository cannot establish real payment integration. At the service and API layer, REST Assured and JUnit cover retry, concurrency, conflicts and journal outcomes. At the web layer, Playwright checks the pending state, retry action and final customer message. Keep the owned Selenium and Appium coverage for existing browser and mobile journeys. Batch settlement reconciliation and real-provider sandbox checks remain separate requirements. Generate tests within the appropriate layer; adding a browser framework does not resolve a scarce settlement environment.", + "speakText": "Choose the test layer for the behavior you need to prove. Start with developer unit tests for idempotency-key validation and duplicate-request logic. Copilot can draft JUnit candidates, but developers review the assertions and test doubles. A fake repository cannot establish real payment integration. At the service and API layer, REST Assured and JUnit cover retry, concurrency, conflicts and journal outcomes. At the web layer, Playwright checks the pending state, retry action and final customer message. Keep the owned Selenium and Appium coverage for existing browser and mobile journeys. Batch settlement reconciliation and real-provider sandbox checks remain separate requirements. Generate tests within the appropriate layer; adding a browser framework does not resolve a scarce settlement environment." }, "slide-10": { "title": "Publish raw CI results before AI interpretation", @@ -254,6 +264,21 @@ "title": "Prove reliability, integration and reuse", "text": "The last checks are reliability, integration and reuse. Repeat unchanged configurations and report unstable results without erasing the original failure. Verify agreed behavior against the real provider and report simulated outcomes separately. Ask a second squad to configure, run and evidence the assigned journeys independently, recording help from the pilot authors. Freeze definitions before comparing results. These checks show whether the capability is dependable enough to extend beyond its first team.", "speakText": "The last checks are reliability, integration and reuse. Repeat unchanged configurations and report unstable results without erasing the original failure. Verify agreed behavior against the real provider and report simulated outcomes separately. Ask a second squad to configure, run and evidence the assigned journeys independently, recording help from the pilot authors. Freeze definitions before comparing results. These checks show whether the capability is dependable enough to extend beyond its first team." + }, + "slide-31": { + "title": "Nine AI-assisted steps, with explicit handoffs", + "text": "Trace one release through nine handoffs. This is AI assistance to an existing payments testing team, distinct from evaluating an AI application. Start with approved context: the payment story, API contract and relevant defects. AI drafts clarification questions. Product and domain QA approve the rule that a same-key, same-payload retry returns the original transfer without a second posting.\n\nNext, test design produces a reviewed matrix. AI proposes timeout, duplicate callback, concurrency and conflicting-payload cases. Domain QA supplies the expected behavior independently of the implementation. A written case is an input to executable test code, not the code itself.\n\nThe developer unit-test step uses the handler source and accepted behavior. Copilot can draft JUnit candidates for key validation and duplicate-request logic. The developer checks the fake repository and verifies one insertion for repeated calls. A passing unit test does not establish correctness across the real database and provider.\n\nThe API and user-interface step turns the reviewed matrix into a pull request. REST Assured tests exercise the payment service; selected Playwright checks cover the customer's pending state and retry action. Reviewers require the original transfer identifier, one journal, and balances of ninety thousand and ten thousand minor units. A status-only assertion is rejected.\n\nData and provider behavior are versioned inputs. AI can draft synthetic seed scripts and WireMock mappings for acceptance followed by a timeout. Engineers validate those mappings against the provider contract. Testcontainers and the delivery pipeline supply repeatable resources. Real-provider and settlement checks remain separate requirements.\n\nFor execution, AI may recommend affected tests or request an authorized pipeline job. Azure Pipelines runs the approved suite and publishes raw JUnit results and traces. The mandatory payment suite cannot be silently omitted. Record the build, test commit, fixture and stub versions under the run identifier.\n\nDuring investigation, AI reads retained evidence and proposes a cause. In our injected-defect example, the assertion expects one journal but observes two. The defect draft must link that evidence. A reviewer confirms the diagnosis, and the original failing verdict remains unchanged.\n\nFor repair, AI may propose a source change for developer review. Keep the accepted payment assertions fixed. The pipeline uses a fresh run identifier and isolated data for the retest. The corrected build must pass, and the deliberate duplicate-posting variant must still fail.\n\nFor release evidence, AI drafts a summary of coverage, run results, reviewed dispositions and missing checks. The release owner reviews the linked pack, including required real-provider evidence. Accepted defects can become reviewed regression cases. The shared platform provides context access, artifact versions, scoped pipeline access and evidence retention across these steps; it does not replace the named owners.", + "speakText": "Trace one release through nine handoffs. This is AI assistance to an existing payments testing team, distinct from evaluating an AI application. Start with approved context: the payment story, API contract and relevant defects. AI drafts clarification questions. Product and domain QA approve the rule that a same-key, same-payload retry returns the original transfer without a second posting.\n\nNext, test design produces a reviewed matrix. AI proposes timeout, duplicate callback, concurrency and conflicting-payload cases. Domain QA supplies the expected behavior independently of the implementation. A written case is an input to executable test code, not the code itself.\n\nThe developer unit-test step uses the handler source and accepted behavior. Copilot can draft JUnit candidates for key validation and duplicate-request logic. The developer checks the fake repository and verifies one insertion for repeated calls. A passing unit test does not establish correctness across the real database and provider.\n\nThe API and user-interface step turns the reviewed matrix into a pull request. REST Assured tests exercise the payment service; selected Playwright checks cover the customer's pending state and retry action. Reviewers require the original transfer identifier, one journal, and balances of ninety thousand and ten thousand minor units. A status-only assertion is rejected.\n\nData and provider behavior are versioned inputs. AI can draft synthetic seed scripts and WireMock mappings for acceptance followed by a timeout. Engineers validate those mappings against the provider contract. Testcontainers and the delivery pipeline supply repeatable resources. Real-provider and settlement checks remain separate requirements.\n\nFor execution, AI may recommend affected tests or request an authorized pipeline job. Azure Pipelines runs the approved suite and publishes raw JUnit results and traces. The mandatory payment suite cannot be silently omitted. Record the build, test commit, fixture and stub versions under the run identifier.\n\nDuring investigation, AI reads retained evidence and proposes a cause. In our injected-defect example, the assertion expects one journal but observes two. The defect draft must link that evidence. A reviewer confirms the diagnosis, and the original failing verdict remains unchanged.\n\nFor repair, AI may propose a source change for developer review. Keep the accepted payment assertions fixed. The pipeline uses a fresh run identifier and isolated data for the retest. The corrected build must pass, and the deliberate duplicate-posting variant must still fail.\n\nFor release evidence, AI drafts a summary of coverage, run results, reviewed dispositions and missing checks. The release owner reviews the linked pack, including required real-provider evidence. Accepted defects can become reviewed regression cases. The shared platform provides context access, artifact versions, scoped pipeline access and evidence retention across these steps; it does not replace the named owners." + }, + "slide-32": { + "title": "PAY-142: requirement, test, failure, fix and proof", + "text": "Begin with the approved requirement and its test-case reference. The same idempotency key and payload must return the original transfer. The test matrix carries that criterion into the unit and API layers. The identifiers in this diagram are authored trace examples.\n\nThe AI candidate becomes a reviewed pull request. The unit test checks one insertion through a fake repository. The API test independently checks the original transfer ID, one balanced journal, payer balance ninety thousand, and recipient balance ten thousand minor units. A response-status check alone is rejected.\n\nThe first run pins the fixture and provider-model revisions. Execute the deliberate duplicate-posting variant: one journal is expected, but two are observed. JUnit reports a failure. Retain the assertion, trace and journal identifiers before cleanup. This is a designed challenge, not a reported banking incident.\n\nThe defect record links that failed run. AI proposes duplicate posting as a hypothesis, with evidence references. An engineer confirms the cause and reviews a production-code repair. Neither the AI summary nor the repair process may turn the original failed run into a pass.\n\nA fresh retest uses a new run identifier and unchanged payment expectations. The corrected build should pass, while the deliberately faulty variant must still fail. Link the source change and both results so the reviewer can inspect the difference.\n\nThe release pack includes the approved requirement, test commit, fixture and stub revisions, failed run, reviewed defect, repair and retest. Check required coverage and real-provider evidence before deciding. If integration proof is absent, the pack records that gap; the diagram does not grant release approval.", + "speakText": "Begin with the approved requirement and its test-case reference. The same idempotency key and payload must return the original transfer. The test matrix carries that criterion into the unit and API layers. The identifiers in this diagram are authored trace examples.\n\nThe AI candidate becomes a reviewed pull request. The unit test checks one insertion through a fake repository. The API test independently checks the original transfer ID, one balanced journal, payer balance ninety thousand, and recipient balance ten thousand minor units. A response-status check alone is rejected.\n\nThe first run pins the fixture and provider-model revisions. Execute the deliberate duplicate-posting variant: one journal is expected, but two are observed. JUnit reports a failure. Retain the assertion, trace and journal identifiers before cleanup. This is a designed challenge, not a reported banking incident.\n\nThe defect record links that failed run. AI proposes duplicate posting as a hypothesis, with evidence references. An engineer confirms the cause and reviews a production-code repair. Neither the AI summary nor the repair process may turn the original failed run into a pass.\n\nA fresh retest uses a new run identifier and unchanged payment expectations. The corrected build should pass, while the deliberately faulty variant must still fail. Link the source change and both results so the reviewer can inspect the difference.\n\nThe release pack includes the approved requirement, test commit, fixture and stub revisions, failed run, reviewed defect, repair and retest. Check required coverage and real-provider evidence before deciding. If integration proof is absent, the pack records that gap; the diagram does not grant release approval." + }, + "slide-33": { + "title": "Three states: isolate the incremental AI contribution", + "text": "The starting state has manual API requests and spreadsheets, shared environments, and no virtualized provider backend. QA engineers collect and reconcile evidence. Vendor test-slot availability constrains parallel execution.\n\nThe modernized state introduces reviewed REST Assured and JUnit tests, delivery-pipeline execution, isolated fixtures and a validated WireMock provider model. Testcontainers supports repeatable service-test resources. Raw assertions, traces and run identifiers survive cleanup. This foundation creates repeatability without depending on AI.\n\nThe AI-assisted state adds approved context, candidate artifacts and evidence-based assistance around that same execution path. AI drafts tests and fixtures, proposes relevant scope and diagnoses failures. Reviewers approve changes before existing runners execute them. Compare equivalent payment packs to distinguish modernization gains from incremental AI benefit. Include review, correction, platform overhead and real-provider checks. No measured improvement is claimed in this scenario.", + "speakText": "The starting state has manual API requests and spreadsheets, shared environments, and no virtualized provider backend. QA engineers collect and reconcile evidence. Vendor test-slot availability constrains parallel execution.\n\nThe modernized state introduces reviewed REST Assured and JUnit tests, delivery-pipeline execution, isolated fixtures and a validated WireMock provider model. Testcontainers supports repeatable service-test resources. Raw assertions, traces and run identifiers survive cleanup. This foundation creates repeatability without depending on AI.\n\nThe AI-assisted state adds approved context, candidate artifacts and evidence-based assistance around that same execution path. AI drafts tests and fixtures, proposes relevant scope and diagnoses failures. Reviewers approve changes before existing runners execute them. Compare equivalent payment packs to distinguish modernization gains from incremental AI benefit. Include review, correction, platform overhead and real-provider checks. No measured improvement is claimed in this scenario." } }, "industry-evp": { @@ -381,13 +406,18 @@ "title": "A focused first engagement", "text": "Choose one focused entry point. Requirements-ready teams can trial reviewed scenario design. Teams with repeatable execution can test generated API candidates. Teams with useful diagnostics can assess evidence-linked failure triage. Define the output, reviewer and acceptance evidence before starting. Build reusable assets as the work progresses. The result should support a specific next adoption decision, with quality, effort and prerequisites visible together.", "speakText": "Choose one focused entry point. Requirements-ready teams can trial reviewed scenario design. Teams with repeatable execution can test generated API candidates. Teams with useful diagnostics can assess evidence-linked failure triage. Define the output, reviewer and acceptance evidence before starting. Build reusable assets as the work progresses. The result should support a specific next adoption decision, with quality, effort and prerequisites visible together." + }, + "slide-26": { + "title": "What AI contributes, from requirement to release", + "text": "Let's follow what AI contributes to one banking release. Our example is a payment that times out after acceptance. The customer retries, and the team must prove that the money moves once. First, AI helps clarify the requirement. The product owner confirms the expected behavior.\n\nSecond, AI drafts the test scenarios: normal payment, timeout, repeated callback, concurrent retry, and a conflicting request. Domain testers review the coverage and expected outcomes.\n\nThird, AI helps developers write unit tests for retry and duplicate-request logic. These are fast checks of code behavior; they do not replace payment integration tests.\n\nFourth, AI turns accepted cases into candidate API and user-interface tests. Reviewers require money-movement assertions, not just a successful response.\n\nFifth, AI helps draft synthetic data and provider simulations. Engineers validate them. Isolated environments and service virtualization make the work repeatable.\n\nSixth, AI recommends relevant tests or requests an authorized pipeline run. The delivery pipeline executes the tests. Mandatory payment coverage stays in place.\n\nSeventh, AI connects failed assertions with logs and traces, and drafts a diagnosis. The team checks the evidence before accepting the explanation.\n\nEighth, AI can propose a repair. A developer reviews the change, and the pipeline reruns the tests with fresh data. The expected payment behavior stays fixed.\n\nNinth, AI assembles a linked release summary and suggests reviewed failures for the regression suite. People decide whether the evidence is sufficient. That is the end-to-end opportunity: less repetitive preparation and investigation, supported by dependable execution and accountable review. This is a proposed workflow to validate in a pilot.", + "speakText": "Let's follow what AI contributes to one banking release. Our example is a payment that times out after acceptance. The customer retries, and the team must prove that the money moves once. First, AI helps clarify the requirement. The product owner confirms the expected behavior.\n\nSecond, AI drafts the test scenarios: normal payment, timeout, repeated callback, concurrent retry, and a conflicting request. Domain testers review the coverage and expected outcomes.\n\nThird, AI helps developers write unit tests for retry and duplicate-request logic. These are fast checks of code behavior; they do not replace payment integration tests.\n\nFourth, AI turns accepted cases into candidate API and user-interface tests. Reviewers require money-movement assertions, not just a successful response.\n\nFifth, AI helps draft synthetic data and provider simulations. Engineers validate them. Isolated environments and service virtualization make the work repeatable.\n\nSixth, AI recommends relevant tests or requests an authorized pipeline run. The delivery pipeline executes the tests. Mandatory payment coverage stays in place.\n\nSeventh, AI connects failed assertions with logs and traces, and drafts a diagnosis. The team checks the evidence before accepting the explanation.\n\nEighth, AI can propose a repair. A developer reviews the change, and the pipeline reruns the tests with fresh data. The expected payment behavior stays fixed.\n\nNinth, AI assembles a linked release summary and suggests reviewed failures for the regression suite. People decide whether the evidence is sufficient. That is the end-to-end opportunity: less repetitive preparation and investigation, supported by dependable execution and accountable review. This is a proposed workflow to validate in a pilot." } }, "industry-technical": { "slide-1": { "title": "Assurance across the AI lifecycle", - "text": "This presentation examines the system behind AI-enabled quality work. We will connect context, independent evaluation, action boundaries, release decisions and operational feedback. The architecture covers both AI-assisted engineering and assurance of AI applications. Every important boundary needs an owner, a versioned contract and a failure behavior. The banking engineering blueprint provides the more detailed payment implementation example; this deck develops the reusable assurance architecture.", - "speakText": "This presentation examines the system behind AI-enabled quality work. We will connect context, independent evaluation, action boundaries, release decisions and operational feedback. The architecture covers both AI-assisted engineering and assurance of AI applications. Every important boundary needs an owner, a versioned contract and a failure behavior. The banking engineering blueprint provides the more detailed payment implementation example; this deck develops the reusable assurance architecture." + "text": "This industry briefing explains assurance across the AI lifecycle: context, generated tests, independent evaluation, action controls and release evidence. It includes testing AI applications as well as using AI in quality engineering. If your immediate question is how AI helps an existing banking QA team, follow the banking workflow link on this slide. That engineering walkthrough traces one payment requirement through unit tests, API tests, fixtures, execution, diagnosis, repair and release evidence. The final slide here also provides that nine-step overview. Choose the banking route for concrete delivery handoffs, and this industry route for the wider assurance architecture.", + "speakText": "This industry briefing explains assurance across the AI lifecycle: context, generated tests, independent evaluation, action controls and release evidence. It includes testing AI applications as well as using AI in quality engineering. If your immediate question is how AI helps an existing banking QA team, follow the banking workflow link on this slide. That engineering walkthrough traces one payment requirement through unit tests, API tests, fixtures, execution, diagnosis, repair and release evidence. The final slide here also provides that nine-step overview. Choose the banking route for concrete delivery handoffs, and this industry route for the wider assurance architecture." }, "slide-2": { "title": "The enterprise assurance platform", @@ -558,6 +588,11 @@ "title": "Measuring the incremental AI effect", "text": "Measure the incremental AI effect under shared conditions. Conventional and assisted work should use comparable tasks, frameworks, environments and acceptance rules. Reviewers inspect both, and independent tests challenge the behavior. Record every attempt, including correction, unsuccessful proposals and operating costs. First separate modernization improvements from the additional effect of AI. The decision to expand should follow accepted outcomes and complete effort, with uncertainty visible.", "speakText": "Measure the incremental AI effect under shared conditions. Conventional and assisted work should use comparable tasks, frameworks, environments and acceptance rules. Reviewers inspect both, and independent tests challenge the behavior. Record every attempt, including correction, unsuccessful proposals and operating costs. First separate modernization improvements from the additional effect of AI. The decision to expand should follow accepted outcomes and complete effort, with uncertainty visible." + }, + "slide-36": { + "title": "Nine AI-assisted steps, with explicit handoffs", + "text": "Trace one release through nine handoffs. This is AI assistance to an existing payments testing team, distinct from evaluating an AI application. Start with approved context: the payment story, API contract and relevant defects. AI drafts clarification questions. Product and domain QA approve the rule that a same-key, same-payload retry returns the original transfer without a second posting.\n\nNext, test design produces a reviewed matrix. AI proposes timeout, duplicate callback, concurrency and conflicting-payload cases. Domain QA supplies the expected behavior independently of the implementation. A written case is an input to executable test code, not the code itself.\n\nThe developer unit-test step uses the handler source and accepted behavior. Copilot can draft JUnit candidates for key validation and duplicate-request logic. The developer checks the fake repository and verifies one insertion for repeated calls. A passing unit test does not establish correctness across the real database and provider.\n\nThe API and user-interface step turns the reviewed matrix into a pull request. REST Assured tests exercise the payment service; selected Playwright checks cover the customer's pending state and retry action. Reviewers require the original transfer identifier, one journal, and balances of ninety thousand and ten thousand minor units. A status-only assertion is rejected.\n\nData and provider behavior are versioned inputs. AI can draft synthetic seed scripts and WireMock mappings for acceptance followed by a timeout. Engineers validate those mappings against the provider contract. Testcontainers and the delivery pipeline supply repeatable resources. Real-provider and settlement checks remain separate requirements.\n\nFor execution, AI may recommend affected tests or request an authorized pipeline job. Azure Pipelines runs the approved suite and publishes raw JUnit results and traces. The mandatory payment suite cannot be silently omitted. Record the build, test commit, fixture and stub versions under the run identifier.\n\nDuring investigation, AI reads retained evidence and proposes a cause. In our injected-defect example, the assertion expects one journal but observes two. The defect draft must link that evidence. A reviewer confirms the diagnosis, and the original failing verdict remains unchanged.\n\nFor repair, AI may propose a source change for developer review. Keep the accepted payment assertions fixed. The pipeline uses a fresh run identifier and isolated data for the retest. The corrected build must pass, and the deliberate duplicate-posting variant must still fail.\n\nFor release evidence, AI drafts a summary of coverage, run results, reviewed dispositions and missing checks. The release owner reviews the linked pack, including required real-provider evidence. Accepted defects can become reviewed regression cases. The shared platform provides context access, artifact versions, scoped pipeline access and evidence retention across these steps; it does not replace the named owners.", + "speakText": "Trace one release through nine handoffs. This is AI assistance to an existing payments testing team, distinct from evaluating an AI application. Start with approved context: the payment story, API contract and relevant defects. AI drafts clarification questions. Product and domain QA approve the rule that a same-key, same-payload retry returns the original transfer without a second posting.\n\nNext, test design produces a reviewed matrix. AI proposes timeout, duplicate callback, concurrency and conflicting-payload cases. Domain QA supplies the expected behavior independently of the implementation. A written case is an input to executable test code, not the code itself.\n\nThe developer unit-test step uses the handler source and accepted behavior. Copilot can draft JUnit candidates for key validation and duplicate-request logic. The developer checks the fake repository and verifies one insertion for repeated calls. A passing unit test does not establish correctness across the real database and provider.\n\nThe API and user-interface step turns the reviewed matrix into a pull request. REST Assured tests exercise the payment service; selected Playwright checks cover the customer's pending state and retry action. Reviewers require the original transfer identifier, one journal, and balances of ninety thousand and ten thousand minor units. A status-only assertion is rejected.\n\nData and provider behavior are versioned inputs. AI can draft synthetic seed scripts and WireMock mappings for acceptance followed by a timeout. Engineers validate those mappings against the provider contract. Testcontainers and the delivery pipeline supply repeatable resources. Real-provider and settlement checks remain separate requirements.\n\nFor execution, AI may recommend affected tests or request an authorized pipeline job. Azure Pipelines runs the approved suite and publishes raw JUnit results and traces. The mandatory payment suite cannot be silently omitted. Record the build, test commit, fixture and stub versions under the run identifier.\n\nDuring investigation, AI reads retained evidence and proposes a cause. In our injected-defect example, the assertion expects one journal but observes two. The defect draft must link that evidence. A reviewer confirms the diagnosis, and the original failing verdict remains unchanged.\n\nFor repair, AI may propose a source change for developer review. Keep the accepted payment assertions fixed. The pipeline uses a fresh run identifier and isolated data for the retest. The corrected build must pass, and the deliberate duplicate-posting variant must still fail.\n\nFor release evidence, AI drafts a summary of coverage, run results, reviewed dispositions and missing checks. The release owner reviews the linked pack, including required real-provider evidence. Accepted defects can become reviewed regression cases. The shared platform provides context access, artifact versions, scoped pipeline access and evidence retention across these steps; it does not replace the named owners." } } } diff --git a/assets/data/narration.json b/assets/data/narration.json index e405ba1..d345c48 100644 --- a/assets/data/narration.json +++ b/assets/data/narration.json @@ -1,5 +1,5 @@ { - "edition": "architecture-v1.21.0", + "edition": "banking-journey-v1.22.0", "decks": { "evp": { "label": "Banking executive narration", @@ -50,13 +50,13 @@ "sha256": "9e54de8c1559e4fe9e51b79d594bb443d12fdd537f6fcf98e630461a4c6419ae" }, "slide-6": { - "audio": "/assets/audio/chris-v1.17.0/evp/slide-6.mp3", - "captions": "/assets/audio/chris-v1.17.0/evp/slide-6.vtt", - "transcript": "Compare the two workflows. Today, engineers interpret requirements, prepare cases and data, wait for a shared environment, then collect evidence manually. The target adds approved context, repeatable execution and retained results. AI can propose a test or draft a diagnostic explanation at the appropriate stage. A human reviews the result before it progresses. This is a pilot target: foundation work, review effort and rework must be measured alongside any faster drafting.", + "audio": "/assets/audio/banking-journey-v1.22.0/evp/slide-6.mp3", + "captions": "/assets/audio/banking-journey-v1.22.0/evp/slide-6.vtt", + "transcript": "Start with today's manual workflow. People copy cases, prepare shared accounts, wait for a vendor test slot, and reconcile screenshots and logs. Seventy-five testers still face the same environment bottleneck. Now separate the modernization step. Engineers create reviewed automated tests, isolated data, and validated simulations of the payment provider. The delivery pipeline runs those tests and retains the evidence. That repeatability is valuable even without AI. Real-provider checks still need vendor capacity. Then add AI assistance. It helps draft cases, test code and fixtures, recommends relevant coverage, and helps explain failures and summarize proof. Engineers review the outputs, existing runners execute, and people make release decisions. Compare equivalent payment packs at all three stages. Measure waiting and reliability separately from AI drafting, review and rework. These are proposed states, not measured client improvements.", "voice": "ElevenLabs / Chris — Charming, Down-to-Earth", - "caption_method": "ElevenLabs character alignment, restored display terminology", - "duration": 30.32, - "sha256": "fd637dc8c0b9c6ebaef59881ed029c25c8143c569e500a72400a9de4a011ba15" + "caption_method": "ElevenLabs character alignment; authored section boundaries", + "duration": 63.44, + "sha256": "c2fdf6329c6d32a30f1fe94f872a3c874b3107cc8975cfe861c7ae2d8f446340" }, "slide-7": { "audio": "/assets/audio/chris-v1.17.0/evp/slide-7.mp3", @@ -174,6 +174,24 @@ "caption_method": "ElevenLabs character alignment, restored display terminology", "duration": 53.36, "sha256": "3576429426c5f2d1f6feb7039fd0da48768aefc7dce819ce638fee66c4268af9" + }, + "slide-20": { + "audio": "/assets/audio/banking-journey-v1.22.0/evp/slide-20.mp3", + "captions": "/assets/audio/banking-journey-v1.22.0/evp/slide-20.vtt", + "transcript": "Let's follow what AI contributes to one banking release. Our example is a payment that times out after acceptance. The customer retries, and the team must prove that the money moves once. First, AI helps clarify the requirement. The product owner confirms the expected behavior. Second, AI drafts the test scenarios: normal payment, timeout, repeated callback, concurrent retry, and a conflicting request. Domain testers review the coverage and expected outcomes. Third, AI helps developers write unit tests for retry and duplicate-request logic. These are fast checks of code behavior; they do not replace payment integration tests. Fourth, AI turns accepted cases into candidate API and user-interface tests. Reviewers require money-movement assertions, not just a successful response. Fifth, AI helps draft synthetic data and provider simulations. Engineers validate them. Isolated environments and service virtualization make the work repeatable. Sixth, AI recommends relevant tests or requests an authorized pipeline run. The delivery pipeline executes the tests. Mandatory payment coverage stays in place. Seventh, AI connects failed assertions with logs and traces, and drafts a diagnosis. The team checks the evidence before accepting the explanation. Eighth, AI can propose a repair. A developer reviews the change, and the pipeline reruns the tests with fresh data. The expected payment behavior stays fixed. Ninth, AI assembles a linked release summary and suggests reviewed failures for the regression suite. People decide whether the evidence is sufficient. That is the end-to-end opportunity: less repetitive preparation and investigation, supported by dependable execution and accountable review. This is a proposed workflow to validate in a pilot.", + "voice": "ElevenLabs / Chris — Charming, Down-to-Earth", + "caption_method": "ElevenLabs character alignment; authored section boundaries", + "duration": 122.24, + "sha256": "51bff8a242e0c0f414284bfffc7a6c2d1e38d21a8f2955a1a786f99486bc15eb" + }, + "slide-21": { + "audio": "/assets/audio/banking-journey-v1.22.0/evp/slide-21.mp3", + "captions": "/assets/audio/banking-journey-v1.22.0/evp/slide-21.vtt", + "transcript": "Follow the same payment test through six handoffs. The approved requirement says a retry with the same key returns the original transfer and creates no second posting. The reviewed test matrix carries that intent forward. AI drafts a candidate test. A response-status check alone is too weak, so the reviewer requires the original transfer identifier, one journal, and independently agreed balances. That reviewed test becomes the change we can inspect. Now challenge the test with a deliberately faulty build. Our illustrative run finds two journals where one was expected. The test fails, and the original failure evidence is retained. AI links the failed assertion to the journal and trace evidence, and proposes a duplicate-posting diagnosis. An engineer confirms the cause and reviews the proposed fix. The pipeline performs a fresh retest. The corrected build must pass, while the deliberately faulty variant must still fail. Changing the test simply to accept two debits would invalidate the result. Finally, the release pack links the requirement, reviewed test, failed run, fix and retest. The release owner checks remaining coverage and real-provider integration evidence. A passing retest is an input to that decision, not automatic approval. All identifiers and results here are authored examples.", + "voice": "ElevenLabs / Chris — Charming, Down-to-Earth", + "caption_method": "ElevenLabs character alignment; authored section boundaries", + "duration": 84.08, + "sha256": "14277c21eaeea153f4ae57944c636c48e2cb8df3d77e2ef7cdf4d3ac3c170aa0" } }, "duration": 611.2 @@ -254,13 +272,13 @@ "sha256": "635841d9d05ce4854030647f82afa13b459dda783fb3b5df5faf836234efa37a" }, "slide-9": { - "audio": "/assets/audio/chris-v1.17.0/technical/slide-9.mp3", - "captions": "/assets/audio/chris-v1.17.0/technical/slide-9.vtt", - "transcript": "Choose the test layer that exposes the behavior. Service tests can check idempotency, concurrency and journal outcomes directly. A browser journey checks pending states, the retry action and the final message. Existing Selenium and Appium suites remain where they are owned and useful. Settlement reconciliation and provider checks stay scheduled separately. Replacing the browser framework does not create another settlement environment or remove a vendor access constraint.", + "audio": "/assets/audio/banking-journey-v1.22.0/technical/slide-9.mp3", + "captions": "/assets/audio/banking-journey-v1.22.0/technical/slide-9.vtt", + "transcript": "Choose the test layer for the behavior you need to prove. Start with developer unit tests for idempotency-key validation and duplicate-request logic. Copilot can draft JUnit candidates, but developers review the assertions and test doubles. A fake repository cannot establish real payment integration. At the service and API layer, REST Assured and JUnit cover retry, concurrency, conflicts and journal outcomes. At the web layer, Playwright checks the pending state, retry action and final customer message. Keep the owned Selenium and Appium coverage for existing browser and mobile journeys. Batch settlement reconciliation and real-provider sandbox checks remain separate requirements. Generate tests within the appropriate layer; adding a browser framework does not resolve a scarce settlement environment.", "voice": "ElevenLabs / Chris — Charming, Down-to-Earth", - "caption_method": "ElevenLabs character alignment, restored display terminology", - "duration": 29.2, - "sha256": "24364558187c1e123c954c745ad4da2c1c50b9004553db7da0465d5fca608164" + "caption_method": "ElevenLabs character alignment; authored section boundaries", + "duration": 51.92, + "sha256": "f2bc620e93e33f193e37f89a6344ac09e9acf2facc196a6b52a0b968e4f9504a" }, "slide-10": { "audio": "/assets/audio/chris-v1.17.0/technical/slide-10.mp3", @@ -450,6 +468,33 @@ "caption_method": "ElevenLabs character alignment, restored display terminology", "duration": 32.08, "sha256": "79e3a65a90f2083276c7c22a425af11808d1cacde8712331642f9d468b6c398e" + }, + "slide-31": { + "audio": "/assets/audio/banking-journey-v1.22.0/technical/slide-31.mp3", + "captions": "/assets/audio/banking-journey-v1.22.0/technical/slide-31.vtt", + "transcript": "Trace one release through nine handoffs. This is AI assistance to an existing payments testing team, distinct from evaluating an AI application. Start with approved context: the payment story, API contract and relevant defects. AI drafts clarification questions. Product and domain QA approve the rule that a same-key, same-payload retry returns the original transfer without a second posting. Next, test design produces a reviewed matrix. AI proposes timeout, duplicate callback, concurrency and conflicting-payload cases. Domain QA supplies the expected behavior independently of the implementation. A written case is an input to executable test code, not the code itself. The developer unit-test step uses the handler source and accepted behavior. Copilot can draft JUnit candidates for key validation and duplicate-request logic. The developer checks the fake repository and verifies one insertion for repeated calls. A passing unit test does not establish correctness across the real database and provider. The API and user-interface step turns the reviewed matrix into a pull request. REST Assured tests exercise the payment service; selected Playwright checks cover the customer's pending state and retry action. Reviewers require the original transfer identifier, one journal, and balances of ninety thousand and ten thousand minor units. A status-only assertion is rejected. Data and provider behavior are versioned inputs. AI can draft synthetic seed scripts and WireMock mappings for acceptance followed by a timeout. Engineers validate those mappings against the provider contract. Testcontainers and the delivery pipeline supply repeatable resources. Real-provider and settlement checks remain separate requirements. For execution, AI may recommend affected tests or request an authorized pipeline job. Azure Pipelines runs the approved suite and publishes raw JUnit results and traces. The mandatory payment suite cannot be silently omitted. Record the build, test commit, fixture and stub versions under the run identifier. During investigation, AI reads retained evidence and proposes a cause. In our injected-defect example, the assertion expects one journal but observes two. The defect draft must link that evidence. A reviewer confirms the diagnosis, and the original failing verdict remains unchanged. For repair, AI may propose a source change for developer review. Keep the accepted payment assertions fixed. The pipeline uses a fresh run identifier and isolated data for the retest. The corrected build must pass, and the deliberate duplicate-posting variant must still fail. For release evidence, AI drafts a summary of coverage, run results, reviewed dispositions and missing checks. The release owner reviews the linked pack, including required real-provider evidence. Accepted defects can become reviewed regression cases. The shared platform provides context access, artifact versions, scoped pipeline access and evidence retention across these steps; it does not replace the named owners.", + "voice": "ElevenLabs / Chris — Charming, Down-to-Earth", + "caption_method": "ElevenLabs character alignment; authored section boundaries", + "duration": 199.04, + "sha256": "a3d24c7646517acd5344a359b294ccb308401b793e8b7edd20d3abb158fbe095" + }, + "slide-32": { + "audio": "/assets/audio/banking-journey-v1.22.0/technical/slide-32.mp3", + "captions": "/assets/audio/banking-journey-v1.22.0/technical/slide-32.vtt", + "transcript": "Begin with the approved requirement and its test-case reference. The same idempotency key and payload must return the original transfer. The test matrix carries that criterion into the unit and API layers. The identifiers in this diagram are authored trace examples. The AI candidate becomes a reviewed pull request. The unit test checks one insertion through a fake repository. The API test independently checks the original transfer ID, one balanced journal, payer balance ninety thousand, and recipient balance ten thousand minor units. A response-status check alone is rejected. The first run pins the fixture and provider-model revisions. Execute the deliberate duplicate-posting variant: one journal is expected, but two are observed. JUnit reports a failure. Retain the assertion, trace and journal identifiers before cleanup. This is a designed challenge, not a reported banking incident. The defect record links that failed run. AI proposes duplicate posting as a hypothesis, with evidence references. An engineer confirms the cause and reviews a production-code repair. Neither the AI summary nor the repair process may turn the original failed run into a pass. A fresh retest uses a new run identifier and unchanged payment expectations. The corrected build should pass, while the deliberately faulty variant must still fail. Link the source change and both results so the reviewer can inspect the difference. The release pack includes the approved requirement, test commit, fixture and stub revisions, failed run, reviewed defect, repair and retest. Check required coverage and real-provider evidence before deciding. If integration proof is absent, the pack records that gap; the diagram does not grant release approval.", + "voice": "ElevenLabs / Chris — Charming, Down-to-Earth", + "caption_method": "ElevenLabs character alignment; authored section boundaries", + "duration": 110.88, + "sha256": "c692bde7540abeb4bc3f939a1057cf5c7a714f4613bda6ef32183df2f205bdc5" + }, + "slide-33": { + "audio": "/assets/audio/banking-journey-v1.22.0/technical/slide-33.mp3", + "captions": "/assets/audio/banking-journey-v1.22.0/technical/slide-33.vtt", + "transcript": "The starting state has manual API requests and spreadsheets, shared environments, and no virtualized provider backend. QA engineers collect and reconcile evidence. Vendor test-slot availability constrains parallel execution. The modernized state introduces reviewed REST Assured and JUnit tests, delivery-pipeline execution, isolated fixtures and a validated WireMock provider model. Testcontainers supports repeatable service-test resources. Raw assertions, traces and run identifiers survive cleanup. This foundation creates repeatability without depending on AI. The AI-assisted state adds approved context, candidate artifacts and evidence-based assistance around that same execution path. AI drafts tests and fixtures, proposes relevant scope and diagnoses failures. Reviewers approve changes before existing runners execute them. Compare equivalent payment packs to distinguish modernization gains from incremental AI benefit. Include review, correction, platform overhead and real-provider checks. No measured improvement is claimed in this scenario.", + "voice": "ElevenLabs / Chris — Charming, Down-to-Earth", + "caption_method": "ElevenLabs character alignment; authored section boundaries", + "duration": 68.8, + "sha256": "7e3426502372771118d6b85186ea10418d88bb59209bd7ee2b7ca9fd6ecf9622" } }, "duration": 960.72 @@ -681,6 +726,15 @@ "caption_method": "ElevenLabs character alignment, restored display terminology", "duration": 31.52, "sha256": "18a1cc2acaaad7838d4f7a21145abc3449a2aa26b1edeeac09cf95b0917cd4d2" + }, + "slide-26": { + "audio": "/assets/audio/banking-journey-v1.22.0/evp/slide-20.mp3", + "captions": "/assets/audio/banking-journey-v1.22.0/evp/slide-20.vtt", + "transcript": "Let's follow what AI contributes to one banking release. Our example is a payment that times out after acceptance. The customer retries, and the team must prove that the money moves once. First, AI helps clarify the requirement. The product owner confirms the expected behavior. Second, AI drafts the test scenarios: normal payment, timeout, repeated callback, concurrent retry, and a conflicting request. Domain testers review the coverage and expected outcomes. Third, AI helps developers write unit tests for retry and duplicate-request logic. These are fast checks of code behavior; they do not replace payment integration tests. Fourth, AI turns accepted cases into candidate API and user-interface tests. Reviewers require money-movement assertions, not just a successful response. Fifth, AI helps draft synthetic data and provider simulations. Engineers validate them. Isolated environments and service virtualization make the work repeatable. Sixth, AI recommends relevant tests or requests an authorized pipeline run. The delivery pipeline executes the tests. Mandatory payment coverage stays in place. Seventh, AI connects failed assertions with logs and traces, and drafts a diagnosis. The team checks the evidence before accepting the explanation. Eighth, AI can propose a repair. A developer reviews the change, and the pipeline reruns the tests with fresh data. The expected payment behavior stays fixed. Ninth, AI assembles a linked release summary and suggests reviewed failures for the regression suite. People decide whether the evidence is sufficient. That is the end-to-end opportunity: less repetitive preparation and investigation, supported by dependable execution and accountable review. This is a proposed workflow to validate in a pilot.", + "voice": "ElevenLabs / Chris — Charming, Down-to-Earth", + "caption_method": "ElevenLabs character alignment; authored section boundaries", + "duration": 122.24, + "sha256": "51bff8a242e0c0f414284bfffc7a6c2d1e38d21a8f2955a1a786f99486bc15eb" } }, "duration": 737.68 @@ -689,13 +743,13 @@ "label": "Industry technical narration", "slides": { "slide-1": { - "audio": "/assets/audio/chris-v1.17.0/industry-technical/slide-1.mp3", - "captions": "/assets/audio/chris-v1.17.0/industry-technical/slide-1.vtt", - "transcript": "This presentation examines the system behind AI-enabled quality work. We will connect context, independent evaluation, action boundaries, release decisions and operational feedback. The architecture covers both AI-assisted engineering and assurance of AI applications. Every important boundary needs an owner, a versioned contract and a failure behavior. The banking engineering blueprint provides the more detailed payment implementation example; this deck develops the reusable assurance architecture.", + "audio": "/assets/audio/banking-journey-v1.22.0/industry-technical/slide-1.mp3", + "captions": "/assets/audio/banking-journey-v1.22.0/industry-technical/slide-1.vtt", + "transcript": "This industry briefing explains assurance across the AI lifecycle: context, generated tests, independent evaluation, action controls and release evidence. It includes testing AI applications as well as using AI in quality engineering. If your immediate question is how AI helps an existing banking QA team, follow the banking workflow link on this slide. That engineering walkthrough traces one payment requirement through unit tests, API tests, fixtures, execution, diagnosis, repair and release evidence. The final slide here also provides that nine-step overview. Choose the banking route for concrete delivery handoffs, and this industry route for the wider assurance architecture.", "voice": "ElevenLabs / Chris — Charming, Down-to-Earth", - "caption_method": "ElevenLabs character alignment, restored display terminology", - "duration": 31.12, - "sha256": "56d97bcdecb12bb1d7947ce5fc3403358140c526d8fae8c927315e7e52ababf7" + "caption_method": "ElevenLabs character alignment; authored section boundaries", + "duration": 44.64, + "sha256": "97ca4704cdc2205397cc1001b3fa64d67e4089376e2df0bad9620ec57b27d9fe" }, "slide-2": { "audio": "/assets/audio/architecture-v1.21.0/industry-technical/slide-2.mp3", @@ -1002,6 +1056,15 @@ "caption_method": "ElevenLabs character alignment, restored display terminology", "duration": 33.44, "sha256": "ebf1588c359257ebba0ba55677f36dfdcbe18f80e11a66f85b11ed32b6530a6c" + }, + "slide-36": { + "audio": "/assets/audio/banking-journey-v1.22.0/technical/slide-31.mp3", + "captions": "/assets/audio/banking-journey-v1.22.0/technical/slide-31.vtt", + "transcript": "Trace one release through nine handoffs. This is AI assistance to an existing payments testing team, distinct from evaluating an AI application. Start with approved context: the payment story, API contract and relevant defects. AI drafts clarification questions. Product and domain QA approve the rule that a same-key, same-payload retry returns the original transfer without a second posting. Next, test design produces a reviewed matrix. AI proposes timeout, duplicate callback, concurrency and conflicting-payload cases. Domain QA supplies the expected behavior independently of the implementation. A written case is an input to executable test code, not the code itself. The developer unit-test step uses the handler source and accepted behavior. Copilot can draft JUnit candidates for key validation and duplicate-request logic. The developer checks the fake repository and verifies one insertion for repeated calls. A passing unit test does not establish correctness across the real database and provider. The API and user-interface step turns the reviewed matrix into a pull request. REST Assured tests exercise the payment service; selected Playwright checks cover the customer's pending state and retry action. Reviewers require the original transfer identifier, one journal, and balances of ninety thousand and ten thousand minor units. A status-only assertion is rejected. Data and provider behavior are versioned inputs. AI can draft synthetic seed scripts and WireMock mappings for acceptance followed by a timeout. Engineers validate those mappings against the provider contract. Testcontainers and the delivery pipeline supply repeatable resources. Real-provider and settlement checks remain separate requirements. For execution, AI may recommend affected tests or request an authorized pipeline job. Azure Pipelines runs the approved suite and publishes raw JUnit results and traces. The mandatory payment suite cannot be silently omitted. Record the build, test commit, fixture and stub versions under the run identifier. During investigation, AI reads retained evidence and proposes a cause. In our injected-defect example, the assertion expects one journal but observes two. The defect draft must link that evidence. A reviewer confirms the diagnosis, and the original failing verdict remains unchanged. For repair, AI may propose a source change for developer review. Keep the accepted payment assertions fixed. The pipeline uses a fresh run identifier and isolated data for the retest. The corrected build must pass, and the deliberate duplicate-posting variant must still fail. For release evidence, AI drafts a summary of coverage, run results, reviewed dispositions and missing checks. The release owner reviews the linked pack, including required real-provider evidence. Accepted defects can become reviewed regression cases. The shared platform provides context access, artifact versions, scoped pipeline access and evidence retention across these steps; it does not replace the named owners.", + "voice": "ElevenLabs / Chris — Charming, Down-to-Earth", + "caption_method": "ElevenLabs character alignment; authored section boundaries", + "duration": 199.04, + "sha256": "a3d24c7646517acd5344a359b294ccb308401b793e8b7edd20d3abb158fbe095" } }, "duration": 1025.2 diff --git a/assets/pdf/ai-qe-evp-v1.22.0.pdf b/assets/pdf/ai-qe-evp-v1.22.0.pdf new file mode 100644 index 0000000..739041e Binary files /dev/null and b/assets/pdf/ai-qe-evp-v1.22.0.pdf differ diff --git a/assets/pdf/ai-qe-fintech-evp-v1.22.0.pdf b/assets/pdf/ai-qe-fintech-evp-v1.22.0.pdf new file mode 100644 index 0000000..cfc7441 Binary files /dev/null and b/assets/pdf/ai-qe-fintech-evp-v1.22.0.pdf differ diff --git a/assets/pdf/ai-qe-fintech-technical-v1.22.0.pdf b/assets/pdf/ai-qe-fintech-technical-v1.22.0.pdf new file mode 100644 index 0000000..60b7d4f Binary files /dev/null and b/assets/pdf/ai-qe-fintech-technical-v1.22.0.pdf differ diff --git a/assets/pdf/ai-qe-technical-v1.22.0.pdf b/assets/pdf/ai-qe-technical-v1.22.0.pdf new file mode 100644 index 0000000..7ba7b34 Binary files /dev/null and b/assets/pdf/ai-qe-technical-v1.22.0.pdf differ diff --git a/briefings/evp.html b/briefings/evp.html index 46ab378..28889dc 100644 --- a/briefings/evp.html +++ b/briefings/evp.html @@ -5,7 +5,7 @@ description: Research-informed AI and quality engineering — Executive · Strategic vision. audience: Executive · Strategic vision deck_class: evp-deck -slide_count: 25 +slide_count: 26 nav_exclude: true search_exclude: true permalink: /briefings/evp/ @@ -148,3 +148,9 @@

25 / Fintech evidence and adoption

A focused first engagement

{% include fintech-evidence/pilot-paths.html %}

Select the entry point that fits the client’s foundations. Build reusable assets and retain evidence for the next adoption decision.

{% include slide-footer.html n="25" source="/case-studies/fintech/evidence/" label="Fintech evidence and pilot design" %} + +
+

Our Banking Client / Authored payment scenario

What AI contributes, from requirement to release

+
{% include fintech/ai-journey.html %}

AI assists the testing team. For code, fixtures, failure evidence and release handoffs, open the banking engineering walkthrough →

+{% include slide-footer.html n="26" source="/case-studies/fintech/#ai-journey" label="Banking workflow, artifacts and sources" %} +
diff --git a/briefings/fintech-evp.html b/briefings/fintech-evp.html index b7131f1..8543aa0 100644 --- a/briefings/fintech-evp.html +++ b/briefings/fintech-evp.html @@ -6,8 +6,8 @@ deck_class: fintech-deck evp-deck fintech: true case_audience: evp -slide_count: 19 -slide_edition: "1.16.1" +slide_count: 21 +slide_edition: "1.22.0" nav_exclude: true search_exclude: true permalink: /briefings/fintech-evp/ diff --git a/briefings/fintech-technical.html b/briefings/fintech-technical.html index 101843e..0c2b087 100644 --- a/briefings/fintech-technical.html +++ b/briefings/fintech-technical.html @@ -6,8 +6,8 @@ deck_class: fintech-deck technical-deck fintech: true case_audience: technical -slide_count: 30 -slide_edition: "1.16.1" +slide_count: 33 +slide_edition: "1.22.0" nav_exclude: true search_exclude: true permalink: /briefings/fintech-technical/ diff --git a/briefings/index.md b/briefings/index.md index e280393..d6e6b2a 100644 --- a/briefings/index.md +++ b/briefings/index.md @@ -20,7 +20,7 @@ has_toc: false {% endfor %} - +

Preview before you present

Explore the industry decks here.

{% include briefing-embed.html %}
diff --git a/briefings/technical.html b/briefings/technical.html index 5c622c8..b7f7afb 100644 --- a/briefings/technical.html +++ b/briefings/technical.html @@ -5,7 +5,7 @@ description: Research-informed AI and quality engineering — Technical SDs & leads · Architecture. audience: Technical SDs & leads · Architecture deck_class: technical-deck -slide_count: 35 +slide_count: 36 nav_exclude: true search_exclude: true permalink: /briefings/technical/ @@ -13,7 +13,7 @@ ---

Technical SDs & leads · Architecture / September 2026

Assurance across
the AI lifecycle

-

AI × quality engineering · Industry research

+

AI × quality engineering · Industry research
For AI-assisted payment testing:
Start with the banking workflow →

Conceptual AI assurance laboratory with evaluation and human oversight {% include slide-footer.html n="01" source="/docs/industry/" label="Research scope and sources" %}
@@ -200,3 +200,9 @@

35 / Fintech evidence and adoption

Measuring the incremental AI effect

{% include fintech-evidence/comparison.html %}

Record every attempt and separate active effort, wait time and setup. Quality and net effort both inform whether to expand.

{% include slide-footer.html n="35" source="/case-studies/fintech/evidence/" label="Fintech evidence and pilot design" %} + +
+

Our Banking Client / Authored payment scenario

AI-assisted payment QE: the end-to-end workflow

+
{% include fintech/ai-journey.html %}

AI assists the testing team. For code, fixtures, failure evidence and release handoffs, open the banking engineering walkthrough →

+{% include slide-footer.html n="36" source="/case-studies/fintech/#ai-journey" label="Banking workflow, artifacts and sources" %} +
diff --git a/case-studies/fintech-implementation.md b/case-studies/fintech-implementation.md index d8c586e..f96741d 100644 --- a/case-studies/fintech-implementation.md +++ b/case-studies/fintech-implementation.md @@ -200,3 +200,37 @@ Use one record per comparable API test pack. Retain failed runs and foundation w ## External evidence and the client trial The [financial-services evidence explorer]({{ '/case-studies/fintech/evidence/' | relative_url }}) separates direct AI testing cases from modernization and adjacent engineering results. Use its trial selector to agree the first workflow, reviewer and acceptance criteria. Peer figures do not replace Our Banking Client’s illustrative inputs or supply a client forecast. Record actual API pilot dates and effort against the illustrative planning windows; readiness and sufficient evidence determine progression. + +## From a unit-test candidate to API proof {#unit-to-api} + +The [nine-step walkthrough]({{ '/case-studies/fintech/#ai-journey' | relative_url }}) follows one authored payment scenario. Its identifiers connect the handoffs; they are not records from a deployed bank. Developer unit testing is shown alongside the existing eight-stage QA effort model, without adding an unsupported savings estimate. + +**Approved input:** AC-142 requires the same idempotency key and payload to return the original transfer without another posting. CASE-142-R exercises a timeout after provider acceptance and a same-key retry. Domain QA sets the expected outcome before AI drafts the code. + +An AI assistant can draft this **JUnit-style pseudocode** from the accepted behavior and existing test patterns. The handler, request and fake repository below illustrate interfaces that the application team must implement; this snippet is not an executable bank integration. + +```java +@Test void sameKeyReturnsOriginalTransfer() { + var repository = new RecordingFakeTransferRepository(); + var handler = new TransferHandler(repository); + var request = transfer("pay-142", "payer", "recipient", 10000); + + var original = handler.create(request); + var retry = handler.create(request); + + assertEquals(original.id(), retry.id()); + assertEquals(1, repository.insertions()); +} +``` + +**Developer review:** verify that the fake records real calls, that assertions reflect AC-142, and that the test fails when deduplication is deliberately bypassed. This unit test does not exercise network timeouts, actual database constraints, provider acceptance, or concurrent transactions. Those need separate API, concurrency and integration cases. + +**API handoff:** PR-142 carries the reviewed executable test. FIX-142 supplies synthetic accounts starting at 100000 and 0 minor units. STUB-142 models provider acceptance followed by a lost response. A REST Assured/JUnit test must check the original transfer ID, exactly one balanced journal, payer 90000 and recipient 10000 minor units after retry. Selected Playwright checks cover the pending state and customer retry action. + +**Failure and repair:** the deliberately faulty variant produces two journals in RUN-142. AI can draft DEF-142 with assertion, trace and journal references; an engineer confirms the cause. Keep the original FAIL record. After a reviewed production fix, RERUN-143 uses fresh data and unchanged expected behavior. The corrected build must pass and the deliberate duplicate-posting variant must still fail. These are expected sample outcomes, not executed client results. + +**Release handoff:** PACK-142 links AC-142, CASE-142-R, the test commit, fixture/stub revisions, original run, reviewed defect, fix and rerun. Required real-provider checks and settlement evidence remain release gates. AI drafts the summary; the release owner decides. + +**Measure three states:** compare manual QE with repeatable automated QE, then compare equivalent automated packs with and without AI assistance. Record critical-scenario coverage, candidate acceptance after review, injected-fault detection, environment wait, feedback time and evidence completeness. Include review, rework and platform overhead. Service virtualization benefits must not be counted as an isolated AI gain. + +Mechanism references: [Copilot test generation and review](https://docs.github.com/en/copilot/tutorials/write-tests), [WireMock service virtualization](https://wiremock.org/docs/solutions/service-virtualization/), and [Azure Pipelines test-result publishing](https://learn.microsoft.com/en-us/azure/devops/pipelines/tasks/reference/publish-test-results-v2?view=azure-pipelines). diff --git a/case-studies/fintech.html b/case-studies/fintech.html index b54d28d..fc978f2 100644 --- a/case-studies/fintech.html +++ b/case-studies/fintech.html @@ -8,7 +8,7 @@ --- {% assign case = site.data.fintech_case %}
-

{{ site.data.fintech_case.company }} / A fictional fintech story / Edition v{{ case.edition }}

A payment retry.
A different way to deliver quality.

In this QE testing scenario, a customer sends CAD 100, sees a timeout and tries again. Across five squads, 75 offshore QA staff need to prove that the money moves once while much testing remains manual and vendor test environments are scarce. Follow the release and the work behind it.

{{ case.disclosure }}

+

{{ site.data.fintech_case.company }} / A fictional fintech story / Edition v{{ case.edition }}

A payment retry.
A different way to deliver quality.

In this QE testing scenario, a customer sends CAD 100, sees a timeout and tries again. Across five squads, 75 offshore QA staff need to prove that the money moves once while much testing remains manual and vendor test environments are scarce. Follow the release and the work behind it.

{{ case.disclosure }}

@@ -24,6 +24,14 @@

QE testing scenario with an injected defect, not an observed client failure. No live payment service, test runner or customer data is used. Each journal has two balancing entries. No fees, FX or unrelated activity. The arrows show sequence, not traffic volume.

+

One release / Nine connected steps

What AI contributes from requirement to release

Follow PAY-142 through approved intent, test design, developer unit tests, executable API/UI tests, fixtures, execution, investigation, repair and release evidence. Each step names the AI output and the person who checks it. This is a proposed walkthrough, not a claim that a bank has already deployed it.

+{% include fintech/ai-journey.html %} +

Three responsibilities: AI drafts and recommends. Existing automation provisions environments and executes tests. People approve behavior, changes and release decisions. Unit testing is developer work alongside the QA workflow; it adds no hours to the existing eight-stage effort model.

+
{% for step in site.data.qe_journey.figures['qe-journey'].nodes %}
{{ step.title }}
Before
{{ step.before }}
Input
{{ step.input }}
AI assistance and execution boundary
{{ step.detail }}
Sample output
{{ step.artifact }}
Accountable reviewer
{{ step.owner }}
{% endfor %}
+ +

Technology mechanisms: Copilot test drafting, service virtualization, and CI test-result publishing. These sources support the mechanisms, not the illustrative client outcomes.

+

Follow one artifact chain, including the failed run

Every reference below belongs to the same authored PAY-142 example. The duplicate-posting defect is deliberately injected to challenge the test. Original failures remain linked after a repair; actual integration evidence is still required.

{% include fintech/artifact-trace.html %}

Outcome checks: critical-scenario coverage, first-pass usable candidates, injected-fault detection, environment waiting, feedback time and evidence completeness. Compare manual to modernized QE first; then measure the additional effect of AI on equivalent packs, including review and rework.

+

The leadership adoption roadmap

Four layers of AI-assisted QE

Start with a person using Copilot, connect one repeatable workflow, delegate bounded tasks where justified, and scale proven services across squads. Select a layer to inspect its payment example and prerequisites.

{% include adoption/layers.html slide=true %}

Explore the AI adoption roadmap →

02 / Build once, reuse across squads

The proposed shared QA platform

{% include fintech/architecture.html %}

This is the target to build and prove; backend service virtualization and isolated runs are not available in the scenario baseline. Context adapters bring approved stories, test examples and relevant defects into the AI workbench. Reviewers approve artifacts before existing pipelines execute them. The platform team owns the shared integration and fixtures; each application team owns its expected behavior.

Inspect the technology choices and integration work →

@@ -32,7 +40,7 @@

Quality, reliability and adoption

Outcomes beyond hours

Use three primary measures to judge whether the pilot earns trust. Inspect the definitions below for supporting proof, owners and limits.

{% include fintech/outcomes.html %}

Business outcomes to validate: fewer customer-impacting payment defects, fewer emergency fixes and more predictable releases. Track these across comparable releases; the pilot measures alone do not establish those effects.

{% include fintech/outcome-register.html %}

Present the executive outcomes → · Inspect the technical measures →

-

03 / Break down the work

AI assistance at every workflow stage

Before / after: the API testing workflow

{% include fintech/before-after.html %}

Choose a stage to inspect the manual work, AI assistance and a concrete sample artifact. Samples are authored illustrations, not a live payment integration.

+

03 / Break down the work

AI assistance at every workflow stage

Before / after: manual, modernized and AI-assisted QE

{% include fintech/before-after.html %}

Choose a stage to inspect the manual work, AI assistance and a concrete sample artifact. Samples are authored illustrations, not a live payment integration.

{% for stage in case.workflow %}

{{ forloop.index }}. {{ stage.title }}

“{{ stage.example }}”

How the work changes: inputs, assistance, owners and tools
Input
{{ stage.input }}
Current manual work
{{ stage.manual }}
AI assistance
{{ stage.ai }}
Output
{{ stage.output }}
Owner and human check
{{ stage.owner }}. {{ stage.check }}
Example stack
{{ stage.stack }}
{% assign sample = site.data.visual_story.artifacts | where: "id", stage.id | first %}

Authored sample · {{ sample.ref }}

{{ sample.content | escape }}

{{ stage.owner }} checks: {{ sample.check }}

Handoff: {{ sample.handoff }}

{% endfor %}
diff --git a/docs/research-log.md b/docs/research-log.md index 0c7c9fe..c0b3005 100644 --- a/docs/research-log.md +++ b/docs/research-log.md @@ -148,3 +148,8 @@ Earlier entries below record the initial review; this entry supersedes their sta - Will OSFI issue guidance specific to agentic AI beyond the July 2026 bulletin, and will E-23 proportionality be clarified for human-reviewed assistants? - What does Bill C-36 look like after second reading, and does the automated-decision explanation duty reach AI-generated test evidence? - Do any banks publish measured results (not case-study claims) for AI-QE pilots with a stated capture mechanism? + + +## 9 September 2026 — Banking AI contribution through the release + +Rechecked GitHub Copilot test-generation guidance, WireMock service virtualization and Azure Pipelines Publish Test Results documentation. The in-place banking walkthrough maps these mechanisms to approved inputs, AI candidates, engineer review, deterministic execution and retained evidence. PAY-142 artifacts and failure/repair results are authored illustrations; no client execution or measured outcome is claimed. The comparison separates modernization from incremental AI assistance. Existing eight-stage QA effort assumptions remain unchanged. diff --git a/index.md b/index.md index c8cd7f5..45f0b03 100644 --- a/index.md +++ b/index.md @@ -25,14 +25,14 @@ has_toc: false

A path through the conversation

Start with the audience. Go deeper together.

01 / VISIONSet the direction

For executives and sponsors: the opportunity, target state and leadership choices.

Open executive briefings →
- 02 / THE STORYMake it concrete

75 offshore QA staff. A payment retry. Eight workflows to improve.

Explore the client scenario →
+ 02 / THE STORYMake it concrete

75 offshore QA staff. A payment retry. Nine AI-assisted handoffs to inspect.

Explore the client scenario →
03 / ARCHITECTUREShow how it works

For technical SDs and leads: shared services, toolchains and delivery maturity.

Open architecture briefings →
04 / NEXT STEPScope the opportunity

Pick a workflow, understand the baseline and agree what a pilot must prove.

Plan the discovery →
-

The fintech story / Illustrative case

75 QA staff.
One payment release.

What happens when the payment provider accepts a transfer, but the customer sees a timeout? Use this familiar problem to explain the platform, the workflows and the human decisions.

Walk through the case →
+

The fintech story / Illustrative case

75 QA staff.
One payment release.

What happens when the payment provider accepts a transfer, but the customer sees a timeout? Use this familiar problem to explain the platform, the workflows and the human decisions.

Follow AI from requirement to release →
  1. 1See the payment failureRetry, duplicate prevention and reconciliation
  2. 2Break down the QA workManual work → AI assistance → human check
  3. 3Change the delivery assumptionsDevOps, cloud and testing maturity affect the opportunity
diff --git a/releases.md b/releases.md index 93da07a..debafe2 100644 --- a/releases.md +++ b/releases.md @@ -9,6 +9,14 @@ The version identifies the site and presentation player. A player-only patch can
GitHub releases & assets ↗Open the presentation room →
+## v1.22.0 · 9 September 2026 + +The [banking case]({{ '/case-studies/fintech/#ai-journey' | relative_url }}) now follows **nine explicit AI-assisted steps**, from approved requirements and developer unit tests through API/UI tests, fixtures, CI execution, investigation, repair and release evidence. A connected artifact trail preserves the original injected-defect failure, reviewed fix and fresh retest. + +The comparison distinguishes **manual QE, modernized QE and AI-assisted QE**, with separate contributions and measures. Existing slide links remain valid. Guided banking routes bring the new workflow, comparison and evidence trail into the presentation sequence; the industry decks link to the banking implementation story. + +All **116 slides** have narration and timed English captions. Changed explanations use new recordings; workflow, comparison and artifact highlights follow those recordings, including pause and seek. Existing two-second slide pauses and shared audio focus remain. All four slide/PDF editions advance to **v1.22.0**: banking **21 executive / 33 technical**, industry **26 executive / 36 technical**. The film retains its original edition. [GitHub release v1.22.0](https://github.com/tomqwu/ai_qe/releases/tag/v1.22.0) packages the current publication. + ## v1.21.2 · 9 September 2026 The [3D architecture]({{ '/demos/architecture/?scenario=generate' | relative_url }}) now opens from a **higher, more front-facing camera angle**, so the platform's depth is easier to read. Framing fits the model with space around its edges and preserves its proportions across wide, short and mobile windows. Camera motion keeps the same elevated view. diff --git a/tools/check_flow_narration.cjs b/tools/check_flow_narration.cjs index e2aa232..ad0ffca 100644 --- a/tools/check_flow_narration.cjs +++ b/tools/check_flow_narration.cjs @@ -93,7 +93,7 @@ async function snapshot(figure) { cueCount++; } } - assert.equal(toured.size,9); + assert.equal(toured.size,new Set(profiles.map(profile=>profile.diagram)).size); // Paused frame, playback speed, backwards seek, replay and manual inspection. await page.goto(base+'/briefings/technical/#slide-2'); const figure=page.locator('#slide-2 [data-diagram="platform"]'),audio=page.locator('[data-narration-audio]'); diff --git a/tools/check_presenter_notes.cjs b/tools/check_presenter_notes.cjs index 0bb691c..16f5a60 100644 --- a/tools/check_presenter_notes.cjs +++ b/tools/check_presenter_notes.cjs @@ -2,6 +2,8 @@ const assert = require('node:assert/strict'); const {chromium, webkit} = require('playwright'); const base = (process.env.QE_TEST_URL || 'http://127.0.0.1:61600/ai_qe').replace(/\/$/, ''); +const deckCounts = require('../_data/briefing_room.json').map(deck => [deck.url.split('/').filter(Boolean).at(-1), deck.slides]); +const slideCount = deckCounts.reduce((sum, [, count]) => sum + count, 0); const routes = ['', 'ai-adoption/', 'qe-modernization/', 'dictionary/', 'platform-readiness/', 'case-studies/fintech/', 'case-studies/fintech/evidence/', 'case-studies/fintech/implementation/', 'docs/industry/', 'docs/industry/operating-model/', 'docs/industry/evidence/', @@ -41,7 +43,7 @@ async function playing(audio) { await audio.page().waitForFunction(a => !a.pause assert.doesNotMatch(await page.locator('body').innerText(), /\bChris\b/, 'Public narration uses neutral audio labels'); } assert.equal(requestedAudio,0,'Collapsed in-place guides do not download MP3 files'); - for(const [route,count] of [['fintech-evp',19],['fintech-technical',30],['evp',25],['technical',35]]){ + for(const [route,count] of deckCounts){ await page.goto(base+`/briefings/${route}/`); await page.waitForFunction(n=>document.querySelectorAll('.slide-narrator-notes').length===n,count); assert.equal(await page.locator('[data-narrator-guide]').count(),0,'No duplicate page player inside slides'); @@ -101,7 +103,7 @@ async function playing(audio) { await audio.page().waitForFunction(a => !a.pause await page.emulateMedia({media:'print'}); assert.equal(await page.locator('[data-narrator-guide]').isVisible(),false); assert.deepEqual(errors,[]); - console.log(`${engine.name()}: all 109 slide notes; diagram coverage on 16 existing pages; actual recorded audio/captions, lazy loading, audio focus, mobile and four architecture scenarios passed`); + console.log(`${engine.name()}: all ${slideCount} slide notes; diagram coverage on 16 existing pages; actual recorded audio/captions, lazy loading, audio focus, mobile and four architecture scenarios passed`); }finally{await browser.close();} } })().catch(error=>{console.error(error);process.exit(1);}); diff --git a/tools/check_recorded_narration.cjs b/tools/check_recorded_narration.cjs index af3f4f3..054b8ed 100644 --- a/tools/check_recorded_narration.cjs +++ b/tools/check_recorded_narration.cjs @@ -89,13 +89,13 @@ async function advanced(page, id) { } await page.goto(base+'/briefings/fintech-technical/?route=client#slide-26'); await page.locator('[data-narration-start]').click(); await playing(page); - await nearEnd(page); await advanced(page, 'slide-28'); await playing(page); - await page.goto(base+'/briefings/fintech-evp/#slide-19'); + await nearEnd(page); await advanced(page, 'slide-19'); await playing(page); + await page.goto(base+'/briefings/fintech-evp/#slide-21'); await page.locator('[data-narration-start]').click(); await playing(page); await nearEnd(page); await page.waitForFunction(()=>document.querySelector('[data-narration-audio]').ended && document.querySelector('[data-narration-start]').getAttribute('aria-pressed') === 'false'); - assert.match(page.url(), /#slide-19$/); + assert.match(page.url(), /#slide-21$/); assert.equal(await page.locator('[data-narration-start]').getAttribute('aria-pressed'),'false'); assert.deepEqual(errors,[]); console.log(`${engine.name()}: guided-route order and final-slide stop passed`); diff --git a/tools/prepare_release.py b/tools/prepare_release.py index 0d9350f..8b07cf4 100644 --- a/tools/prepare_release.py +++ b/tools/prepare_release.py @@ -37,8 +37,12 @@ def prepare(output): narration = json.loads((ROOT / 'assets/data/narration.json').read_text()) assert narration.get('complete'), 'The narration release requires all slide recordings' bundle = assets / f'ai-qe-narration-v{release["version"]}.zip' + scripts = json.loads((ROOT / 'assets/data/narration-scripts.json').read_text())['decks'] + assert set(narration['decks']) == set(scripts), 'Narration audiences differ from the slide scripts' + total_slides = sum(len(slides) for slides in scripts.values()) records = [] for audience, deck in narration['decks'].items(): + assert set(deck['slides']) == set(scripts[audience]), f'{audience}: incomplete narration coverage' for slide, entry in deck['slides'].items(): for field in ('audio', 'captions'): source = (ROOT / entry[field].lstrip('/')).resolve() @@ -47,7 +51,7 @@ def prepare(output): assert hashlib.sha256(source.read_bytes()).hexdigest() == entry['sha256'], 'Changed narration audio' records.append((source.relative_to(ROOT).as_posix(), source.read_bytes())) records.append((f'transcripts/{audience}/{slide}.txt', (entry['transcript'] + '\n').encode())) - assert len(records) == 109 * 3, 'Narration bundle must cover all 109 slides' + assert len(records) == total_slides * 3, 'Narration bundle must cover every slide' records.append(('narration.json', json.dumps(narration, ensure_ascii=False, indent=2).encode())) guides = json.loads((ROOT / 'assets/data/narration-guides.json').read_text()) for guide in [*guides['guides'], *guides['demo'].values()]: @@ -57,7 +61,7 @@ def prepare(output): records.append(('narration-flows.json', json.dumps(flows, ensure_ascii=False, indent=2).encode())) records.append(('README.txt', ( 'AI x QE — English audio narration\n\n' - 'One MP3, timed WebVTT subtitle file and transcript per slide. ' + 'Every slide maps to MP3 audio, timed WebVTT captions and a transcript. Shared explanations may reuse a recording. ' 'Folder keys: evp = banking executive, technical = banking architecture, ' 'industry-evp = industry executive, industry-technical = industry architecture.\n\n' 'Open https://tomqwu.github.io/ai_qe/briefings/ and select Play narration ' @@ -65,10 +69,10 @@ def prepare(output): 'narration-guides.json maps existing diagram and scenario explanations to these recordings ' 'and supplies presenter walkthrough notes and the 3D story caption anchors. narration-flows.json maps exact recorded caption ' 'cues to diagram components and arrows for audio-driven visual focus. ' - 'The original PDF content editions are unchanged.\n' + f'Industry PDFs: v{release["slide_edition"]}; banking PDFs: v{release["fintech_edition"]}.\n' ).encode())) with zipfile.ZipFile(bundle, 'w', compression=zipfile.ZIP_DEFLATED) as archive: - for name, content in sorted(records): + for name, content in sorted(dict(records).items()): info = zipfile.ZipInfo(name, date_time=(2026, 9, 8, 0, 0, 0)) info.compress_type = zipfile.ZIP_DEFLATED archive.writestr(info, content) @@ -96,7 +100,7 @@ def prepare(output): - Research companion: **v{release["research_edition"]}** — 13 pages - Fillable discovery questionnaire: **v{release["questionnaire_edition"]}** -Assets include all six PDFs, the architecture film and captions, the industry, modernization and fintech-evidence CSV/JSON source registers, and the complete 109-slide audio narration bundle with English subtitles and transcripts. SHA256SUMS.txt covers all fifteen downloadable publication files. The PDF filenames identify their content edition, which may precede a player release. The existing architecture film retains its v1.8.0 edition. +Assets include all six PDFs, the architecture film and captions, the industry, modernization and fintech-evidence CSV/JSON source registers, and the complete {total_slides}-slide audio narration bundle with English subtitles and transcripts. SHA256SUMS.txt covers all fifteen downloadable publication files. The PDF filenames identify their content edition, which may precede a player release. The existing architecture film retains its v1.8.0 edition. Published only after the site build, browser checks, PDF checks and GitHub Pages deployment succeed. The fintech case is fictional; its estimates and outcomes are illustrative assumptions. ''' diff --git a/tools/test_generate_elevenlabs_narration.py b/tools/test_generate_elevenlabs_narration.py index 8b9bc95..59f2a5f 100644 --- a/tools/test_generate_elevenlabs_narration.py +++ b/tools/test_generate_elevenlabs_narration.py @@ -18,7 +18,7 @@ def setUp(self): def test_all_slide_scripts_restore_to_the_display_text(self): plan = generator.build_plan(self.scripts, self.profile, generator.DECKS) - self.assertEqual(len(plan['jobs']), 109) + self.assertEqual({(job['audience'], job['slide']) for job in plan['jobs']}, {(audience, slide) for audience, slides in self.scripts['decks'].items() for slide in slides}) for job in plan['jobs']: text = job['speakText'] fixture = {'characters': list(text), diff --git a/tools/test_release.py b/tools/test_release.py index 045328a..de4bf76 100644 --- a/tools/test_release.py +++ b/tools/test_release.py @@ -6,7 +6,7 @@ import unittest import zipfile from publish_release import publish -from prepare_release import prepare +from prepare_release import prepare, ROOT SHA = 'a' * 40 @@ -95,11 +95,20 @@ def test_current_package_contains_only_current_editions(self): self.assertEqual(set(guides['demo']), {'generate', 'evaluate', 'deny', 'hold'}) self.assertEqual(sum(len(guide['story']) for guide in guides['demo'].values()), 24) flows = json.loads(archive.read('narration-flows.json')) - self.assertEqual(len(flows['profiles']), 12) - self.assertEqual(sum(len(profile['cues']) for profile in flows['profiles']), 85) - for extension in ('.mp3', '.vtt'): - self.assertEqual(sum(name.endswith(extension) for name in archive.namelist()), 109) - self.assertEqual(sum(name.startswith('transcripts/') for name in archive.namelist()), 109) + self.assertEqual(flows, json.loads((ROOT / 'assets/data/narration-flows.json').read_text())) + self.assertEqual(len(archive.namelist()), len(set(archive.namelist())), 'Shared recordings must not duplicate ZIP paths') + narration = json.loads(archive.read('narration.json')) + scripts = json.loads((ROOT / 'assets/data/narration-scripts.json').read_text())['decks'] + expected_media = set() + for audience, slides in scripts.items(): + self.assertEqual(set(narration['decks'][audience]['slides']), set(slides)) + for slide in slides: + entry = narration['decks'][audience]['slides'][slide] + expected_media.update(entry[field].lstrip('/') for field in ('audio','captions')) + self.assertEqual(archive.read(f'transcripts/{audience}/{slide}.txt').decode().strip(), entry['transcript']) + self.assertEqual(hashlib.sha256(archive.read(entry['audio'].lstrip('/'))).hexdigest(), entry['sha256']) + self.assertEqual({name for name in archive.namelist() if name.endswith(('.mp3','.vtt'))}, expected_media) + self.assertEqual(sum(name.startswith('transcripts/') for name in archive.namelist()), sum(map(len,scripts.values()))) if __name__ == '__main__':