Cannabis Freedom Index

Changelog f3239e4tree

Align statutory penalty tables and hemp classifications

Separate product-specific sentencing, preserve life imprisonment in tables/API/comparison, and correct hemp crop categories and licensed production. Record the narrow Guyana fatal-minor capital offence and the enacted Guyana/Suriname hemp laws. Keep the unresolved Libyan amendment chain open. Validated an isolated snapshot: 193 tests, selected pages, full build and SEO audit. No personal-use scores changed. Fixes #276 Fixes #277 Fixes #278 Fixes #279 Fixes #281 Fixes #283 Fixes #284 Fixes #285 Fixes #286 Fixes #287 Fixes #288 Fixes #289 Fixes #290 Fixes #291 Fixes #292 Refs #282

3 history entries added15 country profiles edited9 files of code, design or docs +969 −227 lines

History changes.yaml

Added 3

Countries and states 15 files

Brunei countries/bn.yaml

segments › sharing › text

Giving or distributing cannabis falls withinis trafficking, which means selling, giving, administering, transporting, sending, delivering or distributing it under the Act.[@mda] Trafficking underFor plant material, less than 330 g carriesbrings five to twenty years and five to fifteen strokes; 330 g to –500 g carriesbrings twenty to thirty years and fifteen strokes; more than 500 g of cannabis, or more than 200 g of resin, carries a mandatory death sentence.[@mda] Resin uses 130 g and 200 g for those bands.[@mda] Import and export followuse the same quantity bands but start atproduct thresholds, with five to thirty years below 330 g, and possessionin the lowest band.[@mda] Possession for trafficking carries death above is a separate offence: its intermediate band is 400–600 g of cannabisplant material or 200–300 g of resin, with death above those upper limits.[@mda]

segments › sharing › penalties

label Trafficking under, plant material: less than 330 g · treatment criminal · term Trafficking · prison min 5 years · prison 20 years · note Five to fifteen strokes · caning 5, 15, label Trafficking, plant material: 330 g to –500 g · treatment criminal · term Trafficking · prison min 20 years · prison 30 years · note Fifteen strokes · caning 15, 15, label Trafficking over, plant material: more than 500 g · treatment criminal · term Trafficking · death true · note Mandatory death sentence, or over label Trafficking, resin: less than 130 g · treatment criminal · term Trafficking · prison min 5 years · prison 20 years · caning 5, 15, label Trafficking, resin: 130–200 g · treatment criminal · term Trafficking · prison min 20 years · prison 30 years · caning 15, 15, label Trafficking, resin: more than 200 g · treatment criminal · term Trafficking · death true · note Mandatory death sentence, label Import or export under, plant material: less than 330 g · treatment criminal · term Import or export · prison min 5 years · prison 30 years · caning 5, 15, label Import or export, plant material: 330–500 g · treatment criminal · term Import or export · prison min 20 years · prison 30 years · caning 15, 15, label Import or export, plant material: more than 500 g · treatment criminal · term Import or export · death true · note Five to fifteen strokesMandatory death sentence, label Import or export, resin: less than 130 g · treatment criminal · term Import or export · prison min 5 years · prison 30 years · caning 5, 15, label Import or export, resin: 130–200 g · treatment criminal · term Import or export · prison min 20 years · prison 30 years · caning 15, 15, label Import or export, resin: more than 200 g · treatment criminal · term Import or export · death true · note Mandatory death sentence, label Possession for trafficking, plant material: less than 400 g to · treatment criminal · term Possession for trafficking · prison min 5 years · prison 20 years · caning 5, 15, label Possession for trafficking, plant material: 400–600 g · treatment criminal · term Possession for trafficking · prison min 20 years · prison 30 years · note Fifteen strokes · caning 15, 15, label Possession for trafficking over, plant material: more than 600 g · treatment criminal · term Possession for trafficking · death true · note Mandatory death sentence, or over label Possession for trafficking, resin: less than 200 g · treatment criminal · term Possession for trafficking · prison min 5 years · prison 20 years · caning 5, 15, label Possession for trafficking, resin: 200–300 g · treatment criminal · term Possession for trafficking · prison min 20 years · prison 30 years · caning 15, 15, label Possession for trafficking, resin: more than 300 g · treatment criminal · term Possession for trafficking · death true · note Mandatory death sentence

context › visitors › text

There is no legal recreational supply for anyone. The Misuse[@mda] Importing or exporting more than 500 g of Drugs Act applies severe penaltiescannabis plant material or more than 200 g of resin carries mandatory death; 330–500 g of plant material or 130–200 g of resin carries twenty to possessionthirty years and trafficking, including caningfifteen strokes.[@mda] Smaller imports carry five to thirty years and, for specified trafficking quantities, death five to fifteen strokes.[@mda,hoc]

context › visitors › sources

mda, hoc

China countries/cn.yaml

segments › possession › penalties

label Small possession, Article 84 (from 2026) · treatment civil · term Small possession · … or 5 kg or more oil · treatment criminal · term Illegal possession · prison min 7 years · note Seven years or more, or life imprisonment, pluspossible · note Plus a fine

segments › sharing › text

Supplying, transporting, manufacturing or smuggling any amount is traffickinga crime under Article 347 of the Criminal Law, which has no minimum .[@criminal347] Ordinary small-quantity; large amounts can bring life imprisonment cases carry up to three years, custody or deathnon-custodial supervision, plus a fine; serious small-quantity cases carry three to seven years.[@lccriminal347] The 2016 interpretation countsnext tier starts at 30 kg of leaf, 2 kg of resin or 1 kg of oil and carries at least seven years plus a fine.[@criminal347,spc16] At 150 kg of cannabis leaf, 10 kg of resin or 5 kg of cannabis oil as, the "large amount"sentence is fifteen years, life or death with confiscation; that opens the heaviest tier.[@spc16] The Criminal Law also punishes transportingapplies to ringleaders, manufacturing and smuggling drugs regardless of quantityarmed support, serious violent resistance or organised international trafficking.[@lccriminal347,spc16]

segments › sharing › sources

lccriminal347, spc16

segments › sharing › penalties

label Trafficking any amount, small orSmall quantity without serious circumstances · treatment criminal · term Trafficking · prison 73 years · note Up to three years for a small amount, three to seven for a serious case,Custody or non-custodial supervision also possible; plus a fine, label Relatively large amountSmall quantity with serious circumstances · treatment criminal · term Trafficking · prison min 3 years · prison 7 years · note FromPlus a fine, label 30–<150 kg of leaf, 2–<10 kg of resin or 1–<5 kg of oil; seven years or more plus a fine, label Large amount or aggravating factsno capital aggravation · treatment criminal · term Trafficking · death true · prison min 157 years · note FromPlus a fine, label At least 150 kg of leaf, 10 kg of resin or 5 kg of oil, or a ringleader, armed cover, violence or international organisedOR Article 347 capital aggravation · treatment criminal · term Aggravated trafficking; · prison min 15 years · prison 15 years · death is discretionarytrue · life possible · note Alternatively a fixed fifteen-year sentence; confiscation of property

sources

China — Criminal Law, Articles 347–348 (Supreme People’s Procuratorate, English) 16 unchanged

Colombia countries/co.yaml

context › hemp › status

stricthigh

context › hemp › text

NonLicensed non-psychoactive cannabis has its own cultivation licence trackand hemp may contain less than 1% THC under the medical 2021 rules.[@hempmin] The Justice Ministry says this remains the applicable hemp threshold while the separate 0.3% fibre-and scientific system, with lower regulatory concern than psychoactive crops but still licence-boundgrain rules in Law 2204 of 2022 await implementation.[@lchempmin] There is no open unlicensed hemp regimeCultivation remains subject to ministry licensing.[@lchempmin] [CannabisIndustrial uses were opened to industrial use in 2021.](/history/colombia-industrial-use-2021/)

context › hemp › sources

lchempmin

sources

Colombia Ministry of Justice — Cannabis for medicinal, scientific and industrial purposes 15 unchanged

Ghana countries/gh.yaml

context › production › status

medicalhemp

context › hemp › status

highstandard

context › hemp › text

Industrial and medicinal cannabis with no more than 0.3% THC may be grown under licence fr … two licences went to MG Adom Limited and Juliopta Limited on 31 July 2026.[@act,ncc2631] Anything above that limit falls outsideThe regulator limits the lawlicensed crop to 0.3% THC or less.[@nacoc26nccregs]

