Skip to content

ADR-0002: Safety-critical content is extractive; only non-critical content is generated

Status: Accepted Date: 2026-09-02

Decisions

D-02 A hard line splits extractive output from generated output

Any content that can change what a person wears, touches, or does in an emergency — hazards, PPE, spill response, first aid, storage — is extractive: displayed as a span traced to a named SDS section, with the source visible to the user. All other output — navigation, definitions, rephrasing a question, general chat — may be generated.

D-03 "Not stated in this SDS" is a correct answer

When the corpus does not contain a safety answer, the app says so. It never composes a plausible-sounding one. An unhelpful true answer beats a helpful false one.

Context

The source is self-contradictory: R-05 says the app summarises, R-01 calls it an AI assistant, R-17 names an AI Chatbot with automatic language processing. R-12 commits to naming a specific glove material (nitrile) and R-13 to a specific step order. Both are exactly the content a paraphrase corrupts silently — for acetone, a model that swaps nitrile for latex sounds identical and is wrong in a way that reaches skin.

Rejected options

  • Generative with RAG grounding — rejected despite the better UX and closer fit to the poster's chatbot promise. Grounding reduces paraphrase drift; it does not eliminate it, and the residual failure lands on a person's hands in a spill.
  • Strictly extractive everywhere — rejected because it reduces R-17's AI Chatbot to a synonym-aware search box, under-delivering the source's central promise and weakening the answer to study objective R-04.2.

This ruling may not be re-decided

If a change contradicts this ADR: stop and raise it. Do not implement over it. Specifically: do not "improve" a safety answer by letting the model rewrite it more fluently, and do not remove a citation because the UI looks cleaner without it. Both have been considered and rejected here.

Consequences

The app will sometimes refuse to answer. That is intended behaviour, must not be treated as a bug, and is itself a finding for the study objectives. Every safety string rendered in the UI needs a source reference travelling with it, which constrains the data model.

Coverage

UpstreamLanded inEvidenceNote
R-01D-02"AI assistant" framing named in Context as the contradiction
R-05D-02"summarise" verb quoted in Context
R-12D-02nitrile-vs-latex failure worked in Context
R-13D-02ordered steps cited as paraphrase-fragile
R-17D-02AI Chatbot claim weighed in Rejected options