File size: 140,677 Bytes
ed26ce9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
"""Officer-facing legal wording and routing that lives in CODE, registered for
the pre-deploy review gate (verifier, 2026-09-12; governing principle 1).

Legal characterisations belong in data/curated/*.json, where the review gate
(data/curated/review_state.json + tools/predeploy.py) holds them until the
maintainer signs off. Some legal text and routing live in code instead -- the
allegation, removal-path, s. 44, family, IAD and fee lines, the tie map, the
publisher labels, the rehabilitation methodology and caveats, the s. 17 and
single-occurrence rules. A composed release ships main's CODE, so without
this registry that text would reach the Space with no approval step.

tools/predeploy.py reads REVIEWED from the deploy tree (with `ast`, never by
importing it), fingerprints each named top-level assignment or function in
that tree (its AST, docstrings dropped -- formatting and comments do not
count, words and logic do) TOGETHER WITH every top-level canlex definition it
reaches (the names its body uses, in its own module or imported from another
canlex module, transitively -- wave 2 verifier: a change to a helper such as a
unit table or a negation window must hold the registered name relying on it)
and compares it with the same name at the approved-code commit recorded in
data/curated/review_state.json ("approved_code"). A name that is new or
differs is HELD (the gate names the reached definitions that changed), and
the review check fails unless the maintainer approves it (record the
reviewed commit: `python tools/predeploy.py --print-review-state <commit>`)
or the deploy is run with --allow-held. tests/test_reviewed_code.py checks
that every entry names a top-level definition that exists, and that every
definition a registered name reaches is classified: registered here if it
carries legal wording or routing, else listed in PLUMBING below.

Add an entry when new officer-facing legal wording or routing goes into code.
Each entry: (repo-relative path, top-level name, why it is legal content).
"""

