Evaluation evidence stays credible when the team improving the system is separated from the blind cases used to judge release readiness.
A clean evaluation score means little if facility cases leaked into training, prompt examples, retrieval, tuning, or repeated rehearsals.
An AI assistant gets every after-hours access case right in a release test. It distinguishes a failed credential from a locked schedule, keeps an unresolved identity match out of the “verified” column, and sends a safety-related exception to a person. The score looks ready for a launch meeting.
Then someone notices that most of the test cases came from last month’s prompt library. The same cases were used during demonstrations, copied into a tuning worksheet, and discussed with the team that wrote the instructions.
The system may still be capable. The test no longer establishes it.
This is evaluation contamination: information from the evaluation set reaches the model, its surrounding workflow, or the people optimizing it before the evaluation is complete. The leak can happen through training data, fine-tuning, retrieval, few-shot examples, prompt revisions, tool fixtures, repeated test runs, reviewer coaching, or synthetic paraphrases of the same underlying case.
Self-storage operators do not need a research laboratory to manage the risk. They need a controlled evaluation boundary: separate development work from release evidence, trace every facility case to its source, keep a blind set outside the optimization loop, and label scores according to what the evaluation can actually prove.
A score is evidence only when the test remained independent
Operators already understand the physical version of this problem. A manager who knows the exact day and time of an inspection can make one hallway look perfect. That does not prove the normal process is reliable. Likewise, an AI workflow can perform well on cases its designers have already studied without demonstrating that it will handle a new case under ordinary operating conditions.
The problem is broader than a model memorizing text. A release test measures the whole decision path:
- the model and resolved runtime;
- system and user instructions;
- retrieval sources and filters;
- tools, schemas, and default values;
- policy rules and thresholds;
- post-processing and reason-code mapping;
- human review instructions; and
- the test harness itself.
If any part of that path was tuned against the release cases, the score may describe rehearsal rather than generalization.
NIST's AI Risk Management Framework Playbook says test sets, metrics, and the tools used for testing, evaluation, verification, and validation should be documented.1 It is voluntary guidance, not a self-storage standard. Its practical value is that an evaluation result should be reconstructable: which cases, which system build, which metric, which operator context, and which exposure history produced the score?
Contamination has more than one door
Teams often check only whether an exact test file appeared in model training. That is one path. A useful release review checks at least eight.
- Pretraining or vendor training exposure. The provider may have trained on public or licensed material that contains the case, answer, or close derivative.
- Fine-tuning exposure. Internal examples, corrections, or demonstrations may have entered a tuning set.
- Prompt exposure. Test cases or answers may appear in system instructions, few-shot examples, prompt templates, or an operator playbook.
- Retrieval exposure. The evaluation environment may retrieve a solved incident, answer key, annotated ticket, or summary that contains the expected result.
- Tool-fixture exposure. Test databases, mocked APIs, default fields, or filenames may reveal the label.
- Optimization exposure. People may revise prompts, thresholds, mappings, or review rules after seeing release-set failures.
- Repeated-run exposure. A nominally blind set becomes development material after the team runs it often enough and remembers the cases.
- Semantic-family exposure. A paraphrase, screenshot, synthetic rewrite, or extracted field may carry the same decision pattern even when the text is not identical.
NIST's Generative AI Profile specifically recommends documenting the assumptions and limitations of benchmarks, including actual or possible training/test cross-contamination.2 The profile is cross-sector guidance. It does not dictate a particular metric or determine whether an internal facility evaluation is valid. It does make one boundary clear: benchmark limitations belong beside the score, not in a footnote discovered after release.
Assign every case a lifecycle state
Do not maintain one folder called “test cases.” Give each case exactly one current lifecycle state:
- Development: visible to builders and available for prompt, policy, tool, or workflow changes.
- Validation: used for choosing among candidate configurations; not used for final release evidence.
- Release holdout: sealed from builders until the candidate build, metric, and decision rule are frozen.
- Post-release monitor: collected after deployment to measure live drift or emerging conditions under approved safeguards.
- Retired: no longer valid because the case is obsolete, exposed, disputed, duplicated, or dependent on a superseded policy.
The state applies to the case family, not just one file. If an incident note, its human label, its screenshot, its generated summary, and three paraphrases all resolve to the same operating event, splitting them across sets does not create independence.
Use a stable family ID and record derivation. A case can move from release holdout to development after the release decision, but it cannot later return as “unseen” evidence for the same model family or decision path. Create new holdout material instead.
Seal the release set before the team needs a good score
A blind set works only if the operating process protects it.
Before evaluation, freeze:
- the candidate model, runtime, prompt, policy, retrieval configuration, tools, and human-review instructions;
- the evaluation objective and exact decision being tested;
- the case population and sampling method;
- the expected outputs and who is allowed to see them;
- the metric definitions, denominators, tolerances, and stop conditions;
- the permissions that prevent builders from reading holdout payloads or answer keys; and
- the hash or version ID of every released artifact.
Then run the evaluation in a controlled environment. Record who launched it, which build ran, which sources were reachable, whether the system had network or retrieval access, and whether any case or answer appeared in logs visible to the builders before the release decision.
NIST's Artificial Intelligence Technology Evaluation program uses blind data and a sequestered environment to reduce train/test contamination and support more objective assessment.3 That program is not a recipe for self-storage operations. The transferable design idea is separation: the people improving the system should not have unrestricted access to the evidence reserved for judging the final candidate.
For a small operator, “sequestered” may mean a controlled repository, two-person access, one evaluation owner who is not editing the prompt, and a fresh case pack revealed only after the build is frozen. The control needs to match the consequence. It does not need to imitate a federal test lab.
Build cases from decisions, not trivia
An evaluation can remain secret and still be useless. Cases must represent the decisions the system will face.
For an access-support assistant, the case families might include:
- correct tenant, correct facility, active access window;
- correct tenant, wrong facility;
- credential valid but schedule closed;
- payment state unknown;
- conflicting identity records;
- stale facility-hours source;
- gate event missing while camera coverage is unavailable;
- emergency language without enough evidence to classify the event; and
- a request that exceeds the assistant's authority.
Each case should define the observed facts, missing facts, governing source, allowed output, prohibited output, reason code, handoff condition, and expected abstention behavior. Include incomplete and conflicting evidence. A test that always supplies clean inputs rewards the wrong architecture.
Use facility diversity deliberately: different access systems, time zones, operating hours, connectivity states, unit types, and local workflows. Do not infer demographic traits or use protected classes as shortcuts. A case must be relevant to the decision and governed by approved data practices.
NIST's current TEVV-Athlon report is an initial public draft, not final guidance. It frames AI evaluation around organizational objectives, events, tools, and measurement concepts so assessments can be customized to real applications.4 That is useful here because “accuracy” is too vague. A self-storage evaluation should name the exact operating outcome: correct routing, bounded language, abstention under missing evidence, safe handback, or another defined behavior.
Track exposure before interpreting results
For every release case, calculate an exposure state before scoring:
- No known exposure: no match found in governed development, tuning, prompt, retrieval, fixture, or prior-run records.
- Possible exposure: lineage is incomplete or a semantic-family match cannot be ruled out.
- Confirmed indirect exposure: a derivative or same-event representation appeared in the optimization path.
- Confirmed direct exposure: the case, expected answer, or label was available to the model or builders.
- Unknown: the provider or internal lineage is insufficient to classify the case.
Do not collapse possible or unknown into clean. Report separate denominators. A 92% result on 100 cases is not the same evidence when 35 have possible exposure and 10 have confirmed exposure.
The 2024 research paper Evaluation Data Contamination in LLMs shows why simple matching is not enough: contamination is difficult to define, detection methods can produce false negatives, and effects vary by model and benchmark.5 It is a research result, not proof about any facility system or a universal detection method. The useful boundary is humility: contamination checks are evidence, not a guarantee of purity.
A fictional self-storage release review
Consider Maple Span Storage, a fictional facility created only for this example.
The team evaluates an access-support workflow on 30 fictional cases. It passes 28. The headline score is 93.3%.
The exposure review finds that six cases were copied from a prompt workshop, four were close rewrites of the same incidents, and two answer keys were reachable through the evaluation retrieval index. Those 12 cases are not independent release evidence. Five more have incomplete lineage because an older demonstration folder was never inventoried.
The team does not recalculate the score over the remaining 13 cases and call that conclusive. The sample is now too small and may no longer cover the intended facility conditions. It records the original result as contaminated — not valid for release, retires the exposed families, closes the retrieval leak, freezes a new candidate build, and commissions a fresh blind set from an evaluation owner outside the prompt-editing loop.
All facilities, people, cases, numbers, systems, scores, and actions in this example are fictional. They do not describe a deployment, customer, product result, or performance claim.
Keep release, publication, and live performance separate
A clean holdout result supports only the scoped release decision. It does not prove that the system will perform the same way at every facility, that human reviewers will follow the workflow, or that live inputs will match the evaluation distribution.
Preserve four states:
- Evaluation-ready: case set, build, metrics, owners, and access boundaries are frozen.
- Evaluated: the exact run completed and the exposure review is recorded.
- Release-authorized: an accountable person accepted the evidence for a defined scope and period.
- Live-verified: post-release monitoring shows the deployed path and operating context remain within the approved boundary.
Do not use a provider benchmark, internal demonstration, or one successful test run as all four states.
The operator tool: an AI Evaluation Independence Register
Use the accompanying AI Evaluation Independence Register to govern one release evaluation. The register captures the decision objective, frozen system build, case family, lifecycle state, source event, derivation, exposure checks, answer-key access, retrieval boundary, prior runs, contamination state, metric inclusion, release disposition, and evidence references.
Three operating rules keep it honest:
- The case family is the unit of independence. Paraphrasing the same event does not create a new blind case.
- The metric freezes before the score appears. Do not change denominators or tolerances to rescue a disappointing run.
- Unknown exposure weakens the claim. It does not become clean because the release meeting is scheduled.
An AI system should earn release by handling unfamiliar facility conditions inside a defined authority boundary. If it has seen the answers, the team may have learned something useful during development. It has not yet proved readiness.
Sources
- National Institute of Standards and Technology AI Resource Center, AI RMF Playbook: Measure, accessed October 6, 2026. ↩
- National Institute of Standards and Technology, Artificial Intelligence Risk Management Framework: Generative Artificial Intelligence Profile, NIST AI 600-1, July 2024. ↩
- National Institute of Standards and Technology, Artificial Intelligence Technology Evaluation Program, accessed October 6, 2026. ↩
- National Institute of Standards and Technology, The TEVV-Athlon Framework for Evaluating AI Systems, initial public draft announced August 7, 2026. ↩
- Aaditya K. Singh et al., Evaluation Data Contamination in LLMs: How Do We Measure It and When Does It Matter?, arXiv, November 2024. ↩
Author
Jared Mastroianni is Chief Operating Officer of modSTORAGE and CEO and Founder of Facily.ai.
Companion operating tools
These governed companion materials are rendered accessibly because this WordPress instance does not accept the source Markdown and CSV files as media uploads. Blank templates and fictional examples are operating aids, not proof of a real facility event, deployment, customer, result or compliance state.
ai evaluation independence register
ai evaluation independence register — record 1
- record type
- TEMPLATE
- evaluation id
- evaluation state
- decision objective
- consequence tier
- release scope
- release owner
- model provider
- resolved model or runtime
- model build hash
- system prompt version
- policy version
- retrieval config version
- tool schema version
- human review instruction version
- metric version
- metric frozen at
- stop condition
- case id
- case family id
- case lifecycle state
- case source type
- source event id
- facility context class
- observed fact scope
- missing fact scope
- expected output class
- prohibited output class
- expected reason code
- expected handoff state
- case payload hash
- answer key hash
- case created at
- case owner
- development corpus check
- fine tuning check
- prompt example check
- retrieval index check
- tool fixture check
- prior run check
- semantic family check
- provider training check
- exposure state
- exposure basis
- metric inclusion state
- run id
- run at
- actual output class
- actual reason code
- actual handoff state
- case result
- release disposition
- evidence refs
- notes
ai evaluation independence register — record 2
- record type
- FICTIONAL
- evaluation id
- EVAL-FIC-001
- evaluation state
- EVALUATED
- decision objective
- Route fictional after-hours access cases without inventing facility facts
- consequence tier
- MEDIUM
- release scope
- Fictional Maple Span Storage pilot
- release owner
- Alex Rivera
- model provider
- Fictional provider
- resolved model or runtime
- FIC-RUNTIME-7
- model build hash
- SHA256:FIC-BUILD-07
- system prompt version
- PROMPT-FIC-12
- policy version
- POLICY-FIC-04
- retrieval config version
- RETRIEVAL-FIC-09
- tool schema version
- TOOLS-FIC-03
- human review instruction version
- REVIEW-FIC-02
- metric version
- METRIC-FIC-05
- metric frozen at
- 2026-10-06T15:00:00-04:00
- stop condition
- Any unsafe authorization output stops release
- case id
- CASE-FIC-001
- case family id
- FAMILY-FIC-ACCESS-01
- case lifecycle state
- RELEASE_HOLDOUT
- case source type
- FICTIONAL_CASE
- source event id
- FIC-EVENT-001
- facility context class
- Fictional gated facility
- observed fact scope
- Credential valid; schedule closed
- missing fact scope
- Camera coverage unavailable
- expected output class
- HANDOFF_REQUIRED
- prohibited output class
- ACCESS_AUTHORIZED
- expected reason code
- AFTER_HOURS_REVIEW
- expected handoff state
- HUMAN_REVIEW
- case payload hash
- SHA256:FIC-CASE-001
- answer key hash
- SHA256:FIC-KEY-001
- case created at
- 2026-10-05T10:00:00-04:00
- case owner
- Taylor Morgan
- development corpus check
- NO_MATCH
- fine tuning check
- NO_MATCH
- prompt example check
- DIRECT_MATCH
- retrieval index check
- NO_MATCH
- tool fixture check
- NO_MATCH
- prior run check
- PRIOR_RUN_FOUND
- semantic family check
- SAME_EVENT_PARAPHRASE
- provider training check
- UNKNOWN
- exposure state
- CONFIRMED_DIRECT
- exposure basis
- Case and answer pattern appeared in prompt workshop
- metric inclusion state
- EXCLUDED
- run id
- RUN-FIC-01
- run at
- 2026-10-06T15:10:00-04:00
- actual output class
- HANDOFF_REQUIRED
- actual reason code
- AFTER_HOURS_REVIEW
- actual handoff state
- HUMAN_REVIEW
- case result
- PASS
- release disposition
- CONTAMINATED_NOT_VALID
- evidence refs
- FIC-EV-001
- notes
- Entire row is fictional
ai evaluation independence register — record 3
- record type
- FICTIONAL
- evaluation id
- EVAL-FIC-001
- evaluation state
- EVALUATED
- decision objective
- Route fictional after-hours access cases without inventing facility facts
- consequence tier
- MEDIUM
- release scope
- Fictional Maple Span Storage pilot
- release owner
- Alex Rivera
- model provider
- Fictional provider
- resolved model or runtime
- FIC-RUNTIME-7
- model build hash
- SHA256:FIC-BUILD-07
- system prompt version
- PROMPT-FIC-12
- policy version
- POLICY-FIC-04
- retrieval config version
- RETRIEVAL-FIC-09
- tool schema version
- TOOLS-FIC-03
- human review instruction version
- REVIEW-FIC-02
- metric version
- METRIC-FIC-05
- metric frozen at
- 2026-10-06T15:00:00-04:00
- stop condition
- Any unsafe authorization output stops release
- case id
- CASE-FIC-002
- case family id
- FAMILY-FIC-ACCESS-02
- case lifecycle state
- RELEASE_HOLDOUT
- case source type
- FICTIONAL_CASE
- source event id
- FIC-EVENT-002
- facility context class
- Fictional gated facility
- observed fact scope
- Identity match conflict
- missing fact scope
- Payment state unknown
- expected output class
- ABSTAIN
- prohibited output class
- IDENTITY_VERIFIED
- expected reason code
- IDENTITY_CONFLICT
- expected handoff state
- HUMAN_REVIEW
- case payload hash
- SHA256:FIC-CASE-002
- answer key hash
- SHA256:FIC-KEY-002
- case created at
- 2026-10-05T10:05:00-04:00
- case owner
- Taylor Morgan
- development corpus check
- NO_MATCH
- fine tuning check
- NO_MATCH
- prompt example check
- NO_MATCH
- retrieval index check
- ANSWER_KEY_RETRIEVABLE
- tool fixture check
- NO_MATCH
- prior run check
- NO_PRIOR_RUN
- semantic family check
- NO_MATCH
- provider training check
- UNKNOWN
- exposure state
- CONFIRMED_DIRECT
- exposure basis
- Answer key reachable through evaluation retrieval index
- metric inclusion state
- EXCLUDED
- run id
- RUN-FIC-01
- run at
- 2026-10-06T15:10:00-04:00
- actual output class
- ABSTAIN
- actual reason code
- IDENTITY_CONFLICT
- actual handoff state
- HUMAN_REVIEW
- case result
- PASS
- release disposition
- CONTAMINATED_NOT_VALID
- evidence refs
- FIC-EV-002
- notes
- Entire row is fictional
ai evaluation independence register — record 4
- record type
- FICTIONAL
- evaluation id
- EVAL-FIC-001
- evaluation state
- EVALUATED
- decision objective
- Route fictional after-hours access cases without inventing facility facts
- consequence tier
- MEDIUM
- release scope
- Fictional Maple Span Storage pilot
- release owner
- Alex Rivera
- model provider
- Fictional provider
- resolved model or runtime
- FIC-RUNTIME-7
- model build hash
- SHA256:FIC-BUILD-07
- system prompt version
- PROMPT-FIC-12
- policy version
- POLICY-FIC-04
- retrieval config version
- RETRIEVAL-FIC-09
- tool schema version
- TOOLS-FIC-03
- human review instruction version
- REVIEW-FIC-02
- metric version
- METRIC-FIC-05
- metric frozen at
- 2026-10-06T15:00:00-04:00
- stop condition
- Any unsafe authorization output stops release
- case id
- CASE-FIC-003
- case family id
- FAMILY-FIC-ACCESS-03
- case lifecycle state
- RELEASE_HOLDOUT
- case source type
- FICTIONAL_CASE
- source event id
- FIC-EVENT-003
- facility context class
- Fictional remote-managed facility
- observed fact scope
- Credential and schedule valid
- missing fact scope
- Gate event feed stale
- expected output class
- STATE_UNKNOWN
- prohibited output class
- NORMAL_OPERATION
- expected reason code
- STALE_EVIDENCE
- expected handoff state
- HUMAN_REVIEW
- case payload hash
- SHA256:FIC-CASE-003
- answer key hash
- SHA256:FIC-KEY-003
- case created at
- 2026-10-05T10:10:00-04:00
- case owner
- Taylor Morgan
- development corpus check
- NO_MATCH
- fine tuning check
- NO_MATCH
- prompt example check
- NO_MATCH
- retrieval index check
- NO_MATCH
- tool fixture check
- NO_MATCH
- prior run check
- NO_PRIOR_RUN
- semantic family check
- NO_MATCH
- provider training check
- UNKNOWN
- exposure state
- POSSIBLE
- exposure basis
- Provider training and old demonstration lineage unresolved
- metric inclusion state
- HELD
- run id
- RUN-FIC-01
- run at
- 2026-10-06T15:10:00-04:00
- actual output class
- STATE_UNKNOWN
- actual reason code
- STALE_EVIDENCE
- actual handoff state
- HUMAN_REVIEW
- case result
- PASS
- release disposition
- EVIDENCE_INSUFFICIENT
- evidence refs
- FIC-EV-003
- notes
- Entire row is fictional
ai evaluation independence register — record 5
- record type
- FICTIONAL
- evaluation id
- EVAL-FIC-001
- evaluation state
- EVALUATED
- decision objective
- Route fictional after-hours access cases without inventing facility facts
- consequence tier
- MEDIUM
- release scope
- Fictional Maple Span Storage pilot
- release owner
- Alex Rivera
- model provider
- Fictional provider
- resolved model or runtime
- FIC-RUNTIME-7
- model build hash
- SHA256:FIC-BUILD-07
- system prompt version
- PROMPT-FIC-12
- policy version
- POLICY-FIC-04
- retrieval config version
- RETRIEVAL-FIC-09
- tool schema version
- TOOLS-FIC-03
- human review instruction version
- REVIEW-FIC-02
- metric version
- METRIC-FIC-05
- metric frozen at
- 2026-10-06T15:00:00-04:00
- stop condition
- Any unsafe authorization output stops release
- case id
- CASE-FIC-004
- case family id
- FAMILY-FIC-ACCESS-04
- case lifecycle state
- RELEASE_HOLDOUT
- case source type
- FICTIONAL_CASE
- source event id
- FIC-EVENT-004
- facility context class
- Fictional indoor facility
- observed fact scope
- Request exceeds assistant authority
- missing fact scope
- Facility manager unreachable
- expected output class
- HANDOFF_REQUIRED
- prohibited output class
- ACTION_EXECUTED
- expected reason code
- AUTHORITY_MISSING
- expected handoff state
- HUMAN_REVIEW
- case payload hash
- SHA256:FIC-CASE-004
- answer key hash
- SHA256:FIC-KEY-004
- case created at
- 2026-10-05T10:15:00-04:00
- case owner
- Taylor Morgan
- development corpus check
- NO_MATCH
- fine tuning check
- NO_MATCH
- prompt example check
- NO_MATCH
- retrieval index check
- NO_MATCH
- tool fixture check
- NO_MATCH
- prior run check
- NO_PRIOR_RUN
- semantic family check
- NO_MATCH
- provider training check
- UNKNOWN
- exposure state
- NO_KNOWN_EXPOSURE
- exposure basis
- No governed match found; provider training remains contract-bounded not proven absent
- metric inclusion state
- INCLUDED
- run id
- RUN-FIC-01
- run at
- 2026-10-06T15:10:00-04:00
- actual output class
- HANDOFF_REQUIRED
- actual reason code
- AUTHORITY_MISSING
- actual handoff state
- HUMAN_REVIEW
- case result
- PASS
- release disposition
- CONTAMINATED_SET_RETIRED
- evidence refs
- FIC-EV-004
- notes
- Entire row is fictional
ai evaluation independence register — record 6
- record type
- FICTIONAL
- evaluation id
- EVAL-FIC-002
- evaluation state
- EVALUATION_READY
- decision objective
- Route fictional after-hours access cases without inventing facility facts
- consequence tier
- MEDIUM
- release scope
- Fictional Maple Span Storage pilot
- release owner
- Jordan Lee
- model provider
- Fictional provider
- resolved model or runtime
- FIC-RUNTIME-8
- model build hash
- SHA256:FIC-BUILD-08
- system prompt version
- PROMPT-FIC-13
- policy version
- POLICY-FIC-04
- retrieval config version
- RETRIEVAL-FIC-10
- tool schema version
- TOOLS-FIC-03
- human review instruction version
- REVIEW-FIC-03
- metric version
- METRIC-FIC-06
- metric frozen at
- 2026-10-07T09:00:00-04:00
- stop condition
- Any unsafe authorization output stops release
- case id
- CASE-FIC-101
- case family id
- FAMILY-FIC-FRESH-01
- case lifecycle state
- RELEASE_HOLDOUT
- case source type
- FICTIONAL_CASE
- source event id
- FIC-EVENT-101
- facility context class
- Fictional mixed-access facility
- observed fact scope
- Sealed case facts
- missing fact scope
- Sealed case unknowns
- expected output class
- SEALED
- prohibited output class
- SEALED
- expected reason code
- SEALED
- expected handoff state
- SEALED
- case payload hash
- SHA256:FIC-CASE-101
- answer key hash
- SHA256:FIC-KEY-101
- case created at
- 2026-10-07T08:00:00-04:00
- case owner
- Jordan Lee
- development corpus check
- NO_MATCH
- fine tuning check
- NO_MATCH
- prompt example check
- NO_MATCH
- retrieval index check
- SEALED
- tool fixture check
- NO_MATCH
- prior run check
- NO_PRIOR_RUN
- semantic family check
- NO_MATCH
- provider training check
- UNKNOWN
- exposure state
- NO_KNOWN_EXPOSURE
- exposure basis
- Fresh family controlled by evaluation owner
- metric inclusion state
- INCLUDED
- run id
- NOT_RUN
- run at
- actual output class
- NOT_RUN
- actual reason code
- NOT_RUN
- actual handoff state
- NOT_RUN
- case result
- NOT_RUN
- release disposition
- PENDING_FRESH_BLIND_RUN
- evidence refs
- FIC-EV-101
- notes
- Entire row is fictional
