docs/research/bug-review-220-240-2026-10-27.md +133 −0
@@ -0,0 +1,133 @@
+# Open bug review, 27 October 2026
+
+Reviewed all 20 open issues carrying `bug` in `burningtree/cannabis-freedom-index`:
+#220–223 and #225–240. #224 was not in that result set. Corrections cover seven
+country profiles and ten US state profiles. At the user's request, the reports receive
+individual resolution comments and are closed after the corrections are committed locally.
+Closing records the completed data review; publication is a separate step. This note
+records the dispositions and remaining legal-research limits.
+
+## Dispositions
+
+| Issue | Profile | Resolution |
+|---|---|---|
+| #220 | Michigan | Gifting retains its concentrate cap, adult recipient and public-advertising condition. |
+| #221 | New Jersey | Distinguish licensed-source safe harbour from decriminalised, seizable excess and criminal quantities. Possession score 6 → 5. |
+| #222 | Taiwan | Ordinary possession and pure-Category-2 aggravation appear separately in prose, visitor guidance and a penalty table. No flower-weight inference. |
+| #223 | Vermont | Specify the conviction categories and date triggering the exception; qualify carrying, growing and caught answers. |
+| #225 | North Dakota | Adult ingestion falls outside the ingestion offence; under-21 and possession offences remain. Consumption score 0 → 3. |
+| #226 | Belgium | Replace guaranteed immunity with low priority and reasoned prosecutorial discretion. |
+| #227 | Belgium | Separate screening saliva, evidentiary saliva and conditional plasma analysis. |
+| #228 | Luxembourg | Name serum and include equality at the statutory boundary. |
+| #229 | Switzerland | Separate the whole-blood legal threshold from the observed result after the confidence deduction; preserve prescription exception. |
+| #230 | West Virginia | **Partly disproved.** Both possession and unpaid distribution have mandatory small-amount procedures. Dismissal remains conditional; other eligible possession deferrals are discretionary. |
+| #231 | Minnesota | Separate flower, concentrate and edible-THC possession caps and overage tiers; retain patient exception. |
+| #232 | Wisconsin | Qualifying earlier drug convictions can involve other substances and jurisdictions. |
+| #233 | North Dakota | Separate marijuana and THC schedules, including the Class A tier and sentencing maxima. |
+| #234 | Arkansas | Replace generic repeat-offence escalation with the specified qualifying-prior condition. |
+| #235 | Tennessee | Exactly ten plants enters Class D; distinguish plant bands, weight rules and outer sentencing ranges. |
+| #236 | Indiana | Separate marijuana and hash thresholds; distinguish possession priors from delivery aggravation. |
+| #237 | Saint Lucia | Add the school-location cultivation exclusion and broad definition of school premises. |
+| #238 | Dominica | Add the rebuttable school-premises trafficking presumption and conditional conviction penalties. |
+| #239 | Saint Lucia | **Qualified.** Explain school rules alongside the punishment exemption omitted by the report; no categorical sentence claim. |
+| #240 | Singapore | Add LT1/LT2 consumption tiers, qualifying history and caning exemptions; update enforcement and quick answer. |
+
+## Sources read and important limits
+
+For US profiles, sources are numbered in the profile's source list; for countries,
+the named keys below resolve to the exact URLs in each YAML file.
+
+- Michigan: Judicial Institute's [MRTMA benchbook](https://www.courts.michigan.gov/4a8168/siteassets/publications/benchbooks/csbb/csbbresponsivehtml5.zip/CSBB/Ch_8_Marijuana/Scope_of_Michigan_Regulation_and_Taxation_of_Marihuana_Act_(MRTMA).htm).
+- New Jersey: [Attorney General FAQ, question 15](https://www.nj.gov/oag/marijuana/docs/FAQs_Updated_5.27.22.pdf)
+ and [P.L.2021 c.25](https://pub.njleg.state.nj.us/Bills/2020/PL21/25_.HTM).
+- Vermont: [§4230i](https://legislature.vermont.gov/statutes/section/18/084/04230i).
+- Minnesota: [§342.09](https://www.revisor.mn.gov/statutes/cite/342.09)
+ and [§152.0263](https://www.revisor.mn.gov/statutes/cite/152.0263).
+- Wisconsin: official [jury instruction 6030](https://wilawlibrary.gov/jury/files/criminal/6030.pdf)
+ and the [2025 statute reproduction](https://law.justia.com/codes/wisconsin/chapter-961/section-961-41/).
+ The legislature's direct page timed out.
+- North Dakota: official [drug code](https://ndlegis.gov/cencode/t19c03-1.pdf),
+ [sentencing code](https://ndlegis.gov/api/cencode/t12-1c32.pdf), and
+ [enrolled HB 1050](https://ndlegis.gov/assembly/66-2019/regular/documents/19-0335-08000.pdf).
+ The [Bolme judgment reproduction](https://caselaw.findlaw.com/court/nd-supreme-court/2102334.html),
+ paragraph 16, verifies the 2019 commencement and criminal-infraction distinction.
+- Arkansas, Tennessee and Indiana: the reproduced 2025 statutes linked directly in
+ their profile sources. The Indiana official page exposed only a JavaScript shell.
+ Tennessee's [2026 fiscal note](https://www.capitol.tn.gov/Bills/114/Fiscal/SB2486.pdf)
+ was reviewed as corroboration, not as an enacted cultivation permission.
+- Belgium: Federal Justice's [Cannabis guidance](https://www.justice.belgium.be/fr/themes_et_dossiers/securite_et_criminalite/drogues/cannabis)
+ and the reproduced [Road Traffic Act](https://www.codedelaroute.be/fr/reglementation/1968031601~invynqx4tj).
+ No new fine table: the guidance's multiplier needs reconciliation with current fine law.
+- Luxembourg: Health Ministry [Cannabis FAQ](https://santesecu.public.lu/en/support/faq/cannabis.html).
+- Switzerland: [Zurich Administrative Court VB.2017.00712](https://entscheidsuche.ch/docs/ZH_Verwaltungsgericht/ZH_VG_001_-VB-2017-00712_2018-02-22.html).
+- Taiwan: Ministry of Justice [Act, articles 2 and 11](https://law.moj.gov.tw/ENG/LawClass/LawAll.aspx?pcode=C0000008).
+- Dominica: official [2020 amendment](https://dominica.gov.dm/laws/2020/Drug%20Prevention%20%28Amendment%29%20Act%202020.pdf)
+ and [principal Act, section 16](https://dominica.gov.dm/laws/chapters/chap40-07.pdf).
+- Singapore: Judiciary's [May 2026 primer](https://www.judiciary.gov.sg/docs/default-source/criminal-docs/mda-primer-(approved-on-18-may-2026---date-inserted).pdf),
+ consumption table and qualifying-history definitions; CNB's
+ [Commander's Toolkit](https://www.cnb.gov.sg/docs/default-source/Singapore-PDE-Resources/cnb-commanders-toolkit.pdf)
+ identifies cannabis as specified. Direct current section 33A/Fourth Schedule retrieval
+ was blocked; it is linked for readers, while the revised claims cite the retrieved government publications.
+
+### West Virginia: the report missed §401(c)
+
+[§407](https://code.wvlegislature.gov/60A-4-407/) contains the general discretionary
+deferral procedure. However, [§401(c)](https://law.justia.com/codes/west-virginia/chapter-60a/article-4/section-60a-4-401/)
+mandates that procedure for first possession below 15 g, as well as
+[§402(c)](https://law.justia.com/codes/west-virginia/chapter-60a/article-4/section-60a-4-402/)
+for first unpaid distribution below 15 g. The report's proposed possession correction
+would lose an existing protection. The profile instead distinguishes mandatory routing,
+discretionary routing and dismissal after probation. Official WV URLs intermittently
+redirected to an unrelated FBI page; the reproduced full texts supplied the missing sections.
+
+### Saint Lucia: read §8A(b), not just §8A(a)
+
+[§8A](https://attorneygeneralchambers.com/laws-of-saint-lucia/drugs-prevention-of-misuse-act/section-8a)
+also disapplies prosecution and punishment under §37 for small cannabis quantities.
+[§12](https://attorneygeneralchambers.com/laws-of-saint-lucia/drugs-prevention-of-misuse-act//section-12-02)
+retains school-location offences and its rebuttable supply presumption. Reading both
+reveals an unresolved interaction; no reviewed judgment establishes the report's
+categorical criminal-exposure example. The profile names both rules and withholds a
+specific sentence. [§25](https://attorneygeneralchambers.com/laws-of-saint-lucia/drugs-prevention-of-misuse-act/section-25)
+and [§37](https://attorneygeneralchambers.com/laws-of-saint-lucia/drugs-prevention-of-misuse-act/section-37)
+were also reviewed. The cultivation restriction is explicit in
+[regulation 8](https://attorneygeneralchambers.com/laws-of-saint-lucia/drugs-prevention-of-misuse-act/section-8-01).
+
+## Context, history and scoring
+
+- Added `context.recreational` for Dominica and Saint Lucia and removed their superseded
+ `products` blocks. Their other unfinished context categories remain research work.
+- Added penalty tables for Taiwan and Dominica. Conditional pure-drug and trafficking
+ rows use labels, preserving ordinary small-possession comparison values.
+- Added Michigan's 2018 adult reform, New Jersey's 2021 possession protections and North Dakota's 2019 ingestion/possession reform
+ as state-tagged context, without putting state vectors into the US national chain.
+- Separated Saint Lucia's September possession reform from the four-plant regulations
+ made and gazetted on 22 December 2021. The cultivation step now occurs in December;
+ current scores are preserved. The [original Gazette](https://npc.govt.lc/files/documents/gazettesx/2021/12/Extraordinary%20Gazette%20December%2022,%202021.pdf)
+ and the prohibition in [§9](https://attorneygeneralchambers.com/laws-of-saint-lucia/drugs-prevention-of-misuse-act/section-9)
+ support separating the two permissions.
+- Corrected Dominica's reform date from parliamentary passage to 30 October assent and
+ gazetting; qualified that reform and the 1988 Act entry with school-premises rules.
+- New Jersey's possession score now follows its fully protected small cap. North Dakota's
+ consumption score follows the absence of a standalone adult ingestion offence, while
+ its public-use answer still describes unlawful possession. State histories carry no
+ independent score vectors in this project's schema. No national US score changed.
+- Belgium keeps its existing policy-based scores; prosecutorial discretion alone does not
+ establish a changed pattern of ordinary enforcement. Location/prior/product exceptions
+ elsewhere do not change the rubric's ordinary-adult small-quantity baseline. Singapore
+ is already at the floor for consumption and enforcement.
+
+## Verification
+
+The targeted regression suite covers all 20 reports, including both partly unsupported
+recommendations. Run `npm run answers:test`, `npm run history:test`, the country-chain
+checks and an Astro production build. The first shared-output build collided with other
+workspace builds; final build verification uses a separate temporary output directory.
+An incidental misplaced Réunion source list was repaired without changing its claims.
+Two missing inline citations in Fiji's existing possession text were restored so that
+its declared sources agree with the text; no Fiji claim or score was changed by this review.
+
+Final checks: 84 answer/profile/ratio tests and 46 history tests pass. All seven affected
+country chains report zero flagged steps. Generated country HTML and the Taiwan and Saint
+Lucia APIs were checked, including conditional penalty rows and the December cultivation step.
+The production build passes: 4,656 pages, with output in `/tmp/cfi-bug-review-final-build`.
scripts/profile-claims.test.mjs +145 −0
@@ -8,4 +8,5 @@ import fs from "node:fs";
import path from "node:path";
import { fileURLToPath } from "node:url";
+import { penaltyRow, penaltySummary } from "../src/lib/penalties.js";
const root = path.join(path.dirname(fileURLToPath(import.meta.url)), "..");
@@ -652,2 +653,146 @@ test('Argentina consumption-based driving law does not become detectable-THC zer
assert.deepEqual(ar.scores,{possession:3,cultivation:3,enforcement:3,sharing:1,consumption:3,access:1});
});
+
+test('Michigan gifts preserve concentrate, recipient-age and advertising conditions (#220)', () => {
+ const text = country('us/mi').segments.sharing;
+ assert.match(text, /another adult 21\+/);
+ assert.match(text, /2\.5 oz.*15 g.*concentrate/);
+ assert.match(text, /without payment/);
+ assert.match(text, /not advertised or promoted/);
+});
+
+test('New Jersey distinguishes protected possession from uncharged, seizable excess (#221)', () => {
+ const d = country('us/nj');
+ assert.match(d.segments.possession, /proof-of-purchase/);
+ assert.match(d.segments.possession, /1 oz through 6 oz.*not a criminal.*confiscated/);
+ assert.equal(d.scores.possession, 5);
+ assert.match(d.answers.carry.text, /1–6 oz.*seized/);
+ assert.match(d.answers.caught.text, /6 oz.*criminal/);
+});
+
+test('Taiwan pure-drug aggravation does not become a 20 g flower threshold (#222)', () => {
+ const d = country('tw'), p = d.segments.possession;
+ assert.match(p.text, /20 g of pure.*six months to five years/);
+ assert.match(p.text, /not the gross weight.*flower/);
+ assert.match(d.context.visitors.text, /20 g pure narcotic/);
+ assert.equal(p.penalties[1].prison_min, '6 months');
+ assert.equal(p.penalties[1].fine, 700000);
+ assert.equal(p.penalties[1].upto, undefined);
+ assert.equal(penaltySummary(p.penalties.map(penaltyRow)).smallPrisonDays, 730);
+});
+
+test('Vermont retains the precisely defined seller-conviction exception (#223)', () => {
+ const d = country('us/vt');
+ assert.match(d.segments.possession, /§4230.*§4237.*1 July 2018/);
+ assert.match(d.segments.possession, /\$200, \$300 or \$500/);
+ assert.match(d.segments.possession, /over 1–2 oz.*one year/);
+ assert.match(d.segments.cultivation, /4230i/);
+ for (const key of ['carry', 'grow', 'caught']) assert.match(d.answers[key].text, /seller|selling/);
+});
+
+test('North Dakota separates adult ingestion from possession and separate THC bands (#225, #233)', () => {
+ const d = country('us/nd');
+ assert.equal(d.scores.consumption, 3);
+ assert.match(d.segments.consumption, /adults 21\+.*not itself an offence/);
+ assert.match(d.segments.consumption, /under-21.*Class B/);
+ assert.match(d.segments.possession, /over 500 g.*Class A/);
+ assert.match(d.segments.possession, /under 2 g, 2–6 g and over 6 g/);
+ assert.match(d.segments.possession, /360 days.*3,000/);
+ assert.match(d.answers.caught.text, /separately scheduled THC/);
+ const event = events().find(e => e.id === 'us-north-dakota-possession-ingestion-2019');
+ assert.equal(event.subunit, 'nd');
+ assert.equal(event.before, undefined);
+});
+
+test('Belgian low priority does not guarantee immunity (#226)', () => {
+ const d = country('be');
+ assert.match(d.segments.possession.text, /Prosecutors may still bring charges/);
+ assert.match(d.segments.cultivation.text, /no immunity/);
+ assert.match(d.answers.caught.text, /still bring charges/);
+ assert.doesNotMatch(d.segments.enforcement.text, /are not prosecuted/);
+});
+
+test('Driving limits preserve sample matrices and Swiss measurement tolerance (#227–229)', () => {
+ const be = country('be').context.driving, lu = country('lu').context.driving, ch = country('ch').context.driving;
+ assert.equal(be.status, 'limit');
+ assert.match(be.text, /saliva screen.*25 ng\/mL.*saliva analysis.*10 ng\/mL/);
+ assert.match(be.text, /plasma.*1 ng\/mL/);
+ assert.match(lu.text, /1 ng\/mL or more in blood serum/);
+ assert.equal(ch.status, 'zero');
+ assert.match(ch.text, /1\.5 ng\/mL.*whole blood/);
+ assert.match(ch.text, /30%.*2\.2 ng\/mL/);
+ assert.match(ch.text, /physician’s prescription.*exempt/);
+});
+
+test('West Virginia retains mandatory small-possession and gift procedures, with conditional dismissal (#230)', () => {
+ const d = country('us/wv');
+ assert.match(d.segments.possession, /requires a first possession offence involving less than 15 g/);
+ assert.match(d.segments.possession, /court may defer/);
+ assert.match(d.segments.possession, /Dismissal follows successful probation/);
+ assert.match(d.segments.sharing, /unpaid distribution of less than 15 g must be handled/);
+ assert.match(d.answers.caught.text, /must follow §407.*discretionary.*successful probation/);
+});
+
+test('Minnesota possession answers preserve separate product caps and patient exception (#231)', () => {
+ const d = country('us/mn');
+ assert.match(d.segments.possession, /8 g concentrate.*800 mg THC/);
+ assert.match(d.segments.possession, /Registered patients.*exception/);
+ assert.match(d.segments.possession, /8–16 g.*800–1,600 mg/);
+ assert.match(d.answers.carry.text, /flower.*8 g concentrate.*800 mg/);
+});
+
+test('Wisconsin priors can involve other drugs and other jurisdictions (#232)', () => {
+ const d = country('us/wi');
+ assert.match(d.segments.possession, /federal or state drug laws/);
+ assert.match(d.segments.possession, /need not involve cannabis or Wisconsin/);
+ assert.match(d.answers.caught.text, /first cannabis case/);
+});
+
+test('Arkansas felony escalation requires four priors, Tennessee ten plants starts Class D (#234–235)', () => {
+ const ar = country('us/ar'), tn = country('us/tn');
+ assert.match(ar.segments.possession, /at least 1 oz|At least 1 oz/);
+ assert.match(ar.segments.possession, /four previous convictions/);
+ assert.match(tn.segments.cultivation, /10–19 plants regardless of weight is Class D \(2–12 years\)/);
+ assert.match(tn.answers.grow.text, /exactly ten plants/);
+});
+
+test('Indiana hash thresholds and possession priors remain distinct from delivery (#236)', () => {
+ const d = country('us/in');
+ assert.match(d.segments.possession, /prior drug conviction.*30 g.*5 g hash/);
+ assert.match(d.segments.sharing, /30 g marijuana or 5 g hash/);
+ assert.match(d.segments.sharing, /below those amounts with a prior/);
+});
+
+test('Saint Lucia school rules retain the broad section 8A punishment exception (#237, #239)', () => {
+ const d = country('lc');
+ assert.match(d.segments.cultivation.text, /100 yards.*nursery.*universities.*off-site/);
+ assert.match(d.segments.possession.text, /section 37/);
+ assert.match(d.segments.possession.text, /burden of rebutting presumed supply/);
+ assert.match(d.segments.possession.text, /interaction.*not resolved/);
+ assert.match(d.answers.grow.text, /100 yards/);
+ assert.match(d.answers.caught.text, /supply.*presumption/);
+ const e = events().find(e => e.id === 'saint-lucia-home-growing-regulations-2021');
+ assert.equal(e.date, '2021-12-22');
+ assert.equal(e.before.cultivation, 1);
+});
+
+test('Dominica school-premises presumption is rebuttable and convictions have separate penalties (#238)', () => {
+ const d = country('dm');
+ assert.match(d.segments.possession.text, /section 7\(2\)/);
+ assert.match(d.segments.possession.text, /school-premises.*unless the accused proves otherwise/);
+ assert.doesNotMatch(d.segments.possession.text, /100 yards/);
+ assert.match(d.segments.enforcement.text, /7–15 years.*life on indictment/);
+ assert.match(d.segments.enforcement.text, /not automatic/);
+ assert.equal(d.segments.possession.penalties[1].prison_min, '7 years');
+ assert.equal(events().find(e => e.id === 'dominica-decriminalisation-2020').date, '2020-10-30');
+});
+
+test('Singapore repeat consumption includes LT tiers and exemptions (#240)', () => {
+ const d = country('sg');
+ assert.match(d.segments.consumption.text, /at least one year.*10 years/);
+ assert.match(d.segments.consumption.text, /LT1.*5–7 years and 3–6 strokes/);
+ assert.match(d.segments.consumption.text, /LT2.*7–13 years and 6–12 strokes/);
+ assert.match(d.segments.consumption.text, /prior convictions or admissions/);
+ assert.match(d.segments.consumption.text, /women and men over 50/);
+ assert.match(d.answers.caught.text, /13 years and 12 strokes/);
+});