"""Hand-built reference grouping of the Chekhov predicaments (Claude-written, no local inference). Each scene is in at most one group; scenes that fit no recurring situation stay unassigned. 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: patience, tact. """ G = [ dict(id='G01', name='Stuck in a life that has stopped meaning anything', predicament='You have done the same thankless duty for years, you no longer believe it matters, and you cannot see any way out.', actor='person worn down by routine', wants='a reason to keep going', counterpart='the life they are stuck in', members=[0, 6, 7, 53, 56, 121, 122, 123, 163], options=[ ('Keep at it without complaint.', 'scene:7', {'patience':'+', 'flags.resigned':'set'}), ('Drink to make the days pass.', 'scene:53', {'money':'-', 'standing':'-'}), ('Take your complaint to those above you, again.', 'scene:3', {'relationships.authority':'-', 'standing':'risk'}), ('Tell yourself real life is elsewhere, and wait for your chance.', 'scene:128', {'flags.dreaming_of_escape':'set'}), ('Give it up and leave for something else.', 'filled', {'money':'risk', 'standing':'risk', 'flags.left':'set'})]), dict(id='G02', name='A grief nobody will hear', predicament='You have lost someone, and the people around you will not listen, or tell you that you are mourning wrongly.', actor='bereaved person', wants='someone to hear their grief', counterpart='people who will not listen', members=[47, 49, 50, 51, 52, 84, 135, 167, 169], options=[ ('Keep trying to tell whoever is nearest.', 'scene:50', {'patience':'+', 'relationships.stranger':'risk'}), ('Laugh along and keep it to yourself.', 'scene:49', {'patience':'+', 'flags.grief_unspoken':'set'}), ('Pour it out to something that cannot answer back.', 'scene:52', {'flags.grief_unspoken':'set'}), ('Mourn your own way, whatever they say.', 'scene:169', {'standing':'-', 'relationships.family':'+'}), ('Tell them to their face that they are heartless.', 'scene:84', {'standing':'-', 'relationships.stranger':'-'})]), dict(id='G03', name='A glimpse of the life you are missing', predicament='In the middle of an ordinary dull day, something brings back or shows you a fuller life than yours.', actor='person in a narrow life', wants='the life they glimpsed', counterpart='a passing vision of something better', members=[11, 12, 128, 208, 210, 213, 214, 217], options=[ ('Let yourself feel it, then go back to your work.', 'scene:12', {'patience':'+'}), ('Keep looking for as long as it lasts.', 'scene:213', {'flags.longing':'set'}), ('Start planning seriously how to get there.', 'scene:128', {'money':'-', 'flags.dreaming_of_escape':'set'}), ('Speak to the person who stirred it.', 'filled', {'tact':'+', 'relationships.stranger':'risk'})]), dict(id='G04', name='On the outside of other people\'s warmth', predicament='Other people are celebrating together, or a whole household is gathered in warmth, and you are outside it.', actor='person left out', wants='a share of the warmth', counterpart='a household or crowd enjoying itself', members=[132, 133, 134, 162, 173, 218], options=[ ('Accept the welcome and join in.', 'scene:134', {'tact':'+', 'relationships.host':'+'}), ('Take the extra work for the extra money.', 'scene:162', {'money':'+', 'relationships.peers':'-'}), ('Watch from outside and keep your thoughts to yourself.', 'scene:173', {'patience':'+'}), ('Grumble aloud at the unfairness of it.', 'scene:218', {'standing':'-', 'flags.resentment':'set'})]), dict(id='G05', name='Talked down to by those above you', predicament='Someone above you brushes you off, scolds you, or treats you as beneath their notice, and you need them.', actor='humble person', wants='to be heard and treated decently', counterpart='someone above them', members=[3, 43, 101, 102, 125, 140, 161, 166, 168, 220], options=[ ('Bow, flatter them and ask again.', 'scene:112', {'tact':'+', 'standing':'-', 'relationships.superior':'+'}), ('Take the insult and carry on.', 'scene:125', {'patience':'+', 'standing':'-'}), ('Go over their head to someone higher.', 'scene:102', {'standing':'risk', 'relationships.superior':'-'}), ('Argue your case back to them.', 'scene:168', {'standing':'risk', 'relationships.superior':'-'}), ('Send the polite greetings you do not mean.', 'scene:161', {'tact':'+', 'relationships.superior':'+', 'flags.resentment':'set'})]), dict(id='G06', name='Nothing moves without a little something', predicament='An ordinary thing you are owed will only happen if you slip someone something, and everyone around you already does.', actor='person who needs an ordinary thing done', wants='it done in time', counterpart='people who expect a little something', members=[9, 88, 90, 93, 95, 97, 104, 124, 164], options=[ ('Pay what is hinted, without a word.', 'scene:88', {'money':'-', 'tact':'+', 'relationships.gatekeeper':'+'}), ('Refuse, and put a complaint in writing.', 'scene:105', {'standing':'risk', 'relationships.gatekeeper':'-', 'flags.complaint_lodged':'set'}), ('Treat them generously and make a friend of them.', 'scene:96', {'money':'-', 'relationships.gatekeeper':'+'}), ('Keep your hands clean and wait it out.', 'archetype', {'patience':'+', 'money':'risk'}), ('Take a cut of your own while you are at it.', 'scene:164', {'money':'+', 'standing':'risk', 'flags.dishonest':'set'})]), dict(id='G07', name='Your work goes unrecognised', predicament='You have worked hard and well, and nobody has heard of you, while showier people get all the notice.', actor='hard worker', wants='credit for their work', counterpart='an indifferent public', members=[38, 142, 143, 144, 145, 147, 148, 149, 199], options=[ ('Keep working and let the work speak for itself.', 'archetype', {'patience':'+'}), ('Fish for notice among strangers.', 'scene:148', {'standing':'-'}), ('Go where people who matter might see it.', 'scene:146', {'money':'-', 'standing':'risk'}), ('Laugh about it with someone in the same boat.', 'scene:150', {'relationships.peer':'+'})]), dict(id='G08', name='A marriage gone numb', predicament='Your spouse adores or depends on you, and you have long since stopped seeing them at all.', actor='married person', wants='something to break the monotony', counterpart='a devoted spouse', members=[54, 55, 57, 113], options=[ ('Take your boredom out on them.', 'scene:54', {'relationships.spouse':'-'}), ('Walk out to be alone with your thoughts.', 'scene:55', {'relationships.spouse':'-'}), ('Humour their worries and stay home.', 'filled', {'patience':'+', 'relationships.spouse':'+'}), ('Look at them properly, for once.', 'scene:113', {'relationships.spouse':'+', 'flags.woke_up':'set'})]), dict(id='G09', name='Too late to make it right', predicament='You see at last what you owed someone, or what you let slip with them, and it is already too late.', actor='person who let it slip', wants='another chance', counterpart='someone they failed', members=[69, 70, 114, 115, 116, 117, 170], options=[ ('Say it now, late as it is.', 'filled', {'tact':'-', 'relationships.lost':'+'}), ('Sit with it together in silence.', 'scene:70', {'patience':'+', 'relationships.lost':'+'}), ('Promise to change.', 'scene:114', {'flags.vowed':'set'}), ('Put right the duties you left undone.', 'scene:117', {'money':'-', 'standing':'+'})]), dict(id='G10', name='Drawn to someone of another rank', predicament='You are drawn to someone well above or below you, and the gap between you seems too wide to cross.', actor='person drawn across a gap in rank', wants='the one they are drawn to', counterpart='someone above or below them', members=[2, 5, 65, 66, 67, 68, 212, 216], options=[ ('Declare yourself and ask for nothing.', 'scene:66', {'standing':'risk', 'relationships.beloved':'+'}), ('Enjoy their admiration and decide nothing.', 'scene:67', {'standing':'+', 'relationships.beloved':'risk'}), ('Mock their world instead of trying to enter it.', 'scene:68', {'relationships.beloved':'-', 'flags.bitter':'set'}), ('Keep your place.', 'archetype', {'standing':'+', 'relationships.beloved':'-'})]), dict(id='G11', name='Want nothing and nothing can hurt you', predicament='After loss or hardship, you are tempted, or urged, to stop wanting anything at all so nothing can hurt you again.', actor='person worn down by loss', wants='to stop hurting', counterpart='their own longing', members=[72, 73, 78, 197, 226, 227], options=[ ('Train yourself to want nothing.', 'scene:73', {'patience':'+', 'relationships.family':'-', 'flags.hardened':'set'}), ('Take one day of happiness at any price.', 'scene:78', {'money':'risk', 'relationships.family':'+'}), ('Give up the prize you were chasing.', 'scene:197', {'money':'-', 'standing':'+'}), ('Make your peace with your lot.', 'scene:227', {'patience':'+'})]), dict(id='G12', name='Racing to save someone who is slipping away', predicament='Someone you love is failing, and you are spending everything you have to reach anyone who might save them.', actor='person whose loved one is failing', wants='help in time', counterpart='whoever might save them', members=[75, 77, 82, 110, 111, 112], options=[ ('Drive through anything to reach help.', 'scene:110', {'money':'-', 'relationships.family':'+'}), ('Spend whatever it takes on one more hope.', 'scene:82', {'money':'-', 'flags.desperate':'set'}), ('Grovel before whoever can help.', 'scene:112', {'standing':'-', 'relationships.helper':'+'}), ('Accept that it is beyond help.', 'archetype', {'patience':'+', 'relationships.family':'-'})]), dict(id='G13', name='At odds with a parent over the life you chose', predicament='You and a parent cannot accept how the other lives, and neither of you will give way.', actor='grown child', wants='to live their own way', counterpart='a parent who disapproves', members=[91, 98, 152, 153, 154, 171, 172], options=[ ('Speak up to them.', 'scene:98', {'relationships.parent':'-', 'flags.defied_parent':'set'}), ('Run off and do it anyway.', 'scene:153', {'standing':'-', 'relationships.parent':'-', 'flags.disowned':'set'}), ('Write home asking forgiveness, and help.', 'scene:154', {'money':'+', 'relationships.parent':'risk'}), ('Go home and try to reach them.', 'scene:171', {'tact':'+', 'relationships.parent':'risk'}), ('Do as you are told.', 'archetype', {'patience':'+', 'relationships.parent':'+'})]), dict(id='G14', name='Frightened by something you cannot explain', predicament='Something you cannot account for has frightened you, alone or far from help, and you must decide what to do.', actor='frightened person', wants='to understand it, or get away', counterpart='something unexplained', members=[33, 129, 178, 180, 182, 183, 184, 185, 186, 187, 188], options=[ ('Get away as fast as you can.', 'scene:184', {'standing':'-'}), ('Find someone and ask what it was.', 'scene:186', {'relationships.stranger':'+'}), ('Tell yourself it is nothing and carry on.', 'archetype', {'patience':'+', 'flags.faced_fear':'set'}), ('Stay close to someone who is not afraid.', 'scene:180', {'relationships.companion':'+'})]), dict(id='G15', name='Far from home and your own people', predicament='You are stuck far from home and the people you love, in a hard place that does not want you.', actor='person far from home', wants='to be with their own people', counterpart='a hard, strange place', members=[1, 71, 74, 80, 81, 179], options=[ ('Beg to be taken home.', 'scene:179', {'relationships.guardian':'-', 'relationships.family':'+'}), ('Ask your people to come to you.', 'scene:80', {'money':'-', 'relationships.family':'+'}), ('Keep writing home for help.', 'scene:74', {'money':'risk', 'relationships.family':'+'}), ('Settle in and make the best of it.', 'filled', {'patience':'+', 'money':'+'})]), dict(id='G16', name='A stranger\'s death lands on you', predicament='Someone you barely knew has died near you, and the aftermath has become your chore or your fright.', actor='person drawn into the aftermath', wants='to be done with it', counterpart='a stranger\'s tragedy', members=[118, 119, 120, 174, 175], options=[ ('Do what duty asks, and no more.', 'scene:174', {'patience':'+'}), ('Complain about the inconvenience.', 'scene:119', {'standing':'-', 'relationships.bereaved':'-'}), ('Get away somewhere comfortable until it is over.', 'scene:130', {'relationships.neighbours':'-'}), ('Stay with the frightened people who cannot leave.', 'filled', {'standing':'+', 'relationships.neighbours':'+'})]), dict(id='G17', name='Covering up a disgrace', predicament='Something shameful has come to light, or is about to, and you could still hide it from those who would judge you.', actor='person with a disgrace to hide', wants='to keep their good name', counterpart='those who would judge them', members=[155, 156, 157, 158, 159, 160, 176, 177, 198], options=[ ('Get rid of the evidence quietly.', 'scene:156', {'tact':'+', 'flags.secret_kept':'set'}), ('Pay to have it smoothed over.', 'scene:176', {'money':'-', 'standing':'+', 'flags.secret_kept':'set'}), ('Confess to those closest to you.', 'scene:159', {'standing':'-', 'relationships.spouse':'risk'}), ('Call it a joke and take it back.', 'scene:160', {'relationships.spouse':'-'})]), ] # 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:'low', 1:'middle', 2:'low', 3:'middle', 4:'middle', 5:'high', 6:'low', 7:'middle', 8:'low', 9:'middle', 10:'high', 11:'middle', 12:'middle', 13:'low', 14:'middle', 15:'low', 16:'high', 17:'high', 18:'low', 19:'middle', 20:'low'} # Story 3's narrator is a poor noble in a low post: ranked middle. Story 9 is told from the young # official's side, not the old messenger's. Story 18's protagonist is the old gardener, not the buyers.