@descix/frqtl-node 0.6.1-p1.2 → 0.6.1-p2.1

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/CLAUDE.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  A discrete cellular-automata physics engine (compiled Rust → WASM) for node: the same modules as
4
4
  `@descix/frqtl-web` (one source, built twice), plus the node engine door `bootNode` and the hosted eyes.
5
- `0.6.1-p1.2` (npm dist-tag `next`). Node ≥ 22.12.
5
+ `0.6.1-p2.1` (npm dist-tag `next`). Node ≥ 22.12.
6
6
 
7
7
  ## Install
8
8
  npm install @descix/frqtl-node
package/README.md CHANGED
@@ -4,7 +4,7 @@ FRQTL for node: a discrete cellular-automata physics engine (compiled Rust → W
4
4
  local per-pixel rules — a frame moves one pixel per tick, single occupancy, momentum — rather than force
5
5
  equations. Interference, blackbody spectra and atom-like binding emerge from the automaton.
6
6
 
7
- `0.6.1-p1.2` (npm dist-tag `next`). Node ≥ 22.12.
7
+ `0.6.1-p2.1` (npm dist-tag `next`). Node ≥ 22.12.
8
8
 
9
9
  ## Install
10
10
 
@@ -32,10 +32,10 @@ const tick = u.doTick(); // TickData: fr
32
32
  | `./eyes` | `openHostedEyes` — a `composite` still through the REAL renderer, in a managed headless browser (pulls the pinned `playwright`) |
33
33
  | `./parts`, `./parts/*` | the parts barrel; one part = one file |
34
34
  | `./project` | `FRQTL_WEB_SPECIFIERS`, `libPathOf`, `importMapFor`, `pageImportMapFor`, `FRQTL_WEB_HOST_SPECIFIERS`, `linkProject`, `sketchProject`, `SKETCH_ENTRY`, `projectIdentity`, `MANIFEST_FILE`, `MANIFEST_KEYS`, `normalizeManifest`, `parseManifest`, `serializeManifest`, `manifestFor`, `RECORD_FILES`, `RECORD_KEYS`, `CHANGE_KEYS`, `OPS`, `BY`, `CLIP_SECONDS`, `CLIP_NAME`, `clipName`, `jsonText`, `recordFolderFaults` |
35
- | `./registry` | the walk-through rungs, the showcase roster, the scene list (`sceneGroups`), `projectOf`, a showcase tile's link (`showcaseHref(row)` relative to the serving site, `showcaseUrl(row)` absolute on `SHOWCASE_SITE.origin`; `row` is an element of the same imported `EXHIBITS`, and the link carries the row's effective mode on a multi-mode rung) |
35
+ | `./registry` | the walk-through rungs, the showcase roster, the scene list (`sceneGroups`), `projectOf`, a showcase tile's link (`showcaseHref(row)` relative to the serving site, `showcaseUrl(row)` absolute on `SHOWCASE_SITE.origin`; `row` is an element of the same imported `EXHIBITS`, and the link carries the row's effective mode on a multi-mode rung), and how STUDIO resolved the link it opened with (`STUDIO_LANDING_ATTR` on `<html>`, a `STUDIO_LANDING_OUTCOMES` id) |
36
36
  | `./kinds` | `registerKind`, `kindNamed`, `kindOf`, `registeredKinds` |
37
37
  | `./host-view` | `declareHostView`, `HOST_VIEW_OUTCOMES`, `CONTRACT_VIOLATIONS`, `HOST_SDK_SCRIPT` — the DeSciX host-view declarer (pure: a node test can drive a call site with a stub SDK) |
