Policy reviewed October 25, 2026
Source hierarchy
For law and regulation, we prioritize statutes, regulators, courts, and official government guidance. For health and science, we prioritize public-health agencies, clinical guidance, systematic reviews, and original research. Retail menus, brands, forums, and consumer reports can illustrate language or market practice but do not establish medical or legal facts.
Legal pages
Every state page shows a review date and links to the responsible state regulator, health department, commission, or legislature. The 50-state classification is cross-checked against the National Conference of State Legislatures; New York’s deeper pages begin with the Office of Cannabis Management. We distinguish state law, federal law, tribal jurisdiction, property rules, employer policy, and practical risk. Legal pages are educational and are not a substitute for a lawyer.
Health and effect claims
We do not prescribe, diagnose, or promise outcomes. A strain name, terpene, cannabinoid ratio, or consumer anecdote will not be presented as a guaranteed effect. Medical questions are directed to qualified health professionals.
Strain field notes
Strain pages separate history and retail folklore from observable product information. Names are not standardized. We emphasize producer, batch, format, potency, freshness, aroma, and user context.
Gear reviews
We assess materials, construction, usability, maintenance, safety, warranty, and value. Free products, affiliate relationships, and paid placements must be disclosed. Payment never buys a conclusion or correction veto.
Corrections
Factual corrections are made promptly and materially significant changes are noted. Readers can send a correction with the page, disputed statement, and supporting source through the contact form.
AI and automation
Automation may assist with structure, consistency checks, link audits, and draft development. Published claims remain subject to editorial review. We do not invent tests, interviews, purchases, credentials, or firsthand experience.
Age and audience
The site is for adults 21 and older. It does not target minors, imitate youth brands, or frame dangerous behavior as entertainment.
Publishing integrity
The page generator and source modules are stored in a versioned deployable archive. Automated publication checks verify that archive against its committed SHA-256 checksum, test that it can be read, and stop deployment before extraction when either check fails. The same build then checks unique titles and descriptions, canonical and social metadata, structured data, internal references, sitemap and search coverage, accessible table behavior, responsive safeguards, and the dated publication manifest. Passing automation does not prove a health, legal, laboratory, or product claim; it makes the published source and discovery surfaces reproducible and easier to audit.
Link and section integrity
Publication checks now validate the destination document and the named section for every local link that contains a URL fragment. This includes same-page jump navigation and links from one article to a specific section of another. A link can no longer pass merely because the file exists while its #section target is missing. The check decodes the fragment, reads the generated destination's IDs, and stops publication on a mismatch.
Structured-data identity
Every generated page publishes separate, stable identifiers for the organization, website, webpage, and—when present—the article. The webpage identifies the article as its main entity, while the article points back to the webpage that contains it. Automated checks reject duplicate identifiers, missing identity nodes, an article that reuses the webpage identifier, or a broken main-entity relationship. Structured data describes the published page for machines; it does not add evidence, expertise, endorsement, ratings, or claims that readers cannot see.
CSS delivery integrity
The production build bundles the site's maintained style modules into one deployable stylesheet and removes the development chunks. This prevents the browser from discovering a chain of additional render-blocking @import requests after the first stylesheet arrives. The publication audit rejects a deployed stylesheet that still contains CSS imports or split styles-*.css files. Bundling changes delivery, not the visual rules or editorial content.
Breadcrumb identity
Every indexable page now includes a machine-readable breadcrumb trail that mirrors its visible collection path: home, the relevant guide, gear, strain, or legal library, and the current page. The trail uses canonical HTTPS URLs and names already visible on the site. Automated checks reject missing, malformed, or noncanonical breadcrumb nodes. Breadcrumb markup describes site organization; it does not add claims, ratings, authorship, or endorsements.
Accessible form defenses
Spam-trap fields remain outside the keyboard focus order and are also hidden from assistive technology. This prevents a field that is intentionally meaningless to people from being announced as an unexplained form control. Publication checks inspect every deployed honeypot field and stop the build unless both safeguards are present. This changes accessibility semantics without weakening form delivery or collecting additional information.
Single-stop responsive tables
Wide tables are placed inside keyboard-focusable, labeled regions so keyboard users can reach and horizontally scroll them on narrow screens. When an author has already provided that region, the generator does not add a second focus stop to the nested table. Publication checks reject redundant nested focus targets and require the wrapper to expose a named region. This keeps the full table and its semantic rows and columns intact while making the interaction less repetitive.
Current-page and current-location navigation
The breadcrumb identifies the exact page with aria-current="page". On detail pages, the primary navigation identifies the containing library with aria-current="location" instead of incorrectly claiming that the library hub is the current page. The exact hub continues to use aria-current="page". Publication checks reject a missing current breadcrumb or a detail page whose collection context is not exposed. This gives assistive technology two accurate levels of orientation without changing URLs or visible labels.
Atom feed authorship
The publication feed carries one explicit editorial author at feed level so every entry inherits a named, linked source identity under the Atom format. The feed remains a machine-readable discovery surface, not proof that an article is correct. Publication checks parse the XML, require the canonical feed and site links, require the editorial author name and About-page URI, and reject entries without the required title, identifier, link, update time, and summary fields.
Accessible collection filters
The guide, gear, strain, and 50-state libraries expose each filter group by name, identify every filter as a button, publish its initial pressed state, and point search, sort, and filter controls to the result collection they change. The live script keeps aria-pressed synchronized with the visible selection and the polite result count announces changes without moving focus. Publication checks reject missing result IDs, unlinked controls, absent initial state, or filter buttons that could submit a surrounding form. These semantics describe the existing interaction; they do not hide results from search engines or create a separate assistive-technology experience.
Age-gate focus isolation
When the adult confirmation is visible, the page outside its modal dialog is removed from the keyboard and assistive-technology interaction path with the browser's inert behavior. Tab and Shift+Tab remain inside the dialog, the question is programmatically described, the declined state receives focus, and admitting an adult restores the page and the prior focus target. Publication checks reject a deployment that loses the isolation, focus loop, described dialog, decline focus, or release path. The confirmation remains a browser-local access prompt; it does not establish identity, location, legal eligibility, or a purchase right.
Contextual inbound-link floor
Every guide and gear detail page must receive links from at least two distinct HTML pages: its complete collection hub and one or more contextual pages. The publication audit builds the generated link graph, ignores the mechanical site index and update log for this check, counts unique source documents rather than repeated links, and stops deployment when a detail page is reachable only through its hub. This protects crawl discovery and reader orientation without manufacturing unrelated links or treating link count as authority.
Sitemap date integrity
The canonical XML sitemap and the legacy Search Console compatibility endpoint must contain the same complete URL and last-modified records. Each date must be valid, must match the page's visible and structured review date, and cannot be later than the current publication batch. The robots directive must name the canonical HTTPS sitemap. Publication checks reject duplicate locations, missing or malformed dates, a legacy payload that drifts from the canonical file, or a page-to-sitemap date mismatch. A last-modified date records a material editorial or publication change; it is not an instruction to rank a page or proof that a search engine has recrawled it.
Collection identity
The guide, gear, strain, and 50-state law hubs publish an ItemList whose names, canonical URLs, positions, and total count match the cards visible in that collection. The list describes editorial organization; it is not a ranking, recommendation order, rating, inventory claim, or statement that every item is equally current. Publication checks compare the machine-readable list with the rendered cards and reject missing, duplicated, noncanonical, out-of-order, or hidden members.
Release freshness contract
Each publication manifest names the homepage, collection hubs, trust pages, or articles materially changed by that release. The audit converts those canonical URLs to local files, requires each one to exist, and compares the manifest date with its primary structured-data dateModified value and canonical-sitemap lastmod. This prevents a changed discovery surface from quietly retaining an older machine-readable date. The manifest cannot make an unchanged page look fresh: a page is listed only when its content, organization, trust record, or publication behavior changed materially.
