@bldrs-ai/conway 1.422.1273 → 1.423.1278
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/compiled/examples/browser-bundled.cjs +1 -1
- package/compiled/examples/cli-bundled.cjs +1 -1
- package/compiled/examples/cli-step-bundled.cjs +1 -1
- package/compiled/examples/validator-bundled.cjs +1 -1
- package/compiled/src/compat/web-ifc/ifc_api.d.ts +7 -0
- package/compiled/src/compat/web-ifc/ifc_api.d.ts.map +1 -1
- package/compiled/src/compat/web-ifc/ifc_api.js +7 -0
- package/compiled/src/compat/web-ifc/ifc_api_deferred_open.test.js +25 -9
- package/compiled/src/compat/web-ifc/ifc_api_proxy_ifc.d.ts +22 -6
- package/compiled/src/compat/web-ifc/ifc_api_proxy_ifc.d.ts.map +1 -1
- package/compiled/src/compat/web-ifc/ifc_api_proxy_ifc.js +76 -21
- package/compiled/src/version/version.js +1 -1
- package/compiled/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -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.
|
|
33
|
+
var versionString = "Conway v1.423.1278";
|
|
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.
|
|
14968
|
+
var versionString = "Conway v1.423.1278";
|
|
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.
|
|
15946
|
+
var versionString = "Conway v1.423.1278";
|
|
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.
|
|
947
|
+
var versionString = "Conway v1.423.1278";
|
|
948
948
|
|
|
949
949
|
// compiled/dependencies/conway-geom/interface/conway_geometry.js
|
|
950
950
|
var wasmType = "";
|
|
@@ -359,6 +359,13 @@ export declare class IfcAPI {
|
|
|
359
359
|
* `typeof api.ExtractGeometryBatch === 'function'`; call repeatedly
|
|
360
360
|
* until `remaining` is 0.
|
|
361
361
|
*
|
|
362
|
+
* DELTA CONTRACT: an entity may be emitted again in a LATER call with
|
|
363
|
+
* a FlatMesh containing only its NEW placed instances (shared/mapped
|
|
364
|
+
* geometry attributes instances to an entity from other products'
|
|
365
|
+
* extractions). Consumers must render/accumulate deltas additively —
|
|
366
|
+
* never key emissions by expressID with overwrite semantics. Each
|
|
367
|
+
* placed instance is emitted exactly once across all calls.
|
|
368
|
+
*
|
|
362
369
|
* @param modelID handle retrieved by OpenModelStreamed
|
|
363
370
|
* @param batchSize max products to extract this call
|
|
364
371
|
* @param meshCallback receives each newly-extracted product's mesh
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ifc_api.d.ts","sourceRoot":"","sources":["../../../../src/compat/web-ifc/ifc_api.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ifc_api.d.ts","sourceRoot":"","sources":["../../../../src/compat/web-ifc/ifc_api.ts"],"names":[],"mappings":"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"}
|
|
@@ -555,6 +555,13 @@ export class IfcAPI {
|
|
|
555
555
|
* `typeof api.ExtractGeometryBatch === 'function'`; call repeatedly
|
|
556
556
|
* until `remaining` is 0.
|
|
557
557
|
*
|
|
558
|
+
* DELTA CONTRACT: an entity may be emitted again in a LATER call with
|
|
559
|
+
* a FlatMesh containing only its NEW placed instances (shared/mapped
|
|
560
|
+
* geometry attributes instances to an entity from other products'
|
|
561
|
+
* extractions). Consumers must render/accumulate deltas additively —
|
|
562
|
+
* never key emissions by expressID with overwrite semantics. Each
|
|
563
|
+
* placed instance is emitted exactly once across all calls.
|
|
564
|
+
*
|
|
558
565
|
* @param modelID handle retrieved by OpenModelStreamed
|
|
559
566
|
* @param batchSize max products to extract this call
|
|
560
567
|
* @param meshCallback receives each newly-extracted product's mesh
|
|
@@ -17,8 +17,8 @@ let buffer;
|
|
|
17
17
|
* @param mesh The mesh.
|
|
18
18
|
* @return {object} Plain comparable form.
|
|
19
19
|
*/
|
|
20
|
-
function flatten(mesh) {
|
|
21
|
-
const geometries = [];
|
|
20
|
+
function flatten(mesh, previous) {
|
|
21
|
+
const geometries = previous?.geometries ?? [];
|
|
22
22
|
for (let where = 0; where < mesh.geometries.size(); ++where) {
|
|
23
23
|
const placed = mesh.geometries.get(where);
|
|
24
24
|
geometries.push({
|
|
@@ -44,19 +44,15 @@ describe("OpenModelStreamed + DEFER_GEOMETRY", () => {
|
|
|
44
44
|
expect(classic.size).toBeGreaterThan(0);
|
|
45
45
|
const deferredID = await api.OpenModelStreamed(buffer, { ...SETTINGS, DEFER_GEOMETRY: true });
|
|
46
46
|
expect(deferredID).toBeGreaterThanOrEqual(0);
|
|
47
|
-
// Nothing extracted yet: the scene walk yields no meshes.
|
|
48
|
-
const before = [];
|
|
49
|
-
api.StreamAllMeshes(deferredID, (mesh) => {
|
|
50
|
-
before.push(mesh.expressID);
|
|
51
|
-
});
|
|
52
|
-
expect(before).toHaveLength(0);
|
|
53
47
|
// Pump in deliberately small batches; collect incremental meshes.
|
|
48
|
+
// (Deltas: an entity may re-emit with only its NEW instances —
|
|
49
|
+
// `flatten` accumulation in the map below must be additive.)
|
|
54
50
|
const streamed = new Map();
|
|
55
51
|
let firstBatchCount = 0;
|
|
56
52
|
let rounds = 0;
|
|
57
53
|
for (;;) {
|
|
58
54
|
const { extracted, remaining } = api.ExtractGeometryBatch(deferredID, 7, (mesh) => {
|
|
59
|
-
streamed.set(mesh.expressID, flatten(mesh));
|
|
55
|
+
streamed.set(mesh.expressID, flatten(mesh, streamed.get(mesh.expressID)));
|
|
60
56
|
});
|
|
61
57
|
if (rounds === 0) {
|
|
62
58
|
firstBatchCount = streamed.size;
|
|
@@ -77,6 +73,26 @@ describe("OpenModelStreamed + DEFER_GEOMETRY", () => {
|
|
|
77
73
|
api.CloseModel(classicID);
|
|
78
74
|
api.CloseModel(deferredID);
|
|
79
75
|
}, 240000);
|
|
76
|
+
test("StreamAllMeshes on a deferred model drains the pump and matches classic", async () => {
|
|
77
|
+
const classicID = api.OpenModel(buffer, SETTINGS);
|
|
78
|
+
const classic = new Map();
|
|
79
|
+
api.StreamAllMeshes(classicID, (mesh) => {
|
|
80
|
+
classic.set(mesh.expressID, flatten(mesh));
|
|
81
|
+
});
|
|
82
|
+
const deferredID = await api.OpenModelStreamed(buffer, { ...SETTINGS, DEFER_GEOMETRY: true });
|
|
83
|
+
// No pump calls at all — the whole-model consumer must still get
|
|
84
|
+
// the complete mesh set (the shim drains internally).
|
|
85
|
+
const drained = new Map();
|
|
86
|
+
api.StreamAllMeshes(deferredID, (mesh) => {
|
|
87
|
+
drained.set(mesh.expressID, flatten(mesh));
|
|
88
|
+
});
|
|
89
|
+
expect(drained.size).toBe(classic.size);
|
|
90
|
+
for (const [expressID, mesh] of classic) {
|
|
91
|
+
expect(drained.get(expressID)).toEqual(mesh);
|
|
92
|
+
}
|
|
93
|
+
api.CloseModel(classicID);
|
|
94
|
+
api.CloseModel(deferredID);
|
|
95
|
+
}, 240000);
|
|
80
96
|
test("ExtractGeometryBatch is a safe no-op on non-deferred models", async () => {
|
|
81
97
|
const modelID = await api.OpenModelStreamed(buffer, SETTINGS);
|
|
82
98
|
expect(api.ExtractGeometryBatch(modelID, 8))
|
|
@@ -57,6 +57,15 @@ export declare class IfcApiProxyIfc implements IfcApiModelPassthrough {
|
|
|
57
57
|
private deferredMode_;
|
|
58
58
|
/** Deferred-mode product worklist (file order), lazily enumerated. */
|
|
59
59
|
private demandProducts_?;
|
|
60
|
+
/**
|
|
61
|
+
* Deferred capture watermarks: entity localID -> how many of its
|
|
62
|
+
* placed instances (in scene-walk order) have been captured. Shared
|
|
63
|
+
* (mapped) geometry attributes instances to an entity from OTHER
|
|
64
|
+
* products' extractions, so an entity's instance set grows across
|
|
65
|
+
* batches - the watermark makes each instance captured exactly once,
|
|
66
|
+
* in the same order the classic single walk would process it.
|
|
67
|
+
*/
|
|
68
|
+
private readonly demandCapturedCounts_;
|
|
60
69
|
/** Cursor into demandProducts_ — products before it are extracted. */
|
|
61
70
|
private demandCursor_;
|
|
62
71
|
_isCoordinated: boolean;
|
|
@@ -393,17 +402,24 @@ export declare class IfcApiProxyIfc implements IfcApiModelPassthrough {
|
|
|
393
402
|
remaining: number;
|
|
394
403
|
};
|
|
395
404
|
/**
|
|
396
|
-
* Walk the scene and emit
|
|
397
|
-
*
|
|
398
|
-
*
|
|
405
|
+
* Walk the scene and emit every not-yet-captured placed instance as
|
|
406
|
+
* per-entity DELTA FlatMeshes — the incremental core of
|
|
407
|
+
* streamAllMeshes with identical placed-geometry math, processed in
|
|
408
|
+
* walk order exactly once per instance (per-entity watermarks). An
|
|
409
|
+
* entity re-emits with only its NEW instances when shared/mapped
|
|
410
|
+
* geometry attributes more to it in later batches; consumers render
|
|
411
|
+
* deltas additively (the shared meshMap still accumulates each
|
|
412
|
+
* entity's FULL vector, so getFlatMesh stays whole-model correct).
|
|
413
|
+
*
|
|
414
|
+
* Also fixes a latent multi-call bug: the derived coordination
|
|
399
415
|
* matrix is stored back to the model tuple, so later batches place
|
|
400
416
|
* with the SAME coordination the first batch established
|
|
401
417
|
* (streamAllMeshes never needed this — it runs once).
|
|
402
418
|
*
|
|
403
|
-
* @param
|
|
404
|
-
*
|
|
419
|
+
* @param meshCallback Receives one delta FlatMesh per entity that
|
|
420
|
+
* gained instances this call.
|
|
405
421
|
*/
|
|
406
|
-
private
|
|
422
|
+
private streamNewMeshes_;
|
|
407
423
|
/**
|
|
408
424
|
*
|
|
409
425
|
* @param modelID
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ifc_api_proxy_ifc.d.ts","sourceRoot":"","sources":["../../../../src/compat/web-ifc/ifc_api_proxy_ifc.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,cAAc,EACf,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAC7D,OAAO,YAAY,MAAM,0BAA0B,CAAA;AACnD,OAAO,EACL,QAAQ,EACR,WAAW,EACX,WAAW,EACX,cAAc,EACd,cAAc,EACd,WAAW,EACX,MAAM,EACP,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAA;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC1D,OAAO,KAAK,QAAQ,MAAM,WAAW,CAAA;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAWhD,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAA;AAE3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAA;
|
|
1
|
+
{"version":3,"file":"ifc_api_proxy_ifc.d.ts","sourceRoot":"","sources":["../../../../src/compat/web-ifc/ifc_api_proxy_ifc.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,9 @@ import { shimIfcEntityMap, shimIfcEntityReverseMap } from "./shim_schema_mapping
|
|
|
19
19
|
import { EntityTypesIfcCount } from "../../ifc/ifc4_gen/entity_types_ifc.gen.js";
|
|
20
20
|
import { IfcProduct, IfcRoot } from "../../ifc/ifc4_gen/index.js";
|
|
21
21
|
import { CanonicalMeshType } from "../../index.js";
|
|
22
|
+
// Batch size used when a whole-model consumer (streamAllMeshes) drains
|
|
23
|
+
// a deferred model's remaining products synchronously.
|
|
24
|
+
const DEFERRED_DRAIN_BATCH = 256;
|
|
22
25
|
/* Moving-window size for the streamed columnar parse (matches the
|
|
23
26
|
* ifc_stream_open default; the window bounds parse-time scratch, not
|
|
24
27
|
* the source buffer, which the model keeps resident here). */
|
|
@@ -41,6 +44,15 @@ export class IfcApiProxyIfc {
|
|
|
41
44
|
this.fs = undefined;
|
|
42
45
|
/** Was this model opened without extraction (DEFER_GEOMETRY)? */
|
|
43
46
|
this.deferredMode_ = false;
|
|
47
|
+
/**
|
|
48
|
+
* Deferred capture watermarks: entity localID -> how many of its
|
|
49
|
+
* placed instances (in scene-walk order) have been captured. Shared
|
|
50
|
+
* (mapped) geometry attributes instances to an entity from OTHER
|
|
51
|
+
* products' extractions, so an entity's instance set grows across
|
|
52
|
+
* batches - the watermark makes each instance captured exactly once,
|
|
53
|
+
* in the same order the classic single walk would process it.
|
|
54
|
+
*/
|
|
55
|
+
this.demandCapturedCounts_ = new Map();
|
|
44
56
|
/** Cursor into demandProducts_ — products before it are extracted. */
|
|
45
57
|
this.demandCursor_ = 0;
|
|
46
58
|
this._isCoordinated = false;
|
|
@@ -990,40 +1002,55 @@ export class IfcApiProxyIfc {
|
|
|
990
1002
|
this.demandCursor_ = 0;
|
|
991
1003
|
}
|
|
992
1004
|
const end = Math.min(this.demandCursor_ + Math.max(batchSize, 1), this.demandProducts_.length);
|
|
993
|
-
|
|
1005
|
+
let extracted = 0;
|
|
994
1006
|
for (; this.demandCursor_ < end; ++this.demandCursor_) {
|
|
995
1007
|
const localID = this.demandProducts_[this.demandCursor_];
|
|
996
1008
|
if (this.conwayGeometry_.extractProductGeometryByLocalID(localID)) {
|
|
997
|
-
|
|
1009
|
+
++extracted;
|
|
998
1010
|
}
|
|
999
1011
|
}
|
|
1000
|
-
if (meshCallback !== void 0
|
|
1001
|
-
this.
|
|
1012
|
+
if (meshCallback !== void 0) {
|
|
1013
|
+
this.streamNewMeshes_(meshCallback);
|
|
1002
1014
|
}
|
|
1003
1015
|
return {
|
|
1004
|
-
extracted
|
|
1016
|
+
extracted,
|
|
1005
1017
|
remaining: this.demandProducts_.length - this.demandCursor_,
|
|
1006
1018
|
};
|
|
1007
1019
|
}
|
|
1008
1020
|
/**
|
|
1009
|
-
* Walk the scene and emit
|
|
1010
|
-
*
|
|
1011
|
-
*
|
|
1021
|
+
* Walk the scene and emit every not-yet-captured placed instance as
|
|
1022
|
+
* per-entity DELTA FlatMeshes — the incremental core of
|
|
1023
|
+
* streamAllMeshes with identical placed-geometry math, processed in
|
|
1024
|
+
* walk order exactly once per instance (per-entity watermarks). An
|
|
1025
|
+
* entity re-emits with only its NEW instances when shared/mapped
|
|
1026
|
+
* geometry attributes more to it in later batches; consumers render
|
|
1027
|
+
* deltas additively (the shared meshMap still accumulates each
|
|
1028
|
+
* entity's FULL vector, so getFlatMesh stays whole-model correct).
|
|
1029
|
+
*
|
|
1030
|
+
* Also fixes a latent multi-call bug: the derived coordination
|
|
1012
1031
|
* matrix is stored back to the model tuple, so later batches place
|
|
1013
1032
|
* with the SAME coordination the first batch established
|
|
1014
1033
|
* (streamAllMeshes never needed this — it runs once).
|
|
1015
1034
|
*
|
|
1016
|
-
* @param
|
|
1017
|
-
*
|
|
1035
|
+
* @param meshCallback Receives one delta FlatMesh per entity that
|
|
1036
|
+
* gained instances this call.
|
|
1018
1037
|
*/
|
|
1019
|
-
|
|
1038
|
+
streamNewMeshes_(meshCallback) {
|
|
1020
1039
|
const [model, scene, meshMap, geometryMaterialTransformMap] = this.model;
|
|
1021
1040
|
let coordinationMatrix = this.model[5];
|
|
1022
|
-
const
|
|
1041
|
+
const seenThisPass = new Map();
|
|
1042
|
+
const deltas = new Map();
|
|
1023
1043
|
// eslint-disable-next-line no-unused-vars
|
|
1024
1044
|
for (const [_, nativeTransform, geometry, material, entity] of scene.walk()) {
|
|
1025
|
-
if (entity?.localID === void 0 ||
|
|
1026
|
-
|
|
1045
|
+
if (entity?.localID === void 0 || entity.expressID === void 0) {
|
|
1046
|
+
continue;
|
|
1047
|
+
}
|
|
1048
|
+
// Per-entity walk position vs watermark: instances before the
|
|
1049
|
+
// watermark were captured in an earlier call (append-only walk
|
|
1050
|
+
// order makes the count a stable cursor).
|
|
1051
|
+
const walkIndex = seenThisPass.get(entity.localID) ?? 0;
|
|
1052
|
+
seenThisPass.set(entity.localID, walkIndex + 1);
|
|
1053
|
+
if (walkIndex < (this.demandCapturedCounts_.get(entity.localID) ?? 0)) {
|
|
1027
1054
|
continue;
|
|
1028
1055
|
}
|
|
1029
1056
|
if (geometry.type !== CanonicalMeshType.BUFFER_GEOMETRY || geometry.temporary) {
|
|
@@ -1111,15 +1138,26 @@ export class IfcApiProxyIfc {
|
|
|
1111
1138
|
}
|
|
1112
1139
|
mesh[0].push(placed);
|
|
1113
1140
|
mesh[1].geometries = mesh[0];
|
|
1114
|
-
|
|
1141
|
+
this.demandCapturedCounts_.set(entity.localID, (this.demandCapturedCounts_.get(entity.localID) ?? 0) + 1);
|
|
1142
|
+
let delta = deltas.get(entity.expressID);
|
|
1143
|
+
if (delta === void 0) {
|
|
1144
|
+
delta = [];
|
|
1145
|
+
deltas.set(entity.expressID, delta);
|
|
1146
|
+
}
|
|
1147
|
+
delta.push(placed);
|
|
1115
1148
|
}
|
|
1116
1149
|
const vectorFlatMesh = this.model[4];
|
|
1117
|
-
for (const expressID of
|
|
1118
|
-
const
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1150
|
+
for (const [expressID, placedList] of deltas) {
|
|
1151
|
+
const placedVector = {
|
|
1152
|
+
get: (index) => placedList[index] ?? placedList[0],
|
|
1153
|
+
size: () => placedList.length,
|
|
1154
|
+
push: (parameter) => {
|
|
1155
|
+
placedList.push(parameter);
|
|
1156
|
+
},
|
|
1157
|
+
};
|
|
1158
|
+
const deltaMesh = { geometries: placedVector, expressID };
|
|
1159
|
+
vectorFlatMesh.push(deltaMesh);
|
|
1160
|
+
meshCallback(deltaMesh);
|
|
1123
1161
|
}
|
|
1124
1162
|
}
|
|
1125
1163
|
/**
|
|
@@ -1128,6 +1166,23 @@ export class IfcApiProxyIfc {
|
|
|
1128
1166
|
* @param meshCallback
|
|
1129
1167
|
*/
|
|
1130
1168
|
streamAllMeshes(meshCallback) {
|
|
1169
|
+
// Deferred models: the delta capture has already populated (or will
|
|
1170
|
+
// populate) the shared meshMap — re-running the classic walk would
|
|
1171
|
+
// push every instance a second time. Pump any remainder to
|
|
1172
|
+
// completion and serve the accumulated full per-entity meshes.
|
|
1173
|
+
if (this.deferredMode_) {
|
|
1174
|
+
const noCallback = void 0;
|
|
1175
|
+
while (this.extractGeometryBatch(DEFERRED_DRAIN_BATCH, noCallback).remaining > 0) {
|
|
1176
|
+
// draining
|
|
1177
|
+
}
|
|
1178
|
+
this.streamNewMeshes_(() => { });
|
|
1179
|
+
const [, , meshMap, , vectorFlatMesh] = this.model;
|
|
1180
|
+
meshMap.forEach((mesh) => {
|
|
1181
|
+
vectorFlatMesh.push(mesh[1]);
|
|
1182
|
+
meshCallback(mesh[1]);
|
|
1183
|
+
});
|
|
1184
|
+
return;
|
|
1185
|
+
}
|
|
1131
1186
|
const [model, scene, meshMap, geometryMaterialTransformMap, vectorFlatMesh] = this.model;
|
|
1132
1187
|
let coordinationMatrix = this.model[5];
|
|
1133
1188
|
// eslint-disable-next-line no-unused-vars
|
|
@@ -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.
|
|
8
|
+
const versionString = 'Conway v1.423.1278';
|
|
9
9
|
export { versionString };
|