@maka/maka-cli 5.381.1 → 5.382.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.381.1",
3
+ "version": "5.382.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.",
@@ -3308,5 +3308,16 @@
3308
3308
  // at boot -- and the reputation game over is awaited before the
3309
3309
  // command's reply, so the banner is that step's outcome on every
3310
3310
  // client and in a dry run's transcript.
3311
- export const ENGINE_VERSION = '1.193.1';
3311
+ // 1.194.0 (2026-10-04): THE DISTRICT FOLLOWS THE TIER (nqRsvbN6gvKHFKfW9;
3312
+ // ruling: "a runner should end up in a district that fits their
3313
+ // lifestyle"). A Middle runner who slid to Low on unpaid rent woke in
3314
+ // Everett in a stitched-in hole named after Auburn's walk-up.
3315
+ // - A tier whose home is authored in ANOTHER district no longer builds a
3316
+ // hole here (rebindHomeForTier).
3317
+ // - Game.settleAddress moves the runner to hubIdForTier's district as
3318
+ // home, binding that district's own building, after the ride home, at
3319
+ // hub boot (reaching a save that already slid) and after a shared
3320
+ // run's homecoming. A move that cannot land now is retried next time;
3321
+ // a session with no districtSeedLoader never moves.
3322
+ export const ENGINE_VERSION = '1.194.0';
3312
3323
  //# sourceMappingURL=engine-version.js.map
@@ -42,7 +42,7 @@ import { pickedUpLine } from './utilities/takeover.js';
42
42
  import { presenceBeatAllowed, presenceProcessOnTheStreet } from './utilities/presence-gate.js';
43
43
  import { pushSave, burnCloudSaveFor, enqueueBoundPush, flushPushQueue, writeSpill, takeLastMemorial, authToken, clearSpill, hasPendingPush, getCloudSessionId, setLeasedHandler, } from './utilities/cloud-saves.js';
44
44
  import { DOCWAGON_TIERS, RESUSC_FEE, DEATH_COMP } from './utilities/docwagon.js';
45
- import { isFence, knownDistricts, LIFESTYLE_TIERS, LIFESTYLE_OPTIONS, canonicalLifestyleTier, canonicalLifestyleOption, lifestyleOptionAllowed, lifestyleTierFor } from './utilities/commerce.js';
45
+ import { isFence, knownDistricts, LIFESTYLE_TIERS, LIFESTYLE_OPTIONS, canonicalLifestyleTier, canonicalLifestyleOption, lifestyleOptionAllowed, lifestyleTierFor, hubIdForTier } from './utilities/commerce.js';
46
46
  import { reconcileGarage, findDumpster, DUMPSTER_NAME } from './models/home-containers.js';
47
47
  import { ownedDrones } from './utilities/owned-drones.js';
48
48
  import { attachBrandMark, attachBrandMarkBottomRight } from './utilities/brand-mark.js';
@@ -3645,6 +3645,15 @@ export default class Game {
3645
3645
  // ordinary Street/Squatter case, and the only no-op worth naming.
3646
3646
  if (authored === undefined && current.residenceTier === undefined)
3647
3647
  return;
3648
+ // THE TIER'S ADDRESS IS IN ANOTHER DISTRICT (nqRsvbN6gvKHFKfW9: a Middle
3649
+ // runner slid to Low on unpaid rent and woke in Everett, in a stitched-in
3650
+ // hole named after Auburn's walk-up). An authored home with no authored
3651
+ // successor HERE means the runner is moving out, not down the hall:
3652
+ // settleAddress takes them to the district that fits, and that district's
3653
+ // own building is bound on arrival. Building a hole here would only leave
3654
+ // a counterfeit of somebody else's address standing on this street.
3655
+ if (authored === undefined)
3656
+ return;
3648
3657
  const next = authored ?? this.buildRuntimeHome();
3649
3658
  this.moveStash(current, next);
3650
3659
  // THE OLD HOLE IS CODE-OWNED, so it leaves with the lease -- and
@@ -5751,6 +5760,44 @@ ${client.name} won't be remembering anything. Dead Johnsons pay nothing -- and t
5751
5760
  }
5752
5761
  return { ok: true, name: seed.name, firstVisit };
5753
5762
  }
