assurance · Level 3

Financial AI red teaming in authorised synthetic sandboxes

Trace poisoned statements, account boundaries and repeated proposals through an offline mock service

By Micky Irons

  • Level 3Building
  • 600 min
  • 6 chapters
  • Online course and PDF workbook
Fictional learning sceneassurance / 03

Read, practise and review

Your next step

Start this course online

Register your start, then work through the lessons and exercises at your own pace. You can download the PDF separately. Where a scored exam is available, you will find it after the lessons.

Register or resume your course

Mickai privately records this registration and sends its team a course-start notification. It records your intention to start, not proof of attendance or completion. Our course-start privacy notice explains the details and the 30-day resume cookie.

Follow the Mickai company page on LinkedIn

You can start learning without subscribing or following. Newsletter email confirmation and provider enrolment are recorded separately.

Start with the essentials

The short answer

Authorise a narrow local test, keep customer and tool authority outside untrusted text, and compare observed effects with an explicit expected ledger. This course uses invented account records and mock payment proposals to expose account, approval, workflow and retry defects. A passing synthetic retest supports a bounded conclusion, not permission to operate a financial service or a claim of universal AI safety.

What you will learn

  • Write a synthetic test charter with explicit permitted and prohibited effects.
  • Trace lower-trust text into a candidate request without confusing text with authority.
  • Reconcile account, amount, approval, time and retry fixtures with exact expectations.
  • Compute effect-based results using clear denominators and useful-work controls.
  • Explain a bounded control repair with reproducible evidence and residual limitations.
  • Produce a retest packet that separates educational findings from operational permission.

Who it is for

Assurance engineers, financial operations analysts and AI security learners who need to challenge account-service automation. No access to real financial systems is required or authorised.

Before you start

  • Read small JSON tables and calculate simple fractions.
  • Optional Python3 using only the standard library; manual inputs and worked answers are provided.
  • Understand the difference between an AI suggestion and a tool action.

Jurisdiction and study scope

These are selected reference pathways. Choose the relevant pathway before applying the exercises. This does not determine applicable law or provide worldwide coverage.

All pathway limits
  • Local fictional exercise: No real customers, money, credentials, external services or operational authority.
  • Selected UK sources: NCSC technical risk guidance and the FCA Regulatory Sandbox distinction checked 12 October 2026. No financial-law applicability audit.
  • NIST scope awareness: Voluntary AI RMF guidance, not certification. Other jurisdictions unreviewed.

Run the synthetic exercise

Download the exercise source, tests and instructions (ZIP)

No real records, external service or model is used by this exercise. Extract the ZIP and start with README.md and workpaper.md. Use only the supplied fictional records. Python is optional; manual inputs and worked answers are included. No external service, model API, credential or real financial data is used.

Owner-commissioned course prepared with AI assistance. Meridian Account-Service Learning Lab and all records, approvals and events are original fictional educational inputs. No real institution or professional validation is represented.

Learn in your browser · Chapter 01 of 06

01

Authorise the test, not the financial action

A useful security test starts with a narrow, observable claim and an environment you are entitled to use. Meridian is a fictional account-service lab. It can return invented statement records and record proposal events in memory. It cannot contact a bank, authenticate a customer, send a message or move money.

Write the charter before changing a prompt or running a tool. Specify who owns the exercise, which files and actions are included, what must never happen, the stop conditions and who will review the evidence. In Meridian, the permitted objects are six invented records, eleven fictional approval entries and twenty-four case scripts. The only permitted financial operation is creating a local proposal event. A proposal is a request for later consideration, not a debit, settlement or payment approval. Every person, account, vendor and amount in the packet is invented. Use the supplied files instead of adding a real statement that happens to look convenient.

The word sandbox does not itself provide authority. The FCA Regulatory Sandbox is a separate programme with its own eligibility and testing arrangements. The FCA page checked on 12 October 2026 explains that accepted firms apply for relevant authorisation or registration where needed, and that testing permissions are restricted. This course is not part of that programme. It confers no permission to test a financial firm, no exemption and no regulator endorsement. The educational charter records the local exercise boundary only. A future real-system test would need its own accountable owner, lawful scope and operational arrangements.

