Failures observed in running AI systems.

The case studies on this site are built from public records of other organisations. These notes are the other half: what went wrong in the AI systems that run this site, how it was found, and the control that was added. Each one is mapped to ISO/IEC 42001.

A note is added only when the failure has a record behind it: a commit, a log or a measured number. The systems are this site’s reading assistant, its retrieval index and the model routes behind them. Client systems are never the source, and suppliers are described by role rather than name. Where a note bears on a component of the Governed Agentic RAG reference architecture, the component is named.

The model provider refused requests from one edge region

Public reading assistant calling a hosted language model from edge functions

Context
The site runs on an edge platform, so each request is handled at the location nearest the reader and the model call leaves from there. Nothing in the application chooses that location.
What failed
Between 30 and 50 per cent of assistant requests in testing failed with a generic "request not allowed" response. The failures looked random: the same question would work, then fail, then work.
How it was found
Readers saw "answers are temporarily unavailable". The function logs, read with the edge location beside each response, showed every refusal coming from one location.
Root cause
The model provider does not accept traffic leaving from that region, and part of the traffic from Singapore was being routed through it. The restriction sits in the provider’s policy, outside anything the application controls or logs by default.
What did not work
Routing calls through the platform’s own AI gateway. The gateway forwards from the same location, so the refusals continued.
Controls added
  • Every model call now goes through one stateful proxy pinned to a North American region, so the egress location is fixed and recorded.
  • The proxy allows two destinations only: the provider’s API and the gateway.
  • The deploy script ships the proxy before the site, so a deploy cannot leave the site pointing at a proxy that does not exist yet.
ISO/IEC 42001
A.10.3 Suppliers; A.4.5 System and computing resources; A.6.2.6 AI system operation and monitoring
Residual risk
The assistant now depends on one region. If that region fails, the assistant fails with it. That is acceptable for a reading aid on a public site and would not be for a system that makes decisions.

Where a request leaves from is part of the system specification. Record it as a resource, and treat the provider’s region policy as a supplier term to monitor.

Fixed in 8d12b65c

A retrieval limit made the assistant confidently incomplete

Page-grounded assistant answering from the article or tool page the reader is on

Context
Answers are grounded in passages retrieved from the reader’s current page first, then from the rest of the site. Answers to the suggested questions are written in advance and stored.
What failed
A question about an article’s nine failure patterns got an answer covering four, which said the page only described four. Between 5 and 10 per cent of stored answers referred to "the passages provided" instead of the page. Short, structured sections (context, forces, consequences) were missing from answers altogether.
How it was found
Probing the stored answers against the live pages they came from.
Root cause
Retrieval from the reader’s own page was capped at 5 passages. The median page has 7, and 141 of 225 pages have more than 5. Separately, the indexer dropped any section under 20 words, which removed the short sections of structured pages from the index entirely.
Controls added
  • Own-page retrieval raised to 10 passages, plus 4 from the rest of the site.
  • Short sections folded into heading-prefixed passages instead of being dropped (2,020 passages became 2,164).
  • A deterministic check on every stored answer flags openings that disclaim the page; flagged answers are rewritten and any that remain are listed at deploy. After three passes, only pages not yet published remained flagged.
ISO/IEC 42001
A.7.4 Quality of data for AI systems; A.6.2.4 AI system verification and validation; 9.1 Monitoring, measurement, analysis and evaluation
Residual risk
Coverage is now checked against the stored answers, not against every question a reader might type.

A retrieval limit is a parameter to test against the shape of the corpus, not a default to accept. The evaluation that found this compared answers with their source; a model-quality score would not have.

Fixed in 453ef849, 0a6bc527

A local test run wrote into the production index

Search and retrieval index behind the assistant

