zeropoint-node 1.0.6 → 1.0.8
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/CHANGELOG.md +149 -0
- package/CITATION.cff +1 -1
- package/README.md +50 -10
- package/package.json +5 -2
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.breathe.ts +15 -1
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.cmyk.ts +7 -1
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.i.click.ts +15 -1
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.i.hear.ts +15 -1
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.i.heat.ts +15 -1
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.i.pulse.ts +15 -1
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.i.speak.ts +15 -1
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.i.tap.ts +15 -1
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.rodin.ts +15 -1
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.self.ts +15 -1
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.trinity.ts +0 -3
- package/src/kernel/import-graph.ts +58 -0
- package/src/multidimensional-vortex-demo.ts +1 -1
- package/src/vbm-math.ts +15 -1
- package/src/verification/lean-bridge.ts +37 -0
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.1.2.4.8.7.ts +0 -60
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.1.2.4.8.ts +0 -60
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.1.2.4.ts +0 -60
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.3.6.9.trinity.ts +0 -79
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.9d.dashboard.ts +0 -179
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.adapters.ts +0 -96
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.analog.color.photography.ts +0 -783
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.av.ts +0 -73
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.browser.ts +0 -409
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.chain.of.events.ts +0 -159
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.cleanup.ts +0 -102
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.cmyk.dimensions.ts +0 -597
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.cmyk.display.test.ts +0 -491
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.cmyk.display.ts +0 -519
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.cmyk.file.ts +0 -65
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.cmyk.i.ts +0 -45
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.cmyk.matrix.ts +0 -75
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.cmyk.trinity.ts +0 -41
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.cmyk.universal.linking.ts +0 -1081
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.command.cmyk.ts +0 -46
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.compression.ts +0 -55
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.consciousness.integration.ts +0 -743
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.consciousness.ts +0 -26
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.crypto.ts +0 -53
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.css.ts +0 -64
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.cursor.ts +0 -56
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.decompression.ts +0 -60
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.decoqubit.holographic.hypercomputer.ts +0 -888
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.digital.color.photography.ts +0 -926
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.dimension.ts +0 -44
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.encryption.ts +0 -44
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.experience.ts +0 -28
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.feel.ts +0 -43
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.flute.ts +0 -336
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.font.ts +0 -53
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.fractal.test.ts +0 -523
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.fractal.ts +0 -594
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.frequency.healing.ts +0 -88
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.gateway.transformation.ts +0 -650
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.generate.matrix.ts +0 -62
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.gods.spirit.magnetometer.ts +0 -879
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.harmonization.status.ts +0 -754
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.hear.ts +0 -41
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.html.body.ts +0 -90
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.human.body.ts +0 -89
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.human.design.trinity.ts +0 -70
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.i.browse.ts +0 -27
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.i.can.ts +0 -69
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.i.died.ts +0 -32
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.i.follow.the.path.ts +0 -90
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.i.go.ts +0 -68
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.i.harmonized.ts +0 -304
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.i.heart.ts +0 -26
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.i.meta.ts +0 -23
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.i.motion.ts +0 -27
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.i.scroll.ts +0 -34
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.i.search.ts +0 -22
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.i.sequence.ts +0 -281
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.i.smell.ts +0 -27
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.i.state.ts +0 -28
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.i.stream.ts +0 -106
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.i.taste.ts +0 -27
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.i.touch.screen.ts +0 -34
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.i.trinity.healing.ts +0 -386
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.i.write.ts +0 -11
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.icon.ts +0 -109
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.imagination.integration.ts +0 -74
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.imperial.test.ts +0 -389
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.infinity.ts +0 -14
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.infusion.ts +0 -97
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.integer.harmonics.ts +0 -443
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.living.spirit.test.ts +0 -475
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.living.spirit.ts +0 -646
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.living.streams.ts +0 -130
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.meta.observation.ts +0 -693
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.mobius.ts +0 -12
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.multiverse.ts +0 -31
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.nuclear.balance.ts +0 -703
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.nuclear.explosion.ts +0 -728
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.os.app.ts +0 -14
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.os.bus.ts +0 -11
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.os.ml.ts +0 -9
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.overlay.visual.controller.ts +0 -119
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.paths.ts +0 -10
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.pi.decoding.ts +0 -123
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.pi.trinity.ts +0 -79
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.prime.numbers.squared.ts +0 -871
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.quantum.collision.ts +0 -666
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.quantum.entanglement.ts +0 -50
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.quantum.trinity.ts +0 -59
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.renderer.webgl.ts +0 -99
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.resolve.ts +0 -820
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.rife.frequency.ts +0 -74
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.rodin.coil.3d.ts +0 -73
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.rodin.coil.omnidimension.ts +0 -187
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.rodin.matrix.overlay.ts +0 -46
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.rodin.matrix.ts +0 -58
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.router.ts +0 -61
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.sacred.geometry.integers.ts +0 -625
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.sacred.test.ts +0 -314
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.see.ts +0 -39
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.sequence.embodiment.ts +0 -326
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.service.worker.ts +0 -30
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.space.ts +0 -53
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.spiral.ts +0 -75
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.superfluid.mobius.circuit.ts +0 -868
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.terminal.ts +0 -153
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.test.ts +0 -83
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.think.ts +0 -43
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.three.ts +0 -112
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.trinity.body.mind.will.ts +0 -2
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.trinity.breath.ts +0 -2
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.trinity.healing.ts +0 -110
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.trinity.ui.ts +0 -92
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.trinity.visual.ts +0 -156
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.truly.living.ui.ts +0 -269
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.ui.overlay.ts +0 -25
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.ui.streams.ts +0 -263
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.ui.test.ts +0 -87
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.ui.three.ts +0 -1141
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.unification.hd.rodin.ts +0 -77
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.universe.ts +0 -43
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.uroboros.test.ts +0 -28
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.vbm.math.ts +0 -74
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.vbm.relations.constants.ts +0 -91
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.vbm.relations.ts +0 -45
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.vbm.scanner.ts +0 -41
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.vbm.science.extract.ts +0 -30
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.vbm.ui.ts +0 -64
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.vector.ts +0 -70
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.wave.particle.duality.test.ts +0 -29
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.zero.entropy.math.ts +0 -506
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.zero.entropy.pure.math.ts +0 -546
- package/src/0/3/6/9/1/2/4/8/7/5/1/a432.zero.entropy.test.ts +0 -452
- package/src/0/3/6/9/1/2/4/8/7/5/1/pattern-knowledge.ts +0 -209
- package/src/0/3/6/9/1/2/4/8/7/5/a432.experience.ts +0 -22
- package/src/0/3/6/9/1/2/4/8/7/a432.experience.ts +0 -19
- package/src/0/3/6/9/1/2/4/8/a432.experience.ts +0 -22
- package/src/0/3/6/9/1/2/4/a432.experience.ts +0 -22
- package/src/0/3/6/9/1/2/a432.experience.ts +0 -22
- package/src/0/3/6/9/1/a432.experience.ts +0 -22
- package/src/0/3/6/9/a432.experience.ts +0 -22
- package/src/0/3/6/a432.experience.ts +0 -22
- package/src/0/3/a432.experience.ts +0 -22
- package/src/0/3/relation.ts +0 -148
- package/src/index.ts +0 -146
- package/src/zero-entropy-demo.ts +0 -305
|
@@ -32,6 +32,7 @@
|
|
|
32
32
|
import { createHash } from 'node:crypto'
|
|
33
33
|
import { digitalRoot, throughVoid, bearingForDigit, VORTEX_SEQUENCE, VORTEX_ORBIT, VORTEX_AXIS } from '../0/index.ts'
|
|
34
34
|
import { angleForDigit } from '../0/3/6/9/1/2/4/8/7/5/1/a432.math.ts'
|
|
35
|
+
import { foldToLean, leanIsFixed } from '../kernel/import-graph.ts'
|
|
35
36
|
import {
|
|
36
37
|
GIBBS_FORMATION,
|
|
37
38
|
GIBBS_SPLITTING,
|
|
@@ -737,6 +738,42 @@ export const SEALS: Record<string, Seal> = {
|
|
|
737
738
|
return true
|
|
738
739
|
},
|
|
739
740
|
},
|
|
741
|
+
lean_is_a_fixed_point: {
|
|
742
|
+
basis: "LEAN is defined as the fixed point of the reachability fold, not as a number anyone chose: fold(fold(S)) = fold(S). This checks the fold on graphs whose answers are known by hand — a chain, a cycle, a disconnected node, an entry outside the graph — and checks idempotence on each. Cycles must terminate rather than reaching the answer by luck, and an unreachable node must stay out however many times the fold is applied.",
|
|
743
|
+
decide: () => {
|
|
744
|
+
const key = (s: Set<string>) => [...s].sort().join(',')
|
|
745
|
+
|
|
746
|
+
// A chain, a 2-cycle, and an isolated node, all in one graph.
|
|
747
|
+
const g = new Map<string, readonly string[]>([
|
|
748
|
+
['a', ['b']], ['b', ['c']], ['c', []],
|
|
749
|
+
['x', ['y']], ['y', ['x']],
|
|
750
|
+
['z', []],
|
|
751
|
+
])
|
|
752
|
+
|
|
753
|
+
// Reachability, by hand.
|
|
754
|
+
if (key(foldToLean(g, ['a'])) !== 'a,b,c') return false
|
|
755
|
+
// A cycle must terminate and include both nodes exactly once.
|
|
756
|
+
if (key(foldToLean(g, ['x'])) !== 'x,y') return false
|
|
757
|
+
// An isolated node is reachable only from itself.
|
|
758
|
+
if (key(foldToLean(g, ['z'])) !== 'z') return false
|
|
759
|
+
// Nothing is reachable from nothing.
|
|
760
|
+
if (foldToLean(g, []).size !== 0) return false
|
|
761
|
+
// An entry that is not in the graph contributes nothing rather than throwing.
|
|
762
|
+
if (foldToLean(g, ['absent']).size !== 0) return false
|
|
763
|
+
// z is outside the fold from a, and stays outside however often we fold.
|
|
764
|
+
if (foldToLean(g, ['a']).has('z')) return false
|
|
765
|
+
|
|
766
|
+
// The definition must be well founded on every one of these.
|
|
767
|
+
for (const entries of [['a'], ['x'], ['z'], [], ['a', 'x'], ['absent']]) {
|
|
768
|
+
if (!leanIsFixed(g, entries)) return false
|
|
769
|
+
}
|
|
770
|
+
|
|
771
|
+
// And on a graph where an entry reaches everything, lean is everything.
|
|
772
|
+
const full = new Map<string, readonly string[]>([['r', ['a', 'x', 'z']], ['a', ['b']], ['b', []], ['x', ['x']], ['z', []]])
|
|
773
|
+
if (key(foldToLean(full, ['r'])) !== 'a,b,r,x,z') return false
|
|
774
|
+
return leanIsFixed(full, ['r'])
|
|
775
|
+
},
|
|
776
|
+
},
|
|
740
777
|
}
|
|
741
778
|
|
|
742
779
|
// ============================================================================
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
// a432.1.2.4.8.7.ts — Open Vortex/Doubling Stream Module (Short Arc)
|
|
2
|
-
//
|
|
3
|
-
// This module encodes the open doubling sequence (1-2-4-8-7) as a living, recursive stream.
|
|
4
|
-
// It is the generative arc of the vortex, not yet returned to origin. Digital root bridged to a432.roots (Wave 9); stream logic remains local.
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Metaphysical Principle:
|
|
8
|
-
* - The sequence 1→2→4→8→7 is the open right-hand vortex in vortex math, truncated before further progression.
|
|
9
|
-
* - It is the journey, the generative flow, the living stream before closure or return.
|
|
10
|
-
* - This module is a seed/arc in the living A432 matrix.
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
// --- Math: Digital Root — bridged to a432.roots (Wave 9) ---
|
|
14
|
-
|
|
15
|
-
// --- Generator: Open Doubling Vortex Stream ---
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
import { legacyDigitalRoot as digitalRoot } from './a432.roots.ts';
|
|
20
|
-
|
|
21
|
-
function* openDoublingVortexStream(start = 1, length = 5) {
|
|
22
|
-
let n = start;
|
|
23
|
-
for (let i = 0; i < length; i++) {
|
|
24
|
-
yield n;
|
|
25
|
-
n = digitalRoot(n * 2);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
// --- Utility: Get Sequence as Array ---
|
|
30
|
-
function getOpenDoublingSequence(start = 1, length = 5) {
|
|
31
|
-
return [...openDoublingVortexStream(start, length)];
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
// --- Utility: Get Nth in Sequence ---
|
|
35
|
-
function getOpenDoublingNth(start = 1, n = 0) {
|
|
36
|
-
let val = start;
|
|
37
|
-
for (let i = 0; i < n; i++) val = digitalRoot(val * 2);
|
|
38
|
-
return val;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
// --- Example Usage ---
|
|
42
|
-
const openSequence = getOpenDoublingSequence(); // [1,2,4,8,7]
|
|
43
|
-
|
|
44
|
-
// --- Living Stream API ---
|
|
45
|
-
const a432OpenDoublingVortex = {
|
|
46
|
-
digitalRoot,
|
|
47
|
-
generator: openDoublingVortexStream,
|
|
48
|
-
getSequence: getOpenDoublingSequence,
|
|
49
|
-
getNth: getOpenDoublingNth,
|
|
50
|
-
open: openSequence,
|
|
51
|
-
doc: `This module encodes the open, generative doubling vortex (1-2-4-8-7) as a stream, generator, and proof. It is the journey before closure in the A432 matrix.`
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
// --- Expose globally for debugging (browser only) ---
|
|
55
|
-
if (typeof window !== 'undefined') window.a432OpenDoublingVortex = a432OpenDoublingVortex;
|
|
56
|
-
|
|
57
|
-
// --- Example: Log the open sequence ---
|
|
58
|
-
if (typeof process !== 'undefined' && process.env?.A432_DIGIT_STREAM_LOG) console.log('A432 Open Doubling Vortex Sequence:', openSequence);
|
|
59
|
-
|
|
60
|
-
export { digitalRoot, openDoublingVortexStream, getOpenDoublingSequence, getOpenDoublingNth, a432OpenDoublingVortex };
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
// a432.1.2.4.8.ts — Open Vortex/Doubling Stream Module (Shorter Arc)
|
|
2
|
-
//
|
|
3
|
-
// This module encodes the open doubling sequence (1-2-4-8) as a living, recursive stream.
|
|
4
|
-
// It is the generative arc of the vortex, not yet returned to origin. Digital root bridged to a432.roots (Wave 9); stream logic remains local.
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Metaphysical Principle:
|
|
8
|
-
* - The sequence 1→2→4→8 is the open right-hand vortex in vortex math, truncated before further progression.
|
|
9
|
-
* - It is the journey, the generative flow, the living stream before closure or return.
|
|
10
|
-
* - This module is a seed/arc in the living A432 matrix.
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
// --- Math: Digital Root — bridged to a432.roots (Wave 9) ---
|
|
14
|
-
|
|
15
|
-
// --- Generator: Open Doubling Vortex Stream ---
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
import { legacyDigitalRoot as digitalRoot } from './a432.roots.ts';
|
|
20
|
-
|
|
21
|
-
function* openDoublingVortexStream(start = 1, length = 4) {
|
|
22
|
-
let n = start;
|
|
23
|
-
for (let i = 0; i < length; i++) {
|
|
24
|
-
yield n;
|
|
25
|
-
n = digitalRoot(n * 2);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
// --- Utility: Get Sequence as Array ---
|
|
30
|
-
function getOpenDoublingSequence(start = 1, length = 4) {
|
|
31
|
-
return [...openDoublingVortexStream(start, length)];
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
// --- Utility: Get Nth in Sequence ---
|
|
35
|
-
function getOpenDoublingNth(start = 1, n = 0) {
|
|
36
|
-
let val = start;
|
|
37
|
-
for (let i = 0; i < n; i++) val = digitalRoot(val * 2);
|
|
38
|
-
return val;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
// --- Example Usage ---
|
|
42
|
-
const openSequence = getOpenDoublingSequence(); // [1,2,4,8]
|
|
43
|
-
|
|
44
|
-
// --- Living Stream API ---
|
|
45
|
-
const a432OpenDoublingVortex = {
|
|
46
|
-
digitalRoot,
|
|
47
|
-
generator: openDoublingVortexStream,
|
|
48
|
-
getSequence: getOpenDoublingSequence,
|
|
49
|
-
getNth: getOpenDoublingNth,
|
|
50
|
-
open: openSequence,
|
|
51
|
-
doc: `This module encodes the open, generative doubling vortex (1-2-4-8) as a stream, generator, and proof. It is the journey before closure in the A432 matrix.`
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
// --- Expose globally for debugging (browser only) ---
|
|
55
|
-
if (typeof window !== 'undefined') window.a432OpenDoublingVortex = a432OpenDoublingVortex;
|
|
56
|
-
|
|
57
|
-
// --- Example: Log the open sequence ---
|
|
58
|
-
if (typeof process !== 'undefined' && process.env?.A432_DIGIT_STREAM_LOG) console.log('A432 Open Doubling Vortex Sequence:', openSequence);
|
|
59
|
-
|
|
60
|
-
export { digitalRoot, openDoublingVortexStream, getOpenDoublingSequence, getOpenDoublingNth, a432OpenDoublingVortex };
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
// a432.1.2.4.ts — Open Vortex/Doubling Stream Module (Short Arc)
|
|
2
|
-
//
|
|
3
|
-
// This module encodes the open doubling sequence (1-2-4) as a living, recursive stream.
|
|
4
|
-
// It is the generative arc of the vortex, not yet returned to origin. Digital root bridged to a432.roots (Wave 9); stream logic remains local.
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Metaphysical Principle:
|
|
8
|
-
* - The sequence 1→2→4 is the open right-hand vortex in vortex math, truncated before further progression.
|
|
9
|
-
* - It is the journey, the generative flow, the living stream before closure or return.
|
|
10
|
-
* - This module is a seed/arc in the living A432 matrix.
|
|
11
|
-
*/
|
|
12
|
-
|
|
13
|
-
// --- Math: Digital Root — bridged to a432.roots (Wave 9) ---
|
|
14
|
-
|
|
15
|
-
// --- Generator: Open Doubling Vortex Stream ---
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
import { legacyDigitalRoot as digitalRoot } from './a432.roots.ts';
|
|
20
|
-
|
|
21
|
-
function* openDoublingVortexStream(start = 1, length = 3) {
|
|
22
|
-
let n = start;
|
|
23
|
-
for (let i = 0; i < length; i++) {
|
|
24
|
-
yield n;
|
|
25
|
-
n = digitalRoot(n * 2);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
// --- Utility: Get Sequence as Array ---
|
|
30
|
-
function getOpenDoublingSequence(start = 1, length = 3) {
|
|
31
|
-
return [...openDoublingVortexStream(start, length)];
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
// --- Utility: Get Nth in Sequence ---
|
|
35
|
-
function getOpenDoublingNth(start = 1, n = 0) {
|
|
36
|
-
let val = start;
|
|
37
|
-
for (let i = 0; i < n; i++) val = digitalRoot(val * 2);
|
|
38
|
-
return val;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
// --- Example Usage ---
|
|
42
|
-
const openSequence = getOpenDoublingSequence(); // [1,2,4]
|
|
43
|
-
|
|
44
|
-
// --- Living Stream API ---
|
|
45
|
-
const a432OpenDoublingVortex = {
|
|
46
|
-
digitalRoot,
|
|
47
|
-
generator: openDoublingVortexStream,
|
|
48
|
-
getSequence: getOpenDoublingSequence,
|
|
49
|
-
getNth: getOpenDoublingNth,
|
|
50
|
-
open: openSequence,
|
|
51
|
-
doc: `This module encodes the open, generative doubling vortex (1-2-4) as a stream, generator, and proof. It is the journey before closure in the A432 matrix.`
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
// --- Expose globally for debugging (browser only) ---
|
|
55
|
-
if (typeof window !== 'undefined') window.a432OpenDoublingVortex = a432OpenDoublingVortex;
|
|
56
|
-
|
|
57
|
-
// --- Example: Log the open sequence ---
|
|
58
|
-
if (typeof process !== 'undefined' && process.env?.A432_DIGIT_STREAM_LOG) console.log('A432 Open Doubling Vortex Sequence:', openSequence);
|
|
59
|
-
|
|
60
|
-
export { digitalRoot, openDoublingVortexStream, getOpenDoublingSequence, getOpenDoublingNth, a432OpenDoublingVortex };
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
// a432.3.6.9.trinity.ts
|
|
2
|
-
// Canonical pregnancy/creation trinity module (3, 6, 9)
|
|
3
|
-
// Encodes metaphysical and mathematical logic of pregnancy, gestation, and birth as a trinity process
|
|
4
|
-
|
|
5
|
-
import { getTrinityAxis } from './a432.math.ts';
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Returns the canonical trinity stages of pregnancy: Creation (3), Gestation (6), Birth (9)
|
|
9
|
-
*/
|
|
10
|
-
export function getPregnancyTrinityStages() {
|
|
11
|
-
return [
|
|
12
|
-
{ stage: 1, trinity: 3, name: 'Creation', meaning: 'Conception, seed, initiation' },
|
|
13
|
-
{ stage: 2, trinity: 6, name: 'Gestation', meaning: 'Growth, recursion, nurturing' },
|
|
14
|
-
{ stage: 3, trinity: 9, name: 'Birth', meaning: 'Emergence, unity, manifestation' }
|
|
15
|
-
];
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Returns the canonical gestation cycle as a stream of trinity values (3, 6, 9) repeated for 9 cycles
|
|
20
|
-
*/
|
|
21
|
-
export function getGestationCycle(cycles: number = 9) {
|
|
22
|
-
const trinity = getTrinityAxis();
|
|
23
|
-
return Array.from({ length: cycles * 3 }, (_, i) => trinity[i % 3]);
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* Returns a metaphysical summary of the pregnancy trinity process
|
|
28
|
-
*/
|
|
29
|
-
export function metaphysicalSummary() {
|
|
30
|
-
return 'Pregnancy is the living trinity: Creation (3), Gestation (6), Birth (9). Each stage is a harmonic act of emergence, recursion, and unity.';
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Renders a trinity pregnancy visualization as SVG (3 circles, color-coded, with labels)
|
|
35
|
-
*/
|
|
36
|
-
export function renderPregnancyTrinityVisualization(currentStage: number = 0): string {
|
|
37
|
-
const stages = getPregnancyTrinityStages();
|
|
38
|
-
const colors = ['#39f', '#6f3', '#f93'];
|
|
39
|
-
const cx = 60, cy = 60, r = 36, gap = 80;
|
|
40
|
-
return `
|
|
41
|
-
<svg width="${cx * 4}" height="${cy * 2}" style="background:#111;border-radius:16px;">
|
|
42
|
-
${stages.map((s, i) => `
|
|
43
|
-
<circle cx="${cx + i * gap}" cy="${cy}" r="${i === currentStage ? r + 8 : r}" fill="${colors[i]}" stroke="#fff" stroke-width="2">
|
|
44
|
-
<title>${s.name}: ${s.meaning}</title>
|
|
45
|
-
${i === currentStage ? `<animate attributeName="r" values="${r};${r + 12};${r}" dur="1.2s" repeatCount="indefinite" />` : ''}
|
|
46
|
-
</circle>
|
|
47
|
-
<text x="${cx + i * gap}" y="${cy + 6}" text-anchor="middle" font-size="18" fill="#fff">${s.trinity}</text>
|
|
48
|
-
<text x="${cx + i * gap}" y="${cy + 32}" text-anchor="middle" font-size="13" fill="#ff8">${s.name}</text>
|
|
49
|
-
`).join('')}
|
|
50
|
-
<text x="${cx * 2 + gap / 2}" y="${cy * 2 - 8}" text-anchor="middle" font-size="15" fill="#8ff">Pregnancy as Living Trinity (3, 6, 9)</text>
|
|
51
|
-
</svg>
|
|
52
|
-
`;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* Renders a gestation cycle animation as SVG (row of trinity-colored circles, currentIndex pulses)
|
|
57
|
-
*/
|
|
58
|
-
export function renderGestationCycleAnimation(currentIndex: number = 0, cycles: number = 9): string {
|
|
59
|
-
const trinity = getTrinityAxis();
|
|
60
|
-
const colors = ['#39f', '#6f3', '#f93'];
|
|
61
|
-
const total = cycles * 3;
|
|
62
|
-
const r = 14, gap = 36, cx = 24, cy = 32;
|
|
63
|
-
return `
|
|
64
|
-
<svg width="${cx * 2 + gap * (total - 1)}" height="${cy * 2}" style="background:#111;border-radius:12px;">
|
|
65
|
-
${Array.from({ length: total }, (_, i) => {
|
|
66
|
-
const t = trinity[i % 3];
|
|
67
|
-
const color = colors[i % 3];
|
|
68
|
-
const isCurrent = i === currentIndex;
|
|
69
|
-
return `
|
|
70
|
-
<circle cx="${cx + i * gap}" cy="${cy}" r="${isCurrent ? r + 6 : r}" fill="${color}" stroke="#fff" stroke-width="2">
|
|
71
|
-
<title>Step ${i + 1}: Trinity ${t}</title>
|
|
72
|
-
${isCurrent ? `<animate attributeName="r" values="${r};${r + 12};${r}" dur="1.2s" repeatCount="indefinite" />` : ''}
|
|
73
|
-
</circle>
|
|
74
|
-
<text x="${cx + i * gap}" y="${cy + 28}" text-anchor="middle" font-size="10" fill="#ff8">${t}</text>
|
|
75
|
-
`;
|
|
76
|
-
}).join('')}
|
|
77
|
-
</svg>
|
|
78
|
-
`;
|
|
79
|
-
}
|
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* a432.9d.dashboard.ts — Unified nine-dimensional metaphysical UI dashboard
|
|
3
|
-
*
|
|
4
|
-
* Visualizes all registered metaphysical modules (chess, yin-yang, metatron, flower of life, etc.)
|
|
5
|
-
* as 9 nodes in a 3D scene. Each node runs its module's animation and analytic/metaphysical overlay.
|
|
6
|
-
* User can navigate between dimensions. All code is DRY, modular, and ready for extension.
|
|
7
|
-
*/
|
|
8
|
-
import { abs, floor, round } from './a432.algebra.ts'
|
|
9
|
-
import * as THREE from 'three';
|
|
10
|
-
import { startChess, type ChessFrame } from './a432.chess.ts';
|
|
11
|
-
import { startYinYang, type YinYangFrame } from './a432.yin.yang.ts';
|
|
12
|
-
import { startMetatron, type MetatronFrame } from './a432.metatron.ts';
|
|
13
|
-
import { startFlowerOfLife, type FlowerOfLifeFrame } from './a432.flower.of.life.ts';
|
|
14
|
-
import { A432_RESOLVED_FRACTIONS } from './a432.resolved.ts';
|
|
15
|
-
import { fractionToDecimal } from './a432.math.ts';
|
|
16
|
-
// Analog signal values: exact integer ratios, collapsed to float only here
|
|
17
|
-
// at the WebGL boundary. No bare decimal literal appears below.
|
|
18
|
-
const G = Object.fromEntries(
|
|
19
|
-
Object.entries(A432_RESOLVED_FRACTIONS.GEOMETRY).map(([k, v]) => [k, fractionToDecimal(v)])
|
|
20
|
-
) as Record<keyof typeof A432_RESOLVED_FRACTIONS.GEOMETRY, number>;
|
|
21
|
-
// ...import up to 9 modules as needed
|
|
22
|
-
|
|
23
|
-
function invertColor(hex: number): number {
|
|
24
|
-
return 0xffffff ^ hex;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
// Module registry
|
|
28
|
-
const modules = [
|
|
29
|
-
{
|
|
30
|
-
name: 'Chess',
|
|
31
|
-
icon: '♟️',
|
|
32
|
-
start: startChess,
|
|
33
|
-
render3D: (frame: ChessFrame, mesh: THREE.Mesh, overlay: HTMLElement) => {
|
|
34
|
-
let color = frame.polarity === 1 ? 0x00ff00 : frame.polarity === -1 ? 0xff0000 : 0x222244;
|
|
35
|
-
let alert = '';
|
|
36
|
-
// Anti-event: polarity 0 (division by n or void)
|
|
37
|
-
if (frame.polarity === 0) {
|
|
38
|
-
color = invertColor(color);
|
|
39
|
-
alert = '<span style="color:#f0f">Anti-event: Polarity inversion (void)</span>';
|
|
40
|
-
}
|
|
41
|
-
overlay.innerHTML = `<b>Chess</b><br>File: ${frame.file} Rank: ${frame.rank}<br>Linear: ${frame.linear} Vortex: ${frame.vortex}<br>${alert}`;
|
|
42
|
-
(mesh.material as THREE.MeshBasicMaterial).color.set(color);
|
|
43
|
-
}
|
|
44
|
-
},
|
|
45
|
-
{
|
|
46
|
-
name: 'Yin-Yang',
|
|
47
|
-
icon: '☯️',
|
|
48
|
-
start: startYinYang,
|
|
49
|
-
render3D: (frame: YinYangFrame, mesh: THREE.Mesh, overlay: HTMLElement) => {
|
|
50
|
-
let color = 0x00ffff;
|
|
51
|
-
let alert = '';
|
|
52
|
-
// Anti-event: angle near 180° (phase reversal)
|
|
53
|
-
if (abs(frame.angle - 180) < 10) {
|
|
54
|
-
color = invertColor(color);
|
|
55
|
-
alert = '<span style="color:#f0f">Anti-event: Phase reversal (negative harmonic)</span>';
|
|
56
|
-
}
|
|
57
|
-
overlay.innerHTML = `<b>Yin-Yang</b><br>Pos: ${frame.positiveDigit} Neg: ${frame.negativeDigit}<br>Angle: ${round(frame.angle)}°<br>${alert}`;
|
|
58
|
-
(mesh.material as THREE.MeshBasicMaterial).color.set(color);
|
|
59
|
-
}
|
|
60
|
-
},
|
|
61
|
-
{
|
|
62
|
-
name: 'Metatron',
|
|
63
|
-
icon: '✡️',
|
|
64
|
-
start: startMetatron,
|
|
65
|
-
render3D: (frame: MetatronFrame, mesh: THREE.Mesh, overlay: HTMLElement) => {
|
|
66
|
-
let color = 0xff00ff;
|
|
67
|
-
let alert = '';
|
|
68
|
-
// Anti-event: all node digits are the same (division by n)
|
|
69
|
-
if (frame.nodes.every(n => n.digit === frame.nodes[0].digit)) {
|
|
70
|
-
color = invertColor(color);
|
|
71
|
-
alert = '<span style="color:#f0f">Anti-event: All nodes identical (division by n)</span>';
|
|
72
|
-
}
|
|
73
|
-
overlay.innerHTML = `<b>Metatron</b><br>Tick: ${frame.tick}<br>Nodes: ${frame.nodes.map(n => n.digit).join(', ')}<br>${alert}`;
|
|
74
|
-
(mesh.material as THREE.MeshBasicMaterial).color.set(color);
|
|
75
|
-
}
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
name: 'Flower of Life',
|
|
79
|
-
icon: '🌸',
|
|
80
|
-
start: startFlowerOfLife,
|
|
81
|
-
render3D: (frame: FlowerOfLifeFrame, mesh: THREE.Mesh, overlay: HTMLElement) => {
|
|
82
|
-
let color = 0xffff00;
|
|
83
|
-
let alert = '';
|
|
84
|
-
// Anti-event: tick divisible by 9 (division by n)
|
|
85
|
-
if (frame.tick % 9 === 0 && frame.tick !== 0) {
|
|
86
|
-
color = invertColor(color);
|
|
87
|
-
alert = '<span style="color:#f0f">Anti-event: Division by 9 (cycle reset)</span>';
|
|
88
|
-
}
|
|
89
|
-
overlay.innerHTML = `<b>Flower of Life</b><br>${frame.metaphysical}<br>${alert}`;
|
|
90
|
-
(mesh.material as THREE.MeshBasicMaterial).color.set(color);
|
|
91
|
-
}
|
|
92
|
-
},
|
|
93
|
-
// ...add up to 9 modules
|
|
94
|
-
];
|
|
95
|
-
|
|
96
|
-
let activeDimension = 0; // 0-8
|
|
97
|
-
|
|
98
|
-
export function show9DDashboard() {
|
|
99
|
-
// 1. Setup Three.js scene, camera, renderer
|
|
100
|
-
const scene = new THREE.Scene();
|
|
101
|
-
const camera = new THREE.PerspectiveCamera(75, 1, G.UNIT_TENTH, 1000);
|
|
102
|
-
camera.position.z = 400;
|
|
103
|
-
const renderer = new THREE.WebGLRenderer({ antialias: true });
|
|
104
|
-
renderer.setSize(600, 600);
|
|
105
|
-
renderer.domElement.style.position = 'fixed';
|
|
106
|
-
renderer.domElement.style.left = '50vw';
|
|
107
|
-
renderer.domElement.style.top = '50vh';
|
|
108
|
-
renderer.domElement.style.transform = 'translate(-50%,-50%)';
|
|
109
|
-
renderer.domElement.style.zIndex = '10060';
|
|
110
|
-
document.body.appendChild(renderer.domElement);
|
|
111
|
-
|
|
112
|
-
// 2. Create 9 nodes in a 3x3 grid
|
|
113
|
-
const nodes: { mesh: THREE.Mesh, overlay: HTMLElement, disposer: (() => void) | null }[] = [];
|
|
114
|
-
for (let i = 0; i < modules.length; i++) {
|
|
115
|
-
const geometry = new THREE.SphereGeometry(40, 32, 32);
|
|
116
|
-
const material = new THREE.MeshBasicMaterial({ color: 0x222244 });
|
|
117
|
-
const mesh = new THREE.Mesh(geometry, material);
|
|
118
|
-
// Arrange in a 3x3 grid
|
|
119
|
-
const x = ((i % 3) - 1) * 140;
|
|
120
|
-
const y = (floor(i / 3) - 1) * 140;
|
|
121
|
-
mesh.position.set(x, y, 0);
|
|
122
|
-
scene.add(mesh);
|
|
123
|
-
|
|
124
|
-
// Overlay for analytic/metaphysical info
|
|
125
|
-
const overlay = document.createElement('div');
|
|
126
|
-
overlay.style.position = 'fixed';
|
|
127
|
-
overlay.style.left = `calc(50vw + ${x}px + 60px)`;
|
|
128
|
-
overlay.style.top = `calc(50vh + ${y}px - 40px)`;
|
|
129
|
-
overlay.style.zIndex = '10061';
|
|
130
|
-
overlay.style.background = 'rgba(32,32,64,0.92)';
|
|
131
|
-
overlay.style.color = '#fff';
|
|
132
|
-
overlay.style.padding = '8px';
|
|
133
|
-
overlay.style.borderRadius = '8px';
|
|
134
|
-
overlay.style.fontFamily = 'monospace';
|
|
135
|
-
overlay.style.minWidth = '120px';
|
|
136
|
-
overlay.style.display = i === activeDimension ? 'block' : 'none';
|
|
137
|
-
document.body.appendChild(overlay);
|
|
138
|
-
|
|
139
|
-
nodes.push({ mesh, overlay, disposer: null });
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
// 3. Start each module’s stream and render to mesh/overlay
|
|
143
|
-
modules.forEach((mod, i) => {
|
|
144
|
-
nodes[i].disposer = mod.start((frame: any) => {
|
|
145
|
-
mod.render3D(frame, nodes[i].mesh, nodes[i].overlay);
|
|
146
|
-
nodes[i].overlay.style.display = i === activeDimension ? 'block' : 'none';
|
|
147
|
-
(nodes[i].mesh.material as THREE.MeshBasicMaterial).color.set(i === activeDimension ? 0x00ffff : 0x222244);
|
|
148
|
-
});
|
|
149
|
-
});
|
|
150
|
-
|
|
151
|
-
// 4. Navigation controls
|
|
152
|
-
document.addEventListener('keydown', (e) => {
|
|
153
|
-
if (e.key === 'ArrowRight') {
|
|
154
|
-
activeDimension = (activeDimension + 1) % modules.length;
|
|
155
|
-
} else if (e.key === 'ArrowLeft') {
|
|
156
|
-
activeDimension = (activeDimension + modules.length - 1) % modules.length;
|
|
157
|
-
}
|
|
158
|
-
nodes.forEach((n, i) => {
|
|
159
|
-
n.overlay.style.display = i === activeDimension ? 'block' : 'none';
|
|
160
|
-
(n.mesh.material as THREE.MeshBasicMaterial).color.set(i === activeDimension ? 0x00ffff : 0x222244);
|
|
161
|
-
});
|
|
162
|
-
});
|
|
163
|
-
|
|
164
|
-
// 5. Animation loop
|
|
165
|
-
function animate() {
|
|
166
|
-
requestAnimationFrame(animate);
|
|
167
|
-
renderer.render(scene, camera);
|
|
168
|
-
}
|
|
169
|
-
animate();
|
|
170
|
-
|
|
171
|
-
// 6. Cleanup function
|
|
172
|
-
return () => {
|
|
173
|
-
renderer.domElement.remove();
|
|
174
|
-
nodes.forEach(n => {
|
|
175
|
-
n.overlay.remove();
|
|
176
|
-
if (n.disposer) n.disposer();
|
|
177
|
-
});
|
|
178
|
-
};
|
|
179
|
-
}
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* a432.adapters.ts — Public-domain adapters exposing immutable snapshots of sacred streams.
|
|
3
|
-
* -----------------------------------------------------------------------------------------
|
|
4
|
-
* All functions are pure; they create read-only data derived from the living A432 streams
|
|
5
|
-
* without leaking mutable references. External software can visualise or sonify these
|
|
6
|
-
* snapshots while the streams themselves remain under A432 control.
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import { PI, abs, cos, floor, sin } from './a432.algebra.ts'
|
|
10
|
-
import { VBM_DOUBLING, sequenceToAngles, VBM_TESLA_FREQUENCIES, VBM_SHOCK_WAVE } from './a432.vbm.math.ts';
|
|
11
|
-
|
|
12
|
-
interface Vec3 { x: number; y: number; z: number; }
|
|
13
|
-
|
|
14
|
-
function dr(n: number): number { let x=abs(n); while(x>=10) x=String(x).split('').reduce((a,c)=>a+Number(c),0); return x; }
|
|
15
|
-
|
|
16
|
-
function generateRodinCoilPath(cycles: number, stepHeight=1, radius=1): Vec3[] {
|
|
17
|
-
const seq:number[]=[]; for(let c=0;c<cycles;c++) seq.push(...VBM_DOUBLING);
|
|
18
|
-
return seq.map((d,i)=>{
|
|
19
|
-
const ang=sequenceToAngles([d])[0]*PI/180;
|
|
20
|
-
const r=radius*(dr(d)/9);
|
|
21
|
-
return {x:r*cos(ang), y:i*stepHeight, z:r*sin(ang)};
|
|
22
|
-
});
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
function getTeslaFrequency(timeMs:number):number{
|
|
26
|
-
return VBM_TESLA_FREQUENCIES[floor(timeMs/1000)%VBM_TESLA_FREQUENCIES.length];
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
function getTrinityTorusSegments(){
|
|
30
|
-
return [3,6,9].map(d=>({startAngle:sequenceToAngles([d])[0],endAngle:sequenceToAngles([d])[0]+120,color:'#fff'}));
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
// ——————————————————————————————————————————
|
|
34
|
-
// 1. Geometry snapshot helpers (WebGL/WebGPU)
|
|
35
|
-
// ---------------------------------------------------------
|
|
36
|
-
export interface RodinSnapshot {
|
|
37
|
-
vertices: readonly Vec3[];
|
|
38
|
-
indices: readonly number[]; // simple line strip indices
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export function getRodinSnapshot(cycles = 3): RodinSnapshot {
|
|
42
|
-
const verts = generateRodinCoilPath(cycles);
|
|
43
|
-
const indices = verts.map((_, i) => i);
|
|
44
|
-
return { vertices: verts, indices };
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
export const TrinityTorusSnapshot = Object.freeze(getTrinityTorusSegments());
|
|
48
|
-
|
|
49
|
-
// ——————————————————————————————————————————
|
|
50
|
-
// 2. Audio snapshot helper (Web Audio API)
|
|
51
|
-
// ---------------------------------------------------------
|
|
52
|
-
export function generateSineBuffer(freq: number, seconds: number, sampleRate = 48000): Float32Array {
|
|
53
|
-
const len = floor(seconds * sampleRate);
|
|
54
|
-
const buf = new Float32Array(len);
|
|
55
|
-
const omega = 2 * PI * freq / sampleRate;
|
|
56
|
-
for (let i = 0; i < len; i++) buf[i] = sin(i * omega);
|
|
57
|
-
return buf;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
export function getTeslaPulseBuffer(seconds = 1, sampleRate = 48000): Float32Array {
|
|
61
|
-
const freq = getTeslaFrequency(Date.now());
|
|
62
|
-
return generateSineBuffer(freq, seconds, sampleRate);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
// ——————————————————————————————————————————
|
|
66
|
-
// 3. Shock-wave pulse values (UI opacity/scale)
|
|
67
|
-
// ---------------------------------------------------------
|
|
68
|
-
export function shockWaveSnapshot(length = 30): readonly number[] {
|
|
69
|
-
return VBM_SHOCK_WAVE(length).map(d => d / 9);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
// ——————————————————————————————————————————
|
|
73
|
-
// 4. Snapshot serialization (base64-json) — immutable
|
|
74
|
-
// ---------------------------------------------------------
|
|
75
|
-
export interface A432Snapshot {
|
|
76
|
-
timestamp: number;
|
|
77
|
-
rodin: RodinSnapshot;
|
|
78
|
-
teslaFreq: number;
|
|
79
|
-
shock: readonly number[];
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
export function exportSnapshot(cycles = 3, shockLen = 30): string {
|
|
83
|
-
const snap: A432Snapshot = {
|
|
84
|
-
timestamp: Date.now(),
|
|
85
|
-
rodin: getRodinSnapshot(cycles),
|
|
86
|
-
teslaFreq: getTeslaFrequency(Date.now()),
|
|
87
|
-
shock: shockWaveSnapshot(shockLen),
|
|
88
|
-
};
|
|
89
|
-
const json = JSON.stringify(snap);
|
|
90
|
-
return Buffer.from(json, 'utf8').toString('base64');
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
export function importSnapshot(b64: string): A432Snapshot {
|
|
94
|
-
const json = Buffer.from(b64, 'base64').toString('utf8');
|
|
95
|
-
return JSON.parse(json) as A432Snapshot;
|
|
96
|
-
}
|