Three checks before a sentence reaches your proposal

How Bids2Bank decides whether a drafted sentence is supported by your own documents, the exact thresholds it uses, and what happens to the sentences that fail.

By Bids2Bank · · 4 min read

  • engineering
  • compliance checks
  • how it works

When Bids2Bank drafts a proposal, every sentence a writer step produces passes through a compliance stage before it can appear in the package. That stage asks one question three different ways: is this sentence actually supported by your documents?

This post walks through what each check does, the thresholds written into the code, what happens when a model does not answer, and the limits we know about.

Before the checks: two receipts

A drafted sentence has to arrive with two things attached: the clause it cites and a rule reference. If either is missing, or the rule reference is "N/A", the sentence is held with the reason missing receipts and never reaches the checks.

Rule references are not left to the writers. They come from the proposal outline, and the outline keeps a clause only when that clause actually appears in the solicitation text. When it does not, the field is left blank, and the sentence is held for a person rather than shipped with a made-up rule.

Check 1: is there evidence?

The first check searches the documents your workspace uploaded for the five passages most similar to the sentence. Similarity is cosine similarity between embeddings (OpenAI text-embedding-3-small), and the search only ever looks inside your own workspace.

The best passage must score at least 0.70. Below that, the sentence is held as retrieval below threshold. If the search itself fails, that is treated as an outage: the stage fails and can be retried. A broken search is never read as "no evidence".

Check 2: does that passage say this?

The second check shows a model the sentence and the best passage and asks whether the sentence is directly supported. Its instructions are short: paraphrase is acceptable, adding claims that are not in the source is not, and partial support is not a pass. The reply has to contain a clear yes or no. A "no" holds the sentence as citation rejected.

Check 3: does the evidence support the claim?

The third check asks a model to score, from 0 to 1, how well the evidence passages support the claim, where 1.0 means the evidence directly and fully supports it. A score of 0.8 or above passes. Anything lower holds the sentence as entailment rejected.

This is the check meant for the subtle gap. A document that says "the contractor shall implement quarterly access reviews" describes an obligation; a sentence saying "the contractor implements quarterly access reviews" states a current fact. Asking for strong support rather than topical overlap is how the check tries to catch that difference. It is a model judgment, so it can miss, which is one reason a person still reviews the package.

When the model does not answer

Model calls go to Anthropic first and fall back to OpenAI and then Google if a provider errors. If none of them returns a readable verdict, a simple word-overlap check can stand in. For check 2, a ratio of at least 0.6 of the sentence's words must appear in the passage; for check 3, at least 0.8 of the claim's words must appear in the evidence.

Two rules keep this from becoming a back door:

  • The fallback only runs when the model gave no verdict. It never overrules a model's "no".
  • A sentence that passes on the fallback is marked as needing human review. The approval screen will not let anyone approve the package until a person has cleared each of those sentences, and every clearance is recorded.

What gets recorded

For every requirement, the compliance stage stores whether each check passed, the similarity score, which passage was used, the model's one-sentence explanation, the support score and, for a held sentence, the reason it was held. The stage's output is then sealed onto the pursuit's tamper-evident record: hashed with SHA-256 and signed with HMAC-SHA256 before it is handed to the packaging step. The Trust & security page describes that record in more detail.

Where the checks fall short

  • They check support, not strategy. A sentence can be fully supported and still be the wrong thing to say in a competition. That judgment stays with your team.
  • They check against what you uploaded. If a document in your workspace is wrong or out of date, a sentence it supports is supported by wrong material.
  • Checks 2 and 3 are model judgments. A model can be wrong in either direction. The thresholds are fixed numbers in the code, not tuned per workspace, and we have not published a measured accuracy figure for them.
  • The word-overlap fallback is crude on purpose. That is why everything it passes goes to a person.
  • A held sentence is work for a person. It shows up for review instead of in the draft, and someone on your team has to write or fix it.

Why hold instead of guess

A tool that always produces a sentence will sooner or later produce one it cannot back up. We would rather hand you a shorter draft with every gap marked than a complete one with gaps hidden. Bids2Bank does not submit anything to SAM.gov: a named person on your team approves the package, and your team files it through the channel the solicitation names.