context › hemp › sources

act, ncc2631, nacoc26nccregs

sources

Ghana Narcotics Control Commission — Cannabis Regulations 11 unchanged

Guyana countries/gy.yaml

recreational

illegaldeath

summary

Since 2022 possession of up to 30 g no longer carries prison, but counselling or community service. Section 6 provides death if unlawfully supplied narcotics cause the death of someone under eighteen.

segments › cultivation › text

Section 8 of the Narcotic Drugs and Psychotropic Substances (Control) Act punishes cultiva … d three to five years in prison on summary conviction, or five to ten years on indictment.[@cap1010] Licensed industrial hemp with no more than 0.3% delta-9 THC on a dry-weight basis follows the separate [2022 hemp law](/history/guyana-industrial-hemp-2022/).[@hemp22]

segments › cultivation › sources

cap1010, hemp22

segments › sharing › text

Supply is trafficking. Section 5 of the Act sets a fine and three to five years in prison on summary conviction, and a fine with imprisonment for life on indictment.[@cap1010] Section 6 separately provides death where unlawful supply or administration to a person under eighteen causes their death.[@cap1010,canu]

segments › sharing › sources

cap1010, canu

context › production › status

medicalhemp

context › production › text

The [2022 Industrial Hemp Act](/history/guyana-industrial-hemp was legalised separately in -2022;/) licenses cultivation, manufacturing and research involving hemp at no cannabis licensingmore than 0.3% delta-9 THC.[@hemp22] In May 2026 the agriculture minister said the authority and its chief executive were in place, but large-scale planting awaited a processing facility.[@hemp26]

context › production › sources

dpihemp22, hemp26

context › products › text

No legal THC products.

context › products › sources

pi

context › planting › text

The narcotics act makes it an offence to cultivate anyCultivating a prohibited plant, and defines cultivating to include " includes sowing or scattering theits seed" and planting the plant "or any part thereof"of it. Its schedule lists cannabis[@cap1010] Licensed industrial hemp, including its preparations and derivatives without naming seed. The 2022 hemp law, which licenses lowis separately permitted at no more than 0.3% delta-9 THC seed separately, was not readby the 2022 Act.[@hemp22]

context › planting › sources

cap1010, hemp22

sources

Guyana — Industrial Hemp Act No. 13 of 2022, Official Gazette 11 August 2022 Guyana Ministry of Agriculture — Regions Six and Ten earmarked for industrial hemp, 21 May 2026 Guyana Customs Anti-Narcotic Unit — Guyana drug and narcotics laws World Coalition Against the Death Penalty — Guyana (updated 27 October 2026) Guyana Parliament — Narcotic Drugs and Psychotropic Substances (Control) (Amendment) Act 22 of 2022 Guyana Parliament — Narcotic Drugs and Psychotropic Substances (Control) (Amendment) Act 22 of 2022 11 unchanged

segments › sharing › penalties

label Ordinary trafficking on indictment, section 5 · treatment criminal · term Trafficking · life mandatory · note Also a statutory fine; summary conviction has a separate three-to-five-year term, label Unlawful supply/administration to a person under eighteen causing their death, section 6 · treatment criminal · term Fatal supply to a minor · death true · note Requires the statutory age and causation conditions; ordinary adult supply is a separate offence

context › death penalty › text

Section 6 provides death on indictment for unlawfully supplying or administering a narcotic to someone under eighteen when the narcotic causes their death.[@cap1010,canu] Cannabis and cannabis resin are listed narcotics, so the offence’s wording includes them when those age and causation conditions are proved.[@cap1010] Ordinary trafficking under section 5 carries prison up to life.[@cap1010] Guyana’s last known execution was in 1997.[@wcadp]

context › death penalty › sources

cap1010, canu, wcadp

context › hemp › status

standard

context › hemp › text

Industrial hemp is cannabis and its parts, including seeds, with no more than 0.3% delta-9 THC on a dry-weight basis.[@hemp22] Cultivation, manufacturing and research require a licence under the [2022 law](/history/guyana-industrial-hemp-2022/).[@hemp22] In May 2026 the government was still pursuing a processing plant before large-scale cultivation could start in Regions Six and Ten.[@hemp26]

context › hemp › sources

hemp22, hemp26

Iraq countries/iq.yaml

segments › possession › text

Article 32 of the 2017 law punishes importing, producing, manufacturing, possessing, acqui … 33(2)(a)'s percentage bands are a weighing tolerance, not a small-amount tier.[@law2017] The discrepancy offence carries a criminal fine of 2–5 million dinars; repeating it brings imprisonment and/or a 5–10 million dinar fine.[@art33] Allowing another person to use drugs on one's premises, or being found in a place prepared … ty, and a person who voluntarily enters treatment is protected from prosecution.[@law2017]

segments › possession › sources

law2017, art33

segments › possession › penalties

label Personal use: import, production, possession, purchase or cultivation · treatment cr … e Treatment may replace the penalty; voluntary treatment protects from prosecution, label Possession within theCriminal weighing tolerance-discrepancy offence, Article 33(2)(a) · treatment civilcriminal · term Evidentiary toleranceWeighing discrepancy · fine min 2000000 · fine 5000000 · note ASpecific weighing tolerance, notdifferences; repeat offences carry imprisonment and/or a small-quantity thresholdhigher fine, label Allowing use on premises or being in a place prepared for use, Article 33(1) · treatment criminal · term Premises offence · prison min 6 months · prison 2 years · fine min 3000000 · fine 5000000

sources

Iraq — Law 50 of 2017, Article 33 (UNODC SHERLOC, Arabic statutory text) 8 unchanged

Iran countries/ir.yaml

segments › possession › text

Article 5 of the Anti-Narcotics Law grades keeping, hiding or carrying bhang, hashish and … to 20 kg five to ten years, a fine of 60 to 200 million rials and 50 to 74 lashes.[@anl] AThe older text adds confiscation on a second conviction at 5 kg or more adds confiscation of property, and a third is capital penalty on a third, now subject to the 2017 conditions.[@anl,reform2017] Above 20 kg the older law refers to Article 4 penalties and adds a fine of 2 million rials per-kilogram and the Article 4 penaltiesfine; above 100 kg it imposesformerly imposed life imprisonment.[@anl] The fines are the amounts written into the 1997 text.[@anl] TheSince 2017 amendment requires an aggravating factor before, a former death sentence becomes first-degree prison up to thirty years without a qualifying condition, including more than and former life becomes second-degree prison, fifteen to twenty-five years.[@reform2017,penal19] Article 45(A–C) covers weapons, leadership or financing, using children or mentally incompetent people, and specified prior convictions; its separate over-50-kg of cannabis condition expressly concerns Article 4 offences.[@ecpmreform2017]

segments › possession › sources

anl, ecpmreform2017, penal19

segments › possession › penalties

upto 50 g · treatment criminal · term Keeping or carrying · fine 3000000 · caning 1, 50 · … min 5 years · prison 10 years · fine min 60000000 · fine 200000000 · caning 50, 74 · note Property confiscated on a second conviction; a third is capitalRepeat offences have additional sanctions, subject to Article 45 conditions, label Keeping/carrying over 20 kg · upto –100 kg, without an Article 45 qualifying condition · treatment criminal · term Keeping or carrying · death trueprison 30 years · note Death available above 50 kg or with another aggravating factorFirst-degree imprisonment replaces the former capital penalty; otherwise up to 30 yearsmonetary penalty and confiscation also apply, label MoreKeeping/carrying more than 100 kg, without an Article 45 qualifying condition · treatment criminal · term Keeping or carrying · fineprison min 6000000015 years · fine 200000000prison 25 years · caning 50, 74 · note LifeSecond-degree imprisonment, 2 million rials per kilogram replaces former life; monetary penalty and the fines and lashes aboveconfiscation also apply, label Keeping/carrying offence formerly carrying death or life, with Article 45(A–C) aggravation · treatment criminal · term Aggravated keeping or carrying · death true · note A qualifying circumstance must be proved; a further convictionquantity alone is not stated as an Article 5 capital trigger

segments › sharing › text

