Five English documents of kinds the earlier sets did not hold, written and labelled on 1 November 2026, run once on the rules before round 5: 93 of their 96 protected values were masked (96.9%), on macOS and on Windows alike. Round 5 was made from this run, and on the current rules these documents mask all 96, as the first test shows.
1. The test
Test number. PT-261101-EN3, this test’s own code: the onboarding and the downloads name it.
What it measures. What a document the rules had not seen met: when it ran, no fix had been made from these documents.
Why it stays. Round 5 was made from this run, so these documents are now a set the fixes were made from. This first run stays the measure of what an unseen document met on the rules before round 5.
The rules. The rules before round 5: four rounds of fixes made in October 2026.
System
Protected values
Masked
Missed
Needless masks
Documents refused
macOS
96
93 (96.9%)
3
2 of 99 (2.0%)
0 of 5
Windows
96
93 (96.9%)
3
2 of 99 (2.0%)
0 of 5
A needless mask is counted among all the symbols that would leave; a document is refused when the outbound check finds something protected still in it.
2. Technical details
Code. Papinian Guard at commit 8708dbbab96981cf9fef1ac4bd032e5bb72f2a01 of the open repository legal-machines/singularity (7fcd14e2 on Windows and 7647de63a on macOS, the same guard in Legal Machines’ development tree).
The measuring tool.papinian_masking_measure, from code/tests/papinian_masking_measure.cpp. For each Word file it reads the text with Singularity’s own extractor, cuts it into the passages a request carries, protects the whole document as one operation with Papinian Guard’s local model and its rules, and runs the outbound check that stops a request if anything protected would still leave. It writes each passage as read and as it would leave, and nothing else.
The scorer.other/benchmarks/papinian-masking/measure.py writes the Word files with python-docx, runs the tool and scores what would leave. It finds each symbol by aligning a passage as read with the same passage as it would leave, so the mapping from symbols back to values is never written down.
The model. Papinian NER 1.0.0, the package Singularity downloads (papinian-ner-1.0.0.zip, SHA-256 0f70a2a3eb1abac455e6a1cdba6e686e27d138a55eec05f0a13edcbded8ef91d); each of its nine files matched the hash Singularity pins for it. It is the open GLiNER2 privacy model fastino/gliner2-privacy-filter-PII-multi, exported to ONNX without further training, and runs on the processor through ONNX Runtime 1.23.2. A detection is used at a confidence of 0.5 or more.
The setting. Standard protection.
What is scored. Each document’s labels list, before its first run, the writings that must be masked: the names of people and organisations, identifiers, amounts and dates, as Papinian’s documented rule defines them. A protected value is each place such a writing stands. It is masked when every letter and figure of it is under symbols, and missed when any is left visible. A symbol over no labelled writing is a needless mask. Writings the rule leaves open, such as a public court or the law a contract chooses, are listed apart and not scored.
The runs. The figures are from the run recorded on 1 November 2026 at 06:04 MSK on macOS and 05:39–05:43 MSK on Windows. The tables come from the same code run again the same day, at 10:47 MSK on macOS and 10:56–10:57 MSK on Windows, by measure.py at ab9527ac4, which also lists each masked value with the symbol that took its place. Both runs gave the same counts, misses and needless masks on each system.
To run it again. With the open repository at the commit above, the tool built and the model package unpacked, run python3 other/benchmarks/papinian-masking/measure.py --tool TOOL --model MODEL --set SET --out SET.json for each set SET of holdout4, TOOL being the built tool and MODEL the model’s folder. The download’s method/measure.py is the scorer at ab9527ac4.
3. Machines
Both systems ran every document of the test, one set after another, with no other heavy work on the computer. A wall time is the whole measure.py run: writing the Word files, starting the tool and loading the model included.
macOS
Windows
Computer
MacBook Pro (Mac17,9)
Desktop PC
Processor
Apple M5 Pro, 15 cores (5 Super and 10 Performance)
Written before any run. Five documents of kinds the earlier sets did not hold, written and labelled on 1 November 2026 before any run on them (commit b2bc2ce32 of the development tree).
Parties and law. US companies under US law.
Fictional. Every company, person, address and number is invented, and mail domains end in .example. Telephone numbers are in 555-01xx, the range the United States reserves for fiction. No document names a real person or company.
Counted. A protected value is each place a labelled writing stands; open writings are the labels’ list of what the rule leaves open.
Document
Kind
Protected values
Open writings
Wrenfield offer letter
Offer letter
15
2
Corvane demand letter
Demand letter
26
1
Larchmere term sheet email
Term sheet sent by email
14
6
Larkspur Commons office lease
Office lease
19
5
Pellworth settlement agreement
Settlement agreement and mutual release
22
1
Download this test, 230 KB, SHA-256 23a48df16c41889534ac728d3118ca94030859e6a0172bd15900d9cc34919c63: the Word files as the test protected them, their labels, both systems’ recorded runs and table runs of this test, each machine’s description and the scripts that wrote and scored the documents. Every test at once is on the index.
5. Masked
93 of the 96 protected values were masked, on macOS and on Windows alike. Each document’s table gives every value masked in it: Places counts where the value stands, and Masked as gives the symbol that would leave the computer in its place, with the words it replaced where they reach beyond the value. A row marked left open is one of the 4 places where a symbol hid a writing the rule leaves open: masking it or not is right, and it is not scored.
Wrenfield offer letter
Value
Places
Masked as
HALVANE ROBOTICS
1
[[Org1]], replacing HALVANE ROBOTICS, INC.
November 1, 2026
1
[[Date1]]
Priyanka Oduya-Lindqvist
1
[[Person1]]
Oduya-Lindqvist
1
[[Person1.last]]
1187 Wexford Lane, Apt. 4C
1
[[Place1]]
Halvane Robotics
1
[[Org1]], replacing Halvane Robotics, Inc.
Tobiah Wrenfield-Achebe
2
[[Person2]]
January 11, 2027
1
[[Date2]]
$212,000
1
[[Amount1]]
$18,000
1
[[Amount2]]
Marisol Quenneville
1
[[Person3]]
mquenneville@halvane.example
1
[[Email1]]
(412) 555-0187
1
[[Phone1]]
November 9, 2026
1
[[Date3]]
Pittsburgh, Pennsylvania 15217 (left open)
1
[[Place2]], replacing Pittsburgh
Corvane demand letter
Value
Places
Masked as
ASHBY QUELL & TAMURA LLP
1
[[Org1]]
November 1, 2026
1
[[Date1]]
Corvane Fulfillment Group
2
[[Org2]], replacing Corvane Fulfillment Group, Inc.
Delphine Marchetti-Owusu
1
[[Person1]]
Marchetti-Owusu
1
[[Person1.last]]
88 Harbor Industrial Way
1
[[Place1]], replacing 88 Harbor Industrial Way / Tacoma, Washington 98421
[[Place2]], replacing 1600 Glenarm Place, Suite 900, Denver, Colorado 80202
legal@halvane.example
2
[[Email1]]
Severin Achterkamp-Oyelaran
1
[[Person1]]
leasing@larkspur.example
1
[[Email2]]
HALVANE ROBOTICS
1
[[Org1]], replacing HALVANE ROBOTICS, INC.
6,240 (left open)
1
[[Amount1]], replacing 6,240 rentable square feet
Pellworth settlement agreement
Value
Places
Masked as
November 1, 2026
1
[[Date1]]
Halvane Robotics
2
[[Org1]], replacing Halvane Robotics, Inc.
Halvane
3
[[Org1.short]]
Pellworth Automation GmbH
2
[[Org2]]
Pellworth
5
[[Org4]]
1:26-cv-04417
1
[[Id1]]
$2,350,000
1
[[Amount1]]
Marguerite Osei-Lindgren
1
[[Person1]]
Brannock Hale LLP
1
[[Org3]]
PELLWORTH AUTOMATION GMBH
1
[[Org2]]
Konstantin Ravensberg
1
[[Person2]]
legal@pellworth.example
1
[[Email1]]
HALVANE ROBOTICS
1
[[Org1]], replacing HALVANE ROBOTICS, INC.
legal@halvane.example
1
[[Email2]]
6. Missed
3 of the 96 protected values would have left the computer with a letter or a figure visible. Each passage quotes the words around the value as the scorer did, the value between << and >>; a slash marks a new paragraph.
Corvane demand letter
Protected value
In the passage
Corvane
…and Corvane Fulfillment Group, Inc. ("<<Corvane>>"). Corvane has not paid invoices INV-88213,…
Corvane
…Fulfillment Group, Inc. ("Corvane"). <<Corvane>> has not paid invoices INV-88213, INV-88257…
Corvane
…September 30, 2026. / Halvane demands that <<Corvane>> pay the full amount within ten (10)…
Round 5 fixed all three: a short name a definition gives right after a party’s full name is that party’s name wherever it is written.
7. Masked needlessly
2 of the 99 symbols (2.0%) hid words that needed no protection. Each passage quotes the words around them as the scorer did.
Wrenfield offer letter
Masked words
Masked as
In the passage
People Operations
[[Org2]]
…this letter to Marisol Quenneville in <<People Operations>> at mquenneville@halvane.example or (412)…
Larkspur Commons office lease
Masked words
Masked as
In the passage
Asset Manager
[[Org5]]
…900, Denver, Colorado 80202, Attention: <<Asset Manager>>. Notices to Tenant go to…
Round 5 fixed both: a department named by its function words alone is a place inside a party, and a manager’s title, by what the manager manages, names nobody.