DEB JET AI UAT
Files Pipeline 1 / 14
Part I — Context

SLIDE 01

The brief, and the trap inside it

  • 01Test with a broker who understands SMSF and is strong with computers
  • 02Test with a broker whose computer skills are poor
  • 03System feedback from an AI perspective — including P1 and future ideas

Say this in the first minute

DEB JET has no AI feature.

There is nothing in the product to point an evaluation at, so “test the AI” cannot mean testing a feature. We read it the only way that makes sense: the AI is the evaluator, not the thing evaluated — an external model looks at DEB JET and reports what it sees.

That reading creates a second problem immediately. Slide 03 is about it.

SLIDE 02

What we actually built

What we are delivering is not a report. It is a pipeline that produces reports — for this loan, and for any loan after it.

That distinction matters commercially. A report answers one question once. This answers the same question every time a new journey ships, run by someone who was never in this room.

FolderContains
00-framework/Criteria, checklist, fixed prompts
01-howto/The operating manual, EN/VI throughout
02-scenarios/One folder per run, evidence inside
03-ai-output/What we fed the AI, what it said — verbatim
04-report/The four reports
scripts/The runner and the packager
site/The LAN-hosted results view

Real data inside 02-scenarios/

Every number below is read straight from the seven evidence.json files. None of it is typed by hand.

Backing: 01-howto/README.md · track-a-agent.md · track-b-chat.md

SLIDE 03

Who is on trial

If the AI is our instrument, then the AI can be wrong — and a wrong instrument produces a confident report full of things that never happened. So we split the evaluation in two.

Part APart B
On trialThe DEB JET systemThe AI’s own assessment
AI’s roleAnalysis instrumentSubject under test
Criteria8 — A1…A84 — B1…B4
Answers“What is wrong, what do we fix first?”“Can we trust what the AI said?”

The design decision everything rests on

Part B exists so Part A is not built on invented findings. An AI claim citing evidence that is not in the input gets discarded before it reaches the report — no matter how plausible it sounds.

Part II — Method

SLIDE 04

The rule that keeps criteria honest

Before we wrote a single criterion, we surveyed the system and listed what could actually be captured.

SignalCapturable?
Step load timeYes
Field counts: total / editable / emptyYes
Validation error text, verbatimYes
Whether a field blocks Next when emptyYes
Data loss on returnYes
Console errorsYes
Time-on-step by a real humanNo

The rule

A criterion that cannot be evidenced by something in this table does not belong in the checklist.

Note the last row says No. Scripted runs do not model human reading time — so no criterion in this framework claims anything about how long a real broker takes. The framework is honest about its own edges, and that is what makes the parts inside the edges trustworthy.

SLIDE 05

Seven steps — and the order is load-bearing

#StepOutput
1Research what the system must doStandards that apply
2Standard — turn research into criteriaPart A + Part B
3Checklist — make criteria checkableTable of IDs
4Scenario — run the journeyevidence.json + shots
5AI assessment — fixed prompt, verbatim outputAI output
6Comparison — audit the AI, then score the systemPart B audit → Part A
7Feedback — the report the requester readscomparison.md

Criteria are written before anything is run. If you look at results first and then decide what counts as a problem, you are not evaluating — you are justifying.

Note where step 5 sits. The AI is asked fourth from the end, not first. By the time it sees anything, the criteria are frozen and the evidence is collected.

SLIDE 06

Isolation — and why it is the whole method

The AI received

  • The evidence package
  • The fixed prompt

The AI never received

  • The criteria
  • The checklist
  • Any finding of ours

If you hand the AI your criteria and then check whether its output matches your criteria, you have tested nothing — you have tested whether the AI can repeat you. It can. Every model can.

Isolation is what makes the audit worth anything. When the AI independently finds something we found, that is corroboration. When it finds something we missed, that is value. When it claims something the evidence does not support, we catch it — that is quality control. All three happened.

SLIDE 07

P1 by rule, not by impression

P1 requires one of four conditions:

  1. Blocks completion of the journey
  2. Loses data the broker already entered
  3. Leaves the broker without a record of why a product was recommended
  4. Reproduces on both loans

Condition 3 is not a usability concern. Under ASIC RG 273, the evidence of best-interests compliance comes predominantly from the broker’s own records. If the journey lets a broker finish without recording a reason, they cannot produce that evidence later. The consequence is not a bad experience — it is an unmet regulatory obligation that surfaces long after the loan settled.

