Releases

Releases

The change journal for the TropeLang engine and the standard corpus — versioned and published independently. The corpus track tracks its changelog; the engine is released as cli-v*.

Corpus standard · corpus.tropelang.com

1.9.0
Added
  • Hilarious Outtakes (Metafiction / Paratext) — https://allthetropes.org/wiki/Hilarious_Outtakes (The Cannonball Run gag reel — a performer [&Flubs] a take, the muffs gathered into a [+GagReel]; the production breaking its own fiction, vs The Stinger (an in-story post-credits scene). Founds prop GagReel + verb Flubs(take).)
  • Bitch in Sheep's Clothing (Character Archetypes / Villains) — https://allthetropes.org/wiki/Bitch_in_Sheep's_Clothing (Harry Potter, Dolores Umbridge — a [+Saccharine] character [&Mistreats] a victim behind the pleasant face; the polar opposite of Jerk with a Heart of Gold, the public-stage scale-up being Villain with Good Publicity. Founds prop Saccharine + verb Mistreats(target).)
  • Defrosting Ice Queen (Relationships / Romance) — https://allthetropes.org/wiki/Defrosting_Ice_Queen (10 Things I Hate About You, Kat & Patrick — a suitor [&Thaws] an [+Icy] love interest through patient courtship; the love-interest-specific cousin of Took a Level in Kindness. Founds prop Icy + verb Thaws(target).)
  • Fantastic Racism (Settings / Worldbuilding) — https://allthetropes.org/wiki/Fantastic_Racism (X-Men, humanity vs mutantkind — a bigot [&Reviles] an [+Unnatural] kind for what they are; real bigotry refracted through a fantastical metaphor. Founds prop Unnatural + verb Reviles(target).)
  • The Vamp (Character Archetypes / Villains) — https://allthetropes.org/wiki/The_Vamp (A Fool There Was, Theda Bara's "The Vampire" — an [+Irredeemable] seductress [&Seduces] a victim to ruin him; to-the-core evil never swayed by love, vs the Femme Fatale (allure that might turn). Founds prop Irredeemable + verb Seduces(target).)
  • Manipulative Bastard (Character Archetypes / Villains) — https://allthetropes.org/wiki/Manipulative_Bastard (Othello, Iago — a [+Calculating] character [&Exploits] a victim's own emotions to make them act; the master of feelings (vs The Chessmaster's events), the open form of The Man Behind the Man's covert control. Founds prop Calculating + verb Exploits(target).) Corpus 291 → 297 tropes; self-recognition steady at 297/297 (100%). (Converts the six commented assoc future-pointers from the 2026-06 integrity sweep, re-enabling each source trope's discovery link.)
  • Culture-balance example stories (examples/) — the first corpus-side story files: standalone narratives (no rule; read by drams) that ground recognizable patterns in non-default traditions, so no single culture reads as the baseline. Phase 1 of the culture & representation initiative (see examples/README.md and trl/tropes/BACKLOG.md): - theogony_succession.trl — Greek (Hesiod): the usurping heir, the self-fulfilling prophecy, the hidden child who returns. Fires the succession cluster (The Evil Prince, Klingon Promotion, Full-Circle Revolution). - the_passion.trl — Christian (the Gospels): betrayal by a trusted intimate, willing sacrifice, resurrection. Fires the betrayal cluster (Evil Chancellor, The Mole Springs, Face-Heel Turn). - amaterasu_and_the_cave.trl — Shinto (the *Kojiki*): the sibling's offense, the withdrawn god, the clever lure that restores the world. Thinner coverage — a flagged signal for later phases.
  • Time-travel tropes (the first chron / story-time batch) — vanguard + subgenre across the three Temporal Mutability models, each keyed on the S23 story-time layer (engine ≥ 0.8.1 — before/after GATE recognition). The story-time predicates are genuine discriminators: every vignette places its ordered operands in distinct @@-stamped scenes, and each is verified BOTH ways (forward confirms 1.00; a reversed or chron-less variant does not — STYLE §8). Presentation-time stays the spine; chron/@@ supply world-line continuity over a character's evolving states. - Stable Time Loop (Fixed) — https://allthetropes.org/wiki/Stable_Time_Loop (Prisoner of Azkaban time-turner — a [&Causes] deed MUTUALLY ordered with its own outcome (before AND after, the closed-loop signature) over a [+Loop] chron. Founds verb Causes(outcome).) - Groundhog Day Loop (Fixed, subgenre) — https://allthetropes.org/wiki/Groundhog_Day_Loop (Groundhog Day — a [+Protagonist] [&Relives] a [+Loop] span, memory intact. Founds verb Relives(span).) - Grandfather Paradox (Mutable) — https://allthetropes.org/wiki/Grandfather_Paradox (Back to the Future, the fading photo — an [&Unmakes] act erases its own later precondition; after($existence,$deed). Founds verb Unmakes(precondition).) - Set Right What Once Went Wrong (Mutable, subgenre) — https://allthetropes.org/wiki/Set_Right_What_Once_Went_Wrong (Quantum Leap — a verb PAIR: a later [&Mends] undoes the earlier [&Wrongs] act it targets; before($wrong,$fix). Founds verb Wrongs(victim) + verb Mends(wrong).) - Alternate Timeline (Branching) — https://allthetropes.org/wiki/Alternate_Timeline (Star Trek 2009, Nero — a [&Diverges] split off an origin that persists, over a chron FORK. Founds verb Diverges(from).) - For Want of a Nail (Branching, subgenre) — https://allthetropes.org/wiki/For_Want_of_a_Nail (A Sound of Thunder — a trivial [&Cascades] act remakes the later world; after($outcome,$change). Founds verb Cascades(into).) Corpus 297 → 303 tropes; self-recognition steady at 303/303 (100%).