REVIEWED = (
    # the screening memo's allegation and next-steps block (roadmap T1.7)
    ("canlex/server.py", "_ALLEGATION", "verbatim IRPA s. 36 allegation wording"),
    ("canlex/server.py", "_allegation_lines", "which paragraph is drafted; the no-allegation rules"),
    ("canlex/server.py", "_REMOVAL_FN", "removal path for a foreign national (IRPR ss. 228, 229, 42)"),
    ("canlex/server.py", "_REMOVAL_PR", "removal path for a permanent resident (IRPA s. 44(2))"),
    ("canlex/server.py", "_S44_NOTE", "s. 44 discretion note (Cha; ENF 5)"),
    ("canlex/server.py", "_PARDON_LINE", "foreign-relief and previous-removal pointers"),
    ("canlex/server.py", "_family_line", "IRPA s. 42 / IRPR s. 23 family-member line"),
    ("canlex/server.py", "_next_steps", "removal, TRP, fee, IAD routing of the memo"),
    ("canlex/server.py", "FEE_PATTERNS", "which IRPR fee is quoted for which ground"),
    ("canlex/server.py", "_ASSUMED_TEXT", "what the chain assumes when a fact is missing"),
    ("canlex/server.py", "_YOUTH_ENTRIES",
     "the youth dispositions read as the analogue of s. 17's Young Offenders Act exception "
     "(H3: on the clock for the headline, the exception as a reading)"),
    ("canlex/server.py", "_DEFAULT_ELEMENTS_QUESTION", "the default elements question"),
    ("canlex/server.py", "_other_candidate_line", "how a second pairing is presented"),
    ("canlex/server.py", "_tran_needs", "the offence-date question for a straddled maximum"),
    ("canlex/server.py", "_pairing_block", "the Tran and elements wording around each pairing"),
    # limb-aware Tran histories, in-force dates, point-in-time floor (T1.13, T3.1)
    ("canlex/server.py", "_resolve_pairing", "which limb readings are resolved; in-force and floor flags"),
    ("canlex/server.py", "_resolve_limb", "the Tran, value, schedule, attempt and elements rules for one limb"),
    ("canlex/server.py", "_combine_limbs", "settled vs 'limb-open' when the record's words select no limb"),
    ("canlex/server.py", "_limb_lines", "how the candidate provisions and readings are presented"),
    ("canlex/server.py", "_not_in_force_line", "provision not in force at commission: the two readings"),
    ("canlex/server.py", "_nif_entry",
     "not in force at commission: which reading the result follows; each reading's branch"),
    ("canlex/server.py", "_open_reason", "why a result is not settled (date, limb, quantity)"),
    ("canlex/server.py", "_reading", "how each open reading is named in the memo"),
    ("canlex/server.py", "canlex_screen_record",
     "step-3 routing, 'not reached' rules, bottom line, the organization fact and s. 37 block"),
    ("canlex/server.py", "canlex_screen_history",
     "record-level count, s. 17 clock (youth exclusion, undated convictions), deeming "
     "answer, record-level s. 37 block"),
    ("canlex/server.py", "us_record_screening",
     "the guided screening prompt: routing to canlex_transborder and the organization fact"),
    # organized criminality, IRPA s. 37 (roadmap T2.5)
    ("canlex/server.py", "_S37_GROUNDS", "s. 37(1)(a)/(b) wording and the elements to establish"),
    ("canlex/server.py", "_S37_AUTHORITIES", "Sittampalam and B010 pointers"),
    ("canlex/server.py", "_S37_ORG_CONDITION", "when s. 37(1)(a) is conditional"),
    ("canlex/server.py", "_s37_consequences",
     "no conviction, no rehabilitation, s. 42.1 FN-only, no IAD appeal, s. 42(2), R229(1)(e)"),
    ("canlex/server.py", "_s37_flags", "which s. 37 paragraph a pairing or the facts raise"),
    ("canlex/server.py", "_s37_text", "how the s. 37 block is presented"),
    ("canlex/server.py", "_s37_block", "the s. 37 block and its CANLEX_RESULT value"),
    # transborder criminality, IRPA s. 36(2.1) (roadmap T2.1)
    ("canlex/server.py", "canlex_transborder", "the transborder memo, bottom line and result"),
    ("canlex/server.py", "AMENDED_REFERENCES", "the A36(2)(d) repealed-provision note on guidance"),
    ("canlex/server.py", "_amended_notes", "where the repealed-provision note is shown"),
    ("canlex/transborder.py", "R19_ACTS", "the six Acts IRPR s. 19(1) names; open class vs table"),
    ("canlex/transborder.py", "GOODS", "the IRPR s. 19(1)(d)-(e) goods classes"),
    ("canlex/transborder.py", "MD_ORDERABLE", "the IRPR s. 228(1)(a.01)(i)-(v) delegate offences"),
    ("canlex/transborder.py", "S36_2_1", "s. 36(2.1) quotation"),
    ("canlex/transborder.py", "ALLEGATION_2_1", "s. 36(2.1) allegation wording"),
    ("canlex/transborder.py", "R19_2", "IRPR s. 19(2) hybrid deeming quotation"),
    ("canlex/transborder.py", "S36_3_C", "s. 36(3)(c) quotation (no rehabilitation)"),
    ("canlex/transborder.py", "S36_3_E", "s. 36(3)(e) quotation"),
    ("canlex/transborder.py", "S36_3_E_I", "s. 36(3)(e)(i) quotation (contraventions)"),
    ("canlex/transborder.py", "S36_3_B", "s. 36(3)(b) quotation (final acquittal)"),
    ("canlex/transborder.py", "S36_3_B_CONV", "s. 36(3)(b) quotation (based on a conviction)"),
    ("canlex/transborder.py", "ACQUITTAL_NOTE",
     "a final acquittal and s. 36(2.1): both readings, not settled"),
    ("canlex/transborder.py", "R228_OPENING", "IRPR s. 228(1) no-other-ground condition"),
    ("canlex/transborder.py", "R228_4_A", "IRPR s. 228(4)(a) unaccompanied-minor exception"),
    ("canlex/transborder.py", "R229_D1", "IRPR s. 229(1)(d.1) quotation"),
    ("canlex/transborder.py", "CA_8_1_A", "Contraventions Act s. 8(1)(a) quotation"),
    ("canlex/transborder.py", "CR_S1", "Contraventions Regulations s. 1 quotation"),
    ("canlex/transborder.py", "GUIDANCE_CURRENT", "ENF 5 / ENF 6 (2025) pointers"),
    ("canlex/transborder.py", "GUIDANCE_STALE", "the old A36(2)(d) and 'present tense' guidance"),
    ("canlex/transborder.py", "TABLE_HELD", "what the tool says when the (c)-(g) table is absent"),
    ("canlex/transborder.py", "resolve_act", "which Act the officer's words name"),
    # the code audit of 2026-09-21 (HELD): an Act named inside a longer spelling, a
    # chapter cite or a trailing 's. N' is still one of the six; genuinely other Acts stay 'other'
    ("canlex/transborder.py", "act_and_section",
     "which of the six Acts a spelling names (containment), and the section it carries"),
    ("canlex/transborder.py", "_ACT_CITE", "the chapter citations stripped from an Act's spelling"),
    ("canlex/transborder.py", "_ACT_TRAILING_SECTION", "the trailing section an Act's spelling carries"),
    ("canlex/transborder.py", "_ACT_SUBSECTION",
     "the subsection or paragraph a trailing section carries (audit follow-up 2026-09-21)"),
    ("canlex/transborder.py", "_ACT_CODES", "the short Act codes matched as whole tokens only"),
    ("canlex/transborder.py", "mode_from_pairing", "the mode read from a curated pairing"),
    ("canlex/transborder.py", "pairing_act", "the Act read from a curated pairing"),
    ("canlex/transborder.py", "_schedule_act", "which Act a contraventions schedule is for"),
    ("canlex/transborder.py", "contravention_schedules",
     "which Acts the contraventions schedules are for (one per schedule), the count printed"),
    ("canlex/transborder.py", "contravention_check", "the s. 36(3)(e)(i) carve-out rule and text"),
    ("canlex/transborder.py", "_open_class", "the s. 19(1)(a)/(b) mode rule"),
    ("canlex/transborder.py", "_md", "the s. 228(1)(a.01) delegate rule"),
    ("canlex/transborder.py", "_from_table", "how the (c)-(g) table answers, readings and needs"),
    ("canlex/transborder.py", "assess", "the transborder result: prescribed, branch, removal"),
    ("canlex/transborder.py", "render", "the transborder memo text and allegation"),
    ("canlex/transborder.py", "bottom_line", "the transborder bottom line"),
    # source labels and subsequent history (roadmap T1.10, T1.11)
    ("canlex/server.py", "_GUIDANCE_FORCE", "legal-force label of administrative guidance"),
    ("canlex/server.py", "_PUBLISHERS", "publisher and legal-force labels"),
    ("canlex/server.py", "_NEUTRAL_PUBLISHER", "label of an unmapped guidance source"),
    ("canlex/server.py", "SUPERSEDED_CITES", "the Saini (FCA) subsequent-history note"),
    # screening rules (roadmap T1.3, T1.4; critic single-occurrence rule)
    ("canlex/screening.py", "TIE_FACTS", "which fact decides each tie, and which pairing each answer selects"),
    ("canlex/screening.py", "_GENERIC_TIE_QUESTION", "the question for an unmapped tie"),
    ("canlex/screening.py", "_BRANCH_TEXT", "the s. 36 branch descriptions"),
    ("canlex/screening.py", "branch_for", "the s. 36 branch rule (PR, summary-only, depends)"),
    ("canlex/screening.py", "occurrence_range", "the different-dates-means-separate-occurrences proxy"),
    ("canlex/screening.py", "select_limbs", "which limb a record's words (or amount) select"),
    ("canlex/screening.py", "QUANTITY_LINE_KG", "the former CDSA Schedule VII cannabis amount (3 kg)"),
    ("canlex/screening.py", "QUANTITY_LIMBS", "which side of the quantity line each limb is"),
    ("canlex/screening.py", "quantity_kg", "how an amount is read from the record's text"),
    ("canlex/screening.py", "_AMOUNT_QUALIFIER",
     "a bounded, approximate, ranged, multiplied, per-unit or gross amount leaves the quantity open "
     "(LEGAL-1/2/3, 2026-09-22)"),
    ("canlex/screening.py", "_GROUPED_AMOUNT",
     "a comma followed by three digits is a thousands separator, not a decimal (code audit 2026-09-21)"),
    ("canlex/screening.py", "_GROUP_SEP",
     "the digit-group separators an amount may carry: comma, space, no-break spaces (audit follow-up 2026-09-21)"),
    ("canlex/screening.py", "_GROUP_SEP_RE", "the separators dropped from a grouped amount"),
    ("canlex/screening.py", "_amount_number",
     "how a grouped, decimal or fractional amount becomes a number; a zero denominator is no amount"),
    ("canlex/screening.py", "penalty_at", "the Tran rule: the maximum at commission, limb by limb"),
    ("canlex/screening.py", "PIT_FLOOR_NOTE", "maximum before the point-in-time floor not verified"),
    ("canlex/screening.py", "not_in_force", "when a provision is treated as not in force at commission"),
    ("canlex/screening.py", "CANNABIS_BARE_NOTE", "bare cannabis read as possession"),
    ("canlex/screening.py", "CANNABIS_CONCENTRATE_NOTE", "Cannabis Act Schedule 3 note"),
    ("canlex/screening.py", "UCMJ_NOTE", "when 'Article N' is read as UCMJ"),
    # finality: a decided appeal that left the conviction standing (T2.7 audit)
    ("canlex/screening.py", "APPEAL_UPHELD",
     "'appeal dismissed' / 'affirmed on appeal' is a conviction, not a dismissal or a pending appeal"),
    ("canlex/screening.py", "CONVICTION_UPHELD", "'conviction affirmed' keeps the conviction word"),
    ("canlex/screening.py", "strip_appeal_upheld", "where the decided-appeal phrases are removed"),
    ("canlex/screening.py", "_cue_text", "the words the disposition cues and entries read"),
    # rehabilitation (roadmap T1.8, T1.9, T1.12)
    ("canlex/rehab.py", "EXCEPT_CONTRAVENTION_YCJA", "IRPR s. 18(2) exception clause"),
    ("canlex/rehab.py", "_CONDITIONS", "the s. 18(2) limbs as printed"),
    ("canlex/rehab.py", "_TRP_CAVEAT", "TRP caveat"),
    ("canlex/rehab.py", "CUSTODY_CAVEAT", "six-month limb caveat (Tran; intermittent sentences)"),
    ("canlex/rehab.py", "GUIDE_5312_DIVERGENCE", "where Guide 5312 departs from the Regulations"),
    ("canlex/rehab.py", "_pr_appeal", "IAD appeal rule for a Canadian conviction (s. 64(2))"),
    ("canlex/rehab.py", "assess", "the rehabilitation rules and their explanations"),
    ("canlex/rehab.py", "_assess_canada", "the in-Canada conviction rules"),
    ("canlex/rehab.py", "METHODOLOGY", "canlex://methodology/rehabilitation"),
    # Canadian convictions in the screening tools (roadmap T2.2)
    ("canlex/rehab.py", "CANADA_CURE", "the cure for a Canadian conviction (record suspension only)"),
    ("canlex/rehab.py", "CANADA_SENTENCES", "the Canadian sentences and outcomes the rules distinguish"),
    ("canlex/rehab.py", "_NO_CUSTODY", "sentences read as no term of imprisonment when no months are given"),
    ("canlex/rehab.py", "DISCHARGE_TEXT", "a Canadian discharge is not a conviction (C-46 s. 730(3))"),
    ("canlex/rehab.py", "NOT_CONVICTED_TEXT", "a Canadian charge without a conviction grounds nothing"),
    ("canlex/rehab.py", "CONTRAVENTION_TEXT", "s. 36(3)(e)(i) contraventions"),
    ("canlex/rehab.py", "YOUTH_SENTENCE_TEXT", "s. 36(3)(e)(ii)-(iii) youth sentences; adult sentences not excluded"),
    ("canlex/rehab.py", "RECORD_SUSPENSION_TEXT", "s. 36(3)(b) record suspension"),
    ("canlex/rehab.py", "ACT_OF_PARLIAMENT_NOTE", "provincial offences are not reached by s. 36(1)(a)/(2)(a)"),
    ("canlex/rehab.py", "CONDITIONAL_SENTENCE_NOTE", "a conditional sentence counts as no custody (Tran)"),
    ("canlex/rehab.py", "INTERMITTENT_NOTE", "intermittent sentences are not settled; both readings"),
    ("canlex/rehab.py", "CANADA_REMOVAL_FN", "R228(1)(a) delegate deportation order; R228(4) exceptions"),
    ("canlex/rehab.py", "CANADA_REMOVAL_PR", "ID referral, R229(1)(c), for a PR on s. 36(1)(a)"),
    ("canlex/rehab.py", "CANADA_BRANCH_TEXT", "the Canadian branch descriptions"),
    ("canlex/rehab.py", "_CANADA_STD_BRANCH", "which Canadian branch maps to which screening branch"),
    ("canlex/rehab.py", "_CANADA_SENTENCE_WORDS", "which words name a Canadian sentence or discharge"),
    ("canlex/rehab.py", "_CANADA_RECORD_SUSPENSION", "which words name a record suspension"),
    ("canlex/rehab.py", "_CANADA_NO_CONVICTION", "which words mean no Canadian conviction"),
    ("canlex/rehab.py", "_CANADA_SET_ASIDE", "which words mean a Canadian conviction was set aside"),
    # the code audit of 2026-09-21 (HELD): a refused, pending, revoked or ceased record
    # suspension is no s. 36(3)(b) bar; a negated or refused set-aside leaves the conviction
    ("canlex/rehab.py", "_CANADA_CLAUSE", "where a Canadian record's clauses break"),
    ("canlex/rehab.py", "_CANADA_RS_CLAUSE",
     "where the relief clauses break: a parenthesis stays inside its clause (audit follow-up 2026-09-21)"),
    # G2, the verification fixes of 2026-09-22 (HELD): the relief reader is an ALLOWLIST --
    # one naming clause stands, everything else is not in force or NOT SETTLED
    ("canlex/rehab.py", "_RS_DATE", "the one date or one year a naming clause may carry"),
    ("canlex/rehab.py", "_RS_LOSS_PHRASE", "the losses a keep clause negates (revoked, ceased to have effect)"),
    ("canlex/rehab.py", "_RS_NEG_LOSS", "a negated loss ('has not been revoked')"),
    ("canlex/rehab.py", "_RS_KEEP",
     "the keep clause: 'not revoked or ceased' negates both, 'not revoked and ceased' does not"),
    ("canlex/rehab.py", "_CANADA_RS_KEEP", "the only words after a naming clause that leave it standing"),
    ("canlex/rehab.py", "_CANADA_RS_NAMING",
     "the naming clause: record suspension | pardon | pardoned [granted|ordered|issued|in force] [date]"),
    ("canlex/rehab.py", "_CANADA_RS_CONVICTION",
     "the only disposition words that may precede a naming clause (the conviction words)"),
    ("canlex/rehab.py", "_CANADA_RS_ABBREVIATION",
     "shorthand for a record suspension ('RS'): never stands; the not-in-force note prints (REL-13)"),
    ("canlex/rehab.py", "_CANADA_RS_RELIEF_WORDS",
     "relief words beside a key-only relief that take it away (Parole Board, CRA, prerogative)"),
    ("canlex/rehab.py", "_CANADA_RS_LOSS",
     "loss words beside a key-only relief that take it away (revoked, ceased, rescinded, no longer)"),
    ("canlex/rehab.py", "_CANADA_RS_LATER_OFFENCE",
     "another conviction's words beside a key-only relief take it away (CRA s. 7.2(a))"),
    ("canlex/rehab.py", "_CANADA_RS_YEAR",
     "a year in the disposition's words not before the relief's takes it away"),
    ("canlex/rehab.py", "_CRA_PARDON_LAST_DAY",
     "a 'pardon' dated after 2012-03-12 may be no record suspension (CRA s. 2, s. 4.1; AI-4)"),
    # H2 (2026-09-22): the readings the relief grammar opens instead of settling --
    # G2-REL-B (before the Act), G2-REL-A (an undated pardon), G2-REL-E (an undated
    # record suspension the entry's dates cannot place)
    ("canlex/rehab.py", "_CRA_FIRST_DAY",
     "the first day the corpus can place a Criminal Records Act relief on (G2-REL-B)"),
    ("canlex/rehab.py", "PARDON_UNDATED_TEXT",
     "an UNDATED pardon is NOT SETTLED: its date may fall after 2012-03-12 (CRA ss. 2, 9; G2-REL-A)"),
    ("canlex/rehab.py", "RELIEF_BEFORE_CRA_TEXT",
     "a relief dated before the Act as the corpus carries it is NOT SETTLED, quoting its "
     "s. 1 history line and s. 9 (G2-REL-B)"),
    ("canlex/rehab.py", "RELIEF_UNDATED_TEXT",
     "an undated record suspension on a dated entry is NOT SETTLED, quoting CRA s. 4(1) (G2-REL-E)"),
    ("canlex/rehab.py", "relief_before_cra",
     "whether the relief's date may fall before the Criminal Records Act (G2-REL-B)"),
    ("canlex/rehab.py", "relief_unplaced",
     "an undated relief on an entry that carries a date to place it against (G2-REL-E)"),
    ("canlex/rehab.py", "_S36_3_B_WORDS", "verbatim IRPA s. 36(3)(b) words the relief notes quote"),
    ("canlex/rehab.py", "PARDON_AFTER_2012_TEXT",
     "a pardon dated after 2012-03-12 is NOT SETTLED, quoting CRA ss. 2, 4.1 (definition), 9 and IRPA s. 36(3)(b)"),
    ("canlex/rehab.py", "RELIEF_LATER_CONVICTION_TEXT",
     "a later conviction may have ended the record suspension: NOT SETTLED, quoting CRA ss. 7.2, 7"),
    ("canlex/rehab.py", "RELIEF_OPEN_TEXT", "which note each NOT SETTLED relief reading prints"),
    ("canlex/rehab.py", "_rs_clauses", "how the relief words are cut into clauses"),
    ("canlex/rehab.py", "_rs_naming", "a naming clause stands only with a grant word, a date or 'pardoned'"),
    ("canlex/rehab.py", "_rs_relief_part", "one naming clause followed by keep clauses only"),
    ("canlex/rehab.py", "_rs_when", "the earliest and latest day a relief's date can mean"),
    ("canlex/rehab.py", "relief_reading",
     "the relief words read together (disposition and key): stands only on the grammar (REL-1..10, REL-3)"),
    ("canlex/rehab.py", "relief_dates_stand",
     "a relief dated before the offence or conviction is not this conviction's (REL-11)"),
    ("canlex/rehab.py", "pardon_after_2012", "a bare 'pardon' dated after 2012-03-12 is NOT SETTLED (AI-4)"),
    ("canlex/rehab.py", "_CANADA_RS_PREROGATIVE",
     "which words name a pardon under the royal prerogative of mercy or Criminal Code s. 748"),
    ("canlex/rehab.py", "_CANADA_RS_MERCY", "a prerogative mention counts only beside pardon, mercy or clemency"),
    ("canlex/rehab.py", "PREROGATIVE_PARDON_TEXT",
     "a prerogative pardon is no record suspension: NOT SETTLED, citing CC s. 748(2)/(3) and IRPA s. 36(3)(b)"),
    ("canlex/rehab.py", "_rs_text", "how the relief words are split (a section citation stays in its clause)"),
    ("canlex/rehab.py", "prerogative_pardon", "a prerogative pardon routes to NOT SETTLED, never s. 36(3)(b)"),
    ("canlex/rehab.py", "RECORD_SUSPENSION_NOT_IN_FORCE_TEXT",
     "relief words that do not stand on the grammar: screened as it stands, and how to re-run"),
    ("canlex/rehab.py", "record_suspension_in_force",
     "whether the record suspension the words name stands (s. 36(3)(b)), on the allowlist grammar"),
    ("canlex/rehab.py", "_CANADA_SET_ASIDE_NEGATED", "negation before a set-aside word"),
    ("canlex/rehab.py", "_CANADA_SET_ASIDE_MOTION", "the motion words a refused set-aside binds to"),
    ("canlex/rehab.py", "_CANADA_SET_ASIDE_REFUSED", "the refusal words of a motion to set aside"),
    ("canlex/rehab.py", "_set_aside", "a set-aside that stands: not negated, not a refused motion's"),
    ("canlex/rehab.py", "_no_conviction_words",
     "the charge's own no-conviction words, never a refused motion's 'dismissed'"),
    ("canlex/rehab.py", "_appeal_pending", "an appeal noted that no clause says was decided"),
    ("canlex/rehab.py", "_CANADA_OTHER_COUNTS",
     "no-conviction words that name other counts: the conviction stands"),
    ("canlex/rehab.py", "_CANADA_APPEAL_ALLOWED", "an appeal allowed: conviction not settled"),
    ("canlex/rehab.py", "_LIMB_WORDS", "how the s. 36(1)(a) limbs are named in the either-way line"),
    ("canlex/rehab.py", "_APPEAL_WORDS", "how each IAD appeal reading is named"),
    ("canlex/rehab.py", "either_way_note",
     "an answer every reading settles the same way: the limbs it rests on"),
    # the H3 fixes of 2026-09-22 (S17-INT-1, NEW-1; HELD): the Canadian outcome words --
    # a discharge (CC s. 730(3)) and a YCJA youth sentence (IRPA s. 36(3)(e)(iii)) -- are
    # an ALLOWLIST, settling only as the disposition's own outcome clause
    ("canlex/rehab.py", "_CANADA_DISCHARGE_PHRASE", "the discharge phrases that can settle 'no conviction'"),
    ("canlex/rehab.py", "_CANADA_YOUTH_PHRASE", "the youth-sentence phrase that can settle 'no ground'"),
    ("canlex/rehab.py", "_CANADA_OUTCOME_SPLIT", "where one statement of a Canadian record ends"),
    ("canlex/rehab.py", "_CANADA_DISCHARGE_CLAUSE",
     "the clause a discharge may be: the court's own order and nothing else (CC s. 730(1))"),
    ("canlex/rehab.py", "_CANADA_DISCHARGE_CONTRA",
     "what no other clause may say beside a discharge (convict, revoke, refuse, appeal, "
     "set aside, another count -- CC s. 730(3)(b), s. 730(4))"),
    ("canlex/rehab.py", "_CANADA_YOUTH_CLAUSE",
     "the clause a youth sentence may be: the sentence the young person received"),
    ("canlex/rehab.py", "_CANADA_YOUTH_CONTRA",
     "what no other clause may say beside a youth sentence (refused, set aside, as an adult)"),
    ("canlex/rehab.py", "_CANADA_OUTCOME_ALLOW", "which words are read on the outcome allowlist"),
    ("canlex/rehab.py", "canada_clauses", "a Canadian disposition's clauses, as the allowlists read them"),
    ("canlex/rehab.py", "canada_outcome_stands",
     "whether a discharge or youth-sentence word is the disposition's own outcome"),
    # the J1 fixes of 2026-09-23 (HELD): the five Canadian outcome READINGS that still keyed
    # on a word ANYWHERE -- the NCR verdict (CC s. 672.35), a set-aside, the no-conviction
    # words, an appeal allowed and a new trial (CC s. 686(2), s. 579) -- are an ALLOWLIST too
    ("canlex/rehab.py", "_CANADA_EMPTY_VALUE",
     "a clause that is an empty or negative form value refuses every reading ('NCR: no')"),
    ("canlex/rehab.py", "_CANADA_NCR_CLAUSE",
     "the clause an NCR verdict may be: the verdict itself and nothing else (CC s. 672.35)"),
    ("canlex/rehab.py", "_CANADA_NCR_CONTRA",
     "what no other clause may say beside an NCR verdict (convict, refuse, set aside, "
     "appeal, assessment, another count, a term)"),
    ("canlex/rehab.py", "_CANADA_SET_ASIDE_CLAUSE",
     "the clause a set-aside may be: this conviction quashed, and s. 686(2)'s 'appeal "
     "allowed and the conviction quashed'"),
    ("canlex/rehab.py", "_CANADA_SET_ASIDE_CONTRA",
     "what no other clause may say beside a set-aside (convict, restore, refuse, a motion, "
     "a new trial, another count, a term -- CC s. 686(1)(b), (3))"),
    ("canlex/rehab.py", "_CANADA_NO_CONVICTION_CLAUSE",
     "the clause an acquittal, withdrawal, dismissal or stay may be"),
    ("canlex/rehab.py", "_CANADA_NO_CONVICTION_CONTRA",
     "what no other clause may say beside a no-conviction word (convict, recommence, "
     "another count, a refused motion, a term -- CC s. 579(2))"),
    ("canlex/rehab.py", "_CANADA_APPEAL_ALLOWED_CLAUSE",
     "the clause an appeal allowed may be: the allowance itself, never one as to sentence"),
    ("canlex/rehab.py", "_CANADA_APPEAL_ALLOWED_CONTRA",
     "what no other clause may say beside an appeal allowed (convict, affirm, restore, "
     "as to, in part, another count or file)"),
    ("canlex/rehab.py", "_CANADA_NEW_TRIAL_CLAUSE",
     "the clause a new trial ordered may be (CC s. 686(2)(b))"),
    ("canlex/rehab.py", "_CANADA_NEW_TRIAL_CONTRA",
     "what no other clause may say beside a new trial ordered (convict, refuse, a motion, "
     "another count or file)"),
    ("canlex/rehab.py", "_CANADA_ROUTED_NO_CONVICTION",
     "the routing's own words that mean the charge ended without a conviction"),
    ("canlex/rehab.py", "_CANADA_READING_ALLOW",
     "which Canadian outcome readings are read on the allowlist, and what keeps each"),
    ("canlex/rehab.py", "canada_reading_stands",
     "whether an NCR verdict, a set-aside, a no-conviction word, an appeal allowed or a "
     "new trial is the disposition's own outcome"),
    ("canlex/rehab.py", "_canada_cue_settles",
     "when the shared non-conviction cue table may settle a Canadian entry"),
    # the K1 fixes of 2026-09-23 (HELD): the OTHER clauses beside a settled Canadian
    # outcome are an allowlist too -- every one must be a clause the grammar can place --
    # and the five denylists share one derived floor (CC ss. 686(2)-(4), 579(2), 737, 742.1,
    # 672.54; CRA s. 2.1(1); IRPA s. 36(3)(b))
    ("canlex/rehab.py", "_SENT_UNIT_LONG",
     "the units screening reads a written term in, as the outcome tables read them"),
    ("canlex/rehab.py", "_SENT_UNIT_SHORT",
     "the one-letter units, read only after a number"),
    ("canlex/rehab.py", "_CANADA_TERM_UNIT",
     "a term of imprisonment in any unit the sentence reader knows (a term in weeks was "
     "read by one reader and missed by the other)"),
    ("canlex/rehab.py", "_CANADA_TERM_WRITTEN",
     "a term of imprisonment the record's own words stated, which a routing rewrite may "
     "not silently drop"),
    ("canlex/rehab.py", "_CANADA_SENTENCE_WORD_CONTRA",
     "the Canadian sentence words, as a contradiction of a no-conviction outcome"),
    ("canlex/rehab.py", "_CANADA_TERM_CONTRA",
     "a sentence or ancillary order that can only follow a finding of guilt (CC s. 742.1 "
     "conditional sentence, s. 737 victim surcharge, community service, restitution, DNA, "
     "s. 109 prohibition, SOIRA, forfeiture)"),
    ("canlex/rehab.py", "_CANADA_LIVE_CONTRA",
     "a clause saying the charge has not ended -- warrant, remand, adjournment, next "
     "appearance (CC s. 579(2): stayed proceedings may be recommenced)"),
    ("canlex/rehab.py", "_CANADA_UNDONE_CONTRA",
     "a clause saying the outcome did not survive -- annulled, rescinded, nullified, "
     "revoked, substituted (CC s. 686(3), (4)(b))"),
    ("canlex/rehab.py", "_CANADA_SCOPE_CONTRA",
     "a clause scoped to another count, information, indictment, docket, file or matter "
     "(CC s. 686(1)(b)(i))"),
    ("canlex/rehab.py", "_CANADA_RELIEF_CONTRA",
     "a relief clause, which presupposes the conviction it would suspend (CRA ss. 2.1(1), "
     "4(1), 4.1(1); IRPA s. 36(3)(b))"),
    ("canlex/rehab.py", "_CANADA_SHARED_CONTRA",
     "the floor every one of the five contra tables is a superset of"),
    ("canlex/rehab.py", "_CANADA_DATE_TEXT", "a bare date beside an outcome"),
    ("canlex/rehab.py", "_CANADA_ACT_NAME", "the Acts a Canadian record cites"),
    ("canlex/rehab.py", "_CANADA_SECTION", "a section or paragraph reference"),
    ("canlex/rehab.py", "_CANADA_COURT", "the Canadian courts a record names"),
    ("canlex/rehab.py", "_CANADA_OFFENCE_NAME",
     "a bare offence name beside an outcome; a name this grammar lacks leaves the reading "
     "NOT SETTLED, never settled"),
    ("canlex/rehab.py", "_CANADA_COMPATIBLE_CLAUSE",
     "what a clause BESIDE a settled Canadian outcome may be, and nothing else"),
    ("canlex/rehab.py", "_CANADA_CONVICTION_QUASHED_CLAUSE",
     "the s. 686(2) keep: the CONVICTION quashed, the noun mandatory -- an acquittal or an "
     "NCR verdict set aside is that verdict destroyed (CC ss. 676(1)(a), 686(4)(b))"),
    ("canlex/rehab.py", "_CANADA_REVIEW_BOARD_CLAUSE",
     "the Part XX.1 disposition the court or Review Board makes instead of a sentence "
     "(CC s. 672.54), which is the NCR verdict's own consequence"),
    ("canlex/rehab.py", "canada_disposition", "conviction / discharge / record suspension from a Canadian record"),
    ("canlex/rehab.py", "canada_std_branch", "the screening branch for a Canadian answer"),
    ("canlex/rehab.py", "canada_removal", "the removal path for a Canadian answer"),
    ("canlex/rehab.py", "_READING_WORDS", "how each open Canadian reading is named"),
    ("canlex/rehab.py", "_READING_NEEDS", "the questions a Canadian answer asks"),
    ("canlex/rehab.py", "_INTERMITTENT_NEED", "the intermittent-sentence question"),
    ("canlex/rehab.py", "assess_canadian",
     "discharge, contraventions, youth sentences, record suspension, custody (Tran), readings"),
    ("canlex/server.py", "_CANADA_NOTE", "Canada given to a foreign-record tool: where to screen it"),
    ("canlex/server.py", "CANADA_SCREEN_NOTE", "a Canadian record is screened on s. 36(1)(a)/(2)(a)"),
    ("canlex/server.py", "CANADA_ALSO_CHECK", "the Canadian also-check line (s. 36(2)(a) count, s. 18.1 'solely')"),
    ("canlex/server.py", "_CANADA_PARAMS_IGNORED", "Canadian inputs ignored for a foreign record"),
    ("canlex/server.py", "_canada_offence", "the Canadian maximum and mode: officer first, else the pairing"),
    ("canlex/server.py", "_canada_limbs_text", "how the s. 36(1)(a) limbs are named"),
    ("canlex/server.py", "_canada_allegation", "the s. 36(1)(a)/(2)(a) draft allegation by limb"),
    ("canlex/server.py", "_canada_screen", "the Canadian memo: steps, readings, removal, TRP, cure, bottom line"),
    ("canlex/server.py", "_canada_history_row", "a Canadian entry of screen_history"),
    ("canlex/server.py", "_canada_history_notes", "the record-level Canadian lines of screen_history"),
    # youth at the offence (roadmap T2.6)
    ("canlex/server.py", "YOUTH_STATUTE", "s. 36(3)(e) as statute: Canadian youth dispositions only"),
    ("canlex/server.py", "YOUTH_STATUTE_CANADA", "s. 36(3)(e) applied to a Canadian record"),
    ("canlex/server.py", "YOUTH_POLICY", "the ENF 14 foreign-youth questions, labelled policy"),
    ("canlex/server.py", "UNDER_12", "C-46 s. 13 for a foreign record"),
    ("canlex/server.py", "UNDER_12_CANADA", "C-46 s. 13 for a Canadian record"),
    ("canlex/server.py", "_youth_screen", "the age at the offence, its bands and the YOUTH block"),
    ("canlex/server.py", "_youth_bottom_line", "the youth bottom-line bullets"),
    ("canlex/server.py", "_youth_history_notes", "the record-level YOUTH lines"),
    # finality: convictions in absentia (roadmap T2.7)
    ("canlex/server.py", "ABSENTIA_CLOCK", "no rehabilitation clock for an in-absentia sentence not served"),
    ("canlex/server.py", "_ABSENTIA_RULE", "the rehab_clock value the tools honour"),
    ("canlex/server.py", "_clocks", "which clocks step 3 runs; the in-absentia rule"),
    # the whole record, IRPR s. 18(2) and s. 18.1 limb by limb (roadmap T2.3)
    ("canlex/rehab.py", "RECORD_CLASSES", "the offence classes the limbs distinguish"),
    ("canlex/rehab.py", "S18_CHAPEAU", "IRPR s. 18(2)(a)-(c) chapeaux, verbatim"),
    ("canlex/rehab.py", "S18_1_LIMBS", "IRPR s. 18.1 limbs, verbatim"),
    ("canlex/rehab.py", "HYBRID_READINGS",
     "roadmap DECISION (a): a hybrid equivalent in (iv)/(vi), both readings"),
    ("canlex/rehab.py", "ANCHOR_READINGS",
     "roadmap DECISION (b): the anchor of 'the last N years', both readings"),
    ("canlex/rehab.py", "RECORD_NOTES", "record suspensions and youth dispositions in the limbs: not settled"),
    ("canlex/rehab.py", "S34_1_C", "Interpretation Act s. 34(1)(c), verbatim (a hybrid convicted summarily)"),
    ("canlex/rehab.py", "PROSECUTED", "the Crown's election on a Canadian hybrid offence"),
    ("canlex/rehab.py", "YCJA_EXCEPTION_LIMBS", "which s. 18(2) limbs carry the YCJA exception"),
    ("canlex/rehab.py", "_could", "whether a paragraph's subject can be on a record too open to run"),
    ("canlex/rehab.py", "_normalize", "what a record entry is for the limbs (kind, class, dates)"),
    ("canlex/rehab.py", "_dims", "which open facts are run both ways, and the question each asks"),
    ("canlex/rehab.py", "_anchor_bounds", "an undated conviction read between offence and completion"),
    ("canlex/rehab.py", "_window_end", "when a conviction leaves 'the last N years' (day-after convention)"),
    ("canlex/rehab.py", "_none_within", "'has not within the last N years been convicted'"),
    ("canlex/rehab.py", "_at_most_one_before", "'not before the last N years ... more than one'"),
    ("canlex/rehab.py", "_one_old_at_most", "limb (iv): Canadian summary convictions"),
    ("canlex/rehab.py", "_paragraph", "every limb of s. 18(2)(a)-(c) and s. 18.1 as a rule on the entries"),
    ("canlex/rehab.py", "_outcome", "when a paragraph holds: every limb at once, or never"),
    ("canlex/rehab.py", "_evaluate", "pass / fail / unknown over every open fact; what decides a limb"),
    ("canlex/rehab.py", "_limb_text", "how each limb is named"),
    ("canlex/rehab.py", "check_limbs", "one paragraph, limb by limb"),
    ("canlex/rehab.py", "_s17", "the s. 17 clock over the record; conviction vs act basis"),
    # the G3 fixes of 2026-09-22 (S17-1/2/3, PREROG-2/3, AI-5; HELD): the s. 17 clock takes
    # every matter and every entry that may be a conviction at its strictest reading
    ("canlex/rehab.py", "_s17_is_open",
     "which entries are read both ways on the s. 17 clock (an open verdict; a conviction in "
     "Canada the words do not settle, save a conditional prerogative pardon; H3: an entry "
     "step 1 places without settling, and a youth disposition)"),
    ("canlex/rehab.py", "_s17_entries",
     "which convictions, open entries, youth dispositions and acts are on the s. 17 clock"),
    ("canlex/rehab.py", "_s17_other_readings",
     "the clock entry's other s. 17 readings (one per open entry; 'no federal equivalent' together)"),
    ("canlex/rehab.py", "_s17_act_matter",
     "which committed acts s. 17(b) runs from, on the conviction basis too (a permanent "
     "resident's act under the 10-year line left out there)"),
    ("canlex/rehab.py", "_PREROGATIVE_CONDITIONAL",
     "the one phrase that counts a prerogative-pardoned conviction plainly on the s. 17 clock"),
    ("canlex/rehab.py", "_PREROGATIVE_FREE", "'free' beside it keeps both s. 17 readings"),
    ("canlex/rehab.py", "prerogative_kind",
     "a conditional prerogative pardon (CC s. 748(2)/(3)) leaves the conviction on the s. 17 clock"),
    ("canlex/rehab.py", "_reading_answer", "the record-level status and explanation of one reading"),
    ("canlex/rehab.py", "assess_record",
     "the record-level answer: readings that decide it, dates, PR, no foreign ground"),
    ("canlex/server.py", "_pairing_classes", "a curated pairing's class for the limbs"),
    ("canlex/server.py", "_limb_classes", "the classes an unresolved entry can be"),
    ("canlex/server.py", "_record_entries", "screen_history rows as the record the limbs read"),
    ("canlex/server.py", "_PROSECUTED_WORDS", "how canada_prosecuted may be written"),
    ("canlex/server.py", "_limb_when", "how a limb's start / stop date is printed"),
    ("canlex/server.py", "_para_outcome", "each paragraph's answer as printed"),
    ("canlex/server.py", "_limb_table", "the limb table"),
    ("canlex/server.py", "_limb_section", "the limb section: readings, warnings, no paragraph"),
    ("canlex/server.py", "_deem_clock_text", "which limb and entry set the deeming clock"),
    # foreign pardons and relief by effect: the Saini checklist (roadmap T2.8)
    ("canlex/screening.py", "SAINI_QUOTES", "Saini para 24 elements and ENF 3 s. 10.9 phrases, verbatim"),
    ("canlex/screening.py", "SAINI_SOURCES", "the chunks the Saini checklist cites"),
    ("canlex/screening.py", "saini_checklist", "the Saini checklist an entry with pardon_test prints"),
    ("canlex/server.py", "_DISP_PHRASE_ONLY", "a lone 'refused' name matches as a phrase only"),
    ("canlex/server.py", "_FOREIGN_RELIEF", "which relief entry answers a non-US record"),
    ("canlex/server.py", "_foreign_relief", "the US-framed relief entry replaced for a non-US record"),
    ("canlex/server.py", "_match_dispositions",
     "which disposition entry a record's words reach (cancelled-conviction names, non-US relief)"),
    # record wording read in record order; relief never creates a conviction
    # (disposition roadmap T1.6, T1.7, T1.4 and the critic's items, 2026-09-16)
    ("canlex/screening.py", "DISPOSITION_CUE_TABLE",
     "the one record-order cue table: not-guilty plea, trial set, programme / revocation / "
     "adjudication, adult court, refused relief, stayed term, no disposition, sentencing "
     "pending, count scope, dismissal after conviction words, set-aside mechanism words"),
    ("canlex/screening.py", "_SEGMENT_BREAK", "where a record's segments break (revocation, refusal)"),
    ("canlex/screening.py", "DISPOSITION_FLAGS", "the record-wording flags and their order"),
    ("canlex/screening.py", "QUESTION_FLAGS", "which flags leave step 1 NOT SETTLED"),
    ("canlex/screening.py", "_revoked_then_adjudicated",
     "a programme revoked then guilt adjudicated: bound revocation, continuation block, later judgment"),
    ("canlex/screening.py", "record_order",
     "the routing rules that rewrite the record's words, and the question flags raised"),
    ("canlex/server.py", "_US_ONLY_ENTRIES", "entries never matched for a non-US record (set-aside-1203-4)"),
    ("canlex/server.py", "_RELIEF_YIELDS_TO", "the verdicts before which a relief entry yields"),
    ("canlex/server.py", "_relief_yields", "relief can remove a conviction, never create one"),
    ("canlex/server.py", "DISPOSITION_FLAG_LINES", "the memo and card wording of each record-wording flag"),
    ("canlex/server.py", "DISPOSITION_FLAG_QUESTIONS", "the deciding question of each question flag"),
    ("canlex/server.py", "STEP1_ONE_READING", "an entry printed as one reading when the wording leaves step 1 open"),
    ("canlex/server.py", "_FLAG_ENTRIES", "the entries each question flag answers for"),
    # state rows and non-US routing (disposition roadmap T1.8, T1.9, 2026-09-16)
    ("canlex/server.py", "_FOREIGN_RELIEF_WORDS",
     "the words a non-US record must carry for expungement to yield to the rehabilitation-law entry"),
    ("canlex/server.py", "_GATE_BONUS",
     "a place-gated match breaks a tie: ahead for its listed place, behind with no place named"),
    ("canlex/server.py", "_place_gate",
     "when a place-gated entry or name meets a record: listed place, no place (phrase only), other"),
    ("canlex/server.py", "_combine_gates", "an entry's gate and a name's gate combined"),
    ("canlex/screening.py", "_CONVICTION_NOT_RECORDED",
     "'conviction not recorded' / 'without proceeding to conviction' / 'without recording a "
     "conviction' cancel the conviction word"),
    ("canlex/server.py", "_step1_flags",
     "a question flag makes step 1 fact-specific with no state row; the set-aside exception"),
    ("canlex/server.py", "_entry_brief",
     "the disposition answer: the step-1 headline, the governing row, the Saini checklist"),
    # element resolvers for pairings that depend on the elements (roadmap T2.10)
    ("canlex/screening.py", "resolve_elements",
     "which Canadian provision an element answer or the element's words select; when it stays open"),
    ("canlex/screening.py", "_NOT_ASSERTED", "words that negate or doubt an element cue"),
    ("canlex/screening.py", "_CLAUSE_BREAK", "where a negation stops reaching"),
    ("canlex/screening.py", "element_cues_found", "how an element's words are found in the record"),
    ("canlex/screening.py", "resolver_answers", "how an element answer is read from the facts"),
    ("canlex/screening.py", "_without_answers", "a fact's own name is never read as an element's words"),
    ("canlex/screening.py", "outcome_max", "an outcome's maximum at the offence date (Tran)"),
    ("canlex/screening.py", "_resolver_need", "the element question and its options"),
    ("canlex/server.py", "_resolver_lines", "the resolved element or the deciding question, as printed"),
    ("canlex/server.py", "_term_notes", "which curated element split a record's words raise"),
    ("canlex/server.py", "_equivalency_report", "the equivalency report; element questions routed to facts"),
    # matcher routing added with the gold misses (track A step A9)
    ("canlex/screening.py", "_PC_664", "'PC 664/NNN' read as an attempt of section NNN"),
    ("canlex/screening.py", "is_attempt", "when a record is read as an attempt (s. 463)"),
    ("canlex/screening.py", "PENALTY_GROUP_NOTE", "a Texas penalty group is not a CDSA schedule"),
    ("canlex/screening.py", "_TX_PENALTY_GROUP", "which words are read as a Texas penalty group"),
    ("canlex/screening.py", "_DRUG_CONTEXT", "when an amount or penalty group is dropped from a drug charge"),
    # inchoate and party liability (track A step A10, roadmap T2.4)
    ("canlex/screening.py", "_INCHOATE_CUES",
     "which words read as an attempt, accessory, counselling, conspiracy or party"),
    ("canlex/screening.py", "INCHOATE_READINGS", "each reading's Criminal Code rule and label"),
    ("canlex/screening.py", "KIND_READINGS",
     "which readings each kind has (counselling committed or not; a bare accessory)"),
    ("canlex/screening.py", "INCHOATE_FACT", "the facts answer that settles a two-reading kind"),
    ("canlex/screening.py", "INCHOATE_OPEN_REASON", "why an inchoate result is not settled"),
    ("canlex/screening.py", "EXPRESS_EXCEPTIONS",
     "the express exceptions to ss. 463-465 for murder (ss. 239, 240, 465(1)(a), 464(a))"),
    ("canlex/screening.py", "inchoate", "the kind, cue and object read from the record's words"),
    ("canlex/screening.py", "inchoate_match",
     "the object matched on its own; when a term names a complete offence instead"),
    ("canlex/screening.py", "inchoate_max",
     "ss. 463(a)-(d), 464, 465(1)(c)/(d), 21(1) and the express exceptions"),
    ("canlex/screening.py", "attempt_max", "the s. 463 attempt maximum"),
    ("canlex/screening.py", "limb_provision", "the curated provision the exceptions are keyed on"),
    ("canlex/screening.py", "_INCHOATE_BASE", "the statute summary printed for each kind"),
    ("canlex/screening.py", "EXPRESS_EXCEPTIONS_NOTE", "the express-exceptions note"),
    ("canlex/screening.py", "inchoate_note", "which note an inchoate record prints"),
    ("canlex/screening.py", "attempt_note", "the note for a record's inchoate words"),
    ("canlex/screening.py", "_INCHOATE_STEM", "which curated terms can carry an inchoate cue"),
    ("canlex/screening.py", "_AID_ABET", "'aiding and abetting' is one liability, not two offences"),
    ("canlex/screening.py", "_COUNT_SUFFIX",
     "a count suffix after a comma ('theft, 2 counts') stays with its offence (audit follow-up 2026-09-21)"),
    ("canlex/screening.py", "_DIGIT_GROUP_COMMA", "a comma-space inside a digit group is the amount's"),
    ("canlex/screening.py", "_COUNT_WORDS", "a count beside the offence leaves the matching text"),
    ("canlex/screening.py", "_UNIT_WORDS", "the unit words that make a digit an amount, not a count"),
    ("canlex/screening.py", "_MULTIPLIED_AMOUNT",
     "a multiplier before an amount ('2 x 2 kg') leaves the quantity unsettled (review of the follow-up)"),
    ("canlex/screening.py", "split_offences", "where one record string is split into offences"),
    ("canlex/screening.py", "_best_match",
     "a curated term also matches with its abbreviations expanded, as the record is read"),
    ("canlex/server.py", "_step2", "an inchoate record is matched by its object offence"),
    ("canlex/server.py", "_reading_label", "how a limb and/or inchoate reading is named"),
    ("canlex/server.py", "_inchoate_decisive", "when the inchoate-role fact decides the band"),
    ("canlex/server.py", "_inchoate_field", "the CANLEX_RESULT 'inchoate' readings"),
    ("canlex/server.py", "_INC_KIND", "how each inchoate kind is named"),
    ("canlex/server.py", "_inchoate_applied", "the rule named beside each period's maximum"),
    ("canlex/server.py", "_inchoate_lines", "the inchoate lines of the step-2 block"),
    # wave 2 verifier: helpers carrying legal routing that the registered
    # names above rely on (the gate now also fingerprints each registered
    # name with everything it reaches -- tools/predeploy.py CodeTree)
    ("canlex/screening.py", "tran_bound", "Tran with no offence date: the conviction/completion bound"),
    ("canlex/screening.py", "tran_outcomes", "the periods a straddled maximum is reported in (Tran)"),
    ("canlex/screening.py", "history_rows",
     "which history rows apply to a limb; methodology (b) for a row higher than now"),
    ("canlex/screening.py", "limb_max", "a limb's current maximum"),
    ("canlex/screening.py", "pit_floor", "the point-in-time floor a pairing is checked from"),
    ("canlex/screening.py", "PIT_FLOOR", "where CanLex's point-in-time research starts"),
    ("canlex/screening.py", "MURDER", "the provision the express exceptions are keyed on"),
    ("canlex/screening.py", "LIFE", "the structured stand-in for imprisonment for life"),
    ("canlex/screening.py", "OPEN_BRANCHES", "the branches reported with several readings, no band"),
    ("canlex/screening.py", "STRUCTURED_LIMB",
     "the limb key that selects a pairing's structured-maximum penalty_history rows"),
    ("canlex/screening.py", "STATED_LIMB",
     "the limb key that selects a pairing's stated-high penalty_history rows"),
    ("canlex/screening.py", "_KG_PER_UNIT", "unit conversions deciding the former 3 kg Schedule VII line"),
    ("canlex/screening.py", "_AMOUNT", "which written amounts are read as a quantity"),
    ("canlex/screening.py", "_asserted", "the negation window for element cues (three words)"),
    ("canlex/screening.py", "_WORDS_AND_BREAKS", "the words and breaks the negation window counts"),
    ("canlex/screening.py", "_singular", "plural record words read as the curated term"),
    ("canlex/screening.py", "ABBREVIATIONS", "record shorthand read as offence words"),
    ("canlex/screening.py", "PHRASE_ABBREVIATIONS", "record shorthand phrases read as offence words"),
    ("canlex/screening.py", "SUBSTANCES", "drug names and the CDSA schedule each resolves to"),
    ("canlex/screening.py", "ALIASES", "statute codes read as offence words"),
    ("canlex/screening.py", "_EXTRA_ALIASES", "statute codes read as offence words (code table)"),
    ("canlex/screening.py", "match_pairings", "which pairing a record's words match (negative terms)"),
    ("canlex/screening.py", "MIN_SCORE", "the score below which a pairing is not a match"),
    ("canlex/screening.py", "is_tie", "when two pairings match a label equally"),
    ("canlex/screening.py", "tie_spec", "the deciding fact of a tie"),
    ("canlex/screening.py", "resolve_tie", "which supplied fact settles a tie, and how"),
    ("canlex/screening.py", "offence_notes", "the notes an offence's words print"),
    ("canlex/screening.py", "RECORD_SUSPENSION_NOTE", "the record-suspension note"),
    ("canlex/screening.py", "_CANCELLED_CONVICTION", "words that cancel a conviction"),
    ("canlex/screening.py", "_CONVICTION_CUES", "words read as a conviction"),
    ("canlex/screening.py", "_NON_CONVICTION_CUES", "words read as no conviction"),
    ("canlex/screening.py", "_NEGATED", "negations of a disposition word"),
    ("canlex/screening.py", "_NEGATED_CONVICTION", "negated conviction words"),
    ("canlex/screening.py", "disposition_cues", "conviction / non-conviction read from the words"),
    ("canlex/screening.py", "disposition_notes", "the notes a disposition's words print"),
    ("canlex/screening.py", "add_years", "rehabilitation dates: N years on (29 February)"),
    ("canlex/screening.py", "full_years", "rehabilitation dates: full years elapsed"),
    ("canlex/screening.py", "years_since", "rehabilitation dates: years since completion"),
    # wave 2 verifier, blockers 1 and 2: the maxima a pairing's verify rows
    # quote; a maximum at commission higher than now (methodology (b))
    ("canlex/screening.py", "_NUM_WORDS", "number words in statute phrases"),
    ("canlex/screening.py", "_STATED_MAX", "which statute phrases state a maximum"),
    ("canlex/screening.py", "maxima_stated", "the maxima a statute phrase states"),
    ("canlex/screening.py", "STRUCTURED_LABEL", "how the structured-maximum reading is named"),
    ("canlex/screening.py", "STATED_LABEL", "how the higher quoted maximum's reading is named"),
    ("canlex/screening.py", "STATED_OPEN_REASON", "why a limb-less inchoate result is not settled"),
    ("canlex/screening.py", "stated_limbs",
     "a limb-less pairing's higher quoted maximum as a second reading of an inchoate record"),
    ("canlex/screening.py", "lenient_since", "a maximum at commission higher than now"),
    ("canlex/screening.py", "lenient_rows", "the rows whose maximum at commission is higher than now"),
    ("canlex/screening.py", "LENIENT_LABELS", "how methodology (b) and Tran-strict readings are named"),
    ("canlex/screening.py", "LENIENT_OPEN_REASON", "why such a result is not settled"),
    ("canlex/screening.py", "LENIENT_QUESTION", "the question such a result asks"),
    ("canlex/screening.py", "LENIENT_NOTE", "the MAXIMUM AT COMMISSION HIGHER THAN NOW note"),
    ("canlex/screening.py", "MURDER_HELD_NOTE", "the approved baseline's murder forms: s. 239 / s. 240"),
    ("canlex/screening.py", "MURDER_EXCEPTION_TEXT", "the express exception for each inchoate kind"),
    ("canlex/screening.py", "murder_held_note", "when the murder note is printed"),
    ("canlex/screening.py", "OFFENCE_WORDS_NOTE",
     "an element cue in the offence text alone suggests, never settles (principle 5)"),
    ("canlex/rehab.py", "_INDICTABLE", "the s. 36(3)(a) hybrid-as-indictable class"),
    ("canlex/rehab.py", "_occurrences", "the single-occurrence rule over a record"),
    ("canlex/rehab.py", "_limb", "one s. 18(2) limb as a rule on the entries"),
    ("canlex/rehab.py", "_holds", "when a limb holds for an entry"),
    ("canlex/rehab.py", "_none_of", "'has not been convicted of' over the entries"),
    ("canlex/rehab.py", "_PARAS", "the s. 18(2) paragraphs the record rules run"),
    ("canlex/rehab.py", "_ANY_CLASS", "the classes an unresolved entry can be"),
    ("canlex/rehab.py", "_ACT_OFFENCE", "the act-branch class of an entry"),
    ("canlex/rehab.py", "conditions_for", "which s. 18 conditions are printed for an answer"),
    ("canlex/rehab.py", "METHODOLOGY_QUOTES", "verbatim quotes in the rehabilitation methodology"),
    ("canlex/server.py", "_DISP_APPEAL_DECIDED", "which decided-appeal words read as an acquittal"),
    ("canlex/server.py", "_DISP_CANCEL", "disposition words that cancel a conviction"),
    ("canlex/server.py", "_DISP_GENERIC", "disposition words too generic to match an entry alone"),
    ("canlex/server.py", "_DISP_STOP", "disposition words ignored in matching"),
    ("canlex/server.py", "_DISP_WEAK", "disposition words that match only with others"),
    ("canlex/server.py", "_CONVICTION_ENTRY", "the entry a bare conviction reads as"),
    ("canlex/server.py", "_LIMB_HOLDS", "how each s. 18(2) limb outcome is printed"),
    ("canlex/server.py", "_gives", "what each reading of the record gives"),
    ("canlex/server.py", "_canada_inputs", "which inputs a Canadian record reads"),
    ("canlex/server.py", "_history_desc", "the Tran history text officers read"),
    ("canlex/server.py", "_step1", "step 1: which disposition entry and verdict"),
    ("canlex/server.py", "canlex_us_disposition",
     "the disposition memo: one resolved step 1 for text and result; the framework pointer"),
    ("canlex/server.py", "_disposition_result", "the disposition answer and non-US relief printing"),
    ("canlex/server.py", "NON_US_LABEL", "the non-US record label"),
    ("canlex/server.py", "_allegation_text", "the allegation paragraph"),
    ("canlex/server.py", "_application_warning", "the application-type warning"),
    ("canlex/server.py", "_rehab_brief", "the one-line rehabilitation answer"),
    ("canlex/server.py", "_rehab_report", "the rehabilitation report"),
    ("canlex/server.py", "_elapsed_line", "the Elapsed line"),
    ("canlex/server.py", "_s18_compact", "the compact s. 18 answer"),
    ("canlex/server.py", "_superseded_notes", "the subsequent-history notes"),
    ("canlex/server.py", "_with_superseded", "where the subsequent-history notes are appended"),
    ("canlex/server.py", "_term_note_lines", "how a curated element split is printed"),
    ("canlex/server.py", "_tie_fields", "the result of an unresolved tie"),
    ("canlex/server.py", "_tie_resolved_line", "how a settled tie is printed"),
    ("canlex/server.py", "_basis_label", "how each footing is named"),
    ("canlex/server.py", "_jurisdiction", "US / non-US / Canada routing of a record"),
    ("canlex/server.py", "_jurisdiction_summary", "how the jurisdiction reading is printed"),
    ("canlex/server.py", "_fee", "the fee quoted"),
    ("canlex/server.py", "_lenient_lines", "the MAXIMUM AT COMMISSION HIGHER THAN NOW lines"),
    ("canlex/server.py", "ABSENTIA_HELD", "the held in-absentia rule absent from a deployment"),
    ("canlex/server.py", "_ABSENTIA_WORDS", "which words say a conviction was in absentia"),
    ("canlex/transborder.py", "section_relation", "whether a cited section matches an IRPR s. 19 row"),
    ("canlex/transborder.py", "parse_section", "how a cited section is read"),
    ("canlex/transborder.py", "MODES", "the prosecution modes a row can carry"),
    ("canlex/transborder.py", "load_table", "the (c)-(g) table read (held; absent: TABLE_HELD)"),
    ("canlex/commentary.py", "_entry_text", "the disposition checklist as rendered"),
    ("canlex/commentary.py", "_STATUS_LABEL", "authority-status labels"),
    ("canlex/commentary.py", "_VERDICT_LABEL", "verdict labels"),
    ("canlex/commentary.py", "SURVEY_NOTE", "the state-survey note"),
    ("canlex/commentary.py", "BANNER", "the curated-commentary banner"),
    # provenance of state rows and statute-code aliases (roadmap T3.5, track A
    # step A11): how each row's source is labelled; which statute a code is
    # read as, for which state and offence date, and what is printed
    ("canlex/commentary.py", "provenance_label", "the provenance tier printed with every state row"),
    ("canlex/commentary.py", "row_tier", "the step-1 provenance tier of a state row"),
    ("canlex/commentary.py", "row_notes", "the held characterisation and what-decides-it lines of a row"),
    ("canlex/commentary.py", "row_provenance", "the CANLEX_RESULT provenance tier of a state row"),
    ("canlex/screening.py", "ALIAS_JURISDICTIONS", "the state each code-table bare section number is read as"),
    ("canlex/screening.py", "_BARE_KEY", "which statute codes name no state (the state rule)"),
    ("canlex/screening.py", "_MAINE_MRS", "Maine 'M.R.S.' read as 'M.R.S.A.'"),
    ("canlex/screening.py", "alias_key", "a statute code read as a record is read (which codes can fire)"),
    ("canlex/screening.py", "_alias_reading",
     "which reading of a code applies: offence date, bare number vs the record's state"),
    ("canlex/screening.py", "_alias_what", "how the statute a code was read as is named"),
    ("canlex/screening.py", "alias_note", "'read <code> as <jurisdiction> <catchline>' and the not-applied notes"),
    ("canlex/screening.py", "alias_needs", "the offence-date question a date-dependent code asks"),
    ("canlex/server.py", "_step2_match", "step 2's matching, tie, candidates and fields (the former _step2)"),
    # the criminality route's promotable provisions (roadmap T5.2, track A
    # step A12): which statutes _ensure_primary may put in front of an
    # officer on an s. 36 question -- a legal characterisation, like
    # transborder.R19_ACTS. The route's firing heuristics and the allowlist
    # assembly are PLUMBING below; these two constants are the content.
    ("canlex/index.py", "_CRIMINALITY_STATIC",
     "the provisions that govern criminal inadmissibility and relief from it "
     "(IRPA ss. 33/36/37/44, IRPR ss. 17-19, YCJA ss. 82/119, CC s. 730)"),
    ("canlex/index.py", "_CRIMINALITY_ACTS", "the Criminal Records Act, promotable whole"),
    # the authority registry wired into the tools (roadmap T3.2; track A fixer,
    # wave-3 verifier 2026-09-15): what the officer is told about where a cited
    # decision's text is, which pin is shown, which statute sentence is quoted
    # behind a verified maximum, and when the registry is printed at all
    ("canlex/authorities.py", "HELD_NOTE", "registry absent: cites not linked; never canlex_case"),
    ("canlex/authorities.py", "READ_NOTE", "how to read the pointers; the only treatment check held"),
    ("canlex/authorities.py", "NO_POINTER_NOTE", "the closing line when no pointer is printed"),
    ("canlex/authorities.py", "UNLINKED", "a cite the registry does not hold"),
    ("canlex/authorities.py", "STATUS_TEXT", "in-corpus / absent / secondary-only / unavailable pointers"),
    ("canlex/authorities.py", "NO_SECONDARY", "no corpus source describes the decision"),
    ("canlex/authorities.py", "VERIFY_LABEL", "the VERIFIED TEXT label"),
    ("canlex/authorities.py", "VERIFY_MISSING", "the statute text is not in this deployment"),
    ("canlex/authorities.py", "VERIFY_NOT_FOUND", "a verify phrase gone from the corpus: re-verify"),
    ("canlex/authorities.py", "renderable", "when the registry's rows are printed beside the holdings"),
    ("canlex/authorities.py", "read_note", "which closing line an answer citing decisions prints"),
    ("canlex/authorities.py", "pointer", "the pointer line under a cited authority"),
    ("canlex/authorities.py", "_pick_pin", "which pinned passage is shown"),
    ("canlex/authorities.py", "_officer_pin", "a reviewer note is never printed as a pin label"),
    ("canlex/authorities.py", "_where", "which secondary sources are named, in what order"),
    ("canlex/authorities.py", "authority_lines", "the Authorities bullets with their pointers"),
    ("canlex/authorities.py", "superseded_entries", "the reversed decisions guidance cites (Saini)"),
    ("canlex/authorities.py", "statute_sentence", "which statute sentence is quoted for a verify phrase"),
    ("canlex/authorities.py", "_GENERAL_CLAUSE", "the 'in any other case' limb is the one quoted"),
    ("canlex/authorities.py", "_CLAUSE_MARK", "where the general limb's own paragraph starts"),
    ("canlex/authorities.py", "_general_clause_quote", "the lead-in ... general limb quotation"),
    ("canlex/authorities.py", "verify_rows", "which verify rows are quoted for a pairing and limb"),
    ("canlex/authorities.py", "verify_lines", "the VERIFIED TEXT lines under a verified maximum"),
    ("canlex/server.py", "_superseded_specs", "the registry's subsequent-history entries, else SUPERSEDED_CITES"),
    ("canlex/server.py", "_element_readings", "each limb of an element-split code, run through step 2"),
    ("canlex/server.py", "_element_reading_lines", "the EACH READING block: no limb is chosen"),
    ("canlex/commentary.py", "row_tag", "the provenance tag of a state row in the 'all' index"),
    # statute codes: the element split, shared designators, the forms read
    # alike (track A fixer, 2026-09-15)
    ("canlex/screening.py", "_element_pick", "which limb of an element-split code the facts answer"),
    ("canlex/screening.py", "_CODE_TABLE_TEXAS_PC", "the code table's Texas 'PC' keys"),
    ("canlex/screening.py", "_CODE_TABLE_PREFIX_STATES", "the state each code-table designator is read as"),
    ("canlex/screening.py", "_code_table_jurisdiction", "the state a code-table key is read as"),
    ("canlex/screening.py", "_UCMJ_FORMS", "'UCMJ 111' and '10 USC 911' read as UCMJ Art. 111"),
    ("canlex/screening.py", "_MV_ACT_FORMS", "the Indian Motor Vehicles Act forms read as one key"),
    ("canlex/screening.py", "_code_forms", "where the UCMJ and Motor Vehicles Act forms are read"),
    ("canlex/screening.py", "_CODE_COMMA", "a comma before 'UCMJ' or 'court-martial' separates no offence"),
    # read next, the policy caveat and held content (roadmap T3.6; wave 2
    # verifier -- track A step A13, 2026-09-15, HELD)
    ("canlex/readnext.py", "HEADING", "the READ NEXT heading"),
    ("canlex/readnext.py", "COMPACT_PREFIX", "the memo's read-next label"),
    ("canlex/readnext.py", "ATIP_FLAG", "the flag on an unofficial ATIP copy of a withdrawn chapter"),
    ("canlex/readnext.py", "ATIP_SHORT", "the short ATIP flag on the memo's read-next line"),
    ("canlex/readnext.py", "UNRESOLVED", "a read-next key the corpus lacks is said, never dropped"),
    ("canlex/readnext.py", "label", "how a corpus source is named"),
    ("canlex/readnext.py", "flags", "the status shown with a source (ATIP copy, archived, date)"),
    ("canlex/readnext.py", "resolved", "official sources before unofficial ATIP copies"),
    ("canlex/readnext.py", "lines", "the READ NEXT block"),
    ("canlex/readnext.py", "compact_line", "the memo's read-next line"),
    ("canlex/readnext.py", "with_fallback", "when a pairing shows the framework's read-next"),
    ("canlex/commentary.py", "POLICY_CAVEAT_HEAD", "the policy caveat is not settled; both readings"),
    ("canlex/commentary.py", "policy_caveat_lines", "the policy caveat and its two readings"),
    ("canlex/server.py", "_pairing_read_next_items", "which read-next items a step-2 answer shows"),
    ("canlex/server.py", "HELD_PREFIX", "the 'HELD FOR REVIEW -- not in this deployment' label"),
    ("canlex/server.py", "HELD_WHAT", "how held content is named"),
    ("canlex/server.py", "HELD_TODO", "what the officer does when the held content is absent"),
    ("canlex/server.py", "HELD_ALIAS", "a statute-code reading held for review"),
    ("canlex/server.py", "_held_note", "the held-content line"),
    ("canlex/server.py", "_held_disposition", "when a disposition's words reach held content first"),
    ("canlex/server.py", "_held_pairing", "when an offence's words reach held content first"),
    ("canlex/server.py", "_held_alias", "when a statute code is read only by a held alias"),
    # the pure chain, the decisive facts, the confidence block, the result
    # card and completion IF SERVED AS IMPOSED (roadmap T4.1, T4.2, T4.7,
    # T4.5 -- track A step A14, 2026-09-15, HELD)
    ("canlex/server.py", "_chain_entry", "the chain: which facts each step reads, match -> resolve -> assess"),
    ("canlex/server.py", "_chain_step3", "step 3 as data: which footings and clocks are assessed"),
    ("canlex/server.py", "_record_date_warnings", "the conviction and sentence date checks"),
    ("canlex/server.py", "_allegation_paras", "which IRPA paragraphs the allegation names"),
    ("canlex/server.py", "_NOT_SETTLED_BRANCHES", "the branches read as not settled"),
    ("canlex/server.py", "_rehab_signature", "what counts as a change in the rehabilitation answer"),
    ("canlex/server.py", "_paragraph_signature", "what counts as a change in the allegation"),
    ("canlex/server.py", "_chain_signature", "what a decisive fact must change"),
    ("canlex/server.py", "_reading_signature", "the answer one reading of an open result gives"),
    ("canlex/server.py", "_period_date", "the date a re-run uses for a period of commission"),
    ("canlex/server.py", "DECISIVE_HEAD", "the THE ANSWER CHANGES WITH THESE FACTS heading"),
    ("canlex/server.py", "DECISIVE_NONE", "the line when no missing fact changes the answer"),
    ("canlex/server.py", "DECISIVE_SUFFIX", "the ASSUMED line a decisive fact replaces"),
    ("canlex/server.py", "DECISIVE_QUESTIONS", "the questions the decisive facts ask"),
    ("canlex/server.py", "DECISIVE_ASSUMED", "which assumed code each re-run replaces"),
    ("canlex/server.py", "DECISIVE_RELIEF", "the relief the chain tries (pardon, expungement)"),
    ("canlex/server.py", "DECISIVE_AGES", "the ages the chain tries"),
    ("canlex/server.py", "_DECISIVE_BRANCH", "how each branch is named in the block and the card"),
    ("canlex/server.py", "_DECISIVE_REHAB", "how a rehabilitation answer with no status is named"),
    ("canlex/server.py", "_decisive_keep", "only facts whose values change the answer are kept"),
    ("canlex/server.py", "_need_trials", "an open result's questions, each answered with every option"),
    ("canlex/server.py", "_record_decisive", "which missing facts canlex_screen_record re-runs"),
    ("canlex/server.py", "_canada_decisive", "which missing facts a Canadian record re-runs"),
    ("canlex/server.py", "_decisive_answer", "one value's answer as printed"),
    ("canlex/server.py", "_decisive_lines", "the decisive-facts block"),
    ("canlex/server.py", "_chain_confidence", "the confidence block of canlex_screen_record"),
    ("canlex/server.py", "_canada_confidence", "the confidence block of a Canadian record"),
    ("canlex/server.py", "_transborder_confidence", "the confidence block of canlex_transborder"),
    ("canlex/server.py", "_projection_lines",
     "the IF SERVED EXACTLY AS IMPOSED footing: no verdict, the margin flag"),
    ("canlex/server.py", "CARD_FULL", "the card's pointer to the full memo"),
    ("canlex/server.py", "CARD_NOT_SETTLED_ACTION", "the card's action when the answer is open"),
    ("canlex/server.py", "CARD_NO_GROUND_ACTION", "the card's action when nothing is engaged"),
    ("canlex/server.py", "CARD_DEEMED_ACTION", "the card's action when deemed rehabilitated"),
    ("canlex/server.py", "CARD_REPORT_FN", "the card's action for a foreign national (s. 44(1), TRP, IRPR s. 42)"),
    ("canlex/server.py", "CARD_REPORT_PR", "the card's action for a permanent resident (s. 44(2))"),
    ("canlex/server.py", "CARD_REHAB_OPEN", "the card's rehabilitation-on-application clause"),
    ("canlex/server.py", "_card_action", "which action the card names"),
    ("canlex/server.py", "_card_changes", "the card's decisive-facts line"),
    ("canlex/server.py", "_card_dates", "the card's dates line (a projection is not a finding)"),
    ("canlex/server.py", "_record_card", "the result card of canlex_screen_record"),
    ("canlex/server.py", "_canada_card", "the result card of a Canadian record"),
    ("canlex/server.py", "_history_rows",
     "canlex_screen_history's per-entry chain (moved from the tool; conviction date as a Tran bound)"),
    # the verification fixes of 2026-09-22 (F1: LEGAL-7/8/9, BI-4; HELD): the s. 17 clock
    ("canlex/server.py", "_S17_QUESTION_WORDS",
     "why a later conviction may not be a s. 17 subsequent offence, as the memo names it"),
    ("canlex/server.py", "_s17_open_question",
     "which later convictions get the second s. 17 reading (no federal equivalent, unpaired, "
     "a conviction in Canada not shown under an Act of Parliament)"),
    ("canlex/server.py", "_s17_moved_clause",
     "'grounds no inadmissibility itself' only for a no-federal-equivalent conviction"),
    # the G3 fixes of 2026-09-22 (PREROG-2/3, AI-5, S17-2; HELD)
    ("canlex/server.py", "S17_CONDITIONAL_PARDON",
     "a conditional prerogative pardon counted as a conviction on the s. 17 clock (CC s. 748(2)/(3))"),
    ("canlex/server.py", "_s17_conditional", "when that sentence is printed"),
    ("canlex/server.py", "_s17_open_why", "why an entry's conviction status is open, as the s. 17 lines say"),
    # the H3 fixes of 2026-09-22 (S17-INT-4/5/6/7, REG-7; HELD)
    ("canlex/server.py", "_s17_open_lead",
     "how the s. 17 lines name an open entry (a youth disposition's conviction is settled; "
     "s. 17's Young Offenders Act exception is what is open)"),
    ("canlex/server.py", "CARD_OPEN_FACT_NOTE",
     "the Dates-line note when an open fact cannot remove the s. 44(1) report"),
    ("canlex/server.py", "CARD_DEEMED_FOREIGN_ONLY",
     "IRPR s. 18(2) reaches the foreign matters only (IRPA s. 36(3)(b) for a conviction in Canada)"),
    ("canlex/server.py", "_card_deemed_open",
     "whether deemed rehabilitation holds, or could hold today, on some reading"),
    ("canlex/server.py", "_CARD_GROUND_OPEN_FACTS",
     "the decisive facts that can take a ground away (the card cannot state the report)"),
    ("canlex/server.py", "_card_report_holds",
     "whether a s. 44(1) report stands on every reading although a fact is open"),
    ("canlex/server.py", "_s17_reading_text",
     "the NOT SETTLED sentence for each other s. 17 reading (one per open entry)"),
    ("canlex/server.py", "_s17_missing", "what the card asks when an s. 17 date is missing"),
    ("canlex/server.py", "_canada_open_question",
     "what the record card asks when an open conviction in Canada is the only possible ground"),
    ("canlex/server.py", "_history_answer",
     "canlex_screen_history's record step: count, s. 17 clock, deeming (moved from the tool)"),
    ("canlex/server.py", "_history_signature", "what a decisive fact must change on a whole record"),
    ("canlex/server.py", "_history_decisive_answer", "one value's answer on a whole record, as printed"),
    ("canlex/server.py", "_history_decisive", "which missing facts canlex_screen_history re-runs"),
    ("canlex/server.py", "_history_confidence", "the confidence block of canlex_screen_history"),
    ("canlex/server.py", "_history_card", "the result card of canlex_screen_history"),
    ("canlex/screening.py", "confidence_block", "the shared confidence block's shape"),
    ("canlex/screening.py", "step1_confidence", "what step 1 rests on: entry status, row verification"),
    ("canlex/screening.py", "authorities_in_corpus", "how many cited decisions are in the corpus"),
    ("canlex/screening.py", "maximum_source", "where the maximum applied comes from"),
    ("canlex/screening.py", "step2_confidence", "what step 2 rests on"),
    ("canlex/screening.py", "step3_confidence", "the s. 18(2) limbs left unknown"),
    ("canlex/screening.py", "GUIDE_5312_CHUNK", "the Guide 5312 chunk the projection cites"),
    ("canlex/screening.py", "GUIDE_5312_RULES", "Guide 5312's five-year rules, verbatim"),
    ("canlex/screening.py", "GUIDE_5312_COURT", "Guide 5312's criminal-court driving prohibition, verbatim"),
    ("canlex/screening.py", "IF_SERVED_LABEL", "the IF SERVED EXACTLY AS IMPOSED label (not a bound)"),
    ("canlex/screening.py", "MARGIN_MONTHS", "the margin a projected date is flagged within"),
    ("canlex/screening.py", "_SENT_FINE", "which words read as a fine"),
    ("canlex/screening.py", "_SENT_DRIVING", "which words read as a driving prohibition"),
    ("canlex/screening.py", "_SENT_PROBATION", "which words read as probation"),
    ("canlex/screening.py", "_SENT_PAROLE", "which words read as parole"),
    ("canlex/screening.py", "_SENT_JAIL", "which words read as a term of imprisonment"),
    ("canlex/screening.py", "_SENT_SUSP", "which words read as a suspended term"),
    ("canlex/screening.py", "_SENT_SUSPENDED_SENTENCE", "'suspended sentence' alone"),
    ("canlex/screening.py", "_SENT_BARE", "'N SUSP' after a term: the part suspended"),
    ("canlex/screening.py", "_SENT_FILLER", "words a sentence part may carry that change nothing"),
    ("canlex/screening.py", "_sentence_part", "one part of a sentence read, or not read"),
    ("canlex/screening.py", "parse_sentence", "a written sentence read into parts"),
    ("canlex/screening.py", "projected_completion",
     "completion if served as imposed: which part ends last; what blocks it (a fine)"),
    ("canlex/screening.py", "add_months", "N months on (Interpretation Act s. 28(c))"),
    ("canlex/screening.py", "_add", "a term added to the sentence date"),
    ("canlex/screening.py", "within_margin", "the margin test"),
    # the DRAFT s. 44(1) narrative skeleton, EN and FR, and the typed-entry
    # screening tool (roadmap T4.6, T4.4 -- track A step A15, 2026-09-15, HELD)
    ("canlex/narrative.py", "HEAD", "the narrative skeleton's heading"),
    ("canlex/narrative.py", "INTRO", "what the skeleton is and what its brackets mean (ENF 5 s. 13.1)"),
    ("canlex/narrative.py", "MULTI", "one allegation per report (ENF 5 s. 13.4, quoted)"),
    ("canlex/narrative.py", "HELD_NOTE", "report provisions held: the provision and maximum stay CONFIRM"),
    ("canlex/narrative.py", "EN_FRAME", "ENF 5 s. 13.1's English narrative frames, verbatim"),
    ("canlex/narrative.py", "FR_FRAME", "ENF 5 s. 13.1's French narrative frames, verbatim"),
    ("canlex/narrative.py", "FR_ALLEGATION", "the IRPA s. 36 paragraphs in French, verbatim"),
    ("canlex/narrative.py", "FR_PARAGRAPH", "how each IRPA paragraph is cited in French"),
    ("canlex/narrative.py", "IRPA_EN", "the Act the allegation names"),
    ("canlex/narrative.py", "IRPA_FR", "the Act the French allegation names"),
    ("canlex/narrative.py", "EN_ACT", "the act-branch narrative (drafted, not ENF 5 wording)"),
    ("canlex/narrative.py", "FR_ACT", "the French act-branch narrative (drafted)"),
    ("canlex/narrative.py", "EN_TWO", "the two-offence narrative (drafted, not ENF 5 wording)"),
    ("canlex/narrative.py", "FR_TWO", "the French two-offence narrative (drafted)"),
    ("canlex/narrative.py", "TEXT", "every label and CONFIRM note of the skeleton, EN and FR"),
    ("canlex/narrative.py", "_BOUND_WHAT", "how a Tran bound is named in the maximum's basis"),
    ("canlex/narrative.py", "NO_SKELETON", "why no skeleton is drafted for a matter"),
    ("canlex/narrative.py", "_EN_TERM", "which English statute words are read as the maximum term"),
    ("canlex/narrative.py", "_FR_TERM", "which French statute words are read as the maximum term"),
    ("canlex/narrative.py", "term_words", "the statute's own words for the maximum, in each language (one rule)"),
    ("canlex/narrative.py", "term_years", "the years those words state"),
    ("canlex/narrative.py", "fr_cite", "the French citation's preposition"),
    ("canlex/narrative.py", "choose",
     "which report provision is proposed: the limb, the maximum at commission, history, open"),
    ("canlex/narrative.py", "provision_text", "the provision bracket"),
    ("canlex/narrative.py", "maximum_text", "the maximum bracket: statute words, history, reading"),
    ("canlex/narrative.py", "_basis", "how the maximum's basis is named (offence date, bound, current)"),
    ("canlex/narrative.py", "_years", "how a maximum is written, per language"),
    ("canlex/narrative.py", "_date_text", "the date bracket: which date ENF 5 asks for is left open"),
    ("canlex/narrative.py", "_place_text", "the place bracket"),
    ("canlex/narrative.py", "_allegation_line", "the allegation sentence with the paragraph's words"),
    ("canlex/narrative.py", "_narrative", "the narrative sentences in ENF 5's form"),
    ("canlex/narrative.py", "_status_line", "the status line: FN verbatim, PR unsourced, status assumed"),
    ("canlex/narrative.py", "render", "the skeleton block"),
    ("canlex/narrative.py", "result_field", "CANLEX_RESULT 'narrative'"),
    ("canlex/server.py", "_NARRATIVE_WHY", "why no skeleton is drafted for an open branch"),
    ("canlex/server.py", "_narrative_place", "the place the skeleton names"),
    ("canlex/server.py", "_narrative_reading", "what the provision choice reads from a step-2 result"),
    ("canlex/server.py", "_narrative_allegations",
     "one allegation per paragraph and per open reading; the no-skeleton notes"),
    ("canlex/server.py", "_narrative_held", "when the report provisions are held"),
    ("canlex/server.py", "_history_narrative",
     "a record's allegations: per entry, the two-offence limb, Canadian entries"),
    ("canlex/server.py", "_NO_RELIEF", "which words confirm there is no relief"),
    ("canlex/server.py", "ScreenEntry", "the entry keys canlex_screen accepts and how each is described"),
    ("canlex/server.py", "_HistoryEntry",
     "canlex_screen_history's entry: ScreenEntry's keys and checks, unknown keys ignored "
     "(code audit 2026-09-21)"),
    ("canlex/server.py", "canlex_screen", "the typed-entry screening tool: relief, the card by default"),
    ("canlex/server.py", "_screen_entries",
     "the record pipeline canlex_screen_history and canlex_screen share (moved from the tool): "
     "relief, the assumed list, the skeleton"),
    # wave-4 verifier (2026-09-15): changed this wave and not reached by a
    # registered name until now
    ("canlex/server.py", "GROUNDING_NOTE",
     "the answering instructions every search result carries: grounding, citing, and the "
     "routing to related provisions"),
    ("canlex/server.py", "canlex_list_acts", "the corpus listing tool, with its canlex_case routing text"),
    ("canlex/server.py", "_publisher", "which publisher label a listed source gets"),
    ("canlex/commentary.py", "build",
     "renders the curated commentary and the registry pointers into the corpus the tools cite"),
    ("canlex/screening.py", "_SPLIT",
     "which separators split a record's words into offences (a code comma is not one) -- "
     "decides the offence matched"),
    # wave-4 fixer: relief on a conviction in Canada, the held card line, the
    # open-readings note, provisions not in force at commission
    ("canlex/server.py", "_CANADA_RELIEF_WORDS",
     "Board or CRA words in a relief key that names no record suspension: the flag says so "
     "(G2: they no longer admit a relief, REL-12)"),
    # G2 (2026-09-22): the NOT SETTLED relief readings on the card, the relief read with the
    # entry's dates, and a record suspension a later Canadian conviction may have ended
    ("canlex/server.py", "CANADA_PARDON_AFTER_2012_QUESTION",
     "the card question for a 'pardon' dated after 2012-03-12 (AI-4)"),
    ("canlex/server.py", "CANADA_LATER_CONVICTION_QUESTION",
     "the card question for a record suspension a later conviction may have ended (CRA ss. 7.2(a), 7(a))"),
    # H2 (2026-09-22): the card questions and conditional lines of the three readings it opens
    ("canlex/server.py", "CANADA_PARDON_UNDATED_QUESTION",
     "the card question for an UNDATED pardon (G2-REL-A)"),
    ("canlex/server.py", "CANADA_BEFORE_CRA_QUESTION",
     "the card question for a relief dated before the Criminal Records Act as the corpus carries it (G2-REL-B)"),
    ("canlex/server.py", "CANADA_RELIEF_UNDATED_QUESTION",
     "the card question for an undated record suspension on a dated entry (CRA s. 4(1); G2-REL-E)"),
    ("canlex/server.py", "_RELIEF_OPEN_LINES",
     "the conditional lines of a NOT SETTLED reading of a relief that is not only a pardon"),
    ("canlex/server.py", "CANADA_CARD_LATER_CONVICTION_ACTION",
     "the card action for it: a report if it ceased or was revoked, no ground (s. 36(3)(b)) if not"),
    ("canlex/server.py", "_PARDON_OPEN_LINES", "the conditional lines of a pardon's NOT SETTLED reading"),
    ("canlex/server.py", "_CANADA_RELIEF_OPEN",
     "each NOT SETTLED relief reading's question, action and conditional lines"),
    ("canlex/server.py", "CANADA_RELIEF_OPEN_NOTE",
     "the card notes for a pardon after 2012-03-12 and a record suspension a later conviction may have ended"),
    ("canlex/server.py", "_canada_card_relief_notes",
     "which card note each Canadian entry's relief prints (prerogative, after 2012, later conviction, key)"),
    ("canlex/server.py", "_canada_entry_disposition",
     "a Canadian entry's relief read with its own words, relief key, dates and later convictions"),
    ("canlex/server.py", "_canada_later_convictions",
     "which other Canadian entries may be later convictions that ended a record suspension (REL-5)"),
    ("canlex/server.py", "CANADA_RELIEF_NOT_APPLIED",
     "the flag when relief is not applied to a conviction in Canada"),
    ("canlex/server.py", "CANADA_PREROGATIVE_NOTE",
     "the card note for a prerogative pardon on a conviction in Canada: NOT SETTLED (LEGAL-6, 2026-09-22)"),
    ("canlex/server.py", "_canada_relief",
     "a conviction in Canada reads only its own record suspension, never the record-level relief"),
    ("canlex/server.py", "_is_canada_entry", "which entry is a conviction in Canada (relief routing)"),
    ("canlex/server.py", "CARD_HELD", "the record card's HELD FOR REVIEW line"),
    ("canlex/server.py", "_whole_answer_only",
     "which re-runs compared only the whole answer on a result not settled at step 2"),
    ("canlex/server.py", "DECISIVE_OPEN_NOTE",
     "the note that status and relief were not compared reading by reading"),
    ("canlex/narrative.py", "in_force_at",
     "a report provision not in force at commission is never proposed"),
    # the act branch on step 1's footing: acquittal readings, ENF 2 s. 3 caveats,
    # the Rodriguez Anzola caveat (disposition roadmap T1.5, T1.10; critic, 2026-09-16)
    ("canlex/commentary.py", "CAVEAT_CLASSES",
     "which branch each curated caveat id bears on; after an acquittal no act-branch draft"),
    ("canlex/commentary.py", "AUTHORITY_CAVEAT_HEAD",
     "a case-law caveat on the conviction branch is not settled; both readings"),
    ("canlex/commentary.py", "caveat_class", "a caveat's class ('act' by default)"),
    ("canlex/commentary.py", "caveat_in_play", "which caveats print on which step-1 footing"),
    ("canlex/screening.py", "programme_running",
     "when the record says a programme still runs (ENF 2 s. 3: the trial has not concluded)"),
    ("canlex/screening.py", "duress_words", "when the record says the plea or the act was coerced"),
    ("canlex/server.py", "STEP1_FOOTING_LABEL", "the footing named on the card's step-1 line"),
    ("canlex/server.py", "ENF2_RUNNING_LINE",
     "ENF 2 s. 3's concluded-trial condition for a programme still running"),
    ("canlex/server.py", "ACT_NOT_SETTLED_DRAFT",
     "the allegation line after an acquittal: NOT SETTLED, no act-branch allegation"),
    ("canlex/server.py", "ACT_NOT_SETTLED_NEXT",
     "no removal path or s. 44 note on the act footing alone after an acquittal"),
    ("canlex/server.py", "ACT_NOT_SETTLED_WHY", "the card's reason an acquittal answer is not settled"),
    ("canlex/server.py", "BOTTOM_LINE_ACT_NOT_SETTLED",
     "the bottom line after an acquittal: never 'the act branch remains'"),
    ("canlex/server.py", "CAVEAT_BOTTOM_LINE", "the bottom-line clause of each caveat class"),
    ("canlex/server.py", "CAVEAT_NOT_IN_PLAY",
     "why an entry's caveat is not printed on the record's footing"),
    ("canlex/server.py", "CARD_POLICY_CAVEAT", "the card Action's POLICY CAVEAT clause (T1.5 and T1.10)"),
    ("canlex/server.py", "CARD_ACT_NOT_SETTLED_ACTION",
     "the card's action after an acquittal: no act-branch report"),
    ("canlex/server.py", "CARD_RUNNING", "the card's running-programme clause"),
    ("canlex/server.py", "CARD_DURESS", "the card's coercion clause (Rodriguez Anzola)"),
    ("canlex/server.py", "CARD_HISTORY_ACT_OPEN",
     "the record card's clause for entries whose act branch is not settled"),
    ("canlex/server.py", "HISTORY_ACT_COUNTED",
     "the record-level count reads an acquitted entry as a committed act: one reading"),
    ("canlex/server.py", "HISTORY_CAVEAT_WHERE", "where a record's caveat readings are printed"),
    ("canlex/server.py", "IF_ACT_USED",
     "the TRP, rehabilitation and step-3 lines are conditional after an acquittal"),
    ("canlex/server.py", "_footing", "the verdict-to-footing rule"),
    ("canlex/server.py", "_caveat_label", "the short source label a caveat clause names"),
    ("canlex/server.py", "_act_branch",
     "how step 1 leaves the act branch: not in play, not settled, running, caveat, open"),
    ("canlex/server.py", "_act_not_settled", "when no act-branch allegation is drafted"),
    ("canlex/server.py", "_caveat_block", "which caveat lines step 1 prints on the record's footing"),
    ("canlex/server.py", "_caveat_bottom_lines", "which caveat clauses the bottom line prints"),
    ("canlex/server.py", "_card_step1_clause", "the card's step-1 footing, running and coercion clauses"),
    ("canlex/server.py", "_if_act_used", "when the conditional prefix applies"),
    ("canlex/server.py", "_history_step1_clause", "the record card's per-entry step-1 clause"),
    ("canlex/server.py", "_history_step1_result", "each entry's step 1 in the record's CANLEX_RESULT"),
    # row selection by mechanism and the step-1 headline (disposition roadmap
    # T1.11, T6.1; 2026-09-16)
    ("canlex/server.py", "_select_row",
     "which state row governs: covers among same-state rows, other programmes routed to their "
     "entry or verdict, not_for, a mechanism mismatch, a vacatur ground not stated"),
    ("canlex/server.py", "_readings_agree",
     "a mismatch is not raised when the entry's reading and the row share one footing"),
    ("canlex/server.py", "_row_words",
     "the record words row selection reads: refused segments and negated words dropped"),
    ("canlex/server.py", "_resolve_step1",
     "step 1 on the matched entries: routed entry, floored verdict, then the question flags"),
    ("canlex/server.py", "ROW_MISMATCH_LINES", "the ROW NOT APPLIED wording of each row-selection outcome"),
    ("canlex/server.py", "ROW_MISMATCH_CARD", "the card clause when a state row is not applied"),
    ("canlex/server.py", "ROW_MISMATCH_TIER", "the memo's step-1 tier when a state row is not applied"),
    ("canlex/server.py", "ROW_PROGRAM_NOTE", "how an other-programme note is appended"),
    ("canlex/server.py", "_row_mismatch_line", "which ROW NOT APPLIED line or card clause prints"),
    ("canlex/server.py", "_row_mismatch_result", "the row_mismatch field of CANLEX_RESULT"),
    ("canlex/server.py", "STEP1_HEADLINE", "canlex_us_disposition's first line: the governing verdict"),
    ("canlex/server.py", "STEP1_GOVERNS", "what governs step 1: a row, an entry, the wording, a routing"),
    ("canlex/server.py", "STEP1_CONSEQUENCE", "the footing a step-1 verdict puts the record on"),
    ("canlex/server.py", "STEP1_CONSEQUENCE_ACT",
     "the act-branch clause of the consequence (acquittal, ENF 2 caveat, running programme)"),
    ("canlex/server.py", "STEP1_DECIDES", "the WHAT DECIDES IT line"),
    ("canlex/server.py", "STEP1_DECIDES_TEXT", "what decides step 1 in each case"),
    ("canlex/server.py", "ENTRY_LEVEL_VERDICT", "the entry verdict, demoted and labelled"),
    ("canlex/server.py", "OTHER_STATES_COUNT", "the other states as a count when a state is given"),
    ("canlex/server.py", "ROW_NOT_APPLIED_HEAD", "the heading of a state row that is not applied"),
    ("canlex/server.py", "FRAMEWORK_POINTER",
     "the conviction framework in brief: Burgon, Barnett, Saini para 24, s. 33 and Mugesera "
     "para 114, s. 36(3)(d)"),
    ("canlex/server.py", "_step1_headline", "the STEP 1 FOR THIS RECORD, CONSEQUENCE and WHAT DECIDES IT lines"),
    ("canlex/server.py", "_deciding_sentence", "which sentence of a curated text is shown as deciding"),
    # the review of batch 1 (fixer, 2026-09-16): later judgments, refused offers and
    # transfers, split counts by offence, penal orders not final, the place floor,
    # carried programme caveats, both-footing cards
    ("canlex/screening.py", "_negated_at", "a negation right before a phrase ('not adjudicated guilty')"),
    ("canlex/screening.py", "_adjudication_after",
     "which later words are an adjudication of guilt after a programme revocation (never negated; a "
     "finding of guilt only after the programme itself was revoked, struck or terminated)"),
    ("canlex/screening.py", "_later_judgment",
     "a later conviction the record reports after another disposition is read (never another charge)"),
    ("canlex/screening.py", "_later_outcome",
     "whether the words after a trial set or a new trial report an outcome"),
    ("canlex/screening.py", "_split_counts",
     "the split-counts question: count words, a plea to a count, an unreported count, outcomes naming "
     "different offences"),
    ("canlex/screening.py", "_penal_order_open",
     "a penal order the record does not show final (an objection, a setting-aside, an acquittal)"),
    ("canlex/server.py", "_with_program_caveats",
     "the routed entry carries the policy caveats a programme names (CPL 160.50: the acquittal readings)"),
    ("canlex/server.py", "ROW_PROGRAM_QUESTION", "a programme's deciding question on the ROW NOT APPLIED line"),
    ("canlex/server.py", "PLACE_NOT_NAMED_WHERE", "the places a gate lists, said with the place flag"),
    ("canlex/server.py", "CARD_BOTH_ACT_NOT_SETTLED_ACTION",
     "the card action on both footings after an acquittal caveat: the conditional conviction report"),
    ("canlex/server.py", "CARD_BOTH_ACT_NOT_SETTLED_WHY", "the card result on both footings with the caveat"),
    ("canlex/server.py", "CARD_BOTH_QUESTION", "the card's fallback deciding question"),
    ("canlex/server.py", "CARD_ROUTED_ACT_NOT_SETTLED_ACTION",
     "the card action for a routed record carrying the acquittal readings (was it an acquittal?)"),
    ("canlex/server.py", "CARD_ROUTED_ACT_NOT_SETTLED_WHY", "the card result for that routed record"),
    ("canlex/server.py", "CARD_HISTORY_COUNT_ONE_READING",
     "the history card: the count reads an acquitted entry as a committed act on one reading only"),
    # the review of batch 1, round 2 (fixer, 2026-09-16): refusals bound to their
    # object, a later conviction on another matter or a question, trial-set and
    # new-trial outcomes, transfers that took effect, judgments that are not guilt,
    # dismissals of what is not a charge, penal orders shown final, relief ordering,
    # place-gated names, the CPL state inference, question cards
    ("canlex/screening.py", "_REFUSAL_BREAK", "where the refused-relief pass breaks a record (brackets, a slash)"),
    ("canlex/screening.py", "_refused_spans",
     "a refusal cuts only the relief, programme or offer it binds to (never a test, a charge or advice)"),
    ("canlex/screening.py", "_adjudication_ok",
     "a later judgment that is not this programme's: another person or matter, costs, a named offence"),
    ("canlex/screening.py", "_PRIOR_LABEL", "a 'PRIOR:' label: the judgment after it is earlier in time"),
    ("canlex/screening.py", "_deferral_count_split", "a deferral on one count and an adjudication on another"),
    ("canlex/screening.py", "deferral_count_split", "the same, on the record's words, for the server"),
    ("canlex/screening.py", "_adult_court",
     "a transfer to adult court that took effect, or not; the case returned to juvenile court"),
    ("canlex/screening.py", "_dismissal_after",
     "a dismissal after conviction words: another named charge (split counts) or the question"),
    ("canlex/screening.py", "_penal_order_state",
     "a penal order shown final, open, or objected to with a stated outcome (acquittal, conviction)"),
    ("canlex/screening.py", "_new_trial_skip",
     "a new-trial phrase that orders no new trial: negated, refused, another person's, undone"),
    ("canlex/screening.py", "_BARE_GUILTY", "a bare GUILTY segment read as an adjudication after a revocation"),
    ("canlex/server.py", "_FOREIGN_WORD_ACRONYMS", "acronym names never matched for a non-US record ('ALS')"),
    ("canlex/server.py", "_RELIEF_ENTRIES", "the relief entries, by id, for ranking on any dataset"),
    ("canlex/server.py", "_is_relief_entry", "which entries rank as relief"),
    ("canlex/server.py", "_acquittal_first", "an acquittal ranks ahead of a dismissal the words also reach"),
    ("canlex/server.py", "_GATED_OBJECT", "the object nouns a place-gated verdict name may not follow"),
    ("canlex/server.py", "_gated_object_before",
     "a place-gated name that describes an object ('ALLEGATION NOT PROVEN') is not a verdict"),
    ("canlex/server.py", "_SPLIT_DEFERRAL_ENTRIES",
     "the deferral entries the split-counts question answers for when a deferred count is split"),
    ("canlex/server.py", "_CPL_CITE", "a New York CPL cite in the record's words"),
    ("canlex/server.py", "STATE_INFERRED_CPL", "the note that the state was inferred from a CPL cite"),
    ("canlex/server.py", "CARD_QUESTION_RESULT", "the card result on both footings with a wording question"),
    ("canlex/server.py", "CARD_QUESTION_ACTION",
     "the card action on both footings with a wording question: each branch's report conditionally"),
    ("canlex/server.py", "CARD_QUESTION_ACT_CAVEAT", "the act side's policy caveat in that action"),
    ("canlex/server.py", "CARD_QUESTION_ACT_OPEN", "the act side NOT SETTLED after an acquittal in that action"),
    ("canlex/server.py", "CARD_QUESTION_NO_ACT", "the act side with no act-branch ground in that action"),
    ("canlex/server.py", "CARD_HISTORY_QUESTION", "the history card's clause for entries a wording question leaves open"),
    ("canlex/server.py", "CARD_HISTORY_QUESTION_ACTION", "the history card action when only such entries engage"),
    ("canlex/server.py", "CARD_HISTORY_QUESTION_CLAUSE", "one such entry's conditional clause"),
    ("canlex/server.py", "REVERSAL_QUESTION",
     "a reversal on appeal whose words state no outcome: acquittal, dismissal or new trial?"),
    ("canlex/server.py", "_REVERSAL_OUTCOME_WORDS", "the words that state a reversal's outcome"),
    ("canlex/server.py", "_step1_question", "the deciding step-1 question the cards name"),
    ("canlex/server.py", "_question_act_text", "the non-conviction side of a conditional card action"),
    # the review of batch 1, round 3 (fixer, 2026-09-16): relief after a dismissal, the
    # verb kept for an adult transfer, procedural words no disposal, no-charge names
    # beside a conviction, offers not completed, count-scoped new trials and trial
    # settings, supervision violations only, labelled splits, findings on violations and
    # enhancements, deferred sentences across field breaks, penal orders not shown final,
    # places noted, routed and unknown card wording, held moves
    ("canlex/screening.py", "_weak_back",
     "a bare 'INDICTED' or 'LATER CHARGED' brings the matter back only with no other offence named"),
    ("canlex/screening.py", "_MAJOR_BREAK", "where an outcome-and-offence segment ends (';', ',', '|')"),
    ("canlex/screening.py", "_offence_label",
     "a segment that is only an offence label joined to a dismissal (split counts)"),
    ("canlex/screening.py", "_cut_finding_labels",
     "a not-guilty finding on a violation, enhancement or specification is not the charge's verdict"),
    ("canlex/screening.py", "_other_case_conviction",
     "a conviction on another charge or case given as a dismissal's reason is not this charge's"),
    ("canlex/server.py", "_NO_CHARGE_NAMES", "the no-charge names that yield to a conviction elsewhere"),
    ("canlex/server.py", "_NO_CHARGE_OBJECT", "the objects that put a no-charge phrase on another matter"),
    ("canlex/server.py", "_NO_CHARGE_FILE_OBJECT", "a class of charge declined ('DECLINED TO FILE FELONY')"),
    ("canlex/server.py", "_NO_CHARGE_OBJECT_PROCEDURAL",
     "a no-charge phrase's procedural object ('REQUIRED BY PROBATION') is never a charge's outcome"),
    ("canlex/server.py", "_no_charge_yields",
     "a no-charge name never answers a record with conviction words in another segment"),
    ("canlex/server.py", "_SEGMENT_BOUND_NAMES", "the deferred-sentence names read only as adjacent words"),
    ("canlex/server.py", "_segment_bound_ok", "a deferred sentence never read across a field break"),
    ("canlex/server.py", "_GATED_OBJECT_ADMITTED",
     "the object nouns a gated verdict name may not follow for a record from the gated place"),
    ("canlex/server.py", "_name_pos", "where a matched name stands in the record's words (relief ordering)"),
    ("canlex/server.py", "_deferred_sentence_first",
     "a named deferred sentence with a state row ranks ahead of a deferred adjudication without one"),
    ("canlex/server.py", "_gated_readings_non_conviction",
     "a place-gated match whose every reading is a non-conviction keeps its verdict (place noted)"),
    ("canlex/server.py", "_MEXICAN_STATES", "a Mexican state as the state field makes the record Mexican"),
    ("canlex/server.py", "COUNTRY_INFERRED_MEXICO", "the note that the country was inferred as Mexico"),
    ("canlex/server.py", "STEP1_UNKNOWN_QUESTION", "the card says step 1 matched no curated entry"),
    ("canlex/server.py", "ACT_NOT_SETTLED_DRAFT_ROUTED",
     "the memo's act-branch line for a routed programme: if the termination was an acquittal"),
    ("canlex/server.py", "CARD_HISTORY_COUNT_ONE_READING_ROUTED",
     "the history card count clause for a routed programme: if it was an acquittal"),
    ("canlex/server.py", "CARD_HISTORY_ACT_OPEN_ROUTED",
     "the history card clause for a routed programme: if it was an acquittal"),
    ("canlex/server.py", "_held_moved", "a name moved to a held entry: the composed release says so"),
    # the review of batch 1, round 4 (fixer, 2026-09-18): acquittals beside sealings and
    # vacaturs, offers not completed, proceedings reinstated, plea-downs, prior convictions
    # noted, sentencing continuances, warrants on violations, joined relief and dismissal,
    # appeals allowed, refused set-aside motions, negated conviction words, stays of
    # execution, count-scoped retrials, the RP-04 held guard, the Canadian NCR verdict
    ("canlex/screening.py", "_PROGRAMME_WORDS",
     "the programme words the revocation rules and the judgment-upon-revocation cue bind to"),
    ("canlex/screening.py", "_NEGATED_CONVICTION_WORD",
     "the negated conviction words the curated entries never read ('NOT CONVICTED', 'NO CONVICTION')"),
    ("canlex/screening.py", "_cut_violation_warrant",
     "a warrant on a supervision violation after conviction words enforces the sentence: no pending charge"),
    ("canlex/screening.py", "_cut_other_dismissals",
     "a dismissal labelled costs, a warrant or a bond, or of another case, beside conviction words"),
    ("canlex/screening.py", "_relief_dismissal_joined",
     "a sealing or expungement joined to the dismissal that came first, or 'no conviction': no question"),
    ("canlex/screening.py", "relief_dismissal_joined", "the same, on the record's words, for the server"),
    ("canlex/server.py", "_place_key", "the place key a record's state or country is matched to a gate with"),
    ("canlex/server.py", "_place_spellings",
     "the place keys one place field yields: split on commas, slashes and brackets, 'the' and 'S.' read"),
    ("canlex/server.py", "_ACQUITTAL_AHEAD_OF",
     "the entries an acquittal ranks ahead of when the record carries no conviction words"),
    ("canlex/server.py", "_ACQUITTAL_WORDS", "the acquittal words the relief ordering reads on any dataset"),
    ("canlex/server.py", "STEP1_FACT_SPECIFIC_QUESTION",
     "the card's fallback question for a curated FACT-SPECIFIC entry that states none"),
    ("canlex/server.py", "ALLEGATION_HELD", "the memo's draft line when held content is reached: nothing drafted"),
    ("canlex/server.py", "CARD_HELD_ACTION", "the card action when held content is reached: no report drafted"),
    ("canlex/server.py", "CARD_HISTORY_HELD", "the history card's clause for entries that reach held content"),
    ("canlex/server.py", "CANADA_PREROGATIVE_QUESTION",
     "the Canadian card's question when a prerogative pardon is named (LEGAL-6, 2026-09-22)"),
    ("canlex/server.py", "CANADA_UNSETTLED_QUESTION", "the Canadian card's question when the words may not be a conviction"),
    ("canlex/server.py", "CANADA_CARD_UNSETTLED_ACTION",
     "the Canadian card's action when the words may not be a conviction: each branch conditionally"),
    ("canlex/rehab.py", "_CANADA_NCR", "a Canadian NCR verdict in the record's words"),
    ("canlex/rehab.py", "NCR_TEXT", "the Canadian NCR verdict is no conviction (Criminal Code s. 672.35)"),
    ("canlex/rehab.py", "_CANADA_NEW_TRIAL", "a Canadian new trial ordered: the charge is pending again"),
    # the review of batch 1, round 5 (fixer, 2026-09-18): the second verification's blockers and
    # majors -- bail releases, negated conviction words, stets reopened, adult transfers in
    # another case, diversions not completed, sentencing continuances, remands, set-asides on
    # appeal or for legal error, count splits, revocations followed by a term, summonses
    # reissued, granted motions to adjudicate, prosecution appeals, penal-order finality,
    # relief pending, prior matters, the composed release's held mechanisms
    ("canlex/screening.py", "_DISPOSITION_ABBREVIATIONS",
     "the record abbreviations expanded before the cues read the words ('CNV', 'NG', 'ACQ', 'JOA', 'DISP BY PLEA')"),
    ("canlex/screening.py", "_MILITARY_CUE",
     "a military record cue: specifications are counts and a not-guilty specification finding is the verdict"),
    ("canlex/screening.py", "_TERM_ONLY", "a bare term segment skipped between a programme and its revocation"),
    ("canlex/screening.py", "_REFUSAL_OBJECT_KEPT",
     "what a refused motion to set aside a dismissal, an acquittal or relief keeps: that outcome's word"),
    ("canlex/screening.py", "set_aside_appellate",
     "a set-aside in one segment with an appellate word is never the rehabilitative set-aside entry's"),
    ("canlex/screening.py", "_cut_prior_segments",
     "a segment reporting an earlier matter ('PRIOR: CONVICTED 2010') is not this record's"),
    # the code audit of 2026-09-21 (tools-infra-02/03): every function FastMCP publishes --
    # its docstring IS the tool's description the client model reads, and predeploy now
    # fingerprints that docstring and the decorator's keywords -- and the officer-facing
    # notes the retrieval and lookup tools print
    ("canlex/server.py", "canlex_search_legislation",
     "the search tool's published description and its result notes"),
    ("canlex/server.py", "canlex_get_section", "the section lookup tool's published description"),
    ("canlex/server.py", "canlex_us_equivalency",
     "the equivalency tool's published description and its memo"),
    ("canlex/server.py", "canlex_rehabilitation",
     "the rehabilitation tool's published description and its memo"),
    ("canlex/server.py", "canlex_whats_new", "the what's-new tool's published description"),
    ("canlex/server.py", "canlex_citing", "the citing tool's published description"),
    ("canlex/server.py", "canlex_toc", "the table-of-contents tool's published description"),
    ("canlex/server.py", "canlex_case",
     "the citator tool's published description (which courts a neutral citation resolves for)"),
    ("canlex/server.py", "_res_grounding", "the grounding resource"),
    ("canlex/server.py", "_res_corpus", "the corpus inventory resource"),
    ("canlex/server.py", "_res_conviction_framework", "the conviction methodology resource"),
    ("canlex/server.py", "_res_equivalency_framework", "the equivalency methodology resource"),
    ("canlex/server.py", "_res_rehabilitation_methodology",
     "the rehabilitation methodology resource"),
    ("canlex/rehab.py", "methodology_text", "the rehabilitation methodology resource body"),
    ("canlex/server.py", "WEAK_MATCH_NOTE", "the RETRIEVAL CAUTION printed over a weak match"),
    ("canlex/server.py", "_guidance_age_note", "the warning printed over guidance older than "
                                               "_GUIDANCE_AGE_YEARS"),
    ("canlex/server.py", "_guidance_label",
     "the provenance label under guidance: publisher, legal force, status"),
    ("canlex/server.py", "_is_jurisprudential_guide",
     "which IRB decisions are labelled Chairperson's jurisprudential guides"),
    ("canlex/server.py", "_TRAN_DECIDED", "the date Tran was decided, for the pre-Tran note"),
    ("canlex/screening.py", "_set_aside_legal_error",
     "a set-aside for a stated legal-error ground reads as a vacated conviction (the reversal entry)"),
    ("canlex/screening.py", "_cut_pending_other",
     "another matter's charge pending, or a bare 'case pending', after conviction words is cut"),
    # ---- audit follow-up 2026-09-21, group B (reviewed) ----
    ("canlex/server.py", "GROUNDING_BRIEF",
     "the brief answering instructions canlex_get_section(grounding='brief') prints"),
    ("canlex/server.py", "_res_corpus_view",
     "the canlex://corpus/{view} resource: the corpus inventory, compact or one doc_type"),
    # ---- end group B (reviewed) ----
    # ---- verification round G1 (2026-09-22): the quantity reader is an ALLOWLIST ----
    ("canlex/screening.py", "_DOT_GROUPED",
     "a dot followed by three digits reads two ways and names no amount (Q9)"),
    ("canlex/screening.py", "QUANTITY_NEUTRAL_WORDS",
     "the only words besides the pairing's own that may stand beside a settling amount"),
    ("canlex/screening.py", "_REST_PUNCT", "the only characters that may stand outside the amount"),
    ("canlex/screening.py", "_UNIT_TOKENS", "unit words: a term naming one lends no words"),
    ("canlex/screening.py", "_plain_chars", "no digit or symbol outside the one amount"),
    ("canlex/screening.py", "quantity_terms", "the pairing words the allowlist is derived from"),
    ("canlex/screening.py", "_term_pieces", "content words and in-order runs of the terms"),
    ("canlex/screening.py", "offence_words_only",
     "the allowlist grammar: content words, neutral words, function words only inside a run"),
    ("canlex/screening.py", "_cut_off", "a record cut off after the amount does not settle"),
    ("canlex/screening.py", "_liability_cue",
     "the one inchoate or party cue read (inchoate(); set aside beside an amount)"),
    ("canlex/screening.py", "_offence_tokens",
     "the liability cue and the military jurisdiction set aside before the allowlist"),
    ("canlex/screening.py", "settled_quantity",
     "the only amount that settles a quantity limb (Q1-3, Q7, Q8, Q11)"),
    ("canlex/screening.py", "SCHEDULE_VII_FORMS",
     "cannabis forms former CDSA Schedule VII sets no amount for (Q5)"),
    ("canlex/screening.py", "SCHEDULE_VII_FORM_NOTE", "the Schedule VII wording quoted for them (Q5)"),
    ("canlex/screening.py", "SCHEDULE_VII_WORDS",
     "the Schedule VII substance words that may stand beside a settling amount"),
    ("canlex/screening.py", "schedule_vii_forms", "which Schedule VII forms the record names (Q5)"),
    ("canlex/screening.py", "QUANTITY_HELD_NOTE", "why a split part's amount is not settled (Q4)"),
    ("canlex/screening.py", "_QUANTITY_HELD", "a split part's amount is held open (Q4)"),
    ("canlex/screening.py", "quantity_held", "a split part's amount is held open (Q4)"),
    ("canlex/screening.py", "quantity_is_held", "a split part's amount is held open (Q4)"),
    ("canlex/screening.py", "plain_offence",
     "a part of a split string that is an offence of its own and nothing else (Q4)"),
    ("canlex/screening.py", "SPLIT_AMOUNT_CAUTION",
     "the refusal's caution not to enter a qualified amount alone (Q4)"),
    ("canlex/screening.py", "split_amount_caution", "when the refusal adds that caution (Q4)"),
    ("canlex/screening.py", "QUANTITY_EXACT_INSTRUCTION",
     "write the EXACT amount; a bound or an estimate cannot be written as one (Q10/Q13)"),
    ("canlex/screening.py", "_form_note", "the Schedule VII note for the forms named"),
    ("canlex/screening.py", "_no_exact_amount", "why no amount settles the quantity"),
    ("canlex/screening.py", "quantity_open_why", "the memo's reason the quantity is open"),
    ("canlex/screening.py", "quantity_question", "the 'quantity' need's question"),
    ("canlex/screening.py", "POSSESSION_LIMIT_PAIRINGS",
     "which pairing's 'no equivalent' rests on the possession limits (Q6)"),
    ("canlex/screening.py", "SCHEDULE_VIII_KG",
     "former CDSA Schedule VIII: cannabis resin 1 g, cannabis (marihuana) 30 g (Q6)"),
    ("canlex/screening.py", "_RESIN_WORDS", "the words read as cannabis resin (Q6)"),
    ("canlex/screening.py", "POSSESSION_LIMIT_QUESTION",
     "former CDSA s. 4(4)/(5) and Cannabis Act s. 8(1)(a)/(b), 8(2)(a) wording (Q6)"),
    ("canlex/screening.py", "possession_limit_open",
     "when possession words do not show the limits: DEPENDS, not a settled NO (Q6)"),
    ("canlex/server.py", "_possession_limit_needs", "the possession-limit question as a need (Q6)"),
    # ---- verification round H1 (2026-09-22): the holes in the quantity allowlist ----
    ("canlex/screening.py", "_SUBSTANCE_WORDS",
     "the words that name only the substance or its form: no offence of their own (GQ-1/GQ-3)"),
    ("canlex/screening.py", "_FOLD_KEEP", "the characters the folder keeps (GQ-4)"),
    ("canlex/screening.py", "fold_erases_word",
     "a word the reader cannot read opens the quantity, never vanishes (GQ-4)"),
    ("canlex/screening.py", "quantity_limb_terms",
     "the allowlist is the QUANTITY limbs' own words; a production word opens it (GQ-2)"),
    ("canlex/screening.py", "_CLAUSE_BOUNDARY",
     "a newline, a full stop or a colon ends an offence clause (GQ-3)"),
    ("canlex/screening.py", "_term_heads", "a term's head word; two of one head are two counts (GQ-3)"),
    ("canlex/screening.py", "_substance_groups",
     "a second substance group has no amount of its own (GQ-3)"),
    ("canlex/screening.py", "one_offence_clause",
     "the amount must sit in ONE offence clause to settle a limb (GQ-3)"),
    ("canlex/screening.py", "_QUANTITY_WORDS",
     "the nouns a fact about the drug's amount is written with (GQ-5)"),
    ("canlex/screening.py", "quantity_context_open",
     "an amount in the facts or the disposition that the offence text does not state (GQ-5)"),
    ("canlex/screening.py", "QUANTITY_CONTEXT_NOTE",
     "why the facts or the disposition leave the quantity open (GQ-5)"),
    ("canlex/server.py", "_quantity_context",
     "which of the entry's words are read for another amount (GQ-5)"),
    ("canlex/server.py", "CARD_POSSESSION_LIMIT_BRANCH",
     "how a possession-limit entry is named on the record card (GQ-6)"),
    ("canlex/server.py", "CARD_POSSESSION_LIMIT_NOTE",
     "the possession-limit question printed on the card (GQ-6)"),
    ("canlex/server.py", "_possession_limit_notes",
     "when the card prints the possession-limit question (GQ-6)"),
    # ---- verification round J2 (2026-09-22): Q12, REL-15, REL-16 ----
    ("canlex/screening.py", "_Q_ISO_DATE", "an ISO date beside the amount is no amount (Q12)"),
    ("canlex/screening.py", "_Q_SLASH_DATE", "a slash date beside the amount is no amount (Q12)"),
    ("canlex/screening.py", "_Q_DATE_LABEL",
     "the words a record labels a date with, removed with it (Q12)"),
    ("canlex/screening.py", "_Q_DATE", "the dates the allowlist removes before reading (Q12)"),
    ("canlex/screening.py", "_Q_DOCKET", "a docket, case or cause number is no amount (Q12)"),
    ("canlex/screening.py", "_Q_COUNT_ID",
     "WHICH count this entry is, removed; 'N counts' is NOT, it says the offence "
     "happened more than once (Q12)"),
    ("canlex/screening.py", "_Q_SUBSECTION", "a statute subsection, never a word in brackets (Q12)"),
    ("canlex/screening.py", "_Q_SECTION", "a statute section number (Q12)"),
    ("canlex/screening.py", "_Q_TITLE", "a statute title number before the designator (Q12)"),
    ("canlex/screening.py", "_Q_BARE_CITATION",
     "a citation written with no designator: a dotted section with subsections (Q12)"),
    ("canlex/screening.py", "_MIXED_HYPHEN",
     "'1-1/2' read as the mixed number '1 1/2', the largest reading (Q12)"),
    ("canlex/screening.py", "_Q_CODE_DESIGNATORS",
     "the US statute-code designators a citation may be written with: an explicit "
     "allowlist, so an offence name or another legal system's code is no citation (K2)"),
    ("canlex/screening.py", "_citation_designators",
     "which statute designators are read as a citation: the alias table's own, "
     "restricted to the _Q_CODE_DESIGNATORS allowlist (Q12, K2)"),
    ("canlex/screening.py", "_citation_spans", "where the citations sit in the record (Q12)"),
    ("canlex/screening.py", "quantity_strip",
     "the record-keeping tokens removed before the quantity allowlist reads the words (Q12)"),
    ("canlex/rehab.py", "_RS_FR_GRANT",
     "the French grant words the Criminal Records Act uses ('accordee', 'ordonnee') (REL-16)"),
    ("canlex/rehab.py", "_RS_FR_NAME",
     "the Act's French names: 'suspension du casier' and the ACCENTED "
     "'rehabilitation' -- the unaccented spelling is an ordinary English word and "
     "names the relief only before a French grant word (REL-16, K2)"),
    ("canlex/rehab.py", "_CANADA_RS_NAME_READ",
     "which relief each French name is: the record suspension, or the pre-2012 pardon (REL-16)"),
    ("canlex/rehab.py", "rs_name_read",
     "a French naming clause reads as its English twin, post-2012 pardon reading included (REL-16)"),
    ("canlex/rehab.py", "_CANADA_RS_PREROGATIVE_CLAUSE",
     "a clause that is nothing but a prerogative pardon (REL-15)"),
    ("canlex/rehab.py", "prerogative_clause",
     "such a clause never takes a standing record suspension away: IRPA s. 36(3)(b) turns "
     "on the record suspension (REL-15)"),
)