Condition 4 separates a system defect from a per-loan configuration issue. Something reproducing on Refinance and Purchase is a defect in the product. That distinction is what makes a P1 claim defensible instead of assertive.

SLIDE 08

The 2×2 that had to be crossed

RefinancePurchaseNew JET app
strongRound 1Round 1Round 3
weakRound 2Round 3

Round 1 ran the weak broker only on one route and the strong broker only on the other. We then concluded that weak brokers hit a wall strong brokers avoid.

That conclusion was wrong, and the way it was wrong is instructive. Persona was confounded with route. When two variables move together, you cannot attribute the effect to either one. We had evidence of a difference and no evidence at all about its cause.

This cell had to be closed twice. Round 2 closed it by crossing two different routes — still confounded, just less visibly. Round 3 closed it properly: same loan, same route, persona the only thing that moved. See slide 11.

The lesson for anyone reusing this

If persona and journey are not crossed, no statement of the form “weak brokers experience X” is supported by your evidence.
Part III — Results

SLIDE 09

What was run

RunLoanJourneyPersonaRound
SC01-strong-refi009365/loanjet/ 15 tabsstrong1
SC01-strong-purchase008812/loanjet/ 15 tabsstrong1
SC02-weak-refi009365/loanjet/ 15 tabsweak2
SC01-strong-refi-v2009365/loanjet/strongfix
SC01-strong-jetsmsfd3fe18dd…/loanjet/ 15 tabsstrong3
SC02-weak-jetsmsfd3fe18dd…/loanjet/ 15 tabsweak3
SC02-weak-smsf009387/loan/ — wrong routeweakwithdrawn
SC01-strong-smsf009387/loan/ — wrong routestrongwithdrawn
SC02-weak-smsf-v2009387/loan/ — wrong routeweakwithdrawn

Seven scripted runs, five of them valid. Three are withdrawn: they were created by clicking the wrong button and measured /loan/, the SMSF product, rather than the /loanjet/ journey the brief asked about. Slide 11 has the detail.

Those three are not deleted. The AI's round-1 assessment genuinely read one of them, so removing them would falsify the audit trail.

The packager is deterministic: same inputs give a byte-identical package. That is what makes two runs comparable rather than merely similar.

The packager is deterministic: same inputs give a byte-identical package. That is what makes two runs comparable rather than merely similar.

SLIDE 10

The findings

P1-1

No record of why a product was recommended

input-brokernote exists on all five valid runs but is required: false. A broker can pass the product step having recorded no reason at all.

This finding is stronger after the withdrawal, not weaker. It previously leaned partly on the field being absent on the other route — a contrast that has been dropped. It now rests on five runs of one route, three loans, both personas.

Rule: leaves no compliance record · reproduces on every loan. Engages ASIC RG 273.

P1-3

Next advances an empty form with no validation

All three populated runs — both loans, both personas — Next on an untouched product step moved forward with errorsShown: []. The AI found this independently; we had recorded it as an A6 observation without recognising it as P1.

Rule: reproduces on both loans.

P1-4

A newly created JET application cannot be started

On both round-3 runs: input-loanamount is present but disabled, Next is disabled, reasonShownOnScreen: null. A broker clicks Create new JET application and lands on a step where nothing can be typed and the journey cannot advance, with nothing on screen saying what is required first.

This finding originally cited two runs that have since been withdrawn. It was re-tested on the correct route and reproduced there — surviving a change of evidence base is the strongest thing about it.

Rule: blocks completion · reproduces across both personas. Needs manual confirmation before being reported as a defect — the field may be gated behind a selection the script never made.

Withdrawn

P2-1 · Validation errors never name the field that was wrong

Four successive malformed entries into loan amount produced an identical five-error list every time. All four were made on a withdrawn run — the finding describes a route that is not under test.

It could not be re-tested: on the two blank JET loans the amount field is disabled, so there was nowhere to put a malformed value. Withdrawn, not disproved — error-message quality on /loanjet/ is unmeasured.

Strength

Data persistence passes in every run

Enter a value, navigate forward, come back — it is still there. Across all three populated loans, both personas. A3 passes cleanly, and should be reported as a strength rather than omitted for not being a problem. On the two blank loans it is not assessable — nothing could be entered to test persistence with, which is distinct from a failure.

Note the two loan states have opposite defects. A populated loan lets an empty form through; a newly created one blocks and will not say why. Both are on /loanjet/. Neither state tells the broker what is actually required.

SLIDE 11

