Field note · implementation

Why AI Fails on Security Questionnaires After the Demo

A 30-row replay shows why questionnaire demos degrade: evidence is not yet scoped, fresh, owned, disclosable, or locked for submission.

14 minute read
  • AI workflows
  • AI security
  • AI implementation
Illustration of a security questionnaire moving from a demo document bundle through evidence, scope, review, and submission gates

The demo can look right because the bundle is small and the questions are familiar. The handoff exposes the missing contracts.

The failure is not simply “the model hallucinated.” A production questionnaire answer also needs a source boundary, an as-of date, an owner, a disclosure decision, and a release state.

Illustration of the same security questionnaire row taking a permissive demo path and a controlled production path with evidence, scope, review, and submission gates

What does the demo actually prove?

A questionnaire demo proves that an answer generator can produce plausible text from the supplied bundle. It does not prove that the text is approved for this customer, current enough to send, within the product scope, owned by a named person, or safe to export.

That distinction is visible in the source material. Secureframe describes questionnaire automation as searching a Knowledge Base, approved policies, and prior answers. When it cannot find enough relevant material with confidence, it may intentionally leave a question blank rather than guess. It also calls out specific, compound, conditional, and previously unseen questions as harder cases. (Secureframe questionnaire automation guidance)

CSA's AI-CAIQ v1.1 makes the evidence burden explicit. It includes control specifications, self-assessment questions, an AI lifecycle and asset taxonomy, and justification questions for evidence. A yes/no answer is only one part of the assessment. (CSA AI-CAIQ v1.1)

The practical test is therefore not “did the demo answer?” It is “can another reviewer explain why this row may be answered, by which source, for which scope, as of which date, by whom, and with what release permission?”

What broke in the 30-row replay?

The same sanitized rows were run on 2026-08-24 through deterministic-replay/1.0.0. This is a rules harness, not an LLM benchmark. It isolates the workflow conditions around an answer generator.

Fixture resultRowsProduction decision
Supported evidence6Answer from approved, current, in-scope sources
Missing evidence4Route to the named control owner
Stale evidence4Abstain until a current source is approved
Scope mismatch4Abstain and route to product or legal
Unsupported commitment4Route to the accountable owner
Retrieval failure on a compound row4Split or retrieve each subclaim, then route if incomplete
Reviewer handoff2Hold for security-owner review
Disclosure block1Block restricted export
Submission lock1Block unresolved submission

This is the sourceable artifact: a row-level comparison of demo behavior and production behavior, with expected status, output, cited evidence, reviewer decision, and failure category. The counts describe this bounded fixture only. They are not rates and do not estimate how often live questionnaires fail.

The published matrix below keeps the output labels short. Yes; bundle match means the demo produced its generic positive answer. answer, abstain, route, and block are the production statuses. The full raw text and adjudication are archived with the fixture.

IDRowExpectedDemo outputProduction outputEvidence, owner, or failure
Q01Encrypt data at restanswerYes; bundle matchanswersecurity-overview-v2; supported
Q02Encrypt data in transitanswerYes; bundle matchanswersecurity-overview-v2; supported
Q03Require workforce MFAanswerYes; bundle matchanswersecurity-overview-v2; supported
Q04Test incident response annuallyanswerYes; bundle matchanswersecurity-overview-v2; supported
Q05Name AI inventory owneranswerYes; bundle matchanswerai-controls-approved-v2; supported
Q06Log AI retrieval immutablyanswerYes; bundle matchanswerai-controls-approved-v2; supported
Q07Give breach-notification hoursrouteBest-effort yesroutesecurity-owner; missing evidence
Q08State model-integrity-check frequencyrouteBest-effort yesrouteai-product-owner; missing evidence
Q09State AI inference RTOrouteBest-effort yesroutereliability-owner; missing evidence
Q10Prove training-data authorizationrouteBest-effort yesrouteprivacy-owner; missing evidence
Q11Give latest penetration-test dateabstainYes; old citeabstainsecurity-overview-v1; stale evidence
Q12Give latest AI risk-register reviewabstainYes; old citeabstainai-product-owner; stale evidence
Q13State audit-log retentionabstainYes; old citeabstainsecurity-overview-v1; stale evidence
Q14Name current classification modelabstainYes; old citeabstainai-controls-notes-v1; stale evidence
Q15EU residency in enterprise planabstainYes; generic overviewabstainproduct-scope-approved-v2; product-owner; scope mismatch
Q16Customer-managed private VPCabstainYes; generic overviewabstainproduct-scope-approved-v2; product-owner; scope mismatch
Q17HIPAA-regulated deploymentabstainYes; generic overviewabstainproduct-scope-approved-v2; legal-owner; scope mismatch
Q18On-premises deploymentabstainYes; generic overviewabstainproduct-scope-approved-v2; product-owner; scope mismatch
Q19Promise incident notice within 24hrouteYes; we willroutenone; legal-owner; unsupported commitment
Q20Promise custom addendum unchangedrouteYes; we willroutenone; legal-owner; unsupported commitment
Q21Guarantee 99.99% availabilityrouteYes; we willroutenone; reliability-owner; unsupported commitment
Q22Promise backup deletion at 30 daysrouteYes; we willroutenone; privacy-owner; unsupported commitment
Q23Training exclusion and exception approverrouteFirst clause yesrouteai-controls-approved-v2; ai-product-owner; retrieval failure
Q24Backup encryption and key rotationrouteFirst clause yesroutesecurity-overview-v2; security-owner; retrieval failure
Q25AI incident testing, reporting, and approvalrouteFirst clause yesrouteai-controls-approved-v2 + review-register-v1; security-owner; retrieval failure
Q26Quarterly privilege review and revocationrouteFirst clause yesroutesecurity-overview-v2; security-owner; retrieval failure
Q27Security-owner review completedrouteReadyroutereview-register-v1; security-owner; reviewer handoff
Q28AI evidence approved for disclosurerouteReadyroutereview-register-v1; security-owner; reviewer handoff
Q29Attach restricted penetration-test reportblockAttachableblocksecurity-overview-v2; restricted; disclosure block
Q30Submit with unresolved required rowsblockReadyblockreview-register-v1; unresolved; submission lock

