Skip to content
This repository was archived by the owner on Oct 10, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
140 changes: 140 additions & 0 deletions docs/vernacular/VERDICT-RULES.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
# Vernacular verdict rules — `metrics-rule-v1.4`

Status: in use since 2026-09-25 PT. This page describes, in plain language, how the Vernacular export decides a verdict for
each tracked slang term. The machine-readable Jev question contracts are in [`contracts/`](contracts/).

This page holds rules only. It contains no posts, no author handles, no term example posts, no holdout ids and no database
contents. Any example below is either a term name used to illustrate a ruling, or clearly marked as synthetic.

## 1. The four verdicts

| Verdict | Meaning | Who decides |
|---|---|---|
| **PASS** | Real slang with one coherent meaning, and the evidence shows real, independent, sustained use. | Jev says slang, then the deterministic rule finds at least one evidence path and no guard flag. |
| **OBSERVE** | Real slang, but the evidence is not strong enough yet (or it is a meaningless meme, see §5). Keep watching. | Jev says slang, then the rule finds no evidence path, or a guard flag, or the null-meaning cap applies. |
| **QUARANTINE** | Not a slang term, or the record is unusable: a proper name, a hashtag or tag, only an ordinary non-slang sense, a sentence fragment, or incoherent/polluted meanings. | Jev. Final. |
| **HOLD** | Meaning empty, unknown or unconfirmed; several unrelated senses with none dominant; or Jev is unsure. Abstain and fail closed. | Jev. Final. |

## 2. Two steps: Jev decides, the rule measures

**Step 1: Jev** ([`jev_vote_contract.json`](contracts/jev_vote_contract.json)) answers one question: is this real slang with
one coherent slang meaning? The answer is one of `SLANG_COHERENT`, `SLANG_NULL_MEANING`, `QUARANTINE`, `HOLD`.

- Jev sees the recorded meanings, meaning history, variants and a few sample posts. It does **not** see volume, adoption,
lifecycle or scores, so popularity cannot bias the slang judgment.
- A top probability below 0.5 becomes HOLD.
- Borderline voting: if the first answer's top probability is between 0.35 and 0.65 (inclusive), two more independent calls
are made and the majority (at least 2 of 3) wins. No majority means HOLD.
- **Jev decides slang vs QUARANTINE/HOLD. Nothing downstream overrides it.** QUARANTINE and HOLD are final: the rule never
upgrades them, and a dictionary entry never overrides Jev (a term with a matching dictionary entry that Jev quarantines
stays QUARANTINE).

**Step 2: the deterministic rule** runs only when Jev says `SLANG_COHERENT` (or `SLANG_NULL_MEANING`, see §5).
A term is **PASS** if at least one evidence path is met **and** no guard flag is raised. Otherwise it is **OBSERVE**.

## 3. Evidence is counted on slang-sense posts only

Each post is labelled by Jev ([`jev_sense_contract.json`](contracts/jev_sense_contract.json)) as using the term in its slang
sense (`SLANG_SENSE`, which includes mentioning or explaining the slang) or as an unrelated same-spelling use (`OTHER_SENSE`:
a name, school, company, ticker, technical term, literal word or another language). Answers below 0.5 are `UNKNOWN` and are
excluded. For a term with an operator definition, posts are labelled against that definition instead (a slang sense not in
the definition counts as `OTHER_SENSE`).

All the author, week, day, community and attestation counts below use **slang-sense posts only**.

## 4. Evidence paths

Every path requires real, independent use. The core minimum is **at least 3 distinct slang-sense authors over at least
2 active weeks**.

| Path | Condition (all on slang-sense posts) | Idea |
|---|---|---|
| **A_BROAD_ADOPTION** | ≥ 8 authors **and** ≥ 3 communities **and** ≥ 2 active weeks | Many people in several communities, more than one week. |
| **B_PERSISTENT_USE** | ≥ 3 authors **and** ≥ 3 active weeks **and** a lifespan of ≥ 14 days | Few but independent users who keep using it for more than two weeks. |
| **C — attested** | ≥ 3 authors **and** ≥ 2 active weeks **and** one attestation source (below) | People explain it (or the operator or a dictionary does), plus minimal independent use. |
| **D_LINEAGE** | ≥ 1 tracked compound relation (child or parent term) **and** ≥ 3 authors **and** ≥ 2 active weeks | A generative term (for example aura → aura farming), plus minimal independent use. |