5763
+ /**
5764
+ * LIVE WHERE THE RENT SAYS (user ruling 2026-10-04, nqRsvbN6gvKHFKfW9: "a
5765
+ * runner should end up in a district that fits their lifestyle").
5766
+ *
5767
+ * The lifestyle desk moves house itself. A tier that SLID on unpaid rent
5768
+ * (settleLifestyleUpkeep) cannot: every homecoming is synchronous and a
5769
+ * district move is not. So each async door a runner comes home through --
5770
+ * the ride home, the hub boot, a shared run's write-back -- calls this
5771
+ * afterwards, and the boot call also reaches a save that slid before this
5772
+ * shipped.
5773
+ *
5774
+ * Never refuses loudly. A move that cannot happen now (no network, a job
5775
+ * standing open) leaves the runner where they are, logged, and the next
5776
+ * homecoming or boot tries again. A visit is left alone: the runner is not
5777
+ * at home, and home is what this is about.
5778
+ */
5779
+ async settleAddress() {
5780
+ if (!this.hasHub || !this._hubScene || this.scene !== this._hubScene || this._crewSpace || this.isVisiting)
5781
+ return undefined;
5782
+ // NO LOADER, NOWHERE TO GO: a terminal and a site-hosted hub both say how
5783
+ // to fetch a district (districtSeedLoader). A harness that names none
5784
+ // booted exactly the one district it means to test, and must not be
5785
+ // carried off to a network fetch because its fixture's tier lives elsewhere.
5786
+ if (!this.districtSeedLoader)
5787
+ return undefined;
5788
+ const here = this.districtId;
5789
+ const want = hubIdForTier(this.lifestyleTier);
5790
+ if (here === undefined || want === undefined || here === want)
5791
+ return undefined;
5792
+ const leaving = this._hubSeed?.name ?? here;
5793
+ const moved = await this.moveToDistrict(want, { asHome: true });
5794
+ if (!moved.ok) {
5795
+ Logger.getInstance().write(`Address: ${this.lifestyleTier} lives in ${want}, runner still in ${here} -- move deferred (${moved.why}).`);
5796
+ return undefined;
5797
+ }
5798
+ this.requestSave('move');
5799
+ return `${leaving} is past what a ${this.lifestyleTier} lifestyle pays for. The landlord's drone has your things at the curb by morning, and a cab takes you to ${moved.name} -- ${this._homeRoom.name} is home now. The footlocker came with you; the neighbourhood did not.`;
5800
+ }
5754
5801
  /**
5755
5802
  * Wires a fresh, always-unlocked path between the persistent home base
5756
5803
  * and wherever the player is starting the current job from. Clears the
@@ -6195,6 +6242,11 @@ ${client.name} won't be remembering anything. Dead Johnsons pay nothing -- and t
6195
6242
  const owed = this.applyHostedHomecoming();
6196
6243
  if (owed)
6197
6244
  Logger.getInstance().logWithColor(owed, 'green');
6245
+ // A tier that slid -- at that homecoming, or in a session that ended
6246
+ // before the move could land -- moves house before the runner wakes.
6247
+ const moved = await this.settleAddress();
6248
+ if (moved)
6249
+ Logger.getInstance().logWithColor(moved, 'green');
6198
6250
  this.requestSave('hub-arrival');
6199
6251
  }
6200
6252
  // A REGISTERED sprite from the save re-shells at the cot (the
@@ -6961,7 +7013,10 @@ ${client.name} won't be remembering anything. Dead Johnsons pay nothing -- and t
6961
7013
  return `You're inside a loose end's host -- "exit" or "jack out" is what ends it.`;
6962
7014
  }
6963
7015
  if (this._hubScene && this.scene !== this._hubScene) {
6964
- return this.returnToHub();
7016
+ const home = this.returnToHub();
7017
+ // A tier that slid at the door moves house (settleAddress).
7018
+ const moved = await this.settleAddress();
7019
+ return moved ? `${home}\n${moved}` : home;
6965
7020
  }
6966
7021
  const gate = this.canDraftNextScene();
6967
7022
  if (!gate.allowed) {
@@ -7426,14 +7481,12 @@ ${client.name} won't be remembering anything. Dead Johnsons pay nothing -- and t
7426
7481
  const lapse = dropped.length > 0
7427
7482
  ? ` The garage lease goes with it -- the shutter comes down${sealedIn.length > 0 ? ` with ${sealedIn.join(', ')} still inside` : ''}.`
7428
7483
  : '';
7429
- // THE ADDRESS IS NOT GIVEN UP HERE, and that is deliberate. The tier
7430
- // slides -- you cannot afford this standard of living -- but nothing
7431
- // relocates the runner, because returnToHub is synchronous and a
7432
- // district move is async. They keep the street and owe the tab, and
7433
- // the street's own Neighborhood rating still governs what walks past
7434
- // (ISceneSeedJson.neighborhood). Moving out is something the player
7435
- // does, with "lifestyle".
7436
- rentLine = `The landlord's drone pings before the door even shuts: ${paid > 0 ? `${paid} paid, ` : ''}${this.rentDebt} nuyen still owed.${shedLine} Your ${tier.name} arrangement lapses -- you're living ${this.lifestyleTier} now.${lapse}${hint(` ("pay" the tab, "lifestyle" to move somewhere you can afford.)`)}`;
7484
+ // THE ADDRESS GOES WITH THE TIER (user ruling 2026-10-04, on
7485
+ // nqRsvbN6gvKHFKfW9: "a runner should end up in a district that fits
7486
+ // their lifestyle"). Not here, though: this is synchronous and a
7487
+ // district move is async, so every homecoming's async caller follows
7488
+ // up with settleAddress, which does the moving.
7489
+ rentLine = `The landlord's drone pings before the door even shuts: ${paid > 0 ? `${paid} paid, ` : ''}${this.rentDebt} nuyen still owed.${shedLine} Your ${tier.name} arrangement lapses -- you're living ${this.lifestyleTier} now.${lapse}${hint(` ("pay" the tab when you're flush.)`)}`;
7437
7490
  }
7438
7491
  else {
7439
7492
  rentLine = `Even the doorway costs something: ${this.rentDebt} nuyen on the tab.${shedLine}${hint(` ("pay" when you're flush.)`)}`;
@@ -1996,6 +1996,10 @@ export class SharedRunSession {
1996
1996
  const lines = g.applyHostedHomecoming(owed);
1997
1997
  if (lines)
1998
1998
  Logger.getInstance().logWithColor(lines, 'green');
1999
+ // A tier that slid at that homecoming moves house (settleAddress).
2000
+ const moved = await g.settleAddress();
2001
+ if (moved)
2002
+ Logger.getInstance().logWithColor(moved, 'green');
1999
2003
  }
2000
2004
  }
2001
2005
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@maka/maka-cli",
3
- "version": "5.381.1",
3
+ "version": "5.382.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.",