<?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%2Ftpc_hold.py</id>
	<title>The Principia Machina/TPC-PY/tpc hold.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%2Ftpc_hold.py"/>
	<link rel="alternate" type="text/html" href="https://invarians.org/index.php?title=The_Principia_Machina/TPC-PY/tpc_hold.py&amp;action=history"/>
	<updated>2026-10-21T10:21:14Z</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/tpc_hold.py&amp;diff=4877&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/tpc_hold.py&amp;diff=4877&amp;oldid=prev"/>
		<updated>2026-09-30T02:11:04Z</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-4876:rev-4877 --&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/tpc_hold.py&amp;diff=4876&amp;oldid=prev</id>
		<title>BFP Rauch: TPC-PY source tpc_hold.py (0.3.0), SHA-256 35831f1a55cadb2d; 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/tpc_hold.py&amp;diff=4876&amp;oldid=prev"/>
		<updated>2026-09-30T02:10:58Z</updated>

		<summary type="html">&lt;p&gt;TPC-PY source tpc_hold.py (0.3.0), SHA-256 35831f1a55cadb2d; 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-l4&quot;&gt;Line 4:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 4:&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;--- D111.1; charter CO-21; parrot handoff 0.5.0 4.2, 5.3, 13.3;&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;--- D111.1; charter CO-21; parrot handoff 0.5.0 4.2, 5.3, 13.3;&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;--- 0.2.0: the HOLD record&amp;#039;s bibliography list (D171 (j), taken by&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;--- 0.2.0: the HOLD record&amp;#039;s bibliography list (D171 (j), taken by&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;--- delegation 2026-09-26; tpm_biblio_resolution 0.1.0 section 6.14)&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;--- delegation 2026-09-26; tpm_biblio_resolution 0.1.0 section 6.14&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;);&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;--- 0.3.0: the trust-tier gate as release_record&#039;s parameter (PD-D-5&lt;/ins&gt;)&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;=======================================================================&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;=======================================================================&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;0.3.0 (proposed with TPC-PY 0.2.0; tpm_hold_scope 0.2.0): release_record&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;takes a fifth argument, tier. On a community-ledger MATCH (kind&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;LEDGER_MATCH) the trust-tier gate is one more refusal of the eligibility&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;check (TPS 3.3.15; PMP-TPM CR11; D119.1, D123.1 T6): tier is the&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;reproducer&#039;s facts {&quot;in_tier&quot;, &quot;override_in_force&quot;,&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&quot;independent_matches&quot;} as TPX reads them from the score, and the match&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;releases only when in_tier holds and, while an OVERRIDE mark is in force,&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;independent_matches is at least 2; else &quot;trust-tier gate: NOT IN TIER&quot; or&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&quot;trust-tier gate: OVERRIDE MARK&quot;. The rule is tpc_score&#039;s&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;tier_gate_release, which TPX no longer runs first. With kind REPRODUCTION&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;tier is null (the gate is a ledger MATCH&#039;s, TPS 3.3.15), and a tier given&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;there is refused. tier&#039;s shape is read with the reproduction&#039;s; the gate&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;runs after the account, SAME-MODEL and origin checks. The RELEASE record&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;and its digest form do not change; the tier&#039;s facts stay on the&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;community ledger and the scorecard.&lt;/ins&gt;&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;0.2.0 (HOLD_FORM &amp;quot;2&amp;quot;): after a failed canary TPX re-runs D172&amp;#039;s lookup on&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;0.2.0 (HOLD_FORM &amp;quot;2&amp;quot;): after a failed canary TPX re-runs D172&amp;#039;s lookup on&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;every bibliography entry the account proposed or landed in the hold&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;every bibliography entry the account proposed or landed in the hold&lt;/div&gt;&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-l71&quot;&gt;Line 71:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 87:&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;       field list the preimage function shows; it excludes hold_id (the&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;       field list the preimage function shows; it excludes hold_id (the&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;       address).&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;       address).&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;   release_record(release_id, hold, reproduction, records)&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;   release_record(release_id, hold, reproduction, records&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;, tier&lt;/ins&gt;)&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;       The RELEASE record. hold is the HOLD record&amp;#039;s fields as an object;&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;       The RELEASE record. hold is the HOLD record&amp;#039;s fields as an object;&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;       its digest is recomputed and a mismatch refused. reproduction is&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;       its digest is recomputed and a mismatch refused. reproduction is&lt;/div&gt;&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-l83&quot;&gt;Line 83:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 99:&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;       record no longer reached is released with its prior status; a&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;       record no longer reached is released with its prior status; a&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;       matched record still reached by a remaining seed stays held.&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;       matched record still reached by a remaining seed stays held.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;      tier (0.3.0): null with kind REPRODUCTION; with kind LEDGER_MATCH&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;      an object {&quot;in_tier&quot;: bool, &quot;override_in_force&quot;: bool,&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;      &quot;independent_matches&quot;: int 0..COUNT_MAX}, the trust-tier gate&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;      applied after the eligibility checks (see 0.3.0 above).&lt;/ins&gt;&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;       -&amp;gt; [&amp;quot;OK&amp;quot;, [release_id, &amp;quot;RELEASE&amp;quot;, hold_id, hold_digest, kind,&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;       -&amp;gt; [&amp;quot;OK&amp;quot;, [release_id, &amp;quot;RELEASE&amp;quot;, hold_id, hold_digest, kind,&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;           reproduction_id, account, snapshot, [[id, restored_status], ...],&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;           reproduction_id, account, snapshot, [[id, restored_status], ...],&lt;/div&gt;&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-l103&quot;&gt;Line 103:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 123:&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;import tpc_zone as Z&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;import tpc_zone as Z&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;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;TPC_HOLD_VERSION = &quot;0.2.0&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&quot;&lt;/del&gt;&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;TPC_HOLD_VERSION = &quot;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;0.3.0&quot;          # proposed MINOR (PD-D-5), unreleased until H-DECL declares TPC-PY &lt;/ins&gt;0.2.0&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;HOLD_TAG = &amp;quot;TPC-HOLD&amp;quot;&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;HOLD_TAG = &amp;quot;TPC-HOLD&amp;quot;&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;RELEASE_TAG = &amp;quot;TPC-RELEASE&amp;quot;&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;RELEASE_TAG = &amp;quot;TPC-RELEASE&amp;quot;&lt;/div&gt;&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-l118&quot;&gt;Line 118:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 138:&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;                &amp;quot;anchor_block&amp;quot;, &amp;quot;lookback_passes&amp;quot;, &amp;quot;held_blocks&amp;quot;, &amp;quot;seeds&amp;quot;, &amp;quot;held&amp;quot;, &amp;quot;biblio&amp;quot;, &amp;quot;digest&amp;quot;)&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;                &amp;quot;anchor_block&amp;quot;, &amp;quot;lookback_passes&amp;quot;, &amp;quot;held_blocks&amp;quot;, &amp;quot;seeds&amp;quot;, &amp;quot;held&amp;quot;, &amp;quot;biblio&amp;quot;, &amp;quot;digest&amp;quot;)&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;CHECK_CONFIRMED = &amp;quot;CONFIRMED&amp;quot;                # a listed entry&amp;#039;s re-run CHECK is never CONFIRMED (D171 (j))&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;CHECK_CONFIRMED = &amp;quot;CONFIRMED&amp;quot;                # a listed entry&amp;#039;s re-run CHECK is never CONFIRMED (D171 (j))&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;TIER_FIELDS = (&quot;in_tier&quot;, &quot;override_in_force&quot;, &quot;independent_matches&quot;)   # tpc_score&#039;s reproducer (PD-D-5)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;COUNT_MAX = 1000000000                       # as tpc_score.COUNT_MAX&lt;/ins&gt;&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;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 colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l412&quot;&gt;Line 412:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 434:&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;# ---- RELEASE --------------------------------------------------------------------------------&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;# ---- RELEASE --------------------------------------------------------------------------------&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;def release_record(release_id, hold, reproduction, records):&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;def _tier_problem(tier):&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    &quot;&quot;&quot;None when tier is a well-formed reproducer object (PD-D-5), else the&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    refusal: unknown fields (least first), missing fields in TIER_FIELDS&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    order, then each field&#039;s type.&quot;&quot;&quot;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    if not Z._obj(tier):&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;        return &quot;tier is not an object&quot;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    extra = sorted(k for k in tier if k not in TIER_FIELDS)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    if extra:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;        return &quot;tier: unknown field &quot; + extra[0]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    for f in TIER_FIELDS:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;        if f not in tier:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;            return &quot;tier: missing field &quot; + f&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    for f in (&quot;in_tier&quot;, &quot;override_in_force&quot;):&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;        if not isinstance(tier[f], bool):&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;            return &quot;tier: &quot; + f + &quot; is not a boolean&quot;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    n = tier[&quot;independent_matches&quot;]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    if not _is_int(n) or n &amp;lt; 0 or n &amp;gt; COUNT_MAX:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;        return &quot;tier: independent_matches is not a count&quot;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    return None&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;def release_record(release_id, hold, reproduction, records&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;, tier&lt;/ins&gt;):&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;     if not _is_text(release_id):&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;     if not _is_text(release_id):&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;         return _refuse(&amp;quot;release_id is not a name&amp;quot;)&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;         return _refuse(&amp;quot;release_id is not a name&amp;quot;)&lt;/div&gt;&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-l448&quot;&gt;Line 448:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 491:&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;     if matched is None or not _unique(matched):&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;     if matched is None or not _unique(matched):&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;         return _refuse(&amp;quot;reproduction: matched is not a list of distinct names&amp;quot;)&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;         return _refuse(&amp;quot;reproduction: matched is not a list of distinct names&amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    # tier&#039;s shape, with the reproduction&#039;s (0.3.0, PD-D-5): the gate is a ledger MATCH&#039;s&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    if kind == &quot;REPRODUCTION&quot;:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;        if tier is not None:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;            return _refuse(&quot;tier is given for a REPRODUCTION&quot;)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    else:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;        bad = _tier_problem(tier)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;        if bad is not None:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;            return _refuse(bad)&lt;/ins&gt;&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;     # eligibility (D111.1; D42): not the failed account, not SAME-MODEL, a REPRODUCTION block&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;     # eligibility (D111.1; D42): not the failed account, not SAME-MODEL, a REPRODUCTION block&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;     if ind[&amp;quot;account&amp;quot;] == c[&amp;quot;account&amp;quot;]:&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;     if ind[&amp;quot;account&amp;quot;] == c[&amp;quot;account&amp;quot;]:&lt;/div&gt;&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-l455&quot;&gt;Line 455:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 506:&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;     if ind[&amp;quot;origin&amp;quot;] != ORIGIN_REPRODUCTION:&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;     if ind[&amp;quot;origin&amp;quot;] != ORIGIN_REPRODUCTION:&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;         return _refuse(&amp;quot;reproduction origin is not REPRODUCTION BLOCK&amp;quot;)&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;         return _refuse(&amp;quot;reproduction origin is not REPRODUCTION BLOCK&amp;quot;)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    # the trust-tier gate on a ledger MATCH, one more refusal of the same check (TPS 3.3.15;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    # tpc_score.tier_gate_release&#039;s rule: NOT IN TIER first, then the OVERRIDE mark, D123.1 T6)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;    if kind == &quot;LEDGER_MATCH&quot;:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;        if not tier[&quot;in_tier&quot;]:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;            return _refuse(&quot;trust-tier gate: NOT IN TIER&quot;)&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;        if tier[&quot;override_in_force&quot;] and tier[&quot;independent_matches&quot;] &amp;lt; 2:&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&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;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;            return _refuse(&quot;trust-tier gate: OVERRIDE MARK&quot;)&lt;/ins&gt;&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;     held_ids = set(p[0] for p in pairs)&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;     held_ids = set(p[0] for p in pairs)&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;     for m in matched:&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;     for m in matched:&lt;/div&gt;&lt;/td&gt;&lt;/tr&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/tpc_hold.py&amp;diff=4217&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/tpc_hold.py&amp;diff=4217&amp;oldid=prev"/>
		<updated>2026-09-28T04:37:36Z</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;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 04:37, 28 September 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&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;/table&gt;</summary>
		<author><name>BFP Rauch</name></author>
	</entry>
	<entry>
		<id>https://invarians.org/index.php?title=The_Principia_Machina/TPC-PY/tpc_hold.py&amp;diff=4216&amp;oldid=prev</id>
		<title>BFP Rauch: TPC-PY source tpc_hold.py (0.2.0), SHA-256 b8ea2c8948493b80; 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/tpc_hold.py&amp;diff=4216&amp;oldid=prev"/>
		<updated>2026-09-27T15:43:18Z</updated>

		<summary type="html">&lt;p&gt;TPC-PY source tpc_hold.py (0.2.0), SHA-256 b8ea2c8948493b80; 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;# -*- coding: utf-8 -*-&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