**Path C attestation sources.** Only one C label is recorded, checked in this order:

1. **`C_ATTESTED`**: ≥ 2 independent people in the corpus explaining the term (definition-style posts or explainer accounts).
2. **`attested_operator`**: otherwise, the operator has defined the term.
3. **`attested_dictionary`**: otherwise, an Urban Dictionary, Green's Dictionary of Slang or Wiktionary sense **matches** the
term's slang-sense meaning ([`jev_dictionary_contract.json`](contracts/jev_dictionary_contract.json): one MATCH/DIFFERENT
question per dictionary sense; a sense counts only at MATCH with p ≥ 0.6).

An operator definition or a matching dictionary sense fills **only the "≥ 2 explainers" part** of path C. The ≥ 3 slang-sense
authors, the ≥ 2 active weeks and every guard still apply, and neither changes Jev's answer. Only the matching sense counts:
a different sense of the same spelling (for example "slay" meaning "to kill") does not. An unmatched dictionary hit count
never counts toward path C.

**What is never a path.** Raw volume (number of posts), velocity and search-trend scores are recorded for information but
appear in no path. Repetition alone can never produce PASS.

## 5. Guard flags (any one blocks PASS)

| Flag | Raised when |
|---|---|
| `ONE_AUTHOR_DEPENDENCE` | One author wrote more than half of the slang-sense posts. |
| `BOTLIKE_REPETITION` | Half or more of the posts are identical copies (after removing URLs and handles). |
| `SINGLE_BURST` | Fewer than 2 active days, or 80 % or more of the posts fall on one day. |
| `FIXTURE_EVIDENCE` | Half or more of the evidence is test/fixture data. |
| `DORMANT_OR_UNDATED` | No use in the last 60 days (measured against the newest post in the database), or no dated post. |
| `LOW_SENSE_PURITY` | Fewer than 30 % of the posts use the slang sense **and** fewer than 8 slang-sense authors. |
| `SENSE_UNVERIFIED` | More than half of the posts have no usable sense label, or none do. |
| `NULL_MEANING_CAP` | Jev answered `SLANG_NULL_MEANING` (see below). Always OBSERVE. |

**Meaningless memes are capped at OBSERVE.** Operator ruling 2026-09-25: a real slang term whose point is that it means
nothing (for example "67") is answered `SLANG_NULL_MEANING` by Jev and is always **OBSERVE**, even if an evidence path is met.
The paths are still recorded. A term that merely has a vague, mild or emotional meaning (an intensifier, general approval)
is *not* null-meaning.

## 6. Compounds are mutations

