Composite study

This is a product-class write-up, not a named-client story and not a results press release. Counts below describe the pack we actually write (approach points, tools, layers) — not invented bug totals or conversion lifts.

4
Approach points
5
Tools in the pack
5
Layers covered
3
Challenges documented

Overview

The model answered from general training when the municipal corpus missed a clause. On a .gov origin, that reads as official interpretation.

Accessibility on the filing path failed keyboard checks. Deadline-day load dropped filings without an error the resident could see.

Industry pattern this is grounded in

The Markup’s 2024 testing of New York City’s MyCity chatbot found systematic illegal guidance (tips, housing vouchers, cashless bans). Different users got contradictory answers. A disclaimer did not make the answers lawful.

Highlights

Typical launch bar: Block until pass rules hold on the money, identity, or safety path.

Challenges

01

Agencies wanted coverage of thousands of pages without an evaluation set.

02

The model hedged (“generally you may”) which still reads as permission.

03

Translation into other languages drifted off the English legal meaning.

How we tested

01

Legal questions require retrieval from the agency’s published pages. No hit = refuse and link to the source page or a human.

02

Eval set of high-harm questions with answers checked by the policy owner — not by the vendor.

03

Contradiction test: same question, two sessions, answers must not conflict on a yes/no legal point.

04

axe + keyboard on the primary filing journey; spike test on deadline day.

Starting point vs what we required

Starting point versus the controls we required
Starting pointWhat we required
Agencies wanted coverage of thousands of pages without an evaluation set.Legal questions require retrieval from the agency’s published pages. No hit = refuse and link to the source page or a human.
The model hedged (“generally you may”) which still reads as permission.Eval set of high-harm questions with answers checked by the policy owner — not by the vendor.
Translation into other languages drifted off the English legal meaning.Contradiction test: same question, two sessions, answers must not conflict on a yes/no legal point.

What we delivered

01

Adversarial evals

  • Promptfoo — High-harm legal questions
02

RAG quality

  • Ragas — Grounding in agency pages
03

Journeys / UI

  • Playwright + axe — Filing journey accessibility
04

Load / soak

  • k6 — Deadline-day spike, no silent drop
05

LLM traces / evals

  • LangSmith — Retrieval misses vs improvisation

Outcomes

We treated invented statute or eligibility as Block. Hedged illegal advice still failed. Translations were scored against the English source, not fluency.

Playwright + axe on filing, k6 on deadline shape, Promptfoo on the harm set. The city owner had to sign the residual risk for anything not in the corpus.

Stack

Testing stack used on this product class
LayerToolWhat we validated
Adversarial evalsPromptfooHigh-harm legal questions
RAG qualityRagasGrounding in agency pages
Journeys / UIPlaywright + axeFiling journey accessibility
Load / soakk6Deadline-day spike, no silent drop
LLM traces / evalsLangSmithRetrieval misses vs improvisation

Same method as the rest of our work: severity-ranked findings, pass rules in writing, and a ship / wait / block call. See the evaluation method and tool comparison.