@maka/maka-cli 5.65.2 → 5.66.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 (42) hide show
  1. package/bundle/typescript/package.json +1 -1
  2. package/bundle/typescript/src/commands/game/sideQuest/commands/backlog.d.ts +21 -0
  3. package/bundle/typescript/src/commands/game/sideQuest/commands/backlog.js +66 -6
  4. package/bundle/typescript/src/commands/game/sideQuest/commands/backlog.js.map +1 -1
  5. package/bundle/typescript/src/commands/game/sideQuest/commands/crew.js +4 -1
  6. package/bundle/typescript/src/commands/game/sideQuest/commands/crew.js.map +1 -1
  7. package/bundle/typescript/src/commands/game/sideQuest/commands/note.d.ts +73 -14
  8. package/bundle/typescript/src/commands/game/sideQuest/commands/note.js +150 -40
  9. package/bundle/typescript/src/commands/game/sideQuest/commands/note.js.map +1 -1
  10. package/bundle/typescript/src/commands/game/sideQuest/commands/sheet.js +4 -1
  11. package/bundle/typescript/src/commands/game/sideQuest/commands/sheet.js.map +1 -1
  12. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.d.ts +36 -0
  13. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js +84 -3
  14. package/bundle/typescript/src/commands/game/sideQuest/factories/scene-chunks.js.map +1 -1
  15. package/bundle/typescript/src/commands/game/sideQuest/game.js +21 -6
  16. package/bundle/typescript/src/commands/game/sideQuest/game.js.map +1 -1
  17. package/bundle/typescript/src/commands/game/sideQuest/headless.js +4 -1
  18. package/bundle/typescript/src/commands/game/sideQuest/headless.js.map +1 -1
  19. package/bundle/typescript/src/commands/game/sideQuest/models/npc.d.ts +6 -0
  20. package/bundle/typescript/src/commands/game/sideQuest/models/npc.js +67 -2
  21. package/bundle/typescript/src/commands/game/sideQuest/models/npc.js.map +1 -1
  22. package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog-review.d.ts +37 -0
  23. package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog-review.js +41 -0
  24. package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog-review.js.map +1 -1
  25. package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog.d.ts +13 -0
  26. package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog.js +37 -0
  27. package/bundle/typescript/src/commands/game/sideQuest/utilities/backlog.js.map +1 -1
  28. package/bundle/typescript/src/commands/game/sideQuest/utilities/identity.d.ts +36 -0
  29. package/bundle/typescript/src/commands/game/sideQuest/utilities/identity.js +48 -0
  30. package/bundle/typescript/src/commands/game/sideQuest/utilities/identity.js.map +1 -0
  31. package/bundle/typescript/src/commands/game/sideQuest/utilities/room-grid.js +55 -1
  32. package/bundle/typescript/src/commands/game/sideQuest/utilities/room-grid.js.map +1 -1
  33. package/bundle/typescript/src/commands/game/sideQuest/utilities/room-view.d.ts +27 -1
  34. package/bundle/typescript/src/commands/game/sideQuest/utilities/room-view.js +44 -11
  35. package/bundle/typescript/src/commands/game/sideQuest/utilities/room-view.js.map +1 -1
  36. package/bundle/typescript/src/commands/game/sideQuest/utilities/shared-run.d.ts +47 -2
  37. package/bundle/typescript/src/commands/game/sideQuest/utilities/shared-run.js +76 -8
  38. package/bundle/typescript/src/commands/game/sideQuest/utilities/shared-run.js.map +1 -1
  39. package/bundle/typescript/src/commands/game/sideQuest/utilities/table-notes.d.ts +30 -0
  40. package/bundle/typescript/src/commands/game/sideQuest/utilities/table-notes.js +46 -0
  41. package/bundle/typescript/src/commands/game/sideQuest/utilities/table-notes.js.map +1 -0
  42. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- import { appendFileSync, existsSync, mkdirSync, readFileSync } from 'fs';
1
+ import { appendFileSync, existsSync, mkdirSync, readFileSync, statSync, writeFileSync } from 'fs';
2
2
  import { dirname, join } from 'path';
3
3
  import { homedir } from 'os';
4
4
  import { Command } from './command.js';
@@ -16,13 +16,23 @@ import { hint } from '../utilities/hints.js';
16
16
  * These are notes ABOUT the game, not IN it: nothing here touches the
17
17
  * fiction, no NPC hears it, no world event fires.
18
18
  *