# ---- plumbing ---------------------------------------------------------------
# Every canlex definition a registered name REACHES (tools/predeploy.py
# CodeTree) that is not itself registered: search, indexing, loading, parsing,
# formatting and data-structure helpers with no legal wording or routing of
# their own. The review gate fingerprints each registered name together with
# these, so a change to one still holds its registered callers; the list
# exists so that a NEW helper a registered name starts to rely on must be
# classified -- registered above if it carries legal wording or routing,
# listed here if not (tests/test_reviewed_code.py fails until it is).
PLUMBING = (
    # canlex/citator.py and the lookup / formatting helpers the published tools
    # reach (the code audit of 2026-09-21: every mcp.tool/prompt/resource
    # function is registered, so what they reach is classified here)
    ("canlex/citator.py", "API"), ("canlex/citator.py", "Citator"),
    ("canlex/citator.py", "KEY_FILE"), ("canlex/citator.py", "_CACHE_FILE"),
    ("canlex/citator.py", "_CANLII_SEG"), ("canlex/citator.py", "_CASE_URL"),
    ("canlex/citator.py", "_DBMAP_FILE"), ("canlex/citator.py", "_DB_URL"),
    ("canlex/citator.py", "_MAX_LIST"), ("canlex/citator.py", "_NEUTRAL"),
    ("canlex/citator.py", "_PLACEHOLDER"), ("canlex/citator.py", "_PROVINCE_SEG"),
    ("canlex/citator.py", "_THROTTLE"), ("canlex/citator.py", "_load_json"),
    ("canlex/citator.py", "api_key"), ("canlex/citator.py", "canlii_url_from_citation"),
    ("canlex/server.py", "DocType"), ("canlex/server.py", "HEDGE_THRESHOLD"),
    ("canlex/server.py", "_ARABIC"), ("canlex/server.py", "_CITATOR"),
    ("canlex/server.py", "_GUIDANCE_AGE_YEARS"), ("canlex/server.py", "_PART_NOTE"),
    ("canlex/server.py", "_ROMAN"), ("canlex/server.py", "_SCHEDULE_FORM"),
    ("canlex/server.py", "_SECTION_PREFIX"), ("canlex/server.py", "_YEAR"),
    ("canlex/server.py", "_assemble"), ("canlex/server.py", "_citator"),
    ("canlex/server.py", "_clean_citation"), ("canlex/server.py", "_format_case"),
    ("canlex/server.py", "_format_section"), ("canlex/server.py", "_log_query"),
    ("canlex/server.py", "_normalize_section"), ("canlex/server.py", "_not_found"),
    ("canlex/server.py", "_schedule_label"), ("canlex/server.py", "_stated"),
    # canlex/authorities.py -- loading the registry and the corpus, cite
    # folding, sentence splitting (the wording and choices are REVIEWED above)
    ("canlex/authorities.py", "FILE"), ("canlex/authorities.py", "PATH"),
    ("canlex/authorities.py", "_load"), ("canlex/authorities.py", "load"),
    ("canlex/authorities.py", "lookup"), ("canlex/authorities.py", "_fold"),
    ("canlex/authorities.py", "_norm"), ("canlex/authorities.py", "_QUOTES"),
    ("canlex/authorities.py", "resolve"), ("canlex/authorities.py", "chunk"),
    ("canlex/authorities.py", "_corpus"), ("canlex/authorities.py", "_corpus_file"),
    ("canlex/authorities.py", "_wanted_ids"), ("canlex/authorities.py", "_file_for"),
    ("canlex/authorities.py", "decision_present"), ("canlex/authorities.py", "_decision_keys"),
    ("canlex/authorities.py", "_KEYS_SEEN"), ("canlex/authorities.py", "_sentence"),
    ("canlex/authorities.py", "_boundaries"), ("canlex/authorities.py", "_ABBREV"),
    ("canlex/authorities.py", "_BOUNDARY"), ("canlex/authorities.py", "_act_sections"),
    ("canlex/server.py", "_index_chunks"), ("canlex/screening.py", "_code_prefix"),
    # canlex/commentary.py
    ("canlex/commentary.py", "GUIDANCE_HEADING"), ("canlex/commentary.py", "_FLAG"),
    ("canlex/commentary.py", "_SENTENCE"), ("canlex/commentary.py", "_VERIFY"),
    ("canlex/commentary.py", "_row_lines"), ("canlex/commentary.py", "_split_verify"),
    ("canlex/commentary.py", "_vlabel"), ("canlex/commentary.py", "_sources"),
    # canlex/config.py
    ("canlex/config.py", "DATA_DIR"), ("canlex/config.py", "PROCESSED_DIR"),
    ("canlex/config.py", "ROOT"),
    # canlex/embed.py
    ("canlex/embed.py", "EMB_REPO"), ("canlex/embed.py", "Embedder"),
    ("canlex/embed.py", "_MAX_TOKENS"), ("canlex/embed.py", "_PASSAGE_PREFIX"),
    ("canlex/embed.py", "_POOLING"), ("canlex/embed.py", "_QUERY_PREFIX"),
    # canlex/index.py
    ("canlex/index.py", "ACT_HINT"), ("canlex/index.py", "APPENDIX_CAP"),
    ("canlex/index.py", "B"), ("canlex/index.py", "BACKMATTER_PENALTY"),
    ("canlex/index.py", "CANDIDATES"), ("canlex/index.py", "COURT_HINT"),
    ("canlex/index.py", "INAPPLICABLE_PENALTY"), ("canlex/index.py", "K1"),
    ("canlex/index.py", "LegislationIndex"), ("canlex/index.py", "MEMO_PENALTY"),
    ("canlex/index.py", "MN_CAP"), ("canlex/index.py", "MN_WEIGHT"),
    ("canlex/index.py", "NIF_PENALTY"), ("canlex/index.py", "POOL_CAP"),
    ("canlex/index.py", "PRIMARY_DOC_TYPES"), ("canlex/index.py", "RECALL_CAP"),
    ("canlex/index.py", "REG_PENALTY"), ("canlex/index.py", "REPEALED_PENALTY"),
    ("canlex/index.py", "RERANK_POOL"), ("canlex/index.py", "RRF_K"),
    ("canlex/index.py", "SOURCE_CAP"), ("canlex/index.py", "W_SEM"),
    ("canlex/index.py", "_APPENDIX_HEAD"), ("canlex/index.py", "_APPENDIX_REF"),
    ("canlex/index.py", "_COURT_HINTS"), ("canlex/index.py", "_DECISION_WORDS"),
    ("canlex/index.py", "_EMPLOYMENT_WORDS"), ("canlex/index.py", "_FLAT_MEMO_CODES"),
    ("canlex/index.py", "_FR_HINT"), ("canlex/index.py", "_FR_WORDS"),
    ("canlex/index.py", "_FR_ACCENT_COMPANIONS"),
    ("canlex/index.py", "_INAPPLICABLE"), ("canlex/index.py", "_MARKER"),
    ("canlex/index.py", "_MEMO_CITE"), ("canlex/index.py", "_PIECE_ID"),
    ("canlex/index.py", "_PROMOTION_GATES"), ("canlex/index.py", "_SECTION_REF"),
    ("canlex/index.py", "_SECTION_NUM"), ("canlex/index.py", "_SECTION_NUMS"),
    ("canlex/index.py", "_STEMMER"), ("canlex/index.py", "_STEM_CACHE"),
    ("canlex/index.py", "_STEM_NORMALIZE"), ("canlex/index.py", "_TOKEN"),
    ("canlex/index.py", "_XREF"), ("canlex/index.py", "_applicability"),
    ("canlex/index.py", "_fold_accents"), ("canlex/index.py", "_part_is"),
    ("canlex/index.py", "_piece_no"), ("canlex/index.py", "_provision_units"),
    ("canlex/index.py", "_section_refs"), ("canlex/index.py", "_stem"),
    ("canlex/index.py", "court_hints"), ("canlex/index.py", "employment_query"),
    ("canlex/index.py", "promotion_allowed"), ("canlex/index.py", "query_lang"),
    ("canlex/index.py", "tokenize"), ("canlex/index.py", "topical_title"),
    # canlex/index.py -- step A12: guidance sub-tier knobs and flags (like
    # MEMO_PENALTY above), the criminality-route mechanics (its two content
    # constants are REVIEWED), and the read-next key resolution (the legal
    # content -- WHICH guidance an entry names -- lives in the review-gated
    # curated JSON, not here)
    ("canlex/index.py", "APPLICANT_PENALTY"), ("canlex/index.py", "ATIP_PENALTY"),
    ("canlex/index.py", "ATIP_STATUS"), ("canlex/index.py", "COMMENTARY_PENALTY"),
    ("canlex/index.py", "CRIMINALITY_ROUTE"), ("canlex/index.py", "READ_NEXT_CAP"),
    ("canlex/index.py", "SEE_ALSO_DRAFT"), ("canlex/index.py", "STATE_ONE_SOURCE"),
    ("canlex/index.py", "_APPLICANT_CODES"), ("canlex/index.py", "_CRIM_MARKERS"),
    ("canlex/index.py", "_S36_3_WORDS"), ("canlex/index.py", "_S36_CUES"),
    ("canlex/index.py", "_norm_text"), ("canlex/index.py", "_read_json"),
    ("canlex/index.py", "_see_also_match"), ("canlex/index.py", "_see_also_spec"),
    ("canlex/index.py", "criminality_allowlist"), ("canlex/index.py", "criminality_query"),
    ("canlex/index.py", "curated_see_also"), ("canlex/index.py", "draft_see_also"),
    # canlex/rehab.py
    ("canlex/rehab.py", "BASES"), ("canlex/rehab.py", "CANADA_MODES"),
    ("canlex/rehab.py", "COUNTS"), ("canlex/rehab.py", "STATUSES"),
    ("canlex/rehab.py", "_LIMB_NUMS"), ("canlex/rehab.py", "_MAX_WORLDS"),
    ("canlex/rehab.py", "_X"), ("canlex/rehab.py", "_as_date"), ("canlex/rehab.py", "_dedupe"),
    ("canlex/rehab.py", "_limb_chunk"), ("canlex/rehab.py", "_months"),
    ("canlex/rehab.py", "_need"), ("canlex/rehab.py", "_para_label"),
    ("canlex/rehab.py", "_public"), ("canlex/rehab.py", "_today_code"),
    ("canlex/rehab.py", "_s17_public"),
    # canlex/rerank.py
    ("canlex/rerank.py", "MAX_TOKENS"), ("canlex/rerank.py", "RERANK_ONNX"),
    ("canlex/rerank.py", "RERANK_REPO"), ("canlex/rerank.py", "Reranker"),
    ("canlex/rerank.py", "_MAX_DOC_CHARS"), ("canlex/rerank.py", "_MAX_QUERY_TOKENS"),
    ("canlex/rerank.py", "make_ort_session"),
    # canlex/screening.py
    ("canlex/screening.py", "Expansion"), ("canlex/screening.py", "STOP"),
    ("canlex/screening.py", "TOKEN_CAP"), ("canlex/screening.py", "_ALIAS_TABLE"),
    ("canlex/screening.py", "_CANNABIS_CONCENTRATE"),
    ("canlex/screening.py", "_CANNABIS_SLANG"), ("canlex/screening.py", "_DATE"),
    ("canlex/screening.py", "_DOTTED"),
    ("canlex/screening.py", "_PARA_CONTEXT"),
    ("canlex/screening.py", "_QUANTITY"), ("canlex/screening.py", "_SPLIT_CAP"),
    ("canlex/screening.py", "_UCMJ_ARTICLE"), ("canlex/screening.py", "_alias_table"),
    ("canlex/screening.py", "_element_items"), ("canlex/screening.py", "_expand_abbreviations"),
    ("canlex/screening.py", "_expand_phrases"), ("canlex/screening.py", "_fold"),
    ("canlex/screening.py", "_phrases_in"), ("canlex/screening.py", "_plain"),
    ("canlex/screening.py", "_terms"), ("canlex/screening.py", "_years_text"),
    ("canlex/screening.py", "alias_pattern"), ("canlex/screening.py", "all_aliases"),
    ("canlex/screening.py", "analyse"), ("canlex/screening.py", "branch_text"),
    ("canlex/screening.py", "content_tokens"), ("canlex/screening.py", "date_warnings"),
    ("canlex/screening.py", "disposition_match_text"), ("canlex/screening.py", "expand"),
    ("canlex/screening.py", "expand_disposition"),
    ("canlex/screening.py", "has_conviction_words"),
    ("canlex/screening.py", "has_military_cue"), ("canlex/screening.py", "is_single_term"),
    ("canlex/screening.py", "limb_entries"), ("canlex/screening.py", "limb_entry"),
    ("canlex/screening.py", "limb_label"), ("canlex/screening.py", "load_aliases"),
    ("canlex/screening.py", "offence_flags"), ("canlex/screening.py", "parse_date"),
    # the code audit of 2026-09-21: the exact-search bound of occurrence_range, the
    # year bounds parse_date accepts
    ("canlex/screening.py", "_OCCURRENCE_EXACT_MAX"),
    ("canlex/screening.py", "DATE_YEAR_MIN"), ("canlex/screening.py", "DATE_YEAR_MAX"),
    ("canlex/screening.py", "result_line"), ("canlex/screening.py", "suggest_by_meaning"),
    ("canlex/screening.py", "US_STATES"), ("canlex/screening.py", "_READING_KEYS"),
    ("canlex/screening.py", "_READ_FIELDS"), ("canlex/screening.py", "_RECORD"),
    ("canlex/screening.py", "_analyse"), ("canlex/screening.py", "_covers"),
    ("canlex/screening.py", "_iso_day"), ("canlex/screening.py", "_period"),
    ("canlex/screening.py", "_raw_aliases"), ("canlex/screening.py", "_state_name"),
    ("canlex/screening.py", "alias_entries"), ("canlex/screening.py", "aliases_read"),
    ("canlex/screening.py", "record_context"),
    # the record-order pass's compiled patterns, memo, folding and segment
    # spans (disposition roadmap T1.6; the rules are REVIEWED above)
    ("canlex/screening.py", "_CUE"), ("canlex/screening.py", "_RECORD_ORDER_CACHE"),
    ("canlex/screening.py", "_accent_fold"), ("canlex/screening.py", "_segments"),
    ("canlex/server.py", "_row_tier_label"),
    ("canlex/screening.py", "disposition_flags"),
    # row selection and the headline's helpers: list coercion, a state's rows,
    # phrase lookup and its cache, a row's label, sentence splitting, General
    # notes once (disposition roadmap T1.11, T6.1; the rules are REVIEWED above)
    ("canlex/server.py", "_as_list"), ("canlex/server.py", "_state_rows"),
    ("canlex/server.py", "_phrase_in"), ("canlex/server.py", "_ROW_WORDS_CACHE"),
    ("canlex/server.py", "_row_label"), ("canlex/server.py", "_DECIDING_SPLIT"),
    ("canlex/server.py", "_general_notes"),
    # the review of batch 1 (fixer, 2026-09-16): the compiled bare-'guilty' pattern;
    # the matcher's result list carrying the places a phrase-only gate lists
    ("canlex/server.py", "_Matches"),
    # the review of batch 1, round 2: a segment lookup, a same-length blank, a matched
    # name's segment index
    ("canlex/screening.py", "_seg_of"), ("canlex/screening.py", "_blank"),
    ("canlex/server.py", "_name_segment"),
    # canlex/server.py
    ("canlex/server.py", "_AUTO"), ("canlex/server.py", "_CANADA_COUNTRY"),
    ("canlex/server.py", "_INDEX"), ("canlex/server.py", "_OPEN"),
    ("canlex/server.py", "_PROVINCES"), ("canlex/server.py", "_READONLY"),
    ("canlex/server.py", "_STATE_NAMES"), ("canlex/server.py", "_TIE_BLANK"),
    ("canlex/server.py", "_US_COUNTRY"), ("canlex/server.py", "_US_OTHER"),
    ("canlex/server.py", "_US_TERRITORIES"), ("canlex/server.py", "_as_bool"),
    ("canlex/server.py", "_assumed_block"), ("canlex/server.py", "_branch_set"),
    ("canlex/server.py", "_corpus_has_decision"), ("canlex/server.py", "_disp_fold"),
    ("canlex/server.py", "_record_places"),
    ("canlex/server.py", "_disp_key"), ("canlex/server.py", "_disp_tokens"),
    ("canlex/server.py", "_entry_names"), ("canlex/server.py", "_equal_second"),
    ("canlex/server.py", "_fee_amount"), ("canlex/server.py", "_index"),
    ("canlex/server.py", "_load_dispositions"), ("canlex/server.py", "_load_equivalency"),
    # the code audit of 2026-09-21: the guarded, mtime-cached curated loader; the
    # closest-legislation hint the search tool's act-filter miss shares with _not_found
    ("canlex/server.py", "_CURATED_CACHE"), ("canlex/server.py", "_curated_json"),
    ("canlex/server.py", "_closest_acts"), ("canlex/server.py", "_md_cell"),
    ("canlex/server.py", "_fold_ws"),
    ("canlex/server.py", "_load_transborder"), ("canlex/server.py", "_max_shown"),
    ("canlex/server.py", "_option_label"), ("canlex/server.py", "_section_text"),
    ("canlex/server.py", "_state_row"), ("canlex/server.py", "_us_state_value"),
    ("canlex/server.py", "_years"), ("canlex/server.py", "mcp"),
    # the spellings of a state or province a record's state field carries --
    # dotted abbreviations, D.C. spellings, 'X, USA' wrappers -- and a flag's
    # memo-or-card text pick (disposition roadmap T1.4, T1.6; the
    # normalisation _jurisdiction applies is REVIEWED above)
    ("canlex/server.py", "_STATE_ABBREVIATIONS"), ("canlex/server.py", "_DC_SPELLINGS"),
    ("canlex/server.py", "_PROVINCE_ABBREVIATIONS"), ("canlex/server.py", "_US_WRAPPER"),
    ("canlex/server.py", "_place_code"), ("canlex/server.py", "_us_state_code"),
    # H2 (2026-09-22, G2-REL-G): the other shapes a record writes Canada in ('CAN', 'CA',
    # 'Ontario, Canada', 'Canada (Ontario)') -- the routing _jurisdiction applies with them
    # is REVIEWED above
    ("canlex/server.py", "_CANADA_WRAPPER"), ("canlex/server.py", "_CANADA_WITH_PROVINCE"),
    ("canlex/server.py", "_canada_place"),
    ("canlex/server.py", "_province_code"), ("canlex/server.py", "_state_display"),
    ("canlex/server.py", "_flag_lines"),
    # canlex/synonyms.py
    ("canlex/synonyms.py", "_COMPILED"), ("canlex/synonyms.py", "_SYNONYMS"),
    ("canlex/synonyms.py", "expand_query"),
    # canlex/airports.py -- an aerodrome's IATA code and names reach its CASR 2012
    # schedule row (2026-10-15); like the synonyms, recall only, no legal wording
    ("canlex/airports.py", "AERODROMES"), ("canlex/airports.py", "Aerodrome"),
    ("canlex/airports.py", "_BY_IATA"), ("canlex/airports.py", "_CONTEXT"),
    ("canlex/airports.py", "_ENTRIES"), ("canlex/airports.py", "_INTERNATIONAL"),
    ("canlex/airports.py", "_WINDOW"), ("canlex/airports.py", "_WORD_CODES"),
    ("canlex/airports.py", "_fold"), ("canlex/airports.py", "_in_context"),
    ("canlex/airports.py", "_phrase"), ("canlex/airports.py", "airport_terms"),
    # canlex/transborder.py
    ("canlex/transborder.py", "TABLE_FILE"), ("canlex/transborder.py", "_SEC"),
    ("canlex/transborder.py", "_norm"), ("canlex/transborder.py", "_table_rows"),
    ("canlex/transborder.py", "_yn"), ("canlex/transborder.py", "section_label"),
    # canlex/readnext.py -- resolving keys, loading the corpus (A13)
    ("canlex/readnext.py", "items"), ("canlex/readnext.py", "_file_for_act"),
    ("canlex/readnext.py", "_file_chunks"), ("canlex/readnext.py", "_INDEX_MAP"),
    ("canlex/readnext.py", "_pool"), ("canlex/readnext.py", "resolve"),
    ("canlex/readnext.py", "is_atip"), ("canlex/readnext.py", "is_guidance"),
    ("canlex/readnext.py", "chunk_ids"),
    # canlex/server.py -- the methodology lookup and the held manifest loader (A13)
    ("canlex/server.py", "_framework"), ("canlex/server.py", "_held_manifest"),
    ("canlex/server.py", "HELD_MANIFEST_FILE"), ("canlex/server.py", "_HELD_CACHE"),
    ("canlex/server.py", "_held_id"), ("canlex/server.py", "_alias_keys_read"),
    ("canlex/server.py", "_ALIAS_KEYS_READ"),
    # canlex/server.py -- the step memo and the decisive-facts data shapes (A14)
    ("canlex/server.py", "_STEP_MEMO"), ("canlex/server.py", "_step_memo"),
    ("canlex/server.py", "_memo_run"), ("canlex/server.py", "_memo_value"),
    ("canlex/server.py", "_signature_dict"), ("canlex/server.py", "_ISO"),
    ("canlex/server.py", "_history_sig_dict"), ("canlex/server.py", "_parsed_with"),
    # canlex/screening.py -- sentence tokens and units (A14)
    ("canlex/screening.py", "_SENT_SPLIT"), ("canlex/screening.py", "_SENT_UNITS"),
    ("canlex/screening.py", "_SENT_DURATION"),
    # canlex/narrative.py -- number words, the curated list, citation and chunk
    # lookups, the frames' source chunks (A15; the wording is REVIEWED above)
    ("canlex/narrative.py", "_EN_NUM"), ("canlex/narrative.py", "_FR_NUM"),
    ("canlex/narrative.py", "provisions"), ("canlex/narrative.py", "_cite"),
    ("canlex/narrative.py", "_chunk"), ("canlex/narrative.py", "FRAME_SOURCE"),
    # canlex/commentary.py and canlex/_common.py -- the corpus writer's paths,
    # names and shrink guard, reached by commentary.build (wave-4 verifier)
    ("canlex/_common.py", "CORPUS_SHRINK_GUARD"), ("canlex/_common.py", "safe_to_write"),
    ("canlex/_common.py", "stored_chunks"), ("canlex/_common.py", "write_corpus"),
    ("canlex/commentary.py", "ACT_CODE"), ("canlex/commentary.py", "ACT_NAME"),
    ("canlex/commentary.py", "ACT_SHORT"), ("canlex/commentary.py", "CURATED"),
    ("canlex/commentary.py", "EQUIV"), ("canlex/commentary.py", "OUT"),
    # canlex/server.py -- the 'none' test for relief words (wave-4 fixer)
    ("canlex/server.py", "_no_relief"),
    # canlex/calllog.py and canlex/loganalyze.py -- the MCP call log and its
    # report (2026-09-16). No registered name reaches them (the log wraps the
    # tool manager at startup; no tool body calls it); listed so every
    # definition in them is classified. They carry no legal wording or
    # routing: queueing, JSON records, sinks, the Hub upload, counting.
    # NOTICE and announce (fixer, 2026-09-16) state that calls are logged, in
    # the MCP instructions and at GET /, only while logging is on; the notice
    # is a plain statement that gives no advice about which arguments to send.
    ("canlex/calllog.py", "NOTICE"), ("canlex/calllog.py", "WARN_EVERY"),
    ("canlex/calllog.py", "announce"),
    ("canlex/calllog.py", "CallLog"), ("canlex/calllog.py", "DEFAULT_EVERY_MIN"),
    ("canlex/calllog.py", "DatasetSink"), ("canlex/calllog.py", "LOG_FILE"),
    ("canlex/calllog.py", "LocalSink"), ("canlex/calllog.py", "MAX_ITEMS"),
    ("canlex/calllog.py", "MAX_STRING"), ("canlex/calllog.py", "ARGS_BUDGET"),
    ("canlex/calllog.py", "NEEDS_CAP"),
    ("canlex/calllog.py", "NEED_CHARS"), ("canlex/calllog.py", "PATH_IN_REPO"),
    ("canlex/calllog.py", "PENDING_CAP"), ("canlex/calllog.py", "QUEUE_SIZE"),
    ("canlex/calllog.py", "RESULT_KEYS"), ("canlex/calllog.py", "RESULT_MARK"),
    ("canlex/calllog.py", "RETRY_DELAYS"), ("canlex/calllog.py", "SEARCH_KEYS"),
    ("canlex/calllog.py", "_STOP"), ("canlex/calllog.py", "_clean"),
    ("canlex/calllog.py", "_cut"), ("canlex/calllog.py", "_describe"),
    ("canlex/calllog.py", "_error_name"), ("canlex/calllog.py", "_every"),
    ("canlex/calllog.py", "_extra"), ("canlex/calllog.py", "_iso"),
    ("canlex/calllog.py", "_need"), ("canlex/calllog.py", "_output_text"),
    ("canlex/calllog.py", "_result_fields"), ("canlex/calllog.py", "_result_line"),
    ("canlex/calllog.py", "_status"), ("canlex/calllog.py", "_warn"),
    ("canlex/calllog.py", "allow_dataset_requests"), ("canlex/calllog.py", "build_record"),
    ("canlex/calllog.py", "configure"), ("canlex/calllog.py", "install"),
    ("canlex/calllog.py", "note"), ("canlex/calllog.py", "recording"),
    ("canlex/calllog.py", "wrap"),
    ("canlex/loganalyze.py", "HELD_BRANCH"), ("canlex/loganalyze.py", "NOT_SETTLED_STATUS"),
    ("canlex/loganalyze.py", "NOT_SETTLED_STATUSES"), ("canlex/loganalyze.py", "OFFENCE_KEYS"),
    ("canlex/loganalyze.py", "OPEN_BRANCHES"), ("canlex/loganalyze.py", "SEARCH_TOOL"),
    ("canlex/loganalyze.py", "held_table"),
    ("canlex/loganalyze.py", "TOP"), ("canlex/loganalyze.py", "_WEAK"),
    ("canlex/loganalyze.py", "_day"), ("canlex/loganalyze.py", "_load"),
    ("canlex/loganalyze.py", "_stamp"), ("canlex/loganalyze.py", "_summary"),
    ("canlex/loganalyze.py", "_text"), ("canlex/loganalyze.py", "download_dataset"),
    ("canlex/loganalyze.py", "load_calls"), ("canlex/loganalyze.py", "log_files"),
    ("canlex/loganalyze.py", "main"), ("canlex/loganalyze.py", "normalize"),
    ("canlex/loganalyze.py", "not_settled"), ("canlex/loganalyze.py", "offences"),
    ("canlex/loganalyze.py", "report"), ("canlex/loganalyze.py", "since"),
    ("canlex/loganalyze.py", "user_env_token"), ("canlex/loganalyze.py", "window_patterns"),
    # ---- audit follow-up 2026-09-21, group A (retrieval performance) ----
    # canlex/bm25.py: the BM25 postings as arrays and their data/cache/ cache
    # (Optimization 5/6/8); canlex/index.py: the text BM25 indexes, the
    # corrector's words and the cache key's code half; canlex/rerank.py: the
    # local-cache-first model files (Optimization 3) and the arena-shrinking
    # RunOptions (Optimization 2). Search plumbing: no legal wording.
    ("canlex/bm25.py", "Bm25Data"), ("canlex/bm25.py", "CACHE_DIR"),
    ("canlex/bm25.py", "CACHE_VERSION"), ("canlex/bm25.py", "Postings"),
    ("canlex/bm25.py", "_CACHE_PREFIX"), ("canlex/bm25.py", "_csr"),
    ("canlex/bm25.py", "_joined"), ("canlex/bm25.py", "_source"),
    ("canlex/bm25.py", "_split"), ("canlex/bm25.py", "build"),
    ("canlex/bm25.py", "cache_key"), ("canlex/bm25.py", "cache_path"),
    ("canlex/bm25.py", "code_fingerprint"), ("canlex/bm25.py", "file_stamps"),
    ("canlex/bm25.py", "first_seen"), ("canlex/bm25.py", "load"),
    ("canlex/bm25.py", "save"),
    ("canlex/index.py", "_CORRECTOR_WORD"), ("canlex/index.py", "_bm25_blob"),
    ("canlex/index.py", "_bm25_code_key"), ("canlex/index.py", "_corrector_words"),
    ("canlex/bm25.py", "_SCOPES"),
    # item 5 (the retrieval residue): a French Act's short title for the
    # section pin, the French corrector vocabulary (accents kept)
    ("canlex/index.py", "_FR_TITLE_NOTE"), ("canlex/index.py", "_fold_title"),
    ("canlex/index.py", "_french_short_title"),
    ("canlex/index.py", "_CORRECTOR_FR_WORD"), ("canlex/index.py", "_corrector_fr_words"),
    # item 8 (eval-gated, adopted): the criminality route guard's idf floor
    ("canlex/index.py", "_ROUTE_IDF_FLOOR"), ("canlex/index.py", "HIGHLIGHT_DEPTH"),
    ("canlex/rerank.py", "_ARENA_SHRINK"), ("canlex/rerank.py", "hub_file"),
    ("canlex/rerank.py", "make_run_options"),
    # ---- end of group A ----
    # ---- audit follow-up 2026-09-21, group B (plumbing) ----
    ("canlex/screening.py", "_ALIAS_LOCK"),
    ("canlex/screening.py", "_term_reading"),
    ("canlex/server.py", "_SECTION_TEXT_CACHE"),
    ("canlex/server.py", "_frozen"),
    ("canlex/server.py", "_record_assessment"),
    ("canlex/calllog.py", "ERROR_KEYS"),
    ("canlex/calllog.py", "_guard"),
    ("canlex/server.py", "TOC_FULL_LISTING"),
    ("canlex/server.py", "_TOC_NUMBER"),
    ("canlex/server.py", "_TOC_LABEL"),
    ("canlex/server.py", "_TOC_QUERY"),
    ("canlex/server.py", "_toc_matches"),
    ("canlex/server.py", "_toc_division_ranges"),
    ("canlex/server.py", "_toc_part"),
    ("canlex/server.py", "_corpus_text"),
    ("canlex/server.py", "_CORPUS_FOOTER"),
    ("canlex/server.py", "_embedding_currency_lines"),
    # ---- end group B (plumbing) ----
    # ---- verification fixes 2026-09-22, group F2 (retrieval plumbing) ----
    # the section pin's article forms: a treaty's article is no section
    # (A-PIN-ARTICLE); the BM25 cache's orphan sweep and array checks
    # (A-CACHE-TMP, SEC-3)
    ("canlex/index.py", "_TREATY"), ("canlex/index.py", "_TREATY_AFTER"),
    ("canlex/index.py", "_FR_ARTICLE_TAIL"), ("canlex/index.py", "_DOTLESS_ART"),
    ("canlex/index.py", "_article_cites_section"),
    ("canlex/bm25.py", "_TMP_STALE_SECONDS"), ("canlex/bm25.py", "_drop_stale_tmp"),
    ("canlex/bm25.py", "_consistent"),
    # ---- end group F2 ----
    # ---- verification fixes 2026-09-22, F3 (plumbing) ----
    # B-CACHE-1: the alias-table generation that keys the expansion cache
    ("canlex/screening.py", "_ALIAS_GENERATION"),
    # ---- end F3 (plumbing) ----
    # ---- verification fixes 2026-09-22, G2 (plumbing) ----
    # how the later Canadian entries are listed in the relief notes ('entries #2, #3')
    ("canlex/server.py", "_later_entries_text"),
    # ---- end G2 (plumbing) ----
)