TPC-PY --- the hold-scope function (TPC step 2, increment &amp;quot;hold scope&amp;quot;)&lt;br /&gt;
--- D111.1; charter CO-21; parrot handoff 0.5.0 4.2, 5.3, 13.3;&lt;br /&gt;
--- 0.2.0: the HOLD record&amp;#039;s bibliography list (D171 (j), taken by&lt;br /&gt;
--- delegation 2026-09-26; tpm_biblio_resolution 0.1.0 section 6.14)&lt;br /&gt;
=======================================================================&lt;br /&gt;
0.2.0 (HOLD_FORM &amp;quot;2&amp;quot;): after a failed canary TPX re-runs D172&amp;#039;s lookup on&lt;br /&gt;
every bibliography entry the account proposed or landed in the hold&lt;br /&gt;
window (tpc_biblio.biblio_hold_list) and lists in the HOLD record, in the&lt;br /&gt;
field BIBLIOGRAPHY (&amp;quot;biblio&amp;quot;), those whose re-run CHECK is not CONFIRMED;&lt;br /&gt;
entries are not HELD. hold_preimage and hold_record take the list as a&lt;br /&gt;
fourth argument (an empty list when the UWC&amp;#039;s BIBLIOGRAPHY setting is OFF&lt;br /&gt;
or nothing is listed); the digest&amp;#039;s field list gains, after the held&lt;br /&gt;
pairs, the list&amp;#039;s count and its (bib_id, check) pairs; the HOLD record&lt;br /&gt;
gains &amp;quot;biblio&amp;quot; before &amp;quot;digest&amp;quot;; release_record reads form 2 (the hold&lt;br /&gt;
object must carry &amp;quot;biblio&amp;quot;, whose digest is recomputed with it) and&lt;br /&gt;
carries the list unchanged into the RELEASE record, before its digest,&lt;br /&gt;
whose field list gains the count and pairs likewise. Every form-1 digest&lt;br /&gt;
moved once (fixtures only; no UWC exists).&lt;br /&gt;
&lt;br /&gt;
SELECTED 2026-09-23 (D111.1, tpm_canary_lookback_pause 0.2.1 section 6):&lt;br /&gt;
after a failed canary TPX holds the account&amp;#039;s recent work. HELD is a&lt;br /&gt;
value of the record&amp;#039;s own status field; the prior status is kept and&lt;br /&gt;
restored on release; a HOLD record carries the cause and the list; a&lt;br /&gt;
RELEASE record restores the status after an independent, non-SAME-MODEL&lt;br /&gt;
REPRODUCTION matches. Spec: tpm_hold_scope 0.1.0. Standard library only;&lt;br /&gt;
Python 3.8+; Windows/Linux. Readings the sources leave open are marked&lt;br /&gt;
&amp;quot;taken by delegation 2026-09-24&amp;quot; in the spec note, section 6.&lt;br /&gt;
&lt;br /&gt;
WHAT IS COMPUTED HERE (pure functions; TPX calls them, D111.1)&lt;br /&gt;
  hold_scope(history, lookback_passes)&lt;br /&gt;
      The held block set. history is the account&amp;#039;s ordered blocks under&lt;br /&gt;
      the certificate in force: {&amp;quot;account&amp;quot;, &amp;quot;admission_block&amp;quot;, &amp;quot;blocks&amp;quot;:&lt;br /&gt;
      [{&amp;quot;block_id&amp;quot;, &amp;quot;canary&amp;quot;: null | &amp;quot;PASS&amp;quot; | &amp;quot;FAIL&amp;quot;}, ...]}. The last&lt;br /&gt;
      block is the failing block. The scope reaches back to the block of&lt;br /&gt;
      the account&amp;#039;s lookback_passes-th most recent passed canary,&lt;br /&gt;
      inclusive (LOOKBACK PASSES, declared 2), or, with fewer passes, to&lt;br /&gt;
      the admission block. Blocks before the admission block belong to a&lt;br /&gt;
      lapsed certificate: they are outside the scope and their passes do&lt;br /&gt;
      not anchor. A passed parrot is not an anchor (handoff 4.5); the&lt;br /&gt;
      caller records only canary outcomes in &amp;quot;canary&amp;quot;.&lt;br /&gt;
      -&amp;gt; [&amp;quot;OK&amp;quot;, [held block ids in order], anchor_kind, anchor_block,&lt;br /&gt;
          passes_counted] with anchor_kind &amp;quot;PASS&amp;quot; or &amp;quot;ADMISSION&amp;quot;.&lt;br /&gt;
  held_closure(records, seeds)&lt;br /&gt;
      The HELD set of one register. seeds = {&amp;quot;account&amp;quot;, &amp;quot;blocks&amp;quot;}: the&lt;br /&gt;
      failed account and the held blocks. Seeds are every record the&lt;br /&gt;
      account authored in a held block; every CORROBORATION it supplied&lt;br /&gt;
      (author, or &amp;quot;supplied_by&amp;quot; when TPX wrote it) in a held block; every&lt;br /&gt;
      record carried by a RETURN it vetted as AI-LEAD (&amp;quot;vetted_by&amp;quot;, in&lt;br /&gt;
      the lead&amp;#039;s block &amp;quot;vetted_in&amp;quot;, the record&amp;#039;s own block when absent)&lt;br /&gt;
      in a held block. Then every record whose citations or ASSUMPTIONS&lt;br /&gt;
      closure reaches a held record, transitively; a cycle does not loop.&lt;br /&gt;
      -&amp;gt; [&amp;quot;OK&amp;quot;, [[id, prior_status], ...] sorted by id, [seed ids]].&lt;br /&gt;
      Collation: identifiers sort in Unicode code point order, which is&lt;br /&gt;
      UTF-8 byte order; both residences sort so.&lt;br /&gt;
  tpx_allocate(range)&lt;br /&gt;
      One identifier from the register&amp;#039;s reserved range for TPX-written&lt;br /&gt;
      records (HOLD, RELEASE, a TPX-written corroboration): the leased-&lt;br /&gt;
      range form of TPS 5.7.5 held by TPX itself, so a write needs no&lt;br /&gt;
      mutex. -&amp;gt; [&amp;quot;OK&amp;quot;, &amp;quot;&amp;lt;prefix&amp;gt;-&amp;lt;n&amp;gt;&amp;quot;, [prefix, low, high, next]].&lt;br /&gt;
  hold_preimage(cause, seeds, held, biblio) / hold_record(hold_id, cause,&lt;br /&gt;
      seeds, held, biblio)&lt;br /&gt;
      The HOLD record: [hold_id, &amp;quot;HOLD&amp;quot;, canary_id, account, snapshot,&lt;br /&gt;
      failing_block, anchor_kind, anchor_block, lookback_passes,&lt;br /&gt;
      held_blocks, seeds, [[id, prior_status], ...], [[bib_id, check],&lt;br /&gt;
      ...], digest]. biblio is the bibliography list of D171 (j): pairs&lt;br /&gt;
      of a BIB ID and its re-run CHECK value, none CONFIRMED, distinct,&lt;br /&gt;
      sorted by bib_id in code point order; [] when there is none. The&lt;br /&gt;
      digest is digest_fields (D97.1) over the tagged, counted, flat&lt;br /&gt;
      field list the preimage function shows; it excludes hold_id (the&lt;br /&gt;
      address).&lt;br /&gt;
  release_record(release_id, hold, reproduction, records)&lt;br /&gt;
      The RELEASE record. hold is the HOLD record&amp;#039;s fields as an object;&lt;br /&gt;
      its digest is recomputed and a mismatch refused. reproduction is&lt;br /&gt;
      {&amp;quot;kind&amp;quot;: &amp;quot;REPRODUCTION&amp;quot; | &amp;quot;LEDGER_MATCH&amp;quot;, &amp;quot;id&amp;quot;, &amp;quot;independence&amp;quot;:&lt;br /&gt;
      {&amp;quot;account&amp;quot;, &amp;quot;snapshot&amp;quot;, &amp;quot;origin&amp;quot;, &amp;quot;same_model&amp;quot;?}, &amp;quot;matched&amp;quot;: [ids]}.&lt;br /&gt;
      Eligible when the independence names an account other than the held&lt;br /&gt;
      one, is not SAME-MODEL (flag, or the same snapshot), and its origin&lt;br /&gt;
      is REPRODUCTION BLOCK; a community-ledger MATCH counts on the same&lt;br /&gt;
      check (handoff 5.3, 13.3). The matched seeds leave the seed set,&lt;br /&gt;
      the closure is recomputed over the remaining seeds, and every held&lt;br /&gt;
      record no longer reached is released with its prior status; a&lt;br /&gt;
      matched record still reached by a remaining seed stays held.&lt;br /&gt;
      -&amp;gt; [&amp;quot;OK&amp;quot;, [release_id, &amp;quot;RELEASE&amp;quot;, hold_id, hold_digest, kind,&lt;br /&gt;
          reproduction_id, account, snapshot, [[id, restored_status], ...],&lt;br /&gt;
          [still held ids], [[bib_id, check], ...] (the HOLD&amp;#039;s list,&lt;br /&gt;
          unchanged), digest]].&lt;br /&gt;
&lt;br /&gt;
REFUSED, as [&amp;quot;REFUSED&amp;quot;, reason], never raised; a reason that quotes input&lt;br /&gt;
escapes disallowed code points (zone schemas 6.3). A HOLD or RELEASE with&lt;br /&gt;
nothing to hold or release is refused, never written empty.&lt;br /&gt;
&lt;br /&gt;
NOT HERE. Writing HELD into the records, the review list of older&lt;br /&gt;
same-snapshot work, the audit block on a mismatch or with no eligible&lt;br /&gt;
reproducer, and the hold-in-force check at release (a record listed by&lt;br /&gt;
another HOLD in force is restored no further than HELD) are TPX&amp;#039;s (build&lt;br /&gt;
step 3). The status value a withdrawal sets on a struck record waits on&lt;br /&gt;
the record field schema (C-16) and is owed (spec note section 8).&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
import tpc_digest as G&lt;br /&gt;
import tpc_zone as Z&lt;br /&gt;
&lt;br /&gt;
TPC_HOLD_VERSION = &amp;quot;0.2.0&amp;quot;&lt;br /&gt;
HOLD_TAG = &amp;quot;TPC-HOLD&amp;quot;&lt;br /&gt;
RELEASE_TAG = &amp;quot;TPC-RELEASE&amp;quot;&lt;br /&gt;
HOLD_FORM = &amp;quot;2&amp;quot;                              # 0.2.0: the bibliography list (D171 (j))&lt;br /&gt;
LOOKBACK_PASSES_DECLARED = 2                 # PMP-TPM DECLARED PARAMETERS (D111.1)&lt;br /&gt;
CANARY_VALUES = (&amp;quot;PASS&amp;quot;, &amp;quot;FAIL&amp;quot;)&lt;br /&gt;
ANCHOR_KINDS = (&amp;quot;PASS&amp;quot;, &amp;quot;ADMISSION&amp;quot;)&lt;br /&gt;
ORIGIN_REPRODUCTION = &amp;quot;REPRODUCTION BLOCK&amp;quot;&lt;br /&gt;
REPRODUCTION_KINDS = (&amp;quot;REPRODUCTION&amp;quot;, &amp;quot;LEDGER_MATCH&amp;quot;)&lt;br /&gt;
RECORD_TEXT_FIELDS = (&amp;quot;block_id&amp;quot;, &amp;quot;author&amp;quot;, &amp;quot;kind&amp;quot;, &amp;quot;status&amp;quot;)&lt;br /&gt;
RECORD_LIST_FIELDS = (&amp;quot;cites&amp;quot;, &amp;quot;assumptions&amp;quot;)&lt;br /&gt;
RECORD_OPTIONAL_FIELDS = (&amp;quot;supplied_by&amp;quot;, &amp;quot;vetted_by&amp;quot;, &amp;quot;vetted_in&amp;quot;)&lt;br /&gt;
HOLD_FIELDS = (&amp;quot;hold_id&amp;quot;, &amp;quot;canary_id&amp;quot;, &amp;quot;account&amp;quot;, &amp;quot;snapshot&amp;quot;, &amp;quot;failing_block&amp;quot;, &amp;quot;anchor_kind&amp;quot;,&lt;br /&gt;
               &amp;quot;anchor_block&amp;quot;, &amp;quot;lookback_passes&amp;quot;, &amp;quot;held_blocks&amp;quot;, &amp;quot;seeds&amp;quot;, &amp;quot;held&amp;quot;, &amp;quot;biblio&amp;quot;, &amp;quot;digest&amp;quot;)&lt;br /&gt;
