What a verified drug-sentencing record set actually shows
This is a report on a small dataset, and the smallness is the point. Every record in it comes from a published court judgment, was read by a person, and carries a link to the judgment it was read from. Nothing was inferred, nothing was averaged across sources, and 10 records that passed every automated check were removed after a human read them and found them wrong.
What follows is what the set shows, what it cannot show, and where the method is weak.
A verified sentencing record set, not a global database
Call it what it is. This is a verified sentencing record set covering 4 jurisdictions: Hong Kong, Netherlands, Singapore and United States.
63 records, all of them reachable. That last clause used to need a caveat and no longer does: until 8 September 2026 this page would have had to distinguish records that cleared the audit from records a reader could actually click, because a page-length cap was silently holding 7 verified records off their own page. It is not any more. Every record that clears is disclosed, across 13 substance-and-country pages.
Every figure here is generated from the published record set at build time. None is typed. Source: the published record artifact, rebuilt 2026-09-08.
Alongside it sits a separate legality engine covering 88 substances across 225 jurisdictions, with 4,370 substance-and-country cells populated out of 19,128 possible pairings. That last pair of numbers is the honest one. Multiplying the substance count by the jurisdiction count gives a larger figure that is a product and not a count of anything, and it should never be quoted as coverage.
Source: the legality engine, counted at build time through the same reader Research and data counts through.
Courts publish their reasoning far more often than they publish their arithmetic
Of 1,051 cached Singapore judgments, 60 delineate the individual charges against the accused. The rest state an aggregate. Those 60 judgments carry 199 separate counts between them, and of those 199, nine carry a sentence of their own.
That is the central constraint on any dataset built from published judgments, and it is measurable rather than anecdotal. A corpus assembled from what courts publish inherits the reporting habits of the courts that published it. Anyone building a sentencing dataset from primary sources is working with the same ratio, whether or not they have measured it.
Source: report s25-41, measured against the cached judgment set. This is the one paragraph on this page whose figures describe the cached judgment set rather than the published records, so they are quoted from that measurement rather than counted here.
The sentences that are not numbers
7 records carry a death sentence and 3 carry life imprisonment. Those 10 are not numbers and they never sit inside a range. Averaging them in, or coding them as a large number of months, produces a figure that describes nothing. An earlier version of this project’s own code returned zero months for capital and life sentences, which made eighteen cases read as termless until it was found and fixed.
4 records impose community service, and all 4 are Netherlands.
10 records passed every automated check and were still wrong
On 2026-09-03, in a single pass, 10 published records were withdrawn after a human audit. 7 were retracted as false. 3 were held as duplicates of records already published.
The reason they are in this report rather than quietly deleted: every one of them had passed the full automated gate. The gate polices completeness well, and what a case is actually about not at all. Among the 7 retracted were judgments that were not drug cases.
Each reason below is quoted verbatim from the append-only audit log, which is where the decision was recorded. All 10 were decided in one pass at 2026-09-03T17:09:07.890Z.
| Record | Decision | Reason, quoted from the audit log |
|---|---|---|
singapore-2010-490aeda73f | Retracted as false | FALSE: [2024] SGHC 109 is not a drug case. Its catchwords are 'Criminal Law - Offences - Rape' and 'Abetment', and the judgment reads 'upon convicting him of the Charge, I sentenced him to 13 years' imprisonment and 12 strokes of the cane', the Charge being conspiracy to rape. This record published that rape sentence as a heroin sentence on /legality/heroin/singapore. No drug offence appears anywhere in the judgment. |
singapore-2016-0bece24908 | Retracted as false | FALSE: [2025] SGCA 37 is a post-appeal application in a capital case seeking permission and a stay of execution. Disposition: 'I refuse to grant [the] application for permission ... I dismiss the application summarily.' The conviction it recites was entered in separate, earlier proceedings. This document convicts nobody. |
singapore-2020-c177501908 | Retracted as false | FALSE: [2023] SGHC 304 is a sentencing decision for ATTEMPTED RAPE ('Sentencing - Sexual offences', 'Sentencing - Attempted rape'). It was published as an MDMA conviction on /legality/mdma/singapore. |
singapore-2022-39ceaff4d1 | Retracted as false | FALSE: [2023] SGHC 348 carries no Misuse of Drugs Act catchword; it is 'Forms of punishment - Preventive Detention' and 'Backdating of Sentence'. The appellant had pleaded guilty below to snatch theft and drug consumption and was sentenced to ten years' PREVENTIVE DETENTION for the whole spree, not to a drug sentence. The disposition on appeal is 'we allowed the appellant's appeal in part in that the sentence of PD was backdated'. The record published 'convicted'; this court convicted nobody. |
singapore-2025-08a8a6b78a | Retracted as false | FALSE: [2025] SGHC 253 is not a prosecution. It is an Originating Application by SEVEN applicants against the Attorney-General challenging the constitutionality of the mandatory death penalty under Arts 9(1), 12(1) and 93, dismissed: 'Having considered the matter, I dismiss OA 1213.' There is no accused and no sentence; the convictions in it belong to third parties in separate cases. |
singapore-2025-9bfc0af5cc | Retracted as false | FALSE: [2025] SGCA 39 is an application for a stay of execution, dismissed summarily as 'totally devoid of merit', with $3,000 costs ordered against counsel personally. No conviction is entered in this document. |
singapore-2026-f0395ad707 | Retracted as false | FALSE: [2026] SGCA 29 is an attempted-rape sentencing appeal ('Benchmark sentences - Attempted rape'); the court dismissed the appeal and enhanced the sentence to seven years seven months and six weeks with three strokes. It was published as an MDMA conviction. |
singapore-2021-5d26366f04 | Held as duplicate | DUPLICATE of singapore-2021-5c03459ff1, the same accused at first instance ([2025] SGHC 37). This is the Court of Appeal leg ([2026] SGCA 10, 'we dismissed CM 30 and CCA 16'). Both were live and /legality/synthetic-cannabinoids/singapore showed the same man twice. The surviving first-instance record must carry the appellate posture: the appeal was dismissed, so conviction and sentence stand. |
singapore-2023-158abb16ea | Held as duplicate | DUPLICATE of singapore-2023-aad28590da, which is published and covers this same man's charges in full. [2024] SGHC 209 is a single-appellant Magistrate's Appeal; this record is that appellant's POSSESSION charge split out on its own ('12 months' imprisonment on this charge'), and the published record already states 'five years' imprisonment and three strokes, and 12 months' imprisonment'. Publishing both shows one man as two people. |
singapore-2023-90e096d183 | Held as duplicate | DUPLICATE of singapore-2023-aad28590da, which is published and covers this same man's charges in full. This record is that appellant's LT1 CONSUMPTION charge split out on its own ('five years' imprisonment and three strokes of the cane on this charge'). With 158abb16ea it made /legality/methamphetamine/singapore show one man as three separate people. |
A dataset that never withdraws anything is either perfect or unexamined, and the second is far more common than the first.
Four limits, stated plainly
One. Charge inflation.A judgment names the charges against the accused and also cites other cases. The only thing separating the accused’s own charge from a case they merely cited is a name, and this engine refuses to store names. Four filters were tested to close that gap and all four were refused as unsafe. The inflation is a permanent property of the method, not a bug awaiting a fix.
Two. Some records are held because the source names no substance this site carries. They are not lost and they are not published. They sit outside the substance taxonomy, and because they are not published they are not counted anywhere on this page.
Three. Appellate posture changes what a sentence means. A term recited in an appeal judgment is not the same as a term that judgment imposed. Every record carries an own-order versus recital label, and any figure quoted from this set should be read with that label attached. Two apparent survivors of the gate turned out to be the same man at first instance and on appeal.
Four. The dataset covers 4 jurisdictions and one of them holds a single record. Hong Kong is n equals one. It is a jurisdiction present in the set, not a jurisdiction the set describes.
How a record gets in
Every record starts from a published judgment at an official source. It is read by a person, gated against an automated check registry, and published only if it passes. The registry has grown as failures were found: each new check exists because a record passed the old ones and was still wrong.
29 checks, and every published record was re-gated against its live source at the moment it was published, not at the moment it was written. None shipped under a shorter list.
That number is generated from the record set, not typed, and the reason is worth stating: this site’s own methodology page told readers a check count that the gate had already outgrown, twice. Both were found by a build assertion rather than by a reader. A page that states a count of something the code defines needs the code to supply it.
How to cite this
Cite the judgment, not us, wherever you can. Every record on this site links to the official document it was read from, and that document is the authority. If you are quoting a sentence, a charge or an outcome, the court's own text is the better citation and it will outlive this page.
Where you need to cite the dataset itself, for the method, the corrections record, or a figure that only exists because the set was assembled:
2CB.com, Drug Sentencing Findings, https://2cb.com/reports/drug-sentencing, accessed [date].
The record set is versioned by the date it was last rebuilt, printed at the foot of this page. A figure quoted from an earlier build may not match a later one, because records are withdrawn when a human audit finds them wrong. That has already happened once and it will happen again.
If you want the underlying data rather than the page, ask. The schema, the check registry and the exclusion log are all available and none of it is proprietary.
This build of the record set: 2026-09-08.
Contact
One address, read by a person. Requests for primary sources, the record schema, the check registry or the exclusion log are welcome and answered. So are corrections: if a record here is wrong, say which one and why, and it will be checked against its source rather than defended.
No response time is promised. What is promised is that a correction gets read.
Research and data · How a case is verified, and where the method is weak
