From 0c965e32e9c21dac03a0939083320a24774de0ab Mon Sep 17 00:00:00 2001 From: Lucas Winther Date: Mon, 2 Nov 2026 03:35:24 +0100 Subject: [PATCH] feat(nte): add monthly Lost Exchange pull routines Track the shop's five limited dice, five standard dice and twenty weapon keys separately. Keep standard dice behind the existing opt-in and cite the monthly stock and restock evidence. --- .../2026-10-14-built-in-routines-design.md | 2 +- src/shared/routines.ts | 36 +++++++++++++++++++ test/routines.test.ts | 8 +++++ 3 files changed, 45 insertions(+), 1 deletion(-) diff --git a/docs/superpowers/specs/2026-10-14-built-in-routines-design.md b/docs/superpowers/specs/2026-10-14-built-in-routines-design.md index 7286ca5..ffc1b4c 100644 --- a/docs/superpowers/specs/2026-10-14-built-in-routines-design.md +++ b/docs/superpowers/specs/2026-10-14-built-in-routines-design.md @@ -256,7 +256,7 @@ Looked for on 2026-10-14 and not shipped. Each is a candidate the owner may know | Wuwa | Simulation Training, Forgery | Cost Waveplates; no weekly cap | | Wuwa | Tower of Adversity Hazard Zone (28 days), Whimpering Wastes | Multi-week → sub-project 2; the owner's in-game dates for both are in § Scope. **Tower of Adversity shipped 2026-10-16** as a 28-day cycle; Whimpering Wastes has no fixed length and stays unshipped ([cycle routines spec](2026-10-16-cycle-routines-design.md) § Not shipped) | | NTE | Tycoon Incentive Fund (Pink Paws Heist, Volley Star weekly match, Display Case idle earnings) | A 14-day cycle by the game's own guide, not a week → sub-project 2 (§ Scope). The guide this branch cites calls Pink Paws' cap weekly; the game disagrees. The cap also differs per player (Puka Membership Program). **Shipped 2026-10-16** at the base cap with a note ([cycle routines spec](2026-10-16-cycle-routines-design.md), decision 5) | -| NTE | Lost Exchange | Single launch-era source; nothing to count | +| NTE | Lost Exchange | Shipped 2026-11-02: monthly stock of 5 Solid Dice (premium), 5 Fabricated Dice (standard, offered when standard pulls are enabled), and 20 Tri-Keys (weapon pulls). Owner confirmed the counts in game. Icy Veins' item pages state each monthly limit: [Solid Dice](https://www.icy-veins.com/neverness-to-everness/items/dicelimite) and [Tri-Key](https://www.icy-veins.com/neverness-to-everness/items/weapongacha), dated 2026-10-21; [Fabricated Dice](https://www.icy-veins.com/neverness-to-everness/items/dicenormal), read as updated today on 2026-11-02. [Mobalytics](https://mobalytics.gg/neverness-to-everness/guides/daily-weekly-checklist), dated 2026-05-08, states the shops reset on the first day of the month. All read 2026-11-02. | | NTE | Beyond the Rails | 14-day cycle → sub-project 2; the owner's in-game date is in § Scope. **Shipped 2026-10-16**, on Asia's clock ([cycle routines spec](2026-10-16-cycle-routines-design.md), decision 3) | **One finding outside this change:** Game8's NTE boss page (2026-10-10) says the weekly timer diff --git a/src/shared/routines.ts b/src/shared/routines.ts index 03a86e3..de40fc4 100644 --- a/src/shared/routines.ts +++ b/src/shared/routines.ts @@ -551,6 +551,42 @@ export const ROUTINES: readonly Routine[] = [ }, // Neverness to Everness. + { + id: "routine:nte:lost-exchange-solid-dice", + game: "nte", + title: "Lost Exchange: Solid Dice", + period: { unit: "month", startsOn: 1 }, + pulls: "premium", + measure: { kind: "amount", target: 5, unit: "dice" }, + source: "https://www.icy-veins.com/neverness-to-everness/items/dicelimite", + asOf: "2026-10-21", + checked: "2026-11-02", + note: "Limited-banner pulls bought with Lost Pieces. Confirmed in game, 2026-11-02.", + }, + { + id: "routine:nte:lost-exchange-fabricated-dice", + game: "nte", + title: "Lost Exchange: Fabricated Dice", + period: { unit: "month", startsOn: 1 }, + pulls: "standard", + measure: { kind: "amount", target: 5, unit: "dice" }, + source: "https://www.icy-veins.com/neverness-to-everness/items/dicenormal", + asOf: "2026-11-02", + checked: "2026-11-02", + note: "Standard-banner pulls bought with Lost Pieces. Confirmed in game, 2026-11-02.", + }, + { + id: "routine:nte:lost-exchange-tri-keys", + game: "nte", + title: "Lost Exchange: Tri-Keys", + period: { unit: "month", startsOn: 1 }, + pulls: "premium", + measure: { kind: "amount", target: 20, unit: "keys" }, + source: "https://www.icy-veins.com/neverness-to-everness/items/weapongacha", + asOf: "2026-10-21", + checked: "2026-11-02", + note: "Weapon-banner pulls bought with Lost Pieces. Confirmed in game, 2026-11-02.", + }, { id: "routine:nte:season-pass-exp", game: "nte", diff --git a/test/routines.test.ts b/test/routines.test.ts index 91bfb81..559a694 100644 --- a/test/routines.test.ts +++ b/test/routines.test.ts @@ -113,6 +113,9 @@ describe("ROUTINES", () => { ["routine:wuwa:shop-lustrous-tide", "standard"], ]); expect(shape("nte")).toEqual([ + ["Lost Exchange: Solid Dice", { unit: "month", startsOn: 1 }, { kind: "amount", target: 5, unit: "dice" }], + ["Lost Exchange: Fabricated Dice", { unit: "month", startsOn: 1 }, { kind: "amount", target: 5, unit: "dice" }], + ["Lost Exchange: Tri-Keys", { unit: "month", startsOn: 1 }, { kind: "amount", target: 20, unit: "keys" }], ["Season Pass weekly EXP", week, { kind: "amount", target: 12000, unit: "EXP" }], ["Anomaly Pilgrimage", week, { kind: "amount", target: 3, unit: "claims" }], ["City Stamina", week, { kind: "amount", target: 700, unit: "stamina" }], @@ -121,6 +124,11 @@ describe("ROUTINES", () => { ["Beyond the Rails", { unit: "cycle", days: 14, from: "2026-10-22" }, { kind: "days", required: 1 }], ["Tycoon Incentive Fund", { unit: "cycle", days: 14, from: "2026-10-26" }, { kind: "amount", target: 1000000, unit: "fons" }], ]); + expect(routinesFor("nte").filter((r) => r.pulls !== undefined).map((r) => [r.id, r.pulls])).toEqual([ + ["routine:nte:lost-exchange-solid-dice", "premium"], + ["routine:nte:lost-exchange-fabricated-dice", "standard"], + ["routine:nte:lost-exchange-tri-keys", "premium"], + ]); expect(shape("nikki")).toEqual([ ["Mira Journey weekly EXP", week, { kind: "amount", target: 8000, unit: "Journey EXP" }], ["Realm of Breakthrough", week, { kind: "amount", target: 2, unit: "trials" }],