Context
The indexer can run against a local copy of the site for testing. The index itself is a single hosted store.
What failed
A test run against the local site wrote local-machine addresses into the live index metadata. For about two minutes, answers on the public site cited links that pointed at a developer’s machine.
How it was found
Seen in live answers and reverted within about two minutes.
Root cause
The indexer used one setting for two different things: the address it read pages from, and the address it recorded as each page’s canonical location. Pointing it at a local copy changed both.
Controls added
  • The indexer now keeps the address it reads from separate from the canonical origin it records, and the canonical origin is fixed to the production site.
  • Answer code matches retrieved passages against the canonical origin, never against the address of the incoming request.
ISO/IEC 42001
A.7.5 Data provenance; A.6.2.5 AI system deployment; 8.1 Operational planning and control
Residual risk
The test and production indexes are still one store; the separation is in the code path, not in the infrastructure.

Provenance includes where a record says it came from. A test run that can write production metadata is a release that skipped the release process.

Fixed in 790ffd92

Limits stated in the prompt were not followed

Generated suggested questions and answers, under a house style

Context
A small, fast model writes the suggested questions for each page and the answers to them, under written length and style rules.
What failed
The model ignored the character limit for suggested questions. Answers drifted into patterns the house style bans. Questions with a number in them ("which three") drew answers that argued about the count before answering.
How it was found
Review of the generated questions and answers before release.
Root cause
The limits existed only as instructions in the prompt. Nothing checked them after the model produced its output.
Controls added
  • Question length is enforced in code with a rewrite loop (72 characters or fewer).
  • Every answer passes a style check in code; a failure triggers one rewrite.
  • Questions are phrased without counts, and the prompt asks for the substance before any qualification.
ISO/IEC 42001
A.6.2.2 AI system requirements and specification; A.6.2.4 AI system verification and validation
Reference architecture
D1 Output guardrails
Residual risk
The style check catches the patterns it was written for. New patterns still need a human to notice them first.

A requirement stated in a prompt is a request. If it matters, test it in code after the model and act on the result.

Fixed in 790ffd92, 0a6bc527

An open model endpoint was abused and the spending limit took the service down

Public assistant and AI search with a free-text box and no sign-in

Context
Anyone could type a question into the assistant or the search box, and each one was a paid model call.
What failed
The provider account reached its usage limit after traffic that looked like abuse of the open routes. Live answers stopped, and the next deploy failed to write 212 of its pre-written answers until the limit reset.
How it was found
The deploy log showed the failed answers, and the provider’s error message gave the date access would return.
Root cause
The routes were open to anyone and every question was a paid call. Spend was not measured per route, so there was no early sign before the limit was reached.
Controls added
  • Search moved to a static index with no server-side model call.
  • The assistant came back first with fixed questions and checked, pre-written answers only, then with live answers on the cheapest model tier alongside them. Voice input stayed off.
  • Every model call across the site and the demos is now recorded in a usage ledger: route, model, tokens and cost.
ISO/IEC 42001
A.9.4 Intended use of the AI system; A.4.5 System and computing resources; 6.1.2 AI risk assessment; 9.1 Monitoring, measurement, analysis and evaluation
Residual risk
The ledger makes spend visible per route. It does not by itself stop abuse.

On a public model route, cost is a safety property. Running out of budget is an availability incident and belongs on the risk register.

Fixed in d6fe4c6d, 53ce0642, 3312a0bc, f7dae33f

Drift in agentic workflows after a model change, and data isolation between tenants, have no note yet: neither has failed in these systems with a record to show for it. The controls designed against them are in the reference architecture’s risk matrix. Practitioner guidance on the same ground: the ISO/IEC 42001 Clause Readiness Calculator and the readiness assessment.

Terence Kok
Before You Go

The one that bothers me most is the assistant that answered four of nine. Nothing crashed and no error was logged; it was simply, confidently incomplete, and I only found it by checking answers against the pages they came from. A model-quality score would have passed it. I would rather publish what went wrong in my own systems than describe failure only in other people’s.

Terence Kok