CanLex / canlex /reviewed_code.py
Beemer0's picture Beemer's picture
claude opus 5 (1m context)
Beemer's picture
claude fable 5
Super-squash branch 'main' using huggingface_hub
ed26ce9
Raw History Blame Contribute Delete
141 kB
"""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) ----
)