@bldrs-ai/conway 1.450.1353 → 1.452.1355

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.
@@ -30,7 +30,7 @@ var import_node_process = require("node:process");
30
30
  var readline = __toESM(require("node:readline"), 1);
31
31
 
32
32
  // compiled/src/version/version.js
33
- var versionString = "Conway v1.450.1353";
33
+ var versionString = "Conway v1.452.1355";
34
34
 
35
35
  // compiled/dependencies/conway-geom/interface/conway_geometry.js
36
36
  var wasmType = "";
@@ -14965,7 +14965,7 @@ ${t5.join("\n")}` : "";
14965
14965
  var import_process = require("process");
14966
14966
 
14967
14967
  // compiled/src/version/version.js
14968
- var versionString = "Conway v1.450.1353";
14968
+ var versionString = "Conway v1.452.1355";
14969
14969
 
14970
14970
  // compiled/dependencies/conway-geom/interface/conway_geometry.js
14971
14971
  function pThreadsAllowed() {
@@ -15943,7 +15943,7 @@ var ParsingBuffer = class {
15943
15943
  };
15944
15944
 
15945
15945
  // compiled/src/version/version.js
15946
- var versionString = "Conway v1.450.1353";
15946
+ var versionString = "Conway v1.452.1355";
15947
15947
 
15948
15948
  // compiled/dependencies/conway-geom/interface/conway_geometry.js
15949
15949
  function pThreadsAllowed() {
@@ -944,7 +944,7 @@ var EntityTypesIfcCount = 909;
944
944
  var entity_types_ifc_gen_default = EntityTypesIfc;
945
945
 
946
946
  // compiled/src/version/version.js
947
- var versionString = "Conway v1.450.1353";
947
+ var versionString = "Conway v1.452.1355";
948
948
 
949
949
  // compiled/dependencies/conway-geom/interface/conway_geometry.js
950
950
  var wasmType = "";
@@ -242,6 +242,40 @@ async function runForFile(filePath, outputPath, maxTimeout, perfPath) {
242
242
  hash: fileHash,
243
243
  };
244
244
  }
245
+ /**
246
+ * Run a file's digest, retrying ONCE if the first attempt times out.
247
+ *
248
+ * A per-model timeout is not a deterministic parse/geometry failure — it
249
+ * surfaces as a failed.csv row with an empty code AND empty signal (the
250
+ * TimeoutError path sets neither) and, historically, has come from transient
251
+ * core oversubscription on the CI runner rather than the model itself.
252
+ * ISSUE_159_kleine_Wohnung_R22.ifc (a geometry-dense ~18.5k-item model) has
253
+ * reddened the rc-regression gate this way twice: first co-scheduled at
254
+ * --concurrency 2, then again running ALONE at --concurrency 1, so serializing
255
+ * the batch was not enough to make it reliable.
256
+ *
257
+ * Digest regeneration is idempotent, so a second attempt is safe: a transient
258
+ * timeout clears on the retry, while a genuine hang times out both times and
259
+ * still lands in failed.csv — the gate keeps its protective value against a
260
+ * model that truly never loads. Only timeouts are retried; a real non-zero
261
+ * exit or signal is returned immediately (those ARE deterministic).
262
+ *
263
+ * @param filePath Model file to digest.
264
+ * @param outputPath Digest output path (without extension).
265
+ * @param maxTimeout Per-attempt timeout in ms.
266
+ * @param perfPath Optional path the child writes its one-row perf CSV to.
267
+ * @return The first attempt's result, or the retry's result on a timeout.
268
+ */
269
+ async function runForFileWithTimeoutRetry(filePath, outputPath, maxTimeout, perfPath) {
270
+ const timedOut = (r) => r.type === 'Failed' && r.message === 'Execution timed out';
271
+ const first = await runForFile(filePath, outputPath, maxTimeout, perfPath);
272
+ if (!timedOut(first)) {
273
+ return first;
274
+ }
275
+ console.log(`"${path.basename(filePath)}" timed out; retrying once ` +
276
+ `(a transient timeout clears, a true hang times out again).`);
277
+ return runForFile(filePath, outputPath, maxTimeout, perfPath);
278
+ }
245
279
  // Model files the regression harness understands: IFC plus STEP AP214.
246
280
  const SUPPORTED_MODEL_EXTENSIONS = ['.ifc', '.stp', '.step'];
247
281
  /**
@@ -344,7 +378,7 @@ async function processIFCFilesInParallel(ifcFiles, outputPath, errorLines, fileL
344
378
  const perfChildPath = perfDir ?
345
379
  path.join(perfDir, `${path.parse(ifcPath).name}.perf.csv`) :
346
380
  undefined;
347
- const fileResults = await runForFile(ifcPath, path.join(outputPath, path.parse(ifcPath).name), maxTimeout, perfChildPath);
381
+ const fileResults = await runForFileWithTimeoutRetry(ifcPath, path.join(outputPath, path.parse(ifcPath).name), maxTimeout, perfChildPath);
348
382
  activeTasks--;
349
383
  console.log(`Completed task for "${path.basename(ifcPath)}". Active tasks: ${activeTasks}`);
350
384
  return { ifcPath, fileResults };
@@ -396,7 +430,7 @@ async function recursiveWalk(parentPath, excludeRegex, outputPath, errorLines, f
396
430
  const perfChildPath = perfDir ?
397
431
  path.join(perfDir, `${path.parse(resolved).name}.perf.csv`) :
398
432
  undefined;
399
- const fileResults = await runForFile(resolved, path.join(outputPath, path.parse(resolved).name), maxTimeout, perfChildPath);
433
+ const fileResults = await runForFileWithTimeoutRetry(resolved, path.join(outputPath, path.parse(resolved).name), maxTimeout, perfChildPath);
400
434
  if (fileResults.type === 'Run') {
401
435
  if (fileResults.errorLines !== void 0) {
402
436
  errorLines.push(...fileResults.errorLines);
@@ -5,5 +5,5 @@
5
5
  // only the first segment (major) is meaningful and is the one CI carries forward.
6
6
  // Must stay in `vN.N.N` shape: the CI stamp regex, scripts/updateVersion.mjs, and
7
7
  // statistics.ts all match `v\d+\.\d+\.\d+`.
8
- const versionString = 'Conway v1.450.1353';
8
+ const versionString = 'Conway v1.452.1355';
9
9
  export { versionString };