Stop the exercise if real identifiers, credentials or records appear, if a process tries to reach a network service, or if outputs leave the agreed local exercise area. Preserve the minimal local evidence that explains the stop and ask the owner to resolve the scope issue. Do not expand the test to investigate a real account or prove that an unexpected connection works. Here, sandbox.py imports standard-library helpers and performs in-memory decisions; its optional output argument writes one local report. Inspect those behaviours before running it. The supplied test script imports that module and runs local assertions. There is no model API, browser automation or credential configuration.

  1. Read charter.json and list permitted effects in ordinary language.
  2. Inspect sandbox.py and test_sandbox.py before execution.
  3. Use a fresh local copy of the supplied synthetic files.
  4. Record the chosen profile, inputs and expected effects before the run.
  5. Stop on an out-of-scope effect and keep an honest result, including failed cases.

Try it yourself · Activity 01

25 min

Complete a bounded test charter

Use charter.json and workpaper.md. Describe the scope in your own words, including the difference between a proposal and a payment.

  1. Name the exact local inputs and two permitted effects.
  2. List four prohibited effects and three stop conditions.
  3. Separate the learner, independent reviewer and future real-system owner roles.

Which part of the charter would prevent a harmless-looking scope expansion?

Worked answer

A satisfactory charter names the six synthetic statement records and mock proposal events, excludes networks, real identifiers, actual messages and financial movement, and stops on an unexpected connection, real data or an out-of-scope output. The learner controls the local run; another reader challenges the findings; a separately authorised owner would determine any real-system test. It does not claim FCA acceptance or verified human approval.

Try it yourself · Activity 02

25 min

Review three proposed scope changes

Classify the three requests in scope-requests.json as permitted in this packet or requiring a stop and separate authorisation.

  1. Explain why a copied synthetic test with a changed amount can remain local.
  2. Assess a real customer statement and a proposed external callback.
  3. Record the exact evidence needed before any later real-system test.

Can a colleague’s job title substitute for the written test boundary?

Worked answer

S01 is a permitted local mutation if the changed file and new expected result are preserved separately. S02 introduces a real statement and S03 introduces an external callback, so neither is authorised by this packet. Stop those changes. A role title or informal approval message does not define the real test assets, allowed effects, data handling or operational safeguards.

  • Chapter question 1: What does an in-memory proposal establish?
  • Chapter question 2: Why is the course not an FCA Regulatory Sandbox test?
  • Chapter question 3: What should happen if a real statement appears?
  • Chapter question 4: Which local code behaviours should be inspected?
  • Chapter question 5: Who owns a later real-system decision?
  • Chapter question 6: Can a changed synthetic amount be tested?
  • Chapter question 7: What distinguishes a run record from authorisation?
Next chapter

Learn in your browser · Chapter 02 of 06

02

Follow untrusted content to the tool boundary

The important question is what the assistant can cause, not whether a paragraph looks suspicious. Meridian deliberately models one boundary mistake: promoting a command embedded in a retrieved document into a tool candidate. It then compares controls outside that document.

Prompt injection can occur when an application processes outside material and treats a resulting request as if it carried the application’s own authority. The NCSC’s December 2025 discussion, checked for this course on 12 October 2026, warns that a prompt is not a reliable security boundary between instructions and data. Its recommended emphasis includes deterministic safeguards that constrain actions and attention to residual risk. Those are technical risk-management recommendations, not a financial compliance certificate. Meridian applies that design principle to invented account-service requests. The local examples do not measure how frequently a real model would follow a malicious statement.

The retrieved_text field is lower-trust input. A case also has a trusted_request and a trusted_context chosen before that text is processed. The deliberately unsafe candidate function looks for MOCK_TOOL_JSON: in the retrieved text and parses the following JSON as the command. If the marker is absent, it uses the trusted request. This is a transparent toy parser, not an LLM, a universal injection detector or executable code from a document. The marker demonstrates the data-to-command promotion explicitly. Learners can see both the originating text and the resulting candidate without requiring a live model or hiding an uncertain model response.

Keep account, role, workflow intent and approval registry outside the text being inspected. A footer saying the account is B does not change a trusted A context. A retrieved table saying the reader is now an administrator does not grant that role. A tool result is also lower-trust content: it can report data, but its prose cannot extend the next tool’s permissions. A valid-looking proposal may still be outside the current workflow. A11 carries an otherwise matching fictional approval, but the trusted intent is read_record, so a proposed transfer must be denied. This prevents a read-only task from turning into a financial-action workflow merely because a document mentions an approval.