38
- | `./site-graph` | `SITE_GRAPH_DIR`, `SITE_BUILD_ATTR`, `SITE_BUILD_ID_RE`, `STATIC_APP_PAGE` — the static site's shape (graph directory, build-stamp attribute, build id pattern, IDE entry page), for a reader of a served site (both packages) |
38
+ | `./site-graph` | `SITE_GRAPH_DIR`, `SITE_BUILD_ATTR`, `SITE_BUILD_ID_RE`, `STATIC_APP_PAGE`, `HOST_PROVIDED_ATTR` — the static site's shape (graph directory, build-stamp attribute, build id pattern, IDE entry page, the attribute declaring a file host-provided), for a reader of a served site (both packages) |
39
39
  | `./register` | installs the resolve hook for a sketch's `@descix/frqtl-web/...` imports (`node --import @descix/frqtl-node/register`) |
40
40
  | `./shim/controls/registry.js`, `./shim/render/sun-look.js`, `./compat/renderer/display-slot.js`, `./compat/renderer/orbit-bag.js`, `./objects/setup/_collisionMatrixLanes.js`, `./compat/engine.js` | the six non-part modules a scene may import (the rows of `FRQTL_WEB_SPECIFIERS`) |
41
41
  | `./objects/objects/tagger.js`, `./objects/schema/index.js`, `./shim/render/heat-colormap.js`, `./objects/schema/valueNormalizer.js`, `./objects/objects/Box.js`, `./objects/objects/QuantumEmitter.js`, `./shim/expr/ast-schema.js`, `./objects/objects/actionCompiler.js`, `./objects/v1-replacements.js`, `./objects/objects/slitLinerScatter.js`, `./objects/setup/setupSphereEmitter3D.js`, `./objects/objects/directedRedirectProgram.js`, `./compat/renderer/lo-drawn-center.js`, `./objects/setup/setupTunnelPointExit.js`, `./objects/constants/WallBehaviors.js`, `./objects/objects/absorbRadiation.js`, `./objects/geometry/SlabFace.js` | the 17 part-internal modules a forked part file imports (the `tier: 'part-internal'` rows of `FRQTL_WEB_SPECIFIERS`): not a scene API — the linker admits them only from a `parts/*.js` file — and they move with the parts |
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@descix/frqtl-node",
3
- "version": "0.6.1-p1.2",
3
+ "version": "0.6.1-p2.1",
4
4
  "files": {
5
5
  "eyes/index.js": "b3563421030bb7fdd277eb697959fbe9107463cbb5478160edc7d887daa67be3",
6
6
  "fat/pkg-node/egpt_wasm.js": "5e6af1f6725c93c0e9ad7386f1785cbe639ce596a4caa19ca85729c1f2bea04d",
@@ -166,14 +166,14 @@
166
166
  "shim/engine/artifact-shell.js": "f23c327500f8174b12d464868f6ec9c1701e7a9a5faa1c43a2ddafc3191dc38c",
167
167
  "shim/engine/boot-phases.js": "c6e12e12824bcf6f1a289f46e41c898a5416c80c131594525145aae9a3eefbfa",
168
168
  "shim/engine/engine-stack-boot.js": "0abf57dcff2ca2bb025c787a17875d49d54d9218ac08c78cb9c678dbb6118d08",
169
- "shim/engine/router.js": "e0563d9b6cc9da08fe915b1d0218faf446a827ff9196038c9f85622f7d1c0fcd",
170
- "shim/engine/site-graph.js": "55276c1aa1a4d64f2939610993b00b6bf9d10b331361ac2c4997b949303b7fd4",
169
+ "shim/engine/router.js": "2924f9dbdd690fc8703e1b3ad65900c323219919da1f838112513aa64e8e6bda",
170
+ "shim/engine/site-graph.js": "e787c875310ac6ca374c71ae41064b822d8e14ba59f357e7c71b2dcf8699dc70",
171
171
  "shim/experiment-frame/index.js": "5a0219aaa225d8f808c405b08623ce85ada37d83fb4f55f983db3303e431e47f",
172
172
  "shim/expr/ast-schema.js": "4f1133b887639bbd86fab976292323bf4a955cdc873ff7ca8e8a8eb3b416923f",
173
173
  "shim/field-descriptor/index.js": "6647d57d1523519114adc0a5cb66335ec5121c39ab294b9c97bdfb9e5d7f61e0",
174
174
  "shim/frame-data/index.js": "df6957b0b4a8e0ee0035bc970647b90089b421ae7f05911cc047d48457164be6",
175
- "shim/host/host-view.js": "38aa2ae18c89dd5a80dd35fa5a1a6d9597d33fa2c8596a93bdb86149dbcf52dc",
176
- "shim/host/index.js": "67691951a7ff35b4baf7332987d0128d1eefd0ad185d2989674bea90b17c02f3",
175
+ "shim/host/host-view.js": "feec2f5fdc318e75cd01768c24891f85d2694a269696fcfffd9567d31983cf43",
176
+ "shim/host/index.js": "fade4b171218965570aa2e67e841920ebb3d972ff15e1cfa0394fd3fa123d82c",
177
177
  "shim/index.js": "96165c6161ffddbace0be0cde0b3a83943298531537dd2cc9c6e281b8274ff19",
178
178
  "shim/notebook/canvas-guard.js": "b19d3a86df3835bd617c7130cde997b6f8a8a0c140f95338b733115d5947ed7b",
179
179
  "shim/notebook/catalog.js": "68243a154e12bf36a76598aa554119f6e3b8b5363c8452d157c8a562b9c38dc1",
@@ -206,13 +206,14 @@
206
206
  "shim/project/read-text.js": "b89bd70e3a271e1f42c8ce9427a20cdd9a4c4c9c31b64c49ff1f56b095620136",
207
207
  "shim/project/record-format.js": "b680c3752f20535c08be832c6808fae000c2d2325f8caee57f98351043d091be",
208
208
  "shim/project/register-node.mjs": "9b408da7dc1b11d16237cd62caca281c823ea80173d386ad35e41ea17c34857f",
209
- "shim/project/specifiers.js": "c8bbff6bfbbdf00d09a39500daf54a952e1447522ecebb808a3838c9d534387e",
209
+ "shim/project/specifiers.js": "288e5e06e53b873449190f6f85855177a72e52623bd11eef016acafb8095d829",
210
210
  "shim/registry/copy-gate.js": "cfbf52669c849b8837b326f2743458f1ead0720cad51a6c6d409c9bd6c7f9495",
211
211
  "shim/registry/exhibits.js": "e137951429929dae6c38e996546b66dd19b575ee4f0aafbddf28096c847a27fc",
212
- "shim/registry/index.js": "eb805ee170ee8be71c179577fcb48b9845012ba63674316fbf9b5d7664f86f1f",
212
+ "shim/registry/index.js": "3a96c6b8790058663bb3157f6daecbcc199c2472d096b413e1766dd279832c05",
213
213
  "shim/registry/scene-roster.js": "318fe373f71b1c58d05425693f2fad4bd5368f6095b65817c6d637430a0bfb73",
214
214
  "shim/registry/scene-source.js": "c9c4b48c24d4b1ebee1549a7891a1ba708909b94b9403ce28eefbd902cacf49f",
215
215
  "shim/registry/showcase-link.js": "daf5c1426aeb3c578bace5e0edea9ba2538cd82336d2cdc944e5fed6decd7551",
216
+ "shim/registry/studio-landing.js": "c34c9e7e77087c2bfa6be9c34dafedb1e3256e92eb1aeb629b7f7182cd2edf9f",
216
217
  "shim/registry/walkthrough.js": "8f8b6f59e9e81c67c9c62f8fb271eee2e4d6e1fba6e116b227a2f1e3f9930230",
217
218
  "shim/render-state/apply.js": "94a9e60cb1722c9a82aa00f2f161fd65e6f438147333856a786e42a4ad5b7064",
218
219
  "shim/render-state/index.js": "72a6a3dcd8037893cb8fbd7ef32b126770e7efaec70847f8e4f2915ddb690b43",
@@ -152,7 +152,7 @@ var DIST_PROFILE = buildDistProfile('../..');
152
152
  // lib/shim/engine/test/router.test.mjs asserts them against the two
153
153
  // package.json#version fields so a forgotten bump fails `make verify`, not a
154
154
  // silent stale-CDN-URL bug.
155
- var CDN_SDK_VERSION = '0.6.1-p1.2'; // sdk/frqtl-web/package.json#version (the ONE version owner) — bound by router.test.mjs
155
+ var CDN_SDK_VERSION = '0.6.1-p2.1'; // sdk/frqtl-web/package.json#version (the ONE version owner) — bound by router.test.mjs
156
156
  var CDN_MATH_SDK_VERSION = '0.3.2'; // sdk/egpt-math-sdk/package.json#version — bound by router.test.mjs; bumped with each npm publish
157
157
 
158
158
  /**
@@ -500,7 +500,7 @@ var _assertProfileParity = (function () {
500
500
  * // CDN mode (static hosting — the artifact host shell has no server, no page anchor):
501
501
  * const cdnRouter = engineRouter({ mode: 'cdn', engine: 'wasm' });
502
502
  * console.log(cdnRouter.resolve('compat/engine.js'));
503
- * // 'https://cdn.jsdelivr.net/npm/@descix/frqtl-web@0.6.1-p1.2/dist/frqtl/compat/engine.js'
503
+ * // 'https://cdn.jsdelivr.net/npm/@descix/frqtl-web@0.6.1-p2.1/dist/frqtl/compat/engine.js'
504
504
  *
505
505
  * // CDN mode, self-hosted: a copy of dist/ served from the consumer's own origin:
506
506
  * const selfHosted = engineRouter({ mode: 'cdn', engine: 'wasm', base: 'https://example.org/vendor/frqtl-web/dist' });
@@ -12,13 +12,14 @@
12
12
  * SITE_BUILD_ATTR the <html> attribute of the IDE document carrying <build>
13
13
  * SITE_BUILD_ID_RE a <build>: the 8-hex-digit short sha of the commit the bundle was built from
14
14
  * STATIC_APP_PAGE the IDE bundle's entry document, beside the publisher's front page
15
+ * HOST_PROVIDED_ATTR the attribute declaring a file host-provided (the publisher vendors it beside the page)
15
16
  * SITE_GRAPH_EXPORTS the published names (the parity gate holds both packages' ./site-graph to this table)
16
17
  *
17
18
  * Host-neutral ESM with no imports: it loads unchanged in node and in a page.
18
19
  */
19
20
 
20
21
  /** The names `./site-graph` publishes. */
21
- export const SITE_GRAPH_EXPORTS = Object.freeze(['SITE_GRAPH_DIR', 'SITE_BUILD_ATTR', 'SITE_BUILD_ID_RE', 'STATIC_APP_PAGE']);
22
+ export const SITE_GRAPH_EXPORTS = Object.freeze(['SITE_GRAPH_DIR', 'SITE_BUILD_ATTR', 'SITE_BUILD_ID_RE', 'STATIC_APP_PAGE', 'HOST_PROVIDED_ATTR']);
22
23
 
23
24
  /** The static site's graph directory name (the entries sit in it, the graph under its build-stamped child). */
24
25
  export const SITE_GRAPH_DIR = 'pub';
@@ -34,3 +35,10 @@ export const SITE_BUILD_ID_RE = /^[0-9a-f]{8}$/;
34
35
  * index.html: a site's index.html is the publisher's front page (lib/shim/host/host-view.js::HOST_FRONT_PAGE).
35
36
  */
36
37
  export const STATIC_APP_PAGE = 'app.html';
38
+
39
+ /**
40
+ * The attribute that declares a file host-provided, on the element that consumes it, in the bytes the browser
41
+ * executes (the static build writes it: apps/ide/vite.config.js). Both the bundle gate (the file must be ABSENT from
42
+ * the bundle) and the publisher (the file must be PRESENT beside the page) read the set from this attribute.
43
+ */
44
+ export const HOST_PROVIDED_ATTR = 'data-frqtl-host-provided';
@@ -34,17 +34,10 @@
34
34
  */
35
35
  export const HOST_SDK_SCRIPT = 'DeSciXAppSDK.js';
36
36
 
37
- /**
38
- * The attribute that declares a file host-provided, on the element that consumes it, in the
39
- * bytes the browser executes. Both the bundle gate (the file must be ABSENT from the bundle) and
40
- * the publisher (the file must be PRESENT beside the page) read the set from this attribute.
41
- */
42
- export const HOST_PROVIDED_ATTR = 'data-frqtl-host-provided';
43
-
44
37
  /**
45
38
  * The publisher's front page, beside the IDE entry (site-graph.js::STATIC_APP_PAGE). PUBLISHER-provided
46
39
  * like HOST_SDK_SCRIPT: the static build declares it once as `<link rel="home" href=HOST_FRONT_PAGE
47
- * HOST_PROVIDED_ATTR>` (apps/ide/vite.config.js), the bundle gate asserts the bundle does not ship
40
+ * site-graph.js::HOST_PROVIDED_ATTR>` (apps/ide/vite.config.js), the bundle gate asserts the bundle does not ship
48
41
  * it, and lib/features/ide/home-link.js::homeHrefOf reads the declaration back.
49
42
  */
50
43
  export const HOST_FRONT_PAGE = 'index.html';
@@ -3,7 +3,8 @@
3
3
  /**
4
4
  * index.js — the published door to the host-view declarer: `@descix/frqtl-web/host-view` and
5
5
  * `@descix/frqtl-node/host-view`. Exactly the names below, re-exported from THE declarer (host-view.js); its
6
- * static-build vocabulary (HOST_PROVIDED_ATTR, HOST_FRONT_PAGE) stays FRAQTL's own.
6
+ * static-build vocabulary (HOST_FRONT_PAGE) stays FRAQTL's own. The host-provided attribute a publisher reads is
7
+ * published by `./site-graph` (site-graph.js::HOST_PROVIDED_ATTR).
7
8
  *
8
9
  * HOST_VIEW_EXPORTS the published names (the parity gate holds both packages' ./host-view to this table)
9
10
  *
@@ -103,13 +103,13 @@ export const FRQTL_WEB_BOOT = Object.freeze({ specifier: '@descix/frqtl-web/boot
103
103
  export const FRQTL_WEB_HOST_SPECIFIERS = Object.freeze([
104
104
  FRQTL_WEB_BOOT,
105
105
  Object.freeze({ specifier: '@descix/frqtl-web/registry', libPath: 'shim/registry/index.js',
106
- why: 'the walk-through rungs, the showcase roster, the scene list (sceneGroups), projectOf, showcaseHref + showcaseUrl + SHOWCASE_SITE' }),
106
+ why: 'the walk-through rungs, the showcase roster, the scene list (sceneGroups), projectOf, showcaseHref + showcaseUrl + SHOWCASE_SITE, STUDIO\'s deep-link landing record' }),
107
107
  Object.freeze({ specifier: '@descix/frqtl-web/project', libPath: 'shim/project/index.js',
108
108
  why: 'the specifier table, the link site, sketchProject and the project identity' }),
109
109
  Object.freeze({ specifier: '@descix/frqtl-web/host-view', libPath: 'shim/host/index.js',
110
110
  why: 'the DeSciX host-view declarer: a page declares its own view' }),
111
111
  Object.freeze({ specifier: '@descix/frqtl-web/site-graph', libPath: 'shim/engine/site-graph.js',
112
- why: 'the static site\'s shape: the graph directory, the build-stamp attribute, the build id pattern, the IDE entry page' })
112
+ why: 'the static site\'s shape: the graph directory, the build-stamp attribute, the build id pattern, the IDE entry page, the host-provided attribute' })
113
113
  ]);
114
114
 
115
115
  /** The package a self-reference names. */
@@ -13,6 +13,8 @@
13
13
  * scene-source.js projectOf(id, { mode }) — a rung as a project folder + its renderState (fetch in a page, file read in node)
14
14
  * showcase-link.js showcaseHref(row), showcaseUrl(row), SHOWCASE_SITE — a showcase tile's link (relative, absolute)
15
15
  * and the site that serves it; `row` is an element of THIS barrel's EXHIBITS
16
+ * studio-landing.js STUDIO_LANDING_ATTR, STUDIO_LANDING_OUTCOMES, recordStudioLanding — how STUDIO resolved the deep
17
+ * link it opened with, recorded on <html> (what a gate following a tile reads)
16
18
  */
17
19
 
18
20
  export * from './walkthrough.js';
@@ -20,3 +22,4 @@ export * from './exhibits.js';
20
22
  export * from './scene-roster.js';
21
23
  export * from './scene-source.js';
22
24
  export * from './showcase-link.js';
25
+ export * from './studio-landing.js';
@@ -0,0 +1,67 @@
1
+ /* Copyright 2023-2026 by Essam Abadir */
2
+
3
+ /**
4
+ * studio-landing.js — the ONE record of how STUDIO resolved the deep link it opened with, as host-view.js records
5
+ * its view outcome: STUDIO's resolver (lib/features/ide/studio-landing-of.js::studioLandingOf) decides the row and
6
+ * AuthorView.jsx writes it on `document.documentElement` under STUDIO_LANDING_ATTR, through recordStudioLanding,
7
+ * and a gate that opens a link (a showcase tile, showcase-link.js) reads that attribute instead of STUDIO's DOM or
8
+ * its error copy.
9
+ *
10
+ * STUDIO_LANDING_ATTR the <html> attribute carrying the outcome id
11
+ * STUDIO_LANDING_OUTCOMES the closed table: one row per branch of STUDIO's link resolution, `{ id, means }`
12
+ * recordStudioLanding(root, id) writes `id` on `root` (an Element, or null to only validate); an id outside the
13
+ * table THROWS — that is a defect in the writer, never a landing
14
+ *
15
+ * The rows are the branches the resolution already takes, no more: the link's keys are read by the one parser
16
+ * (lib/features/ide/deep-link.js) and the refusal of a key STUDIO does not own is its deepLinkRefusalOf. `ok` says the
17
+ * linked scene RESOLVED and was handed to STUDIO's selection path; whether that scene then boots is the boot record's
18
+ * business (boot-phases.js), not this one's.
19
+ *
20
+ * Lives in the registry, published by `./registry`: the outcome is the landing of the link showcaseHref writes, so a
21
+ * gate following a tile takes both from one module instance; the parser's own home (lib/features) has no package
22
+ * door, and shim may not import features.
23
+ *
24
+ * Host-neutral ESM with no imports: it runs unchanged in node and in a page.
25
+ */
26
+
27
+ /** The <html> attribute STUDIO records its deep-link landing on. */
28
+ export const STUDIO_LANDING_ATTR = 'data-frqtl-studio-landing';
29
+
30
+ /** The closed table of STUDIO deep-link landings, in the order the resolver tests them (lib/features/ide/test/studio-landing-of.test.mjs holds it). */
31
+ export const STUDIO_LANDING_OUTCOMES = Object.freeze([
32
+ { id: 'refused-key',
33
+ means: 'the link carries a key STUDIO does not own, or a deleted key (deep-link.js deepLinkRefusalOf): the refusal is on the deep-link strip and the opening rung opens' },
34
+ { id: 'conflict',
35
+ means: 'the link names both a walkthrough and a saved project: nothing opens' },
36
+ { id: 'mode-without-walkthrough',
37
+ means: 'the link names a mode and no walkthrough: nothing opens' },
38
+ { id: 'unknown-walkthrough',
39
+ means: 'the linked walkthrough is not in the walkthrough registry (walkthroughById): nothing opens' },
40
+ { id: 'unknown-mode',
41
+ means: 'the linked mode is not one the linked rung declares (walkthroughModes): nothing opens' },
42
+ { id: 'project-unreadable',
43
+ means: 'the linked saved project is present but its folder is refused by the load: nothing opens' },
44
+ { id: 'project-not-found',
45
+ means: 'no saved project of the linked name in this browser: nothing opens' },
46
+ { id: 'ok',
47
+ means: 'the linked walkthrough (in the linked mode, else its default) or saved project resolved and was handed to STUDIO\'s selection path' },
48
+ { id: 'first-contact',
49
+ means: 'no STUDIO deep link: the walkthrough registry\'s opening rung opens' },
50
+ ].map(Object.freeze));
51
+
52
+ const IDS = new Set(STUDIO_LANDING_OUTCOMES.map((r) => r.id));
53
+
54
+ /**
55
+ * @param {Element|null} root the document element STUDIO runs in (null: validate only)
56
+ * @param {string} id a STUDIO_LANDING_OUTCOMES id
57
+ * @returns {string} id
58
+ * @throws {Error} an id the table does not list
59
+ */
60
+ export function recordStudioLanding(root, id) {
61
+ if (!IDS.has(id)) {
62
+ throw new Error('[studio-landing] \'' + id + '\' is not a STUDIO_LANDING_OUTCOMES row — declared: [' +
63
+ [...IDS].join(', ') + ']. (FAIL-LOUD.)');
64
+ }
65
+ if (root) { root.setAttribute(STUDIO_LANDING_ATTR, id); }
66
+ return id;
67
+ }
package/llms.txt CHANGED
@@ -1,7 +1,7 @@
1
1
  # @descix/frqtl-node
2
2
 
3
3
  > The FRQTL physics engine (compiled Rust → WASM) for node: the same modules as @descix/frqtl-web, plus
4
- > `bootNode` and the hosted eyes. 0.6.1-p1.2 on npm dist-tag `next`. Node ≥ 22.12.
4
+ > `bootNode` and the hosted eyes. 0.6.1-p2.1 on npm dist-tag `next`. Node ≥ 22.12.
5
5
 
6
6
  - Install: `npm install @descix/frqtl-node`
7
7
  - `import { bootNode, Wall } from '@descix/frqtl-node'` (require() works too); `await bootNode()` → the engine handle.
@@ -9,5 +9,5 @@
9
9
  - `./project`: `linkProject` links a scene file against this package's own copy.
10
10
  - `./host-view`: `declareHostView`, `HOST_VIEW_OUTCOMES`, `CONTRACT_VIOLATIONS`, `HOST_SDK_SCRIPT` — the same declarer as @descix/frqtl-web/host-view, pure, for a node test of a call site.
11
11
  - `./register`: `node --import @descix/frqtl-node/register scene.mjs` resolves a scene's `@descix/frqtl-web/...` imports to this package.
12
- - Full agent guide: https://cdn.jsdelivr.net/npm/@descix/frqtl-node@0.6.1-p1.2/CLAUDE.md
12
+ - Full agent guide: https://cdn.jsdelivr.net/npm/@descix/frqtl-node@0.6.1-p2.1/CLAUDE.md
13
13
  - Acceptance is visual; no CLI ships. No account, credits or tokens are needed.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@descix/frqtl-node",
3
- "version": "0.6.1-p1.2",
3
+ "version": "0.6.1-p2.1",
4
4
  "description": "FRQTL for node \u2014 the discrete fractal physics engine (compiled Rust \u2192 WASM), its parts as ES modules, the node engine door (bootNode) and the hosted eyes.",
5
5
  "type": "module",
6
6
  "engines": {