"""Hand-built reference grouping of the Poe 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: nerve (holding steady under dread) and reason (keeping your head and thinking it through: the searcher, the man in the whirlpool, the prisoner under the blade). """ G = [ dict(id='G01', name='The urge you cannot resist', predicament='Something in you keeps pulling towards the one act you know will ruin you, and resisting only makes it stronger.', actor='person in the grip of a compulsion', wants='to be free of the urge', counterpart='the thing they are fixed on', members=[30, 119, 189, 190, 191, 192, 337, 338, 341, 342, 349, 350, 351, 352, 356], options=[ ('Give in to it and have done.', 'scene:119', {'flags.gave_in':'set', 'standing':'-', 'nerve':'-'}), ('Put it off another day, and another.', 'scene:191', {'reason':'-', 'standing':'risk'}), ('Sit with it and study it until it passes.', 'scene:350', {'reason':'+', 'relationships.household':'-'}), ('Step back from the edge, or let someone hold you back.', 'scene:192', {'nerve':'+', 'relationships.confidant':'+'}), ('Get rid of whatever sets it off.', 'scene:337', {'flags.violent':'set', 'relationships.household':'-'})]), dict(id='G02', name='Safe, and about to give yourself away', predicament='You have got away with it, and the safer you feel, the stronger the urge to let it slip.', actor='person with a hidden crime', wants='to stay safe', counterpart='people who suspect nothing', members=[128, 129, 130, 194, 195, 329, 330, 339, 344, 345], options=[ ('Say nothing more and let them go.', 'archetype', {'nerve':'+'}), ('Make one small boast, to show how safe you are.', 'scene:129', {'standing':'risk', 'flags.exposed':'set'}), ('Talk louder and faster to drown out what you hear.', 'scene:345', {'nerve':'-', 'standing':'risk'}), ('Run from the thought before it reaches your tongue.', 'scene:195', {'nerve':'-', 'relationships.crowd':'-'}), ('Confess it yourself and have it over.', 'filled', {'standing':'-', 'flags.confessed':'set'})]), dict(id='G03', name='Hiding what you did, with the searchers on their way', predicament='You have hidden what you did, and the people who will look for it are on their way.', actor='person with something to hide', wants='it never to be found', counterpart='the searchers', members=[82, 126, 127, 193, 343], options=[ ('Hide it where no one would think to look.', 'scene:127', {'reason':'+', 'flags.evidence_hidden':'set'}), ('Destroy the evidence the moment you are caught.', 'scene:82', {'nerve':'+', 'standing':'risk'}), ('Open the door calmly and invite them to search.', 'scene:343', {'nerve':'+', 'relationships.searchers':'+'}), ('Plan it so that nothing can ever be traced.', 'scene:193', {'reason':'+', 'money':'+'}), ('Leave before they come.', 'filled', {'standing':'-', 'flags.fled':'set'})]), dict(id='G04', name='Shut in the dark, and no one knows', predicament='You are shut in where no one knows to look, and help is only a few feet away.', actor='person sealed in', wants='to be found', counterpart='the people just out of reach', members=[185, 226, 227, 248, 250, 251, 253, 254, 260, 261], options=[ ('Beat on the door until someone hears.', 'scene:248', {'nerve':'+', 'relationships.rescuers':'risk'}), ('Force your way out by main strength.', 'scene:250', {'nerve':'+', 'flags.escaped':'set'}), ('Lie still and save your breath.', 'filled', {'reason':'+'}), ('Beg the one who shut you in to call it a joke.', 'scene:185', {'relationships.captor':'risk', 'nerve':'-'}), ('Keep trying to make them understand you are alive.', 'scene:253', {'relationships.rescuers':'+'})]), dict(id='G05', name='The one you gave up for dead', predicament='Someone everyone gave up for dead may still be alive, and every hour you do nothing may be too late.', actor='mourner', wants='to have done right by the dead', counterpart='the one taken for dead', members=[111, 149, 150, 151, 160, 161, 247, 249, 252, 359], options=[ ('Open it up and look.', 'scene:249', {'nerve':'+', 'relationships.lost_one':'+'}), ('Say what you heard, now, whatever they think of you.', 'filled', {'nerve':'+', 'standing':'risk'}), ('Keep silent and tell yourself you imagined it.', 'scene:160', {'nerve':'-', 'relationships.lost_one':'-', 'flags.let_them_lie':'set'}), ('Close it up and walk away.', 'scene:151', {'relationships.lost_one':'-', 'flags.let_them_lie':'set'}), ('Fetch someone who knows the signs before you decide.', 'scene:252', {'relationships.physician':'+', 'money':'-'})]), dict(id='G06', name='Death coming slowly, and one cool head', predicament='Death is coming closer step by step, and only a cool head and close watching might find a way out.', actor='trapped person', wants='to survive', counterpart='what is closing in', members=[64, 65, 66, 67, 68, 70, 71, 72, 73, 232, 234, 235, 236, 237, 238, 239, 240, 241, 244], options=[ ('Watch everything around you for a pattern you can use.', 'scene:73', {'reason':'+', 'flags.found_way_out':'set'}), ('Turn what torments you into the means of escape.', 'scene:240', {'reason':'+', 'nerve':'+'}), ('Lie perfectly still through the pain until it works.', 'scene:241', {'nerve':'+'}), ('Struggle against it with everything you have.', 'scene:236', {'nerve':'-'}), ('Give up hope, and find how calm it leaves you.', 'scene:67', {'nerve':'+', 'reason':'+'})]), dict(id='G07', name='Nobody will believe what you saw', predicament='What you lived through sounds like madness, and the listener who matters will not believe a word of it.', actor='witness', wants='to be believed', counterpart='a doubting listener', members=[38, 39, 40, 41, 42, 43, 44, 45, 46, 50, 75, 87, 101, 115, 360], options=[ ('Tell it plainly, without comment, and let them judge.', 'scene:87', {'standing':'risk', 'reason':'+'}), ('Take them to the place and show them.', 'scene:50', {'relationships.listener':'+', 'nerve':'+'}), ('Keep adding proof until they must believe.', 'scene:45', {'relationships.listener':'-', 'standing':'risk'}), ('Stop before their patience runs out.', 'filled', {'relationships.listener':'+', 'standing':'-'}), ('Keep it to yourself.', 'archetype', {'flags.untold':'set'})]), dict(id='G08', name='The reminder that will not go away', predicament='Something keeps turning up to remind you of what you did, and you can neither face it nor get rid of it.', actor='guilty person', wants='peace', counterpart='the reminder that will not go', members=[120, 121, 122, 123, 124, 319, 324, 332, 333, 358, 368], options=[ ('Explain it away.', 'scene:121', {'reason':'+', 'flags.guilty_secret':'set'}), ('Run from it, as far as you can go.', 'scene:332', {'money':'-', 'standing':'-'}), ('Try to destroy it.', 'scene:125', {'flags.violent':'set', 'relationships.household':'-'}), ('Listen to what it is telling you.', 'scene:319', {'standing':'+', 'relationships.conscience':'+'}), ('Drown it in drink.', 'scene:118', {'money':'-', 'nerve':'-'})]), dict(id='G09', name='A rival who is your mirror', predicament='A rival matches you move for move, as if they knew your mind as well as you do.', actor='person used to winning', wants='to come out on top', counterpart='a rival who mirrors them', members=[12, 13, 17, 312, 313, 314, 315, 316, 317, 318, 320, 321, 331], options=[ ('Get inside their head: think exactly as they think.', 'scene:13', {'reason':'+'}), ('Mock their one weakness.', 'scene:315', {'relationships.rival':'-', 'standing':'-'}), ('Act in public as if they are no match for you.', 'scene:313', {'standing':'+', 'relationships.rival':'-'}), ('Catch them off guard when they are unprotected.', 'scene:321', {'relationships.rival':'-', 'nerve':'risk'}), ('Admit they are your equal.', 'filled', {'relationships.rival':'+'})]), dict(id='G10', name='A revenge they cannot escape', predicament='Someone has wronged you once too often, and you want a revenge they cannot escape and will know came from you.', actor='wronged person', wants='revenge without risk', counterpart='the one who wronged them', members=[24, 25, 178, 179, 180, 181, 182, 183, 184, 186, 334, 335, 336], options=[ ('Keep smiling and wait for your moment.', 'scene:178', {'nerve':'+', 'relationships.enemy':'+'}), ('Lure them in through their vanity.', 'scene:179', {'reason':'+', 'relationships.enemy':'risk'}), ('Leave them a sign so they know it was you.', 'scene:25', {'standing':'+', 'relationships.enemy':'-'}), ('Have it out face to face, here and now.', 'scene:335', {'flags.violent':'set', 'standing':'risk'}), ('Let it go.', 'archetype', {'standing':'-', 'relationships.enemy':'+'})]), dict(id='G11', name='Walled off from the danger outside', predicament='You have shut yourself away from a danger everyone else must face, and you are no longer sure the walls will hold.', actor='person behind walls', wants='to stay safe', counterpart='the danger outside', members=[141, 167, 168, 169, 170, 172, 173, 174, 176, 177, 259, 262], options=[ ('Seal the gates and make merry inside.', 'scene:167', {'money':'-', 'relationships.outside':'-', 'flags.walled_in':'set'}), ('Build every precaution you can think of.', 'scene:259', {'money':'-', 'reason':'+'}), ('Face the intruder yourself.', 'scene:176', {'nerve':'+', 'standing':'risk'}), ('Stop leaving the house at all.', 'scene:141', {'nerve':'-', 'relationships.outside':'-'}), ('Go out and live anyway.', 'scene:264', {'nerve':'+', 'standing':'+'})]), dict(id='G12', name='A companion who may not be sane', predicament='Someone close to you speaks of a danger only they can sense, and you cannot tell whether it is real or madness.', actor='companion', wants='to know what is real', counterpart='a friend who may be mad', members=[51, 140, 144, 145, 147, 148, 152, 154, 155, 158, 171, 214, 216], options=[ ('Explain it away, gently, to calm them.', 'scene:155', {'reason':'+', 'relationships.friend':'+'}), ('Hide your own fear so as not to feed theirs.', 'scene:158', {'nerve':'+'}), ('Humour them and go along with it.', 'scene:171', {'relationships.friend':'+', 'standing':'risk'}), ('Take them at their word and look for yourself.', 'filled', {'nerve':'+', 'relationships.friend':'+'}), ('Leave while you still can.', 'archetype', {'relationships.friend':'-'})]), dict(id='G13', name='Sent for by a friend in a bad way', predicament='An old friend in a bad way has sent for you, and the person you find is not the one you remember.', actor='old friend', wants='to help', counterpart='a friend who has changed', members=[88, 104, 133, 139, 143, 212, 213], options=[ ('Go at once, whatever the reason.', 'scene:133', {'relationships.friend':'+', 'money':'-'}), ('Keep them company and try to lift their spirits.', 'scene:143', {'relationships.friend':'+', 'nerve':'-'}), ('Talk to the people looking after them first.', 'scene:105', {'reason':'+', 'relationships.physician':'+'}), ('Do what they ask, though you have doubts.', 'scene:106', {'relationships.friend':'+', 'flags.consented':'set'}), ('Send your regrets and stay away.', 'archetype', {'relationships.friend':'-'})]), dict(id='G14', name='Experimenting on the dying', predicament='Someone who trusts you is dying, and you could use their last hours to learn what no one has ever learned.', actor='practitioner', wants='to learn what lies past death', counterpart='a dying subject', members=[89, 90, 91, 100, 102, 103, 106, 107, 108, 109, 110, 112, 113, 114], options=[ ('Go ahead, with their consent and a witness.', 'scene:106', {'reason':'+', 'standing':'risk', 'flags.experiment':'set'}), ('Keep them where they are, between life and death, and see.', 'scene:113', {'standing':'risk', 'relationships.subject':'-'}), ('Let them go when they beg to die.', 'filled', {'relationships.subject':'+'}), ('Ask one more question.', 'scene:110', {'reason':'+', 'relationships.subject':'-'}), ('Bring them back, whatever it costs.', 'scene:114', {'nerve':'+', 'standing':'-'})]), dict(id='G15', name='At the mercy of someone without pity', predicament='Your life is in the hands of someone without pity, who may be watching to see how you take it.', actor='captive', wants='to live', counterpart='a pitiless captor', members=[26, 28, 29, 47, 163, 164, 165, 166, 222, 228, 229, 230, 231, 242, 243], options=[ ('Keep them interested, one night at a time.', 'scene:28', {'reason':'+', 'relationships.captor':'+'}), ('Endure whatever comes and do not flinch.', 'scene:164', {'nerve':'+'}), ('Learn every inch of where they have put you.', 'scene:229', {'reason':'+'}), ('Break and run.', 'scene:165', {'nerve':'-', 'flags.fled':'set'}), ('Accept it with good grace.', 'scene:49', {'standing':'+', 'nerve':'+'})]), dict(id='G16', name='A sound in the night', predicament='You are awake in the dark and hear something you cannot explain, and reasoning it away no longer works.', actor='person awake at night', wants='to be safe', counterpart='whatever is making the sound', members=[153, 156, 157, 257, 340], options=[ ('Tell yourself it is nothing, and read on.', 'scene:156', {'reason':'+', 'nerve':'-'}), ('Get up and pace until it passes.', 'scene:153', {'nerve':'+'}), ('Sit up and listen, without moving.', 'scene:339', {'nerve':'-'}), ('Go and see what it is.', 'filled', {'nerve':'+', 'flags.faced_fear':'set'})]), dict(id='G17', name='A place that works on you', predicament='A place seems to be working on you, and the harder you reason against the feeling, the stronger it grows.', actor='newcomer to a place', wants='to shake off the feeling', counterpart='the place itself', members=[52, 132, 135, 136, 137, 138, 201, 233], options=[ ('Look at it from another angle to break the spell.', 'scene:132', {'reason':'+', 'nerve':'-'}), ('Examine it closely for plain causes.', 'scene:136', {'reason':'+'}), ('Turn round and leave.', 'archetype', {'nerve':'-', 'standing':'-'}), ('Go in anyway.', 'scene:137', {'nerve':'+', 'flags.entered':'set'})]), dict(id='G18', name='Your companion breaks', predicament='At the worst moment the one person beside you breaks under the terror, and you must choose between saving them and yourself.', actor='survivor', wants='to live', counterpart='a companion broken by fear', members=[69, 74, 159], options=[ ('Give them what they are fighting you for.', 'scene:69', {'relationships.companion':'+', 'nerve':'+'}), ('Show them your plan and beg them to follow.', 'scene:74', {'relationships.companion':'+'}), ('Leave them to their fate.', 'scene:74', {'relationships.companion':'-', 'flags.left_behind':'set'}), ('Shake them back to their senses.', 'scene:159', {'nerve':'+', 'relationships.companion':'risk'})]), dict(id='G19', name='Going to the bad', predicament='You can feel yourself turning into someone worse, and the people who depend on you feel it first.', actor='person going to the bad', wants='the next indulgence', counterpart='those who depend on them', members=[117, 118, 125, 305, 322, 323, 325, 326, 327, 328], options=[ ('Drink to forget what you did last night.', 'scene:118', {'money':'-', 'relationships.household':'-'}), ('Pay for it by cheating people who trust you.', 'scene:326', {'money':'+', 'standing':'risk', 'flags.cheat':'set'}), ('Throw yourself into the next revel.', 'scene:322', {'money':'-', 'standing':'+'}), ('Stop while you still can.', 'filled', {'standing':'+', 'relationships.household':'+'})]), dict(id='G20', name='A love you are not free to have', predicament='The one you love is bound to someone else or lost to death, and a promise still ties you to them.', actor='lover', wants='the one they cannot have', counterpart='a love held by another, or by death', members=[207, 208, 209, 217, 218, 219, 220, 365, 367], options=[ ('Watch from hiding, and act when the moment comes.', 'scene:208', {'relationships.beloved':'+', 'standing':'risk'}), ('Make a secret appointment.', 'scene:209', {'relationships.beloved':'+', 'relationships.spouse':'-', 'flags.secret_affair':'set'}), ('Swear never to love another.', 'scene:365', {'relationships.beloved':'+', 'flags.vow':'set'}), ('Break the vow and love again.', 'scene:368', {'relationships.new_love':'+', 'flags.broke_vow':'set'}), ('Keep the appointment, whatever it costs.', 'scene:220', {'flags.fatal':'set', 'standing':'-'})]), dict(id='G21', name='Someone you love fading into a stranger', predicament='Someone you love is wasting away into a stranger, and you can neither stop it nor bear to watch.', actor='one who stays', wants='the person they knew back', counterpart='a loved one who is fading', members=[142, 348, 353, 354, 355, 364, 366], options=[ ('Promise them whatever will ease their end.', 'scene:365', {'relationships.loved_one':'+', 'flags.vow':'set'}), ('Marry them out of pity.', 'scene:354', {'relationships.loved_one':'+', 'standing':'risk'}), ('Stay, and watch every change.', 'scene:348', {'nerve':'-', 'relationships.loved_one':'+'}), ('Leave the place that reminds you.', 'scene:367', {'relationships.loved_one':'-', 'standing':'+'})]), dict(id='G22', name='A fortune everyone is watching', predicament='You have come into more money than anyone can account for, and everyone is watching to see what you do.', actor='suddenly rich person', wants='to use it their own way', counterpart='the watching world', members=[81, 85, 86, 267, 268], options=[ ('Refuse to say where it came from.', 'scene:81', {'standing':'-', 'flags.suspected':'set'}), ('Hand part of it to your family.', 'scene:268', {'money':'-', 'relationships.family':'+'}), ('Put all of it into one private dream.', 'scene:269', {'money':'-', 'standing':'risk'}), ('Keep the secret of how until you choose to share it.', 'scene:85', {'money':'+', 'reason':'+'})]), dict(id='G23', name='Hidden in plain sight', predicament='Something you must find has been hidden by someone cleverer than you, and all your careful searching has failed.', actor='searcher', wants='what was hidden', counterpart='a cunning hider', members=[4, 5, 6, 7, 8, 9, 11, 14, 19, 20, 21, 22, 83, 84], options=[ ('Search it all again, harder.', 'scene:8', {'money':'-'}), ('Pay someone cleverer to find it.', 'scene:10', {'money':'-', 'relationships.adviser':'+'}), ('Think as the hider thinks, and look where it is too obvious to see.', 'scene:19', {'reason':'+'}), ('Call on them with a pretext and look around.', 'scene:20', {'reason':'+', 'relationships.hider':'risk'}), ('Have them waylaid and searched.', 'scene:5', {'standing':'risk', 'relationships.hider':'-'})]), dict(id='G24', name='A world of your own', predicament='You have the means to shut out the world and build a place entirely to your own design.', actor='dreamer with means', wants='a world of their own', counterpart='the world outside', members=[197, 199, 269, 270, 278, 279, 280, 361, 362, 363], options=[ ('Go as far from everyone as you can.', 'scene:279', {'relationships.outside':'-', 'flags.withdrawn':'set'}), ('Stay near enough to come back when you choose.', 'scene:279', {'relationships.outside':'+'}), ('Pour everything you have into it.', 'scene:278', {'money':'-', 'standing':'+'}), ('Share it with one person only.', 'scene:361', {'relationships.companion':'+'})]), ] # 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:'high', 2:'low', 3:'low', 4:'middle', 5:'middle', 6:'middle', 7:'high', 8:'high', 9:'high', 10:'high', 11:'middle', 12:'middle', 13:'high', 14:'low', 15:'middle', 16:'high', 17:'middle', 18:'high', 19:'low', 20:'high', 21:'middle'} # Story 0's protagonist is the reasoner, a gentleman of reduced means, not the minister he outwits. # Story 3's is the poor chemist, not the commentator. Story 8's is the stately man on the rock. # Story 19's narrator lives in the old man's house as a dependant, so he ranks low.