@descix/frqtl-node 0.6.1-p3.4 → 0.7.0-p0
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 +3 -3
- package/README.md +4 -3
- package/dist/dist-manifest.json +26 -56
- package/dist/frqtl/experiments/_shared/empty-sketch.js +17 -0
- package/dist/frqtl/objects/setup/setupBlackbodySubstrate.js +6 -6
- package/dist/frqtl/objects/setup/setupFxSmoke.js +2 -2
- package/dist/frqtl/objects/setup/setupG3Collide.js +1 -1
- package/dist/frqtl/objects/setup/setupSphereEmitter3D.js +2 -2
- package/dist/frqtl/objects/v1-replacements.js +1 -1
- package/dist/frqtl/parts/OvenBox.js +2 -2
- package/dist/frqtl/parts/SphereEmitter.js +1 -1
- package/dist/shim/engine/router.js +18 -6
- package/dist/shim/engine/site-assemble.mjs +268 -0
- package/dist/shim/engine/site-graph.js +42 -14
- package/dist/shim/host/device.js +1 -1
- package/dist/shim/index.js +3 -7
- package/dist/shim/notebook/catalog.js +2 -2
- package/dist/shim/notebook/format.js +1 -1
- package/dist/shim/notebook/knob.js +1 -1
- package/dist/shim/notebook/notebook-knobs.js +1 -1
- package/dist/shim/project/specifiers.js +8 -8
- package/dist/shim/registry/copy-gate.js +3 -3
- package/dist/shim/registry/index.js +9 -12
- package/dist/shim/registry/roster-link.js +142 -0
- package/dist/shim/registry/roster.js +595 -0
- package/dist/shim/registry/scene-source.js +80 -105
- package/dist/shim/registry/studio-landing.js +15 -7
- package/dist/shim/render/sun-look.js +1 -2
- package/llms.txt +4 -2
- package/package.json +1 -1
- package/dist/frqtl/scenes/absorbing-wall-3d.js +0 -37
- package/dist/frqtl/scenes/absorbing-wall.js +0 -36
- package/dist/frqtl/scenes/atomic-model.js +0 -91
- package/dist/frqtl/scenes/big-bang.js +0 -49
- package/dist/frqtl/scenes/blackbody.js +0 -84
- package/dist/frqtl/scenes/circuit-sat.js +0 -131
- package/dist/frqtl/scenes/collision-matrix-3d.js +0 -110
- package/dist/frqtl/scenes/counting-wall-3d.js +0 -40
- package/dist/frqtl/scenes/counting-wall.js +0 -42
- package/dist/frqtl/scenes/double-slit.js +0 -34
- package/dist/frqtl/scenes/dse-one-emitter.js +0 -200
- package/dist/frqtl/scenes/dse-one-slit.js +0 -118
- package/dist/frqtl/scenes/dse-photoelectric.js +0 -74
- package/dist/frqtl/scenes/dse-tunnel-rebuild.js +0 -279
- package/dist/frqtl/scenes/dse-two-emitters.js +0 -201
- package/dist/frqtl/scenes/dse-two-slits.js +0 -136
- package/dist/frqtl/scenes/empty.js +0 -17
- package/dist/frqtl/scenes/laser-buildup.js +0 -56
- package/dist/frqtl/scenes/mirror-3d.js +0 -60
- package/dist/frqtl/scenes/mirror-route.js +0 -164
- package/dist/frqtl/scenes/mirror.js +0 -42
- package/dist/frqtl/scenes/omni-3d.js +0 -30
- package/dist/frqtl/scenes/omni-source.js +0 -25
- package/dist/frqtl/scenes/self-interference.js +0 -42
- package/dist/frqtl/scenes/smoking-gun.js +0 -126
- package/dist/frqtl/scenes/straight-walk.js +0 -25
- package/dist/frqtl/scenes/sun.js +0 -42
- package/dist/frqtl/scenes/two-source.js +0 -42
- package/dist/frqtl/scenes/wave.js +0 -29
- package/dist/shim/engine/artifact-shell.js +0 -211
- package/dist/shim/registry/exhibits.js +0 -436
- package/dist/shim/registry/scene-roster.js +0 -35
- package/dist/shim/registry/showcase-link.js +0 -61
- package/dist/shim/registry/walkthrough.js +0 -752
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.
|
|
5
|
+
`0.7.0-p0` (npm dist-tag `next`). Node ≥ 22.12. See it run: https://egpt-frqtl.descix.net
|
|
6
6
|
|
|
7
7
|
## Install
|
|
8
8
|
npm install @descix/frqtl-node
|
|
@@ -56,8 +56,8 @@ try {
|
|
|
56
56
|
```
|
|
57
57
|
- REGENERATE-grade or nothing: hosting re-runs the scene, so the project is required; an ad-hoc or
|
|
58
58
|
raster-only scene is refused by name. The page and this process compute the same project identity.
|
|
59
|
-
- The picture is SOURCE + declared renderState. A
|
|
60
|
-
`effectiveRenderState(
|
|
59
|
+
- The picture is SOURCE + declared renderState. A scene's look lives on its row of a loaded roster: pass
|
|
60
|
+
`effectiveRenderState(row, mode)` (`./registry`, on the bag `loadRoster(href)` returns).
|
|
61
61
|
- The browser is a real, pinned dependency reached only by `./eyes`; bring your own via `browserType`.
|
|
62
62
|
- Every still's `build.gl` records the raster path the browser actually used.
|
|
63
63
|
|
package/README.md
CHANGED
|
@@ -4,7 +4,8 @@ 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.
|
|
7
|
+
`0.7.0-p0` (npm dist-tag `next`). Node ≥ 22.12. See it run: https://egpt-frqtl.descix.net (the showcase scenes in
|
|
8
|
+
STUDIO and the GYM).
|
|
8
9
|
|
|
9
10
|
## Install
|
|
10
11
|
|
|
@@ -32,10 +33,10 @@ const tick = u.doTick(); // TickData: fr
|
|
|
32
33
|
| `./eyes` | `openHostedEyes` — a `composite` still through the REAL renderer, in a managed headless browser (pulls the pinned `playwright`) |
|
|
33
34
|
| `./parts`, `./parts/*` | the parts barrel; one part = one file |
|
|
34
35
|
| `./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`, `rowFaults`, `recordFolderFaults`, `applyRows` (stands alone: no other import is needed) |
|
|
35
|
-
| `./registry` | the
|
|
36
|
+
| `./registry` | the roster contract and its readers, as in `@descix/frqtl-web`: a host's roster (JSON) names its scenes and the package ships no scene rows. `loadRoster(href)` (a `file:` URL in node) → the frozen bag every reader takes first (`normalizeRoster`, `ROSTER_KEYS`); scene rows (`walkthroughById`, `walkthroughModes`, `effectiveRenderState`, `walkthroughIs3D`, `firstContactOf`, `sceneGroups`, `sceneUrlOf`); showcase cards (`exhibitFor`, `showcaseCard`, `showcaseIntro`, `showcaseHref(roster, card)`, `showcaseUrl(roster, card)`); `projectOf(roster, id, { mode })`, `emptyProjectOf({ router })`; `STUDIO_LANDING_ATTR`, `STUDIO_LANDING_OUTCOMES` |
|
|
36
37
|
| `./kinds` | `registerKind`, `kindNamed`, `kindOf`, `registeredKinds` |
|
|
37
38
|
| `./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`, `siteBuildStampOf`, `STATIC_APP_PAGE`, `HOST_PROVIDED_ATTR`, `SITE_PLACEMENTS`, `SITE_ENTRY_PAGES`, `isSiteEntry`, `siteGraphFaults` — the static site's shape (graph directory, build-stamp attribute, build id pattern and its reader, IDE entry page, the attribute declaring a file host-provided, the graph directory of each placed package, the entry pages) and the rule that a served graph is the placed releases' bytes, for a reader of a served site (both packages) |
|
|
39
|
+
| `./site-graph` | `SITE_GRAPH_DIR`, `SITE_BUILD_ATTR`, `SITE_BUILD_ID_RE`, `siteBuildStampOf`, `STATIC_APP_PAGE`, `SITE_STUDIO_DIR`, `HOST_PROVIDED_ATTR`, `SITE_PLACEMENTS`, `SITE_ENTRY_PAGES`, `isSiteEntry`, `siteGraphFaults` — the static site's shape (graph directory, build-stamp attribute, build id pattern and its reader, IDE entry page, the attribute declaring a file host-provided, the graph directory of each placed package, the entry pages) and the rule that a served graph is the placed releases' bytes, for a reader of a served site (both packages) |
|
|
39
40
|
| `./register` | installs the resolve hook for a sketch's `@descix/frqtl-web/...` imports (`node --import @descix/frqtl-node/register`) |
|
|
40
41
|
| `./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
42
|
| `./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.
|
|
3
|
+
"version": "0.7.0-p0",
|
|
4
4
|
"files": {
|
|
5
5
|
"eyes/index.js": "b3563421030bb7fdd277eb697959fbe9107463cbb5478160edc7d887daa67be3",
|
|
6
6
|
"fat/pkg-node/egpt_wasm.js": "5e6af1f6725c93c0e9ad7386f1785cbe639ce596a4caa19ca85729c1f2bea04d",
|
|
@@ -37,6 +37,7 @@
|
|
|
37
37
|
"frqtl/compat/renderer/unprojectStill.js": "43c4286c124eaa238d963fe3ae5551a1c87727809d5245a129f368a117863c45",
|
|
38
38
|
"frqtl/compat/vendor.js": "2393ada71cdbe750d409174e1ba9b098148796efdff746b315d706a0b32e58e8",
|
|
39
39
|
"frqtl/experiments/_shared/boot-failure.js": "1a92e85b06acdefede5613f2fac7cd4e61d2aba590820f1bfa92f6829fcbbdd4",
|
|
40
|
+
"frqtl/experiments/_shared/empty-sketch.js": "129ffd99353cc5a5d3318bac5684e975510989c360131327ada286c7fd02824a",
|
|
40
41
|
"frqtl/node-entry.js": "a401039b4fcf53ac620edbd80985aa4448122f2e3caaeaf4d5595f5e9d512b60",
|
|
41
42
|
"frqtl/objects/FrqtlApp.js": "bc4b4b2206588cd91fc8454b058a11d4b8b797fa3064e32af12be81d2d927d6e",
|
|
42
43
|
"frqtl/objects/ObjectFactory.js": "a8f050ce61b7ab9c9b4f81e9eeaebf05c3cc0b532c741ce93d6e952489772b11",
|
|
@@ -83,27 +84,27 @@
|
|
|
83
84
|
"frqtl/objects/setup/_collisionMatrixLanes.js": "e5184a9e690e677bc941cce113f2d3d5c51de41d8322515fc707f5414c7b81be",
|
|
84
85
|
"frqtl/objects/setup/_setupOptions.js": "bc9bff3c647418db452976b54e9f91474c59abf5acbde1d62747a11a9501cca0",
|
|
85
86
|
"frqtl/objects/setup/_worldInit.js": "636eb9610f0d446d7c8d660c322d31cdaaae2a35546549f92572751414ad604b",
|
|
86
|
-
"frqtl/objects/setup/setupBlackbodySubstrate.js": "
|
|
87
|
+
"frqtl/objects/setup/setupBlackbodySubstrate.js": "1e0de4873812454b09b4666dbaa1e0987310d4d77d1516bb24d6a2b6751e3036",
|
|
87
88
|
"frqtl/objects/setup/setupCircuitBasic.js": "8204f7d42f8dd888e6a4e1175b16a6e67b69fb2d943af6c2b40c900b905dd453",
|
|
88
89
|
"frqtl/objects/setup/setupCollisionMatrix.js": "5df3b6c93a5b1fc5f8c0a443c1d3e0003ef170bb39b6101e60b4f3017ec26f60",
|
|
89
90
|
"frqtl/objects/setup/setupConeEmitter3D.js": "284d5353857817e5821d6c3897ba15b22f32388971ae149094e1353f15f0a4d6",
|
|
90
91
|
"frqtl/objects/setup/setupDoubleSlit.js": "c802de116d1f0a603bbb4a7bbfbbe11aaefbeb036e1df513320bf4a9adb3519f",
|
|
91
92
|
"frqtl/objects/setup/setupDoubleSlit_Laser.js": "373f0b8a5087072063457b5cf9f67f43afc26a71a89d667520fde5a81cc075d7",
|
|
92
93
|
"frqtl/objects/setup/setupEmpty.js": "d0fc6e8661514965fa68720a714a2fe44bfbf414f92549e4c86c8bf60a4cc1d1",
|
|
93
|
-
"frqtl/objects/setup/setupFxSmoke.js": "
|
|
94
|
+
"frqtl/objects/setup/setupFxSmoke.js": "f0267a0c5e0ee0329fd312acc8287d8a699a4009ca2207030eaba9ce9988361f",
|
|
94
95
|
"frqtl/objects/setup/setupG1Race.js": "431df40700a8633fae54eea98f160e7852deb3765c3b374c35c0e1af24611d31",
|
|
95
96
|
"frqtl/objects/setup/setupG2Sweep.js": "2d44e194a6def2f5cb3eb32db4d69b7f709894f345b77d2305047f37a5d14773",
|
|
96
|
-
"frqtl/objects/setup/setupG3Collide.js": "
|
|
97
|
+
"frqtl/objects/setup/setupG3Collide.js": "329ca85b556ed5d2dacb6ff28808ac357078aef180c247ebb00da17753bcc6f5",
|
|
97
98
|
"frqtl/objects/setup/setupLightSourceLab.js": "4b31ecf0d97244058883876f2577e601846d72ee244fdb210fdfcb660b0d0b53",
|
|
98
99
|
"frqtl/objects/setup/setupOscillator.js": "0b706b20d98088f47c351b0b84280cf5e4468504bb07517360f3999a0cf0fbfb",
|
|
99
100
|
"frqtl/objects/setup/setupParticleWalk.js": "38e1a939c180d1921c9b338083017505a3326936531cfae62c603b3b86c3b033",
|
|
100
101
|
"frqtl/objects/setup/setupParticleWalk3D.js": "df0a24aaf3d9acb474faa9f7b7a4c83446e63935d2e7e0f28185fd197097a15e",
|
|
101
|
-
"frqtl/objects/setup/setupSphereEmitter3D.js": "
|
|
102
|
+
"frqtl/objects/setup/setupSphereEmitter3D.js": "bcbadd1ceaadacb3e0b0d1c3c7dcfa60fed3e2b8a0c96367e7863bb0b77a489e",
|
|
102
103
|
"frqtl/objects/setup/setupTraceCircuit.js": "cc551cdfa1879289574dd93b97669387371c488b27ec6b53df2ff75ba83525f0",
|
|
103
104
|
"frqtl/objects/setup/setupTunnelLab.js": "6125711bde04577372ac9dd95deb521fc58ad3d97a73699df2bed5636804d25b",
|
|
104
105
|
"frqtl/objects/setup/setupTunnelPointExit.js": "d68c25e14b3876a04f7aca8324b647cce2ac6f9265d38b88cabba99f2d02c25d",
|
|
105
106
|
"frqtl/objects/setup/setupWaveInterference.js": "b74e1406580a0bd2749686f87f9eec929e3e33c2fe6a7648cdaa2a26449e4fc1",
|
|
106
|
-
"frqtl/objects/v1-replacements.js": "
|
|
107
|
+
"frqtl/objects/v1-replacements.js": "1bb5f65583320d9ed7acf45398b042d328d8a7fce2f3e5e1cb6bec1e1b551f10",
|
|
107
108
|
"frqtl/package-core.js": "4e645a91edf27f9631dd97aeafc72b11c06a7fbfc0f435d194f4635da872f6d7",
|
|
108
109
|
"frqtl/parts/CameraControls.js": "c31a42296256703c5d06098b1dfb548d2ad5b39de0485fb9cff71ea777a5cc7f",
|
|
109
110
|
"frqtl/parts/CameraPath.js": "bf5d620b2789c76b5a79c092ae0a3dc802fa6ef28a05df2ed1935481d4bba636",
|
|
@@ -118,72 +119,43 @@
|
|
|
118
119
|
"frqtl/parts/LightColor.js": "8637e5a09bbad3a4fdd2034ccb44dfc1fda743e29b12b4c685a64b9e1df28daa",
|
|
119
120
|
"frqtl/parts/LiveChart.js": "5d31947db9909e7a85dcbd99560e49b3f24ad60aea13f24b736a04d45998f060",
|
|
120
121
|
"frqtl/parts/LogicGate.js": "05716711db1794ce9e29027ea16af083e5a1cc8b0657dce853cb6d2f6ee1fc02",
|
|
121
|
-
"frqtl/parts/OvenBox.js": "
|
|
122
|
+
"frqtl/parts/OvenBox.js": "7f6a5fc98294626d4f30fe914740b7e076eb27b0234f37926a36b61eb54a9b54",
|
|
122
123
|
"frqtl/parts/PointSource.js": "57b3b8353cba8c5ebfff6653e39948c9f0ee240449b4af08247687d3d9d9f092",
|
|
123
124
|
"frqtl/parts/Rectangle.js": "8be4cae13135c3cb185d025dfd10d3a03b21d5627bfa92363c2faa021f751571",
|
|
124
125
|
"frqtl/parts/SlitLightSource.js": "89a17aaade03e2e961af4181e6c3fd479d31c2c3298c46abc477a13f26d7a07a",
|
|
125
126
|
"frqtl/parts/SlitScreen.js": "bdcaa761d0aa68c415a06ab2c523a8d4553a4c48cee00fe33d5df994adcf599a",
|
|
126
|
-
"frqtl/parts/SphereEmitter.js": "
|
|
127
|
+
"frqtl/parts/SphereEmitter.js": "fbe0498772cf175b9bd0f804e0cdee92f613dcdb5f645ac4f580e3f447c33bd9",
|
|
127
128
|
"frqtl/parts/Trace.js": "f9d91bb9435bc5fabfd7bfdbfbf3f3ae34e2338090251d9e9d6c11abc2ed25fb",
|
|
128
129
|
"frqtl/parts/Tunnel.js": "7a7c3e52caa5f018178c596d735e6062c4cac1545d014216d3027ba9f457d07d",
|
|
129
130
|
"frqtl/parts/Wall.js": "7af7a41f7c8348deee1237a20e37e9c0e69cd3669ab315efaa8eeac03fbbccb8",
|
|
130
131
|
"frqtl/parts/index.js": "70b8e227e09663889f4c7942d385f843d977579765723f829880fd6e9868ac53",
|
|
131
|
-
"frqtl/scenes/absorbing-wall-3d.js": "722bb433142833f03150052b95039686aba0d9db510a5ff13fad95b5f17e0cf8",
|
|
132
|
-
"frqtl/scenes/absorbing-wall.js": "0a47ca64e56481841339cd5882cf0e54ec7c14d87a4306d016ead1ff26591197",
|
|
133
|
-
"frqtl/scenes/atomic-model.js": "1b484ba37d90af9c06d9bf6a114b8867c914d12cc0a0dbeec27dd96230829fac",
|
|
134
|
-
"frqtl/scenes/big-bang.js": "e0807d81f4bcc6626080f81d472c6ead9c8d8f7d97bd67c6da76a476868b25f4",
|
|
135
|
-
"frqtl/scenes/blackbody.js": "bdd6ee3c628f0cf1161eeb855a4a582902ab56174da937bf0d5180d930ef8278",
|
|
136
|
-
"frqtl/scenes/circuit-sat.js": "db69468352e955b4ff9c36e8d3cf03cc3e88d368b6d3cc485d664bb5cb085d57",
|
|
137
|
-
"frqtl/scenes/collision-matrix-3d.js": "8a0c1189d5e2f23092b216515608319643bc010ff837aadffdf84b2078c96793",
|
|
138
|
-
"frqtl/scenes/counting-wall-3d.js": "1d08e60d58faeed4315400a2d0fbc10460d7869babc72a8dd7f906b5dff6ba54",
|
|
139
|
-
"frqtl/scenes/counting-wall.js": "35b617a20c154f89c63d4a60a205f5d67ba8bb3342730e269528f884a522f131",
|
|
140
|
-
"frqtl/scenes/double-slit.js": "d37aff36667783fe5991b8219439803facb730bd0abe9219483f2ef42056e988",
|
|
141
|
-
"frqtl/scenes/dse-one-emitter.js": "619892663838e0f018b9ade83c9994fb0709b9ed9904c92e41470a7b7fdd396f",
|
|
142
|
-
"frqtl/scenes/dse-one-slit.js": "7bf299e3cc64dd3d1f8df805eec63d98d36b8592d55e3ef478d46c38bf674812",
|
|
143
|
-
"frqtl/scenes/dse-photoelectric.js": "e0402c4508a4d97d3d9461f889b10a49da82ef5f232d81455c5e482db8b0bda6",
|
|
144
|
-
"frqtl/scenes/dse-tunnel-rebuild.js": "c2721b4460dbe2f38e7e3bcff6f8498fd798c3404b807931b288ae2ccd43eec5",
|
|
145
|
-
"frqtl/scenes/dse-two-emitters.js": "74cf1d4b226b0ce4e337697a0327de9b95190159b2554f53e629d89525321877",
|
|
146
|
-
"frqtl/scenes/dse-two-slits.js": "f303a848d9c463a5a9443c380b257795b19127b122bdd2fcb28855841b219939",
|
|
147
|
-
"frqtl/scenes/empty.js": "f3c2161f7bbc1be2d7fba0f117ac16b9e60966d9448877ead4037e3cb4fee678",
|
|
148
|
-
"frqtl/scenes/laser-buildup.js": "f4b29b2eeeca730642f5adf2f499f6594b73f6e51ba6aa9a237f4ee643c5cf23",
|
|
149
|
-
"frqtl/scenes/mirror-3d.js": "79ac794dfbc608037936908a9fe58ca34be93be6263d5940bb38129d55bb7943",
|
|
150
|
-
"frqtl/scenes/mirror-route.js": "1407dd7a39c0efcd5ea0f028d67299c1ca4153c1c0cab2bb36d10416f1129931",
|
|
151
|
-
"frqtl/scenes/mirror.js": "c7bcd440e9a78e333fd81d906b3788a62342910f46cf98de860098fcc1e0ba91",
|
|
152
|
-
"frqtl/scenes/omni-3d.js": "d420a7aae9fdfd394b9288ce1f0256416e1b07f70bc570a928a4592c32a47c27",
|
|
153
|
-
"frqtl/scenes/omni-source.js": "4f9aaa0e0ccbf4d18908d1628688dbeae376b535318f0cf969d61d8ea8f90b83",
|
|
154
|
-
"frqtl/scenes/self-interference.js": "5ffa272d806a0af2b136f6ce6258b2d71f3a662de005a8941381a317120a47e4",
|
|
155
|
-
"frqtl/scenes/smoking-gun.js": "d130fdcb49f8c8ea201245195ab4a84108ef59218908bd373f5f69a5b73dc2a4",
|
|
156
|
-
"frqtl/scenes/straight-walk.js": "bb4f5a9fc05dacfad8531843ca02c6dc2c6217f940529d47d0f5aacfcb03a125",
|
|
157
|
-
"frqtl/scenes/sun.js": "fa06cac429af5a2ad4fe846969a7bf763f2a76d9d9b169328cd1f45bad6bda8f",
|
|
158
|
-
"frqtl/scenes/two-source.js": "1444a0e503f4a5e349d4364e31e698bc67d723a4b2864f262603e75ba5f9f088",
|
|
159
|
-
"frqtl/scenes/wave.js": "cabbece84daceca9199bbea22be610281bdf3137c8c5724bc601758e711f111f",
|
|
160
132
|
"shim/bundle/index.js": "edc501a039ce47102657604df71fbc17ba3e4760ca087055351231c7469f5c50",
|
|
161
133
|
"shim/bundle/indexHtml.js": "2c4fbc502bb33fce93596cee19e143a58bb63c18d0b18ea597f81610e3a9a027",
|
|
162
134
|
"shim/bundle/zip.js": "00f7b5fb5f36ff40a59d86758c503d9d7fb43949c1b5a4f2e7367c43d92786f9",
|
|
163
135
|
"shim/bus.js": "dac2eeccd8774268c51014be4c46c00b9985fdf49ebb44355aa370e949c8c5bc",
|
|
164
136
|
"shim/controls/index.js": "206f2f9cdb19e122e650517e09ef1e858f962b4ebe555174aee3bea4ae938dff",
|
|
165
137
|
"shim/controls/registry.js": "3df843d774968d18e012624f2aba2fb09b08ede9e21b6c1f6687d4f3e9b46d3e",
|
|
166
|
-
"shim/engine/artifact-shell.js": "f23c327500f8174b12d464868f6ec9c1701e7a9a5faa1c43a2ddafc3191dc38c",
|
|
167
138
|
"shim/engine/boot-phases.js": "c6e12e12824bcf6f1a289f46e41c898a5416c80c131594525145aae9a3eefbfa",
|
|
168
139
|
"shim/engine/engine-stack-boot.js": "0abf57dcff2ca2bb025c787a17875d49d54d9218ac08c78cb9c678dbb6118d08",
|
|
169
|
-
"shim/engine/router.js": "
|
|
170
|
-
"shim/engine/site-
|
|
140
|
+
"shim/engine/router.js": "ab57a63384b936df046a84464372f974b8a1799320681a2f0a5e39414f80a19f",
|
|
141
|
+
"shim/engine/site-assemble.mjs": "37c9915c34b102daa8fe6389f8d66a1e3379e074e87d2ad79b0cff7a81a2d4b6",
|
|
142
|
+
"shim/engine/site-graph.js": "4d5e5f9ecc2cefcf30eab25203178c0bb13230e9ce7f34bb3b36178f6b79dcb9",
|
|
171
143
|
"shim/experiment-frame/index.js": "5a0219aaa225d8f808c405b08623ce85ada37d83fb4f55f983db3303e431e47f",
|
|
172
144
|
"shim/expr/ast-schema.js": "4f1133b887639bbd86fab976292323bf4a955cdc873ff7ca8e8a8eb3b416923f",
|
|
173
145
|
"shim/field-descriptor/index.js": "050091a9cab0bd37b32b5d8a52fc9bca3b42a089c188d7e49a11cf88b5c069f7",
|
|
174
146
|
"shim/frame-data/index.js": "df6957b0b4a8e0ee0035bc970647b90089b421ae7f05911cc047d48457164be6",
|
|
175
|
-
"shim/host/device.js": "
|
|
147
|
+
"shim/host/device.js": "281e7e7ec4d8164a5a9f6d8de64be7ca0781a262d23efa0b43b6cf1fdbfd797e",
|
|
176
148
|
"shim/host/host-view.js": "feec2f5fdc318e75cd01768c24891f85d2694a269696fcfffd9567d31983cf43",
|
|
177
149
|
"shim/host/index.js": "fade4b171218965570aa2e67e841920ebb3d972ff15e1cfa0394fd3fa123d82c",
|
|
178
|
-
"shim/index.js": "
|
|
150
|
+
"shim/index.js": "dd3708d4935e597d9ca46a23077064bd1f460bb1e86315372c9d147bdfb3f0d1",
|
|
179
151
|
"shim/notebook/canvas-guard.js": "b19d3a86df3835bd617c7130cde997b6f8a8a0c140f95338b733115d5947ed7b",
|
|
180
|
-
"shim/notebook/catalog.js": "
|
|
181
|
-
"shim/notebook/format.js": "
|
|
152
|
+
"shim/notebook/catalog.js": "a257d67de2cac13429b2f676bbd43028e7aca5ee258918f005dfc85f2b3cef1f",
|
|
153
|
+
"shim/notebook/format.js": "272710d069e2d9fc0178124cddf5d3667a2dc14fbfc21ce254bace1ebf5dfb4f",
|
|
182
154
|
"shim/notebook/frqtl-setups-importmap.js": "df86defa90cb85675564e7bb269451684b5cc7679f2c6b1884c07c8272e8ff1c",
|
|
183
155
|
"shim/notebook/kernel.js": "95b8efe960927d8cda0896eea8995f5df5972a471e0217916c32881913bddfcd",
|
|
184
|
-
"shim/notebook/knob.js": "
|
|
156
|
+
"shim/notebook/knob.js": "b67696a94a3f2bec3391e46be895ad80525de1da62bdd4ed3229dcdab0e9e063",
|
|
185
157
|
"shim/notebook/module-resolver.js": "0bcf6ca4954e198dd77ce61b502cebed6d2c118926fd0d2dd0816991b8334b7a",
|
|
186
|
-
"shim/notebook/notebook-knobs.js": "
|
|
158
|
+
"shim/notebook/notebook-knobs.js": "d684bc192deaa56b820b0c1f27029a276becdf689c9c3cea7ab809f89a515d68",
|
|
187
159
|
"shim/notebook/produced-bindings.js": "3d46038ec541a9ff896abae4f62d25780633cdc952e4c9d0d90d917298471090",
|
|
188
160
|
"shim/notebook/realm-registry.js": "ffee52e7c93447c8b82bfc0784b51346686b4373766da298f50a759d3443ab6a",
|
|
189
161
|
"shim/notebook/realm-transport.js": "5173676a94211f85122e0581a16abba925e9c4b5900b5891911bfaec5ea02daf",
|
|
@@ -208,21 +180,19 @@
|
|
|
208
180
|
"shim/project/read-text.js": "b89bd70e3a271e1f42c8ce9427a20cdd9a4c4c9c31b64c49ff1f56b095620136",
|
|
209
181
|
"shim/project/record-format.js": "87d5cc2eae8ff600db1db58a0e0047819f7c9839ff702acdedc366c7647eb0ef",
|
|
210
182
|
"shim/project/register-node.mjs": "9b408da7dc1b11d16237cd62caca281c823ea80173d386ad35e41ea17c34857f",
|
|
211
|
-
"shim/project/specifiers.js": "
|
|
212
|
-
"shim/registry/copy-gate.js": "
|
|
213
|
-
"shim/registry/
|
|
214
|
-
"shim/registry/
|
|
215
|
-
"shim/registry/
|
|
216
|
-
"shim/registry/scene-source.js": "
|
|
217
|
-
"shim/registry/
|
|
218
|
-
"shim/registry/studio-landing.js": "bd81ad9333332de4a29b3121f963edd354450c75c97f4f43170a98c2dcceb7f3",
|
|
219
|
-
"shim/registry/walkthrough.js": "439e03fc6c85e5982a98049118dc89f33c498778c1f3349bbbe8f60d64761071",
|
|
183
|
+
"shim/project/specifiers.js": "2d2518ffae6e5490556b279791ca3d0a567352142e1f6a18114d74ec7f34afc5",
|
|
184
|
+
"shim/registry/copy-gate.js": "5817688261480253dc3d8ebd6612e025cb7c7c1c2cab7cd3135b90c068477ccf",
|
|
185
|
+
"shim/registry/index.js": "3f869443962f07326deb626c8edf7dd5880724925dbbbf0224390db02f7bd95a",
|
|
186
|
+
"shim/registry/roster-link.js": "15bedea3e9c63ff677c6d0b9d442b0252c9355b147dada208a25f0559a74ba6f",
|
|
187
|
+
"shim/registry/roster.js": "df0dcc70d4c2202913a1e3e8788e9f1907ad63e43150c85960ebdfe9864d53db",
|
|
188
|
+
"shim/registry/scene-source.js": "913ef72fc7caeeafc2eb6a28a2dcced752579e63c83b48d51f5bf36f67c55a88",
|
|
189
|
+
"shim/registry/studio-landing.js": "115294cd43b96c8a4892dd74eb58bdee096baf520cc655e589300f9bc1dfb724",
|
|
220
190
|
"shim/render-state/apply.js": "94a9e60cb1722c9a82aa00f2f161fd65e6f438147333856a786e42a4ad5b7064",
|
|
221
191
|
"shim/render-state/index.js": "72a6a3dcd8037893cb8fbd7ef32b126770e7efaec70847f8e4f2915ddb690b43",
|
|
222
192
|
"shim/render/capture-envelope.js": "74db53dbc8c87d1b52452bcb858b1cc5210593062fec0b98609cd59cab63777a",
|
|
223
193
|
"shim/render/heat-colormap.js": "0eadc758179024734c45eaeffd8f5b44e7c4102b7042767a4a5b66541b3bbd7c",
|
|
224
194
|
"shim/render/render-stages.js": "baf674c205df7638af53e51ac77152a448fe6bf6d4ea51d58ac565556cd38da7",
|
|
225
|
-
"shim/render/sun-look.js": "
|
|
195
|
+
"shim/render/sun-look.js": "f9cd57b6850a9a8f9785f2abd45c14878298876f5659dd0da31292158f70c256",
|
|
226
196
|
"shim/rpc/index.js": "56af3afeed22e8d718cd2f7a8ad70db8745f54dbc139af9d71f1d73e2ca37698",
|
|
227
197
|
"shim/runtime/index.js": "92bb4d8b5f203f949e441781b864efe5c6748df14a3a8f306e4c0bc11c7f6d35",
|
|
228
198
|
"shim/storage/boot.js": "689504e15dc075e32d08abf61c75a45b1d565c09f086b42400dae40d8186c411",
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/* Copyright 2023-2026 by Essam Abadir */
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* The Empty Universe — STUDIO's and the GYM's blank world, package content (not a showcase scene).
|
|
5
|
+
*
|
|
6
|
+
* A sketch like every other: it states its world in its first (and only) statement and constructs
|
|
7
|
+
* nothing; the palette authors into it. Read as a project by
|
|
8
|
+
* lib/shim/registry/scene-source.js::emptyProjectOf, through the router (a lib-identity path).
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
export const parts = {};
|
|
12
|
+
|
|
13
|
+
export default function buildExperiment(exp) {
|
|
14
|
+
// THE WORLD: a 600x400 2D canvas + universe on the dim-2 fundamental, λ multiplier 8.
|
|
15
|
+
exp.createCanvas(600, 400, { dimension: 2, wavelengthScale: 8 });
|
|
16
|
+
exp.declare(parts);
|
|
17
|
+
}
|
|
@@ -4,14 +4,14 @@
|
|
|
4
4
|
* setupBlackbodySubstrate — Blackbody experiment reconstructed under the
|
|
5
5
|
* as-intended control loop.
|
|
6
6
|
*
|
|
7
|
-
* ## One-line OvenBox difference from
|
|
7
|
+
* ## One-line OvenBox difference from the blackbody showcase scene (config a vs config b)
|
|
8
8
|
*
|
|
9
9
|
* Both configs use the SAME revised OvenBox sugar (walls = NONE + eject op-programs,
|
|
10
10
|
* emitters, slit preserved). Apart from the `temperature` VALUE (the scene's
|
|
11
11
|
* TEMPERATURE = 1500, this factory's default 300), the ONLY OvenBox option that differs
|
|
12
12
|
* is the thermostat count source:
|
|
13
13
|
*
|
|
14
|
-
* config a (
|
|
14
|
+
* config a (the blackbody scene) : OvenBox default → countSource = 'active-quanta'
|
|
15
15
|
* config b (THIS FILE) : ONE extra option → countSource = 'oven-rect'
|
|
16
16
|
*
|
|
17
17
|
* Outside the OvenBox: the scene seats its sink at the canvas edge (30 px); this factory
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
* - **`options.layer4=true`** (default, implies layer3): adds velocity-flip ops
|
|
32
32
|
* (L4 bounce = L3 eject + flip, conformance EP27–EP28).
|
|
33
33
|
* - **`options.layer5=true`** (default): enables `universe.withInterQuantumCollisions=true`
|
|
34
|
-
* — as
|
|
34
|
+
* — as the blackbody showcase scene sets it. ENGINE physics; no new
|
|
35
35
|
* op-programs. Expected JS↔WASM divergence on parent-frame count (deferred §6).
|
|
36
36
|
*
|
|
37
37
|
* Set any flag to `false` only for progressive test isolation (L1/L2/L3 runs). The default (all true) runs the
|
|
@@ -129,7 +129,7 @@ import { CollisionActions } from '../../parts/CollisionActions.js';
|
|
|
129
129
|
var slitWall = options.slitWall !== undefined ? options.slitWall : 'right';
|
|
130
130
|
|
|
131
131
|
// ── L5: parenting / promotion flag ──────────────────────────────
|
|
132
|
-
// L5 is on by default (matching
|
|
132
|
+
// L5 is on by default (matching the blackbody scene). Set layer5:false
|
|
133
133
|
// to run without inter-quantum collisions (L1/L2/L3/L4 only).
|
|
134
134
|
var USE_L5 = options.layer5 !== undefined ? options.layer5 : true;
|
|
135
135
|
|
|
@@ -137,7 +137,7 @@ import { CollisionActions } from '../../parts/CollisionActions.js';
|
|
|
137
137
|
universe.init(fundamental_dim, { wavelengthScale: 1 });
|
|
138
138
|
universe.brownianMotion = true;
|
|
139
139
|
// L5: enable inter-quantum collisions → merge → promotion (compound/parent frames).
|
|
140
|
-
// Matches
|
|
140
|
+
// Matches the blackbody scene. Diverges JS↔WASM on parent count
|
|
141
141
|
// — expected (deferred quadtree/promotion workstream, handoff §6).
|
|
142
142
|
universe.withInterQuantumCollisions = USE_L5 ? true : false;
|
|
143
143
|
|
|
@@ -159,7 +159,7 @@ import { CollisionActions } from '../../parts/CollisionActions.js';
|
|
|
159
159
|
// ── OvenBox (config b — the ONE distinguishing config line) ──────────
|
|
160
160
|
//
|
|
161
161
|
// countSource: 'oven-rect' is the ONLY difference from config a.
|
|
162
|
-
// Config a (
|
|
162
|
+
// Config a (the blackbody scene) passes no countSource → OvenBox defaults
|
|
163
163
|
// to 'active-quanta'. Config b passes countSource: 'oven-rect'.
|
|
164
164
|
//
|
|
165
165
|
// OvenBox handles internally:
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
* ── Layer 2: physics behavior ────────────────────────────────────────────────
|
|
44
44
|
*
|
|
45
45
|
* The smoke billow is EMERGENT PHYSICS, not a sprite trick. It mirrors the
|
|
46
|
-
* Blackbody aggregation mechanic (
|
|
46
|
+
* Blackbody aggregation mechanic (the blackbody showcase scene):
|
|
47
47
|
*
|
|
48
48
|
* universe.withInterQuantumCollisions = true
|
|
49
49
|
* → colliding quanta PARENT into compound frames (merge/promote pipeline)
|
|
@@ -133,7 +133,7 @@ import { CollisionTypes } from '../../parts/CollisionTypes.js';
|
|
|
133
133
|
// ── Universe init ─────────────────────────────────────────────────────
|
|
134
134
|
// fundamental_dim=0 — leaf quanta are 1-px frames.
|
|
135
135
|
// withInterQuantumCollisions = true — inter-quantum collisions drive the
|
|
136
|
-
// merge/promote pipeline (as
|
|
136
|
+
// merge/promote pipeline (as the blackbody showcase scene sets it).
|
|
137
137
|
universe.init(0, {
|
|
138
138
|
wavelengthScale: waveLengthMultiplier,
|
|
139
139
|
brownianMotion: false,
|
|
@@ -108,7 +108,7 @@ import { assertSetupOptions as _assertSetupOptions, requireWorldRect as _require
|
|
|
108
108
|
// ── Live control handle (Blackbody shape) ──────────────────────────────
|
|
109
109
|
// Each setter writes through the property accessors against the stored quantum ids.
|
|
110
110
|
// No page reload — the same shape as the blackbody scene's temperature knob
|
|
111
|
-
// (
|
|
111
|
+
// (the blackbody showcase scene: slider onChange → oven.setTemperature, live).
|
|
112
112
|
var collideControl = {
|
|
113
113
|
/**
|
|
114
114
|
* Update mass_B / mass_A live.
|
|
@@ -472,7 +472,7 @@ import { FrqtlWorldInit } from './_worldInit.js';
|
|
|
472
472
|
* The canonical sketch idiom shares ONE bag across both steps:
|
|
473
473
|
* exp.createCanvas(W, H, setupSphereEmitter3D.worldCfg(SRC)); // WORLD (and its canvas)
|
|
474
474
|
* exp.addObject('SphereEmitter', SRC); // PART
|
|
475
|
-
* (
|
|
475
|
+
* (the mirror-route scene, 2D and 3D). So the bag reaching `worldCfg` legitimately
|
|
476
476
|
* carries the keys the SphereEmitter FACADE owns and strips before forwarding
|
|
477
477
|
* (`emissionCap`/`gateCounter`) — `worldCfg` projects out the four world knobs and
|
|
478
478
|
* ignores the rest BY DESIGN. Gating it on OPTIONS alone would reject the recipe the
|
|
@@ -555,7 +555,7 @@ import { FrqtlWorldInit } from './_worldInit.js';
|
|
|
555
555
|
// `leafDimension` = the dimension THIS emitter births its leaves at (per-emitter
|
|
556
556
|
// — the corrected model: dimension is an ADDABLE scale layer, and
|
|
557
557
|
// an emitter creates leaves AT a chosen dimension via makeLeafFrame's explicit
|
|
558
|
-
// `level` + `addDimension` (the SAME pattern
|
|
558
|
+
// `level` + `addDimension` (the SAME pattern the blackbody scene uses: init at a base
|
|
559
559
|
// fundamental, then addDimension for the higher scale layer). Default =
|
|
560
560
|
// fundamentalDimension → BYTE-IDENTICAL to every pre-existing caller (birthing at
|
|
561
561
|
// level=fundamentalDimension is identical to the old level=null, which defers to the
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* v1-replacements.js — the V1 → V2 port map: every removed V1 kind names its V2 composition, so an
|
|
5
5
|
* unknown-kind throw TELLS the author what to build instead of leaving them to guess. A LEAF (no
|
|
6
6
|
* imports): ObjectFactory reads it for its unknown-kind refusals, SlitLightSource for its own, and
|
|
7
|
-
* the sketch rule (lib/frqtl/
|
|
7
|
+
* the sketch rule (lib/frqtl/test/_sketch-rule.mjs) reads the names from here.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
export const V1_REPLACEMENTS = Object.freeze({
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
*
|
|
36
36
|
* `getTemperatureTickFunction()` returns a tick function that reads
|
|
37
37
|
* `universe.activeQuanta` each tick and directly CRUDs the four emitters.
|
|
38
|
-
* Push this into `universe.experimentTickFunctions` as
|
|
38
|
+
* Push this into `universe.experimentTickFunctions` as the blackbody scene already
|
|
39
39
|
* does — no other wiring needed.
|
|
40
40
|
*
|
|
41
41
|
* ### `countSource: 'oven-rect'` (config b — the "better oven")
|
|
@@ -432,7 +432,7 @@ import { registerKind } from '../objects/kinds.js';
|
|
|
432
432
|
* `max(1, floor((temperature - activeQuanta) / 4))` and activate them.
|
|
433
433
|
*
|
|
434
434
|
* This is the ORIGINAL thermostat behavior — identical to the pre-convergence
|
|
435
|
-
* OvenBox and compatible with
|
|
435
|
+
* OvenBox and compatible with the blackbody scene (which calls this method
|
|
436
436
|
* without arguments).
|
|
437
437
|
*
|
|
438
438
|
* NOT applicable when `countSource: 'oven-rect'` — use `thermostatStep(tickData)`
|
|
@@ -143,7 +143,7 @@ import { CollisionTypes } from './CollisionTypes.js';
|
|
|
143
143
|
* It is exported because a SECOND surface needs it. The canonical sketch idiom shares
|
|
144
144
|
* ONE bag across the world step and the part step —
|
|
145
145
|
* `exp.createCanvas(W, H, setupSphereEmitter3D.worldCfg(SRC)); exp.addObject('SphereEmitter', SRC);`
|
|
146
|
-
* (
|
|
146
|
+
* (the mirror-route scene, 2D and 3D) — so `worldCfg` is handed a SUPERSET of the
|
|
147
147
|
* factory's own vocabulary and must tolerate exactly these keys. The factory cannot
|
|
148
148
|
* require this file (the arrow runs object → setup; a back-require is a cycle), so it
|
|
149
149
|
* declares `SKETCH_OPTIONS` and `setup-factory-option-vocabulary.test.mjs` §4 asserts
|
|
@@ -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.
|
|
155
|
+
var CDN_SDK_VERSION = '0.7.0-p0'; // sdk/frqtl-web/package.json#version (the ONE version owner) — bound by router.test.mjs
|
|
156
156
|
var CDN_MATH_SDK_VERSION = '0.3.3-p2.1'; // sdk/egpt-math-sdk/package.json#version — bound by router.test.mjs; bumped with each npm publish
|
|
157
157
|
|
|
158
158
|
/**
|
|
@@ -251,7 +251,7 @@ var CDN_PROFILE = buildCdnProfile(CDN_BASE);
|
|
|
251
251
|
// under `descix serve`), so every location is known only RELATIVE TO THE DOCUMENT.
|
|
252
252
|
//
|
|
253
253
|
// ENTRIES vs GRAPH. The site's HTML entries (the IDE document, pub/index.html, pub/sdk.html,
|
|
254
|
-
// pub/
|
|
254
|
+
// pub/experiments/{id}/index.html) sit at FIXED URLs — `*.html` is
|
|
255
255
|
// no-store on the platform (app-developer runbook §8.1). Everything those entries LOAD (the
|
|
256
256
|
// sdk payload: JS, WASM, CSS, JSON, notebooks) is the GRAPH and sits under the build-stamped
|
|
257
257
|
// directory STATIC_SDK_DIR/<build>/, so a browser holding a file from an earlier build never
|
|
@@ -526,7 +526,7 @@ var _assertProfileParity = (function () {
|
|
|
526
526
|
* // CDN mode (static hosting — the artifact host shell has no server, no page anchor):
|
|
527
527
|
* const cdnRouter = engineRouter({ mode: 'cdn', engine: 'wasm' });
|
|
528
528
|
* console.log(cdnRouter.resolve('compat/engine.js'));
|
|
529
|
-
* // 'https://cdn.jsdelivr.net/npm/@descix/frqtl-web@0.
|
|
529
|
+
* // 'https://cdn.jsdelivr.net/npm/@descix/frqtl-web@0.7.0-p0/dist/frqtl/compat/engine.js'
|
|
530
530
|
*
|
|
531
531
|
* // CDN mode, self-hosted: a copy of dist/ served from the consumer's own origin:
|
|
532
532
|
* const selfHosted = engineRouter({ mode: 'cdn', engine: 'wasm', base: 'https://example.org/vendor/frqtl-web/dist' });
|
|
@@ -559,17 +559,29 @@ function _staticProfileFor(opts) {
|
|
|
559
559
|
* profile's package root (`__frqtlRoot`) at its lib path — 'shim/…' as itself, everything else under
|
|
560
560
|
* 'frqtl/'. The module graph needs nothing more: a module locates its imports relative to itself.
|
|
561
561
|
*/
|
|
562
|
-
var LIB_IDENTITY_PREFIXES = Object.freeze(['assets/vendor/', 'compat/', 'objects/', 'parts/', 'experiments/_shared/', '
|
|
562
|
+
var LIB_IDENTITY_PREFIXES = Object.freeze(['assets/vendor/', 'compat/', 'objects/', 'parts/', 'experiments/_shared/', 'shim/']);
|
|
563
|
+
|
|
564
|
+
/**
|
|
565
|
+
* Router-relative prefixes no profile resolves any more, each with what replaced it. resolveInProfile refuses a path
|
|
566
|
+
* under one BEFORE any profile key or the dev-core fallback, so every profile throws the same refusal.
|
|
567
|
+
*/
|
|
568
|
+
var RETIRED_PREFIXES = Object.freeze({ 'scenes/': 'a scene is a roster row, not a package path: its URL is sceneUrlOf(roster, row) (lib/shim/registry/roster.js) on the roster a host loads' });
|
|
563
569
|
|
|
564
570
|
/**
|
|
565
571
|
* Map a frqtl-relative path through a profile: a lib-identity path under the package root, else the
|
|
566
572
|
* FIRST matching public prefix (insertion order). Returns null when nothing matches — the caller decides
|
|
567
|
-
* what an unmapped path means.
|
|
573
|
+
* what an unmapped path means. A path under a RETIRED_PREFIXES prefix THROWS naming its replacement.
|
|
568
574
|
* @param {object} profile
|
|
569
575
|
* @param {string} relPath
|
|
570
576
|
* @returns {string|null}
|
|
571
577
|
*/
|
|
572
578
|
export function resolveInProfile(profile, relPath) {
|
|
579
|
+
Object.keys(RETIRED_PREFIXES).forEach(function (prefix) {
|
|
580
|
+
if (relPath.indexOf(prefix) === 0) {
|
|
581
|
+
throw new Error('[engineRouter] "' + relPath + '" is under the retired prefix "' + prefix + '": ' +
|
|
582
|
+
RETIRED_PREFIXES[prefix] + '. (FAIL-LOUD.)');
|
|
583
|
+
}
|
|
584
|
+
});
|
|
573
585
|
for (var j = 0; j < LIB_IDENTITY_PREFIXES.length; j++) {
|
|
574
586
|
if (relPath.indexOf(LIB_IDENTITY_PREFIXES[j]) === 0) {
|
|
575
587
|
return profile.__frqtlRoot + (relPath.indexOf('shim/') === 0 ? relPath : 'frqtl/' + relPath);
|
|
@@ -706,4 +718,4 @@ export function engineRouter(opts) {
|
|
|
706
718
|
|
|
707
719
|
|
|
708
720
|
// Export profiles for the sdk build to consume.
|
|
709
|
-
export { LIB_IDENTITY_PREFIXES, DEV_CORE_PROFILE, DIST_PROFILE, CDN_PROFILE, STATIC_SDK_DIR, STATIC_APP_ASSETS_DIR, STATIC_HOST_VIEW_ENTRY, CDN_SDK_VERSION, CDN_MATH_SDK_VERSION, CDN_BASE, cdnDistBaseFor, CDN_MATH_BASE, buildCdnProfile, buildDistProfile, buildStaticProfile, staticGraphDir, staticSdkBase, staticEntryBase };
|
|
721
|
+
export { LIB_IDENTITY_PREFIXES, RETIRED_PREFIXES, DEV_CORE_PROFILE, DIST_PROFILE, CDN_PROFILE, STATIC_SDK_DIR, STATIC_APP_ASSETS_DIR, STATIC_HOST_VIEW_ENTRY, CDN_SDK_VERSION, CDN_MATH_SDK_VERSION, CDN_BASE, cdnDistBaseFor, CDN_MATH_BASE, buildCdnProfile, buildDistProfile, buildStaticProfile, staticGraphDir, staticSdkBase, staticEntryBase };
|