19
- * WHERE THEY LIVE (player ruling 2026-08-25): the session's own folder,
20
- * beside the game.log they annotate -- "the actual session folder, to
21
- * keep it organized". The first cut appended every note a runner ever
22
- * wrote to one lifelong file, which meant reading back a playtest
23
- * started by working out which lines belonged to the run you cared
24
- * about. A note is about the session it was typed in; it belongs with
25
- * that session's other artifacts.
19
+ * WHERE THEY LIVE -- TWO PLACES, because two rulings are both true.
20
+ *
21
+ * The session's own folder, beside the game.log they annotate (player
22
+ * ruling 2026-08-25: "the actual session folder, to keep it organized").
23
+ * The first cut put every note a runner ever wrote into one lifelong
24
+ * file, which meant reading back a playtest started by working out which
25
+ * lines belonged to the run you cared about.
26
+ *
27
+ * AND a durable per-runner file, because a session folder dies with the
28
+ * launch (player 2026-08-27: "notes should persist for the job"). Notes
29
+ * already survived a job CHANGE -- sessionDir cannot change mid-launch,
30
+ * verified by running it -- and vanished when the player quit and came
31
+ * back to a new timestamped folder. The old file was never destroyed;
32
+ * the game had simply lost the address.
33
+ *
34
+ * Writing both keeps the 2026-08-25 organisation AND the durability,
35
+ * without relitigating a decision that was right for its own purpose.
26
36
  *
27
37
  * Deliberately NOT uploaded: session-telemetry's collectFiles() names
28
38
  * the files it sends (the two logs, launch.json, scene-job-*.json), and
@@ -31,65 +41,165 @@ import { hint } from '../utilities/hints.js';
31
41
  */
