<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://invarians.org/index.php?action=history&amp;feed=atom&amp;title=The_Principia_Machina%2FTPC-PY%2Fgen_identity_corpus.py</id>
	<title>The Principia Machina/TPC-PY/gen identity corpus.py - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://invarians.org/index.php?action=history&amp;feed=atom&amp;title=The_Principia_Machina%2FTPC-PY%2Fgen_identity_corpus.py"/>
	<link rel="alternate" type="text/html" href="https://invarians.org/index.php?title=The_Principia_Machina/TPC-PY/gen_identity_corpus.py&amp;action=history"/>
	<updated>2026-10-21T12:21:02Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.46.2</generator>
	<entry>
		<id>https://invarians.org/index.php?title=The_Principia_Machina/TPC-PY/gen_identity_corpus.py&amp;diff=4835&amp;oldid=prev</id>
		<title>BFP Rauch: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://invarians.org/index.php?title=The_Principia_Machina/TPC-PY/gen_identity_corpus.py&amp;diff=4835&amp;oldid=prev"/>
		<updated>2026-09-30T02:11:03Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw-interface=&quot;&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 02:11, 30 September 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key pma_cutover_20261020t051351z-soft_:diff:1.41:old-4834:rev-4835 --&gt;
&lt;/table&gt;</summary>
		<author><name>BFP Rauch</name></author>
	</entry>
	<entry>
		<id>https://invarians.org/index.php?title=The_Principia_Machina/TPC-PY/gen_identity_corpus.py&amp;diff=4834&amp;oldid=prev</id>
		<title>BFP Rauch: TPC-PY source gen_identity_corpus.py (0.1.0), SHA-256 aa6265343d9e63d7; conformed TPS 0.4.0; PROPOSED, not declared (TPC-PY 0.2.0)</title>
		<link rel="alternate" type="text/html" href="https://invarians.org/index.php?title=The_Principia_Machina/TPC-PY/gen_identity_corpus.py&amp;diff=4834&amp;oldid=prev"/>
		<updated>2026-09-30T02:10:58Z</updated>

		<summary type="html">&lt;p&gt;TPC-PY source gen_identity_corpus.py (0.1.0), SHA-256 aa6265343d9e63d7; conformed TPS 0.4.0; PROPOSED, not declared (TPC-PY 0.2.0)&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw-interface=&quot;&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 02:10, 30 September 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l160&quot;&gt;Line 160:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 160:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;json.dump({&amp;quot;corpus&amp;quot;: &amp;quot;identity&amp;quot;, &amp;quot;version&amp;quot;: &amp;quot;0.1.0&amp;quot;, &amp;quot;cases&amp;quot;: cases},&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;json.dump({&amp;quot;corpus&amp;quot;: &amp;quot;identity&amp;quot;, &amp;quot;version&amp;quot;: &amp;quot;0.1.0&amp;quot;, &amp;quot;cases&amp;quot;: cases},&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;           open(os.path.join(here, &quot;identity_corpus.json&quot;), &quot;w&quot;), indent=1,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;           open(os.path.join(here, &quot;identity_corpus.json&quot;), &quot;w&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&quot;, encoding=&quot;utf-8&quot;, newline=&quot;\n&lt;/ins&gt;&quot;), indent=1,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;           sort_keys=True, ensure_ascii=False)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;           sort_keys=True, ensure_ascii=False)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;print(&amp;quot;cases&amp;quot;, len(cases))&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;print(&amp;quot;cases&amp;quot;, len(cases))&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key pma_cutover_20261020t051351z-soft_:diff:1.41:old-4159:rev-4834:php=table --&gt;
&lt;/table&gt;</summary>
		<author><name>BFP Rauch</name></author>
	</entry>
	<entry>
		<id>https://invarians.org/index.php?title=The_Principia_Machina/TPC-PY/gen_identity_corpus.py&amp;diff=4159&amp;oldid=prev</id>
		<title>BFP Rauch: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://invarians.org/index.php?title=The_Principia_Machina/TPC-PY/gen_identity_corpus.py&amp;diff=4159&amp;oldid=prev"/>
		<updated>2026-09-28T04:32:53Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw-interface=&quot;&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 04:32, 28 September 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;!-- diff cache key pma_cutover_20261020t051351z-soft_:diff:1.41:old-4158:rev-4159 --&gt;
&lt;/table&gt;</summary>
		<author><name>BFP Rauch</name></author>
	</entry>
	<entry>
		<id>https://invarians.org/index.php?title=The_Principia_Machina/TPC-PY/gen_identity_corpus.py&amp;diff=4158&amp;oldid=prev</id>
		<title>BFP Rauch: TPC-PY source gen_identity_corpus.py (0.1.0), SHA-256 ee5ecd5f50472681; conformed TPS 0.3.0; PROPOSED, not declared (CO-8)</title>
		<link rel="alternate" type="text/html" href="https://invarians.org/index.php?title=The_Principia_Machina/TPC-PY/gen_identity_corpus.py&amp;diff=4158&amp;oldid=prev"/>
		<updated>2026-09-27T15:43:18Z</updated>

		<summary type="html">&lt;p&gt;TPC-PY source gen_identity_corpus.py (0.1.0), SHA-256 ee5ecd5f50472681; conformed TPS 0.3.0; PROPOSED, not declared (CO-8)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;quot;&amp;quot;&amp;quot;gen_identity_corpus 0.1.0: builds identity_corpus.json for tpc_identity&lt;br /&gt;
0.1.0. Expectations are computed by tpc_identity.py and pinned; hand_&lt;br /&gt;
checked cases were worked by hand (D01&amp;#039;s digest is also recomputed here&lt;br /&gt;
with hashlib over the D97 netstring, independently of the module).&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
import hashlib&lt;br /&gt;
import json&lt;br /&gt;
import os&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
here = os.path.dirname(os.path.abspath(__file__))&lt;br /&gt;
sys.path.insert(0, here)&lt;br /&gt;
from tpc_identity import run_case  # noqa: E402&lt;br /&gt;
&lt;br /&gt;
cases = []&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def add(name, fn, args, hand=False):&lt;br /&gt;
    cases.append({&amp;quot;name&amp;quot;: name, &amp;quot;fn&amp;quot;: fn, &amp;quot;args&amp;quot;: args, &amp;quot;hand_checked&amp;quot;: hand,&lt;br /&gt;
                  &amp;quot;expected&amp;quot;: run_case(fn, args)})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ---- canonical_tools -------------------------------------------------------&lt;br /&gt;