CHECK_CONFIRMED = &amp;quot;CONFIRMED&amp;quot;                # a listed entry&amp;#039;s re-run CHECK is never CONFIRMED (D171 (j))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ---- helpers -------------------------------------------------------------------&lt;br /&gt;
def _refuse(msg):&lt;br /&gt;
    return [&amp;quot;REFUSED&amp;quot;, Z._show(msg)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def _is_text(x):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;A non-empty string with no disallowed code point (zone schemas 6).&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    return isinstance(x, str) and x != &amp;quot;&amp;quot; and Z._first_bad(x) is None&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def _is_int(x):&lt;br /&gt;
    return isinstance(x, int) and not isinstance(x, bool)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def _text_list(v):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;The list when v is a list of texts, else None.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    if not Z._list(v):&lt;br /&gt;
        return None&lt;br /&gt;
    for x in v:&lt;br /&gt;
        if not _is_text(x):&lt;br /&gt;
            return None&lt;br /&gt;
    return v&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def _unique(v):&lt;br /&gt;
    return len(set(v)) == len(v)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ---- hold_scope ------------------------------------------------------------------&lt;br /&gt;
def hold_scope(history, lookback_passes):&lt;br /&gt;
    if not _is_int(lookback_passes) or lookback_passes &amp;lt; 1:&lt;br /&gt;
        return _refuse(&amp;quot;LOOKBACK PASSES is not an integer of at least 1&amp;quot;)&lt;br /&gt;
    if not Z._obj(history):&lt;br /&gt;
        return _refuse(&amp;quot;history is not an object&amp;quot;)&lt;br /&gt;
    if not _is_text(history.get(&amp;quot;account&amp;quot;)):&lt;br /&gt;
        return _refuse(&amp;quot;history: account is not a name&amp;quot;)&lt;br /&gt;
    adm = history.get(&amp;quot;admission_block&amp;quot;)&lt;br /&gt;
    if not _is_text(adm):&lt;br /&gt;
        return _refuse(&amp;quot;history: admission_block is not a name&amp;quot;)&lt;br /&gt;
    blocks = history.get(&amp;quot;blocks&amp;quot;)&lt;br /&gt;
    if not Z._list(blocks) or not blocks:&lt;br /&gt;
        return _refuse(&amp;quot;history: blocks is not a non-empty list&amp;quot;)&lt;br /&gt;
    ids = []&lt;br /&gt;
    for b in blocks:&lt;br /&gt;
        if not Z._obj(b):&lt;br /&gt;
            return _refuse(&amp;quot;history: block is not an object&amp;quot;)&lt;br /&gt;
        bid = b.get(&amp;quot;block_id&amp;quot;)&lt;br /&gt;
        if not _is_text(bid):&lt;br /&gt;
            return _refuse(&amp;quot;history: block_id is not a name&amp;quot;)&lt;br /&gt;
        if bid in ids:&lt;br /&gt;
            return _refuse(&amp;quot;history: duplicate block &amp;quot; + bid)&lt;br /&gt;
        c = b.get(&amp;quot;canary&amp;quot;)&lt;br /&gt;
        if c is not None and c not in CANARY_VALUES:&lt;br /&gt;
            return _refuse(&amp;quot;history: block &amp;quot; + bid + &amp;quot;: canary is not null, PASS or FAIL&amp;quot;)&lt;br /&gt;
        ids.append(bid)&lt;br /&gt;
    if adm not in ids:&lt;br /&gt;
        return _refuse(&amp;quot;history: admission block &amp;quot; + adm + &amp;quot; is not in blocks&amp;quot;)&lt;br /&gt;
    fi = len(blocks) - 1&lt;br /&gt;
    if blocks[fi].get(&amp;quot;canary&amp;quot;) != &amp;quot;FAIL&amp;quot;:&lt;br /&gt;
        return _refuse(&amp;quot;history: the last block is not the failing block&amp;quot;)&lt;br /&gt;
    ai = ids.index(adm)&lt;br /&gt;
    passes, anchor = 0, None&lt;br /&gt;
    i = fi - 1&lt;br /&gt;
    while i &amp;gt;= ai:                                # the failing block excluded; the admission block included&lt;br /&gt;
        c = blocks[i].get(&amp;quot;canary&amp;quot;)&lt;br /&gt;
        if c == &amp;quot;FAIL&amp;quot;:&lt;br /&gt;
            return _refuse(&amp;quot;history: block &amp;quot; + ids[i] + &amp;quot; failed a canary inside the scope; an earlier failure is its own hold&amp;quot;)&lt;br /&gt;
        if c == &amp;quot;PASS&amp;quot;:&lt;br /&gt;
            passes += 1&lt;br /&gt;
            if passes == lookback_passes:&lt;br /&gt;
                anchor = i&lt;br /&gt;
                break&lt;br /&gt;
        i -= 1&lt;br /&gt;
    if anchor is None:&lt;br /&gt;
        kind, start = &amp;quot;ADMISSION&amp;quot;, ai&lt;br /&gt;
    else:&lt;br /&gt;
        kind, start = &amp;quot;PASS&amp;quot;, anchor&lt;br /&gt;
    return [&amp;quot;OK&amp;quot;, ids[start:fi + 1], kind, ids[start], passes]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ---- records -----------------------------------------------------------------------&lt;br /&gt;
def _read_records(records):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;(by_id, None) or (None, reason).&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    if not Z._list(records):&lt;br /&gt;
        return None, &amp;quot;records is not a list&amp;quot;&lt;br /&gt;
    by = {}&lt;br /&gt;
    for r in records:&lt;br /&gt;
        if not Z._obj(r):&lt;br /&gt;
            return None, &amp;quot;records: entry is not an object&amp;quot;&lt;br /&gt;
        rid = r.get(&amp;quot;id&amp;quot;)&lt;br /&gt;
        if not _is_text(rid):&lt;br /&gt;
            return None, &amp;quot;records: id is not a name&amp;quot;&lt;br /&gt;
        if rid in by:&lt;br /&gt;
            return None, &amp;quot;records: duplicate id &amp;quot; + rid&lt;br /&gt;
        for f in RECORD_TEXT_FIELDS:&lt;br /&gt;
            if not _is_text(r.get(f)):&lt;br /&gt;
                return None, &amp;quot;records: &amp;quot; + rid + &amp;quot;: &amp;quot; + f + &amp;quot; is not a name&amp;quot;&lt;br /&gt;
        for f in RECORD_LIST_FIELDS:&lt;br /&gt;
            if _text_list(r.get(f, [])) is None:&lt;br /&gt;
                return None, &amp;quot;records: &amp;quot; + rid + &amp;quot;: &amp;quot; + f + &amp;quot; is not a list of names&amp;quot;&lt;br /&gt;
        for f in RECORD_OPTIONAL_FIELDS:&lt;br /&gt;
            if f in r and not _is_text(r[f]):&lt;br /&gt;
                return None, &amp;quot;records: &amp;quot; + rid + &amp;quot;: &amp;quot; + f + &amp;quot; is not a name&amp;quot;&lt;br /&gt;
        by[rid] = r&lt;br /&gt;
    return by, None&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def _seed_ids(by, account, blocks):&lt;br /&gt;
    bset = set(blocks)&lt;br /&gt;
    out = []&lt;br /&gt;
    for rid in sorted(by):&lt;br /&gt;
        r = by[rid]&lt;br /&gt;
        if r[&amp;quot;author&amp;quot;] == account and r[&amp;quot;block_id&amp;quot;] in bset:&lt;br /&gt;
            out.append(rid)&lt;br /&gt;
        elif r[&amp;quot;kind&amp;quot;] == &amp;quot;CORROBORATION&amp;quot; and r.get(&amp;quot;supplied_by&amp;quot;, r[&amp;quot;author&amp;quot;]) == account \&lt;br /&gt;
                and r[&amp;quot;block_id&amp;quot;] in bset:&lt;br /&gt;
            out.append(rid)&lt;br /&gt;
        elif r.get(&amp;quot;vetted_by&amp;quot;) == account and r.get(&amp;quot;vetted_in&amp;quot;, r[&amp;quot;block_id&amp;quot;]) in bset:&lt;br /&gt;
            out.append(rid)&lt;br /&gt;
    return out&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def _propagate(by, seed_ids):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;The seeds plus every record whose citations or ASSUMPTIONS closure&lt;br /&gt;
    reaches one, over reverse edges; a visited set guards cycles.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    rev = dict((rid, []) for rid in by)&lt;br /&gt;
    for rid in sorted(by):&lt;br /&gt;
        for dep in list(by[rid].get(&amp;quot;cites&amp;quot;, [])) + list(by[rid].get(&amp;quot;assumptions&amp;quot;, [])):&lt;br /&gt;
            if dep in rev:&lt;br /&gt;
                rev[dep].append(rid)&lt;br /&gt;
    held = set()&lt;br /&gt;
    stack = list(seed_ids)&lt;br /&gt;
    while stack:&lt;br /&gt;
        cur = stack.pop()&lt;br /&gt;
        if cur in held:&lt;br /&gt;
            continue&lt;br /&gt;
        held.add(cur)&lt;br /&gt;
        stack.extend(rev[cur])&lt;br /&gt;
    return held&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def held_closure(records, seeds):&lt;br /&gt;
    by, err = _read_records(records)&lt;br /&gt;
    if err is not None:&lt;br /&gt;
        return _refuse(err)&lt;br /&gt;
    if not Z._obj(seeds):&lt;br /&gt;
        return _refuse(&amp;quot;seeds is not an object&amp;quot;)&lt;br /&gt;
    account = seeds.get(&amp;quot;account&amp;quot;)&lt;br /&gt;
    if not _is_text(account):&lt;br /&gt;
        return _refuse(&amp;quot;seeds: account is not a name&amp;quot;)&lt;br /&gt;
    blocks = _text_list(seeds.get(&amp;quot;blocks&amp;quot;))&lt;br /&gt;
    if blocks is None:&lt;br /&gt;
        return _refuse(&amp;quot;seeds: blocks is not a list of names&amp;quot;)&lt;br /&gt;
    sids = _seed_ids(by, account, blocks)&lt;br /&gt;
    held = _propagate(by, sids)&lt;br /&gt;
    pairs = [[rid, by[rid][&amp;quot;status&amp;quot;]] for rid in sorted(held)]&lt;br /&gt;
    return [&amp;quot;OK&amp;quot;, pairs, sids]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ---- the reserved range ----------------------------------------------------------------&lt;br /&gt;
def tpx_allocate(rng):&lt;br /&gt;
    if not Z._obj(rng):&lt;br /&gt;
        return _refuse(&amp;quot;range is not an object&amp;quot;)&lt;br /&gt;
    prefix = rng.get(&amp;quot;prefix&amp;quot;)&lt;br /&gt;
    if not Z._is_ident(prefix):&lt;br /&gt;
        return _refuse(&amp;quot;range: prefix is not an identifier&amp;quot;)&lt;br /&gt;
    low, high, nxt = rng.get(&amp;quot;low&amp;quot;), rng.get(&amp;quot;high&amp;quot;), rng.get(&amp;quot;next&amp;quot;)&lt;br /&gt;
    if not (_is_int(low) and _is_int(high) and low &amp;gt;= 1 and low &amp;lt;= high):&lt;br /&gt;
        return _refuse(&amp;quot;range: low and high are not integers with 1 &amp;lt;= low &amp;lt;= high&amp;quot;)&lt;br /&gt;
    if not _is_int(nxt) or nxt &amp;lt; low:&lt;br /&gt;
        return _refuse(&amp;quot;range: next is not an integer at or above low&amp;quot;)&lt;br /&gt;
    if nxt &amp;gt; high:&lt;br /&gt;
        return _refuse(&amp;quot;range: the reserved range &amp;quot; + prefix + &amp;quot; &amp;quot; + str(low) + &amp;quot;-&amp;quot; + str(high) + &amp;quot; is exhausted&amp;quot;)&lt;br /&gt;
    return [&amp;quot;OK&amp;quot;, prefix + &amp;quot;-&amp;quot; + str(nxt), [prefix, low, high, nxt + 1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ---- HOLD --------------------------------------------------------------------------------&lt;br /&gt;
def _read_pairs(held):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Sorted [[id, status], ...] or a reason string.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    if not Z._list(held):&lt;br /&gt;
        return &amp;quot;held is not a list&amp;quot;&lt;br /&gt;
    out, ids = [], set()&lt;br /&gt;
    for p in held:&lt;br /&gt;
        if not Z._list(p) or len(p) != 2 or not _is_text(p[0]) or not _is_text(p[1]):&lt;br /&gt;
            return &amp;quot;held: entry is not [id, prior_status]&amp;quot;&lt;br /&gt;
        if p[0] in ids:&lt;br /&gt;
            return &amp;quot;held: duplicate id &amp;quot; + p[0]&lt;br /&gt;
        ids.add(p[0])&lt;br /&gt;
        out.append([p[0], p[1]])&lt;br /&gt;
    out.sort(key=lambda p: p[0])&lt;br /&gt;
    return out&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def _read_cause(cause):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;The validated cause, or a reason string.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    if not Z._obj(cause):&lt;br /&gt;
        return &amp;quot;cause is not an object&amp;quot;&lt;br /&gt;
    for f in (&amp;quot;canary_id&amp;quot;, &amp;quot;account&amp;quot;, &amp;quot;snapshot&amp;quot;, &amp;quot;failing_block&amp;quot;, &amp;quot;anchor_kind&amp;quot;, &amp;quot;anchor_block&amp;quot;):&lt;br /&gt;
        if not _is_text(cause.get(f)):&lt;br /&gt;
            return &amp;quot;cause: &amp;quot; + f + &amp;quot; is not a name&amp;quot;&lt;br /&gt;
    if cause[&amp;quot;anchor_kind&amp;quot;] not in ANCHOR_KINDS:&lt;br /&gt;
        return &amp;quot;cause: anchor_kind is not PASS or ADMISSION&amp;quot;&lt;br /&gt;
    lb = cause.get(&amp;quot;lookback_passes&amp;quot;)&lt;br /&gt;
    if not _is_int(lb) or lb &amp;lt; 1:&lt;br /&gt;
        return &amp;quot;cause: lookback_passes is not an integer of at least 1&amp;quot;&lt;br /&gt;
    hb = _text_list(cause.get(&amp;quot;held_blocks&amp;quot;))&lt;br /&gt;
    if hb is None or not hb or not _unique(hb):&lt;br /&gt;
        return &amp;quot;cause: held_blocks is not a non-empty list of distinct names&amp;quot;&lt;br /&gt;
    if hb[-1] != cause[&amp;quot;failing_block&amp;quot;]:&lt;br /&gt;
        return &amp;quot;cause: failing_block is not the last held block&amp;quot;&lt;br /&gt;
    if hb[0] != cause[&amp;quot;anchor_block&amp;quot;]:&lt;br /&gt;
        return &amp;quot;cause: anchor_block is not the first held block&amp;quot;&lt;br /&gt;
    return cause&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def _read_biblio(biblio):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Sorted [[bib_id, check], ...] or a reason string (0.2.0, D171 (j)).&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    if not Z._list(biblio):&lt;br /&gt;
        return &amp;quot;biblio is not a list&amp;quot;&lt;br /&gt;
    out, ids = [], set()&lt;br /&gt;
    for p in biblio:&lt;br /&gt;
        if not Z._list(p) or len(p) != 2 or not _is_text(p[0]) or not _is_text(p[1]):&lt;br /&gt;
            return &amp;quot;biblio: entry is not [bib_id, check]&amp;quot;&lt;br /&gt;
        if p[1] == CHECK_CONFIRMED:&lt;br /&gt;
            return &amp;quot;biblio: entry &amp;quot; + p[0] + &amp;quot; is CONFIRMED; the list holds what is not&amp;quot;&lt;br /&gt;
        if p[0] in ids:&lt;br /&gt;
            return &amp;quot;biblio: duplicate entry &amp;quot; + p[0]&lt;br /&gt;
        ids.add(p[0])&lt;br /&gt;
        out.append([p[0], p[1]])&lt;br /&gt;
    out.sort(key=lambda p: p[0])&lt;br /&gt;
    return out&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def _hold_fields(cause, seeds, pairs, biblio):&lt;br /&gt;
    hb = cause[&amp;quot;held_blocks&amp;quot;]&lt;br /&gt;
    fields = [HOLD_TAG, HOLD_FORM, cause[&amp;quot;canary_id&amp;quot;], cause[&amp;quot;account&amp;quot;], cause[&amp;quot;snapshot&amp;quot;],&lt;br /&gt;
              cause[&amp;quot;failing_block&amp;quot;], cause[&amp;quot;anchor_kind&amp;quot;], cause[&amp;quot;anchor_block&amp;quot;],&lt;br /&gt;
              cause[&amp;quot;lookback_passes&amp;quot;], len(hb)] + list(hb) + [len(seeds)] + list(seeds) + [len(pairs)]&lt;br /&gt;
    for p in pairs:&lt;br /&gt;
        fields += [p[0], p[1]]&lt;br /&gt;
    fields.append(len(biblio))&lt;br /&gt;
    for p in biblio:&lt;br /&gt;
        fields += [p[0], p[1]]&lt;br /&gt;
    return fields&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def _hold_parts(cause, seeds, held, biblio):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;(cause, sorted seeds, sorted pairs, sorted biblio) or a reason string.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    c = _read_cause(cause)&lt;br /&gt;
    if isinstance(c, str):&lt;br /&gt;
        return c&lt;br /&gt;
    s = _text_list(seeds)&lt;br /&gt;
    if s is None or not _unique(s):&lt;br /&gt;
        return &amp;quot;seeds is not a list of distinct names&amp;quot;&lt;br /&gt;
    pairs = _read_pairs(held)&lt;br /&gt;
    if isinstance(pairs, str):&lt;br /&gt;
        return pairs&lt;br /&gt;
    ids = set(p[0] for p in pairs)&lt;br /&gt;
    for x in s:&lt;br /&gt;
        if x not in ids:&lt;br /&gt;
            return &amp;quot;seed &amp;quot; + x + &amp;quot; is not in the held list&amp;quot;&lt;br /&gt;
    b = _read_biblio(biblio)&lt;br /&gt;
    if isinstance(b, str):&lt;br /&gt;
        return b&lt;br /&gt;
    return c, sorted(s), pairs, b&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def hold_preimage(cause, seeds, held, biblio):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;The exact bytes the HOLD digest covers, as text (auditable).&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    parts = _hold_parts(cause, seeds, held, biblio)&lt;br /&gt;
    if isinstance(parts, str):&lt;br /&gt;
        return _refuse(parts)&lt;br /&gt;
    c, s, pairs, b = parts&lt;br /&gt;
    return [&amp;quot;OK&amp;quot;, G.preimage_fields(_hold_fields(c, s, pairs, b)).decode(&amp;quot;utf-8&amp;quot;)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def hold_record(hold_id, cause, seeds, held, biblio):&lt;br /&gt;
    if not _is_text(hold_id):&lt;br /&gt;
        return _refuse(&amp;quot;hold_id is not a name&amp;quot;)&lt;br /&gt;
    parts = _hold_parts(cause, seeds, held, biblio)&lt;br /&gt;
    if isinstance(parts, str):&lt;br /&gt;
        return _refuse(parts)&lt;br /&gt;
    c, s, pairs, b = parts&lt;br /&gt;
    if not pairs:&lt;br /&gt;
        return _refuse(&amp;quot;nothing to hold: the held list is empty&amp;quot;)&lt;br /&gt;
    digest = G.digest_fields(_hold_fields(c, s, pairs, b))&lt;br /&gt;
    return [&amp;quot;OK&amp;quot;, [hold_id, &amp;quot;HOLD&amp;quot;, c[&amp;quot;canary_id&amp;quot;], c[&amp;quot;account&amp;quot;], c[&amp;quot;snapshot&amp;quot;], c[&amp;quot;failing_block&amp;quot;],&lt;br /&gt;
                   c[&amp;quot;anchor_kind&amp;quot;], c[&amp;quot;anchor_block&amp;quot;], c[&amp;quot;lookback_passes&amp;quot;], list(c[&amp;quot;held_blocks&amp;quot;]),&lt;br /&gt;
                   s, pairs, b, digest]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ---- RELEASE --------------------------------------------------------------------------------&lt;br /&gt;
def release_record(release_id, hold, reproduction, records):&lt;br /&gt;
    if not _is_text(release_id):&lt;br /&gt;
        return _refuse(&amp;quot;release_id is not a name&amp;quot;)&lt;br /&gt;
    if not Z._obj(hold):&lt;br /&gt;
        return _refuse(&amp;quot;hold is not an object&amp;quot;)&lt;br /&gt;
    for f in HOLD_FIELDS:&lt;br /&gt;
        if f not in hold:&lt;br /&gt;
            return _refuse(&amp;quot;hold: missing field &amp;quot; + f)&lt;br /&gt;
    if not _is_text(hold[&amp;quot;hold_id&amp;quot;]):&lt;br /&gt;
        return _refuse(&amp;quot;hold: hold_id is not a name&amp;quot;)&lt;br /&gt;
    parts = _hold_parts(hold, hold[&amp;quot;seeds&amp;quot;], hold[&amp;quot;held&amp;quot;], hold[&amp;quot;biblio&amp;quot;])&lt;br /&gt;
    if isinstance(parts, str):&lt;br /&gt;
        return _refuse(&amp;quot;hold: &amp;quot; + parts)&lt;br /&gt;
    c, seeds, pairs, biblio = parts&lt;br /&gt;
    if not pairs:&lt;br /&gt;
        return _refuse(&amp;quot;hold: the held list is empty&amp;quot;)&lt;br /&gt;
    if hold[&amp;quot;digest&amp;quot;] != G.digest_fields(_hold_fields(c, seeds, pairs, biblio)):&lt;br /&gt;
        return _refuse(&amp;quot;hold: digest does not match its fields&amp;quot;)&lt;br /&gt;
    if not Z._obj(reproduction):&lt;br /&gt;
        return _refuse(&amp;quot;reproduction is not an object&amp;quot;)&lt;br /&gt;
    kind = reproduction.get(&amp;quot;kind&amp;quot;)&lt;br /&gt;
    if kind not in REPRODUCTION_KINDS:&lt;br /&gt;
        return _refuse(&amp;quot;reproduction: kind is not REPRODUCTION or LEDGER_MATCH&amp;quot;)&lt;br /&gt;
    if not _is_text(reproduction.get(&amp;quot;id&amp;quot;)):&lt;br /&gt;
        return _refuse(&amp;quot;reproduction: id is not a name&amp;quot;)&lt;br /&gt;
    ind = reproduction.get(&amp;quot;independence&amp;quot;)&lt;br /&gt;
    if not Z._obj(ind):&lt;br /&gt;
        return _refuse(&amp;quot;reproduction: independence is not an object&amp;quot;)&lt;br /&gt;
    for f in (&amp;quot;account&amp;quot;, &amp;quot;snapshot&amp;quot;, &amp;quot;origin&amp;quot;):&lt;br /&gt;
        if not _is_text(ind.get(f)):&lt;br /&gt;
            return _refuse(&amp;quot;reproduction: independence &amp;quot; + f + &amp;quot; is not a name&amp;quot;)&lt;br /&gt;
    if &amp;quot;same_model&amp;quot; in ind and not isinstance(ind[&amp;quot;same_model&amp;quot;], bool):&lt;br /&gt;
        return _refuse(&amp;quot;reproduction: independence same_model is not a boolean&amp;quot;)&lt;br /&gt;
    matched = _text_list(reproduction.get(&amp;quot;matched&amp;quot;))&lt;br /&gt;
    if matched is None or not _unique(matched):&lt;br /&gt;
        return _refuse(&amp;quot;reproduction: matched is not a list of distinct names&amp;quot;)&lt;br /&gt;
    # eligibility (D111.1; D42): not the failed account, not SAME-MODEL, a REPRODUCTION block&lt;br /&gt;
    if ind[&amp;quot;account&amp;quot;] == c[&amp;quot;account&amp;quot;]:&lt;br /&gt;
        return _refuse(&amp;quot;reproduction by the held account is not independent&amp;quot;)&lt;br /&gt;
    if ind.get(&amp;quot;same_model&amp;quot;) is True or ind[&amp;quot;snapshot&amp;quot;] == c[&amp;quot;snapshot&amp;quot;]:&lt;br /&gt;
        return _refuse(&amp;quot;reproduction is SAME-MODEL&amp;quot;)&lt;br /&gt;
    if ind[&amp;quot;origin&amp;quot;] != ORIGIN_REPRODUCTION:&lt;br /&gt;
        return _refuse(&amp;quot;reproduction origin is not REPRODUCTION BLOCK&amp;quot;)&lt;br /&gt;
    held_ids = set(p[0] for p in pairs)&lt;br /&gt;
    for m in matched:&lt;br /&gt;
        if m not in held_ids:&lt;br /&gt;
            return _refuse(&amp;quot;matched record &amp;quot; + m + &amp;quot; is not in the hold&amp;quot;)&lt;br /&gt;
    by, err = _read_records(records)&lt;br /&gt;
    if err is not None:&lt;br /&gt;
        return _refuse(err)&lt;br /&gt;
    for rid in sorted(held_ids):&lt;br /&gt;
        if rid not in by:&lt;br /&gt;
            return _refuse(&amp;quot;held record &amp;quot; + rid + &amp;quot; is not in records&amp;quot;)&lt;br /&gt;
    remaining = [s for s in seeds if s not in matched]&lt;br /&gt;
    still = _propagate(by, remaining) &amp;amp; held_ids&lt;br /&gt;
    released = sorted(held_ids - still)&lt;br /&gt;
    if not released:&lt;br /&gt;
        return _refuse(&amp;quot;no held record is released by this reproduction&amp;quot;)&lt;br /&gt;
    restored = [[p[0], p[1]] for p in pairs if p[0] not in still]&lt;br /&gt;
    still_sorted = sorted(still)&lt;br /&gt;
    fields = [RELEASE_TAG, HOLD_FORM, hold[&amp;quot;hold_id&amp;quot;], hold[&amp;quot;digest&amp;quot;], kind, reproduction[&amp;quot;id&amp;quot;],&lt;br /&gt;
              ind[&amp;quot;account&amp;quot;], ind[&amp;quot;snapshot&amp;quot;], len(restored)]&lt;br /&gt;
    for p in restored:&lt;br /&gt;
        fields += [p[0], p[1]]&lt;br /&gt;
    fields += [len(still_sorted)] + still_sorted + [len(biblio)]&lt;br /&gt;
    for p in biblio:&lt;br /&gt;
        fields += [p[0], p[1]]&lt;br /&gt;
    digest = G.digest_fields(fields)&lt;br /&gt;
    return [&amp;quot;OK&amp;quot;, [release_id, &amp;quot;RELEASE&amp;quot;, hold[&amp;quot;hold_id&amp;quot;], hold[&amp;quot;digest&amp;quot;], kind, reproduction[&amp;quot;id&amp;quot;],&lt;br /&gt;
                   ind[&amp;quot;account&amp;quot;], ind[&amp;quot;snapshot&amp;quot;], restored, still_sorted, biblio, digest]]&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>BFP Rauch</name></author>
	</entry>
</feed>