Article 4 covers importing, exporting, producing, distributing, dealing in or selling bhan … 5 kg a fine of 50 to 200 million rials, 50 to 74 lashes and three to fifteen years.[@anl] More thanThe older text prescribed death above 5 kg carries death and confiscation, but if the drugs were not distributed and weighed 20 kg or less, life imprisonmentfor a qualifying first offence involving no distribution and 74 lashesat most 20 kg.[@anl] TheSince 2017 amendment, death requires an aggravating factorArticle 45 condition, including more than 50 kg of cannabis, before a death sentencefor these Article 4 offences; without one the maximum is 30, former death becomes prison up to thirty years and former life becomes fifteen to twenty-five years.[@ecpmreform2017,penal19] The law has no separate offence for giving cannabis away; distribution falls under the same Article 4 ladder.[@anl]

segments › sharing › sources

anl, ecpmreform2017, penal19

segments › sharing › penalties

upto 50 g · treatment criminal · term Distribution or sale · fine 4000000 · caning 1, 50 · … rison min 3 years · prison 15 years · fine min 50000000 · fine 200000000 · caning 50, 74, label Distribution or sale over 5–50 kg, without Article 45 aggravation · treatment criminal · term Distribution or sale · death trueprison 30 years · note LifeFirst-degree prison replaces former death; monetary penalty and 74 lashes if not distributed and confiscation also apply, label Qualifying first Article 4 offence over 5–20 kg, no distribution or lessArticle 45 aggravation · treatment criminal · term Article 4 first-offence exception · prison min 15 years · prison 25 years · note Second-degree prison replaces former life; monetary penalty and confiscation also apply, label Article 4 offence formerly carrying death needs an aggravating factoror life: over 50 kg OR another Article 45 condition · treatment criminal · term Aggravated distribution or sale · death true · note Weapons, leadership/financing, using children or specified prior convictions can qualify below the weight threshold

context › death penalty › text

The Anti-Narcotics Law makesolder drug law prescribed death the punishment for more thanabove 5 kg offor Article 4 cannabis, offences and for a third conviction at 5 kg or morespecified repeat possession offences.[@anl] ASince 2017 amendment narrowed it:, a court may imposeformer death only where the trafficking involvedor life offence requires an Article 45 condition before death can be imposed: weapons, a leadership or financing role, ause of children or mentally incompetent people, specified prior serious drug convictionconvictions, or more than 50 kg offor Article 4 cannabis (2 kg of heroin, 3 kg of other hard drugs)offences.[@ecpmreform2017] Without one of those factors the maximum is 30a qualifying condition, former death becomes prison up to thirty years and former life becomes second-degree imprisonment.[@ecpmreform2017] In practice the courts have moved the other way: 795 people were executed for drug offen … ed removing death from eight drug offences, but no text or timetable was published.[@ecpm]

context › death penalty › sources

anl, ecpm, reform2017

sources

Iran — final Article 45 amendment, approved October 2017 (Boroumand Center translation) Iran — Islamic Penal Code, Books One and Two (IHRDC translation) 12 unchanged

Libya countries/ly.yaml

segments › sharing › text

Supply with intent to traffic carriesThe original Article 35 prescribed life or a term of at least ten to fifteen years and, plus a 5,000–20,000 dinar fine, for paid supply or trafficking.[@law7] Law 19 of 1996 replaced the penalties in Articles 34, 35 and 44 with the Penal Code’s Article 169 penalties; supplying without payment carries three to fifteen yearsthe later 2002 amendment replaced Article 34 and a 2added aggravating circumstances to Article 35.[@law1996,000–5,000 dinar finelaw2002] The relationship between those changes still needs to be settled before a current paid- or unpaid-supply sentencing band can be stated.[@law7law1996,law2002] ImportingThe 2002 text prescribes death or life for importing, producing, manufacturing or promoting drugs, or trading Table 5listed plants or seeds, with trafficking intent, carries; death or life and a 10,000–50,000 dinar fineis mandatory with its specified aggravations.[@law7,law2002] A place managed for drug use carries six months to three years.[@law7]

segments › sharing › sources

law7, law1996, law2002

segments › sharing › penalties

label Supply with intent to traffic · treatment criminal · term Trafficking · prison min 10 years · prison 15 years · fine min 5000 · fine 20000 · note Life imprisonment is available, label Supply without payment · treatment criminal · term Supply · prison min 3 years · prison 15 years · fine min 2000 · fine 5000, label Import, production or promotion with intent · treatment criminal · term Trafficking · deat … criminal · term Premises · prison min 6 months · prison 3 years · fine min 100 · fine 500

sources

Libya — Law No. 19 of 1996 amending the narcotics law (Arabic statutory text) 13 unchanged

Malaysia countries/my.yaml

segments › possession › penalties

label Basic possession, Section 6 · treatment criminal · term Section 6 · prison 5 years · … 50 g or more, Section 39A · treatment criminal · term Section 39A · prison min 5 years · life possible · note Life imprisonment available; at 200 g, rebuttable trafficking presumption; caning exclusions apply · caning 10, 24

segments › cultivation › penalties

label Planting or cultivating, Section 6B · over 0 plants · treatment criminal · term Section 6B · life mandatory · note Life imprisonment, even for a single plant; caning exclusions apply · caning 6, 24

segments › sharing › penalties

label Trafficking, Section 39B (since 2023) · treatment criminal · term Section 39B · death true · life possible · note Discretionary death or life imprisonment, plus at least twelve strokes if not death

Oman countries/om.yaml

context › hemp › status

strictnone

Sudan countries/sd.yaml

segments › enforcement › currency

SDG

segments › enforcement › penalties

label 657.3 g hashish with trafficking intent in 2018 · treatment criminal · fine 10000 · note Life imprisonment upheld, fine reduced to 10,000 pounds

segments › sharing › text

Article 16 covers providing narcotics or facilitating access whether paid or unpaid: at least ten years and a court-set fine outside authorised cases.[@act1994] Specified aggravations, including repeat offences and supply to minors or at schools, allow death or life imprisonment.[@act1994] A gift is not exempt.[@act1994]

segments › sharing › penalties

label Supply paid or unpaid, Article 16 · treatment criminal · term Supply · prison min 10 years · note At least ten years plusPlus a court-set fine, label Aggravated supply, Articles 15-17 · treatment criminal · death true · life possible · term Aggravated supply · note Death or life imprisonment for repeat, minors, schools, or organised-crime cases

Singapore countries/sg.yaml

segments › possession › text

Cannabis is a Class A controlled drug. Possessing less than 330 g of cannabis, less than 130 g of resin, or less than 660 g of mixture carries up to 10 years, a fine of up to S$20,000, or both.[@mda_sch] Anyone holding more than 15 g is presumed to hold itSection 17 presumes possession for trafficking above 15 g of cannabis plant material, 10 g of resin or 30 g of mixture unless they provethe holder proves otherwise.[@wmdamda17] Trafficking can also be proved below those amounts.[@mda1973] From 330 g to 500 g of cannabis the sentence is at least 10 years and 5 strokes of the can … n uses 130 g and 200 g for those same steps, and mixture uses 660 g and 1,000 g.[@cnb_can]

segments › possession › sources

wmdamda17, mda1973, mda_sch, cnb_can

segments › possession › penalties

upto 15label Cannabis plant material: less than 330 g · treatment criminal · term Offence under the Misuse of Drugs ActPossession · prison 10 years · fine 20000, over · note Above 15 g · upto, possession for trafficking is presumed unless rebutted; these are possession-only penalties; prison or a fine, or both, label Cannabis plant material: 330–500 g · treatment criminal · term Presumed traffickingPossession · prison min 510 years · prison 20 years · caning 5, 1510 · note Unless the holder proves it was notAbove 15 g, possession for trafficking is presumed unless rebutted; these are possession alone carries up to 10 years or S$20-only penalties,000, over 330 g · upto label Cannabis plant material: more than 500 g · treatment criminal · term Presumed traffickingPossession · prison min 20 years · prison 30 years · caning 1510, 15 · note Or life imprisonment. If the presumptionAbove 15 g, possession for trafficking is presumed unless rebutted,; these are possession carries-only penalties, label Cannabis resin: less than 130 g · treatment criminal · term Possession · prison 10 years · fine 20000 · note Above 10 g, possession for trafficking is presumed unless rebutted; these are possession-only penalties; prison or a fine, or both, label Cannabis resin: 130–200 g · treatment criminal · term Possession · prison min 10 years · prison 20 years and· caning 5–, 10 strokes· note Above 10 g, over 500possession for trafficking is presumed unless rebutted; these are possession-only penalties, label Cannabis resin: more than 200 g · treatment criminal · term PresumedPossession · prison min 20 years · prison 30 years · caning 10, 15 · note Above 10 g, possession for trafficking is presumed unless rebutted; these are possession-only penalties, a capital offencelabel Cannabis mixture: less than 660 g · death truetreatment criminal · term Possession · prison 10 years · fine 20000 · note If the presumptionAbove 30 g, possession for trafficking is presumed unless rebutted; these are possession-only penalties; prison or a fine, or both, label Cannabis mixture: 660–1000 g · treatment criminal · term Possession · prison min 10 years · prison 20 years · caning 5, 10 · note Above 30 g, possession carriesfor trafficking is presumed unless rebutted; these are possession-only penalties, label Cannabis mixture: more than 1000 g · treatment criminal · term Possession · prison min 20– years · prison 30 years and· caning 10–, 15 strokes· note Above 30 g, possession for trafficking is presumed unless rebutted; these are possession-only penalties

