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,186 @@
# Plain Tales reference set: *Plain Tales from the Hills* (1888)
A hand-made comparison baseline for the story-to-pack pipeline, a sibling of the Jacobs set in
`../jacobs/` and the Bierce set in `../bierce/`. Claude read every scene and wrote each summary,
predicament, group and option. **No local inference was used.** Compare the local-model runs against it.
Do not treat it as ground truth: it is one careful reading.
| File | What it is |
| --- | --- |
| `corpus/plain-tales-from-the-hills.txt` | Project Gutenberg #1858, Rudyard Kipling, *Plain Tales from the Hills* |
| `split_gutenberg.py` | → `stories.json` (35 stories, split on the body's upper-case headings and checked against the contents) and `chunks.json` (287 scenes, same 320-word paragraph rule as `../chunk.py`) |
| `claude/batches/sNN.json` | per story: `{chunk, story, summary, predicament}`, the same schema as `../jacobs/claude/batches/` |
| `claude/groups_src.py` | the groups, options and per-story protagonist standing |
| `claude/build.py` | checks everything, then writes `claude/records.json` and `claude/groups.json` (unchanged from Jacobs: it resolves paths relative to itself) |
| `claude/page.py` | → `claude/REFERENCE.html`, the readable page |
Rebuild: `python3 split_gutenberg.py && cd claude && python3 build.py && python3 page.py`.
## What is in it
- **287 predicaments**: one sentence each (median 21 words, min 16, max 24), written to the
`redescribe.py` rules: no names, jobs, ranks, places or story-only objects, and no race,
nationality, caste or religion. The `topic_words` leak check flags 85 of 287. 82 are role or kin
words (wife, rival, husband, newcomer, suitor, guest, patron, host, thief), kept on purpose because
the design's cast is roles. The other 3 are "judge" used as a verb and "model" and "patient" used
as adjectives. Rank is kept only as relation: *someone above you*, *a superior*, *a junior*,
*a subordinate*, *the one at the top*, *a deputy*.
- **29 groups**, each a situation that recurs in **three or more stories**, has at least five scenes,
and draws no more than half its members from one story (8 span 3 stories, 14 span 4, 5 span 5,
2 span 6). **All 29 pass the catalogue's recurrence rule.** Each scene sits in at most one group:
**184 are assigned and 103 fit nothing that recurs**. 34 of the 35 stories feed at least one group.
*The Story of Muhammad Din* feeds none.
- **Options**: 3 to 5 per group, 135 in all (19 groups have 5, 10 have 4). 108 come from what
someone in a scene did or refused to do (`scene:N`), 10 are archetypes and 17 fill gaps. **30 scene
options cite a scene outside their own group.** That is looser than DESIGN.md's "drawn from other
scenes in the cluster", and `groups.json` marks each one `in_group: false`. As in Bierce, most are
the scene just before or after a member, where the character acts.
- **Moves**: spine paths with a direction only (`+`, `-`, `risk`, `set`). There are no magnitudes,
as the design requires. Relationships are moved 113 times, `standing` 66, flags 49, the two skills
39 and `money` only 17. The relationship roles are mostly institutional: `superior`, `the_top`,
`patron`, `power_broker`, `company`, `colleagues`, `old_hands`, `mentor`, `protege` and `gatekeeper`,
besides `beloved`, `spouse`, `family` and `rival`. Flags record what the player did:
`placed_by_favour`, `favour_owed`, `overworked`, `secret_marriage`, `kind_lie`, `cover_story`,
`vendetta`, `kept_silent`, `double_life` and others.
- **Skills** proposed for this corpus: `tact`, for handling people, reading the unwritten rules and
keeping a thing quiet, and `cunning`, reused from Jacobs, for the trick, the lever and the secret
put to use. Nerve and wits hardly arise. This book's dangers are social.
- **Stage** comes from protagonist standing, judged **per story, not per scene**, in `STANDING` in
`groups_src.py`. Subalterns, first-post juniors, a signaller, an orphan, an addict and a loafer rank
low. Officials of some years' standing, their wives and the narrator rank middle. A colonel's
household, the viceroy's circle, the supreme council and a senior department's indispensable expert
rank high. The groups come out 15 low, 12 middle and 2 high. Two stories are hard calls, and both
are noted in the file. *Watches of the Night* is judged by the colonel's household, which bears its
consequences. *The Rout of the White Hussars* is judged middle, because its scenes alternate between
the colonel and the subaltern who defies him.
## Against the catalogue
The catalogue has 82 entries (`../catalogue/v2/catalogue_v2_src.py`). The mapping rule is the
catalogue's own: a group joins an entry when it is the same predicament seen from the same side.
**Fifteen groups match an existing entry. Four of them sharpen it:**
- **G01 A word from someone powerful → `patron`.** The v1 entry is about being *seen* with the great.
Kipling makes it about **who gets the post**. The place goes to whoever has someone influential
speaking for them: a shiftless nephew's job, an appointment won through a society woman, an
accountant foisted on a bank by a politician and about to be replaced by a director's nominee.
- **G06 Good work that counts for nothing → `overlooked`** (the v2 widening "good work that goes
unrecognised"). Kipling adds the edge: work that **shows up your seniors** is resented, not merely
unseen.
- **G09 The rules nobody tells you** and **G10 Sent out young, with nobody watching → `newcomer`.**
Both are the newcomer's predicament, split in two. G09 is the clash with unwritten rules: the
know-all junior, the lecturing accountant, the ragged recruit. G10 is the **young man ruined by his
first posting**, going wrong far from home while nobody who sees it says a word. That is how Kipling
sharpens the entry, so it is not treated as a new one.
- **G20 Swallowing it from someone above → `power_over_you`.** It is sharpened by *Miss Youghal's
Sais*, where a man in disguise must take insults from people he outranks.
The other eleven map directly: G12 → `family_against_your_path` (the arranged-match side of it),
G13 → `rival`, G15 → `wrongly_judged`, G17 → `revenge`, G23 → `promised_elsewhere`, G25 → `too_late`,
G26 → `sign`, G27 → `dread`, G28 → `home_unseen` and G29 → `self_betrayal`. G17 is a new register for
`revenge`: cold, comic and bloodless. The weapon is a hoax, a wager or the bureaucracy itself, and
never a blow.
**Fourteen are new situation types.** Each names its nearest neighbour, so a reviewer can merge it
if it is judged a near-duplicate:
- **Career politics:** G02 **the power behind the title** (the real decider has no title: a
colonel's wife who breaks marriages, a society woman who can have a man gazetted on leave, a
private secretary who runs the viceroy; neighbour `patron`). G03 **one chance to be heard at the
top** (reaching the one person who can decide; neighbour `patron`). G04 **a change imposed by
someone who does not know the ground** (a new colonel sells the drum-horse, a council drafts a
tenancy rule nobody asked for; neighbour `orders_without_reasons`). G05 **knowing what goes on
below** (knowledge nobody above has asked for, used to settle a matter; neighbour `despised`).
- **Work and strain:** G07 **work nobody sees** (neighbour `dead_end`). G08 **the strain gives way**,
the breakdown that makes it visible (neighbour `courage_doubted` for the jockey only).
- **Marriage and prospects:** G11 **the marriage or the career** (a match that would sink your
prospects, or prospects that forbid the match; neighbour `duty_against_love`, but the pull here is
ambition, not duty).
- **Reputation:** G14 **everyone will hear of it** (containing the talk in a place where everyone
knows everyone; neighbours `caught_out`, `cover_up_spiral`). G16 **a lie to spare them** (neighbour
`their_secret`). G18 **it fell into your hands** (a misdelivered secret, an overheard story, a
quirk of the ground, used for advantage; neighbour `seen_too_much`, but the decision is opportunity,
not danger).
- **Onlookers and outsiders:** G19 **saving them from themselves**, which is Kipling's "playing
Providence" (neighbour `losing_them`, but the meddler acts behind the other's back). G21 **seeing
it, and saying nothing** (neighbour `safe_while_others_suffer`). G22 **belonging to neither side**
(neighbours `station`, `outside_looking_in`). G24 **devoted to someone who does not care**
(neighbour `used`).
**The brief's eight targets**, and where each landed:
| Target | Found as | Strength |
| --- | --- | --- |
| a post decided by patronage | G01, G03 | strong: 5 stories |
| a young man ruined by his first posting | G10 (and *In the Pride of His Youth*, whose scenes run through G06, G07, G08, G10, G11 and G25) | strong |
| gossip that decides a career | G14, G15 | partial: gossip decides *reputation*, and only *The Bronckhorst Divorce-Case* ties it to a career outright |
| a superior's wife who wields his power | G02 | thin: only *Watches of the Night* is literally that, so G02 generalises to unofficial power |
| a clever junior who outwits the system | G03, G17, G18 | strong, but split by method: forcing a hearing, a hoax, a found secret |
| overwork nobody sees | G07, G08 | strong: 6 stories |
| a career sacrificed for a marriage, or the reverse | G11 | strong: 4 stories, both directions |
| a newcomer who does not know the unwritten rules | G09 | strong |
## How this corpus differs from Jacobs and Bierce
It has the most stories of any reference set, 35, but they are short: 5 to 13 scenes each, 287 in all.
So the bar was kept at three stories per group, and 29 groups cleared it.
**It is one small institutional world.** Where Bierce recurs on fear and duty, Kipling recurs on
posts, patronage, reputation and marriage prospects. The moves show it: `relationships` and
`standing` dominate, `money` is light again (17 moves), and the proposed skills are social
(`tact`, `cunning`) rather than physical. The predicaments transplant readily. "Someone set over you
is imposing a change on something they do not understand" is as true of a freight yard as of a
cavalry regiment.
**A recurring cast inflates recurrence.** Mrs Hauksbee appears in four stories, and Mrs Reiver
and Strickland each appear in two and are mentioned in a third. A group drawn largely from one recurring character is partly story identity
under another name. The groups were checked for this. G02 and G19 each have two Hauksbee stories,
but G02 has two other stories and G19 three that have nothing to do with her. G05 has two Strickland stories and two
without him. A tool should still track characters who cross stories, as well as the stories themselves.
**The narrator's essays open many stories.** Kipling often begins with a general reflection: the
sheltered boy (14), the creed that nothing matters (16), the rottenness of racing (148), the
earnestness that governments reward (197), every man thinking his work the pivot (262). Some become
group members, because they name the situation the story then dramatises. Others stay unassigned.
They are the scenes a summariser is most likely to turn into topics.
**Unassigned (103)** is mostly plot mechanics with no second instance: Golightly's ride through the
rain (118-121), the opium den's inventory (239-249), the regimental field day (209), the love-charm's
history. It also includes three verse-only epigraph scenes (126, 147, 225) and the whole of
*The Story of Muhammad Din*, a quiet sketch of a friendship with a servant's child that recurs nowhere.
## How the colonial material was handled
Kipling writes British India with the racial and imperial assumptions of 1888. Several stories turn
on them: a convert returning to her people (*Lispeth*), a mixed-descent signaller whose courage the
narrator credits to "white blood" (*His Chance in Life*), an "impossible" match with a girl of mixed
descent (*Kidnapped*), a love affair across the colour line (*Beyond the Pale*), and men who have
"gone native" (*To Be Held for Reference*, *The Gate of a Hundred Sorrows*). The rules applied:
- **Predicaments name no race, nationality, caste or religion,** and never use them as a role word.
They carry the human situation. The signaller is "a lowly junior who takes command of a crisis
himself". The impossible match is "someone his whole circle considers impossible". The tenants
in *Tod's Amendment* are "the people affected".
- **Groups are formed on that human situation,** so these stories sit beside stories with no
colonial content. *Beyond the Pale* shares G23 with a young man in love with a married woman.
*Kidnapped* shares G11 with *Miss Youghal's Sais* and *His Chance in Life*.
- **Summaries describe the plot plainly and do not adopt the narrator's framing.** Where the
narration itself carries the prejudice, the summary says so ("the narrator describes, with the
prejudice of his day...", scene 70). Epigraphs labelled as proverbs of one faith or people were
read as part of the first scene and did not drive any predicament.
- **Two groups are the most shaped by the source, and a reviewer should look at them first.** G05
"knowing what goes on below" is Kipling's recurring figure of the Englishman who knows the natives,
here Strickland. G22 "belonging to neither side" is his anxiety about crossing over. Both are kept
because the abstract situation is real and portable: the manager who knows the shop floor, the
person who has left their class. But they are where the 1888 framing is closest to the surface.
## Known defects
- Scenes 126, 147 and 225 are verse epigraphs only. Scene 183 is a 55-word transition. All four were
summarised anyway, and none of them is in a group.
- G23 and G27 each draw exactly half their members from one story (*On the Strength of a Likeness*
and *The House of Suddhoo*), which is on the recurrence rule's limit.
- The standing of *Watches of the Night* and *The Rout of the White Hussars* is a judgement call (see
`STANDING`). Moving *Watches* to middle changes the stage of G02 and G15, and moving it to low
changes G02 and G14. Moving *White Hussars* changes G14, and G04 as well if it is moved up.
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,50 @@
[
{
"chunk": 0,
"story": 0,
"summary": "After a verse epigraph, an orphaned girl from a hill village is raised by the chaplain's wife as half-servant, half-companion, and grows very beautiful.",
"predicament": "A young woman taken in by a household not her own belongs fully neither to them nor to the people she came from."
},
{
"chunk": 1,
"story": 0,
"summary": "Scorned by her own people and awkward for her guardians, she refuses to be sent away to work, then carries home an injured stranger and declares she will marry him.",
"predicament": "A young woman who fits nowhere brings home an injured stranger and announces, to her guardians' horror, that she means to marry him."
},
{
"chunk": 2,
"story": 0,
"summary": "The chaplain and his wife nurse the unconscious man and lecture her on propriety; she calmly repeats that he is the man she will marry.",
"predicament": "Guardians lecture a young woman on what is proper, and she calmly repeats that she has chosen the man she will marry."
},
{
"chunk": 3,
"story": 0,
"summary": "The recovering traveller, engaged to a girl at home, laughs at her feelings but enjoys her company and pet names while he convalesces.",
"predicament": "A guest who is promised to someone else enjoys a young woman's devotion while he recovers, though it means nothing to him."
},
{
"chunk": 4,
"story": 0,
"summary": "To avoid a scene, the chaplain's wife tells the traveller to promise he will come back and marry her, and he promises all the way up the hill.",
"predicament": "Someone responsible for a young woman, wanting to avoid a scene, has a departing guest promise a marriage he never intends."
},
{
"chunk": 5,
"story": 0,
"summary": "She waits and is told he will return; he has sailed home and forgotten her entirely.",
"predicament": "A young woman waits for a promised return, while the people around her keep up a comforting lie to keep her quiet."
},
{
"chunk": 6,
"story": 0,
"summary": "When her temper frays, the chaplain's wife admits the promise was a lie to keep her quiet; the girl renounces them and goes back to her own people.",
"predicament": "Told at last that the people she trusted lied to keep her quiet, a young woman renounces them all and walks out for good."
},
{
"chunk": 7,
"story": 0,
"summary": "She marries a man who beats her and fades into old age, while the chaplain's wife blames her nature rather than the lie.",
"predicament": "After a deceived young woman leaves, the one who deceived her blames the girl's nature rather than the lie that drove her away."
}
]
@@ -0,0 +1,38 @@
[
{
"chunk": 8,
"story": 1,
"summary": "After an epigraph, the narrator describes a marriage strained after a baby's death, and the arrival of a clever, mischievous society woman.",
"predicament": "After a shared grief, a husband drifts away from a mourning wife, and a clever, mischievous rival begins to take an interest in him."
},
{
"chunk": 9,
"story": 1,
"summary": "The rival annexes the husband publicly; friends make sure the grieving wife hears; she keeps her own counsel and tells him to go to a ball without her.",
"predicament": "Kind friends make sure a wife hears her husband is being openly courted by a rival, and she keeps her own counsel."
},
{
"chunk": 10,
"story": 1,
"summary": "Seeing he meant to go with the rival all along, the wife decides her living husband matters more than her grief and prepares a stunning dress in secret.",
"predicament": "A wife who sees her husband slipping away to a rival quietly stakes everything on one evening's plan to win him back."
},
{
"chunk": 11,
"story": 1,
"summary": "At the ball she outshines everyone and fills her card; the husband, dazzled, crosses the room to beg her for a dance.",
"predicament": "A neglected wife appears at her best in public, and her wandering husband finds himself begging her for the favour of a dance."
},
{
"chunk": 12,
"story": 1,
"summary": "She strikes the rival's dances off his card with a pet name, and at supper he snubs the rival as if the mistake were hers.",
"predicament": "A wife reclaims her husband in front of everyone, and he leaves the rival to take the blame for his own wandering."
},
{
"chunk": 13,
"story": 1,
"summary": "The couple go home together; the defeated rival wryly admits that the silliest woman can manage a clever man.",
"predicament": "A clever schemer who has lost the contest admits that a patient rival she underrated managed things better than she could."
}
]
@@ -0,0 +1,80 @@
[
{
"chunk": 14,
"story": 2,
"summary": "After a verse epigraph, the narrator argues that a boy raised under a sheltered life meets the world's dangers too late and too hard, like a puppy kept from soap.",
"predicament": "A young man raised with every protection is about to meet all of the world's temptations at once, with nobody to warn him."
},
{
"chunk": 15,
"story": 2,
"summary": "The boy, who never gave his parents a moment's worry, slips at his training, disappoints his family, and is sent out alone to his first posting.",
"predicament": "A young man who never gave his family a moment's worry leaves them for his first post, with nobody left to fall back on."
},
{
"chunk": 16,
"story": 2,
"summary": "The narrator's cynical creed: in this country good work goes to others, bad work goes unpunished, and the wise man takes nothing seriously.",
"predicament": "In a new place where good work goes uncredited and bad work unpunished, a newcomer must decide how seriously to take anything at all."
},
{
"chunk": 17,
"story": 2,
"summary": "The boy takes everything seriously, gambling, women and quarrels, losing money and health, and nobody tells him what everyone else knows.",
"predicament": "A newcomer throws himself into every amusement and quarrel, losing money and health, and nobody tells him the rules everyone else knows."
},
{
"chunk": 18,
"story": 2,
"summary": "After a season of excess a severe rebuke from his commanding officer makes him more wretched, and he privately believes himself ruined beyond redemption.",
"predicament": "After a season of excess, a young man is scolded by someone above him and privately decides he is ruined beyond repair."
},
{
"chunk": 19,
"story": 2,
"summary": "A woman's cruel remark tips him over; he goes off alone to shoot, and a senior officer who had tried to check him guesses the truth and recruits the narrator.",
"predicament": "A senior colleague senses that a troubled young man has gone off to harm himself, and recruits a companion who can lie."
},
{
"chunk": 20,
"story": 2,
"summary": "The two race thirty miles to the rest house and find it silent but for a lamp burning in daylight and the sound of flies.",
"predicament": "Racing to reach a despairing young man in time, two companions arrive at his door and sense they may already be too late."
},
{
"chunk": 21,
"story": 2,
"summary": "The boy has shot himself; the two go through the letters he wrote to his family, his commanding officer and a girl at home.",
"predicament": "Two companions find the young man has killed himself, and read the despairing letters he left for his family and his superior."
},
{
"chunk": 22,
"story": 2,
"summary": "The letters would break his parents' hearts, so the narrator proposes they say he died of cholera with them at his side.",
"predicament": "Holding a dead man's letters that would break his family's hearts, two witnesses decide to replace the truth with a kind lie."
},
{
"chunk": 23,
"story": 2,
"summary": "They draft a glowing false account of his death, strip his keepsakes, and cut a lock of the senior officer's hair to send as his.",
"predicament": "Two witnesses forge a comforting account of a young man's death, down to the keepsakes his grieving family will expect to receive."
},
{
"chunk": 24,
"story": 2,
"summary": "They burn the bedding, bury the body themselves, and settle how to time the story so it seems natural.",
"predicament": "Having chosen a merciful lie, two companions destroy every trace of the truth and bury the dead man with their own hands."
},
{
"chunk": 25,
"story": 2,
"summary": "They rehearse the story all day; the senior officer admits he once came close to the same end; they report the death to the commanding officer.",
"predicament": "Two companions rehearse their false account until it holds, then report it to the one in charge, feeling like criminals."
},
{
"chunk": 26,
"story": 2,
"summary": "Everyone forgets the boy within a fortnight; some blame the senior officer for denying a proper funeral; the mother writes a grateful letter.",
"predicament": "The lie holds, the dead man is soon forgotten, and his grieving mother thanks the two who deceived her for their great kindness."
}
]
@@ -0,0 +1,62 @@
[
{
"chunk": 27,
"story": 3,
"summary": "After a proverb, the narrator introduces a policeman who studies the country's hidden life, and the one master of disguise he models himself on, who is never rewarded for it.",
"predicament": "A man who knows the ground better than anyone is distrusted by his own side, and his rare skill earns him no advancement."
},
{
"chunk": 28,
"story": 3,
"summary": "The policeman spends seven years learning the underworld, its dances, cant and secret societies, and respectable people write him off as odd.",
"predicament": "A man who masters what his superiors think beneath notice is written off as odd, and his hard-won knowledge counts for nothing."
},
{
"chunk": 29,
"story": 3,
"summary": "He solves a great murder case in disguise, but it does him no good because it shows up his seniors' incapacity.",
"predicament": "A junior who solves what his seniors could not is resented for showing up their failure, and gains nothing by it."
},
{
"chunk": 30,
"story": 3,
"summary": "He falls in love, but her parents refuse a man from the worst-paid department with strange ways; he takes leave and hires on in disguise as her groom.",
"predicament": "Refused a woman's hand by parents who scorn his poor prospects, a man takes a humble place in their household to stay near her."
},
{
"chunk": 31,
"story": 3,
"summary": "The mother praises her paragon groom; he must endure being slanged by men he outranks, even one he recruited, and watch others flirt with her.",
"predicament": "Disguised far below his real place, a man must swallow insults from people he outranks and watch others flirt with the woman he loves."
},
{
"chunk": 32,
"story": 3,
"summary": "He learns the underside of society from the bottom and aches on nights of music he cannot join.",
"predicament": "Living at the bottom of the household, a man learns what the people above him never see, and longs for the life he left."
},
{
"chunk": 33,
"story": 3,
"summary": "A distinguished old man flirts offensively with her; the disguised lover seizes his bridle and threatens him, giving himself away.",
"predicament": "A powerful older man presses unwelcome attentions on the woman you love, and your disguise depends on holding your tongue."
},
{
"chunk": 34,
"story": 3,
"summary": "The old man, once he understands, roars with laughter, admits he deserved a thrashing, and offers to talk the title-loving father round.",
"predicament": "Exposed while defending a woman, a man turns the powerful person he just threatened into an ally against her disapproving parents."
},
{
"chunk": 35,
"story": 3,
"summary": "With the great man's weight behind him, the lover borrows clothes and wins the parents' consent within minutes.",
"predicament": "A powerful patron's word wins over parents who refused a suitor on his own merits, and their consent comes almost at once."
},
{
"chunk": 36,
"story": 3,
"summary": "They marry on condition he drops his old ways for departmental routine that pays and leads upward; he keeps his word, at a cost.",
"predicament": "A man wins his marriage on condition that he gives up the unconventional work he loves for safe routine that leads upward."
}
]
@@ -0,0 +1,44 @@
[
{
"chunk": 37,
"story": 4,
"summary": "After a proverb, a shiftless young man sails out to a plantation job his uncle found him, vowing to reform, save his salary and come back to marry his tearful sweetheart.",
"predicament": "A shiftless young man is packed off to a distant post a relative arranged, vowing to reform, save money and return to marry."
},
{
"chunk": 38,
"story": 4,
"summary": "Weak and extravagant but likeable, he works passably and credits himself for it, while his sweetheart's family objects to the engagement.",
"predicament": "A weak young man at a distant post works adequately and congratulates himself, while his sweetheart's family objects to the match."
},
{
"chunk": 39,
"story": 4,
"summary": "He forgets her for weeks at a time; under family pressure she marries an eligible suitor and writes him a stormy letter.",
"predicament": "Pressed by her family and neglected by an absent sweetheart, a young woman marries the eligible suitor instead and declares herself heartbroken."
},
{
"chunk": 40,
"story": 4,
"summary": "He writes an eight-page letter of eternal constancy that he half feels for two days; she cries over it and keeps it.",
"predicament": "A man jilted by a sweetheart he had half forgotten writes a grand letter of eternal devotion that he does not really feel."
},
{
"chunk": 41,
"story": 4,
"summary": "Living comfortably and saving nothing, he drops his correspondents at home one by one and meets a shrewd, handsome young woman.",
"predicament": "A man who has let himself drift at a distant post drops his old ties one by one and stops meaning to return."
},
{
"chunk": 42,
"story": 4,
"summary": "He marries her and settles down; she knows his weaknesses and manages him tenderly.",
"predicament": "A weak man settles down by marrying a shrewd, capable woman who manages him kindly and knows his failings exactly."
},
{
"chunk": 43,
"story": 4,
"summary": "Widowed and rich, his old sweetheart rereads his letter, sets out to offer him her hand and fortune, and finds him little altered and married.",
"predicament": "A widow sets out to claim the old sweetheart who swore eternal devotion, and finds him long since married to someone else."
}
]
@@ -0,0 +1,80 @@
[
{
"chunk": 44,
"story": 5,
"summary": "After an epigraph, the narrator introduces a conceited, popular man who means to propose to the prettier of two sisters, and warns against praising a sister to a sister.",
"predicament": "A conceited man who means to propose must choose between two close sisters, and everyone around them assumes they know which one."
},
{
"chunk": 45,
"story": 5,
"summary": "The sisters go everywhere together, each wary of the other; he divides his attentions evenly and gives no sign.",
"predicament": "Two sisters who both hope for the same man never let each other out of sight, while he gives no sign either way."
},
{
"chunk": 46,
"story": 5,
"summary": "As the hot weather nears and he still says nothing, both sisters grow strained, one more acid and the other less winning.",
"predicament": "As the season closes and a suitor still says nothing, two hopeful sisters grow strained and sharp with the waiting."
},
{
"chunk": 47,
"story": 5,
"summary": "He gives a moonlight riding picnic, and the whole small station knows he means to propose there.",
"predicament": "Everyone in a small society knows a proposal is planned for one particular evening, and gathers to watch it happen."
},
{
"chunk": 48,
"story": 5,
"summary": "On the ride out the narrator sees a dust-storm gathering but says nothing to spoil the well-managed party.",
"predicament": "An onlooker sees trouble gathering during a well-managed gathering and keeps quiet rather than spoil everyone's evening."
},
{
"chunk": 49,
"story": 5,
"summary": "A violent dust-storm plunges the party into roaring darkness, and everyone huddles blindly by the horses.",
"predicament": "A sudden storm throws a festive gathering into roaring darkness, and everyone huddles together blindly, waiting for it to pass."
},
{
"chunk": 50,
"story": 5,
"summary": "The younger sister begs to be taken home; then the suitor grabs the narrator and shouts that he has proposed to the wrong sister.",
"predicament": "In the confusion a man realises he has proposed to the wrong woman, and turns to a near-stranger for help."
},
{
"chunk": 51,
"story": 5,
"summary": "He insists he loved the younger sister all along; the elder comes up radiant and takes his arm while the younger mounts and rides away.",
"predicament": "A man must undo a proposal to one sister, who is radiant with happiness, while the one he truly loves flees in tears."
},
{
"chunk": 52,
"story": 5,
"summary": "Overexcited, the narrator takes charge, tells the suitor to stay and explain himself, and goes to fetch the younger sister.",
"predicament": "A bystander impulsively takes charge of someone else's romantic blunder, sending the man to explain while he fetches the other woman."
},
{
"chunk": 53,
"story": 5,
"summary": "He chases her across dangerous ground through the tail of the storm while she shouts at him to go away.",
"predicament": "A bystander chases a heartbroken woman across dangerous ground in the dark, trying to bring her back to hear something."
},
{
"chunk": 54,
"story": 5,
"summary": "Her horse goes lame; she begs to be let alone, and he tells her awkwardly that the suitor has something to say to her.",
"predicament": "A near-stranger must persuade a distraught woman to come back and hear a declaration he cannot bring himself to make for her."
},
{
"chunk": 55,
"story": 5,
"summary": "They ride back at dawn; the suitor kisses her in front of the whole picnic, who applaud as at a play.",
"predicament": "A man publicly claims the woman he truly loves before the whole gathering, while the sister he proposed to looks on."
},
{
"chunk": 56,
"story": 5,
"summary": "The party rides home in pairs, the narrator escorting the elder sister, and everyone drops back into ordinary life.",
"predicament": "After a night of upheaval, a bystander escorts home the jilted sister, and everyone quietly agrees to treat the night as forgotten."
}
]
@@ -0,0 +1,44 @@
[
{
"chunk": 57,
"story": 6,
"summary": "After an epigraph, a callow rich young officer who prides himself on trusting his own judgment falls under the control of a heartless, businesslike woman.",
"predicament": "A callow, wealthy young man who prides himself on his own judgment is quietly captured by a heartless, calculating older woman."
},
{
"chunk": 58,
"story": 6,
"summary": "She and the narrator's clever friend detest each other; the woman breaks the young man in to fetch, wait and pay, and treats him like a servant.",
"predicament": "A young man infatuated with someone older fetches, waits and pays for the privilege of being ordered about like a dog."
},
{
"chunk": 59,
"story": 6,
"summary": "Nobody warns him; his commanding officer, who hates married juniors, calls it good training; he runs up debts while his fiancee prepares to come out.",
"predicament": "Nobody warns a young man he is being ruined, and the one above him, disliking his engagement, calls it good training."
},
{
"chunk": 60,
"story": 6,
"summary": "The clever woman decides he will break his engagement to please the other, and fights a seven-week social war to win him away, while people say shameful things about her.",
"predicament": "A clever woman sets out to rescue a foolish young man from a rival's clutches, knowing everyone will misread her motives."
},
{
"chunk": 61,
"story": 6,
"summary": "Treated kindly instead of used, the young man comes over to her and speaks of his engagement as a piece of boyish folly.",
"predicament": "Won over by kindness, a young man confides that he means to drop his engagement as a piece of youthful folly."
},
{
"chunk": 62,
"story": 6,
"summary": "Speaking like a mother, she gently takes the conceit out of him and paints a picture of the marriage that would be the making of him.",
"predicament": "Someone older and wiser gently takes the conceit out of a foolish young man and talks him back toward his promised marriage."
},
{
"chunk": 63,
"story": 6,
"summary": "She keeps him under her wing until the wedding and helps with his debts; he takes her advice, leaves the service and goes home to farm.",
"predicament": "Having steered a foolish young man safely to his marriage, his protector advises him to leave a life he is plainly unfit for."
}
]
@@ -0,0 +1,38 @@
[
{
"chunk": 64,
"story": 7,
"summary": "After an epigraph, a pretty girl of modest family is courted by a rich, powerful and extraordinarily ugly senior official, to her mother's delight.",
"predicament": "A pretty young woman of modest family is courted by a powerful, very ugly older man, and her mother is overjoyed."
},
{
"chunk": 65,
"story": 7,
"summary": "The suitor entertains lavishly and wields great influence; archery is the fashion, and the girl is the best lady archer in the hills.",
"predicament": "A powerful suitor spends lavishly and holds great influence, while the young woman he wants is admired for her one great skill."
},
{
"chunk": 66,
"story": 7,
"summary": "The girl enjoys his attention but prefers a handsome young officer with no prospects; her mother scolds her and reminds her of the precedence she would gain.",
"predicament": "Pushed by her mother toward a powerful, ugly suitor, a young woman keeps slipping away to a handsome admirer with no prospects."
},
{
"chunk": 67,
"story": 7,
"summary": "The suitor stages an archery contest with a diamond bracelet everyone knows is meant for her, winning it to mean accepting him.",
"predicament": "A powerful suitor stages a public contest whose prize everyone understands means accepting him, and the young woman must compete."
},
{
"chunk": 68,
"story": 7,
"summary": "Seeing his smug smile, she nods to her young man and deliberately shoots wide, into the supports and the ground, before the whole assembly.",
"predicament": "Before the whole of society, a young woman deliberately throws a contest she could easily win, publicly refusing a powerful suitor."
},
{
"chunk": 69,
"story": 7,
"summary": "A plain schoolgirl wins; the suitor must present the prize, the mother weeps in public, and the young officer takes the girl away.",
"predicament": "A public refusal leaves a powerful man humiliated and a mother in tears, while the young woman leaves with the suitor she chose."
}
]
@@ -0,0 +1,50 @@
[
{
"chunk": 70,
"story": 8,
"summary": "After an epigraph, the narrator describes, with the prejudice of his day, a poor community of mixed descent living on the margins of colonial society.",
"predicament": "People on the margins of a rigid social order guard small distinctions fiercely, and outsiders give offence without knowing how."
},
{
"chunk": 71,
"story": 8,
"summary": "A plain young woman works as a temporary children's nurse for a lady who calls her dirty and inattentive and never considers she has a life of her own.",
"predicament": "A temporary helper is judged careless by the one she works for, who never considers that she has a life of her own."
},
{
"chunk": 72,
"story": 8,
"summary": "She squabbles with her mother over money; a sickly, proud young telegraph signaller courts her, and his government post makes her mother lenient.",
"predicament": "A poor young man with a humble but secure post courts a proud family who value his position more than his background."
},
{
"chunk": 73,
"story": 8,
"summary": "The mother consents only if he earns fifty rupees a month, far beyond his prospects; the lovers swear fidelity and he is transferred to a remote office.",
"predicament": "A young man may marry the woman he loves only if he somehow earns far more than his post will ever pay him."
},
{
"chunk": 74,
"story": 8,
"summary": "At a forgotten coastal office, with the senior officials long absent, a riot breaks out and spreads through the town.",
"predicament": "Posted alone to a forgotten outpost, a junior man hears that disorder is breaking out while everyone in authority is away."
},
{
"chunk": 75,
"story": 8,
"summary": "His colleague flees, the local police ask him for orders, and though terrified he leads them out, fires on the mob and scatters it.",
"predicament": "With everyone in charge absent and frightened men asking for orders, a lowly junior takes command of a crisis himself."
},
{
"chunk": 76,
"story": 8,
"summary": "Town elders relay the local magistrate's complaint that he acted unconstitutionally; he faces them down, but breaks into tears when the young official arrives next morning.",
"predicament": "Having acted far beyond his authority, a junior faces down an offended rival authority, then breaks down in front of his real superior."
},
{
"chunk": 77,
"story": 8,
"summary": "The official's report earns him a transfer on a salary big enough to marry; he could never repeat the deed.",
"predicament": "A superior's report of a junior's courage in a crisis earns him the promotion he needed to marry, though he could never repeat it."
}
]
@@ -0,0 +1,50 @@
[
{
"chunk": 78,
"story": 9,
"summary": "After a proverb, a poor young officer and his colonel, dressing in a hurry at the club, each pick up the other's identical cheap watch.",
"predicament": "A junior and his superior hurriedly pick up each other's identical belongings, a small mix-up that will soon grow out of control."
},
{
"chunk": 79,
"story": 9,
"summary": "The colonel's pious wife is a suspicious gossip who has wrecked a marriage, stopped an engagement and caused a young wife's death.",
"predicament": "A superior's spouse who manufactures scandal has already wrecked marriages and engagements, and everyone beneath her fears her tongue."
},
{
"chunk": 80,
"story": 9,
"summary": "The young officer is thrown from his cart onto a woman's lawn and loses the colonel's watch there; the colonel loses the other watch and comes home late with an excuse his wife rejects.",
"predicament": "A man comes home very late with a true but unlikely excuse, and a suspicious spouse refuses to believe a word of it."
},
{
"chunk": 81,
"story": 9,
"summary": "The lawn's owner, whom the colonel's wife hates, finds the watch, hears the truth, and sends it to the wife with a pointed note, vowing never to explain.",
"predicament": "Handed a harmless mix-up that could torment a notorious gossip, a woman she has wronged sends it on and resolves never to explain."
},
{
"chunk": 82,
"story": 9,
"summary": "The wife confronts the colonel; he admits the watch is his but denies everything else, and she pours out her jealousy and hatred.",
"predicament": "A spouse confronts a partner with what looks like evidence of betrayal, and every denial only deepens the suspicion."
},
{
"chunk": 83,
"story": 9,
"summary": "Holding the watch, the wife feels a little of the suspicion she has inflicted on others, but cannot believe her husband against appearances.",
"predicament": "Someone who has spread suspicion about others now feels its poison herself, and cannot bring herself to believe the innocent explanation."
},
{
"chunk": 84,
"story": 9,
"summary": "Her faith in her husband is gone and her life spoiled, while the station, told the story by her enemy, laughs at her.",
"predicament": "A gossip who ruined others is ruined in turn by a tale about her own household, and everyone around her laughs."
},
{
"chunk": 85,
"story": 9,
"summary": "The young officer wants to tell the truth, but the woman refuses; he lets it drop and moves away, and the couple remain wretched.",
"predicament": "A junior who knows a joke has gone too far wants to confess, but the one running it insists the victim must suffer."
}
]
@@ -0,0 +1,38 @@
[
{
"chunk": 86,
"story": 10,
"summary": "After a ballad epigraph, a young girl's parents make her marry a sickly, well-off officer some thirty-five years older.",
"predicament": "Her parents make a young woman marry a well-off man thirty-five years older, though her heart is already given to someone else."
},
{
"chunk": 87,
"story": 10,
"summary": "She loved a poor man with no prospects; her mother broke the engagement by weeping, and he had himself transferred to the worst station he could find.",
"predicament": "A young woman's engagement to a poor man is broken by a parent's tears, and he takes himself off to the worst post available."
},
{
"chunk": 88,
"story": 10,
"summary": "She falls ill and loses her looks; her husband mocks her plainness and neglects her; she learns her old love is coming up to the hills gravely ill.",
"predicament": "A neglected wife, mocked by her husband for losing her looks, learns that the man she once loved is coming, gravely ill."
},
{
"chunk": 89,
"story": 10,
"summary": "Waiting in the rain for the coach, she finds him in it, dead, tied upright by the driver, and falls screaming into the mud.",
"predicament": "A woman waiting in the rain to meet the man she once loved finds him arriving dead, and collapses in public."
},
{
"chunk": 90,
"story": 10,
"summary": "The narrator, the only witness, pays the driver, keeps her name out of it, and gets her away by force.",
"predicament": "A bystander who stumbles on a woman's secret grief must get her away quietly before her name becomes part of the scandal."
},
{
"chunk": 91,
"story": 10,
"summary": "He tells the doctor she fell from her horse; she never speaks of that night, drifts about expecting someone, and dies at home two years later.",
"predicament": "A bystander invents a cover story to protect a woman's reputation, and she never mentions the meeting or her loss again."
}
]
@@ -0,0 +1,50 @@
[
{
"chunk": 92,
"story": 11,
"summary": "After an epigraph, a clever, charming young officer from an obscure station wants to escape his regiment for a permanent appointment in the hill capital.",
"predicament": "A clever, charming junior stuck in an obscure post wants a permanent, well-paid place near the top, and has no connections at all."
},
{
"chunk": 93,
"story": 11,
"summary": "He forges the date on an invitation for a clever society woman who has been snubbed; grateful, she asks what she can do, and he asks her to get him a good appointment.",
"predicament": "A clever junior does an influential woman a daring favour, and asks her in return to win him a good appointment."
},
{
"chunk": 94,
"story": 11,
"summary": "She weighs which great men she can work on, while a new viceroy's craze for official secrecy grips the government.",
"predicament": "An influential woman sets out to win a post for her protege, while those at the top grow obsessed with keeping everything secret."
},
{
"chunk": 95,
"story": 11,
"summary": "The narrator explains that the government commits its most sensitive orders to paper and circulates them by hand.",
"predicament": "Those at the top keep every decision secret on principle, down to the smallest appointment, and pride themselves that nothing ever leaks."
},
{
"chunk": 96,
"story": 11,
"summary": "A packet of confidential state papers, badly addressed, is delivered by a careless messenger to the society woman, who tears it open.",
"predicament": "Through a careless mistake, confidential papers meant for someone else land in the hands of a clever outsider."
},
{
"chunk": 97,
"story": 11,
"summary": "She reads the secret papers and sees their value; the young officer arrives, they study them together, and he decides to aim at the intelligence or foreign departments.",
"predicament": "Holding confidential papers they were never meant to see, a clever pair work out how best to use them for advancement."
},
{
"chunk": 98,
"story": 11,
"summary": "He calls on the most powerful man in government, quotes the secret notes from memory, and remarks that the last appointment went by favour; the man promises to see, then tries to block him.",
"predicament": "A junior shows the most powerful person he can reach that he knows their secrets, and remarks that the last appointment went by favour."
},
{
"chunk": 99,
"story": 11,
"summary": "After eleven days of uproar they give him the appointment to keep him quiet; the viceroy warns it is not done twice, and the woman reflects on what fools men are.",
"predicament": "Unable to block him, those at the top give a troublesome junior the post he wanted, and warn him never to try it again."
}
]
@@ -0,0 +1,38 @@
[
{
"chunk": 100,
"story": 12,
"summary": "After an epigraph, the narrator introduces a brilliant young civil servant who has brought out a fashionable godless creed, one tenet of which is that obeying an order is sinful.",
"predicament": "A brilliant newcomer arrives full of borrowed theories, including the notion that obeying an order is worse than giving one."
},
{
"chunk": 101,
"story": 12,
"summary": "The narrator argues that where every man has someone set over him, a creed denying anyone at the head of affairs cannot survive.",
"predicament": "In a place built on strict hierarchy, a newcomer's theory that nobody stands above anyone is taken as an attack on the whole order."
},
{
"chunk": 102,
"story": 12,
"summary": "He preaches his creed at the club until his seniors throw cushions and nicknames at him; his superior calls him an idiot, though his work would have carried him far.",
"predicament": "A clever junior keeps lecturing his elders on his opinions, and they try to mock and shout him into silence."
},
{
"chunk": 103,
"story": 12,
"summary": "He cannot take an order without improving on it, overworks in the heat, frets over rebukes, and ignores the doctor; one evening he mocks a man for giving thanks for rain.",
"predicament": "A junior works himself far past his strength, fretting over every rebuke, and ignores every warning that he is heading for collapse."
},
{
"chunk": 104,
"story": 12,
"summary": "Mid-lecture his words turn to gibberish and he is struck dumb as the storm breaks; the doctor diagnoses aphasia from overwork.",
"predicament": "In the middle of lecturing everyone around him, an overworked young man suddenly loses the power of speech in front of them all."
},
{
"chunk": 105,
"story": 12,
"summary": "His speech returns in two days, but he is cowed, cannot trust his own mind, and goes on three months' leave in fear.",
"predicament": "After a breakdown he cannot explain, a proud young man is humbled, frightened and sent away for months to rest."
}
]
@@ -0,0 +1,38 @@
[
{
"chunk": 106,
"story": 13,
"summary": "After an epigraph, a new viceroy brings a hard, officious private secretary who keeps drawing matters outside his province into his own hands, while the viceroy watches, amused.",
"predicament": "A leader's officious right hand keeps pulling matters outside his remit into his own grasp, and the leader simply lets him do it."
},
{
"chunk": 107,
"story": 13,
"summary": "People complain of too much secretary and too little viceroy; meanwhile a cranky inventor with a cholera fumigant arrives, convinced a medical ring is against him.",
"predicament": "An obsessive outsider with one idea arrives convinced a clique is blocking him, and determined to reach the person at the top."
},
{
"chunk": 108,
"story": 13,
"summary": "It is hard to get a hearing with the viceroy, unless one is as grand as a pompous senior official of nearly the same name, who has come to confer.",
"predicament": "Getting a word with the person at the top is nearly impossible, unless you are grand enough to demand an audience."
},
{
"chunk": 109,
"story": 13,
"summary": "The secretary drops a letter from the name, and the invitation to a private lunch goes to the inventor, who talks of his theory and tips his powder into the ash-tray.",
"predicament": "A gatekeeper's slip hands an obscure enthusiast the private audience meant for someone grand, and he means to make the most of it."
},
{
"chunk": 110,
"story": 13,
"summary": "He lights the powder; choking smoke fills the house, guards and ladies panic, and the viceroy, prostrate with laughter, declares it a magnificent success.",
"predicament": "Granted one private audience with the person at the top, an outsider makes a spectacular scene, and the leader roars with laughter."
},
{
"chunk": 111,
"story": 13,
"summary": "The viceroy laughs till he cries; the tale of the secretary's friend with the powder goes round, and at a picnic the viceroy jokes that his secretary hired an assassin, until the secretary takes the hint and resigns with a glowing reference.",
"predicament": "The one at the top retells a comic tale until his overbearing right hand takes the hint, resigns, and leaves with glowing praise."
}
]
@@ -0,0 +1,38 @@
[
{
"chunk": 112,
"story": 14,
"summary": "After an epigraph, the narrator argues that marriages arranged by mature, discreet people are sounder than love matches, since lovers cannot see straight.",
"predicament": "Those who arrange marriages for the young claim to know better than the lovers, who cannot see straight when they choose."
},
{
"chunk": 113,
"story": 14,
"summary": "He proposes a matrimonial department, then introduces a quiet, self-contained young official with a brilliant career, praised by all his superiors for knowing when to hold his tongue.",
"predicament": "A quiet, model junior with a brilliant career ahead is about to throw it away, and everyone above him is alarmed."
},
{
"chunk": 114,
"story": 14,
"summary": "He falls in love with a good, lovely girl from a poor family his world considers socially impossible; the match would weigh on his career for ever, and he will hear no remonstrance.",
"predicament": "A promising junior insists on marrying someone his whole circle considers impossible, a match that would weigh on his career for ever."
},
{
"chunk": 115,
"story": 14,
"summary": "Argument only fixes him in his purpose; the clever society woman attends a council of three men on his case and proposes a plan.",
"predicament": "Argument only hardens a young man's resolve on a ruinous match, so a clever meddler devises a plan to stop it by other means."
},
{
"chunk": 116,
"story": 14,
"summary": "He finds himself gazetted on leave, is carried off by camel with the three men for seven weeks, and the wedding day passes with no bridegroom while the bride's family is mocked.",
"predicament": "Friends arrange for a young man to be carried off until the day he was to marry has passed, leaving the bride's family humiliated."
},
{
"chunk": 117,
"story": 14,
"summary": "The bride's father comes raging and shows his coarseness; the young man keeps quiet, the girl refuses to sue and marries someone else, and he returns to his career and a suitable future match.",
"predicament": "Brought back after a forced absence, a young man faces his jilted bride's furious family and quietly lets the match die."
}
]
@@ -0,0 +1,50 @@
[
{
"chunk": 118,
"story": 15,
"summary": "After a soldier's anecdote as epigraph, a vain young officer who prides himself on looking like an officer and a gentleman rides down from the hills at the very end of his leave.",
"predicament": "A vain young man who prides himself on always looking the part cuts his return from leave as fine as he dares."
},
{
"chunk": 119,
"story": 15,
"summary": "Dressed in a new suit and white helmet, he leaves his money at the hotel and sends his servants ahead; a monsoon downpour begins.",
"predicament": "Setting off in his finest clothes with almost no money, a man who prides himself on organisation is caught in a downpour."
},
{
"chunk": 120,
"story": 15,
"summary": "He is thrown by a pony, his helmet dissolves into pulp, and the cheap dyes of his clothes run in every colour down his body.",
"predicament": "Mile by mile, rain and mud strip a proud man of every mark of his respectability until he looks like a vagrant."
},
{
"chunk": 121,
"story": 15,
"summary": "At the railway station, with six annas to his name and no servants, he asks for a ticket; the staff telegraph for authority and then seize him.",
"predicament": "Filthy and penniless, a man asks for what he is owed, and those in charge take him for the fugitive they seek."
},
{
"chunk": 122,
"story": 15,
"summary": "Handcuffed after a scuffle, he is told he matches the description of a deserter; the more he explains, the less the stationmaster believes him.",
"predicament": "Mistaken for a wanted man, someone explains at length who he really is, and the more he explains, the less anyone believes him."
},
{
"chunk": 123,
"story": 15,
"summary": "At the next station he is handed to a corporal who calls him a disgrace to the service and tells him to hold his tongue.",
"predicament": "Held by people far beneath him who take him for a fraud, a man tries to carry it off lightly and is silenced."
},
{
"chunk": 124,
"story": 15,
"summary": "His swearing wins the soldiers' admiration, but he tries to run, is knocked down with his shirt torn off, just as one of his own senior officers arrives.",
"predicament": "Losing his temper in custody, a wrongly held man tries to run, is knocked down, and is found so by someone he knows."
},
{
"chunk": 125,
"story": 15,
"summary": "The senior officer recognises him; he begs him not to tell the mess, then spends the summer trying to have his captors court-martialled while the story spreads through the province.",
"predicament": "Rescued from a humiliating mistake, a man begs his superior to keep it quiet, then wastes months seeking redress as the story spreads."
}
]
@@ -0,0 +1,80 @@
[
{
"chunk": 126,
"story": 16,
"summary": "The verse epigraph alone: a step off the well-ordered road leads into an old land where spirits and powers of darkness keep company with travellers.",
"predicament": "A traveller is warned that a single step off the familiar road leads into a strange, dark world with its own powers."
},
{
"chunk": 127,
"story": 16,
"summary": "The narrator describes the tenants of an old man's house in the city: a moneylender, a man who claims to cut seals, two courtesans; the old man counts him a friend because his recommendation got a relative a post.",
"predicament": "An old man counts you his friend because your word once got his relative a post, and expects great things of you in return."
},
{
"chunk": 128,
"story": 16,
"summary": "The sham seal-cutter exploits the old man's fear for his sick son by arranging daily telegrams of the son's health; the old man sends for the narrator.",
"predicament": "A clever trickster exploits an old man's fear for his sick son, and the old man sends for his influential friend."
},
{
"chunk": 129,
"story": 16,
"summary": "The old man asks whether magic is against the law; the narrator jokingly gives it his sanction, learns how much the old man has already paid, and goes to watch.",
"predicament": "An old man asks your blessing on a costly ritual to save his son, and you begin to suspect he is being robbed."
},
{
"chunk": 130,
"story": 16,
"summary": "At the darkened house one of the women whispers that the ritual is a trick to get the old man's money; the narrator hides in a window recess.",
"predicament": "Watching an old man being fleeced in the dark, you learn that someone under that roof already knows it is a fraud."
},
{
"chunk": 131,
"story": 16,
"summary": "The seal-cutter comes up, has the lamp put out, and a pale flame rises from a basin as the old man throws himself on the floor.",
"predicament": "In the dark a frightened old man throws himself down as a performer begins a ritual meant to terrify him."
},
{
"chunk": 132,
"story": 16,
"summary": "Stripped and eyes rolled back, the seal-cutter crawls round the basin in utter silence for ten minutes; everyone, the narrator included, is horrified.",
"predicament": "A performance in the dark is so uncanny that even a sceptical onlooker feels his nerve beginning to give way."
},
{
"chunk": 133,
"story": 16,
"summary": "The seal-cutter spouts fire from his nostrils, a trick the narrator knows, and he realises the whole business is a fraud.",
"predicament": "One overdone trick gives the performer away, and the frightened onlooker realises he is watching a fraud he could expose."
},
{
"chunk": 134,
"story": 16,
"summary": "A shrivelled head appears in the basin and speaks by ventriloquism, reporting the son's illness and demanding that the fee be doubled.",
"predicament": "The trickster's performance ends by demanding double payment to save the old man's son, and the victim is ready to pay."
},
{
"chunk": 135,
"story": 16,
"summary": "The woman mutters that it is a fake; the seal-cutter vanishes with his props; the old man wails that he cannot raise more, and the woman calmly calls it a sham.",
"predicament": "The trickster slips away, the frightened victim wails that he cannot pay more, and a shrewd onlooker coolly declares it all a sham."
},
{
"chunk": 136,
"story": 16,
"summary": "She explains she dare not expose the fraud: she is in debt to the moneylender, the trickster's friend, who could poison her; and she had hoped to get the old man's money herself.",
"predicament": "Someone who could expose a fraud dares not, because she is in debt to its backers, and she wanted the victim's money herself."
},
{
"chunk": 137,
"story": 16,
"summary": "She says the old man brought the narrator only to be sure he was not breaking the law, and that the trickster has forbidden him to visit his son.",
"predicament": "A frightened old man wanted your presence only as proof he was not breaking any rule, while a trickster runs his life."
},
{
"chunk": 138,
"story": 16,
"summary": "The narrator is helpless: he has seemed to abet the fraud, has no witnesses, cannot act without endangering the woman, and fears she will poison the trickster.",
"predicament": "Having lent your name to a fraud without meaning to, you can neither expose it nor stop it, and fear worse is coming."
}
]
@@ -0,0 +1,50 @@
[
{
"chunk": 139,
"story": 17,
"summary": "After an epigraph, a pretty, awkward new subaltern who cannot do any of the things his smart regiment prizes is ragged to knock him into shape.",
"predicament": "A shy newcomer who does none of the things his new company prizes is teased relentlessly to knock him into shape."
},
{
"chunk": 140,
"story": 17,
"summary": "The others let him be, but the senior subaltern, soured by waiting for promotion, keeps up a coarse hoax; the newcomer calmly bets him a month's pay he will play a sell on him he will never forget.",
"predicament": "Tormented by a senior who never knows when to stop, a quiet newcomer calmly wagers that he will turn the tables one day."
},
{
"chunk": 141,
"story": 17,
"summary": "The senior subaltern gets his promotion and an engagement; one night, as he boasts of his fiancee to the mess and the officers' wives, a woman's voice asks for her husband.",
"predicament": "Just as a tormentor is boasting of his engagement before everyone, a stranger appears out of the dark claiming to be his wife."
},
{
"chunk": 142,
"story": 17,
"summary": "A lovely, travel-worn woman throws her arms round him, calling him her darling and begging forgiveness for coming out, while everyone expects the worst.",
"predicament": "A lovely stranger publicly claims a man as her husband, and everyone around him is ready to believe the worst."
},
{
"chunk": 143,
"story": 17,
"summary": "The colonel demands an explanation; the man swears he never had a wife; in the mess she tells of their marriage and knows all about his people.",
"predicament": "Accused in front of his superior and colleagues by a stranger who knows his whole past, a man protests that he has no wife."
},
{
"chunk": 144,
"story": 17,
"summary": "The officers' wives have already convicted him; she names a tattoo on his shoulder, and when a major asks for her certificate she produces a paper for him to read aloud.",
"predicament": "With his fellows already convicting him on appearances, an accused man watches his accuser produce what looks like proof."
},
{
"chunk": 145,
"story": 17,
"summary": "The paper is a receipt certifying that the newcomer has paid his debts and won the wager; the woman has fled.",
"predicament": "The damning proof turns out to be a joke by the junior he tormented, who has won their wager in full."
},
{
"chunk": 146,
"story": 17,
"summary": "They find the newcomer unlacing his stays; the mess roars, makes him president of the dramatic club, and nicknames him after the senior subaltern's wife; the narrator calls it dangerous.",
"predicament": "A mocked newcomer who pulled off a dangerous hoax is suddenly the hero of the very company that bullied him."
}
]
@@ -0,0 +1,50 @@
[
{
"chunk": 147,
"story": 18,
"summary": "The verse epigraph alone: a rider's song that horses and racing come first and women and wine second.",
"predicament": "Someone devoted to one passion puts everything else in life second to it, for as long as the passion lasts."
},
{
"chunk": 148,
"story": 18,
"summary": "The narrator calls local racing rotten and half sham: everyone knows everyone too well to press a man for his losings when you are fond of his wife.",
"predicament": "In a small society where everyone knows everyone, you cannot press a man for what he owes when you are fond of his wife."
},
{
"chunk": 149,
"story": 18,
"summary": "An ugly, cheap horse wins everything at two miles, provided his jockey sits perfectly still; his owner has taught a nervous boy to do just that.",
"predicament": "A stubborn performer wins only when nobody interferes, and the one who learns to leave it alone carries all before him."
},
{
"chunk": 150,
"story": 18,
"summary": "A rival owner discovers by chance a spot on one course where a spoken voice echoes from brick mounds by the track, and keeps it to himself.",
"predicament": "A rival quietly discovers a hidden quirk of the ground everyone competes on, and keeps the knowledge entirely to himself."
},
{
"chunk": 151,
"story": 18,
"summary": "The champion's jockey was nearly killed in a notorious racing disaster and tells the story, always with a dying rider's last words; the rival knows it by heart.",
"predicament": "A rival learns by heart the one old terror that still haunts a competitor, and quietly files it away for later."
},
{
"chunk": 152,
"story": 18,
"summary": "Stung by the champion owner's boasting, the district sets a handicap to break him; the rival owner enters his mare and lies about her chances.",
"predicament": "Everyone combines to break a boastful winner, and one rival quietly lies about his own chances while the betting rises."
},
{
"chunk": 153,
"story": 18,
"summary": "During the race the rival speaks the dead rider's words at the echo spot; the jockey screams, the horse throws him, and the rival's mare wins him fifteen thousand.",
"predicament": "At the decisive moment a rival whispers a competitor's worst memory to him, the competitor falls apart, and the rival collects."
},
{
"chunk": 154,
"story": 18,
"summary": "The jockey's nerve is gone for good; he asks for a thrashing and his dismissal, and walks away muttering the dead man's words while others sneer.",
"predicament": "His nerve broken for good, a ruined competitor begs to be dismissed and walks away while others sneer at him."
}
]
@@ -0,0 +1,50 @@
[
{
"chunk": 155,
"story": 19,
"summary": "After a proverb and the narrator's warning to keep to one's own kind, a man who knows too much of the city's hidden life strays into a blind alley below the grated window of a lonely young widow.",
"predicament": "A man who knows too much about a world his own circle keeps apart from wanders somewhere he should never have gone."
},
{
"chunk": 156,
"story": 19,
"summary": "He hears a laugh behind the grating and whispers a verse of a love song; a voice caps it; next day an old woman throws him a packet of objects that form a secret lover's letter.",
"predicament": "A hidden stranger answers your idle words from behind a shuttered window, then sends a secret message only you could read."
},
{
"chunk": 157,
"story": 19,
"summary": "He decodes the objects as a summons from the widow for eleven o'clock, and that night goes to the alley disguised in a woman's cloak.",
"predicament": "A man decodes a secret summons to a forbidden meeting and goes to it that very night in disguise."
},
{
"chunk": 158,
"story": 19,
"summary": "She sings of being the drudge of her father's house; he answers; she has loosened the grating so he can climb in, and a strange double life begins.",
"predicament": "A man begins a double life with a young woman kept shut away, a secret that his whole world would condemn."
},
{
"chunk": 159,
"story": 19,
"summary": "By day he does his office work and pays calls; by night he visits her, delighted by her; he never considers who her guardian is or why he is not discovered and killed.",
"predicament": "Leading a respectable life by day and a forbidden one by night, a man never stops to consider what discovery would cost."
},
{
"chunk": 160,
"story": 19,
"summary": "His attentions to a lady of his own circle are gossiped about until the news reaches the widow, who is beaten for neglecting her work, rages, and threatens to kill herself unless he drops the lady.",
"predicament": "Gossip carries news of a harmless public attention to a secret partner who cannot understand it, and she demands it end."
},
{
"chunk": 161,
"story": 19,
"summary": "She insists he go and not return; three weeks later he knocks at the grating and she holds out arms whose hands have been cut off; someone inside stabs at him, wounding him for life.",
"predicament": "Returning to a forbidden meeting place, a man finds his secret discovered and the one he loved horribly punished in his stead."
},
{
"chunk": 162,
"story": 19,
"summary": "He never learns what happened or even where the house's front door lies; the grating is walled up, and he goes on paying calls, reckoned a very decent sort of man.",
"predicament": "A man whose secret life ended in horror can never learn what happened, and goes on being thought perfectly respectable."
}
]
@@ -0,0 +1,32 @@
[
{
"chunk": 163,
"story": 20,
"summary": "After an epigraph, an engineer left alone four years in an out-district does his work well but takes to secret, solitary drinking that ages him.",
"predicament": "Left alone for years at a remote post with heavy work, a capable man privately takes to a drinking habit that nobody sees."
},
{
"chunk": 164,
"story": 20,
"summary": "Called to the hill capital to try for a vacant post, the nervous, handsome man cannot judge who is who and makes a goddess of a cold, worthless society woman.",
"predicament": "Fresh from years of isolation, a man cannot judge who is who, and idealises a cold, worthless person as a paragon."
},
{
"chunk": 165,
"story": 20,
"summary": "His devotion is platonic; she treats him as her property; believing in her influence, he fights his secret drinking and keeps relapsing.",
"predicament": "Believing an admired person's influence can save him, a man struggles in secret against a vice that keeps beating him."
},
{
"chunk": 166,
"story": 20,
"summary": "He collapses into delirium tremens and for hours whispers out his soul, his worship of her and his shame.",
"predicament": "A man's hidden weakness finally breaks out, and in his collapse he pours out everything he had kept locked away."
},
{
"chunk": 167,
"story": 20,
"summary": "Passed off as jungle fever, the attack is followed by his reform; he credits her influence, drops a friend who laughs at the idea, and later marries a far better woman.",
"predicament": "Saved by his faith in someone who never deserved it, a man cuts off the friend who dares to laugh at that faith."
}
]
@@ -0,0 +1,56 @@
[
{
"chunk": 168,
"story": 21,
"summary": "After an epigraph, the narrator introduces a bank manager who is a carefree sportsman from four to ten and a hard, shrewd man of business from ten to four.",
"predicament": "A capable superior keeps two faces: a carefree companion after hours and a hard man of business during them."
},
{
"chunk": 169,
"story": 21,
"summary": "The bank's directors trust him as far as directors trust managers; his branch does complex local credit work that needs a man who knows his clients' affairs.",
"predicament": "Trusted by distant people above him, someone in charge runs a busy business where knowing your clients' affairs is everything."
},
{
"chunk": 170,
"story": 21,
"summary": "The directors send him a new accountant: arrogant, narrow, new to the country, and convinced they chose him for his brilliant talents.",
"predicament": "A narrow, arrogant newcomer is sent to work under you, convinced that those at the top picked him for his brilliance."
},
{
"chunk": 171,
"story": 21,
"summary": "The two cannot get on; the accountant despises the manager's friends and way of life, lectures him on how to run the bank, and is often sick, leaving double work.",
"predicament": "A conceited subordinate keeps lecturing his superior on how to do the job, and boasting of his friends at the top."
},
{
"chunk": 172,
"story": 21,
"summary": "The accountant was foisted on the bank through a politician's favour; now a director wants his own nominee in; the doctor asks the manager if he knows how sick the man is.",
"predicament": "A subordinate does not know he got his post through a patron's favour, and is about to lose it to someone else's favourite."
},
{
"chunk": 173,
"story": 21,
"summary": "The doctor says the accountant has three months to live; that evening a letter from the directors dismisses him; the manager hides it and plans a merciful fraud.",
"predicament": "Told a difficult subordinate is dying, the one in charge intercepts his dismissal and decides to deceive him kindly to the end."
},
{
"chunk": 174,
"story": 21,
"summary": "Nightly he shows the dying man the books, invents sympathetic letters from the directors, and endures his lectures on his manager's sinful ways after double days of work.",
"predicament": "Hiding a dying subordinate's dismissal, his superior takes on double work and patiently endures his lectures and ingratitude."
},
{
"chunk": 175,
"story": 21,
"summary": "When the new accountant arrives the manager hides him at the club, pays the sick man's salary from his own pocket, and forges letters from the directors; the strain wears him down.",
"predicament": "A superior secretly pays a dying subordinate's salary from his own pocket, and forges praise from above to keep him hopeful."
},
{
"chunk": 176,
"story": 21,
"summary": "To keep him interested in life the manager invents a rise in salary; the accountant dies believing he would have done great things for the bank.",
"predicament": "Kept going by forged praise and an invented promotion, a difficult subordinate dies believing that those above him valued him."
}
]
@@ -0,0 +1,56 @@
[
{
"chunk": 177,
"story": 22,
"summary": "After an epigraph, the narrator introduces a fearless six-year-old boy whom everyone in the hill capital knows, the only child ever to interrupt the supreme council.",
"predicament": "A fearless child who knows everyone treats the most powerful people in the land as ordinary friends to be asked for help."
},
{
"chunk": 178,
"story": 22,
"summary": "Chasing his runaway goat onto the viceroy's lawn, he calls on the council members to help, and they leave their meeting to catch it for him; his mother smacks him.",
"predicament": "A small child with no awe of rank asks the most powerful people present for help, and they cheerfully drop everything to give it."
},
{
"chunk": 179,
"story": 22,
"summary": "The boy is idolised by the household servants and the bearers, speaks the local languages, talks with shopkeepers and labourers, and repeats their hard sayings at breakfast.",
"predicament": "A child who mixes freely with everyone at the bottom hears what the people at the top never do."
},
{
"chunk": 180,
"story": 22,
"summary": "The council is finishing a land bill that limits leases to five years to protect tenants; the narrator says it is correct in theory and wrong in practice.",
"predicament": "Those at the top write a rule to protect people they have never asked, and get the most important point wrong."
},
{
"chunk": 181,
"story": 22,
"summary": "Nobody consulted the people affected; the conscientious legal member knows only English-speaking notables, and the busy district officers make no representations.",
"predicament": "Someone conscientious at the top drafts a rule for people he has never spoken with, and everyone between is too busy to warn him."
},
{
"chunk": 182,
"story": 22,
"summary": "At his mother's dinner the boy, in his dressing-gown, hears the bill named and tells the legal member he knows all about it from his friends in the bazaar.",
"predicament": "At a gathering, a child who talks with ordinary people offers a powerful guest a view nobody else present has heard."
},
{
"chunk": 183,
"story": 22,
"summary": "The boy pauses to put his thoughts in order, translating from the vernacular as the legal member helps with questions.",
"predicament": "A child pauses to translate what ordinary people told him into words that a powerful guest can understand and use."
},
{
"chunk": 184,
"story": 22,
"summary": "He relays a shopkeeper's case: five-year leases mean fresh stamps, fees and courts every few years, while fifteen would give a man and his son peace.",
"predicament": "Relaying what the people affected actually say, a child explains exactly why a well-meant rule from above will hurt them."
},
{
"chunk": 185,
"story": 22,
"summary": "Struck, the legal member makes careful inquiries among the people concerned, amends the tenure clause, and the boy becomes a hero of the bazaar without understanding why.",
"predicament": "Convinced by an unexpected voice from below, a powerful rule-maker quietly consults the people affected and changes the rule."
}
]
@@ -0,0 +1,56 @@
[
{
"chunk": 186,
"story": 23,
"summary": "After an epigraph, the narrator tells how a young man, a month before sailing out to his first appointment, married a slightly older girl secretly before the registrar.",
"predicament": "A young man rushes into a secret marriage just before leaving for his first post abroad, sure that everything will work out."
},
{
"chunk": 187,
"story": 23,
"summary": "The marriage is to stay secret for a year until she can come out; he sails, and she waits in a cheap room in London.",
"predicament": "Newly and secretly married, a young man leaves his wife behind, planning to send for her once his fine salary allows."
},
{
"chunk": 188,
"story": 23,
"summary": "The salary that looked large at home goes nowhere; he sends more than half of it to his wife and must still save for her passage while learning strange work.",
"predicament": "A young man's salary, splendid from afar, barely stretches to cover what he must secretly send home to his wife."
},
{
"chunk": 189,
"story": 23,
"summary": "He cannot afford ponies or shared lodgings, lives in one bare room by the office, sleeps on the roof, and people stop asking him out because he seems a miser.",
"predicament": "Secretly supporting a family, a junior lives so meanly that his colleagues shun him as a miser, and he cannot explain why."
},
{
"chunk": 190,
"story": 23,
"summary": "Haunted by fear of dying and leaving his wife unprovided, he works like a horse, but his employers pay by age, not merit, and give him only a boy's rises.",
"predicament": "A junior works like two men for more money, but those above him pay by age, not merit, and refuse him a real rise."
},
{
"chunk": 191,
"story": 23,
"summary": "His wife's letters grow querulous; he hears that marriage would cost a junior his post; then his baby son dies, and he must show no sign of grief.",
"predicament": "Warned that marriage would cost him his post, a junior hides his wife and child, and cannot show grief when his child dies."
},
{
"chunk": 192,
"story": 23,
"summary": "Seniors praise his thrift and tell him to keep girls out of his heart; then his wife writes that she has gone off with another man.",
"predicament": "Praised by seniors for his thrift while secretly ruined, a young man learns that his distant wife has left him for another."
},
{
"chunk": 193,
"story": 23,
"summary": "Broken, he resigns; after three days the head of the firm offers him, for his proven ability, a far better post at six hundred and fifty rupees.",
"predicament": "Just as a broken young man resigns in despair, those above him finally offer the promotion that would have saved everything."
},
{
"chunk": 194,
"story": 23,
"summary": "The sum would have saved his wife and son; he laughs uncontrollably, says he is an old man now and will retire, and is never seen again.",
"predicament": "Offered too late the reward that would have saved his marriage and child, a young man laughs bitterly, refuses, and vanishes."
}
]
@@ -0,0 +1,56 @@
[
{
"chunk": 195,
"story": 24,
"summary": "After an epigraph, one young official sells another a vicious horse that nearly kills him; the seller laughs it off, and the buyer vows to get even if it takes five years.",
"predicament": "Sold a dangerous bargain by a colleague who laughs it off, a man vows to make him pay for it if it takes years."
},
{
"chunk": 196,
"story": 24,
"summary": "The seller is an earnest young enthusiast for developing the province's agriculture; the buyer watches him and boasts he will chase him till he drops.",
"predicament": "A vengeful colleague studies an earnest rival's enthusiasms, looking for a way to turn the system itself against him."
},
{
"chunk": 197,
"story": 24,
"summary": "The narrator explains that the government will set whole departments to answering any man who seems earnest, and that earnestness is easily faked.",
"predicament": "In a system that answers anyone who seems earnest, a man who fakes earnestness can make endless work for others."
},
{
"chunk": 198,
"story": 24,
"summary": "The vengeful man proposes a scheme to feed the army on pig and has the government order his rival to supply information; the rival, flattered, begins with an essay on the primitive pig.",
"predicament": "Through an official request, a rival is ordered to supply you with information, and he eagerly walks into the trap you set."
},
{
"chunk": 199,
"story": 24,
"summary": "The rival produces maps, tables and surveys, sitting up nights on top of his own work and a special duty elsewhere, too proud to seem ignorant.",
"predicament": "Eager not to look ignorant, a conscientious junior sits up nights answering endless requests on top of his real work."
},
{
"chunk": 200,
"story": 24,
"summary": "New questions draw ever longer answers and a thirty-three-page theory, all carefully filed by the vengeful man, who asks for more.",
"predicament": "Question after question draws a conscientious man into ever longer answers, every page carefully filed by the one who means him harm."
},
{
"chunk": 201,
"story": 24,
"summary": "After fourteen months of questions on bristles and hides, the weary rival writes a flippant suggestion that his correspondent raise his pigs before tanning them.",
"predicament": "After more than a year of pointless demands, an exhausted man lets slip one flippant reply to the person who keeps asking."
},
{
"chunk": 202,
"story": 24,
"summary": "When a question seems to reopen everything, the rival writes only consult my first letter; the vengeful man complains formally; a new head rebukes the rival, who pleads for leave.",
"predicament": "Seizing on one careless reply, a rival complains to those above, and the exhausted victim is rebuked for failing in his duty."
},
{
"chunk": 203,
"story": 24,
"summary": "The vengeful man sends the rival's letter and essay to a newspaper that mocks him; shaken and ridiculed, the rival confronts him and gets only mild sympathy.",
"predicament": "Publicly mocked for work extracted by a false request, a man confronts the colleague who set him up and gets only false sympathy."
}
]
@@ -0,0 +1,80 @@
[
{
"chunk": 204,
"story": 25,
"summary": "After an epigraph, the narrator says he once saw the proudest cavalry regiment in the country flee in terror, an incident it never wants mentioned.",
"predicament": "A proud company that prides itself on its dignity has one humiliating episode it never wants mentioned again."
},
{
"chunk": 205,
"story": 25,
"summary": "A new colonel tells the regiment it is not smart enough and casts its beloved old drum-horse, which it paid dearly for and which is the soul of the regiment.",
"predicament": "A new superior insults a proud company and gets rid of the beloved symbol of its pride on a whim."
},
{
"chunk": 206,
"story": 25,
"summary": "The drum-horse is replaced by an ugly beast and put up for public auction; the regiment is near mutiny, and when the troopers offer to buy him the colonel forbids it as mutinous.",
"predicament": "When a new superior sells off what his people hold sacred, their offer to buy it back is forbidden as insubordination."
},
{
"chunk": 207,
"story": 25,
"summary": "A subaltern buys the drum-horse at the sale; when the colonel is angry he feigns submission and promises to shoot it; the colonel, who knows he erred but cannot admit it, is soothed; the subaltern and a friend quietly prepare something.",
"predicament": "A superior who knows he blundered cannot admit it, while a quietly defiant junior pretends to submit and plots his reply."
},
{
"chunk": 208,
"story": 25,
"summary": "The troopers give what they think is the drum-horse a grand funeral; the farrier says it is the wrong horse and notices black paint, but is told he is drunk.",
"predicament": "A whole company mourns what they believe their superior destroyed, while the few who notice signs of a trick are silenced."
},
{
"chunk": 209,
"story": 25,
"summary": "In revenge the colonel drives the regiment through a gruelling field day; the narrator explains the regiment's treasured privilege of having the band play while the horses are watered.",
"predicament": "To punish his people's insolence, a vindictive superior drives them through a gruelling day meant only to make them suffer."
},
{
"chunk": 210,
"story": 25,
"summary": "As the band plays at watering, the dead drum-horse comes down the road at sunset, drums draped in crape and a skeleton riding on its back.",
"predicament": "At the end of a punishing day, the thing a whole company believed destroyed comes back toward them in the most unsettling way."
},
{
"chunk": 211,
"story": 25,
"summary": "One man yells and wheels; panic spreads troop by troop; the band breaks and the whole regiment stampedes while the colonel and officers are at the mess.",
"predicament": "One person's panic sets off a whole company, and they flee in disorder while those in charge are away drinking."
},
{
"chunk": 212,
"story": 25,
"summary": "The colonel thinks the regiment has mutinied or is drunk; the band doubles back, and the rest of the regiment scatters across the province in the dusk.",
"predicament": "Seeing his whole company scattered in disorder, a superior assumes they have risen against him or are all drunk."
},
{
"chunk": 213,
"story": 25,
"summary": "The horse trots up to the mess for bread; the colonel finds it alive, the drums made of paper, and wrenches off the wired skeleton, cursing the band as cowards.",
"predicament": "A furious superior exposes a hoax with his own hands, and curses his people for being frightened of nothing at all."
},
{
"chunk": 214,
"story": 25,
"summary": "The colonel threatens to disband and court-martial everyone; the subaltern calmly disclaims responsibility; the second-in-command takes the colonel aside.",
"predicament": "A raging superior threatens to punish everyone, while a calm deputy takes him aside to talk him out of it."
},
{
"chunk": 215,
"story": 25,
"summary": "The second-in-command argues that any action would make the regiment a laughingstock across the army and cannot be proved against any officer; the colonel slowly calms down.",
"predicament": "A wise deputy persuades an enraged superior that punishing a mocking hoax in public would only make everyone a laughingstock."
},
{
"chunk": 216,
"story": 25,
"summary": "The colonel restores the drum-horse to its place and is cheered by the regiment; he worries he went back on his word, but his deputy says such things win loyalty without harming discipline.",
"predicament": "A superior who reverses his own unpopular order is cheered by his people, and his deputy assures him it costs no discipline."
}
]
@@ -0,0 +1,50 @@
[
{
"chunk": 217,
"story": 26,
"summary": "After an epigraph about a husband who has come to hate his wife, the narrator introduces a coarse, grizzled, middle-aged officer and his pale, quiet, much younger wife.",
"predicament": "A middle-aged man has grown weary of the wife he sits across from every day, and she is too quiet to resist him."
},
{
"chunk": 218,
"story": 26,
"summary": "He torments her with years of brutal chaff about her headaches, her looks and her love for her children, and she stays devoted to him.",
"predicament": "A wife endures years of heavy, mocking jokes about her looks, her weaknesses and her love for her children."
},
{
"chunk": 219,
"story": 26,
"summary": "At dinner he gives their small son wine until he cries and is removed, then sends his wife from the table while the guests sit angry and helpless.",
"predicament": "A husband humiliates his wife and small child in front of guests, who sit angry and uncomfortable and say nothing."
},
{
"chunk": 220,
"story": 26,
"summary": "He brings a criminal charge against a man who had been attentive to his wife, resting on servants' evidence; two-thirds of the station believe it, and the accused knows even acquittal on doubt will blacken him.",
"predicament": "Accused of an affair on bought evidence, a man knows that even an acquittal on doubt will blacken his name for his whole career."
},
{
"chunk": 221,
"story": 26,
"summary": "The accused's friends telegraph for the master of disguise, now married, who comes gladly, spends three weeks disguised about the accuser's house, and finds the case invented from start to finish.",
"predicament": "Friends of a falsely accused man call in the one person who can find the truth, and he secretly proves it is a frame-up."
},
{
"chunk": 222,
"story": 26,
"summary": "In court he greets the chief witness with a private word that shows he knows all, and the terrified man recants every detail.",
"predicament": "At the hearing, a man who knows every witness's secret merely lets them see him, and the key witness collapses and recants."
},
{
"chunk": 223,
"story": 26,
"summary": "The other witnesses flee, the accuser's counsel throws up the case, and the accused thrashes the accuser behind the court cells.",
"predicament": "The fabricated case collapses in public, and the falsely accused man takes his own quiet revenge on his accuser."
},
{
"chunk": 224,
"story": 26,
"summary": "The wife blames herself, asks the station not to shun her or her child, and nurses her husband; the counter-charge is hushed up and they go home.",
"predicament": "After her husband's plot collapses, a mistreated wife blames herself, forgives him, and begs society to welcome her child again."
}
]
@@ -0,0 +1,38 @@
[
{
"chunk": 225,
"story": 27,
"summary": "The verse epigraph alone: a Diana who stays forever fresh and fair while the years pass and everyone offers her praise.",
"predicament": "Someone admired for never seeming to age goes on receiving everyone's praise while the years pass unacknowledged."
},
{
"chunk": 226,
"story": 27,
"summary": "A woman of the hill capital who never seems to age has become an institution; every young man is expected to worship her, and she keeps young people about her.",
"predicament": "An admired older woman who has made youth her habit is surrounded by young admirers and never has to face her age."
},
{
"chunk": 227,
"story": 27,
"summary": "A very young officer adores her too earnestly and demands too much; she checks him sternly, though he reminds her of a lad who loved her twenty-three years before.",
"predicament": "An overeager young admirer demands too much of an older woman's attention, and she kindly but firmly holds him off."
},
{
"chunk": 228,
"story": 27,
"summary": "He is openly miserable; his fellow officers make his life a burden; everyone pities him and agrees it is not her fault.",
"predicament": "A young man's open infatuation makes him a target for his colleagues' teasing, and everyone around pities him for it."
},
{
"chunk": 229,
"story": 27,
"summary": "When he mentions his father is coming, she tells him she has a nineteen-year-old daughter arriving; his father arrives and is told at once how his son has been behaving.",
"predicament": "An infatuated young man learns the woman he adores has a grown daughter, and his father arrives already hearing the gossip."
},
{
"chunk": 230,
"story": 27,
"summary": "The father tells him to cut his leave short; they call on her, and the father recognises her as the woman he worshipped long ago, while the son struggles to talk to her poised daughter.",
"predicament": "A young man's father turns out to have adored the same woman long ago, and the son realises how foolish he has looked."
}
]
@@ -0,0 +1,50 @@
[
{
"chunk": 231,
"story": 28,
"summary": "After an incantation as epigraph, the narrator tells the history of a tiny silver box holding a carved fish, a love-charm that works only if it has been stolen.",
"predicament": "A charm said to win anyone's love works only if it is stolen, and ruins whoever merely buys or finds it."
},
{
"chunk": 232,
"story": 28,
"summary": "Unless stolen it turns on its owner within three years; a young official bought it as a curiosity without knowing, and a man who recognised it said nothing.",
"predicament": "A man recognises a dangerous object in a colleague's collection and says nothing, knowing any share in it is risky."
},
{
"chunk": 233,
"story": 28,
"summary": "A small, disliked, worthless officer is blindly infatuated with a good, tall young woman who looks on him as vermin; the whole station laughs.",
"predicament": "A small, disliked man is hopelessly infatuated with someone who despises him, and the whole community laughs at his devotion."
},
{
"chunk": 234,
"story": 28,
"summary": "The collector grumbles at the club about his run of bad luck; the man who knew tells him the charm's story half in jest; the infatuated officer, lunching unseen beyond the arch, hears every word.",
"predicament": "Grumbling about a run of bad luck, a man hears a half-joking explanation, while a desperate rival overhears every word."
},
{
"chunk": 235,
"story": 28,
"summary": "The infatuated officer calls while the collector is out and steals the box; three days later the young woman astonishes everyone by accepting him.",
"predicament": "A desperate suitor steals a colleague's prized possession, and within days the woman who despised him accepts his proposal."
},
{
"chunk": 236,
"story": 28,
"summary": "The man who knew persuades the collector, whose luck has turned, to burgle the suitor's hotel room during a dance; they find the box under his papers.",
"predicament": "Convinced a rival won by theft, two men decide to search his belongings, knowing that if they are wrong they are the thieves."
},
{
"chunk": 237,
"story": 28,
"summary": "The collector takes it back and calls the suitor a thief; the young woman breaks off the engagement and he leaves; the charm is hidden on a pony's necklace.",
"predicament": "With the stolen thing recovered, the thief is named in private, his engagement collapses, and he quietly takes himself elsewhere."
},
{
"chunk": 238,
"story": 28,
"summary": "The narrator challenges the doubting reader to keep such a box three years, or better, steal it and be sorry.",
"predicament": "Anyone who comes upon such a thing must choose between keeping it honestly and stealing it, and either may ruin them."
}
]
@@ -0,0 +1,68 @@
[
{
"chunk": 239,
"story": 29,
"summary": "After a proverb, the narrator sets down the words of a dying friend describing a hidden opium house in a narrow city lane that no outsider could find.",
"predicament": "A dying man describes a hidden refuge that nobody could find unless they already belonged there."
},
{
"chunk": 240,
"story": 29,
"summary": "The house was opened by a one-eyed proprietor rumoured to have killed his wife; it was clean and respectable, and he never seemed touched by the drug but was very keen on money.",
"predicament": "A shrewd host runs a quiet, respectable place for a ruinous habit, and takes a good share of everyone's money."
},
{
"chunk": 241,
"story": 29,
"summary": "The upper room held the proprietor's idol and his own coffin, to which every newcomer was introduced; the speaker took his mat at the coffin's foot.",
"predicament": "A regular settles into his own corner of a closed circle where every newcomer is shown the same grim reminder."
},
{
"chunk": 242,
"story": 29,
"summary": "The speaker, who once earned three hundred a month on a timber contract, now lives on sixty rupees a month left by an aunt, and the habit has grown on him.",
"predicament": "A man who once earned a good living now lives on a small inheritance, while a habit slowly takes over everything."
},
{
"chunk": 243,
"story": 29,
"summary": "He can no longer work; the proprietor drew his money, gave him half to live on and kept the rest, and he did not care.",
"predicament": "Unable to work any longer, a man lets the one who supplies his habit collect his income and keep half of it."
},
{
"chunk": 244,
"story": 29,
"summary": "Of the ten first regulars, most are dead, sacked or murdered; he once had a wife, and people said his habit killed her.",
"predicament": "A man recites how his old companions died one by one, and admits that people blamed him for his wife's death."
},
{
"chunk": 245,
"story": 29,
"summary": "He began trying the drug at home in the city; his wife seems to have died then; he found his way to the house and never left.",
"predicament": "A man cannot quite remember how a private experiment became the habit that cost him his wife and his work."
},
{
"chunk": 246,
"story": 29,
"summary": "He regulates his smoking by the dragons on the pillows, and uses the silver pipe the dead proprietor gave him, for the old man's sake.",
"predicament": "A man keeps using a gift from the one who profited from him, out of loyalty, because that one always treated him well."
},
{
"chunk": 247,
"story": 29,
"summary": "The proprietor's nephew now runs the house shabbily with the old man's woman, adulterates the drug, lets the room decay and scrimps on the idol's incense.",
"predicament": "When a careful host dies, his successor cuts corners everywhere, and the old regulars can only grumble among themselves."
},
{
"chunk": 248,
"story": 29,
"summary": "He cannot leave: the nephew now draws his money and might kill him, and he fears dying anywhere else; the nephew gives no credit and brags of the house.",
"predicament": "A man cannot leave a place that exploits him, because the one who holds his income might harm him and habit holds him fast."
},
{
"chunk": 249,
"story": 29,
"summary": "He hopes to die in the house like a woman who died there comfortably, on a clean mat with good stuff, and asks only that the nephew stop adulterating it.",
"predicament": "Resigned to dying where his habit has kept him, a man asks only for a little comfort and honesty at the end."
}
]
@@ -0,0 +1,32 @@
[
{
"chunk": 250,
"story": 30,
"summary": "After an epigraph, the narrator's household servant asks for an old polo-ball for his little son, and next day the narrator finds the child wandering in his dining-room.",
"predicament": "Someone who works for you asks for a discarded trifle for his small son, and the child soon wanders into your rooms."
},
{
"chunk": 251,
"story": 30,
"summary": "Startled, the child howls; his father scolds him as a rascal bound for jail; the narrator sends word he is not angry, and the child insists he is not a rascal but a man.",
"predicament": "A small child caught where he should not be is scolded harshly by his father, and you must decide how to respond."
},
{
"chunk": 252,
"story": 30,
"summary": "A formal daily greeting grows up between the narrator and the solitary child, who builds little enclosures of flowers and broken china in the garden.",
"predicament": "A small friendship grows up across a wide gap in standing, through daily greetings and a lonely child's games."
},
{
"chunk": 253,
"story": 30,
"summary": "The narrator accidentally tramples the child's work; someone tells the boy the master was angry; reassured, the child builds grander and grander palaces for months.",
"predicament": "Having carelessly ruined a child's work, you learn someone has told him you were angry, and must set it right."
},
{
"chunk": 254,
"story": 30,
"summary": "One day the child is missing; he has a fever; within a week the narrator meets his father carrying the small body to the burial ground.",
"predicament": "A child you had grown quietly fond of falls ill and dies, and you meet his grieving father on the road."
}
]
@@ -0,0 +1,44 @@
[
{
"chunk": 255,
"story": 31,
"summary": "After a proverb, the narrator describes a rough young man who has comfortably nursed an unrequited attachment for four years to a girl long since married.",
"predicament": "A young man at the start of his career nurses an old unrequited attachment, enjoying the gloom more than he admits."
},
{
"chunk": 256,
"story": 31,
"summary": "He sees in a passing rickshaw the living image of his old love, a married woman visiting for the season, and decides to get to know her and pretend for a while.",
"predicament": "A man meets a married woman who is the image of his lost love, and befriends her to relive the past."
},
{
"chunk": 257,
"story": 31,
"summary": "He contrives to see her constantly and deceives himself thoroughly: every look, gesture and tone is his old love's, though her nature is entirely different.",
"predicament": "A man devotes himself to someone only because she resembles another, and wilfully deceives himself about what he is doing."
},
{
"chunk": 258,
"story": 31,
"summary": "Bored by anything about her own life, he betrays himself; she asks why he attends her when he plainly does not care for her, and he blurts that he does not.",
"predicament": "Pressed by a woman to explain his constant attentions, a man blurts out that he does not really care for her at all."
},
{
"chunk": 259,
"story": 31,
"summary": "She scornfully learns she is a lay-figure for his old love; the season ends and he goes back to work, but cannot tell which woman fills his thoughts.",
"predicament": "Having used a woman as a stand-in for a lost love, a man can no longer tell which of them he thinks of."
},
{
"chunk": 260,
"story": 31,
"summary": "Her husband is transferred and she stays a week in the young man's station; he realises he has fallen for her, an honest married woman, and curses his folly.",
"predicament": "A man realises he has fallen for a good, married woman he began courting only as a likeness, and curses his own folly."
},
{
"chunk": 261,
"story": 31,
"summary": "She gently turns aside his remarks and thanks him as one who knows it was all for the likeness; at the station he tells her he hopes never to see her face again, and she understands.",
"predicament": "Loving a married woman who treats him kindly as a mere stand-in, a man parts from her hoping never to see her again."
}
]
@@ -0,0 +1,44 @@
[
{
"chunk": 262,
"story": 32,
"summary": "After a ballad epigraph, the narrator observes that everyone in the service believes his own small task is the pivot on which the whole administration turns.",
"predicament": "Everyone in a large organisation believes their own small task is what keeps the whole machine running."
},
{
"chunk": 263,
"story": 32,
"summary": "A middle-aged official is said to know more about the princely states than any man alive; his superiors echo his words and feel they are guiding the empire, while he does the work.",
"predicament": "In a big undertaking, one expert does the real work while those above him repeat his words and collect the credit."
},
{
"chunk": 264,
"story": 32,
"summary": "His superiors keep him working by praise, even the viceroy's, until he believes himself indispensable; yet hardly anyone knows who he is, and his work leaves no time for friends.",
"predicament": "An indispensable worker is kept at his desk by praise from above, while almost nobody knows who he is or what he does."
},
{
"chunk": 265,
"story": 32,
"summary": "He falls suddenly in love with a frivolous, lisping girl; the station laughs; she pretends interest in his work and mocks it behind his back.",
"predicament": "A dry, overworked expert falls for a frivolous young woman who pretends interest in his work and mocks it behind his back."
},
{
"chunk": 266,
"story": 32,
"summary": "After a month of doing his work badly, he conceives a great history to lay at her feet; she promises to wait a year, with an eye on his salary, and he takes leave.",
"predicament": "A man plans a great work to lay at his beloved's feet, and she agrees to wait, mostly for his salary."
},
{
"chunk": 267,
"story": 32,
"summary": "He works ten hours a day for two hundred and thirty days, and love makes the book a masterpiece; the narrator notes how women drive men out of the ranks and then lose interest.",
"predicament": "Working blind for someone else's sake, a man toils day and night and produces the finest work of his whole life."
},
{
"chunk": 268,
"story": 32,
"summary": "She glances at it and says she did not understand it; broken, he returns to hack work and sinks the whole edition in a lake, keeping one copy that he later gives the narrator.",
"predicament": "The one person a man's life's work was made for dismisses it unread, and he destroys it and returns to drudgery."
}
]
@@ -0,0 +1,38 @@
[
{
"chunk": 269,
"story": 33,
"summary": "After an epigraph, the narrator describes a sleepy, good-natured doctor and his wife who withdraw entirely from station society after their marriage.",
"predicament": "A newly married couple shut themselves away from the small community around them, content to need nobody else."
},
{
"chunk": 270,
"story": 33,
"summary": "When typhoid breaks out his wife falls ill; he is too shy to ask for help for eight days, and a neighbour scolds him; the station nurses all its sick through, but she relapses and dies.",
"predicament": "Having kept everyone at arm's length, a shy man waits too long to ask for help when his wife falls dangerously ill."
},
{
"chunk": 271,
"story": 33,
"summary": "He does his duties perfectly but will not be comforted; colleagues urge leave, and he goes on a walking tour with his late wife's idle, thieving favourite servant.",
"predicament": "Grieving, a man does his work perfectly but will not be comforted, and his colleagues gently urge him to take leave."
},
{
"chunk": 272,
"story": 33,
"summary": "At a remote rest house the servant runs back in terror, saying he met the dead wife on the road and she sent word she would meet her husband next month at a distant town.",
"predicament": "A frightened companion brings a grieving man a message from his dead wife, naming a distant place and a time."
},
{
"chunk": 273,
"story": 33,
"summary": "The doctor walks the verandah all night; back at work, he tells an old friend the story, and a telegram arrives ordering him to that very town to fight cholera.",
"predicament": "Just as a grieving man shrugs off a strange omen, orders arrive sending him to the very place it named."
},
{
"chunk": 274,
"story": 33,
"summary": "He says he has not sought death but will not be sorry; the servant begs him not to go and quits; the doctor goes alone and dies there within eleven days.",
"predicament": "Believing an order means his death, a man accepts it calmly and goes alone, while his frightened companion refuses to follow."
}
]
@@ -0,0 +1,74 @@
[
{
"chunk": 275,
"story": 34,
"summary": "After an epigraph, the narrator helps a drunken loafer singing a love song in a caravanserai, who talks of Oxford haunts as though he had never left them.",
"predicament": "You meet a drunken, educated man who has fallen far from his old standing, and he talks as if he had never left it."
},
{
"chunk": 276,
"story": 34,
"summary": "The loafer, sobering, asks to be helped to his quarters among the horse-traders, apologising with literary flourishes for his disgrace.",
"predicament": "A fallen man with a gentleman's manners asks a stranger to help him home, joking elegantly about his own disgrace."
},
{
"chunk": 277,
"story": 34,
"summary": "His companion scolds him; the narrator learns he is thirty-five though he looks fifty, and has cut himself off from his own people entirely and wants no notice.",
"predicament": "Someone who has cut every tie with his own class lives openly outside it, and wants neither pity nor notice from anyone."
},
{
"chunk": 278,
"story": 34,
"summary": "He refuses charity, accepts only tobacco and books, and agrees the narrator must visit him only after dark, saying he would have done the same in his days of standing.",
"predicament": "A fallen man accepts your friendship only on equal terms, and understands perfectly why you can visit him only after dark."
},
{
"chunk": 279,
"story": 34,
"summary": "He lectures the narrator on his ignorance of the life around him, and they eat together with the woman who loves him and has stayed with him three years.",
"predicament": "A fallen man patronises his visitor as ignorant of everything around him, while living contentedly by ways his old world despises."
},
{
"chunk": 280,
"story": 34,
"summary": "Drunk two days a week, he raves in Greek and German, and promises the narrator materials for a new Inferno that will make him famous.",
"predicament": "A fallen man's head is full of useless learning, and between binges he promises you something that will make your name."
},
{
"chunk": 281,
"story": 34,
"summary": "Recovering, he boasts that he can no longer feel shame or even a hangover, and insists such insensibility is enviable.",
"predicament": "A man who has sunk as low as he can claims that feeling nothing any more is a blessing, and dares you to disagree."
},
{
"chunk": 282,
"story": 34,
"summary": "He lists his consolations: his learning, his companion's love and a monument he has built in seven years, admitting he sold a book the narrator lent him.",
"predicament": "A fallen man counts his consolations, admitting he has already sold the thing you lent him to buy drink."
},
{
"chunk": 283,
"story": 34,
"summary": "He is proud and poor, refuses every gift and the hospital, and when pneumonia takes him he sends a note asking the narrator to help him die.",
"predicament": "A proud, destitute man refuses every gift and any charity, and sends for you only when he is dying."
},
{
"chunk": 284,
"story": 34,
"summary": "Dying, he drives off the doctor and has his companion bring out a bundle of manuscript, his book of what he saw and lived.",
"predicament": "A dying man reveals the one great work he has secretly built through years of disgrace, and handles it like treasure."
},
{
"chunk": 285,
"story": 34,
"summary": "He bequeaths it to the narrator for his kindnesses, predicting he will mangle it, and charges him not to let it die.",
"predicament": "A dying man hands you his life's work and charges you not to let it die, while predicting you will mangle it."
},
{
"chunk": 286,
"story": 34,
"summary": "He dies murmuring a prayer and not guilty, my Lord; nothing in his room says who he was; the narrator and a friend sort and cut the papers.",
"predicament": "After a fallen man's death, nothing is left to say who he was except the manuscript that he entrusted to you."
}
]
@@ -0,0 +1,42 @@
#!/usr/bin/env python3
"""Assemble records.json and groups.json from batches/ and groups_src.py, and check them."""
import collections, glob, json, pathlib
from groups_src import G, STANDING
here = pathlib.Path(__file__).parent
chunks = json.loads((here.parent / 'chunks.json').read_text())
stories = json.loads((here.parent / 'stories.json').read_text())
recs = [r for f in sorted(glob.glob(str(here / 'batches/s*.json'))) for r in json.loads(open(f).read())]
assert [r['chunk'] for r in recs] == list(range(len(chunks))), 'every scene, once, in order'
assert all(chunks[r['chunk']]['story'] == r['story'] for r in recs)
seen = collections.Counter(m for g in G for m in g['members'])
dup = [m for m, n in seen.items() if n > 1]
assert not dup, f'scenes in two groups: {dup}'
by = {r['chunk']: r for r in recs}
out = []
for g in G:
assert 3 <= len(g['options']) <= 5, g['id']
st = sorted({by[m]['story'] for m in g['members']})
stand = collections.Counter(STANDING[by[m]['story']] for m in g['members'])
out.append({
'id': g['id'], 'name': g['name'], 'predicament': g['predicament'],
'sentence': f"A {g['actor']} wants {g['wants']} from {g['counterpart']}.",
'actor': g['actor'], 'wants': g['wants'], 'counterpart': g['counterpart'],
'stories': st, 'story_titles': [stories[s]['title'] for s in st],
'standing': dict(stand), 'stage': stand.most_common(1)[0][0],
'members': [{'chunk': m, 'story': by[m]['story'], 'predicament': by[m]['predicament']} for m in g['members']],
'options': [{'text': t, 'source': s, 'moves': mv,
'in_group': (int(s.split(':')[1]) in g['members']) if s.startswith('scene:') else None}
for t, s, mv in g['options']],
})
unassigned = [r['chunk'] for r in recs if r['chunk'] not in seen]
(here / 'records.json').write_text(json.dumps(recs, indent=1, ensure_ascii=False))
(here / 'groups.json').write_text(json.dumps({'groups': out, 'unassigned': unassigned}, indent=1, ensure_ascii=False))
multi = sum(len(g['stories']) >= 2 for g in out)
print(f'{len(recs)} scenes, {len(out)} groups ({multi} span 2+ stories), '
f'{sum(seen.values())} assigned, {len(unassigned)} unassigned: {unassigned}')
for g in out:
print(f"{g['id']} {len(g['members']):2} scenes {len(g['stories'])} stories stage {g['stage']:6} {g['name']}")
src = collections.Counter(o['source'].split(':')[0] for g in out for o in g['options'])
print('option sources:', dict(src), '| scene options citing a scene outside their group:',
sum(o['in_group'] is False for g in out for o in g['options']))
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,316 @@
"""Hand-built reference grouping of the Plain Tales 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 35 stories, has at least five scenes, and no story supplies
more than half a group's members.
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: tact (handling people, reading the unwritten
rules, keeping a thing quiet) and cunning (kept from Jacobs: the trick, the lever, the used secret).
"""
G = [
# ---- patronage, influence, getting heard ------------------------------------------------------------
dict(id='G01', name='A word from someone powerful',
predicament='What you want will go to whoever has someone powerful speaking for them, and nobody powerful is speaking for you.',
actor='junior with no connections', wants='a good place', counterpart='someone with influence',
members=[34, 35, 37, 92, 93, 127, 172],
options=[
('Do someone influential a daring favour, then ask for yours.', 'scene:93', {'cunning':'+', 'relationships.patron':'+', 'flags.favour_owed':'set'}),
('Take the place your family arranged, and be grateful.', 'scene:37', {'standing':'+', 'relationships.family':'+', 'flags.placed_by_favour':'set'}),
('Turn the powerful person you offended into your ally.', 'scene:34', {'tact':'+', 'relationships.patron':'+', 'standing':'risk'}),
('Find out whose favourite is after your place.', 'filled', {'cunning':'+', 'relationships.rival':'-'}),
('Let your work speak for itself, and wait.', 'archetype', {'standing':'-'})]),
dict(id='G02', name='The power behind the title',
predicament='The person with the title is not the one who decides, and the one who really does answers to nobody.',
actor='person below', wants='to stay on the right side of the real power', counterpart='someone with sway but no title',
members=[79, 94, 106, 111, 116],
options=[
('Court them quietly, as everyone else does.', 'archetype', {'relationships.power_broker':'+', 'standing':'+'}),
('Keep out of their way and give them nothing to talk about.', 'filled', {'tact':'+'}),
('Ask them to use their pull for you, and leave the rest to them.', 'scene:115', {'relationships.power_broker':'+', 'flags.in_their_debt':'set'}),
('Let them overreach, then tell the story against them in public.', 'scene:111', {'cunning':'+', 'relationships.power_broker':'-', 'standing':'+'}),
('Defy them, whatever they say about you afterwards.', 'scene:81', {'standing':'risk', 'relationships.power_broker':'-', 'flags.made_an_enemy':'set'})]),
dict(id='G03', name='One chance to be heard at the top',
predicament='The one person who can settle your matter is almost impossible to reach, and you may get a single chance to be heard.',
actor='person with a case', wants='a hearing', counterpart='someone at the very top',
members=[98, 99, 108, 109, 110, 184, 185],
options=[
('Go straight to the most powerful person you can reach, and show what you know.', 'scene:98', {'cunning':'+', 'standing':'risk', 'relationships.the_top':'risk'}),
('Put your case plainly and let it stand.', 'scene:184', {'tact':'+', 'relationships.the_top':'+'}),
('Make a spectacle of it, so they cannot forget you.', 'scene:110', {'standing':'risk', 'relationships.the_top':'+', 'flags.made_a_scene':'set'}),
('Win over someone they already listen to.', 'filled', {'tact':'+', 'relationships.go_between':'+'}),
('Go through the proper channels, and wait.', 'archetype', {'relationships.gatekeeper':'+'})]),
dict(id='G04', name='A change imposed by someone who does not know the ground',
predicament='Someone set over you is imposing a change on something they do not understand, and nobody who knows better has been asked.',
actor='person below', wants='the old ways kept, or at least a say', counterpart='someone newly in charge',
members=[95, 180, 181, 205, 206, 247],
options=[
('Obey, and keep your opinion to yourself.', 'archetype', {'relationships.superior':'+', 'relationships.company':'-'}),
('Offer to put it right yourselves, at your own cost.', 'scene:206', {'money':'-', 'relationships.company':'+', 'relationships.superior':'-'}),
('Get the facts to them through someone they will listen to.', 'scene:184', {'tact':'+', 'relationships.superior':'+'}),
('Work quietly round the order.', 'scene:207', {'cunning':'+', 'relationships.superior':'risk', 'flags.defied_quietly':'set'}),
('Grumble with the others, and change nothing.', 'scene:247', {'relationships.company':'+'})]),
dict(id='G05', name='Knowing what goes on below',
predicament='You know what really goes on among people nobody above you bothers to ask, and that knowledge could settle a matter.',
actor='person who mixes below', wants='to put what they know to use', counterpart='those who never ask',
members=[32, 179, 182, 221, 222, 279],
options=[
('Tell the people at the top what they have not heard.', 'scene:182', {'standing':'+', 'relationships.the_top':'+'}),
('Go among them yourself, quietly, and find out.', 'scene:221', {'cunning':'+', 'standing':'risk', 'flags.went_among_them':'set'}),
('Let the liars see that you know, and watch them fold.', 'scene:222', {'cunning':'+', 'relationships.accuser':'-'}),
('Keep it to yourself: nobody above values it anyway.', 'scene:28', {'standing':'-'}),
('Trade what you know for a better place.', 'filled', {'money':'+', 'relationships.the_top':'+', 'relationships.informants':'-'})]),
# ---- work, merit, strain ----------------------------------------------------------------------------
dict(id='G06', name='Good work that counts for nothing',
predicament='You do the job better than those above you, and it earns you nothing but their resentment.',
actor='capable junior', wants='credit for good work', counterpart='those above who take it',
members=[16, 27, 29, 190, 263],
options=[
('Keep doing it well, and say nothing.', 'archetype', {'standing':'-', 'flags.unrewarded':'set'}),
('Go back to doing it your own way once their anger passes.', 'scene:29', {'standing':'-', 'relationships.superiors':'-'}),
('Take nothing seriously, since good work goes to others anyway.', 'scene:16', {'relationships.colleagues':'+', 'standing':'-'}),
('Make sure the right person sees what you did.', 'filled', {'tact':'+', 'standing':'+', 'relationships.superiors':'risk'})]),
dict(id='G07', name='Work nobody sees',
predicament='You are carrying far more work than anyone knows, and the only people who notice are the ones who profit from it.',
actor='overloaded worker', wants='to hold it all together', counterpart='those who pile it on',
members=[103, 163, 174, 189, 199, 200, 264, 267],
options=[
('Sit up nights and get it all done.', 'scene:199', {'standing':'+', 'flags.overworked':'set'}),
('Keep going on their praise alone.', 'scene:264', {'relationships.superiors':'+', 'flags.overworked':'set'}),
('Tell someone what you are carrying.', 'filled', {'relationships.colleagues':'+', 'standing':'-'}),
('Find your own private relief, and tell nobody.', 'scene:163', {'standing':'risk', 'flags.secret_vice':'set'}),
('Take the rest you are owed.', 'archetype', {'standing':'-'})]),
dict(id='G08', name='The strain gives way',
predicament='The strain you hid for months has finally broken through, and now everyone can see what it has done to you.',
actor='person at breaking point', wants='to recover without losing everything', counterpart='those who see it',
members=[104, 105, 154, 166, 193, 201],
options=[
('Take leave, and go away to mend.', 'scene:105', {'standing':'-', 'flags.on_leave':'set'}),
('Throw it all up and walk away.', 'scene:193', {'standing':'-', 'money':'-', 'flags.walked_out':'set'}),
('Beg to be let go quietly.', 'scene:154', {'relationships.superior':'+', 'standing':'-'}),
('Let it be passed off as illness, and carry on.', 'scene:167', {'standing':'+', 'flags.covered_up':'set'}),
('Snap back at whoever pushed you there.', 'scene:201', {'relationships.tormentor':'-', 'standing':'risk'})]),
# ---- newcomers and first posts ----------------------------------------------------------------------
dict(id='G09', name='The rules nobody tells you',
predicament='You are new, and everyone around you follows rules nobody will explain until you have broken them.',
actor='newcomer', wants='to fit in on their own terms', counterpart='the old hands',
members=[17, 100, 102, 139, 170, 171],
options=[
('Keep telling them how things ought to be done.', 'scene:171', {'relationships.old_hands':'-', 'standing':'risk'}),
('Take the teasing without a word, and bide your time.', 'scene:140', {'tact':'+', 'relationships.old_hands':'+'}),
('Throw yourself into everything they do.', 'scene:17', {'money':'-', 'relationships.old_hands':'+', 'flags.overreached':'set'}),
('Watch and learn before you open your mouth.', 'archetype', {'tact':'+'}),
('Ask someone you trust what is expected.', 'filled', {'relationships.mentor':'+'})]),
dict(id='G10', name='Sent out young, with nobody watching',
predicament='You have been sent out young to your first real post, far from anyone who knows you, and you are starting to go wrong.',
actor='young man in his first post', wants='to make good', counterpart='the people who could warn him and do not',
members=[14, 15, 18, 38, 59, 186, 188],
options=[
('Do enough to get by, and congratulate yourself.', 'scene:38', {'standing':'+', 'flags.drifting':'set'}),
('Take one scolding to heart and decide you are ruined.', 'scene:18', {'standing':'-', 'flags.despairing':'set'}),
('Cut your spending and live on what you have.', 'scene:188', {'money':'+', 'relationships.colleagues':'-'}),
('Find an older hand who has been there, and listen.', 'scene:25', {'relationships.mentor':'+'}),
('Write home as if all is well.', 'filled', {'relationships.family':'+', 'flags.hiding_trouble':'set'})]),
# ---- marriage and prospects -------------------------------------------------------------------------
dict(id='G11', name='The marriage or the career',
predicament='The marriage you want would cost you your prospects, and the people above you have made clear which they expect you to choose.',
actor='ambitious junior', wants='both love and advancement', counterpart='those who control their prospects',
members=[36, 73, 77, 113, 114, 187, 191],
options=[
('Marry anyway, and take the consequences.', 'scene:114', {'relationships.beloved':'+', 'standing':'-', 'flags.married_against_advice':'set'}),
('Marry in secret, and keep it from those above you.', 'scene:187', {'relationships.beloved':'+', 'money':'-', 'flags.secret_marriage':'set'}),
('Give up the work you love to win consent.', 'scene:36', {'relationships.beloved':'+', 'standing':'+', 'flags.gave_up_calling':'set'}),
('Earn the promotion first, whatever it takes.', 'scene:75', {'standing':'+', 'money':'+', 'relationships.beloved':'risk'}),
('Let the match go, and keep your career.', 'scene:117', {'standing':'+', 'relationships.beloved':'-'})]),
dict(id='G12', name='A good match your heart refuses',
predicament='Your family wants you to accept a well-placed match, and your heart is with someone who has no prospects at all.',
actor='young woman', wants='to marry for love', counterpart='a family with ambitions for her',
members=[30, 39, 64, 86, 87],
options=[
('Give in, and marry where they choose.', 'scene:86', {'relationships.family':'+', 'money':'+', 'relationships.beloved':'-'}),
('Tell them calmly that you have chosen, and keep saying it.', 'scene:2', {'relationships.family':'-', 'standing':'risk'}),
('Let the one you love find a way round your parents.', 'scene:30', {'relationships.beloved':'+', 'cunning':'+'}),
('Slip away to the one you love whenever you can.', 'scene:66', {'relationships.beloved':'+', 'relationships.family':'-'}),
('Wait for them, however long it takes.', 'filled', {'relationships.beloved':'+', 'relationships.family':'-'})]),
dict(id='G13', name='Someone else wants them too',
predicament='Someone else is after the person you want, and the contest is being fought out in front of everyone you know.',
actor='suitor or spouse', wants='the person they love', counterpart='a rival',
members=[10, 11, 12, 13, 44, 45, 55, 60, 66, 67, 68, 69],
options=[
('Say nothing, then outshine the rival on one evening.', 'scene:10', {'tact':'+', 'relationships.rival':'-', 'relationships.beloved':'+'}),
('Choose in public, and let the loser be humiliated.', 'scene:68', {'relationships.beloved':'+', 'relationships.rival':'-', 'standing':'risk'}),
('Reclaim them before everyone, laughing.', 'scene:12', {'relationships.beloved':'+', 'standing':'+'}),
('Treat them kindly where the rival used them.', 'scene:61', {'relationships.beloved':'+', 'relationships.rival':'-'}),
('Take your time, and keep everyone guessing.', 'scene:45', {'relationships.beloved':'risk'})]),
# ---- reputation, talk, lies -------------------------------------------------------------------------
dict(id='G14', name='Everyone will hear of it',
predicament='Something embarrassing has happened, and in a place where everyone knows everyone the story will follow you unless it is kept quiet.',
actor='person with a story to bury', wants='to keep their name out of it', counterpart='the gossips',
members=[84, 90, 125, 215, 228, 237],
options=[
('Beg the one person who saw it to say nothing.', 'scene:125', {'relationships.witness':'+', 'flags.owes_silence':'set'}),
('Put about a harmless cover story.', 'scene:91', {'cunning':'+', 'flags.cover_story':'set'}),
('Settle it in private, with no public scandal.', 'scene:237', {'tact':'+', 'relationships.culprit':'-'}),
('Punish everyone involved, publicly.', 'scene:214', {'standing':'-', 'relationships.company':'-'}),
('Laugh at it first and loudest.', 'filled', {'tact':'+', 'standing':'+'})]),
dict(id='G15', name='Everyone has already decided',
predicament='Everything looks against you, and the people whose opinion matters have made up their minds before you can explain.',
actor='person wrongly suspected', wants='to be believed', counterpart='those who have judged them',
members=[80, 82, 83, 122, 123, 143, 144, 220],
options=[
('Explain again, at length, from the beginning.', 'scene:122', {'standing':'-', 'relationships.accusers':'-'}),
('Deny it flatly and say no more.', 'scene:82', {'relationships.spouse':'-', 'flags.under_suspicion':'set'}),
('Ask to see their proof.', 'scene:144', {'tact':'+', 'standing':'+'}),
('Call in someone who can find out the truth.', 'scene:221', {'cunning':'+', 'relationships.friends':'+'}),
('Keep your temper, and wait for someone who knows you.', 'archetype', {'tact':'+'})]),
dict(id='G16', name='A lie to spare them',
predicament='The truth would hurt someone badly, and a careful lie would spare them, if you can keep it up.',
actor='person holding a painful truth', wants='to spare someone', counterpart='the one who would be hurt',
members=[4, 5, 6, 22, 23, 25, 91, 173, 175, 176],
options=[
('Tell the lie, and build it so it will hold.', 'scene:23', {'cunning':'+', 'relationships.deceived':'+', 'flags.kind_lie':'set'}),
('Keep the pretence up to the very end, at your own cost.', 'scene:175', {'money':'-', 'relationships.deceived':'+', 'flags.kind_lie':'set'}),
('Tell the comforting lie that spares you a scene.', 'scene:4', {'relationships.deceived':'risk', 'flags.kind_lie':'set'}),
('Admit the lie when they find you out.', 'scene:6', {'relationships.deceived':'-'}),
('Tell the truth gently, and bear what follows.', 'filled', {'relationships.deceived':'-', 'standing':'+'})]),
dict(id='G17', name='Getting even by a trick',
predicament='Someone who has wronged or tormented you has a weakness you could use, and a clever trick would pay them back in full.',
actor='person with a score to settle', wants='to get even without being caught', counterpart='the one who wronged them',
members=[81, 85, 140, 145, 195, 198, 203, 207, 213],
options=[
('Bet them you will get your own back, and wait.', 'scene:140', {'cunning':'+', 'relationships.tormentor':'risk'}),
('Pretend to submit while you plan.', 'scene:207', {'cunning':'+', 'relationships.superior':'+', 'flags.plotting':'set'}),
('Use the system itself to bury them in work.', 'scene:198', {'cunning':'+', 'relationships.rival':'-', 'flags.vendetta':'set'}),
('Hand them something that will torment them, and never explain.', 'scene:81', {'cunning':'+', 'relationships.rival':'-', 'flags.vendetta':'set'}),
('Let it go.', 'archetype', {'relationships.rival':'+'})]),
dict(id='G18', name='It fell into your hands',
predicament='By accident you have come into something not meant for you, a secret or an advantage, and you could turn it to your own ends.',
actor='person with an accidental advantage', wants='to profit by it', counterpart='those it was meant for',
members=[96, 97, 150, 234, 235],
options=[
('Use it to get what you want.', 'scene:97', {'cunning':'+', 'standing':'+', 'flags.used_a_secret':'set'}),
('Keep it to yourself until the moment comes.', 'scene:150', {'cunning':'+', 'money':'+'}),
('Take it, and take your chance.', 'scene:235', {'relationships.beloved':'+', 'standing':'risk', 'flags.stolen':'set'}),
('Hand it back to its owner.', 'filled', {'standing':'+', 'relationships.owner':'+'})]),
# ---- meddling, standing by, crossing over ----------------------------------------------------------
dict(id='G19', name='Saving them from themselves',
predicament='Someone is heading for ruin without seeing it, and you could step in behind their back and steer them off it.',
actor='onlooker', wants='to save someone from their own folly', counterpart='someone who does not want saving',
members=[19, 52, 53, 62, 115, 236],
options=[
('Win their trust with kindness, then talk sense into them.', 'scene:62', {'tact':'+', 'relationships.protege':'+'}),
('Take matters into your own hands, by force if need be.', 'scene:115', {'cunning':'+', 'relationships.protege':'risk', 'flags.meddled':'set'}),
('Drop everything and go after them now.', 'scene:19', {'relationships.protege':'+', 'standing':'risk'}),
('Search their things for proof, and risk being the thief yourself.', 'scene:236', {'cunning':'+', 'standing':'risk'}),
('Mind your own business.', 'archetype', {'relationships.protege':'-'})]),
dict(id='G20', name='Swallowing it from someone above',
predicament='Someone with power over you orders you about like a dog, and everything you want depends on swallowing it.',
actor='person held down', wants='to keep their place without losing themselves', counterpart='someone above them',
members=[31, 33, 57, 58, 71],
options=[
('Hold your tongue, and do as you are told.', 'scene:31', {'relationships.superior':'+', 'standing':'-'}),
('Fetch and carry, hoping to be noticed.', 'scene:58', {'money':'-', 'relationships.superior':'+', 'standing':'-'}),
('Lose your temper and tell them what you think.', 'scene:33', {'standing':'risk', 'relationships.superior':'-', 'flags.gave_self_away':'set'}),
('Look for somewhere else to go.', 'filled', {'relationships.superior':'-', 'money':'risk'})]),
dict(id='G21', name='Seeing it, and saying nothing',
predicament='You can see plainly that something is wrong in front of you, and saying so would cost you or someone else more than silence.',
actor='onlooker', wants='to do right without making it worse', counterpart='the one doing wrong',
members=[48, 136, 138, 219, 232],
options=[
('Keep quiet, so as not to spoil things.', 'scene:48', {'relationships.company':'+', 'flags.kept_silent':'set'}),
('Say nothing, but keep well clear of it.', 'scene:232', {'tact':'+'}),
('Go along with it, afraid of what they could do to you.', 'scene:136', {'relationships.wrongdoer':'+', 'flags.kept_silent':'set'}),
('Bring in someone with the power to stop it.', 'scene:221', {'relationships.authority':'+', 'standing':'risk'}),
('Speak up, whatever it costs.', 'filled', {'standing':'risk', 'relationships.wrongdoer':'-'})]),
dict(id='G22', name='Belonging to neither side',
predicament='You have crossed into a world your own circle looks down on, and now you belong fully to neither.',
actor='person between two worlds', wants='a place of their own', counterpart='both sides',
members=[0, 28, 41, 155, 277, 278],
options=[
('Go back to where you came from, and burn the bridge.', 'scene:6', {'relationships.own_circle':'-', 'flags.went_back':'set'}),
('Keep your two lives strictly apart.', 'scene:159', {'cunning':'+', 'standing':'risk', 'flags.double_life':'set'}),
('Live openly on the other side, and ask nobody for anything.', 'scene:278', {'standing':'-', 'relationships.own_circle':'-'}),
('Put what you have learned to use for your own side.', 'scene:28', {'cunning':'+', 'standing':'risk'})]),
# ---- love, home, loss -------------------------------------------------------------------------------
dict(id='G23', name='Not free to love them',
predicament='You love someone who is not free, or you are not, and every meeting risks a scandal your world will not forgive.',
actor='lover', wants='to be near them', counterpart='someone bound elsewhere',
members=[3, 157, 159, 256, 260, 261],
options=[
('Meet in secret, and keep it hidden.', 'scene:157', {'relationships.beloved':'+', 'standing':'risk', 'flags.secret_affair':'set'}),
('Enjoy their company and tell yourself it means nothing.', 'scene:3', {'relationships.beloved':'+', 'flags.led_on':'set'}),
('Say goodbye, and mean never to see them again.', 'scene:261', {'relationships.beloved':'-', 'standing':'+'}),
('Tell them plainly how you feel.', 'filled', {'relationships.beloved':'risk'})]),
dict(id='G24', name='Devoted to someone who does not care',
predicament='You have given your devotion to someone who takes it as their due, and everyone but you can see they do not care.',
actor='devoted admirer', wants='to matter to them', counterpart='someone who does not care',
members=[164, 227, 233, 265, 268],
options=[
('Pour your best work into a gift for them.', 'scene:266', {'standing':'+', 'relationships.idol':'risk', 'flags.devoted':'set'}),
('Worship from a distance, and ask nothing.', 'scene:165', {'relationships.idol':'+', 'flags.devoted':'set'}),
('Press harder for their attention.', 'scene:227', {'relationships.idol':'-', 'relationships.colleagues':'-'}),
('See them as they are, and walk away.', 'filled', {'relationships.idol':'-', 'standing':'+'})]),
dict(id='G25', name='Too late',
predicament='You arrive, or understand, at last, and it may already be too late to set it right.',
actor='person arriving too late', wants='to put it right', counterpart='someone past helping',
members=[20, 43, 89, 194, 270],
options=[
('Race there anyway, as fast as you can.', 'scene:20', {'relationships.lost_one':'+', 'money':'-'}),
('Offer everything you have, though they may no longer need it.', 'scene:43', {'money':'-', 'relationships.lost_one':'risk'}),
('Ask for help now, though you should have asked long ago.', 'scene:270', {'relationships.neighbours':'+', 'standing':'-'}),
('Laugh at the reward that came too late, and walk away.', 'scene:194', {'standing':'-', 'flags.walked_out':'set'})]),
dict(id='G26', name='An omen meant for you',
predicament='Something uncanny seems to be speaking to you directly, and the sensible explanation may not be the true one.',
actor='person given a sign', wants='to know what to do', counterpart='whatever sent it',
members=[129, 231, 238, 272, 273],
options=[
('Obey it, whatever it costs.', 'scene:274', {'standing':'risk', 'flags.followed_sign':'set'}),
('Pay whatever it asks.', 'scene:134', {'money':'-', 'flags.followed_sign':'set'}),
('Laugh it off as a story.', 'scene:234', {'standing':'+'}),
('Send for someone who knows how such things are done.', 'scene:129', {'cunning':'+', 'relationships.adviser':'+'}),
('Pass it on quietly where it can do no harm.', 'scene:237', {'flags.rid_of_it':'set'})]),
dict(id='G27', name='Panic in the dark',
predicament='Something uncanny has come at you out of the dark, and one person\'s fright could carry everyone with it.',
actor='frightened person', wants='to keep their head', counterpart='whatever is out there',
members=[49, 131, 132, 133, 210, 211],
options=[
('Keep still and watch until you see how it is done.', 'scene:133', {'cunning':'+'}),
('Run with everyone else.', 'scene:211', {'standing':'-', 'relationships.company':'+'}),
('Walk up and lay your hands on it.', 'scene:213', {'standing':'+', 'flags.faced_it':'set'}),
('Huddle together and wait for the light.', 'scene:49', {'relationships.company':'+'})]),
dict(id='G28', name='A marriage gone cold',
predicament='The one you married has stopped seeing you except to mock or ignore you, and everyone around you has noticed.',
actor='neglected spouse', wants='to be seen again', counterpart='their spouse',
members=[8, 9, 88, 217, 218],
options=[
('Keep your own counsel, and plan how to win them back.', 'scene:10', {'tact':'+', 'relationships.spouse':'+'}),
('Bear it with a smile in front of guests.', 'scene:219', {'relationships.spouse':'-', 'standing':'-'}),
('Pour your love into your children instead.', 'scene:218', {'relationships.children':'+', 'relationships.spouse':'-'}),
('Tell them plainly what it is doing to you.', 'filled', {'relationships.spouse':'risk'})]),
dict(id='G29', name='The habit that is taking everything',
predicament='A private habit is slowly taking your work, your money and your people, and you keep promising yourself you will stop.',
actor='person in the grip of a habit', wants='to stop, or to stop caring', counterpart='their own habit',
members=[165, 242, 245, 280, 281],
options=[
('Fight it alone, week by week.', 'scene:165', {'standing':'+', 'flags.fighting_habit':'set'}),
('Swear an oath, and never drink alone again.', 'scene:167', {'standing':'+', 'relationships.friends':'+'}),
('Let someone else take charge of your money.', 'scene:243', {'money':'-', 'relationships.supplier':'+'}),
('Give in, and stop caring.', 'scene:281', {'standing':'-', 'money':'-', 'flags.given_up':'set'})]),
]
# 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:'low', 5:'middle', 6:'low', 7:'middle',
8:'low', 9:'high', 10:'middle', 11:'low', 12:'low', 13:'high', 14:'middle', 15:'low',
16:'middle', 17:'low', 18:'middle', 19:'middle', 20:'middle', 21:'middle', 22:'high',
23:'low', 24:'low', 25:'middle', 26:'middle', 27:'low', 28:'middle', 29:'low',
30:'middle', 31:'low', 32:'high', 33:'middle', 34:'low'}
# Subalterns, first-post juniors, a signaller, an orphan, an addict and a loafer rank low; officials
# of some years' standing, their wives and the narrator middle; a colonel's household (9), the
# viceroy's circle (13), the supreme council (22) and a senior department's indispensable expert (32)
# high. Story 9 is judged by the colonel and his wife, who bear its consequences, not by the subaltern
# whose watch starts it. Story 25 is judged middle because its scenes alternate between the colonel
# and the subaltern who defies him.
@@ -0,0 +1,49 @@
#!/usr/bin/env python3
"""Render groups.json + records.json as one self-contained page: REFERENCE.html."""
import html, json, pathlib
here = pathlib.Path(__file__).parent
d = json.loads((here / 'groups.json').read_text())
recs = {r['chunk']: r for r in json.loads((here / 'records.json').read_text())}
stories = json.loads((here.parent / 'stories.json').read_text())
e = html.escape
SRC = {'archetype': 'archetype', 'filled': 'filled gap'}
def src(o):
if o['source'].startswith('scene:'):
n = o['source'].split(':')[1]
return f'from scene {n}' + ('' if o['in_group'] else ' <span class="warn">(outside this group)</span>')
return SRC[o['source']]
def moves(m): return ' '.join(f'<code>{e(k)} {e(v)}</code>' for k, v in m.items())
def scene(c):
r = recs[c]
return (f'<details><summary><b>{c}</b> · <i>{e(stories[r["story"]]["title"])}</i> — {e(r["predicament"])}</summary>'
f'<p class="sum">{e(r["summary"])}</p></details>')
out = []
for g in d['groups']:
out.append(f'''<section><h2>{g["id"]} · {e(g["name"])}</h2>
<p class="pred">{e(g["predicament"])}</p>
<p class="meta">{e(g["sentence"])} · {len(g["members"])} scenes from {len(g["stories"])} stories
({e(", ".join(g["story_titles"]))}) · stage <b>{g["stage"]}</b></p>
<h3>Options</h3><ol>{"".join(f"<li>{e(o['text'])} <span class='src'>{src(o)}</span><br>{moves(o['moves'])}</li>" for o in g["options"])}</ol>
<h3>Scenes</h3>{"".join(scene(m["chunk"]) for m in g["members"])}</section>''')
un = ''.join(scene(c) for c in d['unassigned'])
page = f'''<!doctype html><html lang="en"><head><meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1"><title>Plain Tales Reference Groups</title>
<style>
:root{{--bg:#fbfaf7;--fg:#1d1d1b;--mute:#6b6760;--line:#e2ded6;--acc:#2f5d8a;--warn:#a4481c}}
@media (prefers-color-scheme:dark){{:root{{--bg:#191917;--fg:#e8e6e1;--mute:#a09c94;--line:#34332f;--acc:#8ab4dc;--warn:#e6915f}}}}
body{{background:var(--bg);color:var(--fg);font:16px/1.5 Georgia,serif;max-width:52rem;margin:0 auto;padding:1rem 16px 4rem}}
h1{{font-size:1.5rem}} h2{{font-size:1.15rem;margin:0 0 .3rem}} h3{{font-size:.8rem;text-transform:uppercase;letter-spacing:.06em;color:var(--mute);margin:.9rem 0 .3rem}}
section{{border-top:1px solid var(--line);padding:1.2rem 0}} .pred{{font-size:1.05rem;margin:.2rem 0}}
.meta,.src,.sum{{color:var(--mute);font-size:.88rem}} .warn{{color:var(--warn)}}
code{{font:12px ui-monospace,monospace;border:1px solid var(--line);border-radius:3px;padding:0 .3em;margin-right:.2em}}
li{{margin:.35rem 0}} details{{margin:.2rem 0}} summary{{cursor:pointer}} .sum{{margin:.2rem 0 .5rem 1.2rem}}
</style></head><body>
<h1>Plain Tales from the Hills: reference groups</h1>
<p class="meta">Rudyard Kipling, 1888 (Project Gutenberg #1858). 35 stories, 287 scenes cut by the same rule as <code>chunk.py</code>.
Summaries, predicaments, groups and options written by Claude by reading every scene: no local inference.
A comparison baseline, not a pack. Option moves give a direction only, never a number.</p>
{"".join(out)}
<section><h2>Unassigned ({len(d["unassigned"])})</h2><p class="meta">Scenes that fit no situation recurring in three or more stories.</p>{un}</section>
</body></html>'''
(here / 'REFERENCE.html').write_text(page, encoding='utf-8')
print('wrote', here / 'REFERENCE.html', len(page), 'bytes')
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,31 @@
"""Split the Project Gutenberg text of Kipling, *Plain Tales from the Hills* (eBook #1858), into stories.
Titles are taken from the body, where each story opens with an upper-case heading line ending in a
full stop, because the contents list has typos ("LESPETH" for the body's "LISPETH"). Every body heading
is checked against the contents by closest match, and the counts must agree. Each story's opening
verse epigraph is kept: it is short, and removing it would need a per-story rule."""
import difflib, re, sys
sys.path.insert(0, '..')
from gutenberg_chunks import gutenberg_body, paragraphs, write
VOLUME = 'Plain Tales from the Hills (Rudyard Kipling, 1888)'
lines = gutenberg_body('corpus/plain-tales-from-the-hills.txt')
c0 = next(i for i, l in enumerate(lines) if l.strip() == 'CONTENTS')
b0 = next(i for i, l in enumerate(lines) if i > c0 and l.strip() == 'PLAIN TALES FROM THE HILLS')
contents = [l.strip() for l in lines[c0 + 1:b0] if l.strip()]
def is_head(l): # upper case apart from a "Mc"; the full stop is usually there but not on THE HOUSE OF SUDDHOO
l = l.strip()
return bool(re.fullmatch(r"[A-Z][A-Za-z0-9 '’,\-]+\.?", l)) and len(l) > 3 and l.replace('Mc', 'MC') == l.upper()
heads = [i for i, l in enumerate(lines) if i > b0 and is_head(l) and not lines[i - 1].strip() and not lines[i + 1].strip()]
titles = [lines[i].strip().rstrip('.').replace('Mc', 'MC') for i in heads]
assert len(titles) == len(contents), (len(titles), len(contents), set(titles) ^ set(contents))
for t, c in zip(titles, contents):
if t != c.rstrip('.'):
r = difflib.SequenceMatcher(None, t, c).ratio()
print(f' heading {t!r} vs contents {c!r} ({r:.2f})'); assert r > 0.8
stories = []
for n, a in enumerate(heads):
b = heads[n + 1] if n + 1 < len(heads) else len(lines)
paras = paragraphs('\n'.join(lines[a + 1:b]))
stories.append({'volume': VOLUME, 'title': titles[n].title(), 'words': sum(len(p.split()) for p in paras),
'text': '\n\n'.join(paras)})
write('.', stories)
File diff suppressed because one or more lines are too long