@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 +1 -1
- package/README.md +3 -3
- package/dist/dist-manifest.json +8 -7
- package/dist/shim/engine/router.js +2 -2
- package/dist/shim/engine/site-graph.js +9 -1
- package/dist/shim/host/host-view.js +1 -8
- package/dist/shim/host/index.js +2 -1
- package/dist/shim/project/specifiers.js +2 -2
- package/dist/shim/registry/index.js +3 -0
- package/dist/shim/registry/studio-landing.js +67 -0
- package/llms.txt +2 -2
- package/package.json +1 -1
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-
|
|
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-
|
|
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 |
|
package/dist/dist-manifest.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@descix/frqtl-node",
|
|
3
|
-
"version": "0.6.1-
|
|
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": "
|
|
170
|
-
"shim/engine/site-graph.js": "
|
|
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": "
|
|
176
|
-
"shim/host/index.js": "
|
|
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": "
|
|
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": "
|
|
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-
|
|
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-
|
|
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';
|
package/dist/shim/host/index.js
CHANGED
|
@@ -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 (
|
|
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-
|
|
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-
|
|
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-
|
|
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": {
|