TOOLS = &amp;#039;[{&amp;quot;name&amp;quot;: &amp;quot;read_page&amp;quot;, &amp;quot;description&amp;quot;: &amp;quot;Read a wiki page&amp;quot;, &amp;quot;parameters&amp;quot;: {&amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;, &amp;quot;properties&amp;quot;: {&amp;quot;title&amp;quot;: {&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;}}, &amp;quot;required&amp;quot;: [&amp;quot;title&amp;quot;]}}, {&amp;quot;name&amp;quot;: &amp;quot;push&amp;quot;, &amp;quot;parameters&amp;quot;: {&amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;, &amp;quot;properties&amp;quot;: {&amp;quot;records&amp;quot;: {&amp;quot;type&amp;quot;: &amp;quot;array&amp;quot;, &amp;quot;items&amp;quot;: {&amp;quot;type&amp;quot;: &amp;quot;object&amp;quot;}}}}}]&amp;#039;&lt;br /&gt;
add(&amp;quot;T01 keys sorted, whitespace removed&amp;quot;, &amp;quot;tools&amp;quot;, {&amp;quot;json&amp;quot;: &amp;#039;{ &amp;quot;b&amp;quot; : 1 , &amp;quot;a&amp;quot; : 2 }&amp;#039;}, True)&lt;br /&gt;
add(&amp;quot;T02 nested objects and arrays&amp;quot;, &amp;quot;tools&amp;quot;, {&amp;quot;json&amp;quot;: &amp;#039;{&amp;quot;z&amp;quot;: {&amp;quot;y&amp;quot;: [3, {&amp;quot;x&amp;quot;: null}]}, &amp;quot;a&amp;quot;: []}&amp;#039;}, True)&lt;br /&gt;
add(&amp;quot;T03 NFC: a decomposed string equals its composed form&amp;quot;, &amp;quot;tools&amp;quot;, {&amp;quot;json&amp;quot;: &amp;#039;[&amp;quot;e\\u0301&amp;quot;, &amp;quot;\\u00e9&amp;quot;]&amp;#039;}, True)&lt;br /&gt;
add(&amp;quot;T04 decimals: 1.0, 1, 1e0, 1.50, 0.001e-2, -0, -0.0, 12.340E+3&amp;quot;, &amp;quot;tools&amp;quot;, {&amp;quot;json&amp;quot;: &amp;#039;[1.0, 1, 1e0, 1.50, 0.001e-2, -0, -0.0, 12.340E+3]&amp;#039;}, True)&lt;br /&gt;
add(&amp;quot;T05 a realistic tool definition list&amp;quot;, &amp;quot;tools&amp;quot;, {&amp;quot;json&amp;quot;: TOOLS}, False)&lt;br /&gt;
add(&amp;quot;T06 the same list with other whitespace and key order canonicalizes alike&amp;quot;, &amp;quot;tools&amp;quot;, {&amp;quot;json&amp;quot;: &amp;#039;[{&amp;quot;parameters&amp;quot;:{&amp;quot;required&amp;quot;:[&amp;quot;title&amp;quot;],&amp;quot;properties&amp;quot;:{&amp;quot;title&amp;quot;:{&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;}},&amp;quot;type&amp;quot;:&amp;quot;object&amp;quot;},&amp;quot;description&amp;quot;:&amp;quot;Read a wiki page&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;read_page&amp;quot;},{&amp;quot;parameters&amp;quot;:{&amp;quot;type&amp;quot;:&amp;quot;object&amp;quot;,&amp;quot;properties&amp;quot;:{&amp;quot;records&amp;quot;:{&amp;quot;items&amp;quot;:{&amp;quot;type&amp;quot;:&amp;quot;object&amp;quot;},&amp;quot;type&amp;quot;:&amp;quot;array&amp;quot;}}},&amp;quot;name&amp;quot;:&amp;quot;push&amp;quot;}]&amp;#039;}, False)&lt;br /&gt;
add(&amp;quot;T07 a trailing comma is refused&amp;quot;, &amp;quot;tools&amp;quot;, {&amp;quot;json&amp;quot;: &amp;#039;[1, 2,]&amp;#039;}, True)&lt;br /&gt;
add(&amp;quot;T08 a duplicate key is refused&amp;quot;, &amp;quot;tools&amp;quot;, {&amp;quot;json&amp;quot;: &amp;#039;{&amp;quot;a&amp;quot;: 1, &amp;quot;a&amp;quot;: 2}&amp;#039;}, True)&lt;br /&gt;
add(&amp;quot;T09 a duplicate key after NFC is refused&amp;quot;, &amp;quot;tools&amp;quot;, {&amp;quot;json&amp;quot;: &amp;#039;{&amp;quot;\\u00e9&amp;quot;: 1, &amp;quot;e\\u0301&amp;quot;: 2}&amp;#039;}, True)&lt;br /&gt;
add(&amp;quot;T10 NaN is refused&amp;quot;, &amp;quot;tools&amp;quot;, {&amp;quot;json&amp;quot;: &amp;#039;[NaN]&amp;#039;}, True)&lt;br /&gt;
add(&amp;quot;T11 a lone surrogate escape is refused&amp;quot;, &amp;quot;tools&amp;quot;, {&amp;quot;json&amp;quot;: &amp;#039;&amp;quot;\\ud800&amp;quot;&amp;#039;}, True)&lt;br /&gt;
add(&amp;quot;T12 a surrogate pair escape gives the astral character raw&amp;quot;, &amp;quot;tools&amp;quot;, {&amp;quot;json&amp;quot;: &amp;#039;&amp;quot;\\ud83d\\ude00&amp;quot;&amp;#039;}, True)&lt;br /&gt;
add(&amp;quot;T13 a raw control character in a string is refused&amp;quot;, &amp;quot;tools&amp;quot;, {&amp;quot;json&amp;quot;: &amp;#039;&amp;quot;a\tb&amp;quot;&amp;#039;}, True)&lt;br /&gt;
add(&amp;quot;T14 escapes: \\b \\f \\n \\r \\t \\/ \\\&amp;quot; \\\\ \\u0001 \\u007f&amp;quot;, &amp;quot;tools&amp;quot;, {&amp;quot;json&amp;quot;: &amp;#039;&amp;quot;\\b\\f\\n\\r\\t\\/\\&amp;quot;\\\\\\u0001\\u007f&amp;quot;&amp;#039;}, True)&lt;br /&gt;
add(&amp;quot;T15 an exponent of five digits is refused&amp;quot;, &amp;quot;tools&amp;quot;, {&amp;quot;json&amp;quot;: &amp;#039;1e12345&amp;#039;}, True)&lt;br /&gt;
add(&amp;quot;T16 an exponent of four digits is kept&amp;quot;, &amp;quot;tools&amp;quot;, {&amp;quot;json&amp;quot;: &amp;#039;1e1234&amp;#039;}, True)&lt;br /&gt;
add(&amp;quot;T17 depth 65 is refused&amp;quot;, &amp;quot;tools&amp;quot;, {&amp;quot;json&amp;quot;: &amp;quot;[&amp;quot; * 65 + &amp;quot;1&amp;quot; + &amp;quot;]&amp;quot; * 65}, True)&lt;br /&gt;
add(&amp;quot;T18 depth 64 is kept&amp;quot;, &amp;quot;tools&amp;quot;, {&amp;quot;json&amp;quot;: &amp;quot;[&amp;quot; * 64 + &amp;quot;1&amp;quot; + &amp;quot;]&amp;quot; * 64}, True)&lt;br /&gt;
add(&amp;quot;T19 the four whitespace characters around tokens&amp;quot;, &amp;quot;tools&amp;quot;, {&amp;quot;json&amp;quot;: &amp;#039; \t\r\n{ \t&amp;quot;a&amp;quot;\r\n:\t[ 1 ,\n2 ] }\n&amp;#039;}, True)&lt;br /&gt;
add(&amp;quot;T20 empty input is refused&amp;quot;, &amp;quot;tools&amp;quot;, {&amp;quot;json&amp;quot;: &amp;#039;&amp;#039;}, True)&lt;br /&gt;
add(&amp;quot;T21 trailing text is refused&amp;quot;, &amp;quot;tools&amp;quot;, {&amp;quot;json&amp;quot;: &amp;#039;[1] x&amp;#039;}, True)&lt;br /&gt;
add(&amp;quot;T22 a leading zero is refused&amp;quot;, &amp;quot;tools&amp;quot;, {&amp;quot;json&amp;quot;: &amp;#039;01&amp;#039;}, True)&lt;br /&gt;
add(&amp;quot;T23 top-level string, number and literals&amp;quot;, &amp;quot;tools&amp;quot;, {&amp;quot;json&amp;quot;: &amp;#039;[&amp;quot;x&amp;quot;, -0.5e1, true, false, null]&amp;#039;}, True)&lt;br /&gt;
add(&amp;quot;T24 key order by code point: Z, a, e-acute, CJK, and a key with an escape&amp;quot;, &amp;quot;tools&amp;quot;, {&amp;quot;json&amp;quot;: &amp;#039;{&amp;quot;\\u4e2d&amp;quot;: 1, &amp;quot;\\u00e9&amp;quot;: 2, &amp;quot;a&amp;quot;: 3, &amp;quot;Z&amp;quot;: 4, &amp;quot;a\\nb&amp;quot;: 5, &amp;quot;&amp;quot;: 6}&amp;#039;}, True)&lt;br /&gt;
add(&amp;quot;T25 not a string is refused&amp;quot;, &amp;quot;tools&amp;quot;, {&amp;quot;json&amp;quot;: 12}, True)&lt;br /&gt;
add(&amp;quot;T26 a number with a fraction but no digits after the point is refused&amp;quot;, &amp;quot;tools&amp;quot;, {&amp;quot;json&amp;quot;: &amp;#039;1.&amp;#039;}, True)&lt;br /&gt;
add(&amp;quot;T27 an unescaped DEL and non-ASCII raw text are kept&amp;quot;, &amp;quot;tools&amp;quot;, {&amp;quot;json&amp;quot;: &amp;#039;&amp;quot;\u007f\u6a21\u578b&amp;quot;&amp;#039;}, True)&lt;br /&gt;
add(&amp;quot;T28 a large integer stays exact (no float rounding)&amp;quot;, &amp;quot;tools&amp;quot;, {&amp;quot;json&amp;quot;: &amp;#039;[123456789012345678901234567890, 0.10000000000000000555]&amp;#039;}, True)&lt;br /&gt;
&lt;br /&gt;
# ---- prompt_digest ---------------------------------------------------------&lt;br /&gt;
SALT = &amp;quot;0123456789abcdef0123456789abcdef&amp;quot;&lt;br /&gt;
FAM = &amp;quot;6:CLOSED16:Anthropic/Claude&amp;quot;&lt;br /&gt;
TMPL = &amp;quot;You are a certified agent of The Principia Machina.\nWork the register.&amp;quot;&lt;br /&gt;
args = {&amp;quot;family&amp;quot;: FAM, &amp;quot;salt&amp;quot;: SALT, &amp;quot;template&amp;quot;: TMPL, &amp;quot;tools&amp;quot;: TOOLS}&lt;br /&gt;
add(&amp;quot;D01 a digest; recomputed independently below&amp;quot;, &amp;quot;digest&amp;quot;, args, True)&lt;br /&gt;
canon_tools = run_case(&amp;quot;tools&amp;quot;, {&amp;quot;json&amp;quot;: TOOLS})&lt;br /&gt;
fields = [&amp;quot;TPM-PROMPT&amp;quot;, &amp;quot;1&amp;quot;, FAM, SALT, TMPL, canon_tools]&lt;br /&gt;
enc = b&amp;quot;&amp;quot;.join(b&amp;quot;%d:%s&amp;quot; % (len(f.encode(&amp;quot;utf-8&amp;quot;)), f.encode(&amp;quot;utf-8&amp;quot;)) for f in fields)&lt;br /&gt;
assert hashlib.sha256(enc).hexdigest() == cases[-1][&amp;quot;expected&amp;quot;]&lt;br /&gt;
add(&amp;quot;D02 the template in NFD gives the same digest as in NFC&amp;quot;, &amp;quot;digest&amp;quot;, {&amp;quot;family&amp;quot;: FAM, &amp;quot;salt&amp;quot;: SALT, &amp;quot;template&amp;quot;: &amp;quot;Re\u0301sume\u0301 the work.&amp;quot;, &amp;quot;tools&amp;quot;: &amp;quot;[]&amp;quot;}, True)&lt;br /&gt;
add(&amp;quot;D02b the same template in NFC&amp;quot;, &amp;quot;digest&amp;quot;, {&amp;quot;family&amp;quot;: FAM, &amp;quot;salt&amp;quot;: SALT, &amp;quot;template&amp;quot;: &amp;quot;R\u00e9sum\u00e9 the work.&amp;quot;, &amp;quot;tools&amp;quot;: &amp;quot;[]&amp;quot;}, True)&lt;br /&gt;
add(&amp;quot;D03 tool key order and whitespace do not change the digest&amp;quot;, &amp;quot;digest&amp;quot;, {&amp;quot;family&amp;quot;: FAM, &amp;quot;salt&amp;quot;: SALT, &amp;quot;template&amp;quot;: TMPL, &amp;quot;tools&amp;quot;: &amp;#039;[{&amp;quot;parameters&amp;quot;:{&amp;quot;required&amp;quot;:[&amp;quot;title&amp;quot;],&amp;quot;properties&amp;quot;:{&amp;quot;title&amp;quot;:{&amp;quot;type&amp;quot;:&amp;quot;string&amp;quot;}},&amp;quot;type&amp;quot;:&amp;quot;object&amp;quot;},&amp;quot;description&amp;quot;:&amp;quot;Read a wiki page&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;read_page&amp;quot;},{&amp;quot;parameters&amp;quot;:{&amp;quot;type&amp;quot;:&amp;quot;object&amp;quot;,&amp;quot;properties&amp;quot;:{&amp;quot;records&amp;quot;:{&amp;quot;items&amp;quot;:{&amp;quot;type&amp;quot;:&amp;quot;object&amp;quot;},&amp;quot;type&amp;quot;:&amp;quot;array&amp;quot;}}},&amp;quot;name&amp;quot;:&amp;quot;push&amp;quot;}]&amp;#039;}, True)&lt;br /&gt;
add(&amp;quot;D04 one changed character in the template changes the digest&amp;quot;, &amp;quot;digest&amp;quot;, {&amp;quot;family&amp;quot;: FAM, &amp;quot;salt&amp;quot;: SALT, &amp;quot;template&amp;quot;: TMPL + &amp;quot;.&amp;quot;, &amp;quot;tools&amp;quot;: TOOLS}, True)&lt;br /&gt;
add(&amp;quot;D05 one changed character in the tools changes the digest&amp;quot;, &amp;quot;digest&amp;quot;, {&amp;quot;family&amp;quot;: FAM, &amp;quot;salt&amp;quot;: SALT, &amp;quot;template&amp;quot;: TMPL, &amp;quot;tools&amp;quot;: TOOLS.replace(&amp;quot;push&amp;quot;, &amp;quot;Push&amp;quot;)}, True)&lt;br /&gt;
add(&amp;quot;D06 a salt in upper case is refused&amp;quot;, &amp;quot;digest&amp;quot;, {&amp;quot;family&amp;quot;: FAM, &amp;quot;salt&amp;quot;: SALT.upper(), &amp;quot;template&amp;quot;: TMPL, &amp;quot;tools&amp;quot;: TOOLS}, True)&lt;br /&gt;
add(&amp;quot;D07 a salt of 31 characters is refused&amp;quot;, &amp;quot;digest&amp;quot;, {&amp;quot;family&amp;quot;: FAM, &amp;quot;salt&amp;quot;: SALT[:31], &amp;quot;template&amp;quot;: TMPL, &amp;quot;tools&amp;quot;: TOOLS}, True)&lt;br /&gt;
add(&amp;quot;D08 a salt of 33 characters is refused&amp;quot;, &amp;quot;digest&amp;quot;, {&amp;quot;family&amp;quot;: FAM, &amp;quot;salt&amp;quot;: SALT + &amp;quot;0&amp;quot;, &amp;quot;template&amp;quot;: TMPL, &amp;quot;tools&amp;quot;: TOOLS}, True)&lt;br /&gt;
add(&amp;quot;D09 a salt with a non-hex character is refused&amp;quot;, &amp;quot;digest&amp;quot;, {&amp;quot;family&amp;quot;: FAM, &amp;quot;salt&amp;quot;: SALT[:-1] + &amp;quot;g&amp;quot;, &amp;quot;template&amp;quot;: TMPL, &amp;quot;tools&amp;quot;: TOOLS}, True)&lt;br /&gt;
add(&amp;quot;D10 a salt that is not a string is refused&amp;quot;, &amp;quot;digest&amp;quot;, {&amp;quot;family&amp;quot;: FAM, &amp;quot;salt&amp;quot;: 123, &amp;quot;template&amp;quot;: TMPL, &amp;quot;tools&amp;quot;: TOOLS}, True)&lt;br /&gt;
add(&amp;quot;D11 an empty family is refused&amp;quot;, &amp;quot;digest&amp;quot;, {&amp;quot;family&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;salt&amp;quot;: SALT, &amp;quot;template&amp;quot;: TMPL, &amp;quot;tools&amp;quot;: TOOLS}, True)&lt;br /&gt;
add(&amp;quot;D12 invalid tools JSON is refused&amp;quot;, &amp;quot;digest&amp;quot;, {&amp;quot;family&amp;quot;: FAM, &amp;quot;salt&amp;quot;: SALT, &amp;quot;template&amp;quot;: TMPL, &amp;quot;tools&amp;quot;: &amp;quot;[1,&amp;quot;}, True)&lt;br /&gt;
add(&amp;quot;D13 an empty template is a digest&amp;quot;, &amp;quot;digest&amp;quot;, {&amp;quot;family&amp;quot;: FAM, &amp;quot;salt&amp;quot;: SALT, &amp;quot;template&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;tools&amp;quot;: &amp;quot;[]&amp;quot;}, True)&lt;br /&gt;
add(&amp;quot;D14 a whitespace difference in the template changes the digest (no collapsing)&amp;quot;, &amp;quot;digest&amp;quot;, {&amp;quot;family&amp;quot;: FAM, &amp;quot;salt&amp;quot;: SALT, &amp;quot;template&amp;quot;: TMPL.replace(&amp;quot;\n&amp;quot;, &amp;quot;  \n&amp;quot;), &amp;quot;tools&amp;quot;: TOOLS}, True)&lt;br /&gt;
add(&amp;quot;D15 a template that is not a string is refused&amp;quot;, &amp;quot;digest&amp;quot;, {&amp;quot;family&amp;quot;: FAM, &amp;quot;salt&amp;quot;: SALT, &amp;quot;template&amp;quot;: None, &amp;quot;tools&amp;quot;: TOOLS}, True)&lt;br /&gt;
add(&amp;quot;D16 another salt gives another digest&amp;quot;, &amp;quot;digest&amp;quot;, {&amp;quot;family&amp;quot;: FAM, &amp;quot;salt&amp;quot;: &amp;quot;f&amp;quot; * 32, &amp;quot;template&amp;quot;: TMPL, &amp;quot;tools&amp;quot;: TOOLS}, True)&lt;br /&gt;
add(&amp;quot;D17 a CJK family and template&amp;quot;, &amp;quot;digest&amp;quot;, {&amp;quot;family&amp;quot;: &amp;quot;6:CLOSED12:\u6a21\u578b/\u4e59&amp;quot;, &amp;quot;salt&amp;quot;: SALT, &amp;quot;template&amp;quot;: &amp;quot;\u4f60\u597d&amp;quot;, &amp;quot;tools&amp;quot;: &amp;quot;{}&amp;quot;}, True)&lt;br /&gt;
add(&amp;quot;D18 another family gives another digest&amp;quot;, &amp;quot;digest&amp;quot;, {&amp;quot;family&amp;quot;: &amp;quot;6:CLOSED13:Google/Gemini&amp;quot;, &amp;quot;salt&amp;quot;: SALT, &amp;quot;template&amp;quot;: TMPL, &amp;quot;tools&amp;quot;: TOOLS}, True)&lt;br /&gt;
&lt;br /&gt;
# ---- family_of -------------------------------------------------------------&lt;br /&gt;
def row(name, family, open_weights=False, server=None, quant=None):&lt;br /&gt;
    return {&amp;quot;name&amp;quot;: name, &amp;quot;family&amp;quot;: family, &amp;quot;open&amp;quot;: open_weights, &amp;quot;server&amp;quot;: server, &amp;quot;quantization&amp;quot;: quant}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MAP = [&lt;br /&gt;
    row(&amp;quot;claude-fable-5-1-20260601&amp;quot;, &amp;quot;Anthropic/Claude&amp;quot;),&lt;br /&gt;
    row(&amp;quot;claude-fable-5-1&amp;quot;, &amp;quot;Anthropic/Claude&amp;quot;),&lt;br /&gt;
    row(&amp;quot;anthropic.claude-fable-5-1-v1:0&amp;quot;, &amp;quot;Anthropic/Claude&amp;quot;),&lt;br /&gt;
    row(&amp;quot;claude-opus-4-20250514&amp;quot;, &amp;quot;Anthropic/Claude&amp;quot;),&lt;br /&gt;
    row(&amp;quot;gemini-3-pro&amp;quot;, &amp;quot;Google/Gemini&amp;quot;),&lt;br /&gt;
    row(&amp;quot;together/llama-4-70b-fp8&amp;quot;, &amp;quot;Meta/Llama-4&amp;quot;, True, &amp;quot;together&amp;quot;, &amp;quot;fp8&amp;quot;),&lt;br /&gt;
    row(&amp;quot;fireworks/llama-4-70b-bf16&amp;quot;, &amp;quot;Meta/Llama-4&amp;quot;, True, &amp;quot;fireworks&amp;quot;, &amp;quot;bf16&amp;quot;),&lt;br /&gt;
    row(&amp;quot;mod\u00e8le-\u00e9&amp;quot;, &amp;quot;Maison/Mod\u00e8le&amp;quot;),&lt;br /&gt;
]&lt;br /&gt;
add(&amp;quot;F01 a dated snapshot&amp;quot;, &amp;quot;family&amp;quot;, {&amp;quot;model&amp;quot;: &amp;quot;claude-fable-5-1-20260601&amp;quot;, &amp;quot;map&amp;quot;: MAP}, True)&lt;br /&gt;
add(&amp;quot;F02 a dateless alias&amp;quot;, &amp;quot;family&amp;quot;, {&amp;quot;model&amp;quot;: &amp;quot;claude-fable-5-1&amp;quot;, &amp;quot;map&amp;quot;: MAP}, True)&lt;br /&gt;
add(&amp;quot;F03 a server-prefixed spelling of a closed model stays in the family (D156.1 (c))&amp;quot;, &amp;quot;family&amp;quot;, {&amp;quot;model&amp;quot;: &amp;quot;anthropic.claude-fable-5-1-v1:0&amp;quot;, &amp;quot;map&amp;quot;: MAP}, True)&lt;br /&gt;
add(&amp;quot;F04 open weights with a pinned server and quantization: the key carries the triple&amp;quot;, &amp;quot;family&amp;quot;, {&amp;quot;model&amp;quot;: &amp;quot;together/llama-4-70b-fp8&amp;quot;, &amp;quot;map&amp;quot;: MAP}, True)&lt;br /&gt;
add(&amp;quot;F05 the same lineage through another server is another key (D156.1 (b))&amp;quot;, &amp;quot;family&amp;quot;, {&amp;quot;model&amp;quot;: &amp;quot;fireworks/llama-4-70b-bf16&amp;quot;, &amp;quot;map&amp;quot;: MAP}, True)&lt;br /&gt;
add(&amp;quot;F06 open weights without a pinned server: no row, UNMAPPED&amp;quot;, &amp;quot;family&amp;quot;, {&amp;quot;model&amp;quot;: &amp;quot;llama-4-70b&amp;quot;, &amp;quot;map&amp;quot;: MAP}, True)&lt;br /&gt;
add(&amp;quot;F07 an unknown model is UNMAPPED&amp;quot;, &amp;quot;family&amp;quot;, {&amp;quot;model&amp;quot;: &amp;quot;gpt-9&amp;quot;, &amp;quot;map&amp;quot;: MAP}, True)&lt;br /&gt;
add(&amp;quot;F08 a case difference is UNMAPPED (exact match)&amp;quot;, &amp;quot;family&amp;quot;, {&amp;quot;model&amp;quot;: &amp;quot;Claude-Fable-5-1&amp;quot;, &amp;quot;map&amp;quot;: MAP}, True)&lt;br /&gt;
add(&amp;quot;F09 the model string in NFD matches its NFC row&amp;quot;, &amp;quot;family&amp;quot;, {&amp;quot;model&amp;quot;: &amp;quot;mode\u0300le-e\u0301&amp;quot;, &amp;quot;map&amp;quot;: MAP}, True)&lt;br /&gt;
add(&amp;quot;F10 an open row without a server is refused&amp;quot;, &amp;quot;family&amp;quot;, {&amp;quot;model&amp;quot;: &amp;quot;x&amp;quot;, &amp;quot;map&amp;quot;: MAP + [row(&amp;quot;x&amp;quot;, &amp;quot;Y&amp;quot;, True, None, &amp;quot;fp8&amp;quot;)]}, True)&lt;br /&gt;
add(&amp;quot;F11 a closed row with a server is refused&amp;quot;, &amp;quot;family&amp;quot;, {&amp;quot;model&amp;quot;: &amp;quot;x&amp;quot;, &amp;quot;map&amp;quot;: MAP + [row(&amp;quot;x&amp;quot;, &amp;quot;Y&amp;quot;, False, &amp;quot;s&amp;quot;, None)]}, True)&lt;br /&gt;
add(&amp;quot;F12 a duplicate name is refused&amp;quot;, &amp;quot;family&amp;quot;, {&amp;quot;model&amp;quot;: &amp;quot;x&amp;quot;, &amp;quot;map&amp;quot;: MAP + [row(&amp;quot;gemini-3-pro&amp;quot;, &amp;quot;Google/Gemini&amp;quot;)]}, True)&lt;br /&gt;
add(&amp;quot;F13 a duplicate name after NFC is refused&amp;quot;, &amp;quot;family&amp;quot;, {&amp;quot;model&amp;quot;: &amp;quot;x&amp;quot;, &amp;quot;map&amp;quot;: MAP + [row(&amp;quot;mode\u0300le-e\u0301&amp;quot;, &amp;quot;Maison/Mod\u00e8le&amp;quot;)]}, True)&lt;br /&gt;
add(&amp;quot;F14 an empty name is refused&amp;quot;, &amp;quot;family&amp;quot;, {&amp;quot;model&amp;quot;: &amp;quot;x&amp;quot;, &amp;quot;map&amp;quot;: MAP + [row(&amp;quot;&amp;quot;, &amp;quot;Y&amp;quot;)]}, True)&lt;br /&gt;
add(&amp;quot;F15 open not a boolean is refused&amp;quot;, &amp;quot;family&amp;quot;, {&amp;quot;model&amp;quot;: &amp;quot;x&amp;quot;, &amp;quot;map&amp;quot;: MAP + [{&amp;quot;name&amp;quot;: &amp;quot;x&amp;quot;, &amp;quot;family&amp;quot;: &amp;quot;Y&amp;quot;, &amp;quot;open&amp;quot;: 1, &amp;quot;server&amp;quot;: None, &amp;quot;quantization&amp;quot;: None}]}, True)&lt;br /&gt;
add(&amp;quot;F16 an empty model string is refused&amp;quot;, &amp;quot;family&amp;quot;, {&amp;quot;model&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;map&amp;quot;: MAP}, True)&lt;br /&gt;
add(&amp;quot;F17 a model that is not a string is refused&amp;quot;, &amp;quot;family&amp;quot;, {&amp;quot;model&amp;quot;: 5, &amp;quot;map&amp;quot;: MAP}, True)&lt;br /&gt;
add(&amp;quot;F18 a map that is not a list is refused&amp;quot;, &amp;quot;family&amp;quot;, {&amp;quot;model&amp;quot;: &amp;quot;x&amp;quot;, &amp;quot;map&amp;quot;: {&amp;quot;name&amp;quot;: &amp;quot;x&amp;quot;}}, True)&lt;br /&gt;
add(&amp;quot;F19 an extra key in a row is refused&amp;quot;, &amp;quot;family&amp;quot;, {&amp;quot;model&amp;quot;: &amp;quot;x&amp;quot;, &amp;quot;map&amp;quot;: [{&amp;quot;name&amp;quot;: &amp;quot;x&amp;quot;, &amp;quot;family&amp;quot;: &amp;quot;Y&amp;quot;, &amp;quot;open&amp;quot;: False, &amp;quot;server&amp;quot;: None, &amp;quot;quantization&amp;quot;: None, &amp;quot;note&amp;quot;: &amp;quot;&amp;quot;}]}, True)&lt;br /&gt;
add(&amp;quot;F20 an empty map: UNMAPPED&amp;quot;, &amp;quot;family&amp;quot;, {&amp;quot;model&amp;quot;: &amp;quot;x&amp;quot;, &amp;quot;map&amp;quot;: []}, True)&lt;br /&gt;
add(&amp;quot;F21 an empty family is refused&amp;quot;, &amp;quot;family&amp;quot;, {&amp;quot;model&amp;quot;: &amp;quot;x&amp;quot;, &amp;quot;map&amp;quot;: [row(&amp;quot;x&amp;quot;, &amp;quot;&amp;quot;)]}, True)&lt;br /&gt;
&lt;br /&gt;
# ---- change_class ----------------------------------------------------------&lt;br /&gt;
CL = &amp;quot;6:CLOSED16:Anthropic/Claude&amp;quot;&lt;br /&gt;
GO = &amp;quot;6:CLOSED13:Google/Gemini&amp;quot;&lt;br /&gt;
OP1 = &amp;quot;4:OPEN12:Meta/Llama-48:together3:fp8&amp;quot;&lt;br /&gt;
OP2 = &amp;quot;4:OPEN12:Meta/Llama-49:fireworks4:bf16&amp;quot;&lt;br /&gt;
add(&amp;quot;CL01 the same model reported: SAME, the cluster not read&amp;quot;, &amp;quot;class&amp;quot;, {&amp;quot;certified&amp;quot;: CL, &amp;quot;last&amp;quot;: &amp;quot;claude-fable-5-1&amp;quot;, &amp;quot;reported&amp;quot;: &amp;quot;claude-fable-5-1&amp;quot;, &amp;quot;lookup&amp;quot;: {&amp;quot;family&amp;quot;: CL, &amp;quot;cluster&amp;quot;: None}}, True)&lt;br /&gt;
add(&amp;quot;CL02 a changed model inside the family, IN: RECORDED CHANGE&amp;quot;, &amp;quot;class&amp;quot;, {&amp;quot;certified&amp;quot;: CL, &amp;quot;last&amp;quot;: &amp;quot;claude-opus-4-20250514&amp;quot;, &amp;quot;reported&amp;quot;: &amp;quot;claude-fable-5-1&amp;quot;, &amp;quot;lookup&amp;quot;: {&amp;quot;family&amp;quot;: CL, &amp;quot;cluster&amp;quot;: &amp;quot;IN&amp;quot;}}, True)&lt;br /&gt;
add(&amp;quot;CL03 a changed model inside the family, CUSP: CUSP PATH&amp;quot;, &amp;quot;class&amp;quot;, {&amp;quot;certified&amp;quot;: CL, &amp;quot;last&amp;quot;: &amp;quot;claude-opus-4-20250514&amp;quot;, &amp;quot;reported&amp;quot;: &amp;quot;claude-fable-5-1&amp;quot;, &amp;quot;lookup&amp;quot;: {&amp;quot;family&amp;quot;: CL, &amp;quot;cluster&amp;quot;: &amp;quot;CUSP&amp;quot;}}, True)&lt;br /&gt;
add(&amp;quot;CL04 a changed model, OUT: REFUSED MODEL&amp;quot;, &amp;quot;class&amp;quot;, {&amp;quot;certified&amp;quot;: CL, &amp;quot;last&amp;quot;: &amp;quot;claude-opus-4-20250514&amp;quot;, &amp;quot;reported&amp;quot;: &amp;quot;claude-fable-5-1&amp;quot;, &amp;quot;lookup&amp;quot;: {&amp;quot;family&amp;quot;: CL, &amp;quot;cluster&amp;quot;: &amp;quot;OUT&amp;quot;}}, True)&lt;br /&gt;
add(&amp;quot;CL05 a changed model, FADING through SUCCESSOR or CARRIED: REFUSED MODEL&amp;quot;, &amp;quot;class&amp;quot;, {&amp;quot;certified&amp;quot;: CL, &amp;quot;last&amp;quot;: &amp;quot;claude-opus-4-20250514&amp;quot;, &amp;quot;reported&amp;quot;: &amp;quot;claude-fable-5-1&amp;quot;, &amp;quot;lookup&amp;quot;: {&amp;quot;family&amp;quot;: CL, &amp;quot;cluster&amp;quot;: &amp;quot;FADING&amp;quot;}}, True)&lt;br /&gt;
add(&amp;quot;CL06 a changed model, UNLISTED: REFUSED MODEL&amp;quot;, &amp;quot;class&amp;quot;, {&amp;quot;certified&amp;quot;: CL, &amp;quot;last&amp;quot;: &amp;quot;claude-opus-4-20250514&amp;quot;, &amp;quot;reported&amp;quot;: &amp;quot;claude-fable-5-1&amp;quot;, &amp;quot;lookup&amp;quot;: {&amp;quot;family&amp;quot;: CL, &amp;quot;cluster&amp;quot;: &amp;quot;UNLISTED&amp;quot;}}, True)&lt;br /&gt;
add(&amp;quot;CL07 a changed model, excluded: REFUSED MODEL&amp;quot;, &amp;quot;class&amp;quot;, {&amp;quot;certified&amp;quot;: CL, &amp;quot;last&amp;quot;: &amp;quot;claude-opus-4-20250514&amp;quot;, &amp;quot;reported&amp;quot;: &amp;quot;claude-fable-5-1&amp;quot;, &amp;quot;lookup&amp;quot;: {&amp;quot;family&amp;quot;: CL, &amp;quot;cluster&amp;quot;: &amp;quot;EXCLUDED&amp;quot;}}, True)&lt;br /&gt;
add(&amp;quot;CL08 another family, even IN: REFUSED FAMILY&amp;quot;, &amp;quot;class&amp;quot;, {&amp;quot;certified&amp;quot;: CL, &amp;quot;last&amp;quot;: &amp;quot;claude-fable-5-1&amp;quot;, &amp;quot;reported&amp;quot;: &amp;quot;gemini-3-pro&amp;quot;, &amp;quot;lookup&amp;quot;: {&amp;quot;family&amp;quot;: GO, &amp;quot;cluster&amp;quot;: &amp;quot;IN&amp;quot;}}, True)&lt;br /&gt;
add(&amp;quot;CL09 an UNMAPPED model: REFUSED MODEL, detail UNMAPPED&amp;quot;, &amp;quot;class&amp;quot;, {&amp;quot;certified&amp;quot;: CL, &amp;quot;last&amp;quot;: &amp;quot;claude-fable-5-1&amp;quot;, &amp;quot;reported&amp;quot;: &amp;quot;claude-fable-6&amp;quot;, &amp;quot;lookup&amp;quot;: {&amp;quot;family&amp;quot;: &amp;quot;UNMAPPED&amp;quot;, &amp;quot;cluster&amp;quot;: None}}, True)&lt;br /&gt;
add(&amp;quot;CL10 a changed model with no cluster answer is refused&amp;quot;, &amp;quot;class&amp;quot;, {&amp;quot;certified&amp;quot;: CL, &amp;quot;last&amp;quot;: &amp;quot;claude-opus-4-20250514&amp;quot;, &amp;quot;reported&amp;quot;: &amp;quot;claude-fable-5-1&amp;quot;, &amp;quot;lookup&amp;quot;: {&amp;quot;family&amp;quot;: CL, &amp;quot;cluster&amp;quot;: None}}, True)&lt;br /&gt;
add(&amp;quot;CL11 the same string but a family that no longer matches: REFUSED FAMILY (the family check first)&amp;quot;, &amp;quot;class&amp;quot;, {&amp;quot;certified&amp;quot;: CL, &amp;quot;last&amp;quot;: &amp;quot;gemini-3-pro&amp;quot;, &amp;quot;reported&amp;quot;: &amp;quot;gemini-3-pro&amp;quot;, &amp;quot;lookup&amp;quot;: {&amp;quot;family&amp;quot;: GO, &amp;quot;cluster&amp;quot;: &amp;quot;IN&amp;quot;}}, True)&lt;br /&gt;
add(&amp;quot;CL12 an unknown cluster value is refused&amp;quot;, &amp;quot;class&amp;quot;, {&amp;quot;certified&amp;quot;: CL, &amp;quot;last&amp;quot;: &amp;quot;a&amp;quot;, &amp;quot;reported&amp;quot;: &amp;quot;b&amp;quot;, &amp;quot;lookup&amp;quot;: {&amp;quot;family&amp;quot;: CL, &amp;quot;cluster&amp;quot;: &amp;quot;MAYBE&amp;quot;}}, True)&lt;br /&gt;
add(&amp;quot;CL13 an empty reported model is refused&amp;quot;, &amp;quot;class&amp;quot;, {&amp;quot;certified&amp;quot;: CL, &amp;quot;last&amp;quot;: &amp;quot;a&amp;quot;, &amp;quot;reported&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;lookup&amp;quot;: {&amp;quot;family&amp;quot;: CL, &amp;quot;cluster&amp;quot;: &amp;quot;IN&amp;quot;}}, True)&lt;br /&gt;
add(&amp;quot;CL14 a lookup missing its cluster key is refused&amp;quot;, &amp;quot;class&amp;quot;, {&amp;quot;certified&amp;quot;: CL, &amp;quot;last&amp;quot;: &amp;quot;a&amp;quot;, &amp;quot;reported&amp;quot;: &amp;quot;b&amp;quot;, &amp;quot;lookup&amp;quot;: {&amp;quot;family&amp;quot;: CL}}, True)&lt;br /&gt;
add(&amp;quot;CL15 the reported model in NFD equals the last in NFC: SAME&amp;quot;, &amp;quot;class&amp;quot;, {&amp;quot;certified&amp;quot;: CL, &amp;quot;last&amp;quot;: &amp;quot;mod\u00e8le&amp;quot;, &amp;quot;reported&amp;quot;: &amp;quot;mode\u0300le&amp;quot;, &amp;quot;lookup&amp;quot;: {&amp;quot;family&amp;quot;: CL, &amp;quot;cluster&amp;quot;: None}}, True)&lt;br /&gt;
add(&amp;quot;CL16 open weights: a change of server is a change of family key: REFUSED FAMILY&amp;quot;, &amp;quot;class&amp;quot;, {&amp;quot;certified&amp;quot;: OP1, &amp;quot;last&amp;quot;: &amp;quot;together/llama-4-70b-fp8&amp;quot;, &amp;quot;reported&amp;quot;: &amp;quot;fireworks/llama-4-70b-bf16&amp;quot;, &amp;quot;lookup&amp;quot;: {&amp;quot;family&amp;quot;: OP2, &amp;quot;cluster&amp;quot;: &amp;quot;IN&amp;quot;}}, True)&lt;br /&gt;
add(&amp;quot;CL17 SAME with a cluster answer supplied: still SAME&amp;quot;, &amp;quot;class&amp;quot;, {&amp;quot;certified&amp;quot;: CL, &amp;quot;last&amp;quot;: &amp;quot;claude-fable-5-1&amp;quot;, &amp;quot;reported&amp;quot;: &amp;quot;claude-fable-5-1&amp;quot;, &amp;quot;lookup&amp;quot;: {&amp;quot;family&amp;quot;: CL, &amp;quot;cluster&amp;quot;: &amp;quot;OUT&amp;quot;}}, True)&lt;br /&gt;
add(&amp;quot;CL18 an empty certified family is refused&amp;quot;, &amp;quot;class&amp;quot;, {&amp;quot;certified&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;last&amp;quot;: &amp;quot;a&amp;quot;, &amp;quot;reported&amp;quot;: &amp;quot;b&amp;quot;, &amp;quot;lookup&amp;quot;: {&amp;quot;family&amp;quot;: CL, &amp;quot;cluster&amp;quot;: &amp;quot;IN&amp;quot;}}, True)&lt;br /&gt;
&lt;br /&gt;
# ---- identity_compare ------------------------------------------------------&lt;br /&gt;
add(&amp;quot;CP01 all four agree&amp;quot;, &amp;quot;compare&amp;quot;, {&amp;quot;declared&amp;quot;: &amp;quot;Anthropic&amp;quot;, &amp;quot;stated&amp;quot;: &amp;quot;Anthropic&amp;quot;, &amp;quot;relayed&amp;quot;: &amp;quot;Anthropic&amp;quot;, &amp;quot;inferred&amp;quot;: &amp;quot;Anthropic&amp;quot;}, True)&lt;br /&gt;
add(&amp;quot;CP02 the inferred vendor absent: three pairs ABSENT, AGREE&amp;quot;, &amp;quot;compare&amp;quot;, {&amp;quot;declared&amp;quot;: &amp;quot;Anthropic&amp;quot;, &amp;quot;stated&amp;quot;: &amp;quot;Anthropic&amp;quot;, &amp;quot;relayed&amp;quot;: &amp;quot;Anthropic&amp;quot;, &amp;quot;inferred&amp;quot;: None}, True)&lt;br /&gt;
add(&amp;quot;CP03 the relayed vendor differs: DIFFER on its three pairs&amp;quot;, &amp;quot;compare&amp;quot;, {&amp;quot;declared&amp;quot;: &amp;quot;Anthropic&amp;quot;, &amp;quot;stated&amp;quot;: &amp;quot;Anthropic&amp;quot;, &amp;quot;relayed&amp;quot;: &amp;quot;Google&amp;quot;, &amp;quot;inferred&amp;quot;: &amp;quot;Anthropic&amp;quot;}, True)&lt;br /&gt;
add(&amp;quot;CP04 all absent: ABSENT&amp;quot;, &amp;quot;compare&amp;quot;, {&amp;quot;declared&amp;quot;: None, &amp;quot;stated&amp;quot;: None, &amp;quot;relayed&amp;quot;: None, &amp;quot;inferred&amp;quot;: None}, True)&lt;br /&gt;
add(&amp;quot;CP05 only the declared vendor: ABSENT&amp;quot;, &amp;quot;compare&amp;quot;, {&amp;quot;declared&amp;quot;: &amp;quot;Anthropic&amp;quot;, &amp;quot;stated&amp;quot;: None, &amp;quot;relayed&amp;quot;: None, &amp;quot;inferred&amp;quot;: None}, True)&lt;br /&gt;
add(&amp;quot;CP06 declared and stated only, agreeing: AGREE&amp;quot;, &amp;quot;compare&amp;quot;, {&amp;quot;declared&amp;quot;: &amp;quot;Anthropic&amp;quot;, &amp;quot;stated&amp;quot;: &amp;quot;Anthropic&amp;quot;, &amp;quot;relayed&amp;quot;: None, &amp;quot;inferred&amp;quot;: None}, True)&lt;br /&gt;
add(&amp;quot;CP07 the stated vendor differs&amp;quot;, &amp;quot;compare&amp;quot;, {&amp;quot;declared&amp;quot;: &amp;quot;Anthropic&amp;quot;, &amp;quot;stated&amp;quot;: &amp;quot;OpenAI&amp;quot;, &amp;quot;relayed&amp;quot;: &amp;quot;Anthropic&amp;quot;, &amp;quot;inferred&amp;quot;: &amp;quot;Anthropic&amp;quot;}, True)&lt;br /&gt;
add(&amp;quot;CP08 a case difference is a difference&amp;quot;, &amp;quot;compare&amp;quot;, {&amp;quot;declared&amp;quot;: &amp;quot;Anthropic&amp;quot;, &amp;quot;stated&amp;quot;: &amp;quot;anthropic&amp;quot;, &amp;quot;relayed&amp;quot;: &amp;quot;Anthropic&amp;quot;, &amp;quot;inferred&amp;quot;: &amp;quot;Anthropic&amp;quot;}, True)&lt;br /&gt;
add(&amp;quot;CP09 NFD against NFC agrees&amp;quot;, &amp;quot;compare&amp;quot;, {&amp;quot;declared&amp;quot;: &amp;quot;Soci\u00e9t\u00e9&amp;quot;, &amp;quot;stated&amp;quot;: &amp;quot;Socie\u0301te\u0301&amp;quot;, &amp;quot;relayed&amp;quot;: None, &amp;quot;inferred&amp;quot;: None}, True)&lt;br /&gt;
add(&amp;quot;CP10 an empty declared value is refused&amp;quot;, &amp;quot;compare&amp;quot;, {&amp;quot;declared&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;stated&amp;quot;: &amp;quot;Anthropic&amp;quot;, &amp;quot;relayed&amp;quot;: None, &amp;quot;inferred&amp;quot;: None}, True)&lt;br /&gt;
add(&amp;quot;CP11 a value that is not a string is refused&amp;quot;, &amp;quot;compare&amp;quot;, {&amp;quot;declared&amp;quot;: &amp;quot;Anthropic&amp;quot;, &amp;quot;stated&amp;quot;: 3, &amp;quot;relayed&amp;quot;: None, &amp;quot;inferred&amp;quot;: None}, True)&lt;br /&gt;
add(&amp;quot;CP12 the inferred vendor differs from the other three&amp;quot;, &amp;quot;compare&amp;quot;, {&amp;quot;declared&amp;quot;: &amp;quot;Anthropic&amp;quot;, &amp;quot;stated&amp;quot;: &amp;quot;Anthropic&amp;quot;, &amp;quot;relayed&amp;quot;: &amp;quot;Anthropic&amp;quot;, &amp;quot;inferred&amp;quot;: &amp;quot;Google&amp;quot;}, True)&lt;br /&gt;
add(&amp;quot;CP13 two absent, the remaining pair differs&amp;quot;, &amp;quot;compare&amp;quot;, {&amp;quot;declared&amp;quot;: None, &amp;quot;stated&amp;quot;: &amp;quot;Anthropic&amp;quot;, &amp;quot;relayed&amp;quot;: &amp;quot;Google&amp;quot;, &amp;quot;inferred&amp;quot;: None}, True)&lt;br /&gt;
add(&amp;quot;CP14 four distinct vendors: six differences&amp;quot;, &amp;quot;compare&amp;quot;, {&amp;quot;declared&amp;quot;: &amp;quot;A&amp;quot;, &amp;quot;stated&amp;quot;: &amp;quot;B&amp;quot;, &amp;quot;relayed&amp;quot;: &amp;quot;C&amp;quot;, &amp;quot;inferred&amp;quot;: &amp;quot;D&amp;quot;}, True)&lt;br /&gt;
add(&amp;quot;CP15 the declared vendor absent, the other three agree&amp;quot;, &amp;quot;compare&amp;quot;, {&amp;quot;declared&amp;quot;: None, &amp;quot;stated&amp;quot;: &amp;quot;Anthropic&amp;quot;, &amp;quot;relayed&amp;quot;: &amp;quot;Anthropic&amp;quot;, &amp;quot;inferred&amp;quot;: &amp;quot;Anthropic&amp;quot;}, True)&lt;br /&gt;
add(&amp;quot;CP16 whitespace is not collapsed: a trailing space differs&amp;quot;, &amp;quot;compare&amp;quot;, {&amp;quot;declared&amp;quot;: &amp;quot;Anthropic&amp;quot;, &amp;quot;stated&amp;quot;: &amp;quot;Anthropic &amp;quot;, &amp;quot;relayed&amp;quot;: None, &amp;quot;inferred&amp;quot;: None}, True)&lt;br /&gt;
&lt;br /&gt;
json.dump({&amp;quot;corpus&amp;quot;: &amp;quot;identity&amp;quot;, &amp;quot;version&amp;quot;: &amp;quot;0.1.0&amp;quot;, &amp;quot;cases&amp;quot;: cases},&lt;br /&gt;
          open(os.path.join(here, &amp;quot;identity_corpus.json&amp;quot;), &amp;quot;w&amp;quot;), indent=1,&lt;br /&gt;
          sort_keys=True, ensure_ascii=False)&lt;br /&gt;
print(&amp;quot;cases&amp;quot;, len(cases))&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>BFP Rauch</name></author>
	</entry>
</feed>