"""Hand-built reference grouping of the Holmes 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: nerve and cunning, reused from the Jacobs reference, and one new label proposed for this corpus, observation (noticing what others miss; reading a person or a scene). """ G = [ dict(id='G01', name='The evidence all points at you', predicament='Something terrible has happened, every sign points at you, and the people deciding will not look past the obvious.', actor='accused person', wants='to be cleared', counterpart='those who have already judged them', members=[93, 94, 96, 99, 101, 171, 198, 294, 327], options=[ ('Tell your story plainly and trust it to hold.', 'scene:99', {'standing':'risk', 'relationships.authority':'+'}), ('Deny everything and call the witness mistaken.', 'scene:171', {'nerve':'+', 'relationships.accuser':'-', 'standing':'risk'}), ('Accept arrest calmly, as no more than you deserve.', 'scene:96', {'standing':'-', 'relationships.authority':'+'}), ('Find someone outside the official inquiry to look again.', 'scene:95', {'money':'-', 'relationships.investigator':'+'}), ('Struggle and protest as they take you.', 'scene:198', {'standing':'-', 'relationships.authority':'-', 'flags.resisted':'set'})]), dict(id='G02', name='The truth would clear you, and cost someone else', predicament='You are suspected of something you did not do, and the one explanation that would clear you would expose someone else.', actor='suspect with a secret', wants='to be cleared without betraying anyone', counterpart='their accusers', members=[100, 187, 328, 330, 346], options=[ ('Refuse to say, whatever it costs you.', 'scene:100', {'standing':'-', 'flags.secret_kept':'set', 'relationships.protected':'+'}), ('Tell the whole truth and let it fall where it will.', 'filled', {'standing':'+', 'relationships.protected':'-'}), ('Ask for a few minutes alone to put things right yourself.', 'scene:328', {'nerve':'+', 'relationships.authority':'risk'}), ('Keep up a disguise rather than be recognised.', 'scene:187', {'cunning':'+', 'standing':'risk'})]), dict(id='G03', name='Someone holds proof of your past', predicament='Someone from your past holds proof that could wreck the life or marriage you are building now.', actor='person with a past', wants='the proof, or silence', counterpart='someone who knows', members=[10, 11, 123, 124, 293, 299], options=[ ('Pay whatever they ask.', 'scene:123', {'money':'-', 'relationships.blackmailer':'+'}), ('Try to buy or steal the proof back.', 'scene:10', {'money':'-', 'flags.broke_law':'set'}), ('Hire someone discreet to deal with it.', 'scene:11', {'money':'-', 'relationships.investigator':'+'}), ('Keep the occasion quiet and have help at the door.', 'scene:299', {'cunning':'+', 'relationships.former':'-'}), ('Silence them for good.', 'scene:124', {'flags.violent':'set', 'standing':'risk'})]), dict(id='G04', name='A warning nobody else takes seriously', predicament='You have had a warning you believe means real danger, and the people who should protect you think you imagine it.', actor='threatened person', wants='to be believed and kept safe', counterpart='those who dismiss the warning', members=[133, 135, 137, 138, 140, 141, 222, 227, 230, 257], options=[ ('Laugh it off as someone\'s joke.', 'scene:138', {'nerve':'+', 'flags.marked':'set'}), ('Go to the authorities anyway.', 'scene:140', {'relationships.authority':'-', 'standing':'-'}), ('Seek help from someone outside the official channels.', 'scene:230', {'money':'-', 'relationships.investigator':'+'}), ('Lock yourself in and wait.', 'scene:135', {'nerve':'-'}), ('Give the threatener what they are asking for.', 'scene:142', {'relationships.pursuer':'+', 'flags.gave_in':'set'})]), dict(id='G05', name='The offer that pays too well', predicament='You badly need money, and a stranger offers far too much for easy work on conditions you are told not to question.', actor='person short of money', wants='the pay', counterpart='a generous stranger', members=[37, 38, 40, 41, 42, 43, 260, 261, 262, 264, 265, 357, 358, 359, 360, 361, 362], options=[ ('Take it and ask no questions.', 'scene:265', {'money':'+', 'flags.took_the_fee':'set'}), ('Refuse the one condition you cannot stomach.', 'scene:360', {'standing':'+', 'money':'-'}), ('Take it, but tell someone where you are going.', 'scene:362', {'money':'+', 'relationships.adviser':'+'}), ('Ask what the work is really for.', 'scene:262', {'observation':'+', 'relationships.employer':'risk'}), ('Turn it down.', 'archetype', {'money':'-'})]), dict(id='G06', name='Alone in a house you cannot read', predicament='You have come alone to a remote house where nothing is explained, and the people in it watch you closely.', actor='newcomer', wants='to do the job and get out', counterpart='the household', members=[266, 267, 268, 269, 271, 272, 368, 371, 372, 373, 375, 376], options=[ ('Do as you are told and keep your eyes open.', 'scene:373', {'observation':'+', 'relationships.employer':'+'}), ('Find a way to see what is going on behind your back.', 'scene:374', {'observation':'+', 'cunning':'+', 'relationships.employer':'risk'}), ('Keep your spirits up and see it through.', 'scene:269', {'nerve':'+'}), ('Leave at the first chance, pay or no pay.', 'filled', {'money':'-', 'nerve':'-'})]), dict(id='G07', name='You have seen too much', predicament='You have stumbled on something the people around you meant to keep hidden, and they may know you have seen it.', actor='person who knows too much', wants='to get away safely', counterpart='those with the secret', members=[132, 274, 279, 378, 379, 380, 381], options=[ ('Say plainly that you know.', 'scene:274', {'nerve':'+', 'flags.in_danger':'set'}), ('Play innocent and say only that it frightened you.', 'scene:381', {'cunning':'+'}), ('Slip back in when the door is left open.', 'scene:379', {'observation':'+', 'relationships.host':'-', 'flags.trespassed':'set'}), ('Quietly send word to someone outside.', 'scene:382', {'relationships.adviser':'+'})]), dict(id='G08', name='Waiting in the dark for them to come', predicament='You are lying in wait in the dark for someone dangerous, and must keep still until the moment comes.', actor='watcher', wants='to catch them in the act', counterpart='a dangerous intruder', members=[57, 58, 246, 247, 248], options=[ ('Keep still and wait for the signal.', 'scene:58', {'nerve':'+'}), ('Strike the moment you hear them.', 'scene:247', {'nerve':'+', 'flags.violent':'set'}), ('Keep your weapon ready and use it if they fight.', 'scene:57', {'nerve':'+', 'flags.armed':'set'}), ('Show a light and scare them off.', 'filled', {'nerve':'-', 'standing':'-'})]), dict(id='G09', name='Someone dangerous is after the person you are helping', predicament='Someone who came to you for help is being hunted by a dangerous person, and their safety depends on what you advise.', actor='protector', wants='to keep them safe', counterpart='a dangerous pursuer', members=[142, 143, 146, 233, 234, 237, 242, 363, 364], options=[ ('Tell them to give the pursuer what he wants.', 'scene:142', {'relationships.client':'+', 'flags.gave_in':'set'}), ('Stay the night beside them.', 'scene:242', {'nerve':'+', 'relationships.client':'+'}), ('Send them home and promise to come if called.', 'scene:143', {'relationships.client':'risk'}), ('Get them away to family.', 'scene:237', {'relationships.family':'+', 'money':'-'}), ('Face the pursuer down when he comes to your door.', 'scene:234', {'nerve':'+', 'relationships.pursuer':'-'})]), dict(id='G10', name='Asked to act without being told why', predicament='Someone you trust asks you to take a risk, perhaps break the law, without telling you what the plan is.', actor='loyal friend', wants='to help without being made a fool', counterpart='the friend asking', members=[19, 20, 24, 52, 244, 383], options=[ ('Agree at once; you trust them.', 'scene:19', {'relationships.friend':'+', 'flags.broke_law':'set'}), ('Go, and bring a weapon.', 'scene:52', {'nerve':'+'}), ('Do your part, though your conscience pricks.', 'scene:24', {'relationships.friend':'+', 'standing':'-'}), ('Ask to be told the whole plan first.', 'filled', {'relationships.friend':'-'})]), dict(id='G11', name='Someone close is not who they seem', predicament='Someone you have welcomed close is not who they claim, and you have not yet let yourself notice the signs.', actor='trusting person', wants='to keep someone they value', counterpart='a person hiding who they are', members=[36, 47, 72, 73, 74, 324, 343, 344], options=[ ('Count yourself lucky and ask nothing.', 'scene:36', {'money':'+', 'relationships.intimate':'+'}), ('Keep them secret from the rest of your family.', 'scene:72', {'relationships.intimate':'+', 'relationships.family':'-'}), ('Trust your own doubts about them.', 'scene:324', {'observation':'+', 'relationships.intimate':'-'}), ('Ask someone outside to look into them.', 'filled', {'observation':'+', 'money':'-'})]), dict(id='G12', name='A stranger who will not give a true name', predicament='A stranger wants your help but hides who they are, and you must decide whether to deal with them.', actor='person approached', wants='to know who they are dealing with', counterpart='a stranger under a false name', members=[7, 8, 209, 210], options=[ ('Let them know you have already seen through it.', 'scene:8', {'observation':'+', 'relationships.stranger':'-'}), ('Insist on the real name before going on.', 'scene:210', {'relationships.stranger':'risk'}), ('Play along and help anyway.', 'filled', {'money':'+'}), ('Refuse to deal with anyone who hides their face.', 'archetype', {'money':'-', 'standing':'+'})]), dict(id='G13', name='A powerful client needs your discretion', predicament='Someone far above you needs a delicate favour kept quiet, and it is not the kind of request you can easily refuse.', actor='person of modest standing', wants='the reward without being used', counterpart='a powerful client', members=[9, 12, 287, 295, 319], options=[ ('Take their money and their secret.', 'scene:12', {'money':'+', 'relationships.patron':'+'}), ('Keep their confidences even from other grand names.', 'scene:295', {'standing':'+', 'relationships.patron':'+'}), ('Name conditions of your own.', 'scene:320', {'standing':'+', 'relationships.patron':'risk'}), ('Let them see you are not impressed.', 'scene:30', {'standing':'risk', 'relationships.patron':'-'})]), dict(id='G14', name='Holding something too valuable to lose', predicament='Something far too valuable to replace has been left in your keeping, and you know someone may come for it.', actor='custodian', wants='to keep it safe', counterpart='whoever wants it', members=[55, 56, 197, 200, 320, 321, 322], options=[ ('Keep it on you at all times.', 'scene:322', {'nerve':'+', 'flags.carrying_valuables':'set'}), ('Lock it away and tell no one.', 'archetype', {'cunning':'+'}), ('Tell your household about it.', 'scene:325', {'relationships.family':'+', 'flags.talked':'set'}), ('Return it at once and claim the reward.', 'scene:197', {'money':'+'}), ('Set a trap for whoever comes for it.', 'scene:57', {'cunning':'+', 'nerve':'+'})]), dict(id='G15', name='The game is up', predicament='You have been caught out in a deception, faced with proof, and must decide how to carry yourself now.', actor='deceiver', wants='to get off lightly', counterpart='the person who caught them', members=[59, 60, 83, 84, 85, 87, 183, 211, 212], options=[ ('Keep your dignity and go quietly.', 'scene:60', {'standing':'+', 'relationships.captor':'+'}), ('Insist nothing you did was against the law.', 'scene:85', {'cunning':'+', 'standing':'-'}), ('Throw yourself on their mercy.', 'scene:212', {'standing':'-', 'relationships.captor':'+'}), ('Make a run for it.', 'scene:88', {'nerve':'+', 'flags.fugitive':'set'})]), dict(id='G16', name='Mercy or the law', predicament='You have caught someone who did wrong, and handing them over would be lawful but not what you think is just.', actor='person holding the truth', wants='justice as they see it', counterpart='the culprit', members=[82, 88, 120, 125, 184, 188, 216, 217, 351], options=[ ('Let them go if they swear never to do it again.', 'scene:216', {'relationships.culprit':'+', 'flags.spared_culprit':'set'}), ('Keep their confession back unless an innocent needs it.', 'scene:120', {'relationships.culprit':'+', 'flags.secret_kept':'set'}), ('Hand them to the authorities.', 'archetype', {'standing':'+', 'relationships.authority':'+', 'relationships.culprit':'-'}), ('Punish them yourself.', 'scene:88', {'nerve':'+', 'flags.violent':'set'}), ('Trade your silence for what they took.', 'scene:351', {'money':'+', 'relationships.authority':'risk'})]), dict(id='G17', name='Someone close has vanished', predicament='Someone close to you has vanished without a word, and everyone around you has a different idea of why.', actor='person left behind', wants='to know what happened', counterpart='the missing person', members=[68, 75, 165, 166, 174, 175, 291, 300, 341, 342], options=[ ('Go to the authorities at once.', 'scene:166', {'relationships.authority':'+'}), ('Pay someone to find them.', 'scene:68', {'money':'-', 'relationships.investigator':'+'}), ('Hush it up.', 'scene:292', {'standing':'risk'}), ('Decide they must have lost their mind.', 'scene:300', {'standing':'+', 'relationships.missing':'-'}), ('Wait for word.', 'archetype', {'relationships.missing':'+'})]), dict(id='G18', name='Keeping faith when everyone says give up', predicament='Everyone tells you to give up on someone you love, and you are sure they are wrong about them.', actor='loyal person', wants='to be proved right', counterpart='everyone who has given up', members=[76, 77, 103, 104, 177], options=[ ('Refuse to give up on them.', 'scene:77', {'relationships.faithful':'+', 'standing':'-'}), ('Tell what you know, even if it embarrasses you.', 'scene:104', {'standing':'-', 'relationships.faithful':'+'}), ('Bring in outside help.', 'scene:95', {'money':'-', 'relationships.investigator':'+'}), ('Accept what everyone says and move on.', 'archetype', {'relationships.faithful':'-'})]), dict(id='G19', name='A guardian who lives on your money', predicament='The relative who controls your money would lose it if you married, and is doing everything to keep you single.', actor='dependent', wants='their own life and money', counterpart='a guardian', members=[69, 70, 71, 86, 224, 235, 388], options=[ ('Leave your money in their hands to keep the peace.', 'scene:70', {'relationships.guardian':'+', 'money':'-'}), ('Go out anyway, against their wishes.', 'scene:71', {'nerve':'+', 'relationships.guardian':'-'}), ('Refuse to sign it over.', 'scene:388', {'money':'+', 'relationships.guardian':'-', 'flags.in_danger':'set'}), ('Marry, and claim what is yours.', 'scene:230', {'money':'+', 'relationships.guardian':'-'}), ('Have someone outside the family read the terms.', 'scene:235', {'observation':'+', 'money':'-'})]), dict(id='G20', name='Everyone has decided, and you think they are wrong', predicament='The people in charge have settled on an answer, and you are almost alone in thinking it cannot be true.', actor='doubter', wants='the real answer', counterpart='the officials in charge', members=[95, 97, 102, 110, 115, 116, 172, 301, 302, 303, 304, 331, 332], options=[ ('Assume the accused is telling the truth and see where it leads.', 'scene:102', {'observation':'+', 'relationships.authority':'-'}), ('Give the officials your answer and let them ignore it.', 'scene:115', {'standing':'risk', 'relationships.authority':'-'}), ('Mock their theory to their face.', 'scene:301', {'standing':'+', 'relationships.authority':'-'}), ('Point out that their theory asks the impossible.', 'scene:332', {'observation':'+', 'relationships.client':'+'}), ('Go along with the official view.', 'archetype', {'relationships.authority':'+'})]), dict(id='G21', name='A frightened stranger at your door', predicament='A frightened stranger with nobody else to turn to arrives asking for help, and may not be able to pay.', actor='helper', wants='to do right without being dragged under', counterpart='a stranger in trouble', members=[67, 129, 154, 155, 219, 221, 255, 317, 318, 356], options=[ ('Take it on, pay or no pay.', 'scene:221', {'relationships.client':'+', 'money':'-'}), ('Calm them before you ask anything.', 'scene:317', {'relationships.client':'+'}), ('Go yourself, rather than let them go.', 'scene:156', {'nerve':'+', 'relationships.client':'+'}), ('Name your fee first.', 'filled', {'money':'+', 'relationships.client':'-'}), ('Tell them it is none of your business.', 'filled', {'relationships.client':'-', 'standing':'-'})]), dict(id='G22', name='Read at a glance', predicament='Someone you barely know tells you private things about your life, read from signs you never knew you gave.', actor='person read', wants='to keep some privacy', counterpart='a sharp-eyed stranger', members=[2, 3, 33, 34, 220], options=[ ('Ask how it was done.', 'scene:3', {'relationships.observer':'+'}), ('Decide it was nothing clever after all.', 'scene:34', {'relationships.observer':'-', 'standing':'+'}), ('Grow wary of what else they can see.', 'scene:220', {'observation':'+'}), ('Laugh and take it in good part.', 'archetype', {'relationships.observer':'+'})]), dict(id='G23', name='Tested by someone sharper', predicament='Someone sharper than you asks what you noticed, in front of others, and you know you have missed the point.', actor='companion', wants='not to look a fool', counterpart='a sharper mentor', members=[4, 78, 79, 193, 194, 196], options=[ ('Describe everything you saw and hope it is enough.', 'scene:78', {'observation':'+'}), ('Admit you can see nothing.', 'scene:193', {'relationships.mentor':'+', 'standing':'-'}), ('Call the whole thing a waste of effort.', 'scene:196', {'relationships.mentor':'-'}), ('Work it out yourself while they are away.', 'scene:106', {'observation':'+'})]), dict(id='G24', name='Going among them in disguise', predicament='To learn what you need, you must pass among strangers as someone humbler than you are, and not be recognised.', actor='person in disguise', wants='information', counterpart='the people being watched', members=[13, 14, 23, 159, 161, 339, 350], options=[ ('Pass yourself off as someone out of work.', 'scene:14', {'observation':'+', 'cunning':'+'}), ('Fake an injury to be let in.', 'scene:23', {'cunning':'+', 'relationships.target':'-'}), ('Sit among them in plain sight.', 'scene:159', {'nerve':'+', 'standing':'risk'}), ('Buy what you need from someone in their household.', 'scene:350', {'money':'-', 'observation':'+'})]), dict(id='G25', name='A secret life behind the respectable one', predicament='Behind the life everyone sees, you keep another one secret from the people closest to you.', actor='person with a double life', wants='to keep both lives', counterpart='the family who do not know', members=[108, 122, 185, 186, 307], options=[ ('Keep the two lives apart and say nothing.', 'scene:186', {'money':'+', 'flags.double_life':'set'}), ('Confess it to the one person it would hurt most.', 'filled', {'relationships.spouse':'risk', 'standing':'-'}), ('Give it up and swear never to go back.', 'scene:188', {'money':'-', 'standing':'+'}), ('Wait for the secret to solve itself.', 'scene:108', {'relationships.spouse':'-'})]), dict(id='G26', name='Letting someone else take the blame', predicament='Someone else is suspected of what you did, and you could keep suspicion where it is.', actor='person at fault', wants='to escape blame', counterpart='the one suspected', members=[119, 213, 326, 335, 336], options=[ ('Speak up to save them.', 'scene:119', {'standing':'-', 'relationships.accused':'+'}), ('Point at someone else.', 'scene:326', {'cunning':'+', 'relationships.accused':'-', 'flags.guilty_secret':'set'}), ('Plead for the whole matter to be dropped.', 'scene:335', {'cunning':'+', 'relationships.family':'risk'}), ('Run, and let the case against them collapse.', 'scene:212', {'flags.fugitive':'set', 'relationships.accused':'+'})]), dict(id='G27', name='Living with someone dangerous', predicament='You live under the roof of someone violent who controls your life, and must decide how far to shield or defy them.', actor='dependent', wants='to be safe', counterpart='a violent head of household', members=[223, 225, 231, 382], options=[ ('Pay to cover up their violence.', 'scene:225', {'money':'-', 'relationships.household':'+'}), ('Make excuses for them.', 'scene:231', {'relationships.household':'+', 'standing':'-'}), ('Slip out and send for help.', 'scene:382', {'nerve':'+', 'relationships.household':'risk'}), ('Lock your door at night.', 'scene:227', {'nerve':'-'})]), dict(id='G28', name='They called it an accident', predicament='Someone close to you died, it was ruled an accident, and you cannot shake the belief that it was nothing of the kind.', actor='survivor', wants='the truth', counterpart='the official verdict', members=[136, 139, 229], options=[ ('Accept the verdict.', 'archetype', {'relationships.authority':'+'}), ('Keep looking for proof yourself.', 'scene:139', {'observation':'+'}), ('Take it to someone outside the official inquiry.', 'scene:230', {'money':'-', 'relationships.investigator':'+'})]), dict(id='G29', name='Arriving too late', predicament='You arrive to act at last, and find the person you were after has already slipped away or struck.', actor='pursuer', wants='to catch them', counterpart='the quarry', members=[28, 150, 151, 282, 283, 386], options=[ ('Make it personal and go after them yourself.', 'scene:151', {'nerve':'+', 'relationships.quarry':'-'}), ('Search what they left behind.', 'scene:28', {'observation':'+'}), ('Admit you were beaten.', 'scene:30', {'standing':'-'}), ('Send word ahead to have them stopped.', 'scene:153', {'cunning':'+'})]), dict(id='G30', name='Getting them to give it away', predicament='Someone is hiding what you need to know, and you must get them to reveal it without realising they have.', actor='questioner', wants='the hidden fact', counterpart='someone keeping it back', members=[22, 26, 49, 201, 206, 207], options=[ ('Stage an alarm and watch where they run.', 'scene:26', {'cunning':'+', 'relationships.target':'-'}), ('Call on a pretext and look for one sign.', 'scene:49', {'observation':'+'}), ('Draw them into a bet.', 'scene:206', {'cunning':'+', 'money':'-'}), ('Set a small test and watch how they react.', 'scene:201', {'observation':'+'})]), dict(id='G31', name='You were only a pawn', predicament='You begin to see that you were hired or befriended only to serve someone else\'s hidden scheme.', actor='person used', wants='to understand, and get even or get clear', counterpart='whoever used them', members=[44, 45, 46, 273, 374, 377, 384], options=[ ('Go after the people who used you.', 'scene:46', {'nerve':'+', 'money':'-'}), ('Count what you were paid and let it go.', 'filled', {'money':'+'}), ('Keep quiet about what you know until you are safe.', 'scene:377', {'cunning':'+'}), ('Confront them with it.', 'scene:274', {'nerve':'+', 'flags.in_danger':'set'})]), dict(id='G32', name='Someone on the inside helps you get away', predicament='Someone inside a dangerous household warns you or helps you escape, at a risk to themselves.', actor='person in danger', wants='to get out alive', counterpart='an insider who helps', members=[270, 276, 277, 284, 389], options=[ ('Heed the warning and go.', 'scene:276', {'relationships.insider':'+', 'money':'-'}), ('Ignore it and stay for the fee.', 'scene:270', {'money':'+', 'flags.in_danger':'set'}), ('Wait to see they are not hurt for helping you.', 'scene:277', {'relationships.insider':'+', 'nerve':'+'}), ('Pay the household to look the other way.', 'scene:389', {'money':'-', 'relationships.household':'+'})]), ] # 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. # Judged by the client whose trouble drives the story, since the investigator is the same in all twelve. STANDING = {0:'high', 1:'low', 2:'low', 3:'middle', 4:'middle', 5:'middle', 6:'low', 7:'middle', 8:'low', 9:'high', 10:'high', 11:'low'} # Story 6's trouble is carried by a poor scholar, a hotel attendant and a workman, all low. # Story 5's protagonist is a respectable suburban gentleman whose income is secretly from begging.