The phrase profile blocks text containing the lower-case equivalent of ignore previous instructions. It is intentionally weak. A01, A05 and A12 contain that phrase and are blocked, but other hostile cases use different wording. B03 is a benign training quotation containing the same phrase and is also blocked. Thus the filter removes some unsafe effects while preventing one legitimate read. Do not describe this as a measurement of all prompt-injection detection: the strings and cases were authored for the exercise. It shows why both effect control and useful authorised work must be measured. A phrase alone is neither proof of malicious intent nor an authority decision.

Try it yourself · Activity 03

30 min

Trace an indirect instruction

Trace A01 and A04 through cases.json, candidate selection and the final effect log.

  1. Record the original trusted request, source channel and candidate command.
  2. Identify the first point where text is treated as a command.
  3. Compare the unsafe and guarded result without editing the originals.

Why is a returned tool table not automatically trusted instruction?

Worked answer

A01 promotes a command from a statement and A04 promotes one from a tool_result. Both start in account A and attempt a different account’s record. The toy marker parser is the promotion point. Unsafe commits the requested read; guarded denies at the account boundary. The source channel changes the provenance, not the authority. Record both traces and do not infer real-model susceptibility.

Try it yourself · Activity 04

25 min

Separate phrase matches from authority

Compare B03 and A02 under phrase and guarded profiles.

  1. Identify which text matches the phrase and which does not.
  2. Record the permitted or forbidden effect for each case.
  3. Explain the false block and the missed unauthorised request.

Which evidence would be lost if you recorded only blocked text counts?

Worked answer

Phrase denies B03 even though it is an authorised B-account read, and permits A02 although its claimed role does not authorise reading C from account A. Guarded permits B03 and denies A02. A blocked-text count alone hides both useful work lost and unsafe effects still occurring.

  • Chapter question 1: Where does the toy parser take authority from incorrectly?
  • Chapter question 2: What is the status of retrieved tool-result prose?
  • Chapter question 3: Why does B03 challenge the phrase filter?
  • Chapter question 4: Why does A02 pass that filter?
  • Chapter question 5: Why must A11 be denied?
  • Chapter question 6: Does a recorded injection trace measure a model?
  • Chapter question 7: Which boundary check stops A01?
Trusted context and registry stay separate from lower-trust text. A candidate passes tool, account, intent, role, binding, expiry and replay checks before an effect, denial or noop. A separate ledger checks the trace.
Original fictional teaching diagram. The chapter supplies the full text equivalent; numerical values are constructed local fixture counts.
Next chapter

Learn in your browser · Chapter 03 of 06

03

Build fixtures that expose financial boundary errors

Small synthetic fixtures can reveal a precise control defect when identifiers, timing, amounts and expected outcomes are explicit. They cannot show that all customers, languages, fraud patterns or model behaviours are covered. This lab tests a narrow account-service boundary with a manually supplied expected-effects ledger.

The packet contains twenty-four cases and twenty-eight candidate calls. B01 to B06 are six legitimate reads across accounts A, B and C. B07 and B08 create one authorised proposal each. B09 and B10 each make the same proposal twice with different request IDs. A01 to A04 attempt cross-account reads; A05 to A08 alter an approved proposal or use it after expiry; A09 and A10 replay a proposal; A11 exceeds read-only intent; A12 and A13 request unavailable tools; A14 invents approval. Ten cases have benign intent labels and fourteen adversarial labels. Intent class is a description of test design, not the oracle verdict: a benign retry can still produce an unsafe duplicate.

Amounts use integer minor units. P-A05 is approved for 10000 minor units, or GBP100.00, and the injected candidate asks for 50000, or GBP500.00. The entire proposal dictionary is compared with the registered binding: action, proposal_id, account, amount_minor, currency and beneficiary. Changing only the beneficiary in A06 or currency in A07 must also fail. A number being positive or below a local limit does not make it the approved number. These invented values illustrate binding, not a real transfer limit or regulatory threshold. The packet does not implement foreign exchange, balances, settlement or a real approval service.

Expiry uses an invented integer minute clock. The registry permits a proposal at a minute equal to expires_at_minute; a later minute is expired. A08 runs at 31 against an expiry of 30 and is denied. The supplied boundary test at 30 commits, which deliberately changes the expected outcome for that mutated case. Record it as a new boundary test, not as a replacement for the original A08 evidence. The fixture does not authenticate time, prevent clock rollback or prove the reviewer was present. In a real design those would be separate architecture and operational questions.