The reversal, and the second reversal

Signalstrong-refiweak-refistrong-jetsmsfweak-jetsmsf
Route/loanjet//loanjet//loanjet//loanjet/
Loan statepopulatedpopulatedblankblank
Next on empty formadvancesadvancesdisableddisabled
input-brokernoteoptionaloptionaloptionaloptional
Step marker11/1111/1111/1111/11

The AI — looking only at the evidence — flagged the confound in our own scenario design. It was right. We ran the two missing cells and concluded that every difference tracks the journey.

That conclusion was also wrong. The two cells we added ran on /loan/ — the SMSF product's route, not /loanjet/. We closed the gap by introducing the very variable we were trying to eliminate. What we called a journey difference was a difference between two products.

Round 3 re-ran both personas on the same loan, on the same route. The table above is the result, and it gives a different answer:

Behaviour tracks the state of the loan, not the persona and not the journey. Three populated loans let an empty form through; two newly created ones disable Next. All five are on /loanjet/, so the route cannot be the cause.

No defect in this package is attributable to broker skill level. The matched pairs are identical on every captured signal.

Why those three runs passed every check we had

They measured accurately. They just measured the wrong product.

Internal consistency: passed. Reproduction across personas: passed. Re-testing against the live system: passed. Every check passed because every number was real — they simply described a different screen. What caught it was a person looking at a screenshot and saying “that is the wrong button”.

SLIDE 12

The finding we withdrew

The most strongly evidenced finding in the report

55 / 55

Wrong.

activeTabMarked: false on 55 of 55 steps, across two journeys and both personas.

Withdrawn

P1-2 · The current step is never marked

A bug in our own probe. It looked for the active class on the tab button; the marker lives on the .rc-steps-item ancestor. The probe could never have returned true — not once, under any condition.

The AI repeated the claim faithfully because our evidence package said so. It did exactly what it should have done. No amount of auditing the AI would have caught this — the AI was not the source of the error. We were.

What caught it was re-testing against the live system. We wrote verify-active.mjs, pointed it at DEB JET, and found the marker present and tracking correctly. We fixed the probe and repeated two runs; both report activeMarked: true on 11 of 11. A2-1 is a Pass.

One real finding survives the wreckage, now measured: aria-current is 0 on every step — the marker is visual only and is not exposed to assistive technology. That is genuine, it is P3, and it is nothing like what P1-2 claimed.

The line to take away

A tool that measures the wrong thing produces consistent, confident, wrong numbers — and consistency reads as proof.

Fifty-five out of fifty-five looked like certainty. It was a single bug, repeated fifty-five times.

SLIDE 13

What this round could not assess

Recorded so that no silence is read as a pass.

GapWhy it matters
A7-3 and A8-1 never instrumentedBoth bear directly on P1-1 — the difference between “the field is optional” and “the record cannot be produced”
A4 guidance counted, not read23–63 helper elements per step; nobody checked whether the text helps
No step beyond the 11th was walkedThough 15 tabs exist
The blank-loan wall is unconfirmedP1-4 rests on scripted observation only; needs one manual pass through the creation flow
Error-message quality on /loanjet/ unmeasuredFollowing the withdrawal of P2-1
Server-side persistence untestedOne in-session probe only; no reload, no re-login
Accessibility untestedBeyond the aria-current finding
Single timing sample per stepSo no timing figure from this round should be quoted as a system characteristic

SLIDE 14

What happens next

Note on method

The audit was not ceremony. Two AI P1 claims — one resting on an unsupported reading of controls: 0, one misapplying the data-loss rule — would otherwise have reached the report as findings. Equally, the AI caught a confound in our scenario design that we had missed.

Both directions of correction are the point.

But a third direction mattered more than either. The AI audited our reasoning and we audited its reasoning, and neither of us asked whether the evidence described the right system. The lesson is recorded plainly in the pipeline: verify what the automation clicked, not only what it recorded. create-app.mjs now takes an explicit --kind=jet|smsf argument and logs which button it clicked, so the route is a recorded fact rather than an assumption.

If you only remember three sentences

  1. The AI is the evaluator, not the thing evaluated — DEB JET has no AI feature.
  2. The AI got the evidence and nothing else; that isolation is why its agreement means something and why its disagreement was worth two extra runs.
  3. Our most strongly evidenced finding was wrong — twice, for two different reasons — and both stay in the report struck through rather than deleted. Evidence that accurately measures the wrong thing is still wrong evidence.