Before a contract is signed, it is read for the clauses it should carry and for the faults of its drafting. Factum reads it against a declared checklist: each clause located or absent, each drafting fault named at the place it occurs. Between two drafts, it states what changed.
The problem
A first-pass review asks two questions of a draft. Are the clauses that matter present: the parties, the term, termination, governing law, payment, assignment, a cap on liability? And does the draft hold together: are its defined terms used, are they spelled as defined, does every cross-reference point at a section that exists?
A missing clause is a fact about the draft. So is a reference to a section that is not there. A reviewer who states them needs to say where, and needs the next draft to be compared with this one, clause by clause.
Recorded outputTwo certify calls on constructed contracts with fictitious parties. The first draft is the engine's own test document for its drafting checks: a short agreement written with one fault for each check. The comparison uses a longer constructed agreement and a second draft with two stated edits. No AI engine was configured.
A short draft, read against the checklist
POST /api/tenants/{tenant}/certify?reportType=commercial-contract-first-pass-review&filename=drafting-fixture.html
1.1 "Indemnitee" means any person entitled to indemnification under Section 9.4.
paragraph 4 of the draft
Boundary
CERTIFIED: this report states which of the operator's declared checklist items were LOCATED in the document submitted, and names the section each was located in.
NOT ATTESTED
That an item reported as not located is absent from the agreement is not attested.
That no clause matching a checklist item was located is a statement about what these declarations matched.
A term may sit in an exhibit, in a separate instrument, or be phrased past any declaration.
CERTIFIED: each finding is a binary test against this document's own declarations - a term it quoted as defined, a phrase it said is defined, a reference the cross-reference resolver could not resolve in the copy submitted, a count of the modal verbs it uses, a token one edit from a term it defined - and every finding carries the sites it was found at.
NOT CERTIFIED: that any finding is an error. A lowercase use may be the ordinary word, a near-miss may be a different word, and a reference not located in the copy submitted may be in an attachment filed separately. Nothing here is corrected, merged or judged, and no finding refuses the document.
F
vd-2b223ab58835e187
Key
A development key minted for this recording. Not the production issuer key.
8 of 9 clause items are absent, each with its code. The draft does mention payment and governing law, inside its supply article. The checklist looks for each clause in a section whose heading names it, and finding none it says so with no_segment_matches_the_declared_scope, a different code from a section that exists but does not say it. In the longer agreement below, where those sections exist, the clauses are located. The 5 prose sections were refused by name, because no AI engine was configured.
Two drafts, compared
The second draft is the first with two edits: figure changed in 5.1 (limitation of liability), and clause removed in ARTICLE 6 TERMINATION and its paragraph 6.1. Every other byte is the same.
The comparison reads each checklist clause in each draft and states one verdict for it.
unchanged3changed1removed1added0not located in either4refused0
POST /api/tenants/{tenant}/certify-revision
a clause identifying the parties to the agreementunchanged
Check how this was answered
statement point sp-parties
rule clause-span-text-whitespace-folded@1
this result says "sp-parties" (a clause identifying the parties to the agreement): UNCHANGED - the clause located in the baseline "baseline.html" in block 1 and the clause located in the candidate "candidate.html" in block 1 are equal under clause-span-text-whitespace-folded@1
Source the clause in each draft
This Master Supply Agreement (the "Agreement") is entered into by and between Acme Corp.
first draft, paragraph 2
This Master Supply Agreement (the "Agreement") is entered into by and between Acme Corp.
second draft, paragraph 2
a clause stating the effective datenot_located_in_either
Check how this was answered
statement point sp-effective-date
rule clause-span-text-whitespace-folded@1
this result says "sp-effective-date" (a clause stating the effective date): NOT LOCATED IN EITHER DRAFT - no clause matching this checklist item was located in the baseline "baseline.html" [no_statement_answers_this_point] or in the candidate "candidate.html" [no_statement_answers_this_point] under the declared forms
Source the clause in each draft
Not located in the first draft.
Not located in the second draft.
a clause stating the term of the agreementnot_located_in_either
Check how this was answered
statement point sp-term
rule clause-span-text-whitespace-folded@1
this result says "sp-term" (a clause stating the term of the agreement): NOT LOCATED IN EITHER DRAFT - no clause matching this checklist item was located in the baseline "baseline.html" [no_segment_matches_the_declared_scope, 0 section(s) searched] or in the candidate "candidate.html" [no_segment_matches_the_declared_scope, 0 section(s) searched] under the declared forms
Source the clause in each draft
Not located in the first draft.
Not located in the second draft.
a clause addressing renewal or extensionnot_located_in_either
Check how this was answered
statement point sp-renewal
rule clause-span-text-whitespace-folded@1
this result says "sp-renewal" (a clause addressing renewal or extension): NOT LOCATED IN EITHER DRAFT - no clause matching this checklist item was located in the baseline "baseline.html" [no_segment_matches_the_declared_scope, 0 section(s) searched] or in the candidate "candidate.html" [no_segment_matches_the_declared_scope, 0 section(s) searched] under the declared forms
Source the clause in each draft
Not located in the first draft.
Not located in the second draft.
a clause stating termination rights and the notice they requireremoved
Check how this was answered
statement point sp-termination
rule clause-span-text-whitespace-folded@1
this result says "sp-termination" (a clause stating termination rights and the notice they require): REMOVED - a clause matching this checklist item was located in the baseline "baseline.html" in the section marked "6.1"; no clause matching this checklist item was located in the candidate "candidate.html" under the declared forms [no_segment_matches_the_declared_scope, 0 section(s) searched]
Source the clause in each draft
Either party may terminate this Agreement by giving sixty days written notice to the other party.
first draft, paragraph 16
Not located in the second draft.
a clause stating the governing lawunchanged
Check how this was answered
statement point sp-governing-law
rule clause-span-text-whitespace-folded@1
this result says "sp-governing-law" (a clause stating the governing law): UNCHANGED - the clause located in the baseline "baseline.html" in the section marked "7.1" and the clause located in the candidate "candidate.html" in the section marked "7.1" are equal under clause-span-text-whitespace-folded@1
Source the clause in each draft
This Agreement shall be governed by the laws of New York.
first draft, paragraph 18
This Agreement shall be governed by the laws of New York.
second draft, paragraph 16
a clause stating when payment is dueunchanged
Check how this was answered
statement point sp-payment-terms
rule clause-span-text-whitespace-folded@1
this result says "sp-payment-terms" (a clause stating when payment is due): UNCHANGED - the clause located in the baseline "baseline.html" in the section marked "4.1" and the clause located in the candidate "candidate.html" in the section marked "4.1" are equal under clause-span-text-whitespace-folded@1
Source the clause in each draft
The Buyer shall pay each undisputed invoice within thirty days after the Buyer receives it.
first draft, paragraph 12
The Buyer shall pay each undisputed invoice within thirty days after the Buyer receives it.
second draft, paragraph 12
a clause addressing assignment and the consent it requiresnot_located_in_either
Check how this was answered
statement point sp-assignment
rule clause-span-text-whitespace-folded@1
this result says "sp-assignment" (a clause addressing assignment and the consent it requires): NOT LOCATED IN EITHER DRAFT - no clause matching this checklist item was located in the baseline "baseline.html" [no_segment_matches_the_declared_scope, 0 section(s) searched] or in the candidate "candidate.html" [no_segment_matches_the_declared_scope, 0 section(s) searched] under the declared forms
Source the clause in each draft
Not located in the first draft.
Not located in the second draft.
a clause capping liabilitychanged
Check how this was answered
statement point sp-liability-cap
rule clause-span-text-whitespace-folded@1
this result says "sp-liability-cap" (a clause capping liability): CHANGED - the clause located in the baseline "baseline.html" in the section marked "5.1" and the clause located in the candidate "candidate.html" in the section marked "5.1" differ under clause-span-text-whitespace-folded@1; both texts are carried on this verdict
Source the clause in each draft
The total liability of the Seller under this Agreement shall not exceed 500,000 dollars.
first draft, paragraph 14
The total liability of the Seller under this Agreement shall not exceed 250,000 dollars.
second draft, paragraph 14
CERTIFIED: this report states, for the declared pair of contract drafts, which items of the declared checklist were located in the baseline and which in the candidate, whether each item located in both is equal under the named equality rule, one verdict per checklist item naming that rule and the checklist version, and the content hash of each draft as submitted. For every one of the 9 located readings its verdicts carry, it also states the byte range in that draft at which the clause or reference was read and the markup there, whose reading is the located text.
NOT ATTESTED
That either draft is correct, or that the candidate improves on or worsens the baseline, is not attested.
The legal effect of any clause, of any change between the drafts, or of any removal is not attested.
That either draft is complete beyond the questions this checklist declares is not attested.
That an item reported as not located in a draft is absent from that agreement is not attested; it is a statement about what these declarations matched in the copy submitted.
That two clauses reported as unchanged mean the same thing beyond equality of their text under the named rule is not attested.
Which draft came first, and whether one supersedes or incorporates the other, is not attested beyond what the caller declared.
Four clauses are not located in either draft, under the same rule in both. A comparison states differences between these two files, and nothing about any other.
Check it without Factum
The certificate is published as it was returned. Download it with the key and the Factum Verifier, and run the command. It needs Node 18 or later and nothing else.
VERIFIED
keyId vd-2b223ab58835e187
canonical bytes 57094
barcode … (the signed barcode, 462 characters, printed in full when you run it)
surface FULL - the body carries no surface block, so every claim the run captured is on it
CERTIFIED BY THIS CHECK: this document was signed by the holder of the private half of the
key you supplied, over the canonical form named in its signature block, and has not been
altered by one byte since.
NOT CERTIFIED BY THIS CHECK: that the key you supplied is the operator's. That comes from
WHERE YOU OBTAINED THE KEY and from nothing in this file - a valid signature under the wrong
key is exactly what a forgery looks like.
The certificate is published as it was returned. Download it with the key and the Factum Verifier, and run the command. It needs Node 18 or later and nothing else.
VERIFIED
keyId vd-2b223ab58835e187
canonical bytes 72389
barcode … (the signed barcode, 525 characters, printed in full when you run it)
surface FULL - the body carries no surface block, so every claim the run captured is on it
CERTIFIED BY THIS CHECK: this document was signed by the holder of the private half of the
key you supplied, over the canonical form named in its signature block, and has not been
altered by one byte since.
NOT CERTIFIED BY THIS CHECK: that the key you supplied is the operator's. That comes from
WHERE YOU OBTAINED THE KEY and from nothing in this file - a valid signature under the wrong
key is exactly what a forgery looks like.