Test report

Every check here is a mistake the engine already made once.

A regression suite is not a quality badge. It is a list of the ways a tool has been wrong, written down so it cannot be wrong that way again. This is ours, in full.

Run 15 October 2026. Node v24.19.0. Engine version 0.2.0. Generated from the run, not typed.

527checks
0failing
4suites, each reproducible
123law articles behind the findings

The suite runs on a contract that ships with the software, so it passes on a clean copy with no private files present. Anyone holding the software package reproduces this page with npm test.

The contract engine, 146 checks

GroupChecks
It knows what it is looking at4
It refuses clause verdicts on an unsigned document4
Parties are not swapped6
Appendix table9
Collisions are reported, never resolved7
An appendix that opens with a label above its first numbered row3
Payment milestones5
Terms survive the merge into the profile4
Compliance plan7
Replan, the delay scenario8
Risk register on an adversarial subcontract19
The register does not cry wolf2
It says so when it cannot analyse something2
Arabic survives the PDF reader2
A short form contract that announces itself is not refused3
The readability test measures whitespace, not a letter4
Workforce, Saudi Labour Law pack9
Article 117, the sick leave year6
Article 80(7), consecutive absence9
Article 80(7), intermittent absence6
Live countdown before anything is breached3
Excused absence does not start the clock1
Sick leave banding, Article 1172
Nothing wrong, nothing raised1
Report renders4
Nothing private is reachable from the test path16

The tender intake, 58 checks

GroupChecks
Classification: an enquiry is a tender even without tender vocabulary5
Requirements: the three readers9
The clock10
Scope drift between revisions7
Nothing about the bidder is invented10
Arabic14
A tender we issued is refused, not analysed backwards3

2 checks were skipped on this run because the optional database link was not running. Skipped checks are not counted.

The knowledge base, 221 checks

GroupChecks
Both libraries validate10
Every verified article meets the sourcing rule6
Amended articles carry the text in force, not the repealed one6
Spot checks against the official wording4
The validator catches what it is there to catch6
Moving the traps into data changed nothing12
Every trap still fires on its own wording31
The phase 2 patterns stay quiet on fair drafting22
Moving the bid stage traps into data changed nothing6
Bid stage findings cite the Tenders Law12
Citations are present and resolvable8
The labour pack carries its articles2
The new Tenders Law (Royal Decree M/76) is recorded and cited by tender date28
The Arbitration Law is in the library and the dispute clauses cite it10
Wordings found in public contracts the matchers had never seen11
Arabic presentation forms are folded back to letters on the way in11
A contract that is not a construction subcontract says so, and is not refused13
An employment contract is named as one, and is not scanned as a subcontract11
Local OCR stays on this computer6
House rules6

Published contracts, 102 checks

GroupChecks
Each trap now reads the meaning, not only the demo wording52
Tightened after reading the new findings on the four public contracts5
A restarting defects period with an aggregate cap is not "no end date"2
Terms incorporated by reference and not supplied8
Text is repaired before any pattern reads it8
Word files: hyphens, field codes and automatic numbering7
Short form instruments are contracts10
Contents pages and annexures are not clause number clashes3
A conditions file that quotes appendix rows is still the conditions1
A forfeiture in the plan reaches the risk register3
A pack missing the documents it incorporates is not complete3
The statute library

Every finding can cite the article it rests on.

A risk register that cannot point at the law is an opinion. 123 articles from 5 Saudi laws sit behind the findings, each one read from the official consolidated text at laws.boe.gov.sa, with the amendment marker checked and, where the article was amended, the wording in force taken from the amending decree. An article that has not been read that way is recorded as unverified with no text, and nothing cites it. Library last updated 2026-10-13.

LawInstrumentArticles
Civil Transactions LawRoyal Decree M/191 dated 29/11/1444H45
Government Tenders and Procurement LawRoyal Decree M/128 dated 13/11/1440H27
Government Tenders and Procurement Law (1448H)Royal Decree M/76 dated 27/02/1448H29
Labour LawRoyal Decree M/51 dated 23/8/1426H7
Arbitration LawRoyal Decree M/34 dated 24/5/1433H15

The Implementing Regulations of the Tenders Law are not published as text on the official site, so they are recorded as unverified and carry no articles here. The new Tenders Law was read from the Official Gazette and every citation from it says so on its face until it appears on the official site.

The record

Three conditions the engine is not allowed to break.

01

It never resolves a value it cannot read

A revised figure rendered over the one it replaced reads as 2412 months. It is either 24 or 12. Both are returned, neither is chosen, and the report says why.

02

No clause verdict on an unsigned document

Drafts, redlines and comparisons are detected. The plan still compiles so the work is not wasted, but nothing is presented as settled.

03

The Appendix governs

It is the negotiated document. Where it disagrees with the printed conditions, it wins, because that is what the parties actually agreed.

Verbatim

The tail of the run.

  ok    an excused absence raises nothing under 80(7)
Sick leave banding, Article 117
  ok    45 days sits in the three quarter band
  ok    and it is flagged so payroll stops paying full
Nothing wrong, nothing raised
  ok    a clean record returns OK
Report renders
  ok    the report names the source file
  ok    collisions are visible in the report
  ok    no undefined leaks into the output
  ok    the report is substantial
================================================================
146 passed, 0 failed
all green

  ok    the Arabic deadline is read, in the afternoon not the morning
  ok    the governing language warning reaches the verdict
  ok    an Arabic month name parses
  ok    a bare hour with no meridiem is flagged rather than assumed
  ok    an explicit pm is resolved
  ok    an Arabic afternoon marker is resolved
  ok    an English-only document is not given an Arabic warning
A tender we issued is refused, not analysed backwards
  ok    an outgoing enquiry is detected
  ok    and the module says it is the wrong tool rather than inverting every obligation
  ok    silence about direction is reported as unknown, not assumed
SilentBase link
============================================================
58 passed, 0 failed

  ok    it needs no API key
  ok    a port setting cannot point it at another machine
  ok    KONTRA_OCR=on still means the hosted provider
  ok    and it is off unless asked for
House rules
  ok    src/kb uses only fs, path, https and its own files
  ok    no node:sqlite, so Node 18 still runs it
  ok    data/law/README.md exists
  ok    and states its update date
  ok    with the local server down it reads nothing
  ok    and asks nothing of any address but 127.0.0.1
================================================================
221 passed, 0 failed
all green

  ok    a number used twice for different text in the same part still is
A conditions file that quotes appendix rows is still the conditions
  ok    two files that both carry appendix rows are labelled conditions and appendix
A forfeiture in the plan reaches the risk register
  ok    a notice that, if missed, means the time "shall not be extended" is raised as a time bar
  ok    and the headline counts it as critical
  ok    an insurance duty with a "waiver of subrogation" is not
A pack missing the documents it incorporates is not complete
  ok    completeness says the pack is incomplete
  ok    and names what is missing
  ok    a complete pack is not marked incomplete
================================================================
102 passed, 0 failed
all green

The confidentiality checks run on every build. The engine was developed against live subcontracts, and this is how we prove none of them travel with the code. Their own output is left out of the tail above, because it names what it checks for.

Put Kontra+ on your own computers.

The NDA is signed before anything is sent. We reply the same working day.