yakmesh 2.8.2 → 3.0.0
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 +637 -0
- package/CONTRIBUTING.md +42 -0
- package/Caddyfile +77 -0
- package/README.md +119 -29
- package/adapters/adapter-mlv-bible/README.md +124 -0
- package/adapters/adapter-mlv-bible/index.js +400 -0
- package/adapters/chat-mod-adapter.js +532 -0
- package/adapters/content-adapter.js +273 -0
- package/content/api.js +50 -41
- package/content/index.js +2 -2
- package/content/store.js +355 -173
- package/dashboard/index.html +19 -3
- package/database/replication.js +117 -37
- package/docs/CRYPTO-AGILITY.md +204 -0
- package/docs/MTLS-RESEARCH.md +367 -0
- package/docs/NAMCHE-SPEC.md +681 -0
- package/docs/PEERQUANTA-YAKMESH-INTEGRATION.md +407 -0
- package/docs/PRECISION-DISCLOSURE.md +96 -0
- package/docs/README.md +76 -0
- package/docs/ROADMAP-2.4.0.md +447 -0
- package/docs/ROADMAP-2.5.0.md +244 -0
- package/docs/SECURITY-AUDIT-REPORT.md +306 -0
- package/docs/SST-INTEGRATION.md +712 -0
- package/docs/STEADYWATCH-IMPLEMENTATION.md +303 -0
- package/docs/TERNARY-AUDIT-REPORT.md +247 -0
- package/docs/TME-FAQ.md +221 -0
- package/docs/WHITEPAPER.md +623 -0
- package/docs/adapters.html +1001 -0
- package/docs/advanced-systems.html +1045 -0
- package/docs/annex.html +1046 -0
- package/docs/api.html +970 -0
- package/docs/business/response-templates.md +160 -0
- package/docs/c2c.html +1225 -0
- package/docs/cli.html +1332 -0
- package/docs/configuration.html +1248 -0
- package/docs/darshan.html +1085 -0
- package/docs/dharma.html +966 -0
- package/docs/docs-bundle.html +1075 -0
- package/docs/docs.css +3120 -0
- package/docs/docs.js +556 -0
- package/docs/doko.html +969 -0
- package/docs/geo-proof.html +858 -0
- package/docs/getting-started.html +840 -0
- package/docs/gumba-tutorial.html +1144 -0
- package/docs/gumba.html +1098 -0
- package/docs/index.html +914 -0
- package/docs/jhilke.html +1312 -0
- package/docs/karma.html +1100 -0
- package/docs/katha.html +1037 -0
- package/docs/lama.html +978 -0
- package/docs/mandala.html +1067 -0
- package/docs/mani.html +964 -0
- package/docs/mantra.html +967 -0
- package/docs/mesh.html +1409 -0
- package/docs/nakpak.html +869 -0
- package/docs/namche.html +928 -0
- package/docs/nav-order.json +53 -0
- package/docs/prahari.html +1043 -0
- package/docs/prism-bash.min.js +1 -0
- package/docs/prism-javascript.min.js +1 -0
- package/docs/prism-json.min.js +1 -0
- package/docs/prism-tomorrow.min.css +1 -0
- package/docs/prism.min.js +1 -0
- package/docs/privacy.html +699 -0
- package/docs/quick-reference.html +1181 -0
- package/docs/sakshi.html +1402 -0
- package/docs/sandboxing.md +386 -0
- package/docs/seva.html +911 -0
- package/docs/sherpa.html +871 -0
- package/docs/studio.html +860 -0
- package/docs/stupa.html +995 -0
- package/docs/tailwind.min.css +2 -0
- package/docs/tattva.html +1332 -0
- package/docs/terms.html +686 -0
- package/docs/time-server-deployment.md +166 -0
- package/docs/time-sources.html +1392 -0
- package/docs/tivra.html +1127 -0
- package/docs/trademark-policy.html +686 -0
- package/docs/tribhuj.html +1183 -0
- package/docs/trust-security.html +1029 -0
- package/docs/tutorials/backup-recovery.html +654 -0
- package/docs/tutorials/dashboard.html +604 -0
- package/docs/tutorials/domain-setup.html +605 -0
- package/docs/tutorials/host-website.html +456 -0
- package/docs/tutorials/mesh-network.html +505 -0
- package/docs/tutorials/mobile-access.html +445 -0
- package/docs/tutorials/privacy.html +467 -0
- package/docs/tutorials/raspberry-pi.html +600 -0
- package/docs/tutorials/security-basics.html +539 -0
- package/docs/tutorials/share-files.html +431 -0
- package/docs/tutorials/troubleshooting.html +637 -0
- package/docs/tutorials/trust-karma.html +419 -0
- package/docs/tutorials/yak-protocol.html +456 -0
- package/docs/tutorials.html +1034 -0
- package/docs/vani.html +1270 -0
- package/docs/webserver.html +809 -0
- package/docs/yak-protocol.html +940 -0
- package/docs/yak-timeserver-design.md +475 -0
- package/docs/yakapp.html +1015 -0
- package/docs/ypc27.html +1069 -0
- package/docs/yurt.html +1344 -0
- package/embedded-docs/bundle.js +334 -74
- package/gossip/protocol.js +247 -27
- package/identity/key-resolver.js +262 -0
- package/identity/machine-seed.js +632 -0
- package/identity/node-key.js +669 -368
- package/identity/tribhuj-ratchet.js +506 -0
- package/knowledge-base.js +37 -8
- package/launcher/yakmesh.bat +62 -0
- package/launcher/yakmesh.sh +70 -0
- package/mesh/annex.js +462 -108
- package/mesh/beacon-broadcast.js +113 -1
- package/mesh/darshan.js +1718 -0
- package/mesh/gumba.js +1567 -0
- package/mesh/jhilke.js +651 -0
- package/mesh/katha.js +1012 -0
- package/mesh/nakpak-routing.js +8 -5
- package/mesh/network.js +724 -34
- package/mesh/pulse-sync.js +4 -1
- package/mesh/rate-limiter.js +127 -15
- package/mesh/seva.js +526 -0
- package/mesh/sherpa-discovery.js +89 -8
- package/mesh/sybil-defense.js +19 -5
- package/mesh/temporal-encoder.js +4 -3
- package/mesh/vani.js +1364 -0
- package/mesh/yurt.js +1340 -0
- package/models/entropy-sentinel.onnx +0 -0
- package/models/karma-trust.onnx +0 -0
- package/models/manifest.json +43 -0
- package/models/sakshi-anomaly.onnx +0 -0
- package/oracle/code-proof-protocol.js +7 -6
- package/oracle/codebase-lock.js +257 -28
- package/oracle/index.js +74 -15
- package/oracle/ma902-snmp.js +678 -0
- package/oracle/module-sealer.js +5 -3
- package/oracle/network-identity.js +16 -0
- package/oracle/packet-checksum.js +201 -0
- package/oracle/sst.js +579 -0
- package/oracle/ternary-144t.js +714 -0
- package/oracle/ternary-ml.js +481 -0
- package/oracle/time-api.js +239 -0
- package/oracle/time-source.js +137 -47
- package/oracle/validation-oracle-hardened.js +1111 -1071
- package/oracle/validation-oracle.js +4 -2
- package/oracle/ypc27.js +211 -0
- package/package.json +20 -3
- package/protocol/yak-handler.js +35 -9
- package/protocol/yak-protocol.js +28 -13
- package/reference/cpp/yakmesh_mceliece_shard.cpp +168 -0
- package/reference/cpp/yakmesh_ypc27.cpp +179 -0
- package/sbom.json +87 -0
- package/scripts/security-audit.mjs +264 -0
- package/scripts/update-docs-nav.js +194 -0
- package/scripts/update-docs-sidebar.cjs +164 -0
- package/security/crypto-config.js +4 -3
- package/security/dharma-moderation.js +517 -0
- package/security/doko-identity.js +193 -143
- package/security/domain-consensus.js +86 -85
- package/security/fs-hardening.js +620 -0
- package/security/hardware-attestation.js +5 -3
- package/security/hybrid-trust.js +227 -87
- package/security/karma-rate-limiter.js +692 -0
- package/security/khata-protocol.js +22 -21
- package/security/khata-trust-integration.js +277 -150
- package/security/memory-safety.js +635 -0
- package/security/mesh-auth.js +11 -10
- package/security/mesh-revocation.js +373 -5
- package/security/namche-gateway.js +298 -69
- package/security/sakshi.js +460 -3
- package/security/sangha.js +770 -0
- package/security/secure-config.js +473 -0
- package/security/silicon-parity.js +13 -10
- package/security/steadywatch.js +1142 -0
- package/security/strike-system.js +32 -3
- package/security/temporal-signing.js +488 -0
- package/security/trit-commitment.js +464 -0
- package/server/crypto/annex.js +247 -0
- package/server/darshan-api.js +343 -0
- package/server/index.js +3259 -362
- package/server/komm-api.js +668 -0
- package/utils/accel.js +2273 -0
- package/utils/ternary-id.js +79 -0
- package/utils/verify-worker.js +57 -0
- package/webserver/index.js +95 -5
- package/assets/yakmesh-logo.png +0 -0
- package/assets/yakmesh-logo.svg +0 -80
- package/assets/yakmesh-logo2.png +0 -0
- package/assets/yakmesh-logo2sm.png +0 -0
- package/assets/ymsm.png +0 -0
- package/website/assets/silhouettes/adapters.svg +0 -107
- package/website/assets/silhouettes/api-endpoints.svg +0 -115
- package/website/assets/silhouettes/atomic-clock.svg +0 -83
- package/website/assets/silhouettes/base-camp.svg +0 -81
- package/website/assets/silhouettes/bridge.svg +0 -69
- package/website/assets/silhouettes/docs-bundle.svg +0 -113
- package/website/assets/silhouettes/doko-basket.svg +0 -70
- package/website/assets/silhouettes/fortress.svg +0 -93
- package/website/assets/silhouettes/gateway.svg +0 -54
- package/website/assets/silhouettes/gears.svg +0 -93
- package/website/assets/silhouettes/globe-satellite.svg +0 -67
- package/website/assets/silhouettes/karma-wheel.svg +0 -137
- package/website/assets/silhouettes/lama-council.svg +0 -141
- package/website/assets/silhouettes/mandala-network.svg +0 -169
- package/website/assets/silhouettes/mani-stones.svg +0 -149
- package/website/assets/silhouettes/mantra-wheel.svg +0 -116
- package/website/assets/silhouettes/mesh-nodes.svg +0 -113
- package/website/assets/silhouettes/nakpak.svg +0 -56
- package/website/assets/silhouettes/peak-lightning.svg +0 -73
- package/website/assets/silhouettes/sherpa.svg +0 -69
- package/website/assets/silhouettes/stupa-tower.svg +0 -119
- package/website/assets/silhouettes/tattva-eye.svg +0 -78
- package/website/assets/silhouettes/terminal.svg +0 -74
- package/website/assets/silhouettes/webserver.svg +0 -145
- package/website/assets/silhouettes/yak.svg +0 -78
- package/website/assets/yakmesh-logo.png +0 -0
- package/website/assets/yakmesh-logo.webp +0 -0
- package/website/assets/yakmesh-logo128x140.webp +0 -0
- package/website/assets/yakmesh-logo2.png +0 -0
- package/website/assets/yakmesh-logo2.svg +0 -51
- package/website/assets/yakmesh-logo40x44.webp +0 -0
- package/website/assets/yakmesh.gif +0 -0
- package/website/assets/yakmesh.ico +0 -0
- package/website/assets/yakmesh.jpg +0 -0
- package/website/assets/yakmesh.pdf +0 -0
- package/website/assets/yakmesh.png +0 -0
- package/website/assets/yakmesh.svg +0 -70
- package/website/assets/yakmesh128.webp +0 -0
- package/website/assets/yakmesh32.png +0 -0
- package/website/assets/yakmesh32.svg +0 -65
- package/website/assets/yakmesh32o.ico +0 -2
- package/website/assets/yakmesh32o.svg +0 -65
- package/website/assets/yakmesh32o.svgz +0 -0
package/oracle/sst.js
ADDED
|
@@ -0,0 +1,579 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SST - Synergy Sequence Theory Integration for YAKMESH
|
|
3
|
+
*
|
|
4
|
+
* Based on Wesley Long's Synergy Sequence Theory, this module provides:
|
|
5
|
+
* - Digital root calculation
|
|
6
|
+
* - SST family classification (1,4,7 / 2,5,8 / 3,6,9)
|
|
7
|
+
* - Fibonacci 24-cycle sequences
|
|
8
|
+
* - Synergy Matrix generation
|
|
9
|
+
*
|
|
10
|
+
* The theory proposes that the numbers 3, 6, and 9 are "keys to the universe"
|
|
11
|
+
* and that all numbers belong to one of three family groups that determine
|
|
12
|
+
* their fundamental polarity.
|
|
13
|
+
*
|
|
14
|
+
* Integration Points:
|
|
15
|
+
* - TRIBHUJ: Family → Trit mapping
|
|
16
|
+
* - YPC-27: 24-cycle seed rotation
|
|
17
|
+
* - KARMA: Synergy Triangle trust geometry
|
|
18
|
+
* - PRAMAAN: Hexagonal tessellation
|
|
19
|
+
*
|
|
20
|
+
* @module oracle/sst
|
|
21
|
+
* @license MIT
|
|
22
|
+
* @copyright 2026 YAKMESH™ Contributors
|
|
23
|
+
* @see docs/SST-INTEGRATION.md
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
import { Trit, POSITIVE, NEUTRAL, NEGATIVE } from './tribhuj.js';
|
|
27
|
+
|
|
28
|
+
// =============================================================================
|
|
29
|
+
// CONSTANTS
|
|
30
|
+
// =============================================================================
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* SST Family identifiers.
|
|
34
|
+
*
|
|
35
|
+
* Family A (1,4,7): Physical Negative - descending energy
|
|
36
|
+
* Family B (2,5,8): Physical Positive - ascending energy
|
|
37
|
+
* Family C (3,6,9): Governing/Source - the singularity
|
|
38
|
+
*/
|
|
39
|
+
export const SSTFamily = Object.freeze({
|
|
40
|
+
A: 'A', // 1, 4, 7 - Physical Negative
|
|
41
|
+
B: 'B', // 2, 5, 8 - Physical Positive
|
|
42
|
+
C: 'C', // 3, 6, 9 - Governing/Source
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* The 24-digit repeating Fibonacci digital root sequence.
|
|
47
|
+
* This is the fundamental SST cycle discovered by reducing
|
|
48
|
+
* the infinite Fibonacci sequence to digital roots.
|
|
49
|
+
*
|
|
50
|
+
* Pattern emerges: positions 12 and 24 are both 9 (singularity markers)
|
|
51
|
+
*/
|
|
52
|
+
export const FIBONACCI_CYCLE_24 = Object.freeze([
|
|
53
|
+
1, 1, 2, 3, 5, 8, 4, 3, 7, 1, 8, 9, // First half
|
|
54
|
+
8, 8, 7, 6, 4, 1, 5, 6, 2, 8, 1, 9 // Second half (mirror-ish)
|
|
55
|
+
]);
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Family to Trit mapping.
|
|
59
|
+
*
|
|
60
|
+
* This is the core SST-TRIBHUJ bridge:
|
|
61
|
+
* - Family A represents the negative/descending polarity
|
|
62
|
+
* - Family B represents the positive/ascending polarity
|
|
63
|
+
* - Family C represents the neutral/governing singularity
|
|
64
|
+
*/
|
|
65
|
+
export const FAMILY_TO_TRIT = Object.freeze({
|
|
66
|
+
[SSTFamily.A]: NEGATIVE, // -1
|
|
67
|
+
[SSTFamily.B]: POSITIVE, // +1
|
|
68
|
+
[SSTFamily.C]: NEUTRAL, // 0
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Synergy Triangle angles (degrees).
|
|
73
|
+
* These form the fundamental 30-60-90 right triangle.
|
|
74
|
+
*/
|
|
75
|
+
export const SynergyAngles = Object.freeze({
|
|
76
|
+
BASE: 30, // Shallow, wide
|
|
77
|
+
MIDDLE: 60, // Balanced
|
|
78
|
+
APEX: 90, // Deep, narrow
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Trust propagation ratios based on Synergy Triangle geometry.
|
|
83
|
+
* Derived from the 30-60-90 triangle: sides are in ratio 1 : √3 : 2
|
|
84
|
+
*/
|
|
85
|
+
export const TRUST_PROPAGATION = Object.freeze({
|
|
86
|
+
DIRECT: 1.0, // Self
|
|
87
|
+
ONE_HOP: 1 / Math.sqrt(3), // ≈ 0.577
|
|
88
|
+
TWO_HOPS: 1 / 3, // ≈ 0.333
|
|
89
|
+
THREE_HOPS: 1 / Math.sqrt(27), // ≈ 0.192
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Hexagonal cell sizes (km) based on powers of 3.
|
|
94
|
+
* These provide natural scaling for geographic zones.
|
|
95
|
+
*/
|
|
96
|
+
export const HEX_CELL_SIZES = Object.freeze({
|
|
97
|
+
MICRO: 9, // 3² km - City district
|
|
98
|
+
SMALL: 27, // 3³ km - Metro area
|
|
99
|
+
MEDIUM: 81, // 3⁴ km - Regional
|
|
100
|
+
LARGE: 243, // 3⁵ km - National
|
|
101
|
+
MEGA: 729, // 3⁶ km - Continental
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
// =============================================================================
|
|
105
|
+
// DIGITAL ROOT FUNCTIONS
|
|
106
|
+
// =============================================================================
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Calculate the digital root of a number.
|
|
110
|
+
*
|
|
111
|
+
* Sum digits repeatedly until a single digit (1-9) remains.
|
|
112
|
+
* This is equivalent to (n - 1) % 9 + 1 for positive n.
|
|
113
|
+
*
|
|
114
|
+
* Examples:
|
|
115
|
+
* digitalRoot(27) = 9 (2 + 7 = 9)
|
|
116
|
+
* digitalRoot(123) = 6 (1 + 2 + 3 = 6)
|
|
117
|
+
* digitalRoot(999) = 9
|
|
118
|
+
* digitalRoot(0) = 9 (special case: 0 → 9 in SST)
|
|
119
|
+
*
|
|
120
|
+
* @param {number | bigint} n - Any integer
|
|
121
|
+
* @returns {number} - A value 1-9
|
|
122
|
+
*/
|
|
123
|
+
export function digitalRoot(n) {
|
|
124
|
+
// Handle BigInt
|
|
125
|
+
if (typeof n === 'bigint') {
|
|
126
|
+
if (n === 0n) return 9;
|
|
127
|
+
const abs = n < 0n ? -n : n;
|
|
128
|
+
const root = Number(abs % 9n);
|
|
129
|
+
return root === 0 ? 9 : root;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// Handle regular numbers
|
|
133
|
+
if (n === 0) return 9;
|
|
134
|
+
const abs = Math.abs(Math.floor(n));
|
|
135
|
+
const root = abs % 9;
|
|
136
|
+
return root === 0 ? 9 : root;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Get the SST family for a digital root (1-9).
|
|
141
|
+
*
|
|
142
|
+
* @param {number} root - Digital root value 1-9
|
|
143
|
+
* @returns {'A' | 'B' | 'C'}
|
|
144
|
+
*/
|
|
145
|
+
export function getFamily(root) {
|
|
146
|
+
if (root === 1 || root === 4 || root === 7) return SSTFamily.A;
|
|
147
|
+
if (root === 2 || root === 5 || root === 8) return SSTFamily.B;
|
|
148
|
+
return SSTFamily.C; // 3, 6, 9
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Get the SST family for any number.
|
|
153
|
+
* Calculates digital root, then returns family.
|
|
154
|
+
*
|
|
155
|
+
* @param {number | bigint} n - Any integer
|
|
156
|
+
* @returns {'A' | 'B' | 'C'}
|
|
157
|
+
*/
|
|
158
|
+
export function getFamilyOf(n) {
|
|
159
|
+
return getFamily(digitalRoot(n));
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Map any number to a Trit via its SST family.
|
|
164
|
+
*
|
|
165
|
+
* This is the core SST-TRIBHUJ mapping:
|
|
166
|
+
* Family A (1,4,7) → -1 (NEGATIVE) - Physical descending
|
|
167
|
+
* Family B (2,5,8) → +1 (POSITIVE) - Physical ascending
|
|
168
|
+
* Family C (3,6,9) → 0 (NEUTRAL) - Governing singularity
|
|
169
|
+
*
|
|
170
|
+
* @param {number | bigint} n
|
|
171
|
+
* @returns {Trit}
|
|
172
|
+
*/
|
|
173
|
+
export function toFamilyTrit(n) {
|
|
174
|
+
const family = getFamilyOf(n);
|
|
175
|
+
return new Trit(FAMILY_TO_TRIT[family]);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Convert a byte array to family trits.
|
|
180
|
+
* Each byte maps to its SST family trit.
|
|
181
|
+
*
|
|
182
|
+
* @param {Uint8Array} bytes
|
|
183
|
+
* @returns {Int8Array} - Array of trit values (-1, 0, +1)
|
|
184
|
+
*/
|
|
185
|
+
export function bytesToFamilyTrits(bytes) {
|
|
186
|
+
const trits = new Int8Array(bytes.length);
|
|
187
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
188
|
+
trits[i] = toFamilyTrit(bytes[i]).value;
|
|
189
|
+
}
|
|
190
|
+
return trits;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Get family statistics for a byte array.
|
|
195
|
+
*
|
|
196
|
+
* @param {Uint8Array} bytes
|
|
197
|
+
* @returns {{ a: number, b: number, c: number, dominant: 'A' | 'B' | 'C' }}
|
|
198
|
+
*/
|
|
199
|
+
export function analyzeBytesFamilies(bytes) {
|
|
200
|
+
let a = 0, b = 0, c = 0;
|
|
201
|
+
|
|
202
|
+
for (const byte of bytes) {
|
|
203
|
+
const family = getFamilyOf(byte);
|
|
204
|
+
if (family === SSTFamily.A) a++;
|
|
205
|
+
else if (family === SSTFamily.B) b++;
|
|
206
|
+
else c++;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
const max = Math.max(a, b, c);
|
|
210
|
+
const dominant = max === a ? SSTFamily.A : max === b ? SSTFamily.B : SSTFamily.C;
|
|
211
|
+
|
|
212
|
+
return { a, b, c, dominant };
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
// =============================================================================
|
|
216
|
+
// FIBONACCI CYCLE FUNCTIONS
|
|
217
|
+
// =============================================================================
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* Get the digital root Fibonacci number at position n.
|
|
221
|
+
* Uses the 24-position cycle.
|
|
222
|
+
*
|
|
223
|
+
* @param {number} n - Position (0-indexed)
|
|
224
|
+
* @returns {number} - Digital root 1-9
|
|
225
|
+
*/
|
|
226
|
+
export function fibonacciRoot(n) {
|
|
227
|
+
const pos = ((n % 24) + 24) % 24; // Handle negative indices
|
|
228
|
+
return FIBONACCI_CYCLE_24[pos];
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* Get the SST family for Fibonacci position n.
|
|
233
|
+
*
|
|
234
|
+
* @param {number} n
|
|
235
|
+
* @returns {'A' | 'B' | 'C'}
|
|
236
|
+
*/
|
|
237
|
+
export function fibonacciFamily(n) {
|
|
238
|
+
return getFamily(fibonacciRoot(n));
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
/**
|
|
242
|
+
* Get the family trit for Fibonacci position n.
|
|
243
|
+
*
|
|
244
|
+
* @param {number} n
|
|
245
|
+
* @returns {Trit}
|
|
246
|
+
*/
|
|
247
|
+
export function fibonacciFamilyTrit(n) {
|
|
248
|
+
return toFamilyTrit(fibonacciRoot(n));
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
/**
|
|
252
|
+
* Analyze the 24-cycle for family distribution.
|
|
253
|
+
*
|
|
254
|
+
* @returns {{ a: number[], b: number[], c: number[] }}
|
|
255
|
+
*/
|
|
256
|
+
export function analyzeFibonacciCycle() {
|
|
257
|
+
const a = [], b = [], c = [];
|
|
258
|
+
|
|
259
|
+
for (let i = 0; i < 24; i++) {
|
|
260
|
+
const family = fibonacciFamily(i);
|
|
261
|
+
if (family === SSTFamily.A) a.push(i);
|
|
262
|
+
else if (family === SSTFamily.B) b.push(i);
|
|
263
|
+
else c.push(i);
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
return { a, b, c };
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
// =============================================================================
|
|
270
|
+
// SYNERGY MATRIX FUNCTIONS
|
|
271
|
+
// =============================================================================
|
|
272
|
+
|
|
273
|
+
/**
|
|
274
|
+
* Generate a Fibonacci-style sequence starting with a specific seed.
|
|
275
|
+
* Each term is the digital root of the sum of the previous two.
|
|
276
|
+
*
|
|
277
|
+
* @param {number} seed - Starting digit 1-9
|
|
278
|
+
* @param {number} length - How many terms
|
|
279
|
+
* @returns {number[]}
|
|
280
|
+
*/
|
|
281
|
+
export function generateFibonacciSequence(seed, length = 24) {
|
|
282
|
+
if (seed < 1 || seed > 9) throw new Error('Seed must be 1-9');
|
|
283
|
+
|
|
284
|
+
const sequence = [seed, seed]; // Start with seed, seed
|
|
285
|
+
|
|
286
|
+
for (let i = 2; i < length; i++) {
|
|
287
|
+
const sum = sequence[i - 1] + sequence[i - 2];
|
|
288
|
+
sequence.push(digitalRoot(sum));
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
return sequence;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
/**
|
|
295
|
+
* Generate the full Synergy Matrix - 9 Fibonacci-style sequences.
|
|
296
|
+
* Each row starts with digit 1-9 repeated, then follows Fibonacci addition.
|
|
297
|
+
* All values reduced to digital roots.
|
|
298
|
+
*
|
|
299
|
+
* @param {number} length - How many columns
|
|
300
|
+
* @returns {number[][]} - 9 rows of digital roots
|
|
301
|
+
*/
|
|
302
|
+
export function generateSynergyMatrix(length = 24) {
|
|
303
|
+
const matrix = [];
|
|
304
|
+
|
|
305
|
+
for (let seed = 1; seed <= 9; seed++) {
|
|
306
|
+
matrix.push(generateFibonacciSequence(seed, length));
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
return matrix;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
/**
|
|
313
|
+
* Get the family pattern for a Synergy Matrix row.
|
|
314
|
+
*
|
|
315
|
+
* @param {number[]} row - Digital root sequence
|
|
316
|
+
* @returns {Int8Array} - Trit pattern
|
|
317
|
+
*/
|
|
318
|
+
export function rowToFamilyPattern(row) {
|
|
319
|
+
const trits = new Int8Array(row.length);
|
|
320
|
+
for (let i = 0; i < row.length; i++) {
|
|
321
|
+
trits[i] = toFamilyTrit(row[i]).value;
|
|
322
|
+
}
|
|
323
|
+
return trits;
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
/**
|
|
327
|
+
* Convert entire Synergy Matrix to trit patterns.
|
|
328
|
+
*
|
|
329
|
+
* @param {number[][]} matrix
|
|
330
|
+
* @returns {Int8Array[]}
|
|
331
|
+
*/
|
|
332
|
+
export function matrixToTritPatterns(matrix) {
|
|
333
|
+
return matrix.map(row => rowToFamilyPattern(row));
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
// =============================================================================
|
|
337
|
+
// TRUST GEOMETRY FUNCTIONS
|
|
338
|
+
// =============================================================================
|
|
339
|
+
|
|
340
|
+
/**
|
|
341
|
+
* Calculate trust propagation based on hop distance.
|
|
342
|
+
* Uses the Synergy Triangle ratios (1/√3 decay).
|
|
343
|
+
*
|
|
344
|
+
* @param {number} baseTrust - Original trust score (0-1)
|
|
345
|
+
* @param {number} hops - Number of hops from source
|
|
346
|
+
* @returns {number} - Propagated trust score
|
|
347
|
+
*/
|
|
348
|
+
export function propagateTrust(baseTrust, hops) {
|
|
349
|
+
if (hops < 0) throw new Error('Hops cannot be negative');
|
|
350
|
+
if (hops === 0) return baseTrust * TRUST_PROPAGATION.DIRECT;
|
|
351
|
+
if (hops === 1) return baseTrust * TRUST_PROPAGATION.ONE_HOP;
|
|
352
|
+
if (hops === 2) return baseTrust * TRUST_PROPAGATION.TWO_HOPS;
|
|
353
|
+
if (hops === 3) return baseTrust * TRUST_PROPAGATION.THREE_HOPS;
|
|
354
|
+
|
|
355
|
+
// Beyond 3 hops: general formula 1/√(3^hops) = 3^(-hops/2)
|
|
356
|
+
return baseTrust * Math.pow(3, -hops / 2);
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
/**
|
|
360
|
+
* Get trust decay half-life based on trust angle.
|
|
361
|
+
*
|
|
362
|
+
* Shallow (30°): Fast decay, low commitment
|
|
363
|
+
* Balanced (60°): Medium decay
|
|
364
|
+
* Deep (90°): Slow decay, high commitment
|
|
365
|
+
*
|
|
366
|
+
* @param {number} angle - 30, 60, or 90
|
|
367
|
+
* @returns {number} - Half-life in milliseconds
|
|
368
|
+
*/
|
|
369
|
+
export function trustHalfLife(angle) {
|
|
370
|
+
const HOUR = 3600 * 1000;
|
|
371
|
+
const DAY = 24 * HOUR;
|
|
372
|
+
|
|
373
|
+
switch (angle) {
|
|
374
|
+
case SynergyAngles.BASE: return 1 * DAY; // 24 hours
|
|
375
|
+
case SynergyAngles.MIDDLE: return 7 * DAY; // 1 week
|
|
376
|
+
case SynergyAngles.APEX: return 90 * DAY; // ~3 months
|
|
377
|
+
default: return 7 * DAY;
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
/**
|
|
382
|
+
* Calculate decayed trust based on time elapsed and angle.
|
|
383
|
+
*
|
|
384
|
+
* @param {number} initialTrust - Starting trust (0-1)
|
|
385
|
+
* @param {number} elapsedMs - Time since trust was established
|
|
386
|
+
* @param {number} angle - Trust angle (30, 60, or 90)
|
|
387
|
+
* @returns {number} - Current trust level
|
|
388
|
+
*/
|
|
389
|
+
export function decayTrust(initialTrust, elapsedMs, angle = SynergyAngles.MIDDLE) {
|
|
390
|
+
const halfLife = trustHalfLife(angle);
|
|
391
|
+
const decayFactor = Math.pow(0.5, elapsedMs / halfLife);
|
|
392
|
+
return initialTrust * decayFactor;
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
// =============================================================================
|
|
396
|
+
// HEXAGONAL GEOMETRY (PRAMAAN INTEGRATION)
|
|
397
|
+
// =============================================================================
|
|
398
|
+
|
|
399
|
+
/**
|
|
400
|
+
* Axial coordinates for hexagonal grid.
|
|
401
|
+
* Uses "pointy-top" orientation aligned with 30-60-90 triangles.
|
|
402
|
+
*/
|
|
403
|
+
export class HexCoord {
|
|
404
|
+
/**
|
|
405
|
+
* @param {number} q - Column coordinate
|
|
406
|
+
* @param {number} r - Row coordinate
|
|
407
|
+
*/
|
|
408
|
+
constructor(q, r) {
|
|
409
|
+
this.q = q;
|
|
410
|
+
this.r = r;
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
/** Get the implicit s coordinate (q + r + s = 0) */
|
|
414
|
+
get s() {
|
|
415
|
+
return -this.q - this.r;
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
/** Get the 6 neighbor cells */
|
|
419
|
+
neighbors() {
|
|
420
|
+
return [
|
|
421
|
+
new HexCoord(this.q + 1, this.r), // E
|
|
422
|
+
new HexCoord(this.q + 1, this.r - 1), // NE
|
|
423
|
+
new HexCoord(this.q, this.r - 1), // NW
|
|
424
|
+
new HexCoord(this.q - 1, this.r), // W
|
|
425
|
+
new HexCoord(this.q - 1, this.r + 1), // SW
|
|
426
|
+
new HexCoord(this.q, this.r + 1), // SE
|
|
427
|
+
];
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
/** Distance to another hex cell (in cells) */
|
|
431
|
+
distanceTo(other) {
|
|
432
|
+
return Math.max(
|
|
433
|
+
Math.abs(this.q - other.q),
|
|
434
|
+
Math.abs(this.r - other.r),
|
|
435
|
+
Math.abs(this.s - other.s)
|
|
436
|
+
);
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
/** Check equality */
|
|
440
|
+
equals(other) {
|
|
441
|
+
return this.q === other.q && this.r === other.r;
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
/** String representation */
|
|
445
|
+
toString() {
|
|
446
|
+
return `Hex(${this.q}, ${this.r})`;
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
/**
|
|
450
|
+
* Round fractional hex coordinates to nearest integer hex.
|
|
451
|
+
* @param {number} q - Fractional q
|
|
452
|
+
* @param {number} r - Fractional r
|
|
453
|
+
* @returns {HexCoord}
|
|
454
|
+
*/
|
|
455
|
+
static round(q, r) {
|
|
456
|
+
const s = -q - r;
|
|
457
|
+
|
|
458
|
+
let rq = Math.round(q);
|
|
459
|
+
let rr = Math.round(r);
|
|
460
|
+
let rs = Math.round(s);
|
|
461
|
+
|
|
462
|
+
const qDiff = Math.abs(rq - q);
|
|
463
|
+
const rDiff = Math.abs(rr - r);
|
|
464
|
+
const sDiff = Math.abs(rs - s);
|
|
465
|
+
|
|
466
|
+
if (qDiff > rDiff && qDiff > sDiff) {
|
|
467
|
+
rq = -rr - rs;
|
|
468
|
+
} else if (rDiff > sDiff) {
|
|
469
|
+
rr = -rq - rs;
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
return new HexCoord(rq, rr);
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
/** Origin cell */
|
|
476
|
+
static origin() {
|
|
477
|
+
return new HexCoord(0, 0);
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
/**
|
|
482
|
+
* Get all hex cells in a ring around a center.
|
|
483
|
+
* Ring 0 = just the center, Ring 1 = 6 cells, Ring 2 = 12 cells, etc.
|
|
484
|
+
*
|
|
485
|
+
* @param {HexCoord} center
|
|
486
|
+
* @param {number} radius
|
|
487
|
+
* @returns {HexCoord[]}
|
|
488
|
+
*/
|
|
489
|
+
export function hexRing(center, radius) {
|
|
490
|
+
if (radius === 0) return [center];
|
|
491
|
+
|
|
492
|
+
const results = [];
|
|
493
|
+
let hex = new HexCoord(center.q + radius, center.r - radius);
|
|
494
|
+
|
|
495
|
+
// 6 directions, radius steps each
|
|
496
|
+
const directions = [
|
|
497
|
+
[0, 1], [-1, 1], [-1, 0], [0, -1], [1, -1], [1, 0]
|
|
498
|
+
];
|
|
499
|
+
|
|
500
|
+
for (const [dq, dr] of directions) {
|
|
501
|
+
for (let i = 0; i < radius; i++) {
|
|
502
|
+
results.push(hex);
|
|
503
|
+
hex = new HexCoord(hex.q + dq, hex.r + dr);
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
return results;
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
/**
|
|
511
|
+
* Get all hex cells in a filled hexagon (disk) around a center.
|
|
512
|
+
*
|
|
513
|
+
* @param {HexCoord} center
|
|
514
|
+
* @param {number} radius
|
|
515
|
+
* @returns {HexCoord[]}
|
|
516
|
+
*/
|
|
517
|
+
export function hexDisk(center, radius) {
|
|
518
|
+
const results = [];
|
|
519
|
+
for (let r = 0; r <= radius; r++) {
|
|
520
|
+
results.push(...hexRing(center, r));
|
|
521
|
+
}
|
|
522
|
+
return results;
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
/**
|
|
526
|
+
* Calculate number of cells in a hex disk of given radius.
|
|
527
|
+
* Formula: 3*r*(r+1) + 1
|
|
528
|
+
*
|
|
529
|
+
* @param {number} radius
|
|
530
|
+
* @returns {number}
|
|
531
|
+
*/
|
|
532
|
+
export function hexDiskSize(radius) {
|
|
533
|
+
return 3 * radius * (radius + 1) + 1;
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
// =============================================================================
|
|
537
|
+
// EXPORTS
|
|
538
|
+
// =============================================================================
|
|
539
|
+
|
|
540
|
+
export default {
|
|
541
|
+
// Constants
|
|
542
|
+
SSTFamily,
|
|
543
|
+
FIBONACCI_CYCLE_24,
|
|
544
|
+
FAMILY_TO_TRIT,
|
|
545
|
+
SynergyAngles,
|
|
546
|
+
TRUST_PROPAGATION,
|
|
547
|
+
HEX_CELL_SIZES,
|
|
548
|
+
|
|
549
|
+
// Digital Root
|
|
550
|
+
digitalRoot,
|
|
551
|
+
getFamily,
|
|
552
|
+
getFamilyOf,
|
|
553
|
+
toFamilyTrit,
|
|
554
|
+
bytesToFamilyTrits,
|
|
555
|
+
analyzeBytesFamilies,
|
|
556
|
+
|
|
557
|
+
// Fibonacci Cycle
|
|
558
|
+
fibonacciRoot,
|
|
559
|
+
fibonacciFamily,
|
|
560
|
+
fibonacciFamilyTrit,
|
|
561
|
+
analyzeFibonacciCycle,
|
|
562
|
+
|
|
563
|
+
// Synergy Matrix
|
|
564
|
+
generateFibonacciSequence,
|
|
565
|
+
generateSynergyMatrix,
|
|
566
|
+
rowToFamilyPattern,
|
|
567
|
+
matrixToTritPatterns,
|
|
568
|
+
|
|
569
|
+
// Trust Geometry
|
|
570
|
+
propagateTrust,
|
|
571
|
+
trustHalfLife,
|
|
572
|
+
decayTrust,
|
|
573
|
+
|
|
574
|
+
// Hexagonal Geometry
|
|
575
|
+
HexCoord,
|
|
576
|
+
hexRing,
|
|
577
|
+
hexDisk,
|
|
578
|
+
hexDiskSize,
|
|
579
|
+
};
|