@maka/maka-cli 5.206.0 → 5.207.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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@maka/maka-cli",
3
- "version": "5.206.0",
3
+ "version": "5.207.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.",
@@ -39,6 +39,10 @@ export const REPRO_FAR_ROOM = 'The Far Side';
39
39
  * Both rooms have it: a doorway has two sides, and a guard posted on
40
40
  * the far side stands in their own. */
41
41
  export const REPRO_DOORWAY_SPOT = 'doorway';
42
+ /** What locks a `barrier.plainDoor` that names no keyItem of its own.
43
+ * A door with no key and no mechanism would simply stand open, which
44
+ * is the opposite of the fixture the author asked for. */
45
+ export const REPRO_PLAIN_DOOR_KEY = 'Door Key';
42
46
  /**
43
47
  * Somewhere to stand that is NOT the doorway, so "move to the door" is
44
48
  * a real move with a real before-state. Without it the runner starts in
@@ -202,7 +206,18 @@ export function buildReproScene(fixture) {
202
206
  const startSide = fixture.start ?? 'barrier';
203
207
  const startRoom = roomFor(startSide);
204
208
  let device;
205
- if (barrier) {
209
+ // THE LOCK THAT IS IN THE DOOR (Gfx5RFFpHJdKB87Bh). barrier.plainDoor
210
+ // seals the exit with keyRequired and builds NO device -- the shape
211
+ // every ordinary locked door in a generated scene has, and the shape
212
+ // this builder could not make until the report proved it mattered.
213
+ // `open` still means what it means -- the door simply is not locked --
214
+ // and it must NOT quietly put the mechanism back, which is the
215
+ // silently-inert shape this file exists to avoid.
216
+ const plainDoor = barrier?.plainDoor === true;
217
+ if (barrier?.plainDoor && !barrier.keyItem && !barrier.open) {
218
+ warnings.push('A plain door with no keyItem has no quiet way through at all -- force is the only route, which is fine if that is the point.');
219
+ }
220
+ if (barrier && !plainDoor) {
206
221
  // INVARIANT 1: a code belongs to a panel and nowhere else. The
207
222
  // Device constructor DROPS it on a lock or a ward, silently and
208
223
  // correctly -- that is the runtime honouring "you can't talk at a
@@ -309,7 +324,13 @@ export function buildReproScene(fixture) {
309
324
  name: REPRO_BARRIER_ROOM,
310
325
  description: barrier
311
326
  ? `A short concrete run ending at one door, ${direction} of you. `
312
- + `${device.name} is fixed beside the doorway${barrier.open ? ', standing open' : ', holding it shut'}. `
327
+ + (plainDoor
328
+ // NOTHING BESIDE THE DOOR, and the prose has to say so: the
329
+ // whole point of a plainDoor bench is that there is no
330
+ // mechanism to work, so describing one would hand the
331
+ // reviewer the wrong target to aim every verb at.
332
+ ? `No panel, no maglock, no keypad -- just a lock in the door itself, and it is ${barrier.open ? 'off the latch' : 'shut'}. `
333
+ : `${device.name} is fixed beside the doorway${barrier.open ? ', standing open' : ', holding it shut'}. `)
313
334
  + `There is nothing else here, which is the point -- whatever is wrong is wrong at that door.`
314
335
  : `A short concrete run with a door ${direction} of you and nothing else in it.`,
315
336
  // fixture.home: the barrier room is the runner's own bed, so a rest
@@ -319,7 +340,16 @@ export function buildReproScene(fixture) {
319
340
  spots,
320
341
  levels: level ? [{ name: level.name, side: level.side ?? 'north', kind: level.kind ?? 'catwalk', climbOnly: level.climbOnly === true }] : undefined,
321
342
  isStartRoom: startSide === 'barrier',
322
- exits: [{ direction, targetRoom: REPRO_FAR_ROOM, atSpot: REPRO_DOORWAY_SPOT }],
343
+ exits: [{
344
+ direction,
345
+ targetRoom: REPRO_FAR_ROOM,
346
+ atSpot: REPRO_DOORWAY_SPOT,
347
+ // INVARIANT 3, the deviceless case: with no mechanism to name the
348
+ // exit, the KEY is what locks the door.
349
+ ...(plainDoor && !barrier?.open
350
+ ? { keyRequired: barrier?.keyItem ?? REPRO_PLAIN_DOOR_KEY }
351
+ : {}),
352
+ }],
323
353
  devices: device ? [device] : undefined,
324
354
  };
325
355
  const farRoom = {
@@ -327,7 +357,7 @@ export function buildReproScene(fixture) {
327
357
  ...watchedFields('far'),
328
358
  name: REPRO_FAR_ROOM,
329
359
  description: `The other side of the door, which lies ${OPPOSITE[direction]} of you`
330
- + `${barrier ? ` and is held from the far side by ${device.name}` : ''}. Bare, and no further out.`,
360
+ + `${barrier && device ? ` and is held from the far side by ${device.name}` : ''}. Bare, and no further out.`,
331
361
  roomType: 'Street',
332
362
  size: 'medium',
333
363
  spots,
@@ -27,7 +27,7 @@
27
27
  * 2.5.0 adds IReproHost.purpose / .sculpt and IReproItem.file (engine
28
28
  * 1.50.0, hosts with a purpose) -- additive.
29
29
  */
30
- export const REPRO_SCHEMA_VERSION = '2.6.0';
30
+ export const REPRO_SCHEMA_VERSION = '2.7.0';
31
31
  /** THE LIVE REASON, from the field or the card's own words.
32
32
  *
33
33
  * `repro.live` is authoritative -- but the server's validator must
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@maka/maka-cli",
3
- "version": "5.206.0",
3
+ "version": "5.207.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.",