segments › sharing › text

Giving cannabis to another person is trafficking, whether or not money changes hands. For … s. The same first band runs to under 130 g of resin and under 660 g of mixture.[@cnb_can] The higher trafficking bands use 330–500 g of plant material, 130–200 g of resin or 660–1,000 g of mixture; above those upper limits the offence is capital, subject to section 33B exceptions.[@cnb_can,mda_sch]

segments › sharing › sources

cnb_can, mda_sch

context › visitors › text

There is no legal recreational supply for anyone. Possessing less than[@mda_sch] Ordinary possession below 330 g of cannabis can bringplant material, 130 g of resin or 660 g of mixture carries up to ten years, or a fine of up to S$20,000 fine, or both; larger possession sentences include caning. From 330[@cnb_can] Above 15 g the prison termof plant material, 10 g of resin or 30 g of mixture, possession for trafficking is mandatory and includes caningpresumed unless rebutted.[@mda17] Trafficking more than 500 g of plant material, 200 g of cannabis resin can bring deathor 1,000 g of mixture is capital, subject to section 33B exceptions.[@cnb_can,mda_sch]

context › visitors › sources

mda_sch, cnb_can, mda_schmda17

sources

Singapore — Misuse of Drugs Act 1973, section 17 16 unchanged

segments › sharing › penalties

label Cannabis plant material: less than 330 g · treatment criminal · term Trafficking · prison min 5 years · prison 20 years · caning 5, 15, label Cannabis plant material: 330–500 g · treatment criminal · term Trafficking · prison min 20 years · prison 30 years · life possible · caning 15, 15, label Cannabis plant material: more than 500 g · treatment criminal · term Trafficking · death true · note Section 33B provides limited sentencing exceptions, label Cannabis resin: less than 130 g · treatment criminal · term Trafficking · prison min 5 years · prison 20 years · caning 5, 15, label Cannabis resin: 130–200 g · treatment criminal · term Trafficking · prison min 20 years · prison 30 years · life possible · caning 15, 15, label Cannabis resin: more than 200 g · treatment criminal · term Trafficking · death true · note Section 33B provides limited sentencing exceptions, label Cannabis mixture: less than 660 g · treatment criminal · term Trafficking · prison min 5 years · prison 20 years · caning 5, 15, label Cannabis mixture: 660–1000 g · treatment criminal · term Trafficking · prison min 20 years · prison 30 years · life possible · caning 15, 15, label Cannabis mixture: more than 1000 g · treatment criminal · term Trafficking · death true · note Section 33B provides limited sentencing exceptions

Suriname countries/sr.yaml

summary

Up to thirteen years for possession, with no Dutch-style tolerance;. The 2023 industrial-hemp was legalised in 2022law provides licences for certified crops with no more than 1% THC.

segments › cultivation › text

Article 2 ofOrdinary cannabis growing remains prohibited under the 1998 Narcotics Act forbids growing Cannabis sativa.[@wvm] The [2023 hemp law](/history/suriname-industrial-hemp-2023/) allows licensed industrial cultivation from certified seed with no more than 1% THC.[@hemp23]

segments › cultivation › sources

wvm, wikihemp23

context › production › status

nonehemp

context › production › text

ReliableThe [2023 hemp law](/history/suriname-industrial-hemp-2023/) provides licences for industrial cultivation, storage, processing, delivery and sale, administered by a new national information about lawful cannabis productionhemp institute.[@hemp23] In November 2024 the government was not established bystill preparing the retained sourcesimplementing decisions and establishment of the institute.[@hempimpl]

context › production › sources

hemp23, hempimpl

context › products › text

Reliable national information about legally available cannabis products was not established by the retained sources.

context › planting › seeds

greylicensed

context › planting › seeds trade

unclearregulated

context › planting › text

Article 2 ofThe industrial-hemp law requires certified seed and licensed cultivation for industrial purposes at no more than 1% THC.[@hemp23] Ordinary cannabis cultivation remains prohibited under the 1998 Narcotics Act bans growing Cannabis sativa. Its schedule defines hemp as any part of the plant of the genus Cannabis from which the resin; its older text has not been extracted, without the expressno general seed exception for seeds found in the Dutch law it resembles. The text read is the version as amended in 2002.[@wvm]

context › planting › sources

hemp23, wvm

sources

Suriname — Wet Industriële Hennepteelt, 13 September 2023, Staatsblad 2023 no. 137 Suriname Government — Preparations to implement the Industrial Hemp Cultivation Act, November 2024 2 unchanged

context › hemp › status

high

context › hemp › text

Industrial hemp must come from certified seed and contain no more than 1% THC under the [2023 law](/history/suriname-industrial-hemp-2023/).[@hemp23] Growing and commercial handling require a licence from the national hemp institute.[@hemp23] The government’s November 2024 update described preparations for implementation, with further decisions and the institute still being organised.[@hempimpl]

context › hemp › sources

hemp23, hempimpl

Code, design and documents 9 files

docs/DATA-MAINTENANCE.md +10 −4
@@ -705,4 +705,5 @@ segments:
   S$5,000", "and 3–6 strokes of the cane". `penalties.summary` records whether a ladder reaches
   caning or death. The audit (below) fails on minimums or caning written only in a note.
