How it works

Four steps from business question to controlled answer.

PAIL adds one evidence checkpoint. Your files, database, retriever, and chosen model can remain in place.

Data passes from business sources through existing search and PAIL checks before an AI answer or human review
The yellow step is the addition: PAIL decides whether the evidence may pass.
01
QUESTION + SEARCH

Find possible records

A user asks a question. Your existing SQL, keyword search, vector database, or RAG framework returns candidates. At this point they are possible matches, not established truth.

02
PAIL BOUNDARY

Read the exact scope

PAIL identifies the requested transaction, order, customer, case, trace, time, and source boundary. Unrelated neighbors are not allowed to redefine the question.

03
EVIDENCE CHECK

Compare relations and sources

PAIL checks whether the rows agree on fields that matter to the question. A disagreement is kept as evidence instead of being averaged into a ranking score.

04
DECISION

Release, report, or refuse

Verified facts are packaged with their sources. Conflicts are reported. Missing evidence produces a refusal. Only a verified packet is eligible for AI generation.

Who is responsible for what?

A narrow role makes the system easier to trust.

YOUR SYSTEMS

Store the truth

CRM, payment, ERP, observability, and document systems remain the sources of record.

YOUR RETRIEVER

Find candidates

SQL, FTS, vectors, LangChain, or another search layer locates possible evidence.

PAIL

Control evidence

Checks identity, relation, conflict, provenance, unsafe fields, and packet completeness.

YOUR LLM OR USER

Explain or review

The model writes from verified facts; a human resolves conflicts and uncertain cause.

Integration

Put the decision between retrieval and generation.

PAIL can read local files itself or receive candidate documents from an existing RAG application.

question
  -> your_retriever.search()
  -> pail.verify(candidates)
  -> VERIFIED_PACKET
       ? your_llm.generate(packet)
       : show_conflict_or_refusal()
See it yourself

Run the same records with and without the checkpoint.

The public demo uses synthetic data and exposes no protected runtime rules.