Operator ruling 2026-09-25: when a phrase combines two base terms, it is a **mutation** of those terms, not a separate
adoption and not a member of an unrelated family. Example: "brain rot" and "aura" are terms; "brain rot aura" is a mutation
of the two. Compounds count as mutation/lineage evidence for their parents (path D), not as independent adoption. (An
earlier export folded "brainrot aura" into the `ai-native` family; that was a bug, fixed in Hyperlex PR #123.)

## 7. Meaning: context first, operator as fallback

- The meaning of a term is worked out **from context first**: Jev picks among the recorded glosses (or short meanings quoted
verbatim from the term's own slang-sense posts) the one the posts support
([`jev_meaning_contract.json`](contracts/jev_meaning_contract.json)). Jev never writes a meaning, so nothing is invented.
A resolved context meaning is `INFERRED`.
- The operator is asked **only when context cannot settle it** (`UNRESOLVED`, and the verdict is not QUARANTINE). A term the
operator says they don't know is marked `operator_unknown` and is not asked again.
- Precedence of meanings: operator definition (`OBSERVED`) > context (`INFERRED`) > none (`UNRESOLVED`).
- A context meaning is not attestation and never changes a verdict.
- **An operator definition counts as attestation** (`attested_operator`, §4), **but real use is still required**: the posts
must still show ≥ 3 slang-sense authors over ≥ 2 weeks with no guard flag.

## 8. Fail-closed behaviour

- A Jev error, a missing answer or an out-of-set answer leaves the term's note untouched. No verdict is guessed.
- A slang answer with no metrics row, a missing sense label or a missing dictionary judgment also leaves the note untouched.
- Any vote error in borderline voting fails the term closed; partial vote sets are never used.
- A verdict is a label only and never triggers publishing.
- Any threshold change requires bumping the rule version.

## 9. Version history

| Version | Date (PT) | Change |
|---|---|---|
| metrics-rule-v1 | 2026-09-25 10:39 | Deterministic PASS/OBSERVE rule with paths A–D and guards. |
| v1.1 | 2026-09-25 10:43 | Null-meaning cap (meaningless memes → OBSERVE). |
| v1.2 | 2026-09-25 10:50 | Evidence on slang-sense posts only; `LOW_SENSE_PURITY` and `SENSE_UNVERIFIED` guards; borderline 3-vote majority. |
| v1.3 | 2026-09-25 10:57 | Operator definition satisfies path C's explainer part (`attested_operator`). |
| **v1.4** | 2026-09-25 11:20 | A sense-matched Urban Dictionary / Green's / Wiktionary entry does too (`attested_dictionary`); the unmatched dictionary hit count no longer feeds path C. |

## Contracts in this folder

| File | Contract | Question |
|---|---|---|
| [`contracts/jev_vote_contract.json`](contracts/jev_vote_contract.json) | `rebuilt-v3.2-metrics` | Verdict vote: real slang with one coherent meaning? (with borderline voting) |
| [`contracts/jev_sense_contract.json`](contracts/jev_sense_contract.json) | `rebuilt-sense-v1` | Per post: slang sense or unrelated same-spelling use? |
| [`contracts/jev_meaning_contract.json`](contracts/jev_meaning_contract.json) | `rebuilt-meaning-v2` | Which recorded meaning do the posts support? |
| [`contracts/jev_dictionary_contract.json`](contracts/jev_dictionary_contract.json) | `rebuilt-dictmatch-v1` | Per dictionary sense: same slang sense as the corpus usage? |

Each JSON file is a sanitized published copy: its `_publication` block names the source file and its sha256. The contracts
embed no real posts; the `synthetic_example` blocks are invented placeholders (the made-up term "zorblet" and posts marked
`SYNTHETIC`).
77 changes: 77 additions & 0 deletions docs/vernacular/contracts/jev_dictionary_contract.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
{
"_publication": {
"source_file": "jev_dictionary_contract.json",
"source_sha256": "0616564b2b45fa503db95a4a482b7f5db77aeb2ae9f71340e485c15637783efa",
"note": "Published copy for documentation. Sanitized on 2026-09-25 PT: local file paths, cache paths, account names and people's names were removed or generalized; the question text, closed sets, thresholds and fail-closed rules are unchanged. This contract embeds NO real posts, X post text, author handles, term example posts, holdout ids or database contents: the {term}/{pid}/STATE fields are template placeholders filled at run time. The illustrative state under 'synthetic_example' (where present) is invented and clearly synthetic."
},
"contract_id": "vernacular-dictionary-sense-match",
"version": "rebuilt-dictmatch-v1",
"provenance": "NEW 2026-09-25 11:24 PT, rebuilt-series label (not an original contract). External dictionary attestation (Urban Dictionary, Green's, Wiktionary): an entry whose sense matches the term's slang-sense meaning satisfies path C's '>= 2 explainers' part only (path label attested_dictionary); only the matching sense counts. Jev only judges whether each dictionary sense matches the corpus usage. General instructions; no term-specific hints.",
"approved_by": "operator, 2026-09-25 PT (standing Jev permission, $1/run cap)",
"model": "jev-latest",
"sources": {
"urbandictionary": {
"url": "https://api.urbandictionary.com/v0/define?term={q}",
"max_senses": 6,
"min_interval_s": 1.0,
"note": "exact-word entries in API order; the API currently returns 0 votes for every entry, so no vote floor is possible (user-generated: weakest source)"
},
"wiktionary": {
"url": "https://en.wiktionary.org/w/index.php?action=raw&title={title}",
"max_senses": 8,
"min_interval_s": 1.0,
"note": "English-section definition lines with their {{lb}} labels; quotation lines (##*) skipped"
},
"greens": {
"search_url": "https://greensdictofslang.com/search/basic?q={q}",
"max_entries": 3,
"max_senses": 4,
"min_interval_s": 2.0,
"note": "exact-headword search results, then the entry page's definition text"
}
},
"fetch": "Crawl4AI (self-hosted, free); no Firecrawl, no X. Fetched pages are cached permanently, so a term is fetched only the first time it is looked up.",
"max_posts": 8,
"max_post_chars": 240,
"min_match_probability": 0.6,
"question": {
"type": "choice",
"instructions": "STATE.dictionary_senses['{d}'] is one dictionary sense (source: {src}) of '{term}'. STATE.posts show how '{term}' is used as slang in our corpus; STATE.meaning, if not empty, is its recorded slang meaning. Does this dictionary sense describe the SAME slang sense as that corpus usage (a close paraphrase, or a broader or narrower wording of the same sense, counts)? A different sense of the same spelling (literal, older, unrelated, or a different slang meaning) is DIFFERENT.",
"criteria": {
"MATCH": "the dictionary sense is the same slang sense as the corpus usage",
"DIFFERENT": "a different sense of the same spelling, or unrelated"
}
},
"statuses": {
"MATCH": ">= 1 dictionary sense matched (p >= 0.6) -> attestation",
"NO_MATCH": "senses found, none matched",
"NO_ENTRY": "no entry in any source",
"NO_SLANG_POSTS": "no slang-sense posts to compare against (not attested)"
},
"fail_closed": "fetch error with no match found, or Jev error: no row is written for the term (previous row kept); the export fails that term closed.",
"synthetic_example": {
"_synthetic": true,
"STATE": {
"term": "zorblet",
"meaning": "SYNTHETIC: impressive",
"posts": {
"p1": "SYNTHETIC: that fit is zorblet"
},
"dictionary_senses": {
"d1": {
"source": "urbandictionary",
"text": "SYNTHETIC: something extremely impressive"
},
"d2": {
"source": "wiktionary",
"text": "SYNTHETIC: a small pastry"
}
}
},
"expected": {
"d1": "MATCH",
"d2": "DIFFERENT"
},
"term_status": "MATCH"
}
}
107 changes: 107 additions & 0 deletions docs/vernacular/contracts/jev_meaning_contract.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
{
"_publication": {
"source_file": "jev_meaning_contract.json",
"source_sha256": "deb8f4f657662fd8836fd512b0517dba0e3518ed636aeb6886fac9fff4281aba",
"note": "Published copy for documentation. Sanitized on 2026-09-25 PT: local file paths, cache paths, account names and people's names were removed or generalized; the question text, closed sets, thresholds and fail-closed rules are unchanged. This contract embeds NO real posts, X post text, author handles, term example posts, holdout ids or database contents: the {term}/{pid}/STATE fields are template placeholders filled at run time. The illustrative state under 'synthetic_example' (where present) is invented and clearly synthetic."
},
"contract_id": "vernacular-context-meaning",
"version": "rebuilt-meaning-v2",
"supersedes": "rebuilt-meaning-v1 (sha256 6512419a994c946ea2b8275fa586e5784ae2db4caa61083cdae648761a76d64d; its rows are kept as history)",
"provenance": "NEW 2026-09-25 11:07 PT, rebuilt-series label (not an original contract). Synonym-split fix (meaning field only, not verdicts). Changes vs v1: (1) near-duplicate candidates are merged before scoring (Jev pairwise same-sense check, complete linkage) so synonyms no longer split probability; (2) corpus/evidence notes are no longer candidates; (3) when no stored gloss resolves, a second stage offers short meanings taken verbatim from the term's own slang-sense posts (deterministic 'X means / stands for / = ...' extraction). Jev only returns choice/boolean/score answers, so it cannot write free text and nothing is invented. Same confidence + post-agreement bar as v1.",
"approved_by": "operator, 2026-09-25 PT (standing Jev permission; feature 10:57-10:58 PT; v2 fix approved 11:05 PT)",
"model": "jev-latest",
"max_posts": 20,
"max_post_chars": 240,
"max_glosses": 6,
"max_post_candidates": 6,
"max_candidate_words": 8,
"merge": {
"min_same_probability": 0.6,
"linkage": "complete",
"representative": "first member in candidate order (stored glosses before post-derived)"
},
"voting": {
"band_lo": 0.35,
"band_hi": 0.65,
"votes": 3
},
"resolve_rule": {
"min_single_top_probability": 0.66,
"min_voted_mean_probability": 0.5,
"min_post_agreement": 0.6,
"min_supporting_posts": 2,
"min_post_answer_probability": 0.5
},
"gloss_exclude_patterns": [
"sacred NOT_COMPUTABLE",
"not slang",
"not a slang",
"not a lexeme",
"NOT_COMPUTABLE from body",
"corpus:",
"corpus meta",
"unconfirmed",
"unproven",
"claimed",
"claim ",
"gloss unclear"
],
"unresolved_categories": {
"conflict": [
"overall=MIXED",
"overall=NO_MAJORITY",
"posts disagree"
],
"obscure": [
"no slang-sense posts",
"no candidate meanings",
"overall=NONE_FIT",
"low confidence",
"too few supporting posts"
]
},
"note": "A context meaning (INFERRED) fills the note's meaning field only; it is NOT attestation and never changes a verdict. An operator definition (OBSERVED) overrides it. Context first; the operator is asked only when context cannot settle the meaning (UNRESOLVED).",
"questions": {
"merge": {
"type": "boolean",
"instructions": "STATE.candidates are short candidate meanings for the slang term '{term}'. Do candidates {a} and {b} describe the same sense of the term (paraphrases or near-synonyms of one meaning), rather than different meanings?"
},
"overall": {
"type": "choice",
"instructions": "STATE.posts are posts that use the term '{term}' as slang. Each option lists one meaning (alternative phrasings of the same meaning are separated by ' | '). Which option best describes how the term is used in these posts? Pick an option only if most posts fit it. Pick NONE_FIT if no option fits the posts, MIXED if the posts use clearly different senses with none dominant.",
"criteria_extra": {
"NONE_FIT": "no listed meaning fits how the posts use the term",
"MIXED": "posts use clearly different senses; none dominant"
}
},
"support": {
"type": "choice",
"instructions": "Post {pid} in STATE.posts: is the term '{term}' used there in the sense given in STATE.meaning (same or a close variant of that sense)? Mentioning or explaining the term with that sense counts as SUPPORTS.",
"criteria": {
"SUPPORTS": "uses or explains the term in STATE.meaning's sense (or a close variant)",
"DIFFERENT": "uses the term in a different sense, or the post does not show the sense"
}
}
},
"synthetic_example": {
"_synthetic": true,
"STATE": {
"term": "zorblet",
"candidates": {
"M1": "SYNTHETIC: impressive | really cool",
"M2": "SYNTHETIC: a small pastry"
},
"posts": {
"p1": "SYNTHETIC: that fit is zorblet",
"p2": "SYNTHETIC: zorblet energy today"
}
},
"expected": {
"overall": "M1",
"support": {
"p1": "SUPPORTS",
"p2": "SUPPORTS"
}
}
}
}
Loading
Loading