Play PAPER HARBOUR with the criminal, and fix R-246

A pier that closed in 1974, a beacon still transmitting, and a probationer recruited
out of a city with a caution the department has quietly lost. The generator's gap —
somebody uses that agent's name before it is given — landed on him in phase 2, and he
held it on Fast Talk 14 against 48 while the Field Lead missed the read.

The case turned on a warrant card: the keepers of the ground want relieving by somebody
official enough to take the duty on, and every agent carries exactly that. Bargain 27,
favourable, rolled 33 — impression -1 to +1. The one unambiguously his moment was the
log the first team locked in behind them: 11 against Sleight of Hand 50.

R-246: a fumbled greeting cost nothing. contactOutcomes has said fumble/signal -1 since
the social pillar was built, and impression was adjusted only inside the `offer` branch
— so the -1 was computed on every botched greeting and thrown away. Impression now
falls on a fumble at any stage and still only rises on an offer; the narrower fix
matters because read's delta counts FACTS LEARNED, not standing, so applying the delta
always would have paid the team impression for doing research.

Also logged: a probationary criminal is out-sneaked by a career Field Lead (47 to 60)
because trade skills use the agency tier bands — defensible, flagged, not changed. And
one invented step of my own: I rolled Transposition to get them home after the
extraction phase had already put them out.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
slaguru666
2026-08-11 22:35:37 +01:00
co-authored by Claude Opus 5
parent b8430c284b
commit c60485de72
2 changed files with 72 additions and 2 deletions
+10 -2
View File
@@ -1946,8 +1946,16 @@ export async function resolveContact(caseFile, groupId, stage, actor, { circumst
}
}
if (stage === "signal" && delta > 0) rec.pidginEstablished = true;
if (stage === "offer") {
rec.offerMadeThisEncounter = true;
if (stage === "offer") rec.offerMadeThisEncounter = true;
// Impression rises only on an OFFER — that is the stage that is meant to buy
// standing — but it FALLS on a fumble at any stage. The adjustment used to sit
// inside the `offer` branch alone, so the table's `fumble: { signal: -1 }` was
// computed on every botched greeting and thrown away: you could insult a group in
// their own language all afternoon and it cost you nothing.
//
// Note `read`'s delta counts FACTS LEARNED rather than standing, which is why this
// is not simply "apply delta always" — that would pay you impression for research.
if (stage === "offer" || delta < 0) {
rec.impression = (Number(rec.impression) || 0) + delta;
rec.value = Math.max(-3, Math.min(3, Number(rec.impression) || 0));
}