Files
TheLadder/tools/story-to-pack/probe/aesop/README.md
T
JesseMarkowitzandClaude Opus 5.5 3a4758172d story-to-pack: add the corpora and the catalogue v2/v3
Fourteen corpora split and classified: aesop, bierce, chekhov, holmes,
keefe, lawson, lorimer, maupassant, nobody, plaintales, poe, torchy,
wallingford and winesburg, each with its splitter and the hand-written
groups and pages; catalogue v2 and v3; and the shared splitters
gutenberg_chunks.py, se_split.py and se_build.py.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019rwKTmug58sEsJ72AuWsEi
2026-10-07 06:05:51 -04:00

15 KiB

Aesop reference set: Three Hundred Aesop's Fables (tr. George Fyler Townsend, 1867)

A hand-made comparison baseline for the story-to-pack pipeline, a sibling of the Jacobs set in ../jacobs/ and the Lawson set in ../lawson/. Claude read all 313 fables and wrote every summary, predicament, group, option and measurement row. No inference of any kind was used. Do not treat it as ground truth: it is one careful reading.

Aesop has two jobs here. It is a normal reference set. It is also a test of a different claim: a story supplies predicaments well but rarely says what a move leads to, while a fable puts situation, move and outcome in one paragraph. The second job is measured in Fables as an option source.

File What it is
corpus/three-hundred-aesops-fables.txt Project Gutenberg eBook #21 (public domain)
split_gutenberg.py → stories.json and chunks.json: 313 fables, one story and one scene per fable (see below)
claude/batches/sNNN.json {chunk, story, summary, predicament, moral}, one file per run of fables, named by the first fable in it so that the s*.json glob sorts in fable order
claude/groups_src.py the groups, their options, and the protagonist's standing in every fable
claude/options_src.py the options measurement, with the definitions of its new: entries and the rules for stated
claude/build.py checks everything, then writes claude/records.json, claude/groups.json and claude/options_by_entry.json
claude/page.py → claude/REFERENCE.html, the readable page, with the measurement at the end

Rebuild: python3 split_gutenberg.py from this directory, then cd claude && python3 build.py && python3 page.py.

One scene per fable departs from the usual 80-word scene rule on purpose. The median fable is 97 words, and many are under 80, so the rule would discard them, and a fable split in two would lose its turn. A group's fable count is therefore also its story count.

What is in it

  • 313 predicaments: one sentence each (median 21 words, min 15, max 24), transplanted to a workplace. They contain no animal, plant or god names and no story-only objects. Human role words stay (someone powerful, a partner, a newcomer, the boss). build.py enforces this with a list of every creature, plant, god and prop in the book, not with topic_words. The list caught nine predicaments that used an animal word as a verb or an idiom ("crow about it", "swallow it whole", "the lion's share"), and all nine were reworded.
  • 115 stated morals, recorded verbatim. A moral here is the fable's unquoted, generalising sentence ("Look before you leap."). Where the lesson is only spoken by a character inside quotation marks, as in The Lion and the Mouse, moral is null. build.py checks every moral is in the text.
  • 16 groups of 13 or more fables, the recurrence rule scaled to this corpus (at least max(3, 4% of 313) = 13). They range from 13 to 18 fables. 4 small groups of 5 to 12 are marked small and reported separately: G17 letting a known predator inside (6), G18 the lion's share (6), G19 a bad record when you need trust (5), G20 a warning before the trouble (6). Each fable sits in at most one group: 253 are assigned and 60 fit nothing that recurs.
  • Options: 3 to 5 per group, 94 in all. 87 come from what someone in a member fable did or refused to do (scene:N), 7 fill gaps, and none are archetypes. No option cites a fable outside its own group, unlike Jacobs (8) and Lawson (14). A fable is a whole turn, so the move and the fable are always the same scene.
  • Moves: spine paths with a direction only (+, -, risk, set). There are no magnitudes. Skills proposed for this corpus: wit, for seeing through a trick and turning it, and prudence, for looking before you leap, knowing your limits and keeping what you have. Between them they are most of Aesop's morals.
  • Stage comes from protagonist standing, judged per fable in STANDING in groups_src.py: 157 fables rank low, 119 middle and 37 high. No group comes out stage high (11 low, 9 middle). Aesop's "you" is usually the lamb, not the wolf, and the high-standing fables (a father, a master, a captor) scatter across groups rather than recurring together.

The groups:

Group Fables Nearest catalogue entry
G01 A friendly approach from someone who would gain by your fall 16 new (near sure_thing)
G02 At the mercy of someone who has already decided 14 at_their_mercy
G03 Trading one hardship for another 14 new
G04 Envying another's gift 17 new (near overlooked)
G05 Passing for more than you are 14 pretence
G06 Riding high 13 new
G07 Sneered at by someone showier 13 new (near power_over_you)
G08 Help asked in need 14 plea_for_help
G09 Wanting more than you hold 13 new
G10 Your side divided 15 new
G11 A partner you may not be able to count on 18 new (near used)
G12 Rushing in without looking 13 new
G13 Pointing at others' faults 14 new (near own_words_back)
G14 Liberties between the weak and the strong 15 new (near revenge)
G15 A hard lot 14 new (near dead_end)
G16 Worked hard, badly repaid 13 new (near overlooked)

Only three large groups match an existing entry. The rest are situations about self-regard and prudence (envy, pride, greed, heedlessness, pointing at faults), which no story corpus isolated. The story corpora found them only as the texture of longer plots.

How this corpus differs

Recurrence is the corpus's nature, not something to be found. Every earlier corpus needed a search for the handful of situations its stories kept returning to. Aesop is built from a small stock of situations told over and over with different animals: the predator's invitation alone appears sixteen times. The problem flips. Nearly every fable recurs, and the work is deciding which of several overlapping situations a fable belongs to. The Fox and the Goat is a trap, a heedless leap, and a partner who uses you. It sits in G01.

The predicaments are the cleanest yet. There are no names to strip, and the whole cast is already a set of roles: the strong, the weak, the flatterer, the partner, the master. Transplanting to a workplace needs only the animal removed. The cost is abstraction: a pack built on these predicaments alone would have no setting at all.

Two groups hold both sides of one situation. G13 holds the critic who shares the fault and the one criticised. G14 holds the weak who strike at the fallen and the strong being needled. In Jacobs and Lawson the actor was always on one side. Here the fable often follows both parties to their fate, and splitting them would leave neither side at 13. The measurement does the same for sneered_at: G07's predicaments are all from the side of the one sneered at, but four of its fables (the heifer, the horse, the olive, the hare) also supply the sneerer's move as an option.

Power runs through nearly everything. Five of the sixteen groups turn on an imbalance of power (G01, G02, G03, G14, G16), and two of the small ones as well. Of the options measured below, 110 of 242 are about the actor's standing going down. It is the most power-heavy corpus so far, and the least domestic: there is almost no home, love, grief or dread.

Fables as an option source

claude/options_by_entry.json maps a catalogue entry (a v2 id, or new:<id> defined under _new_entries) to the options the fables supply for it. Each option is {text, moves, source: "chunk:N", evidence, stated}. evidence is the verbatim moral, or an excerpt of at most 30 words, and build.py checks both. stated is true only if the fable's own outcome or moral shows the direction of every path in moves. The rules, applied the same way to every row, are in the docstring of options_src.py. The main points:

  • An outcome is read as a direction by a fixed table. Killed, caught, beaten, driven out or publicly rebuked counts as standing -. Goods, food or pay lost counts as money -. A counterpart who repays, deserts or stops trusting you counts as relationships. Reading "eaten" as standing - is a convention. The fable does not say it.
  • A moral that only calls a move wise or foolish ("Look before you leap.") states no direction. One that names the effect ("Slow but steady wins the race.") does.
  • An outcome the move did not cause is not counted, however pointed. The sparrow is taken by a hawk while mocking the hare, but mocking did not bring the hawk.
  • risk is stated only when one fable shows the same move ending both ways. That happens once, in The Birdcatcher, the Partridge, and the Cock: one bird's plea spares it, and the other's does not.
  • Measurement moves use only money, standing and relationships.<role>. A skill label or a flag is a decision about the option, not an outcome any text can show. Leaving them out means every row could in principle be stated. The group options in groups_src.py keep them.

Results:

Catalogue v2 entries with at least one sourced option 32 of 82 (26 with at least one stated option)
new: entries 19, all with at least one stated option
Options 242, from 229 fables (84 for v2 entries, 158 for new ones)
stated: true 165 (68%): 62 of 84 for v2 entries (74%), 103 of 158 for new ones (65%)
Entries with three or more stated options 21
Entries with a stated + option and a stated - option 15