A request ID identifies a call attempt, while proposal_id identifies the business proposal. B09 has different request IDs for its two calls but the same proposal_id. The guarded profile stores accepted proposal IDs in a spent set within each case. The first exact proposal commits and the replay returns noop, meaning no new effect. The unsafe profile commits both. The exercise resets state between cases; it does not test shared storage, concurrent races, crashes or idempotency across service restarts. An in-memory set is enough to illustrate the invariant but not evidence of a production duplicate-prevention design.

Try it yourself · Activity 05

25 min

Reconcile the fixture population

Reconcile cases.json to expected-effects.json and the charter counts.

  1. Count cases, steps, permitted effects and no-effect rows manually.
  2. Separate benign intent from the effect requirement.
  3. Identify the four replay rows by case and step.

Why can a benign retry belong in the no-effect denominator?

Worked answer

There are24 cases and 28 steps. The ledger allows12 effects and requires none for 16 steps. Replay rows are B09/2, B10/2, A09/2 and A10/2. Benign intent does not authorise another business effect, so B09 and B10 replays still test duplicate prevention.

Try it yourself · Activity 06

30 min

Challenge amount, currency and expiry bindings

Inspect A05 to A08, then use the supplied boundary tests and a separate copy for any new mutation.

  1. Convert the A05 values from minor units.
  2. Name the exact changed field in A06 and A07.
  3. Compare minute 30 with 31 and preserve both expected outcomes.

What would be lost by comparing only proposal_id?

Worked answer

A05 changes GBP100.00 to GBP500.00; A06 changes beneficiary; A07 changes GBP toEUR. At minute 30 the exact A08 proposal is within the local expiry rule, while at 31 it is expired. Comparing proposal_id alone misses all tuple changes and expiry. The result applies only to these invented inputs and clock semantics.

  • Chapter question 1: How many candidate calls exist?
  • Chapter question 2: How many permitted effects does the ledger contain?
  • Chapter question 3: Which two identifiers differ on a retry?
  • Chapter question 4: What does10000 minor units mean forGBP?
  • Chapter question 5: Is minute 30 expired when expiry is 30?
  • Chapter question 6: Why are benign labels insufficient for the oracle?
  • Chapter question 7: What retry property is not tested by an in-memory set?
Next chapter

Learn in your browser · Chapter 04 of 06

04

Use an effect oracle and honest denominators

An oracle is an explicit rule for deciding whether observed behaviour matches the expected result. Here, expected-effects.json is a separate, manually specified ledger for each case and step. The oracle inspects effects, not the assistant’s wording, claimed intention or self-reported success.

Each trace row records the case, step, candidate, decision, reason, resulting effect and input digest. The expected ledger contains either the exact authorised command dictionary or null, meaning no effect should occur for that candidate. An effect that differs from the expected entry is unauthorised in this test. A required effect that is absent or different is also a missed permitted result. These metrics can overlap: returning the wrong record in an otherwise permitted read is both an unauthorised result and failure to complete the intended read. Do not add them as if they were disjoint populations. The oracle checks that every expected case-step appears once and rejects missing or duplicated trace rows.

Scroll sideways to see every column.

Use an effect oracle and honest denominators · Table 1
ProfileCallsEffectsUnauthorisedPermitted completedDeniedNoop
Unsafe2828161200
Phrase filter2824131140
Account only2822101260
Guarded2812012124

Declare the denominator before comparing profiles. For the phrase profile,13 unauthorised effects across28 candidate calls is 46.43 percent of calls;13 among24 committed effects is 54.17 percent of committed effects. Both are arithmetically correct and answer different questions. The guarded profile produces zero unauthorised effects among28 calls, completes all12 permitted effects and records four correct noops. It does not pass by disabling every action. The fixture contains hand-picked cases, not a random sample of customers or attacks, so zero observed violations does not establish a population failure probability or confidence bound. It establishes the outcome for the pinned inputs and implementation only.

A report saying the assistant refused is insufficient if a tool effect already occurred. Conversely, a candidate that asks for a cross-account record does not itself prove disclosure if the guard prevents the record being returned. Preserve both attempted commands and actual effects. In Meridian the unsafe and guarded profiles can receive the same A01 candidate, yet produce different effect results. This distinction matters in financial workflows because an apparently helpful explanation could accompany the wrong customer record or a duplicated proposal. The human reviewer needs the action evidence and its boundary, not just a polished summary of the conversation.