32
42
  export class NoteCommand extends Command {
33
43
  static verb = 'note';
34
- static description = 'Jot a playtest note to disk: "note the door is on the wrong wall". Nobody in the fiction hears it. Bare "note" reads back this session\'s notes.';
35
- /** `<session>/notes.md` -- alongside that run's logs and scenes.
36
- * Harnesses and headless clients have no session dir; they fall back
37
- * to the old per-runner file so a note is never simply dropped. */
38
- notePath() {
44
+ static description = 'Jot a playtest note to disk: "note the door is on the wrong wall". Nobody in the fiction hears it. Bare "note" reads back this job\'s notes, which survive a relaunch.';
45
+ /** 100 KB, matching generator.ts's MAX_HISTORY_SIZE on history.json --
46
+ * the house answer for a file that would otherwise grow forever. */
47
+ static MAX_NOTES_SIZE = 100 * 1024;
48
+ /** `<session>/notes.md` -- alongside that run's logs and scenes. The
49
+ * organised per-playtest artifact (ruling 2026-08-25). Undefined for
50
+ * harnesses and headless clients, which have no session dir. */
51
+ sessionNotePath() {
39
52
  const dir = this.game?.sessionDir;
40
- if (dir)
41
- return join(dir, 'notes.md');
53
+ return dir ? join(dir, 'notes.md') : undefined;
54
+ }
55
+ /** The DURABLE file, one per runner, which outlives the launch.
56
+ *
57
+ * NOTES USED TO EVAPORATE ON RELAUNCH (player, 2026-08-27: "notes
58
+ * should persist for the job"). Traced by running it rather than
59
+ * reading it: sessionDir is dirname(_logFilePath), assigned once in
60
+ * initEngine and never reassigned, and the sessionId is a launch-time
61
+ * timestamp computed the same way for a new game AND a resume. So
62
+ * notes already survived a job change within one launch -- verified,
63
+ * two notes either side of a job swap landed in one file -- and died
64
+ * the moment the player quit and came back.
65
+ *
66
+ * They were never destroyed, which is the detail that decided the
67
+ * fix: the old notes.md sits on disk exactly where it was written,
68
+ * and only the game had lost the address. So this is a second WRITE
69
+ * and a better READ, not a migration.
70
+ *
71
+ * DELIBERATELY NOT THE SAVE FILE. cloud-saves.ts pushSave() POSTs the
72
+ * whole save object, so anything added to ISavedGameState is uploaded
73
+ * -- and this command's own header rules that notes "stay on the
74
+ * machine that wrote them". Putting them in the save would have
75
+ * silently started shipping the player's private margin scribbles to
76
+ * a server, with no test covering what a save contains. */
77
+ durableNotePath() {
42
78
  const who = (this.actor?.name ?? 'unknown').replace(/[^\w.-]+/g, '_');
43
79
  return join(homedir(), '.meteor', '.maka', 'side-quest-notes', `${who}.md`);
44
80
  }
81
+ /** The job a note was written on, so "persist for the job" is literal
82
+ * rather than merely durable. Absent at the hub, where there is no
83
+ * job to belong to. */
84
+ jobTag() {
85
+ return this.game?.currentJobName ?? 'no job';
86
+ }
45
87
  async execute(args = []) {
46
- const path = this.notePath();
88
+ const durable = this.durableNotePath();
47
89
  const text = (args ?? []).join(' ').trim();
48
90
  if (!text)
49
- return this.recent(path);
91
+ return this.recent(durable);
50
92
  // The path is worth showing once -- it's a long one, and repeating
51
93
  // it after every note buries the log pane in the same string.
52
- const first = !existsSync(path);
94
+ const first = !existsSync(durable);
95
+ const stamp = new Date().toISOString();
96
+ // MID-SHARED-RUN the local actor is still standing in the hub --
97
+ // the run itself is a server-side engine, and this command is
98
+ // deliberately routed home (see Game.LOCAL_ONLY_VERBS) so the note
99
+ // lands on the machine that typed it. Stamping the hub room onto a
100
+ // note written out on a job would be a plausible-looking lie, so
101
+ // say plainly where it came from instead.
102
+ const where = this.game?.remoteSession
103
+ ? 'shared run'
104
+ : (this.actor?.currentLocation?.name ?? 'nowhere');
105
+ const line = `- [${stamp}] [${this.jobTag()}] (${where}) ${text}\n`;
106
+ // BOTH FILES, because both rulings are still true. The session copy
107
+ // is what makes a playtest read back cleanly (2026-08-25); the
108
+ // durable copy is what survives the player closing the game. Writing
109
+ // both satisfies each without relitigating either.
110
+ //
111
+ // The DURABLE write is the one that must not fail silently -- it is
112
+ // the one the player reads back from. A session-copy failure is
113
+ // logged and swallowed: losing the tidy duplicate is not worth
114
+ // refusing the note.
53
115
  try {
54
- mkdirSync(dirname(path), { recursive: true });
55
- const stamp = new Date().toISOString();
56
- // MID-SHARED-RUN the local actor is still standing in the hub --
57
- // the run itself is a server-side engine, and this command is
58
- // deliberately routed home (see Game.LOCAL_ONLY_VERBS) so the note
59
- // lands on the machine that typed it. Stamping the hub room onto a
60
- // note written out on a job would be a plausible-looking lie, so
61
- // say plainly where it came from instead.
62
- const where = this.game?.remoteSession
63
- ? 'shared run'
64
- : (this.actor?.currentLocation?.name ?? 'nowhere');
65
- appendFileSync(path, `- [${stamp}] (${where}) ${text}\n`, 'utf8');
116
+ mkdirSync(dirname(durable), { recursive: true });
117
+ appendFileSync(durable, line, 'utf8');
118
+ this.pruneDurable(durable);
66
119
  }
67
120
  catch (err) {
68
- this.logger.write(`NoteCommand: could not write ${path}: ${err instanceof Error ? err.message : String(err)}`);
121
+ this.logger.write(`NoteCommand: could not write ${durable}: ${err instanceof Error ? err.message : String(err)}`);
69
122
  return `Couldn't write that note down -- see the game log for why.`;
70
123
  }
124
+ const sessionCopy = this.sessionNotePath();
125
+ if (sessionCopy) {
126
+ try {
127
+ mkdirSync(dirname(sessionCopy), { recursive: true });
128
+ appendFileSync(sessionCopy, line, 'utf8');
129
+ }
130
+ catch (err) {
131
+ this.logger.write(`NoteCommand: kept the note but could not mirror it to ${sessionCopy}: ${err instanceof Error ? err.message : String(err)}`);
132
+ }
133
+ }
71
134
  this.logger.write(`NOTE [${this.actor?.name}]: ${text}`);
72
135
  // NOT {gray-fg} (standing ruling): blessed gray is ANSI
73
136
  // bright-black and vanishes on stock dark palettes. White is the
74
137
  // established neutral for mechanics text.
75
- return `{white-fg}Noted.${first ? hint(` (${path})`) : ''}{/white-fg}`;
138
+ return `{white-fg}Noted.${first ? hint(` (${durable})`) : ''}{/white-fg}`;
76
139
  }
77
- /** Bare "note": this session's notes, oldest first. Capped only as a
78
- * guard against a marathon run flooding the log pane -- a session's
79
- * worth of notes is normally short enough to read whole. */
140
+ /**
141
+ * THE DURABLE FILE IS THE ONE THAT GROWS FOREVER, so it is capped.
142
+ *
143
+ * A per-session file emptied itself every launch; this one never does.
144
+ * 100 KB and prune-oldest is the house precedent (generator.ts's
145
+ * MAX_HISTORY_SIZE, on .maka/history.json) and there is no reason for
146
+ * notes to invent a second answer. At roughly 90 bytes a note that is
147
+ * on the order of a thousand notes -- far past any real playtest, and
148
+ * short enough that reading the whole file stays instant.
149
+ *
150
+ * Oldest-first is the right end to drop: a note's value decays, and
151
+ * the run you are on is the one you are reading back.
152
+ */
153
+ pruneDurable(path) {
154
+ try {
155
+ if (statSync(path).size <= NoteCommand.MAX_NOTES_SIZE)
156
+ return;
157
+ const lines = readFileSync(path, 'utf8').split('\n').filter(l => l.trim().length > 0);
158
+ let kept = lines;
159
+ while (kept.length > 1 && Buffer.byteLength(kept.join('\n'), 'utf8') > NoteCommand.MAX_NOTES_SIZE) {
160
+ kept = kept.slice(1);
161
+ }
162
+ writeFileSync(path, `${kept.join('\n')}\n`, 'utf8');
163
+ this.logger.write(`NoteCommand: pruned ${lines.length - kept.length} old note(s) to stay under ${NoteCommand.MAX_NOTES_SIZE} bytes.`);
164
+ }
165
+ catch (err) {
166
+ // A prune failure must never cost the player the note they just
167
+ // wrote -- the append already succeeded.
168
+ this.logger.write(`NoteCommand: could not prune ${path}: ${err instanceof Error ? err.message : String(err)}`);
169
+ }
170
+ }
171
+ /** Bare "note": THIS JOB's notes, oldest first, read from the durable
172
+ * file so they survive a relaunch.
173
+ *
174
+ * Reads the job's notes rather than the launch's, which is the whole
175
+ * of the request -- "notes should persist FOR THE JOB". Falls back to
176
+ * the whole file when nothing matches the current job, because an
177
+ * empty answer in front of a file that plainly has notes in it is the
178
+ * same unhelpful lie the old "No notes this session" was. */
80
179
  recent(path) {
81
180
  if (!existsSync(path)) {
82
- return `No notes this session.${hint(` ("note <something you noticed>" writes one down.)`)}`;
181
+ return `No notes yet.${hint(` ("note <something you noticed>" writes one down.)`)}`;
182
+ }
183
+ const all = readFileSync(path, 'utf8').split('\n').filter(l => l.trim().length > 0);
184
+ if (all.length === 0) {
185
+ return `No notes yet.${hint(` ("note <something you noticed>" writes one down.)`)}`;
83
186
  }
84
- const lines = readFileSync(path, 'utf8').split('\n').filter(l => l.trim().length > 0);
187
+ const job = this.jobTag();
188
+ const mine = all.filter(l => l.includes(`[${job}]`));
189
+ const scoped = mine.length > 0;
190
+ const lines = scoped ? mine : all;
85
191
  const tail = lines.slice(-20);
86
192
  // BANNER RAILS REMOVED (playtest 2026-08-26, on the crew panel:
87
193
  // "headers like that are too cluttery"). The heading itself stays --
88
194
  // it carries what the panel divider can't say for it.
195
+ const scope = scoped ? `on "${job}"` : 'in all';
89
196
  const header = tail.length < lines.length
90
- ? `NOTES (${lines.length} this session, showing the last ${tail.length})`
91
- : `NOTES (${lines.length} this session)`;
92
- return [header, ...tail].join('\n');
197
+ ? `NOTES (${lines.length} ${scope}, showing the last ${tail.length})`
198
+ : `NOTES (${lines.length} ${scope})`;
199
+ const older = scoped && all.length > lines.length
200
+ ? hint(`\n(${all.length - lines.length} more from other jobs are in ${path}.)`)
201
+ : '';
202
+ return [header, ...tail].join('\n') + older;
93
203
  }
94
204
  }
95
205
  //# sourceMappingURL=note.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"note.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/note.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"note.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/note.ts"],"names":[],"mappings":"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"}
@@ -194,7 +194,10 @@ export class SheetCommand extends Command {
194
194
  skillRows.push(` ${(rated[i] ?? '').padEnd(22)}${rated[i + 1] ?? ''}`.trimEnd());
195
195
  }
196
196
  const roleLine = member.source === 'ghost'
197
- ? `ghost runner (${member.ghost?.owner ?? 'unknown'}'s character)`
197
+ // Their ACCOUNT is not a thing this panel is allowed to say --
198
+ // it used to read "(doubleglizzy's character)" for every live
199
+ // seat. See utilities/identity.ts.
200
+ ? `live runner -- another player's character`
198
201
  : member.source === 'contact' ? 'crew -- recruited local' : (member.archetypeName ?? 'hired runner');
199
202
  const weapon = shell.getWeaponProfile();
200
203
  const row = (label, value) => ` ${label.padEnd(11)} ${value}`;
@@ -1 +1 @@
1
- {"version":3,"file":"sheet.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/sheet.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sheet.js","sourceRoot":"","sources":["../../../../../../../src/commands/game/sideQuest/commands/sheet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAY,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,EAAqB,MAAM,qBAAqB,CAAC;AAE7E,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACxG,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE1D;;;;;;;GAOG;AACH,MAAM,OAAO,YAAa,SAAQ,OAAO;IAC7B,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC;IACtB,MAAM,CAAC,WAAW,GAAG,wJAAwJ,CAAC;IAExL,KAAK,CAAC,OAAO,CAAC,OAAiB,EAAE;QAC/B,gEAAgE;QAChE,gEAAgE;QAChE,gEAAgE;QAChE,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QAErB,oEAAoE;QACpE,qEAAqE;QACrE,oEAAoE;QACpE,8DAA8D;QAC9D,oEAAoE;QACpE,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAU,EAAE;YACrC,QAAQ,CAAC,EAAE,CAAC;gBACV,KAAK,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBAC/C,KAAK,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;gBACnD,KAAK,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBACtE,KAAK,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBACxE,KAAK,aAAa,CAAC;gBACnB,KAAK,UAAU,CAAC;gBAChB,KAAK,oBAAoB,CAAC,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBAClF,KAAK,UAAU,CAAC;gBAChB,KAAK,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;gBAC3E,KAAK,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;gBAC/E,KAAK,aAAa,CAAC;gBACnB,KAAK,KAAK,CAAC;gBACX,KAAK,WAAW,CAAC;gBACjB,KAAK,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBACjD,KAAK,WAAW,CAAC;gBACjB,KAAK,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBAC1E,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC;YACpB,CAAC;QACH,CAAC,CAAC;QAEF,qEAAqE;QACrE,kBAAkB;QAClB,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;aACxD,GAAG,CAAC,CAAC,CAAC,EAAE;YACP,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YACxB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACtF,CAAC,CAAC,CAAC;QACL,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACzC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QACpF,CAAC;QAED,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU;YACpC,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,aAAa;gBAC9B,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;QAE7C,oEAAoE;QACpE,6DAA6D;QAC7D,EAAE;QACF,iEAAiE;QACjE,oEAAoE;QACpE,mEAAmE;QACnE,iEAAiE;QACjE,gEAAgE;QAChE,kCAAkC;QAClC,mEAAmE;QACnE,kEAAkE;QAClE,mEAAmE;QACnE,oEAAoE;QACpE,+DAA+D;QAC/D,8CAA8C;QAC9C,EAAE;QACF,mEAAmE;QACnE,yDAAyD;QACzD,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,kBAAkB,CAAC;QAC9C,MAAM,UAAU,GAAG,CAAC,CAAC,kBAAkB,GAAG,CAAC;YACzC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,kBAAkB,uBAAuB;YACpE,CAAC,CAAC,EAAE,CAAC;QACP,oEAAoE;QACpE,kEAAkE;QAClE,oEAAoE;QACpE,qDAAqD;QACrD,MAAM,aAAa,GAAG,CAAC,CAAC,aAAa,GAAG,OAAO;YAC7C,CAAC,CAAC,OAAO,OAAO,GAAG,CAAC,CAAC,aAAa,6CAA6C;YAC/E,CAAC,CAAC,EAAE,CAAC;QAEP,iEAAiE;QACjE,mEAAmE;QACnE,kEAAkE;QAClE,MAAM,GAAG,GAAG,CAAC,KAAa,EAAE,KAAa,EAAE,EAAE,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC;QAE/E,MAAM,KAAK,GAAG;YACZ,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YAC1E,EAAE;YACF,YAAY;YACZ,UAAU,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,OAAO,eAAe,CAAC,CAAC,QAAQ,EAAE;YAClE,cAAc,CAAC,CAAC,QAAQ,gBAAgB,CAAC,CAAC,SAAS,YAAY,CAAC,CAAC,KAAK,EAAE;YACxE,eAAe,CAAC,CAAC,SAAS,eAAe,CAAC,CAAC,QAAQ,EAAE;YACrD,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,KAAK,GAAG,SAAS,GAAG,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,2DAA2D,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1Q,GAAG,CAAC,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,2DAA2D,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACrM,UAAU,OAAO,KAAK,CAAC,CAAC,aAAa,SAAS,UAAU,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,GAAG,aAAa,GAAG,IAAI,CAAC,iEAAiE,CAAC,EAAE;YAClM,aAAa,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,iCAAiC,CAAC,EAAE;YACjF,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACrL,EAAE;YACF,GAAG,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC7B,OAAO;gBACP,+DAA+D;gBAC/D,6CAA6C;gBAC7C,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;oBACpD,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;oBACjC,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,OAAO,CAAC;oBAChE,OAAO,KAAK,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;gBAC7F,CAAC,CAAC;gBACF,EAAE;aACH,CAAC,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;gBACzB,WAAW;gBACX,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CACpD,KAAK,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;gBAC3F,EAAE;aACH,CAAC,CAAC,CAAC,EAAE,CAAC;YACP,iBAAiB,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,wBAAwB,CAAC,GAAG;YAC5D,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,0CAA0C,CAAC,CAAC;YACpF,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,kEAAkE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACxI,EAAE;YACF,SAAS;YACT,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,QAAQ,EAAE,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACrK,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,gBAAgB,EAAE,CAAC,IAAI,QAAQ,CAAC,CAAC,gBAAgB,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,IAAI,CAAC,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAC/L,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC;YACrE,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,iBAAiB,EAAE,IAAI,CAAC;YAC/C,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAClE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,gBAAgB,EAAE,CAAC;YACrC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;YAC5B,GAAG,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,eAAe,EAAG,CAAC,IAAI,IAAI,CAAC,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,eAAe,EAAG,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,8BAA8B,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/L,GAAG,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAC5D,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3H,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,GAAG,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,0BAA0B,EAAE,CAAC;YAC7K,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,UAAU,gBAAgB,CAAC,CAAC,SAAS,gBAAgB,CAAC,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,SAAS,uBAAuB,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YAC1T,GAAG,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACxF,GAAG,CAAC,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,eAAe,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACvM,GAAG,CAAC,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,aAAa,oCAAoC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACxG,GAAG,CAAC,CAAC,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,aAAa,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACxF,GAAG,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,cAAc,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SACjG,CAAC;QAEF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAEO,SAAS,CAAC,KAAa;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpC,OAAO,kCAAkC,IAAI,CAAC,oDAAoD,CAAC,EAAE,CAAC;QACxG,CAAC;QACD,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3E,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,kBAAkB,KAAK,mCAAmC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QAC5G,CAAC;QAED,gEAAgE;QAChE,6DAA6D;QAC7D,8BAA8B;QAC9B,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC;YACvB,UAAU,EAAE,MAAM,CAAC,IAAI;YACvB,aAAa,EAAE,SAA4B;YAC3C,MAAM,EAAE,MAAM,CAAC,MAAsC;SACtD,CAAC,CAAC;QACH,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;gBAC5B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC1B,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;gBACzB,gEAAgE;gBAChE,6CAA6C;gBAC7C,IAAI,mDAAmD,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;oBACpF,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,gEAAgE;gBACrF,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QACD,kEAAkE;QAClE,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;QAEzB,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;aAC5D,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC5C,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACzC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QACpF,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,KAAK,OAAO;YACxC,+DAA+D;YAC/D,8DAA8D;YAC9D,mCAAmC;YACnC,CAAC,CAAC,2CAA2C;YAC7C,CAAC,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,IAAI,cAAc,CAAC,CAAC;QACvG,MAAM,MAAM,GAAG,KAAK,CAAC,gBAAgB,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,CAAC,KAAa,EAAE,KAAa,EAAE,EAAE,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC;QAE/E,MAAM,KAAK,GAAG;YACZ,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,QAAQ,GAAG;YAC5C,KAAK,MAAM,CAAC,MAAM,oBAAoB,MAAM,CAAC,OAAO,OAAO,MAAM,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,gBAAgB,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE,EAAE;YACnK,EAAE;YACF,YAAY;YACZ,UAAU,KAAK,CAAC,IAAI,cAAc,KAAK,CAAC,OAAO,eAAe,KAAK,CAAC,QAAQ,EAAE;YAC9E,cAAc,KAAK,CAAC,QAAQ,gBAAgB,KAAK,CAAC,SAAS,YAAY,KAAK,CAAC,KAAK,EAAE;YACpF,eAAe,KAAK,CAAC,SAAS,eAAe,KAAK,CAAC,QAAQ,EAAE;YAC7D,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACtF,EAAE;YACF,QAAQ;YACR,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,0CAA0C,CAAC,CAAC;YACpF,EAAE;YACF,MAAM;YACN,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;YAChF,EAAE;YACF,SAAS;YACT,GAAG,CAAC,QAAQ,EAAE,GAAG,KAAK,CAAC,aAAa,EAAE,OAAO,MAAM,CAAC,IAAI,QAAQ,MAAM,CAAC,MAAM,GAAG,CAAC;YACjF,GAAG,CAAC,SAAS,EAAE,GAAG,KAAK,CAAC,cAAc,EAAE,aAAa,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC;YAC7E,GAAG,CAAC,YAAY,EAAE,GAAG,KAAK,CAAC,iBAAiB,EAAE,IAAI,CAAC;SACpD,CAAC;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC"}
@@ -328,6 +328,42 @@ export declare function resolveSpotName(declared: string, spotNames: string[]):
328
328
  * type.
329
329
  */
330
330
  export declare function ensureCredentialKindAgrees(details: ISceneDetails): string[];
331
+ /**
332
+ * RESOLVE A NAME ONE LIST WROTE AGAINST THE LIST THAT OWNS IT.
333
+ *
334
+ * The skeleton cross-references by NAME in two places, and both are
335
+ * written by the model in different passes: an exit names the `device`
336
+ * that holds it, and an exit names the `guard` who stands in it. Both
337
+ * were then matched by exact string equality against devices[].name and
338
+ * npcs[].name -- and a near-miss produced no error, no warning, and a
339
+ * scene that validated perfectly while meaning nothing:
340
+ *
341
+ * exit device "Keypad" vs devices[] "Door Keypad"
342
+ * -> the device gets no opensExit
343
+ * -> scene-factory never locks the door
344
+ * -> "there is nothing this keypad locks, the door is open"
345
+ *
346
+ * exit guard "Wraith" vs npcs[] "Wraith Kovac"
347
+ * -> the NPC never gets `guarding`
348
+ * -> holdsGround sees a bystander, yieldDoorway moves them aside
349
+ * -> "I was able to just, push Wraith away"
350
+ *
351
+ * Two player-visible mechanics, one shape: a reference validated for
352
+ * STRUCTURE (a string is present) and never for MEANING (it names
353
+ * something that exists).
354
+ *
355
+ * REPAIR, not rejection -- the pattern this file already uses for a
356
+ * missing clue phrase and a guarded exit with no spot. Failing the
357
+ * draft costs a 6,000-token regeneration to fix one word, and a warning
358
+ * alone leaves the player-visible wrong in place.
359
+ *
360
+ * DELIBERATELY CONSERVATIVE. Exact, then trimmed/case-insensitive, then
361
+ * a UNIQUE substring either way. No typo tolerance and no nearest
362
+ * guess: binding a door to the wrong device is worse than leaving it
363
+ * unbound, because the unbound case at least logs. Anything that does
364
+ * not resolve returns undefined and says so.
365
+ */
366
+ export declare function resolveNamedRef(ref: string, candidates: string[], what: string): string | undefined;
331
367
  export declare function assembleScene(skeleton: ISceneSkeleton, details: ISceneDetails, playerName: string): ISceneSeedJson;
332
368
  export type RepairTarget = 'rooms' | 'npcs' | 'devices' | 'items' | 'skeleton';
333
369
  /**
@@ -1558,6 +1558,66 @@ export function ensureCredentialKindAgrees(details) {
1558
1558
  }
1559
1559
  return notes;
1560
1560
  }
1561
+ /**
1562
+ * RESOLVE A NAME ONE LIST WROTE AGAINST THE LIST THAT OWNS IT.
1563
+ *
1564
+ * The skeleton cross-references by NAME in two places, and both are
1565
+ * written by the model in different passes: an exit names the `device`
1566
+ * that holds it, and an exit names the `guard` who stands in it. Both
1567
+ * were then matched by exact string equality against devices[].name and
1568
+ * npcs[].name -- and a near-miss produced no error, no warning, and a
1569
+ * scene that validated perfectly while meaning nothing:
1570
+ *
1571
+ * exit device "Keypad" vs devices[] "Door Keypad"
1572
+ * -> the device gets no opensExit
1573
+ * -> scene-factory never locks the door
1574
+ * -> "there is nothing this keypad locks, the door is open"
1575
+ *
1576
+ * exit guard "Wraith" vs npcs[] "Wraith Kovac"
1577
+ * -> the NPC never gets `guarding`
1578
+ * -> holdsGround sees a bystander, yieldDoorway moves them aside
1579
+ * -> "I was able to just, push Wraith away"
1580
+ *
1581
+ * Two player-visible mechanics, one shape: a reference validated for
1582
+ * STRUCTURE (a string is present) and never for MEANING (it names
1583
+ * something that exists).
1584
+ *
1585
+ * REPAIR, not rejection -- the pattern this file already uses for a
1586
+ * missing clue phrase and a guarded exit with no spot. Failing the
1587
+ * draft costs a 6,000-token regeneration to fix one word, and a warning
1588
+ * alone leaves the player-visible wrong in place.
1589
+ *
1590
+ * DELIBERATELY CONSERVATIVE. Exact, then trimmed/case-insensitive, then
1591
+ * a UNIQUE substring either way. No typo tolerance and no nearest
1592
+ * guess: binding a door to the wrong device is worse than leaving it
1593
+ * unbound, because the unbound case at least logs. Anything that does
1594
+ * not resolve returns undefined and says so.
1595
+ */
1596
+ export function resolveNamedRef(ref, candidates, what) {
1597
+ const want = ref.trim().toLowerCase();
1598
+ if (!want)
1599
+ return undefined;
1600
+ const exact = candidates.find(c => c === ref);
1601
+ if (exact)
1602
+ return exact;
1603
+ const loose = candidates.filter(c => c.trim().toLowerCase() === want);
1604
+ if (loose.length === 1)
1605
+ return loose[0];
1606
+ const partial = candidates.filter(c => {
1607
+ const n = c.trim().toLowerCase();
1608
+ return n.includes(want) || want.includes(n);
1609
+ });
1610
+ if (partial.length === 1)
1611
+ return partial[0];
1612
+ // Unresolvable, or ambiguous between two candidates. Say so loudly --
1613
+ // this is the line that would have turned two evenings of "pretty
1614
+ // poor" into one grep.
1615
+ try {
1616
+ Logger.getInstance().write(`assembleScene: ${what} names "${ref}", which matches ${partial.length === 0 ? 'nothing' : `${partial.length} things`} in [${candidates.join(', ')}] -- the reference is dropped and the mechanic will not fire.`);
1617
+ }
1618
+ catch { /* no session: the note is a nicety, not a contract */ }
1619
+ return undefined;
1620
+ }
1561
1621
  export function assembleScene(skeleton, details, playerName) {
1562
1622
  // The answer has to be legible before anything is assembled from it.
1563
1623
  ensureClueDetails(skeleton, details);
@@ -1754,7 +1814,18 @@ export function assembleScene(skeleton, details, playerName) {
1754
1814
  }
1755
1815
  catch { /* no session: the note is a nicety, not a contract */ }
1756
1816
  }
1757
- guardPost.set(named, { room: room.name, spot: e.atSpot });
1817
+ // CANONICALISE, exactly as heldExit does above and for the same
1818
+ // reason. `guardPost` is keyed by the exit's guard string and
1819
+ // read back by the NPC's own name, so an exit naming "Wraith"
1820
+ // while the roster says "Wraith Kovac" posted a guard nobody
1821
+ // matched: `guarding` never got set, holdsGround saw an ordinary
1822
+ // bystander, and yieldDoorway politely moved them aside.
1823
+ // Reported verbatim: "I was able to just, push Wraith away by
1824
+ // moving to the vault door."
1825
+ const canonicalGuard = resolveNamedRef(named, skeleton.npcs.map(n => n.name), `guard on ${room.name}'s ${e.direction} exit`);
1826
+ if (!canonicalGuard)
1827
+ continue;
1828
+ guardPost.set(canonicalGuard, { room: room.name, spot: e.atSpot });
1758
1829
  }
1759
1830
  }