The v2 entries the fables speak to are mostly about power, deception and help. at_their_mercy gets 14 options (12 stated), plea_for_help 11 (9), pretence 8 (6) and warning 5 (2). Another 28 entries get one to four options each. The 50 entries with nothing are almost all of the catalogue's home, love, loss, fear and duty. Examples are home_unseen, grief, losing_them, dread, duty_against_love, past_comes_back and promised_elsewhere. Aesop has no inner life and almost no family.

The 19 new entries are friendly_predator, better_the_devil, ape_your_betters, riding_high, sneered_at, grasping, divided, doubtful_ally, heedless, pot_and_kettle, needling_the_strong, hard_lot, used_up, predator_inside, lions_share, bad_record, asking_above, please_everyone and make_them_move. Each definition says which v2 entry it sits nearest to and how the decision differs.

Against the story packs. Every option in a story pack has an inferred direction: the author judged where the move leads, because the story does not say.

Pack Options scene:N archetype filled Directions stated by the text
Lawson (../lawson/claude/groups.json) 142 118 12 12 0 (all inferred)
Bierce (../bierce/claude/groups.json) 128 96 15 17 0 (all inferred)
Aesop groups (claude/groups.json) 94 87 0 7 not separately judged
Aesop measurement (claude/options_by_entry.json) 242 242 (all from a fable) 0 0 165 (68%)

Even a scene:N option in a story pack is sourced only for its move: the scene shows someone doing it, and its effect is the author's call. In the measurement, two thirds of the options are sourced for the effect as well.

The 68% needs three qualifications before anyone relies on it.

  1. The stated options are thin. 226 of the 242 options carry a single path, and 15 of the 16 two-path options are stated. A fable follows one actor to one fate, and that fate is nearly always their standing. Story-pack options carry more: Lawson's average 1.67 spine paths each, Bierce's 1.18 and Aesop's own group options 1.40, before skills and flags. What a fable usually leaves unsaid is the second path, how the move changes a relationship.
  2. They are almost all downside. Of the 165 stated options, 136 move only in the - direction. By path, 90 stated standing - against 12 stated standing +. A fable states the price of the tempting mistake: the goat in the well, the crow who sang, the dog who dropped his meat. The wise move's reward is usually just that the harm does not happen, and that gives no direction. The fox who stays outside the sick lion's cave is right, and nothing moves for him. That is why the options marked false are so often the prudent ones. Only 15 entries get a stated option in each direction.
  3. The coverage is narrow. 32 of 82 entries, with most of the weight on a handful. The fables tell you a great deal about predators, pretenders and the greedy, and nothing about a spouse, a dead friend or a night watch.

Verdict. Fables are a real source of effect directions, and a far better one than stories, but only for one kind of option. For a tempting mistake in a situation of power, greed, pride or trust, the fable states where it leads, with evidence, seven times in ten (136 of the 190 options that only move down). For any other option it is about half (29 of 52). That is enough to anchor the - direction of an event's tempting option, and to check an author's inferred direction against a text. Fables do not supply the prudent option's payoff, the relationship side of a move, or skills, and they say almost nothing about the catalogue's domestic and inward half. The same applies to them as a source of predicaments. Use them to calibrate the downside of options in power and trust events, not to build whole events.

Known defects

  • Drop capitals. The transcription lost each fable's printed drop capital, so many fables open with the first word's initial missing: "WOLF, meeting with a Lamb" (fable 1), "TEE KITES" (180). chunks.json is left as split. Morals and evidence are quoted from later in the text, so none is affected.
  • Other transcription slips, left as split: "an a woman" (194), "use I gave credence" (280), "all bag in front" (260).
  • Fable 89, The Æthiop, rests on a racist premise, that a black servant's colour is dirt to be scrubbed off. Its predicament keeps only the transplantable turn: trying to scrub away someone's nature, and hurting them. It is unassigned.
  • Etiologies are not situations. The Goods and the Ills (250), The Lark Burying Her Father (263), The Man, the Horse, the Ox, and the Dog (203) and The Two Bags (260) explain how something came to be. Their predicaments are strained, and three of the four are unassigned.
  • G11 is the loosest large group (18 fables). It holds every doubtful partner, from the companion who flees a bear to the boastful suitor, joined only by the question "can I count on them?".
  • Standing is judged per fable from the predicament's "you", not from the animal. So the lion in The Lion and the Mouse ranks high because the predicament puts the player in the lion's place.

The Lorimer advice-book pilot running alongside this one was not read. The two results are independent.