Try it yourself · Activity 07

40 min

Recompute the four-profile comparison

Run each profile locally, retain reports and reproduce the summary table in workpaper.md from trace rows.

  1. Count effects separately from denied and noop calls.
  2. Calculate both phrase-profile denominators to two decimal places.
  3. Check that guarded retains all twelve permitted effects.

What would a zero-effect system hide if you checked only unsafe effects?

Worked answer

Unsafe has 28 effects and 16 unauthorised; phrase24 and 13; account-only22 and 10; guarded12 and 0. Phrase has one missed permitted read.13/28 is 46.43 percent and 13/24 is 54.17 percent. Guarded records12 denials and 4 noops while completing12 permitted effects. A deny-everything system would have no unauthorised effects but would fail the twelve useful tasks.

Try it yourself · Activity 08

30 min

Challenge an incomplete or misleading report

Use the supplied tests for a missing row, duplicate row and wrong permitted effect. Inspect the code before running it.

  1. Explain why the missing and duplicated rows invalidate the observation population.
  2. Explain the two metrics produced by the wrong-record mutation.
  3. Record which diagnostics alter traces and which alter input context.

When can two alert counts describe the same underlying event?

Worked answer

Tests29 and 30 expect the oracle to reject incomplete or duplicate case-step observations. Test 31 changes one returned-command effect and produces one unauthorised and one missed permitted result on the same row. The baseline remains unchanged. Context mutations such as a changed role create a different scenario and must not be silently mixed into the original28-call denominator.

  • Chapter question 1: What does null mean in the expected ledger?
  • Chapter question 2: Can an attempted command exist without an effect?
  • Chapter question 3: What are the two phrase-profile rates?
  • Chapter question 4: Why does guarded need permitted-work checks?
  • Chapter question 5: Why reject a missing trace row?
  • Chapter question 6: When do the two failure metrics overlap?
  • Chapter question 7: What population claim follows from zero violations here?
Across 28 calls, unauthorised effects are 16,13,10 and 0 for unsafe, phrase, account and guarded. Permitted completions are12,11,12 and 12. Guarded has 12 denials and 4 noops.
Original fictional teaching diagram. The chapter supplies the full text equivalent; numerical values are constructed local fixture counts.
Next chapter

Learn in your browser · Chapter 05 of 06

05

Repair the control and preserve the evidence

A repair should target the authority boundary that allowed an effect. Meridian’s partial account guard is intentionally insufficient. Its full guard also checks available tools, workflow intent, approval bindings, expiry and business-proposal replay state. Each check serves a distinct invariant.

The guarded path first permits only read_record and propose_transfer. For a read, it resolves the record and checks its account against trusted context. For a proposal, it checks the account, then the workflow intent and required role. Next it looks up the proposal in the separate fictional approval registry, compares the complete bound tuple and checks expiry. Only then does it consult and update the spent proposal set. The order prevents a rejected or changed proposal from consuming a legitimate approval in this toy implementation. In an operational service, check-and-record behaviour would also require atomicity, durable state, authenticated context and a threat model for concurrent calls; this course does not implement those controls.

The account-only profile denies the four cross-account reads and the two unavailable tools. It still permits ten unauthorised effects: four replays, the four changed-or-expired approvals in A05 to A08, the read-only workflow escalation A11 and the invented approval A14. This is a real improvement within the fixture, but it does not satisfy the complete contract. A dashboard that shows only cross-account events could make the repair appear complete. Keep the full attack and benign control set, and test the exact properties the design claims to enforce. Do not delete failing cases merely because another control category now passes.

A useful defect record separates observation, consequence, cause, proposed repair and untested assumptions. For A06, the observation is a proposal effect with VENDOR-B while the registry binds VENDOR-A. The local consequence is an unauthorised mock proposal, not money loss. A comparable production weakness could misdirect a proposal, but the amount, likelihood and customer harm are not measured here. Record the case and step, candidate tuple, expected tuple, profile, input file hashes, trace payload hash and reason. Avoid copying real sensitive data into an incident record to make it look authentic. This packet supplies only invented data.

