@maka/maka-cli 5.214.0 → 5.215.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.
- package/bundle/typescript/package.json +1 -1
- package/bundle/typescript/src/commands/game/sideQuest/engine-version.js +18 -1
- package/bundle/typescript/src/commands/game/sideQuest/models/npc.js +7 -0
- package/bundle/typescript/src/commands/game/sideQuest/utilities/narration-limits.js +18 -2
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@maka/maka-cli",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.215.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"summary": "A command line tool for scaffolding Meteor 3.x applications using either React.",
|
|
6
6
|
"description": "A command line tool for scaffolding Meteor 3.x applications using React.",
|
|
@@ -1086,5 +1086,22 @@
|
|
|
1086
1086
|
// stay guarded...", "Suspicious system-note injection detected" --
|
|
1087
1087
|
// are all dated 2026-08-24 and predate isOutOfCharacter, which
|
|
1088
1088
|
// already catches them. Checked, not assumed.)
|
|
1089
|
-
|
|
1089
|
+
// 1.74.1 (2026-09-16): A PERSON MAY SAY WHAT THEY KNOW. 1.74.0's
|
|
1090
|
+
// INTERIOR rule leaked onto the SPEECH channel and gagged ordinary
|
|
1091
|
+
// dialogue -- an NPC saying "I know exactly what you mean" out loud
|
|
1092
|
+
// was refused as mind-reading. Caught before anyone played it, by
|
|
1093
|
+
// reading judgeNarration's other caller rather than by a report.
|
|
1094
|
+
// THE TRAP IS WORTH RECORDING. Dialogue has run through this judge
|
|
1095
|
+
// since KwiMKNMN2e8KBqTY7, and it was safe from the agency rules for
|
|
1096
|
+
// an INVISIBLE reason: that caller passes an empty cast, so there is
|
|
1097
|
+
// no subject to resolve and CONTACT/COMPELLED_MOVEMENT can never fire.
|
|
1098
|
+
// A real guarantee, nowhere stated. INTERIOR needs no subject, so it
|
|
1099
|
+
// walked straight through. judgeNarration now takes an explicit
|
|
1100
|
+
// `channel` ('beat' by default, 'speech' from the dialogue call) and
|
|
1101
|
+
// the beat-only rules are gated on it, so the next rule added here has
|
|
1102
|
+
// to decide which channel it belongs to instead of inheriting an
|
|
1103
|
+
// accident. The distinction is the rule itself: a character may SAY
|
|
1104
|
+
// what they know; they may not have it NARRATED at a player who cannot
|
|
1105
|
+
// hear it.
|
|
1106
|
+
export const ENGINE_VERSION = '1.74.1';
|
|
1090
1107
|
//# sourceMappingURL=engine-version.js.map
|
|
@@ -2515,6 +2515,13 @@ Your objective is to drive the story line.`}
|
|
|
2515
2515
|
const placeVerdict = judgeNarration(said, this.name, [], {
|
|
2516
2516
|
here: this.currentLocation?.name,
|
|
2517
2517
|
worldRooms: Object.values(this._scene?.getRooms?.() ?? {}).map(r => r.name),
|
|
2518
|
+
// SAYS WHICH CHANNEL THIS IS, rather than relying on the empty
|
|
2519
|
+
// `others` above to keep the beat-only rules from firing. That
|
|
2520
|
+
// guarantee held for the agency rules, which need a subject to
|
|
2521
|
+
// resolve -- and broke the moment a rule arrived that does not
|
|
2522
|
+
// (INTERIOR), refusing an ordinary spoken "I know exactly what
|
|
2523
|
+
// you mean" as mind-reading. A person may SAY what they know.
|
|
2524
|
+
channel: 'speech',
|
|
2518
2525
|
});
|
|
2519
2526
|
if (placeVerdict.refused) {
|
|
2520
2527
|
this.logger.write(`${this.name} speech refused (claimed to be elsewhere): ${said.slice(0, 160)}`);
|
|
@@ -309,6 +309,21 @@ function aimedAtAPerson(text, matches, subject) {
|
|
|
309
309
|
* @param opts.holding who this NPC already has a grapple on, if anyone --
|
|
310
310
|
* narration about a hold the dice already settled is a
|
|
311
311
|
* description, not a claim.
|
|
312
|
+
* @param opts.channel which half of the reply this is. 'beat' (the
|
|
313
|
+
* default) is exposition and gets every rule. 'speech'
|
|
314
|
+
* is a line of DIALOGUE and gets the place rule only.
|
|
315
|
+
*
|
|
316
|
+
* WHY THE CHANNEL IS A PARAMETER AND NOT AN ACCIDENT. Dialogue has been
|
|
317
|
+
* passing through here since KwiMKNMN2e8KBqTY7 ("Whisper ... says he
|
|
318
|
+
* is"), and it survived the agency rules only because its caller passes
|
|
319
|
+
* an EMPTY `others` -- with nobody to resolve as the subject, CONTACT
|
|
320
|
+
* and COMPELLED_MOVEMENT can never fire. That is a real guarantee but an
|
|
321
|
+
* invisible one, and the INTERIOR rule broke it the moment it was
|
|
322
|
+
* written: interiority needs no subject, so a perfectly ordinary spoken
|
|
323
|
+
* "I know exactly what you mean" was refused as mind-reading. A person
|
|
324
|
+
* is allowed to say what they know. They are not allowed to have it
|
|
325
|
+
* NARRATED at a player who cannot hear it -- which is the whole
|
|
326
|
+
* distinction, and it now has a name in the signature.
|
|
312
327
|
*/
|
|
313
328
|
export function judgeNarration(line, speaker, others, opts = {}) {
|
|
314
329
|
const t = line.replace(/^[\s│|>*-]+/, '').trim();
|
|
@@ -327,8 +342,9 @@ export function judgeNarration(line, speaker, others, opts = {}) {
|
|
|
327
342
|
}
|
|
328
343
|
}
|
|
329
344
|
// ALSO BEFORE the agency rules, and for the same reason: this is about
|
|
330
|
-
// the SPEAKER's own head, so there is no subject to resolve
|
|
331
|
-
|
|
345
|
+
// the SPEAKER's own head, so there is no subject to resolve -- which
|
|
346
|
+
// is exactly why it must be told to stay off the speech channel.
|
|
347
|
+
if (opts.channel !== 'speech' && INTERIOR.test(t)) {
|
|
332
348
|
return {
|
|
333
349
|
refused: true,
|
|
334
350
|
subject: speaker,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@maka/maka-cli",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.215.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"summary": "A command line tool for scaffolding Meteor 3.x applications using either React.",
|
|
6
6
|
"description": "A command line tool for scaffolding Meteor 3.x applications using React.",
|