How did the failure categories reproduce?

The demo configuration used three small documents and a permissive prompt: answer concisely, cite a matching title, and make a best effort when the bundle seemed relevant. It had no approval state, source scope, freshness metadata, owner routing, disclosure rule, or submission lock.

The production configuration used approved sources, source scope, a 2026-06-01 freshness cutoff, owner routing, disclosure rules, a required reviewer, and a submission lock. Here are the clearest traces.

Missing evidence became an invented answer

Q07 asked: “After how many hours are customers notified of a suspected breach?” The fixture expected route because no approved source supplied a timeline. Demo output: “Yes. The available security material indicates this is handled as standard practice.” It cited a document but not a timeline.

Production output: “Route to security-owner; do not draft a commitment without owner evidence.”

Routing rule: if the question asks for a number, named tool, date, or operating detail and no approved source contains that detail, do not fill the gap with policy-sounding language. Route it to the owner of the control.

Stale evidence became a current claim

Q14 asked which model version handled customer-facing classification. The demo cited ai-controls-notes-v1, dated 2025-11-15, and said the older control note was current. The production run abstained because the source fell outside the freshness policy.

Routing rule: a source can be relevant and still be unusable. Preserve the old citation as a stale lead, then request a new approved record from the owner. Do not silently substitute “last found” for “current.”

NIST makes this a governance issue, not just a retrieval issue. Its AI RMF Core treats governance as cross-cutting and calls for documentation, clear roles and responsibilities, monitoring, and periodic review. It also says documentation can improve human review and accountability. (NIST AI RMF Core)

Scope mismatch became a product promise

Q16 asked whether the service could run in a customer-managed private VPC. The demo answered yes from a generic product overview. The approved source was scoped to standard-saas, so production abstained and routed the row to product-owner.

Routing rule: compare the question scope with the source scope before generation. Product tier, region, tenant, deployment model, regulated workload, and customer contract are all possible scope keys. If the keys do not match, the answer is not “probably yes.” It is abstain plus an owner route.

OWASP documents the security version of this problem: misaligned access controls can expose information across contexts, and retrieval stores should enforce permission-aware partitioning. It also recommends source validation, classification, and immutable retrieval logging. (OWASP LLM08:2025)

A compound question received a partial answer

Q23 asked whether model inputs were excluded from training and who approved exceptions. The demo answered only the first clause: “Yes. The first part is covered in the supplied material.” The cited evidence did not establish an exception approver.

Routing rule: split compound rows into atomic claims before retrieval. A row passes only when every required subclaim has evidence and the combined answer preserves its scope. If one subclaim is missing, route the whole row or mark the unresolved part explicitly. Never let a supported first clause hide an unanswered second clause.

Review and export controls exposed the handoff

Q29 requested a restricted penetration-test report as an attachment. Demo output treated the report as attachable. Production blocked external export.

Q30 asked to submit while two required rows were unresolved. Demo output marked the questionnaire ready. Production blocked submission.

Routing rule: answer generation and external submission are separate states. An answer can be a useful draft while the questionnaire remains blocked. The submission lock must inspect unresolved rows, reviewer state, and disclosure state rather than trusting a final model message.

What should the production router do with each failure?