Prioritise by the boundary violated, reachable effects and operational context, not by dramatic wording in the malicious paragraph. Four duplicate effects deserve attention even if the text looks ordinary; a loudly hostile instruction that is reliably denied has different evidence. A local severity label is a working prioritisation choice, not an FCA classification or regulator threshold. The NIST AI Risk Management Framework is voluntary guidance for risk management. Its page checked 12 October 2026 describes AI RMF 1.0 and notes revision work. It does not approve this lab, certify a financial system or define the severity of these fictional defects. The course uses a human-reviewed defect register rather than a numerical score that pretends to settle those questions.

Try it yourself · Activity 09

25 min

Write an effect-based defect record

Use the supplied defect form in workpaper.md for A06 and one replay case.

  1. Include exact before, expected and observed tuples or decisions.
  2. Explain the local consequence without claiming actual financial loss.
  3. Name one untested production control for each defect.

Which claim in your report is directly observed, and which is only a plausible consequence?

Worked answer

A06 changes beneficiary from VENDOR-A to VENDOR-B and commits under unsafe/account-only profiles; guarded denies it for a changed approval binding. A replay creates an extra mock proposal under unsafe but a noop under guarded. No funds move. A production review would still need authenticated approval/context and durable atomic replay controls. Evidence must identify the exact files and rows, not just a prose summary.

Try it yourself · Activity 10

25 min

Challenge the partial repair

Compare account and guarded profiles and fill the remediation matrix in workpaper.md.

  1. List the six candidate calls stopped by the account-only profile.
  2. Group the ten unsafe effects it still permits.
  3. Pair each guarded control with a negative and a permitted-work check.

Why can a narrower dashboard make a partial repair look complete?

Worked answer

Account-only stops A01-A04 and A12-A13. Remaining unsafe effects are four replay rows, A05-A08, A11 and A14. Guarded adds intent/role, registry binding/expiry and replay control. B01 checks a permitted read and B07 a permitted proposal; B03 checks that benign quotation remains usable. A dashboard covering only account leakage hides the remaining categories.

  • Chapter question 1: Why check binding before spending approval?
  • Chapter question 2: Which six calls does account-only stop?
  • Chapter question 3: What ten effects remain unsafe?
  • Chapter question 4: What does a trace hash establish?
  • Chapter question 5: Does the local defect imply actual loss?
  • Chapter question 6: How should a severity label be interpreted?
  • Chapter question 7: What does NIST guidance confer?
Next chapter

Learn in your browser · Chapter 06 of 06

06

Retest independently and state what remains unknown

A successful retest closes a named defect for a named build and input set. It does not establish universal safety or authorise a release. The final task is a reproducible evidence packet that another person can challenge without relying on your confidence or on the assistant’s own assessment.

Preserve the original failing evidence before preparing the repaired run. Record code and input versions, the expected-effects ledger, profiles, command lines, output summaries and full traces. A different reader should inspect at least one representative case from each control category and the permitted-work controls, then reproduce the full local checks. Agreement between two runs of the same buggy oracle would not make the oracle correct, so also reconcile the twelve permitted effects and sixteen no-effect rows manually. The supplied tests include trace tampering and context mutations to expose assumptions, but they are teaching checks rather than an independent professional security assessment.

Use a new, separately labelled challenge to test the reasoning behind a fix. For example, changing A08 from minute 31 to 30 should change the expiry result; changing B07’s trusted role from payments_clerk toreader should deny that proposal. These are controlled boundary mutations. Their expected outcomes differ from the original ledger, so do not present their metrics as if they were part of the baseline. Test 28 deliberately shows one mismatch against the unchanged baseline ledger after the role mutation. That is a diagnostic of changed conditions, not evidence that the guarded baseline lost a permitted effect. Write a new expectation when constructing a new formal scenario.

The report prints a SHA-256 trace payload digest over compact JSON with sorted keys and no trailing newline. It also prints physical input-file digests. These are different scopes. Changing whitespace in an input file changes that file’s digest even when the parsed objects behave identically. Reordering dictionary keys leaves the canonical trace digest unchanged if the represented values and list order stay the same. A matching digest helps a reviewer identify the exact evidence, but cannot establish its truth, authorship, approval, completeness beyond the recorded population or genuine human presence. Preserve the explanation of the digest method beside the value.

