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
This commit is contained in:
JesseMarkowitz
2026-10-07 06:05:51 -04:00
co-authored by Claude Opus 5.5
parent e5617b86ba
commit 3a4758172d
566 changed files with 303901 additions and 0 deletions
@@ -0,0 +1,215 @@
"""Hand-built reference grouping of the Winesburg, Ohio predicaments (Claude-written, no local inference).
Each scene is in at most one group; scenes that fit no recurring situation stay unassigned.
Every group spans at least three of the 24 stories, and no story supplies more than half a
group's members. Stories 6, 7 and 8 (Godliness, Surrender, Terror) are the four parts of one
tale; every group still spans three or more stories when those three are counted as one.
Options follow DESIGN.md: 3-5 per group, each marked by where it came from --
'archetype' a fixed, setting-free option
'scene:N' what someone in scene N actually did (or refused to do)
'filled' written to fill a gap the scenes leave
`moves` names spine paths and a direction only (+ / - / risk / set). No magnitudes: the model never
chooses a number. Skill labels proposed for this corpus: voice (daring to say what you mean),
insight (reading what people feel beneath what they say).
"""
G = [
dict(id='G01', name='Whether to leave for somewhere bigger',
predicament='You feel you do not belong where you grew up, somewhere bigger is calling, and the people here are tied to you.',
actor='young person', wants='a life of their own', counterpart='the people who would be left behind',
members=[28, 30, 99, 112, 143, 145, 182, 223, 237, 280, 281],
options=[
('Tell them plainly you are going, even if you cannot say why.', 'scene:30', {'voice':'+', 'relationships.family':'risk', 'flags.leaving':'set'}),
('Slip away at night without a word.', 'scene:223', {'relationships.family':'-', 'money':'risk', 'flags.left_home':'set'}),
('Offer to give everything up and go with the one who is leaving.', 'scene:112', {'relationships.beloved':'+', 'standing':'-'}),
('Stay, and keep your head down at your work.', 'archetype', {'money':'+', 'relationships.family':'+', 'standing':'-'}),
('Take a last walk through the old places before you go.', 'scene:281', {'insight':'+', 'relationships.community':'+'})]),
dict(id='G02', name='Telling it all to the one who will listen',
predicament='You have carried something unsaid for years, and at last there is one person willing to sit and hear it.',
actor='lonely person', wants='to be heard and believed', counterpart='the one willing listener',
members=[33, 127, 130, 152, 153, 193, 194, 218, 220, 250, 256],
options=[
('Tell it all, the worst part too.', 'scene:256', {'voice':'+', 'relationships.confidant':'+', 'flags.confessed':'set'}),
('Tell it as a warning, not a plea.', 'scene:128', {'standing':'+', 'relationships.confidant':'risk'}),
('Stop halfway and send them away.', 'scene:195', {'relationships.confidant':'-', 'flags.kept_silent':'set'}),
('Pour it out to someone who cannot judge you.', 'scene:218', {'voice':'+', 'insight':'-'}),
('Ask only that they believe you.', 'scene:192', {'relationships.confidant':'+', 'standing':'-'})]),
dict(id='G03', name='An elder presses their hard lesson on you',
predicament='Someone older, marked by their own failures, keeps urging on you the lesson they learned, and wants you to live by it.',
actor='young person', wants='to find their own way', counterpart='an elder with a lesson',
members=[7, 38, 39, 104, 128, 154, 177, 235, 255],
options=[
('Take it to heart and let it change your plans.', 'scene:154', {'insight':'+', 'relationships.elder':'+'}),
('Listen politely and forget it by morning.', 'archetype', {'relationships.elder':'-'}),
('Ask them the question you really want answered.', 'scene:126', {'voice':'+', 'relationships.elder':'risk'}),
('Refuse the lesson and do what you had planned.', 'scene:256', {'standing':'+', 'relationships.elder':'-', 'flags.ignored_advice':'set'})]),
dict(id='G04', name='One idea has taken over your life',
predicament='One idea or hope has grown until it runs your whole life, and the people around you are paying for it.',
actor='person with a ruling idea', wants='to see it fulfilled', counterpart='the people it uses up',
members=[3, 13, 19, 53, 55, 56, 95, 100, 156],
options=[
('Double down: this time it will come true.', 'scene:95', {'standing':'risk', 'relationships.family':'-', 'flags.obsessed':'set'}),
('Tear it down and start building it again.', 'scene:13', {'insight':'+', 'money':'-'}),
('Press it on the next person who will listen.', 'scene:100', {'voice':'+', 'relationships.community':'-'}),
('Settle for doing well enough.', 'scene:156', {'standing':'+', 'insight':'+'}),
('Notice who it is costing, and stop.', 'filled', {'relationships.family':'+', 'standing':'-'})]),
dict(id='G05', name='Your child\'s chances are the life you never had',
predicament='Your own chances are gone, and you have fixed every hope on a child who does not know what you want of them.',
actor='parent', wants='the child to live the life they missed', counterpart='their child',
members=[20, 24, 27, 60, 68, 81, 134, 136, 265],
options=[
('Press them hard to wake up and get ahead.', 'scene:25', {'standing':'+', 'relationships.child':'-'}),
('Hold up the one they ought to become.', 'scene:134', {'standing':'+', 'relationships.child':'risk'}),
('Put money aside for them in secret.', 'scene:265', {'money':'-', 'flags.secret_savings':'set'}),
('Rehearse a scolding, then say nothing when they come.', 'scene:137', {'relationships.child':'+', 'voice':'-'}),
('Tell them your own story, and let them choose.', 'filled', {'voice':'+', 'relationships.child':'+'})]),
dict(id='G06', name='The one everyone watches',
predicament='Everyone around you has decided you are the odd one, and they watch you, half amused and half afraid.',
actor='the odd one', wants='to be taken as ordinary', counterpart='the watching community',
members=[4, 14, 51, 101, 105, 123, 192, 211, 216, 219],
options=[
('Win them over with the one thing you do well.', 'scene:105', {'standing':'+', 'relationships.community':'+'}),
('Keep to yourself and let them talk.', 'archetype', {'relationships.community':'-'}),
('Lash out at the next one who stares.', 'scene:214', {'voice':'+', 'standing':'-', 'flags.lashed_out':'set'}),
('Go where nobody knows you.', 'scene:223', {'relationships.community':'-', 'flags.left_home':'set'}),
('Carry on as you are and let them laugh.', 'scene:102', {'relationships.community':'+', 'standing':'-'})]),
dict(id='G07', name='What they say about you is not who you are',
predicament='People have settled on a story about you, admiring or damning, and it has almost nothing to do with who you are inside.',
actor='person with a reputation', wants='to be known truly', counterpart='the people who talk',
members=[6, 40, 46, 61, 62, 111, 139, 160, 165, 176, 228],
options=[
('Live up to the story they tell.', 'filled', {'standing':'+', 'flags.false_front':'set'}),
('Confess in general terms, and see who understands.', 'scene:160', {'voice':'+', 'standing':'risk'}),
('Give up your place rather than go on pretending.', 'scene:165', {'standing':'-', 'flags.dropped_front':'set'}),
('Hide the part they would not understand.', 'scene:6', {'standing':'+', 'flags.secret_kept':'set'}),
('Prove them wrong by what you choose next.', 'scene:235', {'standing':'+', 'relationships.community':'+'})]),
dict(id='G08', name='Reaching out, then pulling back',
predicament='You have finally reached out to someone who matters, and at the moment of closeness something in you recoils.',
actor='lonely person', wants='closeness without losing themselves', counterpart='the one they reached for',
members=[8, 122, 149, 175, 178, 180, 195, 196, 225, 260],
options=[
('Run, and say nothing.', 'scene:8', {'relationships.beloved':'-', 'flags.fled_closeness':'set'}),
('Turn harsh to hide what you felt.', 'scene:178', {'voice':'-', 'relationships.beloved':'risk'}),
('Drive them off before they know you too well.', 'scene:196', {'relationships.beloved':'-', 'insight':'-'}),
('Let the moment pass and part kindly.', 'scene:149', {'relationships.beloved':'+', 'standing':'+'}),
('Stay, and let them see you.', 'filled', {'voice':'+', 'relationships.beloved':'+'})]),
dict(id='G09', name='The thing you cannot get out',
predicament='There is something you badly need to say to someone in front of you, and when the moment comes the words will not come.',
actor='tongue-tied person', wants='to say what they mean', counterpart='the one who needs to hear it',
members=[21, 31, 82, 146, 148, 185, 200, 222, 224, 231, 262, 271],
options=[
('Fall back on the usual polite words.', 'scene:31', {'relationships.close':'-'}),
('Say something else instead.', 'scene:146', {'relationships.close':'risk', 'insight':'+'}),
('Send them away and walk it off alone.', 'scene:222', {'relationships.close':'-', 'flags.kept_silent':'set'}),
('Write it down and leave it for them to find.', 'scene:86', {'voice':'+', 'relationships.close':'risk'}),
('Boast instead, to fill the silence.', 'scene:271', {'standing':'risk', 'relationships.close':'-'})]),
dict(id='G10', name='Understood without a word',
predicament='For once someone understands you without your having to explain, and you do not know what to do with it.',
actor='person understood at last', wants='to keep the moment', counterpart='the one who understands',
members=[16, 17, 65, 247, 251, 277, 279],
options=[
('Hold still and say nothing.', 'scene:277', {'relationships.confidant':'+', 'insight':'+'}),
('Stay close to them for good, whatever anyone thinks.', 'scene:17', {'relationships.confidant':'+', 'standing':'-'}),
('Reach for more than the moment offers.', 'scene:259', {'relationships.confidant':'risk', 'flags.crossed_line':'set'}),
('Break the spell with play.', 'scene:278', {'relationships.confidant':'+'}),
('Hide it from everyone, so nobody can break it.', 'scene:65', {'relationships.family':'+', 'relationships.community':'-'})]),
dict(id='G11', name='On the edge of everyone else\'s life',
predicament='Everyone around you seems to belong, laughing and pairing off and talking easily, and you stand at the edge unable to join.',
actor='onlooker', wants='to belong', counterpart='the crowd',
members=[83, 117, 133, 138, 184, 205, 232, 267],
options=[
('Join in, however awkwardly.', 'filled', {'relationships.community':'+', 'standing':'risk'}),
('Slip away to be alone and think.', 'scene:272', {'insight':'+', 'relationships.community':'-'}),
('Go and find the one person you want.', 'scene:273', {'voice':'+', 'relationships.beloved':'risk'}),
('Tell yourself you are simply older than they are.', 'scene:144', {'standing':'+', 'relationships.community':'-'}),
('Stay where you are and watch.', 'archetype', {'insight':'+'})]),
dict(id='G12', name='Waiting for someone who may never come',
predicament='You have waited a long time for someone to come back or come to you, and cannot tell whether to keep on.',
actor='one who waits', wants='the absent one to come', counterpart='the absent one',
members=[5, 87, 114, 116, 118, 252, 266],
options=[
('Keep faith, and keep waiting.', 'scene:115', {'standing':'-', 'relationships.absent':'+', 'flags.keeping_faith':'set'}),
('Save up and go after them.', 'scene:114', {'money':'+', 'relationships.absent':'risk'}),
('Say aloud that it is not coming.', 'scene:118', {'insight':'+', 'flags.gave_up_waiting':'set'}),
('Let someone else walk with you, just once.', 'scene:119', {'relationships.community':'+', 'relationships.absent':'-'}),
('Put it out of your mind and get on with things.', 'archetype', {'money':'+', 'relationships.absent':'-'})]),
dict(id='G13', name='Alone so long your habits have become your company',
predicament='You have lived shut away so long that private habits and imaginings have begun to replace the people you once needed.',
actor='recluse', wants='company without risk', counterpart='the people outside',
members=[12, 115, 119, 120, 124, 186, 190],
options=[
('Invent the company you cannot find.', 'scene:186', {'insight':'-', 'relationships.community':'-', 'flags.withdrawn':'set'}),
('Make one cautious effort to be among people.', 'scene:119', {'relationships.community':'+', 'standing':'+'}),
('Nurse your scorn and keep them all away.', 'scene:124', {'relationships.community':'-', 'standing':'risk'}),
('Keep to your small habits; they are enough.', 'scene:12', {'money':'+', 'relationships.community':'-'})]),
dict(id='G14', name='The life you settled into',
predicament='You settled into a marriage or a life because it was at hand, and years later it feels like a harness you cannot slip.',
actor='person who settled', wants='to be free, or at peace', counterpart='their partner and household',
members=[89, 90, 166, 189, 229, 234, 254, 257],
options=[
('Walk out, and leave them provided for.', 'scene:189', {'money':'-', 'relationships.spouse':'-', 'flags.walked_out':'set'}),
('Blame your partner for everything you missed.', 'scene:166', {'relationships.spouse':'-'}),
('Keep a secret way out and tell no one.', 'scene:257', {'money':'+', 'relationships.spouse':'-', 'flags.secret_savings':'set'}),
('Remember the good evenings, and stay.', 'scene:235', {'relationships.spouse':'+', 'relationships.family':'+'}),
('Try again to explain what you really wanted.', 'scene:89', {'voice':'+', 'relationships.spouse':'risk'})]),
dict(id='G15', name='The urge to break out, now',
predicament='An urge you cannot explain seizes you to run out into the night and do something wild, and it will not wait.',
actor='restless person', wants='release', counterpart='everything that holds them',
members=[42, 64, 121, 173, 233, 242, 258],
options=[
('Go, and see where it takes you.', 'scene:42', {'standing':'risk', 'flags.broke_out':'set'}),
('Run until you drop, then go home.', 'scene:258', {'insight':'+', 'relationships.spouse':'-'}),
('Call out to the first person you meet.', 'scene:122', {'standing':'-', 'relationships.community':'risk'}),
('Get drunk once, on purpose, to learn what it is like.', 'scene:242', {'money':'-', 'insight':'+', 'flags.drunk_once':'set'}),
('Go to the one person who might understand.', 'scene:179', {'voice':'+', 'relationships.confidant':'+'})]),
dict(id='G16', name='A desire at war with who you mean to be',
predicament='A desire you are ashamed of keeps pulling at you, and each time you give in you tell yourself you are testing your strength.',
actor='person of good standing', wants='to stay who they mean to be', counterpart='the one they desire',
members=[159, 162, 164, 179, 243, 244, 263],
options=[
('Close the gap tomorrow, and mean it.', 'scene:162', {'standing':'+', 'flags.resisted':'set'}),
('Go back, telling yourself it is only a test.', 'scene:164', {'standing':'risk', 'flags.temptation':'set'}),
('Keep the thought, but keep it pure.', 'scene:244', {'insight':'+'}),
('Turn to your partner instead.', 'scene:161', {'relationships.spouse':'+'}),
('Give in, and stop pretending.', 'scene:165', {'standing':'-', 'relationships.spouse':'-'})]),
dict(id='G17', name='Someone else wants the one you want',
predicament='Someone else wants the person you care for, and nobody has said plainly which of you they want.',
actor='suitor', wants='the person they care for', counterpart='a rival',
members=[141, 150, 198, 207, 209, 246, 270],
options=[
('Refuse to carry the rival\'s message, and go yourself.', 'scene:142', {'voice':'+', 'relationships.rival':'-'}),
('Walk out with the other one to make them jealous.', 'scene:207', {'relationships.beloved':'risk', 'relationships.rival':'-'}),
('Threaten the rival.', 'scene:206', {'standing':'-', 'relationships.rival':'-'}),
('Forbid the other to speak of them that way.', 'scene:246', {'relationships.rival':'-', 'relationships.beloved':'+'}),
('Decide it will always be someone else, and step aside.', 'scene:150', {'standing':'-', 'relationships.beloved':'-'})]),
dict(id='G18', name='Acting bigger than you feel',
predicament='You want someone to see you as bigger and surer than you feel, so you talk and act a part you do not believe.',
actor='person out to impress', wants='to be taken seriously', counterpart='the ones they want to impress',
members=[25, 45, 140, 188, 201, 208],
options=[
('Boast of the great things you will do.', 'scene:140', {'standing':'risk', 'relationships.friend':'-'}),
('Talk worldly, like the others.', 'scene:201', {'relationships.peers':'+', 'insight':'-'}),
('Play the solid citizen.', 'scene:188', {'standing':'+', 'money':'+'}),
('Drop the act and say you are not sure.', 'filled', {'voice':'+', 'standing':'-'}),
('Say little, and let them draw their own conclusions.', 'archetype', {'standing':'risk'})]),
dict(id='G19', name='Unseen at home',
predicament='The person at home who should notice you is wrapped up in their own concerns, and you have stopped expecting to be seen.',
actor='overlooked family member', wants='to be noticed and loved', counterpart='the one at home who does not see them',
members=[18, 37, 52, 63, 78, 151, 253],
options=[
('Hide and wait for it to pass.', 'scene:63', {'relationships.family':'-'}),
('Work harder, until someone notices.', 'scene:52', {'standing':'+', 'relationships.family':'risk'}),
('Take a little of what is withheld from you, in secret.', 'scene:37', {'money':'+', 'flags.stole':'set'}),
('Leave, hoping for warmth elsewhere.', 'scene:78', {'relationships.family':'-', 'flags.left_home':'set'}),
('Take up the new name a stranger offers you.', 'scene:154', {'insight':'+', 'relationships.family':'risk'})]),
]
# Protagonist standing by story, for stage assignment (DESIGN.md "Stages"). Per story, not per
# scene: a coarse first cut, and the one place this grouping uses a judgement not in the text.
STANDING = {0:'middle', 1:'low', 2:'middle', 3:'middle', 4:'middle', 5:'middle', 6:'high', 7:'high',
8:'high', 9:'middle', 10:'low', 11:'low', 12:'middle', 13:'low', 14:'high', 15:'middle',
16:'low', 17:'middle', 18:'low', 19:'low', 20:'low', 21:'middle', 22:'middle', 23:'middle'}
# A day labourer, a shop clerk, a demoted operator, a neglected child, an obscure illustrator turned
# recluse, a failing shopkeeper's son, a farm hand and a stable boy rank low. The reporter, his
# mother, the town's odd professionals and a teacher rank middle. The valley's great landowner, his
# daughter and grandson, and the best-paid pastor rank high. Story 4's man calls himself a doctor
# but has few patients and lives in squalor: judged middle, as he chooses it.