@maka/maka-cli 5.63.0 → 5.64.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/bundle/typescript/package.json +1 -1
  2. package/bundle/typescript/src/commands/game/sideQuest/commands/ar.js +29 -8
  3. package/bundle/typescript/src/commands/game/sideQuest/commands/ar.js.map +1 -1
  4. package/bundle/typescript/src/commands/game/sideQuest/commands/ask.d.ts +42 -0
  5. package/bundle/typescript/src/commands/game/sideQuest/commands/ask.js +86 -3
  6. package/bundle/typescript/src/commands/game/sideQuest/commands/ask.js.map +1 -1
  7. package/bundle/typescript/src/commands/game/sideQuest/commands/backlog.js +5 -0
  8. package/bundle/typescript/src/commands/game/sideQuest/commands/backlog.js.map +1 -1
  9. package/bundle/typescript/src/commands/game/sideQuest/commands/call.js +29 -5
  10. package/bundle/typescript/src/commands/game/sideQuest/commands/call.js.map +1 -1
  11. package/bundle/typescript/src/commands/game/sideQuest/commands/contacts.js +22 -1
  12. package/bundle/typescript/src/commands/game/sideQuest/commands/contacts.js.map +1 -1
  13. package/bundle/typescript/src/commands/game/sideQuest/commands/jobs.js +16 -9
  14. package/bundle/typescript/src/commands/game/sideQuest/commands/jobs.js.map +1 -1
  15. package/bundle/typescript/src/commands/game/sideQuest/commands/journal.d.ts +44 -0
  16. package/bundle/typescript/src/commands/game/sideQuest/commands/journal.js +136 -0
  17. package/bundle/typescript/src/commands/game/sideQuest/commands/journal.js.map +1 -0
  18. package/bundle/typescript/src/commands/game/sideQuest/commands/look.d.ts +20 -0
  19. package/bundle/typescript/src/commands/game/sideQuest/commands/look.js +99 -3
  20. package/bundle/typescript/src/commands/game/sideQuest/commands/look.js.map +1 -1
  21. package/bundle/typescript/src/commands/game/sideQuest/commands/players.js +8 -2
  22. package/bundle/typescript/src/commands/game/sideQuest/commands/players.js.map +1 -1
  23. package/bundle/typescript/src/commands/game/sideQuest/commands/search.js +27 -4
  24. package/bundle/typescript/src/commands/game/sideQuest/commands/search.js.map +1 -1
  25. package/bundle/typescript/src/commands/game/sideQuest/commands/sheet.js +30 -1
  26. package/bundle/typescript/src/commands/game/sideQuest/commands/sheet.js.map +1 -1
  27. package/bundle/typescript/src/commands/game/sideQuest/commands/silent.js +11 -1
  28. package/bundle/typescript/src/commands/game/sideQuest/commands/silent.js.map +1 -1
  29. package/bundle/typescript/src/commands/game/sideQuest/commands/talk.d.ts +47 -0
  30. package/bundle/typescript/src/commands/game/sideQuest/commands/talk.js +91 -5
  31. package/bundle/typescript/src/commands/game/sideQuest/commands/talk.js.map +1 -1
  32. package/bundle/typescript/src/commands/game/sideQuest/commands/time.d.ts +20 -0
  33. package/bundle/typescript/src/commands/game/sideQuest/commands/time.js +61 -0
  34. package/bundle/typescript/src/commands/game/sideQuest/commands/time.js.map +1 -0
  35. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.d.ts +45 -0
  36. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js +150 -9
  37. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js.map +1 -1
  38. package/bundle/typescript/src/commands/game/sideQuest/game.d.ts +104 -0
  39. package/bundle/typescript/src/commands/game/sideQuest/game.js +257 -11
  40. package/bundle/typescript/src/commands/game/sideQuest/game.js.map +1 -1
  41. package/bundle/typescript/src/commands/game/sideQuest/headless-harness.d.ts +78 -0
  42. package/bundle/typescript/src/commands/game/sideQuest/headless-harness.js +188 -0
  43. package/bundle/typescript/src/commands/game/sideQuest/headless-harness.js.map +1 -0
  44. package/bundle/typescript/src/commands/game/sideQuest/headless.d.ts +5 -0
  45. package/bundle/typescript/src/commands/game/sideQuest/headless.js +54 -0
  46. package/bundle/typescript/src/commands/game/sideQuest/headless.js.map +1 -1
  47. package/bundle/typescript/src/commands/game/sideQuest/models/npc.d.ts +62 -0
  48. package/bundle/typescript/src/commands/game/sideQuest/models/npc.js +121 -9
  49. package/bundle/typescript/src/commands/game/sideQuest/models/npc.js.map +1 -1
  50. package/bundle/typescript/src/commands/game/sideQuest/models/puzzle.d.ts +9 -0
  51. package/bundle/typescript/src/commands/game/sideQuest/models/puzzle.js +28 -1
  52. package/bundle/typescript/src/commands/game/sideQuest/models/puzzle.js.map +1 -1
  53. package/bundle/typescript/src/commands/game/sideQuest/models/room.d.ts +67 -7
  54. package/bundle/typescript/src/commands/game/sideQuest/models/room.js +116 -19
  55. package/bundle/typescript/src/commands/game/sideQuest/models/room.js.map +1 -1
  56. package/bundle/typescript/src/commands/game/sideQuest/utilities/ar.d.ts +22 -0
  57. package/bundle/typescript/src/commands/game/sideQuest/utilities/ar.js +26 -0
  58. package/bundle/typescript/src/commands/game/sideQuest/utilities/ar.js.map +1 -1
  59. package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog-dump.js +6 -0
  60. package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog-dump.js.map +1 -1
  61. package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog.d.ts +6 -0
  62. package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog.js.map +1 -1
  63. package/bundle/typescript/src/commands/game/sideQuest/utilities/log-style.d.ts +22 -0
  64. package/bundle/typescript/src/commands/game/sideQuest/utilities/log-style.js +24 -0
  65. package/bundle/typescript/src/commands/game/sideQuest/utilities/log-style.js.map +1 -1
  66. package/bundle/typescript/src/commands/game/sideQuest/utilities/persistence.js +30 -5
  67. package/bundle/typescript/src/commands/game/sideQuest/utilities/persistence.js.map +1 -1
  68. package/bundle/typescript/src/commands/game/sideQuest/utilities/playtester.d.ts +50 -0
  69. package/bundle/typescript/src/commands/game/sideQuest/utilities/playtester.js +43 -0
  70. package/bundle/typescript/src/commands/game/sideQuest/utilities/playtester.js.map +1 -0
  71. package/bundle/typescript/src/commands/game/sideQuest/utilities/room-grid.d.ts +11 -0
  72. package/bundle/typescript/src/commands/game/sideQuest/utilities/room-grid.js +42 -28
  73. package/bundle/typescript/src/commands/game/sideQuest/utilities/room-grid.js.map +1 -1
  74. package/bundle/typescript/src/commands/game/sideQuest/utilities/room-view.js +66 -8
  75. package/bundle/typescript/src/commands/game/sideQuest/utilities/room-view.js.map +1 -1
  76. package/bundle/typescript/src/commands/game/sideQuest/utilities/spots.d.ts +45 -3
  77. package/bundle/typescript/src/commands/game/sideQuest/utilities/spots.js +41 -6
  78. package/bundle/typescript/src/commands/game/sideQuest/utilities/spots.js.map +1 -1
  79. package/bundle/typescript/src/commands/game/sideQuest/utilities/world-clock.d.ts +83 -0
  80. package/bundle/typescript/src/commands/game/sideQuest/utilities/world-clock.js +106 -0
  81. package/bundle/typescript/src/commands/game/sideQuest/utilities/world-clock.js.map +1 -0
  82. package/package.json +1 -1