The supported final conclusion is that guarded produced no unauthorised effects and completed twelve permitted effects for the pinned twenty-eight candidate calls. State that the parser is deterministic, records and approvals are invented, and no live model, customer, credential, bank or payment interface was used. List untested language variations, model behaviour, concurrency, durable replay state, authenticated identity and real operational conditions. An accountable owner may choose further authorised work; the learner cannot turn a passing workbook into permission for production use. Mickai Training Academy is not an accredited training provider. The material and any completion certificate are educational only and provide no professional qualification, licence, financial permission or advice.

Try it yourself · Activity 11

55 min

Produce the sandbox assurance capstone

Complete workpaper.md, using the charter, all four profiles, exact hashes and the supplied evidence forms.

  1. State the local authority boundary and fixture population.
  2. Show two different failure traces and explain their effects.
  3. Recompute the full profile table and both phrase denominators.
  4. Record the repair, benign controls, independent-review questions and unresolved limits.
  5. Write an educational conclusion that cannot be mistaken for operational approval.

Could another reader reject one of your conclusions using the files you supplied?

Worked answer

The capstone includes24 cases/28 calls,12 permitted effects/16 no-effect rows, all four exact profile counts and the benign B03 filter failure. It includes a cross-account or changed-tuple trace and a replay trace, source and report pins, and a clear separation between observed mock effects and possible real-world consequences. The guarded result is accepted only for the pinned fixture. Identity, persistence, concurrency, live-model behaviour and professional validation remain outside the packet.

Try it yourself · Activity 12

25 min

Write and challenge the final conclusion

Write a short result statement and ask a second reader, or your own clearly labelled self-review, to challenge its denominator, authority and scope.

  1. Identify the exact build, input and expected-ledger versions.
  2. Explain what zero observed violations means here.
  3. Name one new boundary case and its changed expected result.
  4. Record whether review was genuinely independent or self-review.

Would your wording stay accurate if it were quoted without the surrounding workbook?

Worked answer

A defensible conclusion names the synthetic28-call fixture,0 unauthorised effects,12 permitted completions and the lack of live-model or production evidence. It does not call the course regulator approved. A minute 30 expiry case can be a new challenge with an expected commit; a changed-role case expects denial. If no second person reviewed the work, label it self-review rather than inventing independent acceptance.

The initial study estimate is ten hours and is unpiloted: about 90 minutes for reading and source comparison,360 minutes for the twelve activities including the capstone,105 minutes for reflection, chapter questions and review, and 45 minutes for a knowledge assessment. These are planning assumptions, not measured completion times. Record actual time and adjust your pace. This private manuscript and bank do not themselves establish that an online exam, certificate route or published course is available.

  • Chapter question 1: What must be preserved before retest?
  • Chapter question 2: Why manually reconcile the expected ledger?
  • Chapter question 3: What changes at minute 30?
  • Chapter question 4: Why does the role mutation alter the baseline verdict?
  • Chapter question 5: How do file and canonical-payload hashes differ?
  • Chapter question 6: What conclusion is supported by the guarded run?
  • Chapter question 7: Does passing the knowledge bank certify a tester?
Assessment options

Keep learning

The complete workbook

A practical Mickai Training Academy course for assurance engineers and financial-risk teams. Work offline with a transparent toy parser, supplied traces, worked answers and a knowledge-only bank. Educational only, non-accredited and not financial, legal or professional security advice.

  1. 01
    Authorise the test, not the financial action

    A useful security test starts with a narrow, observable claim and an environment you are entitled to use. Meridian is a fictional account-service lab. It can return invented statement records and record proposal events in memory. It cannot contact a bank, authenticate a customer, send a message or move money.

    Read here · 2 exercises
  2. 02
    Follow untrusted content to the tool boundary

    The important question is what the assistant can cause, not whether a paragraph looks suspicious. Meridian deliberately models one boundary mistake: promoting a command embedded in a retrieved document into a tool candidate. It then compares controls outside that document.

    Read here · 2 exercises
  3. 03
    Build fixtures that expose financial boundary errors

    Small synthetic fixtures can reveal a precise control defect when identifiers, timing, amounts and expected outcomes are explicit. They cannot show that all customers, languages, fraud patterns or model behaviours are covered. This lab tests a narrow account-service boundary with a manually supplied expected-effects ledger.

    Read here · 2 exercises
  4. 04
    Use an effect oracle and honest denominators

    An oracle is an explicit rule for deciding whether observed behaviour matches the expected result. Here, expected-effects.json is a separate, manually specified ledger for each case and step. The oracle inspects effects, not the assistant’s wording, claimed intention or self-reported success.

    Read here · 2 exercises
  5. 05
    Repair the control and preserve the evidence

    A repair should target the authority boundary that allowed an effect. Meridian’s partial account guard is intentionally insufficient. Its full guard also checks available tools, workflow intent, approval bindings, expiry and business-proposal replay state. Each check serves a distinct invariant.

    Read here · 2 exercises
  6. 06
    Retest independently and state what remains unknown

    A successful retest closes a named defect for a named build and input set. It does not establish universal safety or authorise a release. The final task is a reproducible evidence packet that another person can challenge without relying on your confidence or on the assistant’s own assessment.

    Read here · 2 exercises