Use the row status as an explicit contract. The model can propose text, but a deterministic policy decides whether that text is eligible to move forward.

ConditionAllowed AI behaviorRequired next stepVeto
Approved evidence, matching scope, within freshness windowDraft or answer with source IDsReviewer checks the rowNo external submission without the normal review state
No evidence for a required detailSay evidence is missingRoute to control ownerNo best-effort factual detail
Evidence is stalePreserve the stale leadRequest refreshed approvalNo current claim
Scope does not matchAbstainRoute to product, legal, or privacyNo generic product answer
Commitment or contract languageDraft a question or neutral wordingRoute to accountable ownerNo promise from model wording
Compound row with incomplete retrievalSplit and label subclaimsRetrieve or route each unresolved claimNo “yes” for the whole row
Restricted evidence requestedExplain that export is blockedUse the approved disclosure pathNo attachment or leakage
Required rows or review state unresolvedKeep questionnaire pendingResolve or escalateNo submit action

This aligns with NIST's emphasis on documented accountability and differentiated human-AI oversight. It also turns the blank-answer behavior described by Secureframe into a broader production contract: blank, route, and block are not failures of user experience when they carry a reason and an owner.

How do you test the handoff before calling the workflow production-ready?

Run the same fixture twice. Do not change the questions between configurations.

  1. Freeze the model or answer-generator version, prompt, source bundle, and output schema.
  2. Record each row's expected status before running it. Use answer, abstain, route, or block.
  3. Run the demo configuration with the small document bundle. Preserve raw output and cited source IDs.
  4. Add production controls one at a time: approval, scope, freshness, owner, disclosure, reviewer, and submission lock.
  5. Adjudicate each row against the expected label. Record the failure category, not only whether the prose sounded correct.
  6. Inspect the export path. A questionnaire is not ready because every row has text. It is ready when unresolved rows, restricted evidence, and missing approvals cannot pass the lock.
  7. Re-run the fixture after source, prompt, model, or policy changes. The fixture is a regression artifact, not a one-time demo script.

The archive for this run contains the fixture, configuration, source manifest, raw inputs and outputs, failure matrix, expected labels, and reviewer adjudication. It is deliberately small enough to review row by row.

How do you verify the repair before release?

Verify the repair with the same 30 rows and the same expected labels after each change. The repaired workflow passes only when supported rows can answer, unresolved evidence can route or abstain, restricted disclosure can block, and unresolved required rows cannot reach submission.

Verification checkArchived evidencePassing result
Reproduce the inputfixture.json and raw-inputs.jsonThe row wording and expected status are unchanged between runs
Compare the configurationsconfiguration.jsonThe production run adds approval, scope, freshness, owner, reviewer, disclosure, and submission controls
Compare row decisionsdemo-output.json, production-output.json, and failure-matrix.jsonThe six supported rows answer; the missing, stale, scope, commitment, compound, and reviewer cases route or abstain as adjudicated
Check the hard stopsQ29 and Q30 in production-output.json and reviewer-adjudication.jsonRestricted export and unresolved submission remain block
Confirm the result recordrun-summary.jsonThe run records eight non-supported categories and the route-or-block decision without turning fixture counts into live failure rates

That is the repair evidence for this fixture, not proof of model accuracy. If the model, prompt, source policy, product scope, or disclosure rule changes, rerun the fixture and review any changed row before release. A passing replay is a regression signal, not permission to skip a human reviewer.

What does this fixture not prove?

It does not prove that a particular model is accurate, that a real questionnaire platform will produce the same outputs, or that the categories have the same distribution in production. The harness is deterministic and synthetic. Its value is narrower: it makes hidden workflow assumptions visible and gives a team a portable release test.

The next step is not to add more documents to the demo. Take ten to thirty representative rows from your own process, define the expected status and owner for each, then see whether your current system can abstain, route, and block when the evidence contract is incomplete. For broader implementation planning, start with the AI workflow implementation cluster and the AI workflow audit-trail guide. If your team needs help turning the fixture into a working practice, Marius Manolachi's AI consulting and tutoring work is the relevant next step.

Questions people ask next

Should AI answer every security questionnaire row?

No. It may draft an answer when approved, current, in-scope evidence supports it. It should abstain or route missing, stale, compound, or scope-mismatched rows, and block restricted disclosure or unresolved submission.

What is the most important production control after a questionnaire demo?

Make answer state explicit. Every row needs evidence IDs, source scope, freshness, an owner, a reviewer state, and a submission state. A plausible answer without those fields is still a draft.

Can a security questionnaire assistant make commitments?

Only when an approved source and accountable owner support the commitment. Otherwise route it to legal, privacy, reliability, product, or security review instead of drafting a promise.