Madagascar distinguishes personal cannabis supplies from trafficking
possession 0 · cultivation 0 · enforcement 1 · sharing 1 · consumption 0 · access 0
Changelog 3b20a7f
Provincial and colonial rules were moving the modern national score, including Madagascar's 1787 highland smoking ban, Bengal's 1793 licence, and the Orange River Colony's 1903 ordinance.
25 history entries edited3 articles edited4 files of code, design or docs +200 −45 lines
possession 0 · cultivation 0 · enforcement 1 · sharing 1 · consumption 0 · access 0
The inherited Merina-era score step already carries the modern criminal penalties; the colonial and post-independence sequence needs reconstruction before separating this increase.
possession 1 · cultivation 1 · enforcement 2 · sharing 1 · consumption 0 · access 0
The original 1958 text and its relation to earlier regional restrictions remain to be recovered before rebasing the inherited Merina-era score step.
possession 10 · cultivation 10 · enforcement 2 · sharing 1 · consumption 0 · access 0
This colonial territorial ban needs to be separated from the older regional Merina restriction, whose inherited score step already incorporates nationwide modern prohibition.
possession 10 · cultivation 10 · enforcement 10 · sharing 10 · consumption 10 · access 10
possession 510 · cultivation 210 · enforcement 510 · sharing 310 · consumption 410 · access 510
The Central Provinces only. Provincial excise does not move India's national score.
possession 810 · cultivation 810 · enforcement 810 · sharing 610 · consumption 810 · access 610
One province or princely state; the licensed, taxed regime these built is where the chain starts. Provincial excise does not move India's national score.
The Cape Colony only, and a chemists' sales rule. It does not move South Africa's national score.
One province or princely state; the licensed, taxed regime these built is where the chain starts. Provincial excise does not move India's national score.
possession 10 · cultivation 10 · enforcement 10 · sharing 10 · consumption 10 · access 10
The Orange River Colony only. A colonial ordinance does not move South Africa's national score.
One province or princely state; the licensed, taxed regime these built is where the chain starts. Provincial excise does not move India's national score.
One province or princely state; the licensed, taxed regime these built is where the chain starts. Provincial excise does not move India's national score.
tighteningother
Northern India puts cannabis growing under licenceand Burma share a new excise act
On the Hemp Drugs Commission's recommendations,The Excise Act XII of 19 March 1896 gavecame into force at once in the government control over growing the plantNorth-Western Provinces and over preparingOudh, importingthe Punjab, exportingthe Central Provinces, Burma, Coorg, and transporting its drugsAjmere and Merwara. Cultivation was allowed only in certain placesIntoxicating drugs under licence and supervision and prohibited elsewherethe act include ganja, gathering wild plants was restrictedbhang, charas and all products passed through bonded warehouses to licensed vendors after duty was paidevery preparation or admixture of them. The Burma reprint gives the retail-sale quantities as one ser of bhang and five tolas of ganja or charas. Bengal continued under its own excise law.
possession 10 · cultivation 10 · enforcement 10 · sharing 9 · consumption 10 · access 7
Excise Act, 1896 (Act XII), Burma code reprint 1 unchanged
Those listed territories only. Provincial excise does not move India's national score.
One province or princely state; the licensed, taxed regime these built is where the chain starts. Provincial excise does not move India's national score.
One province or princely state; the licensed, taxed regime these built is where the chain starts. Provincial excise does not move India's national score.
One province or princely state; the licensed, taxed regime these built is where the chain starts. Provincial excise does not move India's national score.
One province or princely state; the licensed, taxed regime these built is where the chain starts. Provincial excise does not move India's national score.
Natal only: an enabling power, which the 1887 commission was still asking the governor to use. It does not move South Africa's national score.
One province or princely state; the licensed, taxed regime these built is where the chain starts. Provincial excise does not move India's national score.
possession 10 · cultivation 10 · enforcement 10 · sharing 10 · consumption 10 · access 10
Bengal only. A provincial licence does not move the score for all of modern India.
possession 10 · cultivation 10 · enforcement 10 · sharing 10 · consumption 10 · access 10
Central Imerina only, with an uncertain date and a rule reportedly applied only briefly. It does not set Madagascar's national score.
One province or princely state; the licensed, taxed regime these built is where the chain starts. Provincial excise does not move India's national score.
One province or princely state; the licensed, taxed regime these built is where the chain starts. Provincial excise does not move India's national score.
One province or princely state; the licensed, taxed regime these built is where the chain starts. Provincial excise does not move India's national score.
The Hemp Drugs Commission told British India what to do about cannabis in 1894.
Nineteen y … e government, he wrote, had made them "its partners in an enormously
valuable monopoly".
The Bombay's limit is a context entry for [India](/country/applied in/): that presidency. The first nationwide ban is the
national score
had already moved with the [1896 excise1985 act](/history/india-ndps-act-xii-18961985/), which made flower and resin illegal throughout
[India](/country/in/).
One of the most exhaustive official studies of cannabis ever made was finished in
1894.[@ … only under licence, limit the number of shops and limit how much a person could
hold.[@2] The [Act XII of 1896 excise act](/history/india-act-xii-1896/) put this into law,applied that approach in the
North-Western Provinces and Oudh, the
licensed system lasted Punjab, the Central Provinces, Burma, Coorg, and Ajmere
and Merwara. Other provinces kept their own excise. Licensed sale in Indiathe states continued until
the [1985 ban](/history/india-ndps-act-1985/).
## What became of it
At [Geneva in … 2/).
The index lists the report for context; it moved no score in [India](/country/in/).
Until November 1985 ganja was sold in licensed shops in much of India. India had
defended … century, and gave it
up in a single act of parliament.
## A licensed drug
British India taxedlicensed cannabis from through provincial excise. The
[17981896 excise act](/history/india-bhangact-taxxii-17981896/) covered the North-Western Provinces and Oudh,
on the
advice of Punjab, the [Hemp Drugs Commission](/history/india-hemp-drugs-commission-1894/)Central Provinces,
put it under licence in [1896](/history/india-act-xii-1896/): growing in approved
places Burma, sale through licensed vendorsCoorg, duty paid onand Ajmere and Merwara. Bengal and the way
other provinces kept their own systems. Independent India kept
the arrangement and left itgrowing, selling and
possession to the states.
At the [1961 conference](/history/un-single-convention-1961/) India fough … o 1, enforcement from 5 to 2 and access from 5 to 2, where
[India](/country/in/) remains.
docs/research/history-scope-scores-2026-10-23.md +60 @@ -0,0 +1,60 @@ +# National scores follow nationwide laws + +23 October 2026. Issues 8, 9 and 10. Read `docs/DATA-MAINTENANCE.md` (the score +timeline, and the note that Act XII of 1896 had to be read before it was +scored) and `docs/WRITING.md`. + +## What was wrong + +Madagascar's only scored event was the 1787 Merina smoking ban in central +Imerina. That one step carried today's possession, cultivation, enforcement, +sharing, consumption and access scores. The colony-wide 1915 decree, the 1958 +cultivation and possession penalties, and the 1960 sentence increase were +unscored for that reason. + +India's 1793 Bengal retail licence was the first scored event for the whole +modern country, a drop from 100 to 96. Act XII of 1896 then dropped the +national score from 96 to 40. A Burma reprint of that act, already read for +the Myanmar gap note, extends it to the North-Western Provinces and Oudh, the +Punjab, the Central Provinces, Burma, Coorg, and Ajmere and Merwara. Bengal +stayed under its own excise law. It is not a law for all of British India. + +South Africa's first scored event was the 1903 Orange River Colony ordinance, +so the national score left 100 in 1903. The first nationwide prohibition is +the 1922 Customs and Excise amendment. + +## What the scores do now + +Current profile scores are unchanged. + +Madagascar: 1915 is the first national step, from 100 to 55. Preparing, +selling and consuming smoking cannabis became offences, with up to a year in +prison or a fine. Possession and cultivation were not yet named offences, so +those segments stay at 10. In 1958 they become crimes with eleven days to one +month or a fine (55 to 10). In 1960 the same conduct carries six months to +five years or a fine (10 to 3): possession and cultivation move to 0, and +enforcement moves from 2 to 1. In 1997 small personal quantities, including +growing, are two to six months or a fine, and use is scored with possession +(3 to 9, the current profile). The 1787 event stays in the history as a +regional, uncertain, briefly applied smoking ban, with no score. + +India: 1793, 1896 and the 1925 Central Provinces charas ban are unscored +provincial events. The national line stays at 100 until the Narcotic Drugs +and Psychotropic Substances Act of 14 November 1985, which is the first ban +covering the whole country. It falls from 100 to 11. The 2001 quantity bands +still rise from 11 to 13. Provincial excise notes no longer say that the +chain starts in the licensed regime of 1896. + +South Africa: the Orange River Colony ordinance, the Cape poison listing and +the 1870 Natal enabling power are unscored. The 1922 national ban falls from +100 to 11, and the later steps are unchanged. + +`npm run history:test` checks that 1787, 1793, 1896 and 1903 do not move a +national score, and that those regional events are not the first scored step +for their modern country. + +Bangladesh still starts in 1793 because its entries place the Bengal licence in +territory that is now Bangladesh, including the Naogaon growing tract. +Pakistan's 1914 first step is the Punjab excise act, with Baluchistan's own +regulation the next year. That chain remains the documented licensed trade +the 1979 prohibition replaced.
package.json +1 @@ -12,4 +12,5 @@ "books:check": "node scripts/books-status.cjs --check", "books:test": "node --test scripts/books-status.test.cjs", + "history:test": "node --test scripts/history-scope.test.cjs", "articles:backlog": "node scripts/article-backlog.cjs", "scores:triage": "node scripts/score-triage.cjs",
scripts/history-scope.test.cjs +90 @@ -0,0 +1,90 @@ +const { test } = require("node:test"); +const assert = require("node:assert/strict"); +const fs = require("node:fs"); +const y = require("js-yaml"); + +const changes = y.load(fs.readFileSync("changes.yaml", "utf8")); +const segments = y.load(fs.readFileSync("segments.yaml", "utf8")); +const FREE = { possession: 10, cultivation: 10, enforcement: 10, sharing: 10, consumption: 10, access: 10 }; +const total = (s) => Math.round(segments.reduce((sum, seg) => sum + (s[seg.id] * seg.weight) / 10, 0)); +const when = (d) => Date.parse(d.length === 4 ? d + "-07-01" : d.length === 7 ? d + "-15" : d); +const byId = Object.fromEntries(changes.map((e) => [e.id, e])); + +function scored(country) { + return changes.filter((e) => e.country === country && e.before).sort((a, b) => when(a.date) - when(b.date)); +} + +function scoreAt(country, year) { + const steps = scored(country); + const hit = steps.filter((e) => Number(String(e.date).slice(0, 4)) <= year); + if (!hit.length) return steps.length ? { ...steps[0].before } : null; + const i = steps.indexOf(hit.at(-1)); + const next = steps[i + 1]; + if (next) return { ...next.before }; + const file = fs.existsSync(`countries/${country}.yaml`) ? `countries/${country}.yaml` : `countries/${country}/index.yaml`; + return { ...y.load(fs.readFileSync(file, "utf8")).scores }; +} + +test("Madagascar's 1787 royal ban does not carry modern national penalties", () => { + const royal = byId["madagascar-merina-ban-1787"]; + assert.equal(royal.before, undefined); + assert.match(royal.unscored, /Imerina/); + const then = scoreAt("mg", 1787); + assert.deepEqual(then, FREE); + assert.equal(total(then), 100); + const profile = y.load(fs.readFileSync("countries/mg.yaml", "utf8")).scores; + assert.notDeepEqual(then, profile); + const first = scored("mg")[0]; + assert.equal(first.id, "madagascar-colonial-rongony-ban-1915"); + assert.deepEqual(first.before, FREE); + const colony = scoreAt("mg", 1915); + assert.equal(colony.possession, 10); + assert.equal(colony.cultivation, 10); + assert.ok(colony.consumption < 10); + const modern = scoreAt("mg", 1997); + assert.deepEqual(modern, profile); +}); + +test("India's national score starts at the 1985 ban, not a provincial licence", () => { + for (const id of ["india-bengal-ganja-licences-1793", "india-act-xii-1896", "india-central-provinces-charas-1925"]) { + assert.equal(byId[id].before, undefined, id); + assert.match(byId[id].unscored, /Provincial|Bengal|Central Provinces|territories/); + } + assert.match(byId["india-act-xii-1896"].description, /North-Western Provinces/); + assert.doesNotMatch(byId["india-act-xii-1896"].description, /all of British India|nationwide/); + const first = scored("in")[0]; + assert.equal(first.id, "india-ndps-act-1985"); + assert.deepEqual(first.before, FREE); + assert.deepEqual(scoreAt("in", 1793), FREE); + assert.deepEqual(scoreAt("in", 1896), FREE); +}); + +test("South Africa's national score starts at the 1922 ban, not one colony", () => { + for (const id of ["orange-river-colony-dagga-ordinance-1903", "cape-colony-dagga-poison-listing-1905", "south-africa-natal-1870"]) { + assert.equal(byId[id].before, undefined, id); + assert.match(byId[id].unscored, /Colony|Natal/); + } + const first = scored("za")[0]; + assert.equal(first.id, "south-africa-national-ban-1922"); + assert.deepEqual(first.before, FREE); + assert.deepEqual(scoreAt("za", 1903), FREE); + assert.equal(total(scoreAt("za", 1922)), 11); +}); + +test("known regional events are not the first scored step for their modern country", () => { + const blocked = new Set([ + "madagascar-merina-ban-1787", + "india-bengal-ganja-licences-1793", + "india-act-xii-1896", + "india-central-provinces-charas-1925", + "orange-river-colony-dagga-ordinance-1903", + "cape-colony-dagga-poison-listing-1905", + "south-africa-natal-1870", + ]); + const countries = new Set(changes.map((e) => e.country).filter(Boolean)); + for (const id of countries) { + const first = scored(id)[0]; + if (first) assert.equal(blocked.has(first.id), false, `${id} starts at ${first.id}`); + } + for (const id of blocked) assert.equal(byId[id].before, undefined, id); +});
src/pages/charts.astro +1 @@ -1016,5 +1016,5 @@ const kick = (id) => { const i = sections.findIndex(([x]) => x === id); return ` <div class="ch-stripes-ends" aria-hidden="true"><span>↑ freest today</span><span>strictest today ↓</span></div> </div> - <p class="ch-source">Each country's score at the end of each year, rebuilt from its history, as in the <a href={`${base}data/#panel`}>yearly data</a>. These are reconstructed scores, including estimated dates and assumed baselines. Madagascar’s early line carries a <a href={`${base}history/madagascar-merina-ban-1787/`}>regional royal smoking ban</a> across the modern country; its continuous nationwide duration is unresolved. Hover a stripe for its country and year; click it for the country's history.</p> + <p class="ch-source">Each country's score at the end of each year, rebuilt from its history, as in the <a href={`${base}data/#panel`}>yearly data</a>. These are reconstructed scores, including estimated dates and assumed baselines. A regional or provincial rule stays off the national line until a law covers the whole country. Hover a stripe for its country and year; click it for the country's history.</p> <p class="ch-more"><a href={`${base}map/`}>Play the years on the map →</a> <a href={`${base}data/#panel`}>Download the yearly scores →</a></p> </section>