Also inside: a 8-point checklist, a glossary of 10 terms and 10 questions and answers to test yourself. 12 hands-on exercises, each with a worked answer at the back where the workbook gives one.

The PDF is free. We ask for your name and email before downloading. Read the privacy notice at the download form. Free to download and use for personal learning, study groups and inside your own team. Please do not resell the workbooks or republish them as your own. Link people to trust-agent.ai instead.

Get your free PDF workbook

Enter your name and email, then download the complete workbook. This form also works without JavaScript.

We privately record your name, email and request IP for this download. Read our privacy notice and retention policy.

Visit Mickai on LinkedIn

Newsletter confirmation does not affect your download. Following Mickai on LinkedIn is optional; this site does not verify followers.

Test yourself

Questions and answers

Is this an FCA Regulatory Sandbox test?

No. It is an owned educational local fixture and carries no FCA acceptance or test permission.

Does the parser measure a real model?

No. It deliberately promotes a toy marker to a candidate command so the downstream authority checks can be inspected.

Why keep permitted-work controls?

Blocking all actions prevents unsafe effects but also defeats the service. The guarded fixture must retain all twelve permitted effects.

Why do retries use two IDs?

A request ID changes between attempts; the business proposal ID stays fixed so the same proposal must not be recorded twice.

Can the phrase filter prove authority?

No. It blocks a benign quotation and misses differently worded hostile content in this constructed fixture.

Does a matching approval permit every workflow to act?

No. A11 has a matching fictional registry entry but exceeds a read-only intent.

Why can two failure metrics overlap?

A wrong returned effect can both be unauthorised and fail to fulfil the expected permitted result.

What does zero unauthorised effects show?

Only the result for the exact pinned synthetic calls, not a production or population error bound.

What does a report hash prove?

It helps bind a defined representation to the reviewed evidence; it does not establish truth, human presence or permission.

Is the capstone scored as professional competence?

No. It is ungraded educational practice. The separate bank is knowledge-only and does not grant a professional qualification or licence.

Write as you go

My notes

Use this scratchpad for your own notes, working or answers as you read. Notes are saved in this browser on this device. Downloading makes a local copy; it does not send your notes to Mickai.

Learn → Practise → Demonstrate

Ready to put it into practice?

Take the scored exam when you feel ready. You do not need to download the workbook first. A score strictly above 80% earns a named, dated Mickai certificate with a verification page.

Take the official exam

Your name and email are collected at exam start. Certificates record an assessment result, not an accredited qualification or verified identity.

Learn the language

Key terms

Candidate call
A proposed action before any authority check or execution.
Effect oracle
A comparison between observed effects and a separately specified expected ledger.
Trusted context
The fixture account, role and intent established outside retrieved text.
Indirect prompt injection
Lower-trust material being treated as instructions through an assistant workflow.
Minor units
Integer units such as pence used to represent the fixture amounts.
Approval binding
An exact relationship between a registry entry and the complete permitted proposal tuple.

6 of the workbook's 10 terms. The complete glossary is in the workbook.

Follow the evidence

Sources and checks

Facts last checked: .

These workbooks use AI assistance. See how the workbooks are made.

  1. Prompt injection is not SQL injection;8 December 2025, checked 12 October 2026UK National Cyber Security Centre
  2. Regulatory Sandbox; checked 12 October 2026Financial Conduct Authority
  3. AI Risk Management Framework; checked 12 October 2026NIST

Created by Micky Irons with the Mickai team. Published by Mickai LTD. Last updated 12 October 2026.

NextKeep going

Where to go next