+- **Life imprisonment:** `life: mandatory` for a required life sentence; `life: possible` for an alternative, combined with `prison_min`, `prison` or `death` where the law provides those alternatives. Never substitute a finite maximum for life. API rows preserve this field, and summaries include `life` and `smallPrisonLife`.
 - **Prison or a fine.** When the law gives alternatives ("at least three years or a fine of at
   least S$5,000"), fill both minimums and say in `note`: "Prison or a fine, or both" (or "Prison
@@ -717,7 +718,8 @@ segments:
   (`over:` equals the previous `upto:`), treatments get no milder as amounts grow, and one ladder
   counts either grams or plants, never both.
-- **Presumptions.** Where an amount is presumed to be for trafficking (Singapore above 15 g),
-  give the trafficking punishment in the step, call it "Presumed trafficking" in `term`, and say
-  in `note` what applies if the presumption is rebutted.
+- **Presumptions.** State the exact product and the rebuttable trigger: Singapore uses more than
+  15 g of plant material, 10 g of resin and 30 g of mixture. Keep actual possession sentences
+  separate from trafficking sentences where a combined ladder would hide either outcome. A
+  presumption is not a conviction; label the offence and explain what happens if it is rebutted.
 - **Criminal fines without a fixed maximum** (day fines, as in Germany) are left out of `fine`;
   say "a criminal fine instead of prison is possible" in `note`.
@@ -2015,5 +2017,9 @@ left untouched. Today's scores are unchanged.
 
 Use `recreational: death` wherever an in-force law permits death for a cannabis offence,
-including a qualifying repeat offence, even if another preparation has a lawful route.
+including a qualifying repeat offence or a drug-supply offence requiring a death caused by the
+supplied narcotic, even if another preparation has a lawful route. Guyana’s section 6 requires
+supply or administration to someone under eighteen and proof that the narcotic caused their death;
+the category records the statutory possibility, without implying an ordinary possession or
+trafficking death sentence or a verified cannabis execution.
 This status takes precedence on the law map and in the homepage count. Explain the
 lawful preparation separately in the summary, segments and quick answers. India’s bhang

docs/research/bug-review-2026-10-28.md +128 −0
@@ -75,2 +75,130 @@ JSON were checked for Iceland, Pakistan, Armenia, Moldova and Bosnia; the remove
 Pakistan claims are absent. CSV exports carry Iceland strict/hemp, Moldova standard/hemp and
 Bosnia strict/hemp, and the new Iceland history page exists.
+
+## Second pass: penalty tables and hemp classifications (#276–#292)
+
+Reviewed sixteen newly filed reports (there is no #280 in this set). Left #252 and #253 with
+ their existing reviewers: their comments already record the remaining Mali/Armenia legal questions.
+No personal-use score changed. Guyana's statutory maximum classification changes to `death`, under
+ the existing rule that includes narrowly conditioned capital offences; this does not establish
+ a cannabis sentence or execution, or change ordinary-user enforcement scores.
+
+| Issue | Profile | Resolution |
+|---|---|---|
+| #276 | China | Existing capital qualification was already partly corrected. Split ordinary small and serious small trafficking, specify all three product thresholds, cite Article 347 directly, and encode the life alternative. |
+| #277 | Iran | Separate ordinary former-capital/former-life cases from Article 45 cases. First-degree imprisonment replaces former death; second-degree replaces former life. The over-50-kg clause expressly names Article 4; do not automatically apply it to every Article 5 possession offence. |
+| #278 | Brunei | Separate plant material/resin for trafficking, import/export and possession for trafficking. Resin trafficking/import uses 130–200 g and >200 g; possession for trafficking uses 200–300 g and >300 g. |
+| #279 | Singapore | Actual possession sentences now have product-specific rows; trafficking sentences are in sharing. Explain rebuttable triggers >15 g plant material, >10 g resin, >30 g mixture, including visitors and the presumption spotlight. |
+| #281 | Iraq | Weighing discrepancy is a criminal fine, with repeat-offence imprisonment and/or a higher fine; it is not a civil possession allowance. |
+| #282 | Libya | **Partial; leave open.** Remove current paid/unpaid supply rows until Law 19/1996's replacement of Article 35 penalties is reconciled with the later amendment. Explain the original ten-year minimum as historical text, not a verified current maximum. |
+| #283 | Sudan | Supply minimum is `prison_min: 10 years`; preserve the separate aggravated capital/life row. Remove the prohibited enforcement penalty table while retaining its court example in prose. |
+| #284 | Malaysia/shared | Add validated `life: mandatory/possible`, preserve it in parsed/API rows and summaries, use the shared formatter in comparison, and encode Malaysia's cultivation, heavier possession and trafficking sentences. |
+| #285 | Ghana | Hemp is standard (≤0.3%), and the documented low-THC production route is hemp. The regulator lists licensed processing/trade as well as growing; this is not evidence of a separate higher-THC cannabis industry. |
+| #286 | Oman | Hemp is none: processed-fibre/sterilised-seed exceptions and institutional medical/scientific licences do not create a general hemp crop threshold. |
+| #287 | Philippines | The checkout already had hemp none. Re-read RA 9165, add the statutory locator and regression protection. |
+| #288 | Taiwan | The checkout already had hemp none. Re-read cultivation law and FDA notice, add the finished-cosmetic locator and regression protection. |
+| #289 | Colombia | Hemp is high: ministry explicitly says <1% remains applicable pending the separate Law 2204/2022 implementing rules. Cultivation remains licensed. |
+| #290 | Guyana | Hemp-only production; add standard hemp and qualify cultivation/seed prose. The enacted law includes **exactly** 0.3% delta-9 THC on a dry-weight basis. May 2026 implementation report is not proof of commercial harvests. |
+| #291 | Guyana | Add the section 6 fatal-minor-supply caveat, separate it from ordinary section 5 life imprisonment, and use the existing maximum-penalty classification. Read the 2022 amendment and 2023 CCJ judgment; neither repeals section 6. No cannabis-specific sentence/execution was verified. |
+| #292 | Suriname | Enacted 2023 licensed hemp ≤1%, hemp-only production, certified seed, and implementation qualification. The law is dated 13 September, **published 14 September and effective 15 September 2023**. It raises a prior 0.3% exception, not a first-ever 2022 legalisation. |
+
+### Sources read in this pass and limits
+
+- China: [Criminal Law, Articles 347–348, official English text](https://en.spp.gov.cn/2020-12/26/c_948417_13.htm)
+  and [SPC Interpretation 2016 No. 8, Articles 1–2](https://www.court.gov.cn/fabu/xiangqing/19122.html).
+  The capital tier includes specified conduct as well as large quantities.
+- Iran: [final adopted Article 45, Boroumand Center translation](https://www.iranrights.org/library/document/3262),
+  [UNODC translation of the older drug law reproduced by the Center](https://www.iranrights.org/library/document/4019),
+  and [Penal Code Article 19, IHRDC translation](https://iranhrdc.org/wp-content/uploads/pdf_en/Iranian_Codes/Translation_of_the_new_Penal_Code_Book_1and2__507475863.pdf).
+  The older law is not independently current after 2017. Article 45(D) names Article 4 for the
+  traditional-drug weight condition. Do not manufacture an Article 5 weight-only capital rule.
+  The table leaves variable/current monetary penalties unquantified rather than inventing them.
+- Brunei: [AGC current Chapter 27 listing](https://www.agc.gov.bn/documents/misuse-of-drugs-act/?agc_sl=7&agc_tab=sl)
+  and its [2013 revised Act, Second Schedule](https://www.agc.gov.bn/wp-content/uploads/2026/07/CAP-27-2013-ED-MISUSE-OF-DRUGS-ACT.pdf),
+  including printed pp. 47–50 and 53–54. The old `/AGC Images/` PDF URL was unavailable; the
+  current AGC listing supplies the replacement. The possession-for-trafficking offence has
+  different thresholds from actual trafficking/import.
+- Singapore: [section 17, official indexed current text](https://sso.agc.gov.sg/Act/MDA1973?ProvIds=pr17-&ValidDate=20260601)
+  and [CNB product-specific penalty tables, updated 2 July 2026](https://www.cnb.gov.sg/singapore-drug-situation/drugs--psychoactive-substances--and-inhalants/cannabis/).
+  Direct section-page requests returned 403; the official search index returned the full
+  section 17(d)–(f) passage and rebuttal wording. CNB tables were readable directly.
+- Malaysia: [Ministry of Health Act 234 incorporating Act 846](https://pharmacy.moh.gov.my/sites/default/files/document-upload/dangerous-drugs-act-1952-act-234_2.pdf),
+  sections 6B(3), 39A and 39B. Downloaded/extracted after repeated web-reader timeouts;
+  section 6B explicitly requires life and at least six strokes.
+- Iraq: [Article 33, original Arabic text in UNODC SHERLOC](https://sherloc.unodc.org/cld/ar/legislation/irq/law_no._50_of_2017_on_narcotics_and_psychotropic_substances/chapter_8/article_33/article_33.html),
+  especially 33(2)(a)–(b). The criminal fine concerns weighing differences, not a general
+  personal-use gram threshold.
+- Sudan: [1994 Act, Arabic Articles 15–20 in SHERLOC](https://sherloc.unodc.org/cld/en/legislation/sdn/_1994_/_/_15-20/law_on_drug_offences_of_1994.html),
+  Article 16(1) clearly says not less than ten years; Article 16(2) lists aggravations.
+  A comprehensive subsequent amendment chronology remains outside this correction.
+- Libya: [1990 law, Article 35, statutory reproduction](https://lawsociety.ly/legislation/قانون-رقم-7-لسنة-1990-م-بشأن-المخدرات-والمؤث/),
+  [Law 19 of 1996, Articles 1–3](https://lawsociety.ly/legislation/قانون-رقم-19-لسنة-1996-م-بشأن-تعديل-بعض-أحكام/),
+  and [later Law 23/2002, Arabic text in DCAF](https://security-legislation.ly/latest-laws/law-no-23-of-2002-amending-and-adding-certain-provisions-to-law-no-7-of-1990-on-narcotics-and-psychotropic-substances/).
+  The official Ministry of Justice URL failed initially; its indexed text corroborated the
+  original Article 35. The 1996 law expressly replaces Articles 34, 35 and 44 penalties with
+  Penal Code Article 169 penalties, without requiring trafficking intent. The later law
+  replaces Article 34 and adds Article 35 aggravations but does not expressly reproduce the
+  original Article 35 basic term. **Current ordinary Article 35 sentencing remains unresolved.**
+- Ghana: [NCC Cannabis Regulations](https://www.ncc.gov.gh/cannabis-regulations/), downloaded/read
+  after web-reader follow-ups timed out. It repeatedly confines licensed cannabis to ≤0.3% THC
+  and lists cultivation, processing and trade. Preserve patient-access status and scores.
+- Oman: [Royal Decree 67/2026, Articles 3 and 7 and schedules](https://qanoon.om/p/2026/rd2026067/).
+  The low-THC crop exception is absent; public institutional research permissions are separate.
+- Philippines: [RA 9165, Supreme Court E-Library](https://elibrary.judiciary.gov.ph/thebookshelf/showdocs/2/1435),
+  sections 3(v) and 16. No general low-THC crop exception; medical laboratory permissions are
+  not an industrial-hemp crop threshold.
+- Taiwan: [Narcotics Hazard Prevention Act, Articles 2 and 12](https://law.moj.gov.tw/ENG/LawClass/LawAll.aspx?pcode=C0000008)
+  and [FDA notice of 19 January 2026](https://www.fda.gov.tw/tc/csmnewsContent.aspx?id=7574&mid=271).
+  The latter discusses finished cosmetic residues of 10 ppm and does not authorise growing.
+- Colombia: [Justice Ministry's cannabis/hemp programme page](https://minjusticia.gov.co/programas-co/Cannabis-con-fines-medicinales-cientificos-industriales/Paginas/default.aspx),
+  “¿Qué es cáñamo?” expressly distinguishes the operative <1% rule from the separate 0.3%
+  legislation awaiting implementation. Checked for later implementing rules; none superseding
+  this crop classification was verified. The direct Decree 811 portal returned 502.
+- Guyana: [Industrial Hemp Act 13/2022, actual Gazette](https://parliament.gov.gy/documents/acts/23476-industrial_hemp_act_2022_-_no._13_of_2022.pdf),
+  visually read printed pp. 206–208, 216 and 234–235; sections 2, 12, 39. `/new2/` downloads
+  failed, but the current `/documents/acts/` path returned the scanned Act.
+  [May 2026 agriculture update](https://agriculture.gov.gy/2026/05/21/regions-six-ten-earmarked-for-industrial-hemp-cultivation-as-govt-pursues-processing-plant-mustapha/)
+  says the authority is operational and large-scale cultivation awaits processing capacity.
+  [Cap. 10:10, sections 3, 5–6 and First Schedule](https://mola.gov.gy/laws/Volume%204%20Cap.%2010.08%20-%2012.211696971083.pdf),
+  [CANU current explanation](https://canu.gov.gy/guyana-drug-laws/),
+  [2022 amending Act](https://parliament.gov.gy/documents/acts/23504-act_no._22_of_2022.pdf),
+  [2023 CCJ Harte/Greenidge judgment](https://www.dpp.gy/wp-content/uploads/2016/08/CCJs-Harte-Greenidge.pdf),
+  and [WCADP, updated 27 October 2026](https://worldcoalition.org/pays/guyana/).
+  CANU mislabels the small-possession amendment as a 2021 bill, so it is used only for its
+  section 6 summary. The CCJ declined an academic constitutional challenge; it did not strike
+  down the death penalty. The 2022 Act changes possession/related provisions, not section 6.
+  No cannabis-specific prosecution, sentence or execution under section 6 was established.
+- Suriname: [enacted S.B. 2023 no. 137](https://www.sris.sr/wp-content/uploads/2023/10/S.B.-2023-no.-137-Wet-Industriele-Hennepteelt.pdf),
+  downloaded and visually read printed pp. 2–3, 21–23 because text extraction was empty.
+  Definition is **Article 1(d)**, not the issue's Article 2(d). Article 29 and the publication
+  imprint establish 15 September commencement. The explanatory memorandum records the earlier
+  0.3% exception; the 2023 Act raises it to 1%.
+  [Parliament passage notice](https://www.dna.sr/nieuws/parlement-neemt-wetswijziging-industriele-hennepteelt-aan/)
+  and [November 2024 implementation update](https://gov.sr/voorbereidingen-implementatie-wet-industriele-hennepteelt-in-volle-gang/)
+  distinguish the 2022 proposal, 2023 enactment and unfinished implementation. No licensed
+  commercial harvest or completed implementation was verified.
+
+### Shared life-sentence audit and validation
+
+Searched all country penalty notes for life sentences without structured custody fields. The new
+field fixes Malaysia's reported row and the source-verified alternatives in this pass. Many other
+profiles still retain life only in notes; a new audit warning identifies those for source-by-source
+migration. They were **not** converted mechanically: some concern old law, alternatives or repeat
+cases. The API retains `life`, and summaries expose `life`/`smallPrisonLife` (the finite maximum is null for life); comparison uses the
+same punishment formatter as country tables.
+
+An unrelated concurrent Afghanistan commit placed new segment narratives under `scores` and left
+old narratives under `segments`. Commit 5ffc5e8 restores its existing numeric scores, moves the new
+content to its intended segment fields, and expresses compound durations as 30/18 months. This is
+a structural repair of that commit, not an independent verification of its legal research.
+
+Validation: all 193 tests pass (including ten new regression tests); selected-page build passes;
+full build passes (5,946 pages); SEO audit passes (5,948 HTML files, 5,731 sitemap entries and
+275,914 internal links). Inspected all fifteen affected country pages, the Malaysia/Singapore/Guyana
+penalty exports and the hemp/production CSV categories. Profile audits: zero errors, fifteen
+warnings (including existing content gaps and life-only notes awaiting source review).
+
+Final checks ran on an isolated snapshot of committed base `2c762370` plus this batch, with Git
+history available and the repository’s immutable caches reused. Concurrent uncommitted country
+edits and the shared history rewrite were excluded; only the three authored history entries will
+be committed from this batch. No personal-use score changed.

scripts/profile-audit.cjs +3 −2
@@ -56,6 +56,6 @@ for (const id of ids) {
         prevRank = Math.max(prevRank, RANK[r.treatment]);
       }
-      if ((r.treatment === "legal" || r.treatment === "tolerated") && (r.prison || r.prison_min || r.fine || r.fine_min || r.caning || r.death)) err(id, at, `${r.treatment} with a punishment; a punishment means civil or criminal`);
-      if (r.treatment === "criminal" && !r.prison && !r.prison_min && !r.fine && !r.fine_min && !r.death && !r.note) warn(id, at, "criminal step with no punishment and no note saying why");
+      if ((r.treatment === "legal" || r.treatment === "tolerated") && (r.prison || r.prison_min || r.fine || r.fine_min || r.caning || r.death || r.life)) err(id, at, `${r.treatment} with a punishment; a punishment means civil or criminal`);
+      if (r.treatment === "criminal" && !r.prison && !r.prison_min && !r.fine && !r.fine_min && !r.death && !r.life && !r.note) warn(id, at, "criminal step with no punishment and no note saying why");
       if ((r.treatment === "criminal" || r.treatment === "civil") && !r.term) warn(id, at, "no term: give the law's own word for the offence");
       if (r.prison_min && r.prison && days(r.prison_min) > days(r.prison)) err(id, at, `prison_min ${r.prison_min} is longer than prison ${r.prison}`);
@@ -63,4 +63,5 @@ for (const id of ids) {
       // facts that have a field of their own but were left in the note
       const note = String(r.note ?? "");
+      if (/\blife imprisonment\b|\bimprisonment for life\b/i.test(note) && !r.life) warn(id, at, "the note mentions life imprisonment; verify the source and encode life: mandatory or possible");
       // a minimum prison term or a minimum fine written in the note instead of its field
       if (/\b(at least|minimum of|not less than)\s+(\w+\s+){0,2}(day|week|month|year)s?\b/i.test(note) && !r.prison_min) err(id, at, `the note gives a minimum prison term ("${note.slice(0, 60)}"); use prison_min`);

scripts/profile-claims.test.mjs +109 −0
@@ -971,2 +971,111 @@ test('Armenian scientific exceptions survive the List No. 1 description (#253)',
   assert.match(am.context.medical.text, /dronabinol/);
 });
+
+test('life imprisonment survives parsing, display and JSON export (#284)', async () => {
+  const { punishmentText } = await import('../src/lib/penalties.js');
+  const grow = country('my').segments.cultivation.penalties[0];
+  const parsed = JSON.parse(JSON.stringify(penaltyRow(grow)));
+  assert.equal(parsed.life, 'mandatory');
+  assert.equal(punishmentText(parsed), 'Life imprisonment');
+  assert.deepEqual(parsed.caning, [6, 24]);
+  assert.equal(penaltySummary([parsed]).smallPrisonLife, true);
+  assert.equal(penaltySummary([parsed]).smallPrisonDays, null);
+  assert.equal(punishmentText(penaltyRow({ label: 'Alternative', treatment: 'criminal', prison_min: '5 years', life: 'possible' })), '5 years to life imprisonment');
+  assert.equal(punishmentText(penaltyRow({ label: 'Capital alternative', treatment: 'criminal', death: true, life: 'possible' })), 'Death or life imprisonment');
+  const comparison = fs.readFileSync(path.join(root, 'src/pages/compare.astro'), 'utf8');
+  assert.match(comparison, /import \{ punishmentText \}/);
+});
+
+test('China capital trafficking stays qualified by quantity or aggravation (#276)', () => {
+  const rows = country('cn').segments.sharing.penalties;
+  assert.equal(rows.find((r) => /without serious/.test(r.label)).prison, '3 years');
+  assert.ok(rows.some((r) => /30–<150 kg leaf, 2–<10 kg resin or 1–<5 kg oil/.test(r.label) && !r.death));
+  assert.ok(rows.filter((r) => r.death).every((r) => /150 kg.*10 kg.*5 kg.*aggravation/.test(r.label)));
+  assert.equal(rows.find((r) => r.death).prison, '15 years');
+});
+
+test('Iran ordinary weight bands do not unconditionally prescribe death (#277)', () => {
+  const c = country('ir');
+  for (const seg of ['possession', 'sharing']) {
+    const rows = c.segments[seg].penalties;
+    assert.ok(rows.filter((r) => r.death).every((r) => /Article 45/.test(r.label)));
+    assert.ok(rows.filter((r) => /without.*Article 45/.test(r.label)).every((r) => !r.death && r.prison));
+  }
+  assert.equal(c.segments.sharing.penalties.find((r) => /over 5–50 kg/.test(r.label)).prison, '30 years');
+  assert.equal(c.segments.possession.penalties.find((r) => /more than 100 kg/.test(r.label)).prison, '25 years');
+  assert.match(c.segments.possession.text, /over-50-kg.*expressly concerns Article 4/);
+});
+
+test('Brunei keeps plant material and resin thresholds separate by offence (#278)', () => {
+  const rows = country('bn').segments.sharing.penalties;
+  for (const offence of ['Trafficking', 'Import or export']) {
+    assert.ok(rows.some((r) => r.label === `${offence}, resin: more than 200 g` && r.death));
+    const medium = rows.find((r) => r.label === `${offence}, resin: 130–200 g`);
+    assert.equal(medium.prison_min, '20 years');
+    assert.equal(medium.prison, '30 years');
+    assert.deepEqual(medium.caning, [15, 15]);
+    assert.ok(rows.some((r) => r.label === `${offence}, plant material: more than 500 g` && r.death));
+  }
+  assert.ok(rows.some((r) => r.label === 'Possession for trafficking, resin: 200–300 g' && !r.death));
+  assert.ok(rows.every((r) => /plant material|resin/.test(r.label)));
+});
+
+test('Singapore separates actual possession from three rebuttable trafficking triggers (#279)', () => {
+  const c = country('sg');
+  assert.match(c.segments.possession.text, /above 15 g.*10 g of resin or 30 g of mixture/);
+  assert.equal(c.segments.possession.penalties.length, 9);
+  assert.ok(c.segments.possession.penalties.every((r) => r.term === 'Possession' && !r.death));
+  assert.ok(c.segments.possession.penalties.filter((r) => /resin/.test(r.label)).every((r) => /Above 10 g.*unless rebutted/.test(r.note)));
+  assert.ok(c.segments.possession.penalties.filter((r) => /mixture/.test(r.label)).every((r) => /Above 30 g.*unless rebutted/.test(r.note)));
+  assert.ok(c.segments.sharing.penalties.some((r) => /resin: more than 200 g/.test(r.label) && r.death));
+});
+
+test('Iraq weighing discrepancies remain criminal offences (#281)', () => {
+  const r = country('iq').segments.possession.penalties.find((r) => /33\(2\)/.test(r.label));
+  assert.equal(r.treatment, 'criminal');
+  assert.equal(r.fine_min, 2000000);
+  assert.equal(r.fine, 5000000);
+  assert.match(r.note, /repeat offences carry imprisonment/);
+});
+
+test('Libya and Sudan supply minimums cannot become maximums (#282, #283)', async () => {
+  const { punishmentText } = await import('../src/lib/penalties.js');
+  const ly = country('ly').segments.sharing;
+  assert.match(ly.text, /at least ten years/);
+  assert.match(ly.text, /1996 replaced the penalties/);
+  assert.ok(ly.penalties.every((r) => !/Supply with intent|Supply without payment/.test(r.label)));
+  assert.ok(ly.sources.includes('law1996'));
+  const sd = country('sd').segments.sharing.penalties[0];
+  assert.equal(sd.prison, undefined);
+  assert.equal(punishmentText(penaltyRow(sd)), 'At least 10 years');
+});
+
+test('hemp map categories describe growing thresholds, not product residues (#285–#289)', () => {
+  for (const id of ['om', 'ph', 'tw']) assert.equal(country(id).context.hemp.status, 'none', id);
+  assert.equal(country('gh').context.hemp.status, 'standard');
+  assert.equal(country('gh').context.production.status, 'hemp');
+  assert.equal(country('co').context.hemp.status, 'high');
+  assert.match(country('co').context.hemp.text, /less than 1%/);
+  assert.match(country('tw').context.hemp.text, /finished product.*10 ppm/);
+});
+
+test('Guyana hemp law and fatal-minor capital offence remain distinct (#290, #291)', () => {
+  const c = country('gy');
+  assert.equal(c.context.production.status, 'hemp');
+  assert.equal(c.context.hemp.status, 'standard');
+  assert.match(c.context.hemp.text, /no more than 0.3% delta-9 THC/);
+  assert.equal(c.recreational, 'death');
+  assert.match(c.context.death_penalty.text, /under eighteen.*causes their death/);
+  assert.match(c.context.death_penalty.text, /Ordinary trafficking.*up to life/);
+  assert.ok(c.segments.sharing.penalties.filter((r) => r.death).every((r) => /under eighteen causing their death/.test(r.label)));
+  assert.deepEqual(c.scores, { possession: 2, cultivation: 1, enforcement: 3, sharing: 1, consumption: 2, access: 0 });
+});
+
+test('Suriname uses enacted 2023 hemp law and its actual commencement (#292)', () => {
+  const c = country('sr');
+  assert.equal(c.context.hemp.status, 'high');
+  assert.equal(c.context.production.status, 'hemp');
+  assert.match(c.context.hemp.text, /no more than 1% THC/);
+  assert.doesNotMatch(c.summary, /legalised in 2022/);
+  assert.equal(events().find((e) => e.id === 'suriname-industrial-hemp-2023').date, '2023-09-15');
+});

src/content.config.ts +2 −1
@@ -40,8 +40,9 @@ const penalty = z.object({
   caning: z.tuple([z.number().int().positive(), z.number().int().positive()]).optional(), // [fewest, most] strokes
   death: z.literal(true).optional(),
+  life: z.enum(["mandatory", "possible"]).optional(), // standalone life or an alternative sentence
   fine: z.number().positive().optional(),
   fine_min: z.number().positive().optional(), // a minimum fine; alone it reads "at least"
   note: z.string().min(1).optional(),
-}).strict().refine((r) => r.upto || r.over || r.label, { message: "a penalty step needs upto, over or a label" });
+}).strict().refine((r) => r.life !== "mandatory" || (!r.prison && !r.prison_min && !r.death), { message: "mandatory life cannot have an alternative prison or death sentence" }).refine((r) => r.upto || r.over || r.label, { message: "a penalty step needs upto, over or a label" });
 // a segment: its cited text, and for possession and cultivation optionally the penalty steps
 const segment = cited.extend({ currency: z.string().regex(/^[A-Z]{3}$/).optional(), penalties: z.array(penalty).min(1).optional() })

src/lib/penalties.js +15 −2
@@ -58,4 +58,5 @@ export function penaltyRow(row) {
     caning: row.caning ?? null, // [fewest, most] strokes of the cane
     death: row.death === true,
+    life: row.life ?? null,
     fine: row.fine ?? null,
     fineMin: row.fine_min ?? null,
@@ -67,7 +68,16 @@ export function penaltyRow(row) {
 // "Death penalty"; strokes of the cane go on their own line (punishmentExtra)
 export function punishmentText(r) {
-  if (r.death) return "Death penalty";
+  if (r.death) {
+    const alternatives = [r.life && "life imprisonment", r.prison && punishmentText({ ...r, death: false, life: null })].filter(Boolean);
+    return alternatives.length === 2 ? `Death, ${alternatives[0]} or ${alternatives[1]}` : alternatives.length ? `Death or ${alternatives[0]}` : "Death penalty";
+  }
+  if (r.life === "mandatory") return "Life imprisonment";
+  if (r.life === "possible") {
+    if (r.prison) return `${punishmentText({ ...r, life: null })} or life imprisonment`;
+    return r.prisonMin ? `${r.prisonMin.text} to life imprisonment` : "Life imprisonment possible";
+  }
   if (!r.prison) return r.prisonMin ? `At least ${r.prisonMin.text}` : null; // a minimum with no maximum set
   if (!r.prisonMin) return `Up to ${r.prison.text}`;
+  if (r.prisonMin.days === r.prison.days) return r.prison.text;
   const [a, ua] = r.prisonMin.text.split(" "), [b, ub] = r.prison.text.split(" ");
   return ua.replace(/s$/, "") === ub.replace(/s$/, "") ? `${a}–${b} ${ub}` : `${r.prisonMin.text} – ${r.prison.text}`;
@@ -87,8 +97,11 @@ export function penaltySummary(rows) {
   // a row about an amount that includes the small one; a labelled row ("growing as a business") is not
   const covers = (r) => (r.upto || r.over) && (size(r.over) ?? 0) < small && (size(r.upto) ?? Infinity) >= small;
+  const smallRows = first.filter(covers), smallLife = smallRows.some((r) => r.life);
   return {
     freeUpTo: free.length ? Math.max(...free) : 0,
     crimeFrom: crime ? size(crime.over) ?? 0 : null,
-    smallPrisonDays: first.filter(covers).reduce((m, r) => Math.max(m, r.prison?.days ?? r.prisonMin?.days ?? 0), 0),
+    smallPrisonDays: smallLife ? null : smallRows.reduce((m, r) => Math.max(m, r.prison?.days ?? r.prisonMin?.days ?? 0), 0),
+    smallPrisonLife: smallLife,
+    life: rows.some((r) => r.life),
     // whether any step of the ladder allows caning or the death penalty
     caning: rows.some((r) => r.caning),

src/lib/segment-ids.js +3 −3
@@ -58,6 +58,6 @@ export const HEMP_STATUS = {
   high: { label: "Up to 1% THC", tone: "legal", help: "Plants with up to 1% THC count as hemp, a higher line than the usual 0.3%" },
   standard: { label: "Up to 0.3% THC", tone: "decrim", help: "Plants with up to about 0.3% THC count as hemp, the line used in the EU and the United States" },
-  strict: { label: "Below 0.3% THC", tone: "partial", help: "Hemp is allowed only under a lower THC line than 0.3%, or under unusually tight conditions" },
-  none: { label: "No hemp", tone: "illegal", help: "The law makes no exception for hemp: every cannabis plant, seed and CBD product is a controlled drug" },
+  strict: { label: "Below 0.3% THC", tone: "partial", help: "Hemp cultivation is allowed under a THC limit below 0.3%" },
+  none: { label: "No hemp", tone: "illegal", help: "No general low-THC cultivation exception; product-specific exemptions and medical or research permits may still apply" },
 };
 // Cannabis industry: who may produce cannabis legally for sale. Not part of the score.
@@ -67,5 +67,5 @@ export const INDUSTRY_STATUS = {
   pilot: { label: "Pilots only", tone: "decrim", help: "Legal supply for adults exists only in trials or experiments; elsewhere only medical production is licensed" },
   medical: { label: "Medical only", tone: "partial", help: "Licensed production exists for medicine, research or export, but not for adults' recreational use" },
-  hemp: { label: "Hemp only", tone: "partial", help: "Only low-THC hemp may be grown or processed under licence; no cannabis is produced legally for medicine or adults" },
+  hemp: { label: "Hemp only", tone: "partial", help: "Licensed production is limited to low-THC hemp; this category does not establish a higher-THC cannabis industry" },
   none: { label: "None", tone: "illegal", help: "No legal cannabis production of any kind" },
 };

src/lib/seo.js +1 −1
@@ -38,5 +38,5 @@ const REC_SENTENCE = {
   decrim: "is decriminalised but still prohibited",
   illegal: "is illegal",
-  death: "is illegal, with the death penalty for trafficking",
+  death: "is illegal, with the death penalty for specified cannabis offences",
 };
 const MED_SENTENCE = { yes: "Medical cannabis: legal.", limited: "Medical cannabis: limited.", no: "No patient cannabis treatment route verified." };

src/pages/compare.astro +4 −3
@@ -95,4 +95,5 @@ const presets = [
 
   <script>
+    import { punishmentText } from "../lib/penalties.js";
     import { tierOf, tierColor } from "../lib/tiers.js";
 
@@ -159,5 +160,5 @@ const presets = [
     // a segment's penalty steps (src/lib/penalties.js), as a compact table under its text
     const money = (n, cur) => { try { return new Intl.NumberFormat("en-GB", { style: "currency", currency: cur, maximumFractionDigits: 0 }).format(n); } catch { return `${n} ${cur}`; } };
-    const punish = (r) => r.death ? "Death penalty" : r.prison && r.prisonMin ? `${r.prisonMin.text} – ${r.prison.text}` : r.prison ? `up to ${r.prison.text}` : r.prisonMin ? `at least ${r.prisonMin.text}` : "";
+    const punish = (r) => punishmentText(r) ?? "";
     const fineOf = (r, cur) => r.fine && r.fineMin ? `${money(r.fineMin, cur)}–${money(r.fine, cur)}` : r.fine ? `up to ${money(r.fine, cur)}` : r.fineMin ? `at least ${money(r.fineMin, cur)}` : "";
     const penaltyTable = (pen) => !pen?.rows?.length ? "" : `<ul class="cmp-pen">${pen.rows.map((r) => {
@@ -300,5 +301,5 @@ const presets = [
             const v = vals[k];
             if (v == null) return pen(c, seg) ? `<span class="cmp-sub">—</span>` : none(c);
-            const text = unit === "days" ? (v === 0 ? "No prison" : daysText(v)) : v === 0 ? zero : amountText(v, unit);
+            const text = v === "life" ? "Life imprisonment" : unit === "days" ? (v === 0 ? "No prison" : daysText(v)) : v === 0 ? zero : amountText(v, unit);
             return `<div class="cmp-val${v === best ? " best" : ""}"><b>${text}</b></div>`;
           })));
@@ -306,5 +307,5 @@ const presets = [
         figure("Possession without prosecution<small>legal or tolerated, up to</small>", "possession", (s) => s?.freeUpTo, "g", 1, "Nothing");
         figure("Possession becomes a crime<small>from</small>", "possession", (s) => (s ? s.crimeFrom : null), "g", 1, "Any amount");
-        figure("Prison for a small amount<small>the law's maximum for 5 g</small>", "possession", (s) => s?.smallPrisonDays, "days", -1, "No prison");
+        figure("Prison for a small amount<small>the law's maximum for 5 g</small>", "possession", (s) => s?.smallPrisonLife ? "life" : s?.smallPrisonDays, "days", -1, "No prison");
         figure("Plants without prosecution<small>legal or tolerated, up to</small>", "cultivation", (s) => s?.freeUpTo, "plants", 1, "None");
         figure("Growing becomes a crime<small>from</small>", "cultivation", (s) => (s ? s.crimeFrom : null), "plants", 1, "Any plant");

    ↑↓ to move, ↵ to open.