Changed
  • Culture pass (phase 2) — diversified six trope vignettes off the Hollywood default. Re-authored the CONCRETE VIGNETTE of six tropes onto religious/mythological traditions (rules untouched; each still self-recognizes at 297/297): The Mentor (Karate Kid → Krishna & Arjuna, Hindu), The Quest (Indiana Jones → Journey to the West / Xuanzang, Chinese), Back from the Dead (Aslan → Osiris & Isis, Egyptian), The Hero (Beowulf → the Hungry Tigress Jataka, Buddhist), Self-Fulfilling Prophecy (Oedipus → the binding of Fenrir, Norse), The Paragon (Atticus Finch → Rama and the forest sages, Hindu/Ramayana). Continues the culture & representation initiative begun in the examples/ story set.
  • Gender pass — tagged the gender-definitional archetypes. Added a gender prop to the discriminator (and vignette) of tropes whose gender carries distinct connotation, where it was missing — a gendered form is not interchangeable with its neutral concept (a Deadbeat Dad ≠ a deadbeat parent; "I am your father" ≠ revealing motherhood): - [+Feminine]: Femme Fatale, The Vamp, Defrosting Ice Queen, Damsel in Distress, Disposable Woman. - [+Masculine]: I Am Your Father (the paternal reveal, distinct from a mother's — the revealer is now fixed [+Masculine]), The Evil Prince (vs the Evil Queen / wicked stepmother), The Wizard (vs the Witch).
  • engine_min 0.6.0 → 0.8.1. The corpus now contains chron / story-time tropes (S23: chron/@@/~~/ before/after). Their before/after discriminators only gate recognition on engine ≥ 0.8.1 (on 0.8.0 the predicates parse but are ignored, so the rules would over-fire); consumers must be on 0.8.1+.
1.8.1
Added
  • Mood Whiplash (Rhetoric / Tone) — https://allthetropes.org/wiki/Mood_Whiplash (Up's opening montage — a [+Levity] moment [&Shatters]-ed beside a [+Gravity] one; the discriminator is the CO-PRESENCE of both tonal poles (the juxtaposition), vs Cerebus Syndrome (a slow arc). Reuses the promoted Tone poles; founds verb Shatters(mood).)
  • Cerebus Syndrome (Plot Devices / Tone) — https://allthetropes.org/wiki/Cerebus_Syndrome (M*A*S*H — a work mash [%TV] whose opening slot is [+Levity] and finale slot is [+Gravity], with a [&Darkens] span; the tonal ARC by position on the work skeleton (engine ≥ 0.6.0), vs Mood Whiplash (a single seam). Founds concept opening/concept finale + verb Darkens(subject).) Un-defers the Tone cluster — the last of the demoted batch-3 tropes. Corpus 289 → 291; selfcheck 291/291 (100%).
Changed
  • Prelude — promoted a first-class Tone. Added attr Tone [+Narrative] with poles attr Levity [+Tone] / attr Gravity [+Tone], so a moment or a work carries a tone and rules key on the broad [+Tone] or a specific pole. Mood Whiplash and Cerebus Syndrome are founded on it (replacing the old per-trope tonal props Levity/Lighthearted). Foundational change — full-corpus selfcheck steady at 291/291.
  • assoc integrity sweep — fixed 32 dangling discovery links (no recognition impact; assoc is a soft link the validator doesn't resolve). Definite-article rename casualties (the_siegesiege, the_power_of_friendshippower_of_friendship); founded concept theory_of_mind (the module lacked its own system node — cleared 18 links) and concept trauma (kept the Heroic BSOD / Survivor's Guilt links). The remaining targets were checked against the AllTheTropes archive (/exists): the 6 that are real but unconverted tropes (Hilarious Outtakes, Bitch in Sheep's Clothing, Defrosting Ice Queen, Fantastic Racism, The Vamp, Manipulative Bastard) are commented out in place as future-conversion pointers; only the 3 non-trope targets (awe, timing — prelude attrs; defiance) were deleted outright. Corpus integrity now clean: 0 broken assoc targets, 0 parse errors, 291/291 selfcheck.
  • Founded the "telling"-frame concepts in trl/concepts/narrative.trl (the canonical, always-imported layer): concept audience (the literal story observer) and concept author (the literal writer) — centralized out of rhetoric.trl so any trope names one shared node — plus new concept moral (a story's didactic takeaway) and concept plot (the structured event-spine). Resolves previously-unfounded param references — e.g. Idiot Ball's [&Blunders(… for=plot)] and An Aesop's agent=author / as=moral. Selfcheck steady at 291/291.
1.8.0
Added
  • Plot Coupon (Plot Devices) — https://allthetropes.org/wiki/Plot_Coupon (Dragon Ball, the seven Dragon Balls — a [+Protagonist] [&Collects] a [+PlotCoupon] token; the plot-gating piece bound on the gather event specializes it off a static MacGuffin (the seeking is the plot). Founds prop PlotCoupon + verb Collects(token).)
  • Just Between You and Me (Villains / Stock Villain Behaviors) — https://allthetropes.org/wiki/Just_Between_You_and_Me (The Incredibles, Syndrome — an [+Antagonist] [&Confides] a [+Scheme] to a cornered [+Protagonist]; the laid-bare plan parts it from Bond Villain Stupidity (the forgone kill) and a Motive Rant (motives, not the plan). Founds prop Scheme + verb Confides(to).)
  • Time Bomb (Plot Devices) — https://allthetropes.org/wiki/Time_Bomb (24, Jack Bauer — a [+Protagonist] [&Defuses] a [+Ticking] device; the live ticking explosive is the concrete device-form of Race Against the Clock (an abstract [+Deadline]). Founds prop Ticking + verb Defuses(device).) Corpus 216 → 219 tropes; self-recognition steady at 219/219 (100%).
  • Back from the Dead (Death Tropes / Resurrection) — https://allthetropes.org/wiki/Back_from_the_Dead (The Lion, the Witch and the Wardrobe, Aslan — an agency [&Resurrects] a [+Dead] subject; binding actual death on the returned party parts it from Disney Death (an apparent death that was never real). Founds verb Resurrects(subject).)
  • The Big Damn Kiss (Romance / Love Tropes) — https://allthetropes.org/wiki/The_Big_Damn_Kiss (Spider-Man, the upside-down rain kiss — two [+Yearning] characters [&Kisses]; the mutual held tension makes it the PAYOFF of UST, not a casual or one-sided kiss. Founds prop Yearning + verb Kisses(other).)
  • The Ace (Character Archetypes) — https://allthetropes.org/wiki/The_Ace (Sherlock Holmes — an [+Ace] [&Excels] at a challenge; the standing reputation for effortless mastery parts it from a Determinator (who wins by grinding struggle). Founds prop Ace + verb Excels(at).) Corpus 219 → 222 tropes; self-recognition steady at 222/222 (100%).
  • Pre-Mortem One-Liner (Combat Tropes / Death Tropes) — https://allthetropes.org/wiki/Pre-Mortem_One-Liner (Fist of the North Star, Kenshiro's "you are already dead" — a hero [&Quips] at a [+Doomed] foe and [&Slays] them; line and kill bound to the same doomed foe part it from a Bond One-Liner (post-mortem) and Defiant to the End. Founds prop Doomed; reuses [&Quips]/[&Slays].)
  • The Reason You Suck Speech (Rhetoric / Speeches) — https://allthetropes.org/wiki/The_Reason_You_Suck_Speech (The Social Network, Erica's breakup — a speaker [&Excoriates] a [+Culpable] target, cataloguing real faults; the deserving target parts it from a Breaking Speech (a [+Vulnerable] soft point aimed for despair). Founds prop Culpable + verb Excoriates(target).)
  • Bittersweet Ending (Plot Devices / Endings) — https://allthetropes.org/wiki/Bittersweet_Ending (Casablanca, the airport — a hero [&Attains] a [+Costly] victory beside a [+Lost] cost; the win-and-loss co-present part it from a clean Happy Ending and a Downer Ending. Founds prop Lost; reuses [&Attains]/[+Costly].) Corpus 222 → 225 tropes; self-recognition steady at 225/225 (100%).
  • Berserk Button (Characterization Tropes / Triggers) — https://allthetropes.org/wiki/Berserk_Button (The Incredible Hulk, Bruce Banner — a provoker [&Provokes] a [+HairTrigger] character, who goes [+Enraged]; the standing rage-trigger bound on the provoked party parts it from ordinary anger. Founds prop HairTrigger + verb Provokes(target).)
  • Defeat Means Friendship (Combat / Friendship) — https://allthetropes.org/wiki/Defeat_Means_Friendship (Rocky & Apollo Creed — a hero [&Bests] a foe who then [&Allies_With] him; the defeat→alliance pairing between the same two parties parts it from Enemy Mine (a truce) and a plain Worthy Opponent. Founds verb Bests(target); reuses [&Allies_With].)
  • Badass Boast (Rhetoric / Speeches) — https://allthetropes.org/wiki/Badass_Boast (Gladiator, Maximus unmasks — a [+Formidable] character [&Boasts] of their prowess; genuine formidability parts it from empty bragging (a weakling's boast, undercut). Founds verb Boasts(prowess); reuses [+Formidable].) Corpus 225 → 228 tropes; self-recognition steady at 228/228 (100%).
  • Well-Intentioned Extremist (Villains) — https://allthetropes.org/wiki/Well-Intentioned_Extremist (Watchmen, Ozymandias — an [+Antagonist] [&Perpetrates] an [+Atrocity] FOR a [+JustCause]; both halves bound on one act, the good-end/evil-means conjunction. Founds prop JustCause/prop Atrocity + verb Perpetrates(atrocity).)
  • Sacrificial Lion (Death Tropes) — https://allthetropes.org/wiki/Sacrificial_Lion (A Game of Thrones, Ned Stark — a [+Major] [+Sympathetic] character [&Slays]-ed to prove the stakes; the weight of the victim parts it from the Red Shirt (an [+Expendable] nobody). Founds prop Major.)
  • Evil Chancellor (Villains / Politics) — https://allthetropes.org/wiki/Evil_Chancellor (Aladdin, Jafar — a [#Trusted] advisor [&Betrays] a [+Royalty] ruler; the trusted-advisor-vs-lawful- sovereign pairing parts it from The Starscream (an evil [+BigBad] master). Reuses existing vocab — no new declarations.)
  • Mook (Combat / Cast) — https://allthetropes.org/wiki/Mooks (John Wick, the club gunmen — a hero [&Strikes] a [+Henchman]; the villain-side disposability parts it from the Red Shirt (hero-side filler killed by the threat). Founds prop Henchman; reuses [&Strikes].)
  • The Man Behind the Man (Reveal / Villains) — https://allthetropes.org/wiki/The_Man_Behind_the_Man (Harry Potter, Quirrell & Voldemort — a [+Mastermind] [&Manipulates] an [+Antagonist] puppet; the concealed controller above the visible villain. Founds verb Manipulates(puppet); reuses [+Mastermind].)
  • Fire-Forged Friends (Friendship) — https://allthetropes.org/wiki/Fire-Forged_Friends (Toy Story, Woody & Buzz — a [+Wary] character [&FightsBeside] another and bonds; the side-by-side forging parts it from Defeat Means Friendship (a defeat first) and Enemy Mine (a cold truce). Founds prop Wary + verb FightsBeside(ally); reuses Bonded_To.)
  • Trash Talk (Combat / Rhetoric) — https://allthetropes.org/wiki/Trash_Talk (Muhammad Ali, the pre-fight needle — a competitor [&Taunts] an [+Opponent]; the contest-foe jab parts it from a Badass Boast (self-praise) and "The Reason You Suck" Speech. Founds prop Opponent + verb Taunts(target).) Corpus 228 → 235 tropes; self-recognition steady at 235/235 (100%).
  • Lovable Rogue (Character Archetypes) — https://allthetropes.org/wiki/Lovable_Rogue (Robin Hood — a [+Roguish] [+Sympathetic] character [&Steals]; charm-plus-sympathy on the thief parts it from the rough Anti-Hero. Founds prop Roguish + verb Steals(loot).)
  • Sacrificial Lamb (Death Tropes) — https://allthetropes.org/wiki/Sacrificial_Lamb (Deep Blue Sea, Russell Franklin — a [+Minor] [+Sympathetic] character [&Slays]-ed early; calibrated between the Sacrificial Lion ([+Major]) and the Red Shirt ([+Expendable]). Founds prop Minor.)
  • Downer Ending (Plot Devices / Endings) — https://allthetropes.org/wiki/Downer_Ending (Nineteen Eighty-Four, Winston — a [+Protagonist] [&Fails] at a [+Final] beat; the terminal defeat parts it from a Bittersweet Ending (a victory attained). Founds verb Fails(goal); reuses [+Final].)
  • Calling Your Attacks (Combat Tropes) — https://allthetropes.org/wiki/Calling_Your_Attacks (Street Fighter, Ryu's "Hadouken!" — a fighter [&Announces] a [+Technique] and [&Strikes]; the named move shouted at the blow. Founds prop Technique + verb Announces(move); reuses [&Strikes].)
  • Cooldown Hug (Friendship / Emotion) — https://allthetropes.org/wiki/Cooldown_Hug (Steven Universe — a comforter [&Embraces] an [+Enraged] character, who comes away [+Calmed]; the hug that quells a rampage. Founds prop Enraged (now shared with Berserk Button) + verb Embraces(other).)
  • The Purge (Politics / Villains) — https://allthetropes.org/wiki/The_Purge (The Godfather, the baptism montage — a power-holder [&Purges] a [+Collective] of rivals; the wholesale consolidation parts it from a single Klingon Promotion. Founds verb Purges(faction); reuses [+Collective].)
  • Hannibal Lecture (Rhetoric / Villains) — https://allthetropes.org/wiki/Hannibal_Lecture (The Silence of the Lambs, Lecter & Clarice — a [+Captive] speaker [&Unnerves] their captor; the restrained party turning the tables parts it from a Breaking Speech (a free villain). Founds verb Unnerves(target); reuses [+Captive].) Corpus 235 → 242 tropes; self-recognition steady at 242/242 (100%).
  • Armor-Piercing Question (Rhetoric / Persuasion) — https://allthetropes.org/wiki/Armor-Piercing_Question (Army–McCarthy hearings, Welch — *scene scale*: a [+Piercing] question on the question= role of an [&Asks] event; target [#Shaken]. Founds prop Piercing + verb Asks(question).)
  • Lampshade Hanging (Metafiction) — https://allthetropes.org/wiki/Lampshade_Hanging (Age of Ultron, Hawkeye — *scene scale*: a character [&Lampshades] a [+Contrived] element; in-story, not an audience address. Founds prop Contrived + verb Lampshades(element).)
  • Aside Glance (Metafiction) — https://allthetropes.org/wiki/Aside_Glance (The Office, Jim — *scene scale*: a silent [&Glances] at the [+Spectator]; the dedicated glance verb (not a spoken [&Addresses]) keeps it distinct from Breaking the Fourth Wall. Founds verb Glances(at).)
  • Talking the Monster to Death (Rhetoric / Persuasion) — https://allthetropes.org/wiki/Talking_the_Monster_to_Death (Star Trek, Kirk & Nomad — *act scale*: a hero [&TalksDown] an [+Invincible] [+Antagonist], undone by argument alone. Founds verb TalksDown(target); reuses [+Invincible].)
  • Patrick Stewart Speech (Rhetoric / Persuasion) — https://allthetropes.org/wiki/Patrick_Stewart_Speech (The Great Dictator — *act scale*: [+Humankind] is [&Disparages]-ed then [&Extols]-ed, a two-event dismissal-and-rebuttal. Founds prop Humankind + verb Disparages(subject)/verb Extols(subject).)
  • Strawman Political (Rhetoric / Persuasion) — https://allthetropes.org/wiki/Strawman_Political (Captain Planet — *arc scale*: a [+Strawman] (rigged opposing-view character) [&KnocksDown]-ed; the standing role surfaces when routed. Founds prop Strawman + verb KnocksDown(target).)
  • Audience Surrogate (Rhetoric / Persuasion) — https://allthetropes.org/wiki/Audience_Surrogate (Dr. Watson — *arc scale*: a [+Surrogate] character bound on the agent of an [&Asks] event, voicing the audience's question. Founds prop Surrogate; reuses [&Asks].) Corpus 242 → 249 tropes; self-recognition steady at 249/249 (100%). (Rhetoric arena 23 → 28; the batch spans recognition scales: 3 scene · 2 act · 2 arc.)
  • Only the Chosen May Wield (Artifacts / Destiny) — https://allthetropes.org/wiki/Only_the_Chosen_May_Wield (the Sword in the Stone, Arthur — a [+Destined] hero [&Wields] a [+ChosenLocked] item; the artifact validates the fated. Founds prop ChosenLocked + verb Wields(item); reuses [+Destined].)
  • Holy Halo (Iconography / Signs) — https://allthetropes.org/wiki/Holy_Halo (a gilded altarpiece — a source [&Haloes] a figure with a [+Hallowed] sign, read as [+Holy]; meaning by religious-art tradition. Founds prop Hallowed + verb Haloes(sign).)
  • Tsundere (Character Archetypes) — https://allthetropes.org/wiki/Tsundere (Toradora!, Taiga — a [+Smitten] character both [&Rebuffs] and [&Softens] toward the same crush; the hot-cold flip is the trope. Founds prop Smitten + verb Rebuffs(target)/verb Softens(toward).)
  • Throwing Down the Gauntlet (Combat / Challenges) — https://allthetropes.org/wiki/Throwing_Down_the_Gauntlet (300, Leonidas — a challenger [&ThrowsGauntlet] at a foe; the open, ritual demand to fight. Founds verb ThrowsGauntlet(target).)
  • Spit Take (Comedy / Reactions) — https://allthetropes.org/wiki/Spit_Take (Airplane! — a character [&SpitTakes] at a [+Shocking] revelation; the slapstick shock-spray. Founds prop Shocking + verb SpitTakes(at).)
  • Red String of Fate (Romance / Destiny) — https://allthetropes.org/wiki/Red_String_of_Fate (Your Name — a [+RedThread] [&Binds] two destined people; the myth-loaded thread makes the union fate. Founds prop RedThread + verb Binds(pair).)
  • Pinky Swear (Friendship / Rituals) — https://allthetropes.org/wiki/Pinky_Swear (a treehouse oath — two people [&PinkySwears]; the linked-finger ritual makes a promise unbreakable. Founds verb PinkySwears(with).) Corpus 249 → 256 tropes; self-recognition steady at 256/256 (100%). (Loaded-meaning batch: objects/actions/behaviors whose sense comes from legend / religious art / anime / chivalry / slapstick / myth / childhood ritual.)
  • Kingmaker Scenario (Politics / Power) — https://allthetropes.org/wiki/Kingmaker_Scenario (Warwick, Wars of the Roses — a [+Kingmaker] [&Tips] the balance to one side; decisive but unwinnable. Founds prop Kingmaker + verb Tips(toward).)
  • La Resistance (Politics / Rebellion) — https://allthetropes.org/wiki/La_Resistance (The Hunger Games, District 13 — a [+Resistance] movement [&Resists] an [+Oppressive] regime. Founds prop Resistance + verb Resists(target).)
  • Government Conspiracy (Politics / Conspiracy) — https://allthetropes.org/wiki/Government_Conspiracy (The X-Files, the Syndicate — a [+Statal] body [&Conceals] a [+Damning] truth; the state apparatus as conspirator. Founds prop Statal + verb Conceals(secret).)
  • The Quisling (Politics / Villains) — https://allthetropes.org/wiki/The_Quisling (Vidkun Quisling, occupied Norway — a [+Collaborator] [&Collaborates] with an [+Oppressive] occupier against his own people; distinct from Evil Chancellor / The Starscream. Founds prop Collaborator + verb Collaborates(with).)
  • The Stinger (Metafiction / Paratext) — https://allthetropes.org/wiki/The_Stinger (Iron Man, Nick Fury — a [+PostCredits] scene [&Appends]-ed after the credits; defined by placement, vs the content-defined Sequel Hook. Founds prop PostCredits + verb Appends(scene).)
  • Sequel Hook (Plot Devices / Endings) — https://allthetropes.org/wiki/Sequel_Hook (Back to the Future, the flying DeLorean — a [+SequelBait] thread [&Teases]-ed at the close, pointing to more. Founds prop SequelBait + verb Teases(hook).)
  • Medium Awareness (Metafiction) — https://allthetropes.org/wiki/Medium_Awareness (Blazing Saddles, the Count Basie Orchestra — a character [&Notices] a [+MediumArtifact] (the soundtrack); reacts to the apparatus, not the audience, vs Fourth Wall / Aside Glance. Founds prop MediumArtifact + verb Notices(artifact).) Corpus 256 → 263 tropes; self-recognition steady at 263/263 (100%). (Capability-gap batch 1/5: Power 12 → 16, Meta 14 → 16 — lifting the two thinnest spokes.)
  • Asskicking Equals Authority (Politics / Power) — https://allthetropes.org/wiki/Asskicking_Equals_Authority (Black Panther, Warrior Falls — a challenger [&Bests] a [+MightIsRight] chief and takes the rule; by-combat (not by-kill) succession. Founds prop MightIsRight; reuses [&Bests].)
  • Police State (Politics / Dystopia) — https://allthetropes.org/wiki/Police_State (The Handmaid's Tale, Gilead — an [+Authoritarian] regime [&Represses] its populace; the apparatus of control, vs a lone tyrant. Founds prop Authoritarian + verb Represses(target).)
  • A House Divided (Friendship / Group Dynamics) — https://allthetropes.org/wiki/A_House_Divided (Night of the Living Dead — a [+Besieged] member [&TurnsOn] a fellow; cohesion collapsing inward under threat, the inverse of Enemy Mine. Founds prop Besieged + verb TurnsOn(target).)
  • Disposable Woman (Death Tropes) — https://allthetropes.org/wiki/Disposable_Woman (Green Lantern, Alexandra DeWitt — a [+Disposable] love interest [&Slays]-ed to fuel the hero's revenge ("fridging"), vs the Sacrificial Lion/Lamb tiers. Founds prop Disposable; reuses [&Slays].)
  • Author Avatar (Metafiction) — https://allthetropes.org/wiki/Author_Avatar (Breakfast of Champions, Vonnegut — an [+AuthorStandIn] character [&Interjects] into the tale; the author embedded as a figure, vs a Fourth-Wall address. Founds prop AuthorStandIn + verb Interjects.)
  • Literary Agent Hypothesis (Metafiction / Framing) — https://allthetropes.org/wiki/Literary_Agent_Hypothesis (The Princess Bride, Goldman's "abridgement" — an agent [&Relays] a [+RealAccount]; the work framed as true, vs a Frame Story. Founds prop RealAccount + verb Relays(account).)
  • Trapped in TV Land (Metafiction / Diegetic Levels) — https://allthetropes.org/wiki/Trapped_in_TV_Land (Pleasantville — a force [&PulledInto] a [+FictionalWorld] carries a person inward, vs Reality Bleed's outward leak. Founds prop FictionalWorld + verb PulledInto(subject).) Corpus 263 → 270 tropes; self-recognition steady at 270/270 (100%). (Capability-gap batch 2/5: Power → 18, Meta → 19, Bonds → 23, Death → 21 — balancing the bottom of the frontier.)
  • Enemy Civil War (Politics / Villains) — https://allthetropes.org/wiki/Enemy_Civil_War (The Dark Knight, Joker vs the mob — one [+Antagonist] faction [&TurnsOn] another; villain-on-villain, vs A House Divided (besieged allies). Reuses [&TurnsOn] — no new vocab.)
  • Dropped a Bridge on Him (Death Tropes) — https://allthetropes.org/wiki/Dropped_a_Bridge_on_Him (Star Trek TNG, Tasha Yar — a [+Major] character [&Slays]-ed in an [+Anticlimactic] beat; withheld drama, vs the Sacrificial Lion's weighty death. Founds prop Anticlimactic; reuses [+Major]/[&Slays].)
  • Death Seeker (Death Tropes / Character) — https://allthetropes.org/wiki/Death_Seeker (Logan — a [+DeathWish] character [&CourtsDeath], fighting to die; the inverted will of a Determinator. Founds prop DeathWish + verb CourtsDeath.)
  • Crapsack World (Settings / Worldbuilding) — https://allthetropes.org/wiki/Crapsack_World *(hard recognition shape)* — (Warhammer 40,000 — in a [+Crapsack] world (a set) an [+Unremarked] [&Brutalizes] cruelty passes normalized; bleakness shown by atrocity met with a shrug. Founds prop Crapsack/prop Unremarked + verb Brutalizes(target).) Corpus 270 → 274 tropes; self-recognition steady at 274/274 (100%). (Capability-gap batch 3/5: Crapsack World lands the setting-as-property recognition shape via a linked-event discriminator. Painting the Medium, Mood Whiplash, and Cerebus Syndrome were demoted from this batch — deferred pending the Medium/work-skeleton + Tone-promotion design pass. Power → 19, Death → 23.)
  • The Caligula (Politics / Villains) — https://allthetropes.org/wiki/The_Caligula (Caligula, history — a [+Royalty][+Mad] ruler [&Tyrannizes]; the insane despot, vs a merely cruel tyrant, by the madness bound on the throne. Founds prop Mad + verb Tyrannizes.)
  • The Evil Prince (Politics / Villains) — https://allthetropes.org/wiki/The_Evil_Prince (The Lion King, Scar — a [+Pretender] [&Usurps] the [+Royalty] kin ahead of him; seizing the succession by force, lethal (Scar) or bloodless (Fire Lord Ozai), vs Klingon Promotion (the lethal seizure of a [+Ruler]). Founds prop Pretender; reuses the generalized [&Usurps]/[+Royalty].)
  • Vichy Earth (Politics / Worldbuilding) — https://allthetropes.org/wiki/Vichy_Earth (The Man in the High Castle — a [+Foreign] power [&Subjugates] a conquered world under collaborator rule; the not-native discriminator parts it from a homegrown Police State. Founds prop Foreign + verb Subjugates(target).)
  • Then Let Me Be Evil (Character Development / Alignment) — https://allthetropes.org/wiki/Then_Let_Me_Be_Evil (Wicked, Elphaba — a [+Maligned] outcast [&EmbracesEvil], accepting the label forced on them; villainy as self-fulfilling prophecy, vs a wound-driven Face Heel Turn. Founds prop Maligned + verb EmbracesEvil.)
  • Took a Level in Kindness (Character Development / Transformation) — https://allthetropes.org/wiki/Took_a_Level_in_Kindness (How the Grinch Stole Christmas, the Grinch — a [+Harsh] jerk [&Mellows] into [+Warm]; the virtue-axis sibling of Took a Level in Badass (competence), asserting a positive end-state as that sibling does ([+Formidable]). Founds prop Harsh/prop Warm + verb Mellows.)
  • Childhood Friend Romance (Relationships / Romance) — https://allthetropes.org/wiki/Childhood_Friend_Romance (The Lion King, Simba & Nala — two characters mutually [@ChildhoodBond]-ed [&Loves] each other; love founded on a shared past, vs Love at First Sight. Founds rel ChildhoodBond as a childhood-qualified refinement of the prelude's Bonded_To; reuses [&Loves].)
  • Recursive Canon (Metafiction) — https://allthetropes.org/wiki/Recursive_Canon (Supernatural, the "Supernatural" books — an in-world maker [&Recasts] the universe's real history into an [+InUniverseFiction] work, vs an unrelated Show Within a Show. Founds prop InUniverseFiction + verb Recasts(target).) Corpus 274 → 281 tropes; self-recognition steady at 281/281 (100%). (Capability-gap batch 4/5: balancing the frontier — Power → 22, Arc → 25, Bonds → 24, Meta → 20 — across the recognition scales.)
  • Deadly Decadent Court (Politics / Settings) — https://allthetropes.org/wiki/Deadly_Decadent_Court (A Game of Thrones, King's Landing — a [+Courtier] [&Intrigues] against a rival in a [+Decadent] court (a set); the whole-court web of schemers, vs a lone Evil Chancellor. Founds prop Courtier/prop Decadent + verb Intrigues(against).)
  • Villain with Good Publicity (Politics / Villains) — https://allthetropes.org/wiki/Villain_with_Good_Publicity (Superman, Lex Luthor — an [+Antagonist] [+Esteemed] [&Charms] the public; villainy shielded by public esteem, vs a private hypocrite. Founds prop Esteemed + verb Charms(audience).)
  • Taking the Bullet (Death Tropes / Sacrifice) — https://allthetropes.org/wiki/Taking_the_Bullet (The Bodyguard, Frank Farmer — a protector [&Intercepts] an attack for a beneficiary, taking the harm meant for them; the intercepted blow, vs a general Heroic Sacrifice. Founds verb Intercepts(beneficiary).)
  • Killed Off for Real (Death Tropes) — https://allthetropes.org/wiki/Killed_Off_for_Real (Psycho, Marion Crane — a [+Major] character [&Slays]-ed and left ![+Dead]! (absolute, immutable); the discriminator is the EPISTEMIC status — a death no resolve/retcon can undo — vs a Disney Death / Back from the Dead (a defeasible [+Dead]). No new verb; reuses [&Slays]/[+Major].)
  • Undying Loyalty (Friendship / Loyalty) — https://allthetropes.org/wiki/Undying_Loyalty (The Lord of the Rings, Samwise Gamgee — a [+Steadfast] character [&StandsBy] another through anything; loyalty as the unbreakable defining trait, vs an ally of convenience. Founds prop Steadfast + verb StandsBy(other).)
  • Heterosexual Life Partners (Friendship / Bonds) — https://allthetropes.org/wiki/Heterosexual_Life_Partners (Scrubs, J.D. & Turk — two SAME-gender [+Inseparable] friends mutually [@Bonded_To] who [&Cherishes] one another; couple-level closeness, platonic, vs Childhood Friend Romance (love). The matching-gender pairing is split across a [+Masculine] and a [+Feminine] rule (no single "same gender" predicate). Founds prop Inseparable + verb Cherishes(other); reuses [@Bonded_To].)
  • Redemption Quest (Character Development / Redemption) — https://allthetropes.org/wiki/Redemption_Quest (Red Dead Redemption, John Marston — a [+Penitent] character [&Quests] for a [+Redemptive] task offered as his path back; REFINES The Quest (reuses [&Quests(for)]) by the redemption tags, vs a plain Quest (no atonement) and a gradual Redemption Arc. Founds prop Penitent/prop Redemptive; reuses [&Quests].) Corpus 281 → 288 tropes; self-recognition steady at 288/288 (100%). (Capability-gap batch 5/5, final: lifting the thinnest spokes — Power → 24, Death → 25, Bonds → 26, Arc → 26.)
  • Painting the Medium (Metafiction) — https://allthetropes.org/wiki/Painting_the_Medium (Schindler's List, the girl in the red coat — within a work schindlers_list [%Film] (medium on the Essence facet), the author [&Employs] a [+MediumArtifact] (the red coat) to convey story; the author-side counterpart to Medium Awareness. Un-deferred and re-founded on the work skeleton (engine ≥ 0.6.0). Founds verb Employs(artifact); reuses [+MediumArtifact].) Corpus 288 → 289 tropes; selfcheck 289/289.
Changed
  • Klingon Promotion (Political / Power) — refined to the LETHAL usurpation. The rule now requires the claimant to both [&Usurps] (seize by force) AND [&Slays] the [+Ruler] holder. Paired with generalizing verb Usurps in power_dynamics from "seize by killing" to "seize a position by force" (depose, not necessarily kill), so The Evil Prince can reuse [&Usurps] for bloodless royal succession (Fire Lord Ozai), with the kill being the discriminator that keeps Klingon Promotion distinct. (Review of #59.)
  • The Stinger (Metafiction / Paratext) — re-founded on the work skeleton (engine ≥ 0.6.0). Was a [+PostCredits] prop on a stand-in obj scene + a char "film"; now the work is a first-class work iron_man [%Film] (medium on the Essence facet) and the scene occupies a post_credits slot (scene … @ post_credits). The slot placement is the discriminator; a char-agent [&Appends] event is the recall anchor (a pure slot edge alone does not recall). First adopter of the work/slot model; engine_min raised 0.4.1 → 0.6.0.
1.7.4
Added
  • The Wizard (Character Archetypes) — https://allthetropes.org/wiki/Wizard_Classic (The Tempest, Prospero — the wielder of arcane power, distinct from the Mentor by the casting itself. Founds the genre seed-vocabulary it reaches for, locally per the promotion model: prop Arcane and verb Casts(spell).)
  • Love Dodecahedron (Relationships / Romance) — https://allthetropes.org/wiki/Love_Dodecahedron (A Midsummer Night's Dream — the four-heart chain that does not close; strictly more tangled than the Love Triangle, with the four-distinct constraint enforced at recognition on engine ≥ 0.4.3). Corpus 194 → 196 tropes; self-recognition steady at 196/196 (100%).
  • An Aesop (Morality / Audience Reactions) — https://allthetropes.org/wiki/An_Aesop (Aesop's "The Tortoise and the Hare" — the author frames the tale's events as=moral and the audience is EDIFIED; a rhetoric-layer payoff distinct from Tear Jerker's pathos. Founds prop Lesson and state Edified locally per the promotion model.)
  • Big Good (Relationships / Cast) — https://allthetropes.org/wiki/Big_Good (Transformers, Optimus Prime vs. Megatron — the bright mirror of the Big Bad; the [+Leader] who [&Opposes] the [+Mastermind], the leadership discriminator parting it from a plain brave hero.)
  • Villain Protagonist (Character Roles / Villains) — https://allthetropes.org/wiki/Villain_Protagonist (Macbeth — the story's [+Central] driver who commits genuine villainy; the conjunction on one character, distinct from the rough Anti-Hero. Founds prop Villainous locally.)
  • Five-Man Band (Cast / Ensemble) — https://allthetropes.org/wiki/Category:Five-Man_Band (Gatchaman / G-Force — the first ENSEMBLE-structure trope: recognition rides the co-presence of five distinct complementary roles bound to one mission, with ten distinctness clauses enforced at recognition on engine ≥ 0.4.3. Founds the cast vocabulary prop Ensemble/SmartGuy/BigGuy/TheChick.) Corpus 196 → 200 tropes; self-recognition steady at 200/200 (100%).
  • Status Quo Is God (Narrative Devices) — https://allthetropes.org/wiki/Status_Quo_Is_God (Seinfeld, "no hugging, no learning" — the author imposes a return to the [+Baseline] premise, the Snap Back, so nothing carries over. Founds prop Baseline + state Restored.)
  • Failure Is the Only Option (Narrative Devices) — https://allthetropes.org/wiki/Failure_Is_the_Only_Option (Wile E. Coyote vs. the Road Runner — the hero pursues a [+SeriesGoal] the author denies for the premise's sake; the win that can never land. Founds prop SeriesGoal + state Thwarted.)
  • Idiot Ball (Plotting Devices) — https://allthetropes.org/wiki/Idiot_Ball (Prometheus, the biologist petting the alien — a [+Clever] character handed a plot-driven [&Blunders] lapse; recognized by the competence/foolishness contrast. Founds prop Clever + verb Blunders.)
  • Take a Third Option (Plotting Devices) — https://allthetropes.org/wiki/Take_a_Third_Option (Kirk and the Kobayashi Maru — the hero [&Rejected] the [+Binary] dilemma itself and [&Forges] an unorthodox third way; the rejection binds the fork on an event role so the discriminator can't float free. Founds prop Binary + verb Forges(option).) Corpus 200 → 204 tropes; self-recognition steady at 204/204 (100%).
  • Character Development (Characterization Tropes / Mechanics of Writing) — https://allthetropes.org/wiki/Character_Development (Pride and Prejudice, Elizabeth Bennet — the UMBRELLA transformation trope: a [+Dynamic] character [&Changes] by experience. The contrastive [+Dynamic] discriminator keeps the umbrella distinct from its axis-specific instances (Coming of Age / Took a Level in Badass / Redemption), which tag [+Innocent]/[+Weak] instead — verified non-over-firing both ways. Founds prop Dynamic + verb Changes.)
  • Title Drop (Title Tropes) — https://allthetropes.org/wiki/Title_Drop (A Streetcar Named Desire, Blanche DuBois — a character [&Utters] a [+Titular] phrase that is the work's own title; the title bound on the event role parts it from any other charged line. Founds prop Titular + verb Utters(phrase).)
  • Genre Savvy (Metafiction / Genre Awareness) — https://allthetropes.org/wiki/Genre_Savvy (Scream, Randy's rules — a [+GenreLiterate] character [&Anticipates] a [+Convention], genre-sourced foreknowledge; distinct from Breaking the Fourth Wall (no audience address) and Dramatic Irony (here the character knows). Founds prop GenreLiterate/prop Convention + verb Anticipates(convention).) Corpus 204 → 207 tropes; self-recognition steady at 207/207 (100%).
  • Damsel in Distress (Characters As Device / Love Interests) — https://allthetropes.org/wiki/Damsel_in_Distress (Perseus and Andromeda — a [+Captive] [+Helpless] character is the TARGET of a [&Rescues]; the distress tags bound on the rescue's target part it from the rescuer-side tropes (Big Damn Heroes / The Cavalry recognize the arrival) and from a rescue of an able ally. Founds prop Captive/prop Helpless + verb Rescues(target).)
  • Red Shirt (Death Tropes / Cast Filler) — https://allthetropes.org/wiki/Red_Shirt (Star Trek's landing party — an [+Expendable] nobody [&Slays]-ed to prove the menace; expendability bound on the victim parts it from every significant-death trope (loved one / willing hero / main). Founds prop Expendable/prop Lethal.)
  • Deadpan Snarker (Character Archetypes / Character Flaw Index) — https://allthetropes.org/wiki/Deadpan_Snarker (The Big Sleep, Philip Marlowe — a [+Sardonic] character [&Quips] a deflating wisecrack; the standing temperament anchored on the act of snarking (cf. Title Drop's act-by-utterance) parts it from a villain's Motive Rant / Breaking Speech. Founds prop Sardonic + verb Quips(at).) Corpus 207 → 210 tropes; self-recognition steady at 210/210 (100%).
  • The Quest (Plots) — https://allthetropes.org/wiki/The_Quest (Raiders of the Lost Ark, Indiana Jones — a [+Protagonist] [&Quests] for an [+Objective]; the sought goal bound on the journey event parts it from a bare Call to Adventure (a summons) and the inward Hero's Journey. Founds prop Objective + verb Quests(for).)
  • Disney Villain Death (Death Tropes / Evil Tropes) — https://allthetropes.org/wiki/Disney_Villain_Death (Beauty and the Beast, Gaston — an [+Antagonist] is the AGENT of a fatal [&Plummets] self-fall, not the target of a slaying, so the hero's hands stay clean; parts from the kill-tropes by manner and agent. Founds verb Plummets(from).)
  • What the Hell, Hero? (Morality / Heroism) — https://allthetropes.org/wiki/What_the_Hell,_Hero%3F (Avatar: The Last Airbender, Aang & Katara — an [+Ally] [&Rebukes] a [+Protagonist] who is [+Questionable]; the dedicated rebuke verb (a friend's moral callout, not a hostile [&Confronted] clash) keeps it off Conflict / The Climax and parts it from a villain's taunt. Founds prop Questionable/prop Ally + verb Rebukes(other).) Corpus 210 → 213 tropes; self-recognition steady at 213/213 (100%).
  • Bond Villain Stupidity (Villains / Stock Villain Behaviors) — https://allthetropes.org/wiki/Bond_Villain_Stupidity (Goldfinger's laser table — an [+Antagonist] [&Gloats] over a [+Protagonist] who is [+AtMercy] instead of finishing him, so the hero is [+Spared]; the at-mercy hero bound on the gloat parts it from a plain Motive Rant. Founds prop AtMercy + verb Gloats(target).)
  • Race Against the Clock (Plots / Plot Devices) — https://allthetropes.org/wiki/Race_Against_the_Clock (Around the World in Eighty Days, Phileas Fogg — a [+Protagonist] [&Races] against a [+Deadline]; the fixed-moment clock bound on the race parts it from a plain conflict or pursuit. Founds prop Deadline + verb Races(against).)
  • I Am Your Father (Reveal / Plot Twists) — https://allthetropes.org/wiki/Luke,_I_Am_Your_Father (The Empire Strikes Back, Vader & Luke — a [&Reveals] whose disclosed fact is tagged [+Parentage]; the bloodline content specializes it off the generic The Reveal (co-confirms with Dramatic_Irony as the whole reveal family does). Founds prop Parentage.) Corpus 213 → 216 tropes; self-recognition steady at 216/216 (100%).
Fixed
  • Self-recognition (§4b): event-anchored the last 4 bonds tropes so they confirm their own vignette, completing the arena (all 9) — power_of_friendship (Aids), i_gave_my_word (Honors), conflicting_loyalty (Commands), like_brother_and_sister (Aided + positive [+Family(with)], dropping the closed-world not() spine). Corpus self-recognition 152 → 156/194 (78% → 80%). (Redo of the closed #26 on the v0.4.1 engine; recall still rides an event, with imply param threading generalizing the relation/role coverage.)
  • Self-recognition (§4b): event-anchored recall + literal phase-2 coverage (STYLE §8) carried the remaining arenas — character roles, conflict, epistemic, death, power, structure — to full coverage: corpus self-recognition 156 → 194/194 (80% → 100%) on the v0.4.2 engine. Each trope re-founded below now recalls and confirms its own vignette. Pattern: anchor the rule on a narrative [&Verb] event that names an agent (recall keys on the agent), and assert the discriminating tags literally where the vignette prose already states them (coverage re-checks literally, not via derivation). Incidental fixes: de-duplicated the FaceHeelTurn rule (it had been defined in both face_heel_turn and heel_face_turn); promoted verb Forsakes to the prelude (ontology/verb_classes.trl already classed it Betray); named the agent on Reveals/Strikes where a rule keyed on them; fixed scene/event name collisions (the_edict, the_struggle). Precision: tightened Finishing_Move to the combination finisher (now requires the ally's [&Pins] setup, per its own title/laconic), clearing its ≥0.9 co-fires on solo-kill vignettes (David Versus Goliath, Achilles' Heel, Combat Pragmatist: 1.00 → 0.50). The Pincer_Attack over-fire — a recognition-time gap where $x != $z was honored at eval but not at shape recall — is resolved by engine cli-v0.4.3, which enforces binding-inequality at recognition: its ≥0.9 co-fires on single-attacker vignettes (David Versus Goliath, Achilles' Heel, Combat Pragmatist, Determinator, You Shall Not Pass, Last Stand, Zerg Rush) are gone, while it still self-confirms its own two-attacker vignette and selfcheck holds 194/194. Any remaining ≥0.9 overlaps are defensible kindred tropes (foil/gambit, lancer/sidekick, trap/feint, redemption/sacrifice, last-stand/you-shall-not-pass).
Changed
1.7.3
Changed
  • Prelude collective-agent ontology (TIER 5/16, prelude @version 1.16) — wire the already-ratified collective vocabulary into a hierarchy: imply Faction -> [Collective], imply Institution -> [Collective], and a new prop Nation[Collective, Authority] (the "what is a country" case). So a rule keyed on the broad [+Collective] now recognizes any [+Faction]/[+Institution]/[+Nation] entity (recognition coverage honors the imply on engine ≥ 0.4.2; parses fine on 0.4.1, so engine_min is unchanged). Nation only; Movement/Organization left unfounded until a trope reaches for them (promotion model). [+Authority] stays orthogonal (an individual holds it too). No trope changed; selfcheck steady 152/194.
  • STYLE §1 — "Choosing the entity kind" — new guidance: pick char/set/obj/concept by what the entity *does* (agency / membership / inertness / idea). Organizations, factions, and countries are a char carrying [+Collective]/[+Faction]/[+Nation] — never a new entity kind (composition over classification). "What is a country?" → choose the facet (char [+Nation] / set / concept), mirroring the realm: char|set|concept typing.
1.7.2
Changed
  • Prelude opposition/alliance valence (TIER 7, prelude @version 1.15) — sharpened-bond relations now thread the counterparty into the weaker base relation AND stamp the affective charge: Adversary_Of, Enemy_Of, Nemesis_Of[Rival_Of(other), Hostile]; Ally_Of[Friendly]. +2 relations (Enemy_Of, Nemesis_Of), +2 valence props (Hostile, Friendly). The three hostile relations are connotation-distinct author-facing names that normalize to the same core (a generic Rival_Of rule fires off any of them); a bare [+Hostile]/[+Friendly] still works when the counterparty is unnamed. Adversary_Of (previously a bare base, unused in the corpus) gains the imply with no behavior change. Requires engine ≥ 0.4.1.
  • Prelude royalty & rank (TIER 16, prelude @version 1.14) — promote sovereign/noble rank from flat monadic props to relations over a realm, the threading pattern applied to governance. New base relations Rules(realm) and Heir_To(realm) bridge to the monadic standing (Rules ⟹ [+Ruler], Heir_To ⟹ [+Heir]), so a generic ruler/heir rule fires off any rank. Rank relations thread the realm into the base relation and stamp standing + gender: King/Queen, Emperor/Empress, Lord/Lady, Duke/Duchess (→ Rules + Royalty/Noble + gender) and Prince/Princess (→ Heir_To + Royalty + gender — royal by birth, not ruling). +12 relations, +2 props (Ruler, Noble; founds the heavily-used inline [+Ruler]). realm is char|set|concept (a territory, a personified throne/empire, or an abstract polity/cause). A bare [+Ruler] [+Royalty] still works when the realm is unnamed (the corpus default, incl. collective rulers). Requires engine ≥ 0.4.1.
  • Prelude kinship lattice + divine parentage (TIER 6 / TIER 17, prelude @version 1.13) — extend the threading pattern to the rest of the kin lattice and to myth, all single parameterized implys: - Kinship (→ conservative bases, no blood-parentage claimed where there is none): Nephew/Niece (→ Kin_Of + gender), Cousin (→ Kin_Of, ungendered), the six in-laws (→ Kin_Of + gender), Godfather/Godmother and Stepfather/Stepmother (→ Guardian_Of + gender), Stepson/Stepdaughter (→ Ward_Of + gender), Stepbrother/Stepsister (→ Kin_Of + gender). +17 relations. - Mythological: Demigod_Of (→ Child_Of + Divine + Mortal_Born), Scion_Of (→ Descendant_Of + Divine), Avatar_Of (→ Emanation_Of + Divine). +3 relations. The divine entity threads into the base relation; the holder is stamped divine. (Heracles, Perseus, an avatar of a god, …) - Exercises the renamed-slot thread form (Guardian_Of(ward=godchild), Descendant_Of(anc=ancestor), Emanation_Of(source=deity)) where a base relation's param name differs from the head param.
  • Prelude gendered kinship (TIER 6) — Father/Mother, Son/Daughter, Brother/Sister, Husband/Wife, Grandfather/Grandmother, Uncle/Aunt: each one parameterized imply (threading) that refines its base relation (the bound other/child/… flows through) and tags the holder's gender (Masculine/Feminine). Replaces a derivation rule per refinement. Requires engine ≥ 0.4.1 (engine_min bumped; prelude @version 1.12).
Fixed
  • Self-recognition (§4b): anchored 5 bonds tropes' recognition on an EVENT role so they confirm their own vignette — found_family (Accepts), love_triangle / star_crossed_lovers / unrequited_love (Loves), sibling_rivalry (Challenged). Replaced unrequited_love's closed-world not([~Loves]) with positive evidence (the beloved loves a third + the lover shown [+Pining]), which also removed an over-match on star_crossed_lovers. Per review: found_family now models acceptance + recognition (mutual [@Bonded_To] + an Accepts event, not mere protection), and sibling_rivalry keeps the bidirectional kin+rival bond (both siblings) alongside the event anchor. Corpus self-recognition 147 → 152/194 (76% → 78%).
Changed
  • Founded verb Accepts(other) (taking another in as one's own — belonging) in prelude.trl (→ 1.11), for found-family-style bonds where acceptance, not protection, is the defining act.
  • Founded the remaining unfounded tail in prelude.trl (→ 1.10): props Betrayer, Leader, Sympathetic, TrueRescue, RealPerson, Pass, Field, City; states Triumphant, Refused, Reluctant, Corrupted, CrossedTheHorizon, Status_Numb; verbs Recalls, Predicts, Atones. Resolves ~35 more inline-invented refs across the arc, conflict, epistemic, non-fiction & character tropes (corpus inline total now 204, down from 291 at the start of the drive-down). What remains is the ambiguous pair Plain/Faithful (double meanings, left inline) plus a tail of genuinely one-off flavor tags. No trope changed; selfcheck steady at 147/194.
  • Founded the diegetic / narration / narrative-role vocabulary in prelude.trl (→ 1.9): props Narrator, Spectator, Canon, RealEvent, Detective, Invincible, Oppressive, Vehicle, Treacherous(toward), Family(with); relations Bonded_To/Sundered_From; verb Wakes. Resolves ~32 previously inline-invented refs across the diegetic, non-fiction, epistemic, and bonds tropes. No trope changed; selfcheck steady at 147/194.
  • Founded the Chekhov's-Gun planting/payoff vocabulary in prelude.trl (→ 1.8): Payoff(item), Introduces, Uses, Fired, Pivotal, Mundane, Endgame. Resolves ~20 previously inline-invented refs across the chekhovs_* family and foreshadowing/the_reveal/karma_houdini. No trope changed; selfcheck steady at 147/194.
1.7.0
Added
  • Initial published corpus — 191 tropes across the character, conflict, epistemic, structure, rhetoric, and relationship domains, plus the prelude, ontology, concept library, and modules.
  • Founded the reused trope super-types as prelude TIER-0 attrs (the founding sweep).
  • Public-domain dedication (CC0-1.0); served at https://corpus.tropelang.com.

Engine the analysis core (vendored into the editor + embed)

0.33.4
Fixed
  • Partition hygiene now reaches every reader. The label-namespace check and validate --corpus's own corpus-level notes — a partition label colliding with real vocabulary, a contradictory partition — were computed but surfaced only to an embedder calling the library directly, and were silent for every human through the CLI, LSP, and WASM. All five loaders now report the same notes on the same channel.
0.33.2
Added
  • Exclusive partitions now resolve — the exactly-one half of the feature. In a total (!) partition, eliminating members determines the rest: [-Loyalist] in a two-member Allegiance! derives [+Traitor], the last candidate standing. A hedged negative determines nothing, and negating every member is reported as a contradiction rather than a derivation.
0.33.1
Added
  • A trope can demand that a partition be resolved. A rule that anchors the partition label — when: char $p [+Allegiance!] — matches only once the entity is settled on some member: satisfied by a present member, unresolved by a hedged one, never refuted by mere absence. A chart that asserts the label itself is stripped and warned about, because the label is not a fact.
0.33.0
Added
  • A partition label may be anchored, not just banned. An exclusive name is still a label no chart may assert, but a rule may now reference it at an anchor position — the grammar decision behind the resolution demand above.
  • validate --corpus flags double-membership. A chart asserting two members of one partition on one entity states a contradiction the partition rules out; reported as a warning, never an error. Nested taxonomy pairs, where one member contains the other, are exempt.
0.32.1
Changed
  • Recognition closes the derivation fixpoint before matching. shape / suggest / scaffold now run the corpus's forward rules over the chart and match on the result, so a charted measurement satisfies an anchor on the sign it derives — a [^Temp >= 38] reading counts as [=Febrile]. This is the closure predict has always used, so recognition and planning read one fact set. Strictly monotone on both shipped corpora — hits added, none removed.
0.32.0
Added
  • Taxonomy — a declared is-a graph recognition reads. A braced axis after a + tag — prop Swordsman [+Warrior{Archetype}] — declares a subsumption edge, so a chart carrying only its most specific tag satisfies an anchor gated on any ancestor. Directional (a descendant satisfies an ancestor, never the reverse) and a DAG (multiple parents allowed). Kept out of eval, drams, and the planning index — it is vocabulary structure, never matched — and a plain [+Warrior] is unchanged, so no existing corpus shifts meaning.
  • An advisory note for partitions that contradict a taxonomy. A partition listing a prop beside one of its own ancestors claims two things exclude each other when one contains the other; the engine names each such nested pair at load. Advisory, never gating.
0.31.2
Fixed
  • Every loader agrees on what a trope is. The disk loader classified tropes by walking a <root>/tropes directory, while the parse-skip loaders (.trlb / JSON bags / WASM) classified by path predicate (any tropes/ segment) — so a *nested* or *layered* trope tree (a shelf under psychiatric/tropes/, an overlay under overlay/tropes/) was a trope to four loaders and a library to the fifth, making the same files two different corpora depending on how they loaded. All five now use one predicate. On the shipped corpora: the standard corpus is unchanged; the med corpus grows to 2,273 shapes, and recognition now confirms the tropes drams was already counting.
0.31.1
Fixed
  • drams scores the corpus that was actually composed. It used to re-parse a corpus root directory through a private traversal — a fourth view alongside recognition, planning, and the loaders — so it fired a redactsed rule (crediting coverage on a withdrawn route), missed a rule nested in an Ambiguity / Resolve / Retcon, and could not express a layered (--corpus base --corpus layer) corpus at all. It now reads its rules from the composed context, closing all four divergences. Readings move only where they were wrong — chiefly nested shelf trees a <root>/tropes walk could never see.
Added
  • Corpus tiers are first-class (Trope / Lib / Base), classified by path segment so they hold for nested and layered trees. The planning index now records a rule's tier *per declaration*, not per name — so a rule the standard corpus declares in both a module and a trope no longer has the module's firing miscredited as trope coverage.
0.31.0
Changed
  • One traversal now decides where a statement can appear. The two hand-maintained recursion lists — what the planning index contains (what a redacts can remove) and whether an extends/redacts takes effect — are unified into a single exhaustive definition, closing a drift that was invisible from both sides. This widens recognition slightly: a rule nested inside an Ambiguity / Resolve / Retcon or a scene { … } block now compiles to a recognition shape where before it did neither. Both shipped corpora are byte-identical (neither contains such a rule), but a corpus that does will see the new shapes.
0.30.0
Added
  • Accretive layering — extends "stem" / redacts RuleName. A layer can now add a rule to (or withdraw one from) an existing trope without forking its whole file. A file that opens with extends "influenza" has its rules compiled *into* the base trope with that stem, inheriting the base's header metadata (category, prevalence prior) — so the added route counts as the same trope, not a lookalike with its own row. redacts RuleName withdraws a single named rule (validated: the name must be unambiguous). Crucially, an accretion re-merges against whatever base is composed, so upstream edits to the base keep arriving — unlike a strike-plus-fork, which freezes. The target is the bare stem (corpus identity), not a path.
Changed
  • .trlb bundles decode across a version range, not one exact version. decode now accepts MIN_READABLE_VERSION..=FORMAT_VERSION instead of an exact match, so a format bump no longer invalidates every published bundle. Every bump to date is either an additive node tag or a version-gated trailing field, so older payloads read correctly; a *future* payload is still refused (and now reports "regenerate the bundle" vs. "upgrade the engine" distinctly). Format 6 → 7 (extends / redacts); existing bundles keep working, no republish required. Publishers shipping a v7 bundle should set engine_min = "0.30.0" so an older CLI reports the version need cleanly.
0.29.0
Added
  • Binding identity — ?=, and two reports that were silently swallowed. ?= ("may be the same entity") is a no-op constraint in a when:-clause comparison: unconstrained already means may-be-equal, so it changes no match — it lets an author *state* that a coincidental collision is intended, suppressing the report below. A match that binds two distinct vars to the same entity is now accepted but reported (ambiguous_bindings); only == / ?= suppress it, while != (which asserts the two must differ) still flags a collision. And a $var may no longer be overloaded with two kinds (char $x here, evt $x there) — previously the second declaration was discarded silently; it is now a static error. Zero migration across the corpora (2,706 files, 0 new diagnostics).
0.28.8
Changed
  • A recognition & prediction performance pass (0.27.0 → 0.28.8). Recognition now applies the report floor *before* materializing a result (recognize_above) and reuses scratch across boards, so nothing is built for a match about to be discarded. Cumulative on a clinical corpus: suggest −69% allocations (2.24 → 1.63 ms), predict --fast −63%, predict (through-derivation) −57%, and building the editor workspace −64% (164 → 58 ms). Output is byte-for-byte identical — same tropes, order, confidences, and bindings.
0.27.0
Added
  • exclusive — declared partitions of mutually-exclusive tags. A vocab-level statement, sibling to imply: exclusive Allegiance -> [Loyalist, Traitor, Neutral] declares that at most one member holds per entity. A trailing ! on the name (exclusive Allegiance! -> […]) means *exactly* one. It is a constraint, engine-enforced at recognition and outside the eval fixpoint — so a trope's necessary anchor on one member is now refuted (not merely absent) when the bound entity carries a sibling member: a [+Traitor] character actively rules out a trope that needs [+Loyalist!]. Recognition surfaces this as refutedBy: "mutualExclusion" with the excluding sibling and the partition label. New grammar keyword (.trlb format 6); the partition name is a label, never asserted on an entity.
0.26.0
Changed
  • **scaffold's ruled-out hypotheses distinguish *refuted* from *unobserved*. Each eliminated candidate now carries structured detail instead of one opaque string: refuted (a chart fact contradicts a needed anchor — a kind mismatch, or a charted pertinent negative [-anchor] — a sound exclusion a consumer can prune) vs. absent** (the anchor is simply unobserved and the dx is still live). A probabilistic consumer can finally tell "evidence of absence" from "absence of evidence."
Fixed
  • A charted [-Tag] retracts in the recognition/scoring projection. The atemporal state projection had counted a [-Tag] pertinent negative as *present*, so it could spuriously satisfy a positive requirement; it is now applied as a document-order retraction, matching the eval fact-store.
0.25.3
Changed
  • frontier resolves before / after against the chart's ~> clock. A temporal discriminator's order is now checked three-valued against the chart's partial order: satisfied → drops out; contradicted (the reverse holds, or the two share a tick) → a new Unsatisfiable node that rules the derivation out (reachable: no); undecided → an Ordering leaf to acquire. So a fever-then-rash discriminator whose chart shows the reverse is now correctly ruled out at frontier time, regardless of timeline marker granularity.
0.25.1
Added
  • scaffold — the reasoning structure behind a differential. A new export (scaffold / scaffold_in; CLI tropelang scaffold) that hands a probabilistic consumer (a game belief layer, an LLM, a factor-graph) the deterministic structure it builds a board over, rather than a flattened posterior: the live candidates with their AND/OR frontier dependency trees (*w weights as unmultiplied slots), the hard-eliminated ruledOut set with reasons, relevance (which candidates each observation moves), and the named abstentions frontier couldn't plan. The engine's own predict --bayesian posterior is demoted to a labeled reference — build the board from scaffold and supply your own priors.
0.25.0
Added
  • frontier plans the analyzable non-Horn rule bodies as structured leaves. count, before/after, and not(...) when-bodies used to collapse to reachable: unknown; they now walk into acquirable leaves — Cardinality (acquire N matches), Ordering (a partial-order constraint), and NegatedFact (confirm a pertinent negative). The genuinely un-analyzable still abstain by name (temporal windows, not(present X), recursion) rather than guessing.
0.24.11
Fixed
  • bundle publishes the composed corpus, not the raw directory tree. On a multi-corpus trl/ root (a base plus focused layers), bundle swept the siblings' tropes into the base's bundle, producing duplicate stems that the loader refuses — so the published bundle could not be loaded at all. It now emits the manifest's effective trope set (base chain + overrides + strikes at their position) plus support files, skipping subtrees owned by another corpus (reported, not silent). A single-corpus root is byte-identical (the standard corpus's corpus.json sha is unchanged); multi-corpus roots change sha and need republishing.
0.24.10
Changed
  • Strikes are ordered, per-layer state changes — not a global end-of-compose filter. A layer's strikes now apply to everything accumulated before it, then that layer's own entries land, so a mid-chain strike can no longer delete a later layer's replacement and index.trl agrees with the runtime corpus. compose(refs, strikes) accepts positional strikes ([["a"],[],["b"]], one list per ref in order); a flat ["a","b"] still works, read as the last layer's strikes. selfcheck also now walks the final composed state rather than the top layer's directory.
0.24.9
Fixed
  • selfcheck scores a corpus against itself. It assembled from the manifest but recognized against the default file://trl, so a focused or layered corpus was scored against a corpus that did not contain its tropes (accidentally right only for a root whose tropes sit at trl/tropes). It now derives its context from the manifest — the corpus's own root over its base chain — and reports *why* each miss missed (the top hit), distinguishing recognized-as-another-trope / below-the-Confirmed-tier / nothing-recognized. On tropelang-med: sports-medicine 4/28 → 28/28, psychiatric 0/67 → 67/67.
0.24.8
Fixed
  • A trope's identity is its bare file stem on every load path. The parse-skip loader (.trlb bundles, JSON bags, and WASM — the path the editor and embed load through) passed the full corpus path where the disk loader passed the stem, so the same corpus reported pyelonephritis or trl/tropes/…/pyelonephritis.trl depending only on how it was loaded, while corpus() and eval_buffer kept using the stem. All load paths now report the stem, so recognition, explain, the catalog, and the selfcheck oracle agree on one identifier.
0.24.7
Fixed
  • Editor-workspace exports no longer trap on wasm. A profiler read the platform clock unconditionally (outside its TROPELANG_PROFILE guard), and that call panics on wasm32 — so every export that builds an editor workspace (validate, corpus, glossary, define, eval_buffer) trapped with RuntimeError: unreachable, while recognition-only verbs kept working. The clock is now read only when profiling is on. Regressed in 0.23.1; a runtime wasm smoke test now exercises every internal path in CI.
Added
  • JSON text bags are first-class composition inputs. load_layer_json([{path,source}]) mints a content-addressed layer from a corpus.json bag — the same standing .trlb has — so a corpus composes, layers, and strikes whether it arrives as JSON or binary (identical entries intern to one layer). The editor, the embed, and this site's build now load the corpus through load_layer_jsoncomposeactivate, off the deprecated load_corpus.
0.24.6
Fixed
  • The event-locus var is now bound in every recognition path. A coverage var that is also a pattern's group key (the dyadic/relational shape, char $b [=X] [&Rel(other=$a)]) was bound by explain but not by the two scoring paths — so the same trope could false-positive at confidence 1.00 with its anchor absent, or silently return zero recognitions, and suggest disagreed with shape --why on identical input. All paths now bind the locus var and re-score. Recognition bindings now include the locus var (e.g. $e=e1); confidences change only where an anchor sits on that var — where it is now actually enforced. A previously-suggested *9-weight workaround was unsound (it traded the false negative for the false positive); corpora that adopted it should revert to the mark.
  • A declaration outranks a same-named scope label. An evt walk_off […] nested inside a scene walk_off { … } no longer misreports its kind as scene. Both standard and med corpora self-recognize at 100%.
0.24.4
Changed
  • Recognition allocation no longer scales with corpus × narrative. Recall previously allocated in proportion to the product of corpus size and log length; the cross term is now eliminated. On a large corpus over a 64-event chart, suggest allocations drop −84%, predict --fast −92%, and predict --bayesian −94% (part of the 0.24.1–0.24.5 symbol-interning arc). Output is byte-for-byte identical; latency improves modestly (the cost is the scan, not allocation).
0.24.3
Changed
  • predict --bayesian is ~70% faster. The posterior path no longer builds the full --why provenance it then discards; a dedicated scoring pass returns only what the projection reads. On a large corpus: −70% time, −83% allocations — it was the slowest reasoning verb and is now faster than predict --fast. The [=Sign*w] weights are pre-parsed at compile time; output is byte-for-byte identical.
0.24.0
Changed
  • The S3 eval fixpoint runs on interned symbols. Forward-chaining now compares word-sized integers and reuses one binding buffer per run instead of allocating a string-owning fact per derivation. On a large corpus, predict (through-derivation) is −48% wall-time / −56% allocations; the eval-derivation portion specifically is −97% allocations. Output is byte-for-byte identical.
  • One version across the toolchain. tropelang-lsp joins the shared engine version (→ 0.24.0), so the core, WASM module, CLI, and language server now all carry one number.
0.23.1
Changed
  • Recognition-only compose is ~8× faster. Composing a corpus now builds just the recognition context (~14 ms) rather than the full editor workspace (~165 ms); the editor indexes build lazily on first editor-feature use. A single unlayered corpus with no strikes skips the merge entirely. Editor features are unaffected.
0.23.0
Added
  • WASM corpus composition (spec 26) — the engine can hold multiple corpora at once. Corpus loading is split into explicit stages that compose exactly like the CLI: load_layer(bytes) decodes a .trlb into a content-addressed layer; compose(refs, strikes) merges an ordered layer list (later-wins-by-stem) into an immutable, cached instance; activate(instance) selects it. New per-instance eval — suggest_in / suggest_local_in / explain_in / frontier_in / predict_in / predict_bayesian_in — runs against a named instance without touching the active one (A/B two compositions, per-document corpora), alongside a registry (list_layers / list_instances / drop_layer / drop_instance). The older load_corpus / load_corpus_trlb / layer_corpus_trlb remain, reimplemented over the new machinery.
0.22.4
Fixed
  • The WASM/editor loader now recognizes a layer bundle's tropes. A layer or fork corpus nests its tropes under its own subtree (trl/<name>/tropes/…); the editor's parse-skip loader had required the canonical trl/tropes/ prefix, so it loaded an expansion pack but filed its tropes as plain vocabulary and suggest returned zero. Both loaders now share one segment-matched classifier, so the CLI and the editor agree on what a trope is — unblocking the load-base-plus-layer workflow for any expansion pack.
0.22.2
Changed
  • Reasoning-mode quality pass — no API or grammar change. validate now lints evidence-weight placement: it warns on a weight applied to a removal ([-Sign*3], which has no effect) and on a non-positive weight (*0, which annihilates the diagnosis in predict --bayesian) — advisory, and a weight on a ?-bonus stays allowed. frontier skips the corpus-index clone when the buffer declares no rules of its own, querying the shared index in place. Internally the 0.9 / 0.5 coverage floors are now shared constants across suggest and the planning board.
0.22.1
Fixed
  • frontier resolves an eponymous sign to its observable leaf. When a diagnosis is named after its own pathognomonic sign, one token names both the observable state and the recognized diagnosis. Backward-chaining hit that token in the rule body, matched the goal, and tripped the recursion guard — dropping the single most useful observation from the worklist. A [=X] whose X is a declared observable state is now treated as a leaf (acquire the sign) even when a rule also concludes [+X], since the = sigil marks observation, not derivation. goalKnown also now recognizes declared state vocabulary, so an observable state is not flagged as a typo.
0.22.0
Added
  • predict --bayesian — a posterior over the differential. The reasoning mode projects a normalized posterior — P(dx | chart) ∝ prior · ∏ present-anchor weights — and scores each candidate observation by its value of information (how much it sharpens the posterior). It reads the [=Sign*w] weights as likelihood ratios and the @prevalence tier as the prior; a diagnosis ruled out by a missing necessary anchor is excluded from the differential. See the engine reference.
0.21.0
Added
  • **[=Sign*w] per-anchor evidence weights.** A tag can carry a trailing evidence weight — a relative likelihood ratio, default 1 — [=Pyuria*9], composing with the marks as [=Wounded!*3]. It is recognition-neutral (coverage and confidence ignore it); it only informs the planning verbs (frontier / predict). New syntax → a corpus using it needs engine ≥ 0.21.0.
0.20.0
Changed
  • Planning cleanups. frontier now flags an unknown goal (goalKnown: false — a likely typo, distinct from a genuinely unsurfaced diagnosis); corpus-wide imply is collected into the planning substrate; [-Tag] retractions are honored when reading a chart; and predict no longer stamps observations onto event entities, avoiding spurious bindings.
0.19.0
Added
  • predict — forward-project the next observation. For each candidate observation, it projects the effect on the recognition board and ranks by information gain, so the most useful test leads. The default feeds each observation through evaluation's fixpoint (so one that completes a derived anchor counts); --fast does a single-hop re-score. See the engine reference.
0.18.0
Added
  • frontier — backward-chain a goal to its observable frontier. Given a goal — a diagnosis, an outcome, any rule — it chains the goal's when: body down to the recursive AND/OR set of observable facts whose acquisition would prove it, recursing through derived anchors to the real leaves and reporting each with its role (necessary / bonus / plain). Non-Horn branches report reachable: unknown, naming the blocking construct rather than guessing. See the engine reference.
0.17.3
Fixed
  • The base-rate prior orders candidates without re-tiering them. The 0.16.1 ranking prior was multiplied into recognition confidence *before* the Confirmed/Possible tier check, which could demote a rare trope's own full-coverage vignette below the Confirmed bar. Coverage and base rate are now cleanly separated: confidence and the Confirmed/Possible tier are the coverage score alone (prior-independent), so a full-coverage vignette always confirms regardless of prevalence; the prior enters only as the within-tier sort key (candidates ordered by coverage × prior, so a common condition still leads a rare one at equal coverage). No new flag, no grammar change.
0.17.2
Changed
  • wasm build fix + first npm publish since 0.15.1. A wasm-opt validation error (nontrapping-float-to-int, from a float→int cast derive introduced) had blocked the wasm release for 0.16.x–0.17.1; fixed with the right wasm-opt flag. 0.17.2 is functionally identical to 0.17.1 — the version-only bump that cleared the failed tag. No engine-behavior change.
0.17.1
Added
  • metric corpus reductions. A corpus can declare metric total = sum(field where field > 0) — a read-only aggregate (sum / count / avg / min / max) over declared fields with a boolean filter, surfaced by the CLI's tropelang metrics. Deliberately not a query language — reductions over declared fields, nothing more. New syntax → a corpus using it needs engine ≥ 0.17.1.
0.17.0
Added
  • [+Tag?] presence-only bonus facets. A trailing ? inside a tag marks a facet as supporting evidence: it lifts recognition confidence when present and is ignored when absent (raise-when-present, neutral-when-absent), sitting outside the required denominator — for a risk factor that should never penalize its own absence. Opt-in, local to the tag, inert to eval. New syntax; mutually exclusive with the ! necessary mark.
0.16.2
Added
  • derive computed header fields. derive prevalence: number = base * 2 fills a header metadata value from a small arithmetic expression when no literal is authored (precedence: an inline literal wins over a derived expression, which wins over absent). Feeds the base-rate ranking prior. New syntax.
0.16.1
Added
  • Base-rate ranking prior. A corpus-declared, domain-neutral prior (harvested last-wins from corpus header metadata) nudges recognition ranking by base rate. A recommendation-layer signal only — applied by suggest and explain / --why; eval and what-is-recognized are untouched.
0.16.0
Added
  • [+Tag!] necessary/anchor mark. A trailing ! inside a tag makes a when: facet a necessary discriminator: if a matching story leaves it unmatched, the candidate is gated — confidence capped below the report floor — so a trope whose distinctive anchor is absent drops out of the differential rather than coasting on demographic / scaffolding facets. Opt-in, local to the tag, inert to eval. The mark sits inside the bracket, so it never collides with the leading epistemic markers. New syntax.
0.15.1
Fixed
  • course=null no longer draws a spurious "undeclared reference" warning. null — the omitted-value sentinel for an optional ?: / | null param — is a language literal, not an entity reference, so the structural validator now exempts it alongside true / false. The corpus lint already treated it as the sanctioned "omitted" value; the two passes now agree. A fast-follow to the 0.15.0 null-slot feature.
0.15.0
Added
  • ?: optional-typed signature params. A verb / rel / prop param can now be typed but optional: course?: concept [+Course] means the value is domain-checked when present, yet a call that omits it still matches. It's the ergonomic spelling of the union course: concept | null — the | null member is what exempts a param from the otherwise-required role. This unblocks an overloaded verb (one call form supplies course=, another only finding=) without splitting it in two. New syntax, so a corpus that uses ?: needs engine ≥ 0.15.0; corpora that don't are unaffected. It canonicalizes to the | null form on serialize (same AST), and the corpus lint honors it — course= values stay checked while course-less calls pass. See the grammar reference.
Changed
  • Self-documenting engine API. Every WASM export now carries a doc comment that rides into tropelang_wasm.d.ts as JSDoc, so the editor's hover over an engine function shows its purpose and JSON shape. Docs only — no engine-behavior change.
0.14.0
Added
  • Corpus-aware validation (validate --corpus). validate can now check a file against the loaded corpus vocabulary, not just its syntax: an invented or mis-sigiled facet (a [+Monoarticular] where the corpus declares [=Monoarticular]) is flagged with kind-ranked "did you mean" suggestions and a quick-fix, and a concept-typed param handed a value that isn't a declared concept (or is out of its group) is warned. --strict exits non-zero for CI; corpus-resolvable names are never false-flagged. A CLI surface — the editor's buffer validate is unchanged.
0.13.1
Changed
  • The core now ships on npm. The analysis core is published as the prebuilt @kelnishi/tropelang-wasm module — the site vendors it from there rather than building it from the (private) Rust source. Release-hardened along the way: wasm-opt -Oz, stripped of the name section and toolchain fingerprint, and built with no local paths, so the shipped module is smaller and carries no source detail. No engine-behavior change — the same core, distributed as a binary artifact.
0.13.0
Added
  • Recognition-derived metadata (CLI). Beyond a trope's authored header (0.11.0), the engine can now surface facts it derives from the imply graph — implies (the transitive imply closure of the prop a rule asserts) and attrs (the attr-typed subset, the qualifier / acuity layer). Retroactive across every trope, no authoring, inert to matching. Available through the CLI's shape / suggest --emit; shape --why gains a per-hit ⇒ implies: … line.
0.12.0
Added
  • .trlb — a binary corpus format. A corpus can now ship as corpus.trlb: each file's already-parsed AST plus its header metadata, so an engine, game, or editor loads it without lexing or parsing. It's the fast-load peer of the JSON text bundle — ~2.7× smaller uncompressed on the standard corpus, and it decodes straight into structs. Recognition and metadata are byte-for-byte identical to a JSON load.
  • New load entry points. The vendored core gains load_corpus_trlb(bytes) and layer_corpus_trlb(bytes, strikes) for base + expansion-pack + redaction loads from a binary bundle (the first Uint8Array entry points; decompression stays in JS).
0.11.0
Added
  • Header-metadata pass-through. A trope file's leading // comment block is now surfaced *alongside* each recognition, so a tool never has to re-parse files the engine already read. A // @name value line is a tag (value kept verbatim; repeat a name for a list), the block's non-tag prose is captured as a reserved description, and // @laconic <one line> is the TVTropes-style summary. Only the *leading* block counts — a comment trailing a facet or inside a rule is annotation, never metadata.
  • Inert to matching. Metadata never gates, scores, or changes what is recognized — recognition and eval are byte-for-byte identical whether header tags are present or absent. The header is captured once at corpus-load, so it reaches the filesystem, bundle, and in-editor (WASM) paths identically; it is empty for buffer-local rules and headerless files.
  • In the editor. suggest / explain records gain a meta object (all tags + description). The editor surfaces the provenance in the Recognitions panel, the info console, and the hover callout — a recognized trope's @source (linkified), @trope cross-references, and any domain tag a corpus invents (@icd11, @occurrence, …) — grouped by the source line, with the one-line laconic staying the prominent gloss at the top.
  • In the CLI. shape / suggest gain --emit <fields> (comma-joined, repeatable) and --format json|tsv — one record per hit, only the requested header fields under meta. No --emit leaves today's human output unchanged.
0.10.0
Added
  • @@ auto — derive the story clock from presentation order. Some works are chronological *by genre contract* — a clinical chart, a case file, a captain's log — where the beat order simply *is* the story order, and the relative order of two events is a live discriminator (fever *then* rash reads measles; rash *at* defervescence reads roseola). Until now such a work had to emit boilerplate: a linear chron t1 ~> t2 ~> … plus a @@ stamp on every scope. @@ auto is one top-level line that *declares* the two clocks equal — the engine synthesizes an internal linear spine (one marker per presentation tick) and every before / after query reads it exactly as a hand-written chron would.
  • Loud, never assumed. The directive is opt-in — story-time still never defaults to presentation order silently (that would corrupt a *Memento*). Mixing @@ auto with *any* explicit story-time construct (chron, a named @@ stamp or anchor, a ~~ edge) is a validation error: a work declares its clock or derives it, never both. auto becomes a reserved chron-marker name.
  • Same-tick co-occurrence is now expressible. Because every fact is stamped, the idiom not(before($a, $b)) not(after($a, $b)) reads as genuine *same-tick co-occurrence* under @@ auto (both events in one beat) — a closed-world reading that a partial hand-declared clock can't give.
  • Fully backward compatible: the same file *without* @@ auto behaves byte-identically to before — no clock, order predicates three-valued *unknown*, order-free tropes unaffected. The story lens (story()) over an @@ auto work is the identity.
0.9.0
Added
  • Host-agnostic IDE backend + a language server. The editor smarts the analysis core already powered — completion, hover glosses, inlay hints, signature help, go-to-definition — were hoisted into a host-agnostic module in the core and now back a standalone tropelang-lsp language server and a VS Code extension, so a native editor gets the *same* recognition-aware assistance the web editor has. The vendored WASM exports are behavior-identical on the wire — the web editor and @tropelang/embed see no change from this release; it's the same logic, now shared rather than duplicated.
0.8.1
Fixed
  • Story-time order now gates recognition, not just evaluation. 0.8.0 honored before(a, b) / after(a, b) when *evaluating* a story but silently dropped them during *recognition* (the suggest / shape pass) — so a trope keyed on in-world ordering matched the same whether the chron order held, was reversed, or was absent, and over-fired. Recognition now enforces story-order as a recall gate (three-valued, like eval: it matches only on a known ~> path), so a reversed or chron-free story correctly does not match. Tropes without a story-order clause are unaffected — and time-travel tropes whose identity *is* their shape in time (a stable loop, a grandfather paradox) become expressible.
  • Authoring note (see the [style guide](/reference/style)): because recognition binds events by shape, a story-order discriminator only separates forward from reversed when it orders asymmetric operands — distinct event classes, or an event before the entity it produces — and both operands need a resolvable story-time position (a scene @@ stamp or an anchor).
0.8.0
Added
  • Diegetic timeline — story-time vs work-time. A second, optional temporal axis — *story-time* (the fabula: when an event happens in-world) — decoupled from *work-time* (the beat/scene order the audience is shown things). Fully backward compatible: a file with no story-time annotation has story-time ≡ work-time, so every existing trope, test, and corpus is unaffected.
  • Three tokens. @@ — the story-time anchor, in two positions: an ambient/scope-head directive (scene the_lake @@ t_lake { … }) that sets the active story-time, and a postfix inline anchor (harry @@ t_lake) that displaces a single reference to another point on its worldline. ~>precedence, the story clock (chron t1 ~> t2 ~> t3), distinct from causal ->. ~~co-presence, "the same identity at two story-times" — a self-encounter (Harry and his time-turned self; Bill & Ted meeting their future selves).
  • chron declarations introduce timeline markers (by first appearance) and chain them with ~> / ~~. before(a, b) / after(a, b) are story-time order conditions — *three-valued* (yes / no / incomparable on a partial clock), the story-time duals of work-time past / future.
  • Loud where it matters. A bare reference always means *this character, here-now*; only a reference displaced to a different story-time is ever decorated — mirroring how diegetic-level crossings are loud. The validator flags unknown markers, a precedence cycle that isn't marked [+Loop], and reused proper-time markers.
  • Story lens. A story() view re-emits a permuted or nonlinear narrative in fabula order — flashbacks, shuffled timelines, time loops — alongside the existing work-time view.
0.7.2
Changed
  • Re-declaring an entity as a different kind is now a validation errorchar dev then set dev is flagged red: a node can't be two kinds (it silently breaks recognition's by-kind role check). A *same-kind* re-declaration stays a legal re-open (its tags merge onto the existing node), reported as a warning.
0.6.0
Added
  • A scope may carry a presence edge in its headscene the_stinger @ post_credits { … } is now legal: declare the slot a scope occupies *and* open its block in one statement (previously the @ edge and the { … } block had to be two separate statements). Completes the *work-skeleton* pattern — medium-format structure attaches to a work right at the scene head. Sugar for a leading the_stinger @ post_credits edge inside the block (like a head [+Tag]); eval/recognition see the identical slot fact, and it round-trips as a fixpoint. Additive and backward-compatible; the two-statement form still works.
0.5.0
Added
  • work entity kind — a sixth entity type joins char/set/obj/evt/arc: the *work-as-artifact*, the medium-bearing container itself (the film, the novel, the game). Its medium rides on the Essence facet (work the_film [%Film]); medium-format conventions (credits, prologue, post-credits) are modeled as concept slots a scope occupies via the existing @ presence edge (scene s @ post_credits) — structure, not props. Additive and backward-compatible; existing corpora are unaffected.
0.4.4
Fixed
  • Parser — resolve epistemic-wrapped ambiguities in when: / then: clauses, and accept the flexible as / close forms.
0.4.3
Fixed
  • when binding inequality — recall now enforces binding (in)equality constraints (e.g. $x != $z), so a pattern's distinct roles must bind to distinct nodes.
0.4.2
Fixed
  • imply threading in coverage — parameter threading now applies in phase-2 coverage, not just recall, so coverage accounts for the threaded tags an imply expands into.
0.4.1
Added
  • imply parameter threading — parameter bindings now thread through imply expansions, so a parametric super-type carries its parameters into the tags it implies.
0.4.0
Added
  • The engine baseline the first published standard corpus targets (engine_min 0.4.0): the corpus gate, shape recognition, coverage (drams), and the editor/embed analysis API.