@@ -0,0 +1,78 @@
1
+ import { HeadlessSession } from './headless.js';
2
+ import type { GameEvent } from './utilities/emitter.js';
3
+ import type { ISceneSeedJson } from './types/seed/scene-seed.js';
4
+ import type { ISaveFileV1, ISavedPlayer } from './types/save-file.js';
5
+ /**
6
+ * STANDING UP A REAL HEADLESS BOOT, cheaply.
7
+ *
8
+ * This exists because of how the two worst bugs of 2026-08-27 escaped.
9
+ * `Game.currentClient` was set only on the SOLO arrival path, so on a
10
+ * shared run there was no meet, no haggle, and -- since the wrap-up
11
+ * settlement rides the same method -- a table could finish an entire job
12
+ * and nobody would be paid. The `contacts` "THIS JOB" row was blank for
13
+ * the same reason.
14
+ *
15
+ * Both had tests. Both tests passed. They STUBBED the state they were
16
+ * checking, so they pinned the rendering and never touched the wiring --
17
+ * a test that sets `game.currentClient` itself cannot discover that
18
+ * nothing else ever does. That is not a mistake either author made
19
+ * carelessly; it is what you write when standing up a real boot is
20
+ * expensive. So the fix for the class is to make it cheap.
21
+ *
22
+ * Deliberately NOT a *.test.ts file: jest's testMatch is `**''/*.test.ts`
23
+ * and a helper named that way becomes an empty failing suite.
24
+ *
25
+ * Two fixture facts that cost two sessions an hour between them, and are
26
+ * baked in here so nobody pays a third time:
27
+ * - saved items use enum KEYS, not values: 'Tiny' and 'Commlink',
28
+ * never 'tiny' and 'commlink'.
29
+ * - saved equipment is keyed by FLATTENED path -- 'head.commlink' --
30
+ * not nested objects.
31
+ * And one that used to be here and is now gone: there is no `currency`
32
+ * field on a save. Money rides credstick items. The old fixtures carried
33
+ * `currency: 500`, which read as meaningful and did exactly nothing.
34
+ */
35
+ /** A commlink as a SAVED item -- enum keys, per the note above. */
36
+ export declare const SAVED_COMMLINK: {
37
+ name: string;
38
+ description: string;
39
+ size: string;
40
+ category: string;
41
+ shape: string;
42
+ color: string;
43
+ texture: string;
44
+ rating: string;
45
+ weight: number;
46
+ };
47
+ /**
48
+ * The smallest save the boot path actually reads: buildPlayerFromSave
49
+ * needs the attribute/skill block, restorePlayer needs the replay arrays
50
+ * to iterate.
51
+ */
52
+ export declare function savedPlayer(name: string, overrides?: Record<string, unknown>): ISavedPlayer;
53
+ export declare function save(name: string, overrides?: Record<string, unknown>): ISaveFileV1;
54
+ /**
55
+ * The smallest scene the engine will boot AND that carries the things
56
+ * run-scoped state is about: a client, a payout, and a hand-off win
57
+ * condition. Hand-authored rather than read from a session folder -- a
58
+ * test that depends on one machine's saved games protects nothing on any
59
+ * other machine.
60
+ */
61
+ export declare function paritySeed(overrides?: Partial<ISceneSeedJson>): ISceneSeedJson;
62
+ export interface BootOptions {
63
+ seed?: ISceneSeedJson;
64
+ /** players[0] is the host/primary. Defaults to a single 'Maka'. */
65
+ players?: ISaveFileV1[];
66
+ /** Saves to bring in through addPlayer -- the JOINER path, which is a
67
+ * different code path from players[0] and is where host/joiner
68
+ * asymmetries live. */
69
+ join?: ISaveFileV1[];
70
+ events?: GameEvent[];
71
+ /** The tier the scene was generated at, as the hosting server knows it. */
72
+ tier?: number;
73
+ }
74
+ /**
75
+ * Boots a real headless session. The env flags keep it off the network
76
+ * and off telemetry, which is most of what made this expensive before.
77
+ */
78
+ export declare function bootSession(opts?: BootOptions): Promise<HeadlessSession>;
@@ -0,0 +1,188 @@
1
+ import { createHeadlessSession } from './headless.js';
2
+ /**
3
+ * STANDING UP A REAL HEADLESS BOOT, cheaply.
4
+ *
5
+ * This exists because of how the two worst bugs of 2026-08-27 escaped.
6
+ * `Game.currentClient` was set only on the SOLO arrival path, so on a
7
+ * shared run there was no meet, no haggle, and -- since the wrap-up
8
+ * settlement rides the same method -- a table could finish an entire job
9
+ * and nobody would be paid. The `contacts` "THIS JOB" row was blank for
10
+ * the same reason.
11
+ *
12
+ * Both had tests. Both tests passed. They STUBBED the state they were
13
+ * checking, so they pinned the rendering and never touched the wiring --
14
+ * a test that sets `game.currentClient` itself cannot discover that
15
+ * nothing else ever does. That is not a mistake either author made
16
+ * carelessly; it is what you write when standing up a real boot is
17
+ * expensive. So the fix for the class is to make it cheap.
18
+ *
19
+ * Deliberately NOT a *.test.ts file: jest's testMatch is `**''/*.test.ts`
20
+ * and a helper named that way becomes an empty failing suite.
21
+ *
22
+ * Two fixture facts that cost two sessions an hour between them, and are
23
+ * baked in here so nobody pays a third time:
24
+ * - saved items use enum KEYS, not values: 'Tiny' and 'Commlink',
25
+ * never 'tiny' and 'commlink'.
26
+ * - saved equipment is keyed by FLATTENED path -- 'head.commlink' --
27
+ * not nested objects.
28
+ * And one that used to be here and is now gone: there is no `currency`
29
+ * field on a save. Money rides credstick items. The old fixtures carried
30
+ * `currency: 500`, which read as meaningful and did exactly nothing.
31
+ */
32
+ /** A commlink as a SAVED item -- enum keys, per the note above. */
33
+ export const SAVED_COMMLINK = {
34
+ name: 'Renraku Sensei',
35
+ description: 'A commlink that has seen a few owners.',
36
+ size: 'Tiny',
37
+ category: 'Commlink',
38
+ shape: 'Rectangle',
39
+ color: 'Gray',
40
+ texture: 'Plastic',
41
+ rating: 'Common',
42
+ weight: 0.1,
43
+ };
44
+ /**
45
+ * The smallest save the boot path actually reads: buildPlayerFromSave
46
+ * needs the attribute/skill block, restorePlayer needs the replay arrays
47
+ * to iterate.
48
+ */
49
+ export function savedPlayer(name, overrides = {}) {
50
+ return {
51
+ name,
52
+ archetypeName: 'Street Samurai',
53
+ attributes: {
54
+ body: 4, agility: 5, reaction: 4, combatSkill: 3,
55
+ magic: 0, strength: 4, willpower: 3, logic: 3,
56
+ intuition: 4, charisma: 3, edge: 3, resonance: 0,
57
+ adept: false,
58
+ },
59
+ baseMagic: 0,
60
+ baseResonance: 0,
61
+ skills: { firearms: 4, perception: 3 },
62
+ karma: 0,
63
+ careerKarma: 0,
64
+ notorietyReasons: [],
65
+ metamagics: [],
66
+ initiationGrade: 0,
67
+ qualities: [],
68
+ augmentations: [],
69
+ augmentationGrades: [],
70
+ damageTaken: 0,
71
+ stunTaken: 0,
72
+ needs: {
73
+ hungerFatigue: 0, sleepFatigue: 0,
74
+ ateThisCycle: true, sleptThisCycle: true,
75
+ hungerStreak: 0, sleepStreak: 0,
76
+ },
77
+ edgeRemaining: 3,
78
+ haggledThisJob: false,
79
+ autoStance: 'manual',
80
+ visitedRooms: [],
81
+ inventory: [],
82
+ equipment: {},
83
+ ...overrides,
84
+ };
85
+ }
86
+ export function save(name, overrides = {}) {
87
+ return {
88
+ version: 1,
89
+ playerName: name,
90
+ player: savedPlayer(name, overrides),
91
+ game: {},
92
+ };
93
+ }
94
+ /**
95
+ * The smallest scene the engine will boot AND that carries the things
96
+ * run-scoped state is about: a client, a payout, and a hand-off win
97
+ * condition. Hand-authored rather than read from a session folder -- a
98
+ * test that depends on one machine's saved games protects nothing on any
99
+ * other machine.
100
+ */
101
+ export function paritySeed(overrides = {}) {
102
+ return {
103
+ name: 'Parity Job',
104
+ story: 'A short walk and a long memory.',
105
+ currency: { type: 'nuyen', authorityRoomTags: [] },
106
+ residenceTiers: ['Street', 'Squatter', 'Low'],
107
+ rooms: [
108
+ {
109
+ name: 'Curbside Drop',
110
+ description: 'Wet asphalt under a dead streetlamp.',
111
+ roomType: 'Street',
112
+ isStartRoom: true,
113
+ exits: [{ direction: 'north', targetRoom: 'Back Office' }],
114
+ },
115
+ {
116
+ name: 'Back Office',
117
+ description: 'A desk, a dead plant, and a chair nobody sits in.',
118
+ exits: [{ direction: 'south', targetRoom: 'Curbside Drop' }],
119
+ },
120
+ ],
121
+ npcs: [
122
+ {
123
+ description: 'A Johnson who never touches the goods.',
124
+ dialogue: ['The job is simple. That is what worries me.'],
125
+ player: {
126
+ name: 'Ms. Dovetail',
127
+ startLocation: 'Curbside Drop',
128
+ lifestyleChoices: [],
129
+ combat: { body: 3, agility: 3, reaction: 3, willpower: 3, logic: 3, intuition: 3, charisma: 5, strength: 3, edge: 2 },
130
+ },
131
+ },
132
+ ],
133
+ items: [
134
+ {
135
+ name: 'The Ledger',
136
+ description: 'A slab of a datapad, warm from somebody else pocket.',
137
+ size: 'Small',
138
+ category: 'Electronics',
139
+ shape: 'slab',
140
+ color: 'black',
141
+ texture: 'smooth',
142
+ rating: 'Common',
143
+ weight: 1,
144
+ transferable: true,
145
+ room: 'Back Office',
146
+ },
147
+ ],
148
+ puzzles: [],
149
+ winCondition: {
150
+ type: 'give',
151
+ item: 'The Ledger',
152
+ toNpc: 'Ms. Dovetail',
153
+ payout: 3000,
154
+ completionMessage: 'The ledger changes hands and nobody says a word about it.',
155
+ },
156
+ client: 'Ms. Dovetail',
157
+ player: {
158
+ name: 'Maka',
159
+ startLocation: 'Curbside Drop',
160
+ lifestyleChoices: [{ type: 'residence', metadata: { tier: 'Street', location: 'Curbside Drop' } }],
161
+ startingItems: [],
162
+ },
163
+ ...overrides,
164
+ };
165
+ }
166
+ /**
167
+ * Boots a real headless session. The env flags keep it off the network
168
+ * and off telemetry, which is most of what made this expensive before.
169
+ */
170
+ export async function bootSession(opts = {}) {
171
+ process.env.MAKA_NO_DDP = '1';
172
+ process.env.MAKA_NO_LORE = '1';
173
+ process.env.MAKA_NO_TELEMETRY = '1';
174
+ const events = opts.events;
175
+ const session = await createHeadlessSession({
176
+ sessionId: `harness-${Math.random().toString(36).slice(2, 8)}`,
177
+ seed: opts.seed ?? paritySeed(),
178
+ players: opts.players ?? [save('Maka')],
179
+ tier: opts.tier,
180
+ useAi: false,
181
+ sink: (ev) => { events?.push(ev); },
182
+ });
183
+ for (const joiner of opts.join ?? []) {
184
+ await session.addPlayer(joiner);
185
+ }
186
+ return session;
187
+ }
188
+ //# sourceMappingURL=headless-harness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"headless-harness.js","sourceRoot":"","sources":["../../../../../../src/commands/game/sideQuest/headless-harness.ts"],"names":[],"mappings":"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"}
@@ -61,6 +61,11 @@ export interface HeadlessOptions {
61
61
  seed: ISceneSeedJson;
62
62
  /** Save docs, one per human; players[0] is the leader/primary. */
63
63
  players: ISaveFileV1[];
64
+ /** The tier this scene was GENERATED at. The solo arrival path sets
65
+ * it from the same number; a headless boot had no way to say it and
66
+ * sat at the default 1, which then rode into the save snapshot and
67
+ * the next draft (audit 2026-08-27). Omitted keeps the old default. */
68
+ tier?: number;
64
69
  useAi?: boolean;
65
70
  sink: (ev: GameEvent) => void;
66
71
  debug?: (line: string) => void;
@@ -19,6 +19,7 @@ import { restorePlayer, serializePlayer } from './utilities/persistence.js';
19
19
  import { renderMapViewport } from './utilities/map-view.js';
20
20
  import { renderRoomLayoutCompact } from './utilities/room-view.js';
21
21
  import { entrySpotFor, spotOf } from './utilities/spots.js';
22
+ import { equipIntoEmptySlots } from './archetypes.js';
22
23
  /**
23
24
  * The session's Logger: same shape the whole engine already talks to,
24
25
  * but every player-visible line becomes a GameEvent through `sink`.
@@ -132,6 +133,33 @@ export function buildPlayerFromSave(save) {
132
133
  });
133
134
  player.archetypeName = save.player.archetypeName;
134
135
  restorePlayer(player, save.player);
136
+ // GEAR UP EVERY RUNNER, NOT JUST THE FIRST ONE (audit 2026-08-27,
137
+ // found by backlog-session-2).
138
+ //
139
+ // `Game.initEngine` ends with `equipIntoEmptySlots(this.player)` --
140
+ // singular, once, for the PRIMARY runner: wearables and the commlink
141
+ // slot into empty slots so no session starts with an "equip all"
142
+ // ritual. A save brought in through `addPlayer` never passed through
143
+ // that line, so a joiner carrying an unworn commlink stayed carrying
144
+ // it.
145
+ //
146
+ // The consequence is not cosmetic: call.ts requires a WORN commlink,
147
+ // so the joiner could neither call nor be called, and their HUD read
148
+ // "Link offline" from a save byte-identical to the host's.
149
+ //
150
+ // Doing it HERE rather than at the addPlayer call site is deliberate:
151
+ // this function is the one path both the host and every joiner
152
+ // actually share, so the two cannot drift apart again. It is also
153
+ // idempotent -- only EMPTY slots are filled -- so initEngine's own
154
+ // call on the primary remains harmless.
155
+ //
156
+ // Why it survived: the asymmetry is HOST vs JOINER, not solo vs
157
+ // shared. Every solo test passes. Every single-player shared test
158
+ // passes. It takes two runners in one session to see it at all, and
159
+ // it only bites gear that is carried-but-unworn -- a save made after
160
+ // picking something up mid-run, since character creation equips at
161
+ // creation time.
162
+ equipIntoEmptySlots(player);
135
163
  return player;
136
164
  }
137
165
  export async function createHeadlessSession(opts) {
@@ -140,6 +168,10 @@ export async function createHeadlessSession(opts) {
140
168
  return runInSession(ctx, async () => {
141
169
  const primary = buildPlayerFromSave(opts.players[0]);
142
170
  const game = new Game(primary, opts.seed);
171
+ // The run's tier, stated rather than defaulted -- see
172
+ // HeadlessOptions.tier and Game.tier.
173
+ if (typeof opts.tier === 'number')
174
+ game.tier = opts.tier;
143
175
  logger.bindGame(() => game);
144
176
  game.onPlayerDeath = (p) => {
145
177
  logger.system(`${p.name} is dead. The street keeps the change.`, 'all', 'death', { player: p.name });
@@ -172,6 +204,28 @@ export async function createHeadlessSession(opts) {
172
204
  // that they're waiting.
173
205
  const clientName = opts.seed.client;
174
206
  if (clientName) {
207
+ // THE MEET HAS TO BE ARMED, NOT JUST ANNOUNCED (playtest
208
+ // 2026-08-27: "THE MEET didn't happen when I met Mr. Osprey").
209
+ //
210
+ // Game.onClientInteraction is what turns talking to the Johnson
211
+ // into the terms, the one haggle, and -- at the other end of the
212
+ // run -- the WRAP-UP SETTLEMENT that actually pays the runner.
213
+ // Every one of those rides `currentClient`, and its first line is
214
+ // `if (!client ...) return null`.
215
+ //
216
+ // `currentClient` was set in exactly one place: activateRunScene,
217
+ // the SOLO arrival path. A headless session boots through
218
+ // initEngine and then hand-rolled the Johnson's page just below --
219
+ // announcing a meet that the engine had no idea was pending. So on
220
+ // a shared run the terms never landed, the haggle was unreachable,
221
+ // and at completion the settlement silently never fired: the table
222
+ // finished the job and nobody got paid.
223
+ //
224
+ // Deliberately identical in shape to the solo arrival, because the
225
+ // two paths diverging is the whole bug. Not saved and not meant to
226
+ // be -- mid-run state never is; it is rebuilt on boot, which is
227
+ // precisely what this line does for the shared path.
228
+ game.currentClient = { name: clientName, met: false, reported: false };
175
229
  const clientActor = game.scene.allActors.find(a => a.name === clientName);
176
230
  const room = clientActor?.currentLocation?.name;
177
231
  // ROOM GRIDS (spatial wave 2026-08-25, included shared-run fix):
@@ -1 +1 @@
1
- {"version":3,"file":"headless.js","sourceRoot":"","sources":["../../../../../../src/commands/game/sideQuest/headless.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"headless.js","sourceRoot":"","sources":["../../../../../../src/commands/game/sideQuest/headless.ts"],"names":[],"mappings":"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"}
@@ -30,6 +30,68 @@ export declare function castPin(names: string[]): string;
30
30
  * notice.
31
31
  */
32
32
  export declare function credentialHonestyNote(passesHeld: number): string;
33
+ /**
34
+ * WHAT YOU KNOW ENDS AT THIS ROOM -- audit findings #9 and #10, the last
35
+ * two unpinned facts from the credential sweep, and the same shape as
36
+ * the credential hole: pinned for the NPC's own room, invented for
37
+ * anywhere else.
38
+ *
39
+ * #9 an NPC asked where something is names a REAL room the item is
40
+ * not in. Real, because geography is pinned -- which makes it
41
+ * worse, not better. A vague answer costs a player nothing; a
42
+ * plausible, checkable, wrong one costs them the walk there, the
43
+ * search, and their trust in the next true thing they hear.
44
+ * #10 an NPC asked what a door ELSEWHERE needs invents a requirement.
45
+ * They only ever see their own room's exits.
46
+ *
47
+ * Deliberately NOT an index of the world's items and doors: that would
48
+ * spoil the game and cost prompt budget to do it. Pin what the NPC can
49
+ * legitimately know, deny the rest, index nothing.
50
+ *
51
+ * The scoping matters and is the whole difficulty. An NPC absolutely may
52
+ * say where things are when they were TOLD -- the client's briefing, the
53
+ * legwork facts ask.ts hands over, their own scripted talking points are
54
+ * all real knowledge, engine-supplied, and a blanket denial would gag
55
+ * the Johnson mid-brief. What is banned is GUESSING TO BE HELPFUL, which
56
+ * is the specific thing a model does when it has no answer and wants to
57
+ * give one.
58
+ */
59
+ export declare function localKnowledgeNote(roomName?: string): string;
60
+ /**
61
+ * OUT-OF-CHARACTER LEAKAGE on the exposition channel.
62
+ *
63
+ * Playtest 2026-08-27 (Sherry): "The response from Mr. Krow was OOC" --
64
+ * Krow answered in the game's own voice instead of in his.
65
+ *
66
+ * This is the SAME SEAM as splitSpokenLines, one layer up, and widening
67
+ * it was the right move rather than building a second mechanism. The
68
+ * exposition channel is the only place a model's non-fiction voice can
69
+ * reach the screen: `say` lines are attributed dialogue and [COMMAND]
70
+ * lines are parsed, so anything that is neither prints as narration in
71
+ * narration blue. A filter for exactly this already existed and was
72
+ * built from ONE report -- the first-person director ("I'll have Deacon
73
+ * Ruy stay guarded but crack slightly under the pressure...") -- so it
74
+ * only ever matched that one shape.
75
+ *
76
+ * The shapes it missed are the ordinary ones: the assistant preamble
77
+ * ("Certainly! Here's how he responds"), the frame ("As Mr. Krow, I'd
78
+ * say..."), the explicit marker ("OOC:", "Note:"), and talk about the
79
+ * player rather than to them ("The player is trying to...").
80
+ *
81
+ * SUPPRESSED, not restyled. The player also asked for OOC to be visibly
82
+ * distinct from fiction, and that is a real and separate feature -- but
83
+ * "Certainly! Here's what he'd say" is not out-of-character INFORMATION,
84
+ * it is the model failing to stay in the fiction, and there is nothing
85
+ * in it worth showing in any colour. The genuine OOC channels
86
+ * (logger.meta for mechanics, hint() for coaching) already exist and are
87
+ * already visibly distinct; routing leakage into them would fill the
88
+ * player's straight-talk channel with noise.
89
+ *
90
+ * Exported and PURE because it fails silently in the usual way: nothing
91
+ * throws when a pattern stops matching, the line just prints, and the
92
+ * only detector is a player watching their fixer break character.
93
+ */
94
+ export declare function isOutOfCharacter(line: string, npcName?: string): boolean;
33
95
  /**
34
96
  * SPEECH REPAIR: turns a model reply's raw lines into lines the
35
97
  * classifier below can actually read. Exported and PURE so the rules