Every draft arrives with a list of its assumptions. No list means no acceptance, since unlisted guesses cannot be checked.
Trace each assumption to an approved requirement, checked source, or relevant result, and record the evidence's scope. A source quotation can establish a local fact after you verify the quotation and revision. A passing test cannot authorize a guessed requirement or establish overall safety.
Assumption | Evidence demanded |
|---|---|
Reset is synchronous, active high | Approved reset definition and event-control review; targeted reset trace if needed. |
Count covers 0 to 9 then wraps | Update and initialization rules; boundary checks including out-of-range policy. |
Done pulses one cycle at 9 | Comparator plus count advance/hold behavior; pulse check with stated stimulus. |
Inputs stable around the edge | Interface timing contract and relevant timing/CDC review; a constraint alone does not establish physical stability. |
The fake scripted response below demonstrates evidence-link bookkeeping only. Its identifiers are synthetic placeholders, not actual reports. A link's presence does not verify its contents or the assumption.
Exercise: remove the pulse-check link and identify the unresolved item. Restoring a placeholder still leaves a reviewer to obtain and inspect the actual evidence; a test plan is not a completed result.
# FAKE scripted stand-in for a model reply: deterministic, not real output.
def fake_assistant_reply():
return {
"assumptions": [
"reset is synchronous and active high",
"count covers 0 to 9 then wraps",
"done pulses for one cycle at 9",
"inputs stay stable around the clock edge",
],
"checks": {
"reset is synchronous and active high": "SYNTHETIC reset contract A",
"count covers 0 to 9 then wraps": "SYNTHETIC counter review A",
"done pulses for one cycle at 9": "SYNTHETIC pulse-check plan A",
"inputs stay stable around the clock edge": "SYNTHETIC interface contract A",
},
}
def main():
reply = fake_assistant_reply()
assumed = reply["assumptions"]
checks = reply["checks"]
covered = 0
for item in assumed:
if item in checks and checks[item]:
covered += 1
total = len(assumed)
if covered == total and total == 4:
print("PASS: link bookkeeping only; 4 assumptions map to placeholders; evidence contents still need review")
else:
print("FAIL: only %d of %d assumptions covered" % (covered, total))
raise SystemExit(1)
main()SYNTHETIC review record:
Requirement: done is high for one clock cycle at count 9.
Evidence available: comparator source says count==9.
Missing: counter hold/advance behavior and sampling definition.
Decision: compare value supported; pulse-duration claim remains open.
Next action: inspect the counter update path and approved requirement.
A planned pulse test is not an executed result.Name the fourth assumption, its impact, and the missing evidence or owner decision. Do not claim unconditional acceptance. Bounded use depends on project acceptance criteria and the unresolved item's relevance.
It supports the compare value after checking source and revision. Pulse duration also depends on whether count holds at 9 and on observation timing. Inspect that context before making the stronger claim.
Elsewhere in this course | Path |
|---|---|
What a language model does | |
Cost arithmetic | |
Anatomy of a prompt | |
Debugging with AI | |
Scripts and automation | |
Data, privacy and IP | |
Failure modes | ai-skills/trust-and-verification/hallucination-and-failure-modes |
Verifying AI output |