@stage5/lumine 0.3.35 → 0.3.36

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/lib/admin.js CHANGED
@@ -7124,6 +7124,13 @@ function printRewardBankReport(data) {
7124
7124
  );
7125
7125
  }
7126
7126
  }
7127
+ if (data.numericAnswers) {
7128
+ const n = data.numericAnswers;
7129
+ console.log(`Numeric answers (${n.serverAnswerContract}): ${n.decimalQuestions} decimal questions / ${n.questions} total · ${n.decimalsCreatedInWindow} new decimals`);
7130
+ console.log(` Decimal follow-up: ${n.decimalClaims.served} served · ${n.decimalClaims.answered} answered · first-try ${pct(n.decimalClaims.firstTryRate)} · ${n.decimalClaims.coverage}`);
7131
+ } else {
7132
+ console.log("Numeric answer telemetry: unavailable on this server version.");
7133
+ }
7127
7134
  console.log(`Learners: ${data.learners.total}`);
7128
7135
  for (const row of data.learners.byRuleStep) {
7129
7136
  console.log(
package/lib/api.js CHANGED
@@ -372,7 +372,7 @@ export async function saveProjectFiles({
372
372
  // Required when the workspace has no filesHash (old/stale checkout).
373
373
  ...(force ? { force: true } : {}),
374
374
  },
375
- timeoutMs: options.timeoutMs,
375
+ timeoutMs: options.validationTimeoutMs ?? options.timeoutMs,
376
376
  });
377
377
  }
378
378
 
package/lib/commands.js CHANGED
@@ -1316,7 +1316,7 @@ export async function check(options) {
1316
1316
  const result = await requestJson({
1317
1317
  url: `${options.apiUrl}/cli/build/${buildId}/launch-check`,
1318
1318
  authToken: auth.token,
1319
- timeoutMs: options.timeoutMs,
1319
+ timeoutMs: options.validationTimeoutMs ?? options.timeoutMs,
1320
1320
  });
1321
1321
  printCheck(result);
1322
1322
  if (!result.ok) process.exitCode = 1;
@@ -1373,7 +1373,7 @@ export async function launch(options) {
1373
1373
  const checkResult = await requestJson({
1374
1374
  url: `${options.apiUrl}/cli/build/${buildId}/launch-check`,
1375
1375
  authToken: auth.token,
1376
- timeoutMs: options.timeoutMs,
1376
+ timeoutMs: options.validationTimeoutMs ?? options.timeoutMs,
1377
1377
  });
1378
1378
  printCheck(checkResult);
1379
1379
  const launchOk =
@@ -2939,6 +2939,13 @@ export function parseArgs(args) {
2939
2939
  DEFAULT_TIMEOUT_MS,
2940
2940
  1000,
2941
2941
  ),
2942
+ // Large saved projects can take longer than the ordinary 20s request
2943
+ // deadline. The server bounds compiler work at 120s; leave transport room.
2944
+ // An explicit --timeout-ms / environment setting still wins.
2945
+ validationTimeoutMs: Math.max(
2946
+ Number(raw.timeoutMs || process.env.TWINKLE_TIMEOUT_MS) || 150000,
2947
+ 1000,
2948
+ ),
2942
2949
  help: !!raw.help || command === "help",
2943
2950
  };
2944
2951
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stage5/lumine",
3
- "version": "0.3.35",
3
+ "version": "0.3.36",
4
4
  "description": "Command line tools for launching Lumine builds on Twinkle.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1029,9 +1029,9 @@ const result = await Twinkle.characters.chat({ character: 'zero', thinkingMode:
1029
1029
  - Example: const { level } = await Twinkle.minecraft.getPlayArea({ id: 'twinkle-keep' });
1030
1030
  - async getPlayAreaChunks({ id, chunks: [[cx, cz], ...] }) | scopes: content:read
1031
1031
  - Returns: { scenes: [{ cx, cz, scene: { origin: [x,y,z], size: [w,h,d], palette, blocks, light, biomes, count, ... } | null }] }
1032
- - Up to 9 chunk columns of a play area in the /snap scene format (packed visible blocks with per-face light), cropped to the area's box. Stream the ones around the player.
1032
+ - Up to 24 chunk columns of a play area in the /snap scene format (packed visible blocks with per-face light), cropped to the area's box. Stream the ones around the player.
1033
1033
  - Same scene format as getSnap; only blocks with a visible face inside the area are included. scene is null for a chunk that is not part of the area.
1034
- - At most 9 chunks per call; reads share the 180-per-minute build read limit, so cache chunks and load the nearest first.
1034
+ - At most 24 chunks per call; reads share the 180-per-minute build read limit, so cache chunks and load the nearest first.
1035
1035
  - Example: const { scenes } = await Twinkle.minecraft.getPlayAreaChunks({ id: level.id, chunks: [[64, 29], [65, 29]] });
1036
1036
  - async createPlayArea({ name, world, box, spawn, id }) | scopes: content:write
1037
1037
  - Returns: { level }
@@ -2502,6 +2502,9 @@ Daily Reflection post reads and recommendation candidates include the stored
2502
2502
  An absent grade is unknown. Verify `grade === "Masterpiece"` before placing one
2503
2503
  of Mikey's reflections anywhere on the newspaper front page; lower or missing
2504
2504
  grades can be considered for inside pages. The CLI does not infer a grade.
2505
+ Masterpiece is only an eligibility condition for his reflections: it does not
2506
+ award front-page placement, the lead, or editorial priority. Read the actual
2507
+ content and compare its significance to members with the day's other stories.
2505
2508
 
2506
2509
  ## Subject and Featured mutations
2507
2510
 
@@ -3019,6 +3022,12 @@ entertainment, likely comments and opportunities to join in are not the only
3019
3022
  measures of importance. Explain the values being communicated; do not reduce
3020
3023
  them to founder biography or an administrative announcement.
3021
3024
 
3025
+ **Editorial judgment (Mikey, 2026-10-15):** a Masterpiece grade never automatically
3026
+ earns a front-page slot or the lead. Use the project's canonical `CORE_VALUES.md`
3027
+ to assess the actual story's relevance to the community and its culture, alongside
3028
+ the other eligible stories. Give the substantive reason for the placement;
3029
+ neither the grade nor Mikey's authorship supplies that reason.
3030
+
3022
3031
  Use clear, lively language that respects readers' intelligence. Give enough
3023
3032
  context for someone who missed the original post, and make the interesting
3024
3033
  part clear in the headline and opening. Avoid talking down to readers, forced