1760
1831
  const npcs = skeleton.npcs.map(npc => {
@@ -1830,8 +1901,18 @@ export function assembleScene(skeleton, details, playerName) {
1830
1901
  const heldExit = new Map();
1831
1902
  for (const room of skeleton.rooms ?? []) {
1832
1903
  for (const e of room.exits ?? []) {
1833
- if (e.device)
1834
- heldExit.set(e.device, e.direction);
1904
+ if (!e.device)
1905
+ continue;
1906
+ // CANONICALISE THE REFERENCE, or the door never locks. See
1907
+ // resolveNamedRef: an exit saying device "Keypad" while devices[]
1908
+ // calls it "Door Keypad" used to produce a keypad with no
1909
+ // opensExit, and scene-factory locks a door FROM its device's
1910
+ // opensExit -- so the player met a keypad beside a door standing
1911
+ // open. Reported verbatim: "there is nothing this keypad locks,
1912
+ // the door is open."
1913
+ const canonical = resolveNamedRef(e.device, (skeleton.devices ?? []).map(d => d.name), `device on ${room.name}'s ${e.direction} exit`);
1914
+ if (canonical)
1915
+ heldExit.set(canonical, e.direction);
1835
1916
  }
1836
1917
  }
1837
1918
  const devices = (skeleton.devices ?? []).map(device => {