yakmesh 2.0.0 → 2.5.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.
Files changed (122) hide show
  1. package/CHANGELOG.md +484 -0
  2. package/README.md +99 -3
  3. package/RELEASE_CHECKLIST.md +115 -0
  4. package/SECURITY.md +40 -5
  5. package/adapters/adapter-byond/README.md +329 -0
  6. package/adapters/adapter-byond/dmapi/README.md +178 -0
  7. package/adapters/adapter-byond/dmapi/yakmesh.dm +442 -0
  8. package/adapters/adapter-byond/dmapi/yakmesh_config.dm +42 -0
  9. package/adapters/adapter-byond/examples/pondera-hosting.js +276 -0
  10. package/adapters/adapter-byond/http-bridge.js +463 -0
  11. package/adapters/adapter-byond/index.js +700 -0
  12. package/adapters/adapter-byond/package.json +43 -0
  13. package/adapters/adapter-byond/security.js +454 -0
  14. package/adapters/adapter-byond/topic-client.js +303 -0
  15. package/adapters/adapter-website/index.js +955 -0
  16. package/cli/index.js +535 -1
  17. package/content/store.js +9 -7
  18. package/dashboard/index.html +530 -1
  19. package/database/replication.js +9 -6
  20. package/gossip/protocol.js +11 -8
  21. package/identity/node-key.js +23 -17
  22. package/mesh/annex.js +16 -13
  23. package/mesh/nakpak-routing.js +6 -4
  24. package/mesh/network.js +12 -9
  25. package/mesh/sherpa-discovery.js +277 -3
  26. package/oracle/code-proof-protocol.js +20 -8
  27. package/oracle/codebase-lock.js +6 -3
  28. package/oracle/consensus-engine.js +5 -2
  29. package/oracle/genesis-network-v2.js +37 -36
  30. package/oracle/genesis-network.js +28 -30
  31. package/oracle/index.js +24 -1
  32. package/oracle/module-sealer.js +5 -3
  33. package/oracle/network-identity.js +45 -7
  34. package/oracle/time-source.js +31 -23
  35. package/oracle/validation-oracle-hardened.js +43 -8
  36. package/oracle/validation-oracle.js +26 -7
  37. package/package.json +29 -4
  38. package/protocol/yak-handler.cjs +96 -0
  39. package/protocol/yak-handler.js +104 -0
  40. package/protocol/yak-protocol.js +1273 -0
  41. package/protocol/yak-protocol.reg +15 -0
  42. package/security/crypto-config.js +413 -0
  43. package/security/doko-identity.js +1476 -0
  44. package/security/domain-consensus.js +1237 -0
  45. package/security/geo-proof.js +757 -0
  46. package/security/hardware-attestation.js +764 -0
  47. package/security/hybrid-trust.js +835 -0
  48. package/security/khata-protocol.js +526 -0
  49. package/security/khata-trust-integration.js +929 -0
  50. package/security/mesh-auth.js +126 -0
  51. package/security/mesh-revocation.js +602 -0
  52. package/security/namche-gateway.js +727 -0
  53. package/security/silicon-parity.js +782 -0
  54. package/security/strike-system.js +735 -0
  55. package/security/sybil-graph.js +805 -0
  56. package/security/tls-binding.js +647 -0
  57. package/security/trust-tier.js +451 -0
  58. package/server/index.js +584 -52
  59. package/types/index.d.ts +346 -0
  60. package/utils/logger.js +209 -0
  61. package/webserver/cli.js +5 -3
  62. package/webserver/full-stack-example.js +11 -16
  63. package/webserver/index.js +18 -15
  64. package/yakmesh-2.5.0.tgz +0 -0
  65. package/adapters/adapter-peerquanta/index.js +0 -1176
  66. package/adapters/adapter-peerquanta/package.json +0 -18
  67. package/announcements/discord-v1.3.1.md +0 -55
  68. package/announcements/discord-v1.4.0.md +0 -86
  69. package/announcements/discord-v1.5.0.md +0 -29
  70. package/announcements/discord-v1.6.0.md +0 -49
  71. package/announcements/discord-v1.7.0.md +0 -35
  72. package/announcements/discord-v1.8.0.md +0 -66
  73. package/announcements/patreon-welcome.md +0 -83
  74. package/announcements/telegram-v1.4.0.md +0 -43
  75. package/announcements/telegram-v1.5.0.md +0 -9
  76. package/announcements/telegram-v1.6.0.md +0 -15
  77. package/announcements/telegram-v1.7.0.md +0 -11
  78. package/announcements/telegram-v1.8.0.md +0 -41
  79. package/announcements/x-v1.4.0.md +0 -58
  80. package/announcements/x-v1.5.0.md +0 -11
  81. package/announcements/x-v1.6.0.md +0 -13
  82. package/announcements/x-v1.7.0.md +0 -41
  83. package/announcements/x-v1.8.0.md +0 -65
  84. package/deploy/CADDY-README.md +0 -201
  85. package/deploy/Caddyfile +0 -208
  86. package/deploy-packages/README.md +0 -114
  87. package/deploy-packages/build-packages.ps1 +0 -205
  88. package/deploy-packages/yakmesh-full/README.md +0 -122
  89. package/deploy-packages/yakmesh-full/config/Caddyfile +0 -61
  90. package/deploy-packages/yakmesh-full/config/php.ini +0 -55
  91. package/deploy-packages/yakmesh-full/config/yakmesh.config.js +0 -100
  92. package/deploy-packages/yakmesh-full/start.ps1 +0 -193
  93. package/deploy-packages/yakmesh-full/start.sh +0 -207
  94. package/deploy-packages/yakmesh-full/stop.ps1 +0 -35
  95. package/deploy-packages/yakmesh-full/stop.sh +0 -30
  96. package/deploy-packages/yakmesh-minimal/README.md +0 -69
  97. package/deploy-packages/yakmesh-minimal/config/Caddyfile +0 -46
  98. package/deploy-packages/yakmesh-minimal/config/yakmesh.config.js +0 -79
  99. package/deploy-packages/yakmesh-minimal/start.ps1 +0 -165
  100. package/deploy-packages/yakmesh-minimal/start.sh +0 -161
  101. package/deploy-packages/yakmesh-minimal/stop.ps1 +0 -29
  102. package/deploy-packages/yakmesh-minimal/stop.sh +0 -29
  103. package/discord.md +0 -29
  104. package/ecosystem.config.json +0 -16
  105. package/hostinger/node.php +0 -65
  106. package/marketing/devto-article.md +0 -79
  107. package/marketing/hacker-news.md +0 -27
  108. package/marketing/linkedin.md +0 -42
  109. package/marketing/product-hunt.md +0 -60
  110. package/marketing/reddit-posts.md +0 -118
  111. package/marketing/twitter-thread.md +0 -83
  112. package/marketing/v1.4.0-discord-header.md +0 -45
  113. package/marketing/v1.4.0-telegram.md +0 -56
  114. package/marketing/v1.4.0-twitter-x.md +0 -92
  115. package/yakbot/.env.example +0 -22
  116. package/yakbot/README.md +0 -166
  117. package/yakbot/index.js +0 -760
  118. package/yakbot/package-lock.json +0 -433
  119. package/yakbot/package.json +0 -23
  120. package/yakbot/register-commands.js +0 -105
  121. package/yakmesh.config.js +0 -8
  122. package/yakmesh.config.production.js +0 -37
package/CHANGELOG.md CHANGED
@@ -2,6 +2,490 @@
2
2
 
3
3
  All notable changes to YAKMESH will be documented in this file.
4
4
 
5
+ ## [2.5.0] - 2026-01-20
6
+
7
+ ### 🌍 Geographic Exclusion — Physics Don't Lie
8
+
9
+ *Theme: "Speed of light is the ultimate validator. We prove where you CANNOT be."*
10
+
11
+ #### 🎯 Core Principles
12
+
13
+ - **Unforgeable Distance** - Speed of light provides cryptographic lower bound on distance
14
+ - **Exclusion Zones** - Prove where nodes CANNOT be, not precise location
15
+ - **No GPS Required** - RTT + physics = provable geography
16
+ - **Network Overhead is Safe** - Latency only inflates RTT, making zones always valid
17
+
18
+ #### ✅ Implemented Features
19
+
20
+ **Geographic Proof Core** (`security/geo-proof.js`)
21
+ - Speed-of-light distance calculation (fiber = 0.67c)
22
+ - LandmarkRegistry for known geographic reference points
23
+ - RTTMeasurement with jitter handling and averaging
24
+ - ExclusionZone creation from RTT measurements
25
+ - GeographicProof with confidence scoring
26
+ - GeoProofService for full lifecycle management
27
+ - **59 tests**
28
+
29
+ **KHATA Gossip Integration** (`security/khata-trust-integration.js`)
30
+ - 6 new message types for geo-proof gossip:
31
+ - GEO_PROOF_ANNOUNCE, GEO_PROOF_REQUEST, GEO_PROOF_RESPONSE
32
+ - LANDMARK_ANNOUNCE, LANDMARK_REQUEST, LANDMARK_VERIFY
33
+ - Geo-proof announcement and request handling
34
+ - Landmark discovery via gossip
35
+ - **14 new tests** (36 total)
36
+
37
+ **CLI Commands** (`cli/index.js`)
38
+ - `yakmesh geo status` - Show geographic proof status
39
+ - `yakmesh geo landmarks` - List known landmarks
40
+ - `yakmesh geo zones` - List exclusion zones
41
+ - `yakmesh geo prove` - Generate geographic proof
42
+ - `yakmesh geo verify <nodeId>` - Verify another node
43
+ - `yakmesh geo add-landmark <name>` - Add landmark manually
44
+ - `yakmesh geo physics` - Show speed-of-light constants
45
+
46
+ **Server API Endpoints** (`server/index.js`)
47
+ - `GET /geo/status` - Geographic proof status and physics constants
48
+ - `GET /geo/landmarks` - List registered landmarks
49
+ - `POST /geo/landmarks` - Add a landmark
50
+ - `GET /geo/zones` - List exclusion zones
51
+ - `POST /geo/prove` - Generate geographic proof
52
+ - `POST /geo/verify` - Verify another node's claims
53
+
54
+ **SHERPA Beacon Integration** (`mesh/sherpa-discovery.js`)
55
+ - RTT measurement during beacon fetch (performance.now())
56
+ - Geographic coordinates in BeaconMessage (lat, lon, name, accuracyKm, timeTier)
57
+ - Automatic landmark discovery from geo-enabled beacons
58
+ - RTT sample averaging with configurable window
59
+ - Protocol version bumped to 1.1 for geo support
60
+ - New SherpaDiscovery methods:
61
+ - `setGeoCoordinates()` - Configure this node as landmark
62
+ - `setGeoProofService()` - Connect to GeoProofService
63
+ - `getGeoLandmarks()` - List discovered landmarks
64
+ - `getRttMeasurements()` - Get RTT data for proof generation
65
+ - **31 tests**
66
+
67
+ #### ⚡ Speed-of-Light Physics
68
+
69
+ | RTT | Minimum Distance |
70
+ |-----|------------------|
71
+ | 1 ms | ≥100 km |
72
+ | 5 ms | ≥500 km |
73
+ | 10 ms | ≥999 km |
74
+ | 50 ms | ≥4,997 km |
75
+ | 100 ms | ≥9,993 km |
76
+ | 200 ms | ≥19,986 km |
77
+
78
+ **Formula:** `minDistance = (RTT / 2) × fiberSpeed`
79
+ - Vacuum speed: 299,792.458 km/s
80
+ - Fiber speed (0.67c): 199,861.639 km/s
81
+
82
+ #### 📊 Test Summary
83
+
84
+ | Module | Tests | Status |
85
+ |--------|-------|--------|
86
+ | Geo Proof Core | 59 | ✅ |
87
+ | KHATA Geo Integration | 14 | ✅ |
88
+ | SHERPA Geo Integration | 31 | ✅ |
89
+ | **v2.5 Total** | **104** | ✅ |
90
+
91
+ #### 🔮 Implementation Notes
92
+
93
+ - Dashboard visualization skipped (privacy concern - CLI provides same data)
94
+ - SHERPA beacons now serve as geographic landmarks automatically
95
+ - RTT measured using high-resolution `performance.now()` timing
96
+
97
+ ---
98
+
99
+ ## [2.4.0] - 2026-01-19 (Internal)
100
+
101
+ ### 🤝 Mathematical Trust — No Simulation
102
+
103
+ *Theme: "You can't fake physics. Atomic time and real silicon are your credentials."*
104
+
105
+ > **Note**: This version was developed internally and released as part of v2.5.0.
106
+
107
+ #### 🎯 Core Principles
108
+
109
+ - **No Simulation** - Must prove real AES-NI hardware through timing analysis
110
+ - **Atomic Precision** - Highest trust requires physical time sources
111
+ - **Mathematical Consensus** - Revocation through signature counting, not voting
112
+
113
+ #### ✅ Implemented Features
114
+
115
+ **Mesh-Consensus Revocation** (`security/mesh-revocation.js`)
116
+ - 2/3 threshold attestation-based revocation
117
+ - Post-quantum signed attestations (ML-DSA-65)
118
+ - Revocation certificates with threshold proof
119
+ - **41 tests**
120
+
121
+ **Hardware Attestation** (`security/hardware-attestation.js`)
122
+ - AES-NI timing verification to prove real silicon
123
+ - Challenge-response protocol for peer verification
124
+ - Bot farms and VMs fail timing checks
125
+ - **5 tests**
126
+
127
+ **Trust Tier System** (`security/trust-tier.js`)
128
+ - ORACLE (2.0x): Atomic clock + AES-NI + 30 days
129
+ - ANCHOR (1.5x): GPS+PPS + AES-NI + 14 days
130
+ - SENTINEL (1.25x): PTP + AES-NI + 7 days
131
+ - PARTICIPANT (1.0x): NTP + AES-NI
132
+ - OBSERVER (0.25x): Unverified
133
+ - **35 tests**
134
+
135
+ **Silicon Parity** (`security/silicon-parity.js`)
136
+ - "One Silicon = One Vote" anti-ASIC/farm defense
137
+ - Weight division: `tierMax / coreCount`
138
+ - 100-core rig = same weight as 1-core
139
+ - AES-NI fingerprint as unique silicon identity
140
+ - **36 tests**
141
+
142
+ **Sybil Graph Analysis** (`security/sybil-graph.js`)
143
+ - Clustering coefficient detection (>0.7 = suspicious)
144
+ - Edge cut ratio analysis (<0.1 = insular cluster)
145
+ - Component analysis for cluster isolation
146
+ - Behavior correlation (uptime, activity patterns)
147
+ - **44 tests**
148
+
149
+ **KHATA Trust Integration** (`security/khata-trust-integration.js`)
150
+ - Gossip layer for trust messages over KHATA protocol
151
+ - 8 new message types for attestation/challenge routing
152
+ - Deduplication and hop limit enforcement
153
+ - Trust synchronization between peers
154
+ - **22 tests**
155
+
156
+ **Strike System** (`security/strike-system.js`)
157
+ - "Three Strikes — Then Math Speaks"
158
+ - Hardware fingerprint tracks identity across fresh starts
159
+ - Strike 1: Fresh start allowed, recorded
160
+ - Strike 2: 7-day probation, reduced trust (0.5x)
161
+ - Strike 3: Permanent network ban
162
+ - Revocation bridge for automated strike issuance
163
+ - **31 tests**
164
+
165
+ #### 📊 Test Summary
166
+
167
+ | Module | Tests | Status |
168
+ |--------|-------|--------|
169
+ | Mesh Revocation | 41 | ✅ |
170
+ | Hardware Attestation | 5 | ✅ |
171
+ | Trust Tiers | 35 | ✅ |
172
+ | Silicon Parity | 36 | ✅ |
173
+ | Sybil Graph | 44 | ✅ |
174
+ | KHATA Integration | 22 | ✅ |
175
+ | Strike System | 31 | ✅ |
176
+ | **v2.4 Total** | **214** | ✅ |
177
+
178
+ **Project Total**: 598 + 214 = **812 tests**
179
+
180
+ See [ROADMAP-2.4.0.md](docs/ROADMAP-2.4.0.md) for full details.
181
+
182
+ ---
183
+
184
+ ## [2.3.0] - 2026-01-20
185
+
186
+ ### 🧪 Testing Expansion, BYOND Adapter & Bug Fixes
187
+
188
+ This release expands test coverage from 352 to 598 tests with comprehensive mesh module testing and adds the BYOND game server adapter.
189
+
190
+ #### 📊 Test Coverage
191
+
192
+ | Module | Tests | Status |
193
+ |--------|-------|--------|
194
+ | **Oracle** | 98 | ✅ All passing |
195
+ | **Protocol** | 56 | ✅ All passing |
196
+ | **Multi-Node** | 18 | ✅ All passing |
197
+ | **BYOND Adapter** | 36 | ✅ All passing |
198
+ | **Security (Vitest)** | 390 | ✅ All passing (55 skipped) |
199
+ | **Total** | **598** | **543 passing, 55 skipped** |
200
+
201
+ #### 🎮 BYOND Game Server Adapter
202
+
203
+ New adapter for integrating BYOND games (Space Station 13, Pondera, etc.) with Yakmesh:
204
+
205
+ - **Topic Protocol** - Native BYOND wire protocol implementation
206
+ - **HTTP Bridge** - REST API for DreamDaemon communication
207
+ - **Server Discovery** - Find BYOND servers via mesh gossip
208
+ - **World Persistence** - Save/load world data to mesh storage
209
+ - **DOKO Integration** - Cryptographic identity for game servers
210
+ - **DMAPI Library** - Drop-in DM code for game developers
211
+
212
+ **Files:**
213
+ - `adapters/adapter-byond/index.js` - Main adapter
214
+ - `adapters/adapter-byond/topic-client.js` - Wire protocol
215
+ - `adapters/adapter-byond/http-bridge.js` - HTTP server
216
+ - `adapters/adapter-byond/security.js` - DOKO verification
217
+ - `adapters/adapter-byond/dmapi/` - DM library
218
+
219
+ #### ✅ New Test Files
220
+
221
+ - `mesh/tests/nakpak-routing.test.js` - 52 tests for NAKPAK onion routing
222
+ - `mesh/tests/sherpa-discovery.test.js` - 57 tests for SHERPA peer discovery
223
+ - `mesh/tests/annex.test.js` - 64 tests for ANNEX encrypted channels
224
+ - `security/tests/khata-protocol.test.js` - 38 tests for KHATA trust protocol
225
+ - `security/tests/mesh-auth.test.js` - 54 tests for WebSocket authentication
226
+ - `adapters/adapter-byond/tests/*.test.js` - 36 tests for BYOND integration
227
+
228
+ #### 🐛 Bug Fixes
229
+
230
+ - **Fixed ML-KEM768 cipherText capitalization** - `ml_kem768.encapsulate()` returns `{cipherText}` with capital T, not `{ciphertext}`. Fixed in `nakpak-routing.js` and `annex.js`
231
+ - **Fixed mesh-auth.js import** - Changed `@noble/hashes/sha3` to `@noble/hashes/sha3.js` for proper ESM resolution
232
+ - **Fixed oracle path normalization** - Consistent cross-platform path handling
233
+
234
+ #### 🤖 YakBot Updates
235
+
236
+ - Updated to v2.3.0 with current features
237
+ - Enhanced AI context with NAMCHE/DOKO, adapters, 598 tests
238
+ - New FAQ entry for security features
239
+ - Added YakBot deployment package to build system
240
+
241
+ #### 📝 Notes
242
+
243
+ Some tests are skipped pending full key exchange implementation or complex async mocking requirements. These represent edge cases that work correctly in production but need specialized test infrastructure.
244
+
245
+ ## [2.2.0] - 2026-01-18
246
+
247
+ ### ✨ YAK:// Protocol v2.2.0 - Remote Bookmarks, DOKO Revocation & Comprehensive Testing
248
+
249
+ **This release includes all features from v2.0.1, v2.1.0, and v2.2.0 (combined release).**
250
+
251
+ #### 📋 Complete v2.2.0 Feature Summary
252
+
253
+ | Category | Features Added |
254
+ |----------|----------------|
255
+ | **YAK:// Protocol** | Custom URL scheme, builtin routes, content addressing |
256
+ | **Local Bookmarks** | Pet names, CLI commands, REST API, dashboard UI |
257
+ | **Remote Bookmarks** | Mesh gossip sync, subscribe/publish, priority resolution |
258
+ | **DOKO Revocation** | Self-revocation, emergency certificates, reason codes |
259
+ | **SSL/TLS Binding** | Certificate fingerprints, domain binding, verification |
260
+ | **Domain Transfers** | Request/authorize workflow, completion proofs |
261
+ | **TypeScript** | Full `.d.ts` type definitions |
262
+ | **Testing** | 352 tests (Oracle 98, Protocol 56, Multi-Node 18, Security 180) |
263
+ | **Developer Experience** | Vitest config, npm scripts, expanded README |
264
+ | **Bug Fixes** | ML-DSA-65 argument order, beacon signature verification |
265
+
266
+ This release adds mesh-synchronized bookmark sharing, key compromise recovery, and brings test coverage to 352 tests across all modules.
267
+
268
+ #### 🌐 Remote Bookmarks (Mesh Sync)
269
+
270
+ Share bookmark lists between nodes via gossip protocol. Subscribe to trusted nodes and receive their bookmarks automatically.
271
+
272
+ **New Class: `RemoteBookmarkSync`**
273
+ - **Publish**: Share your bookmarks to the mesh (`yakmesh bookmark share <list-name>`)
274
+ - **Subscribe**: Follow other nodes' bookmark lists (`yakmesh bookmark subscribe <node-id>`)
275
+ - **Sync**: Automatic sync via gossip protocol
276
+ - **Priority**: Local bookmarks always override remote ones
277
+
278
+ **Dashboard UI:**
279
+ - New "Remote Bookmarks" panel with subscription management
280
+ - Subscribe/Unsubscribe buttons
281
+ - Publish your bookmarks to mesh
282
+ - View remote bookmarks from subscribed nodes
283
+
284
+ **REST API:**
285
+ - `GET /bookmarks/remote/status` - Sync status and stats
286
+ - `GET /bookmarks/remote` - List remote bookmarks
287
+ - `POST /bookmarks/remote/subscribe` - Subscribe to a node
288
+ - `POST /bookmarks/remote/unsubscribe` - Unsubscribe from a node
289
+ - `POST /bookmarks/remote/publish` - Publish your bookmarks
290
+
291
+ #### 🔑 DOKO Revocation (Key Compromise Recovery)
292
+
293
+ Emergency revocation system for compromised DOKO identities.
294
+
295
+ **New Class: `DOKORevocation`**
296
+ - **Self-revocation**: Sign revocation with your own key (if available)
297
+ - **Emergency revocation**: Pre-generated "break-glass" certificates
298
+ - **Verification**: Validate revocation certificates with ML-DSA
299
+ - **Broadcast**: Share revocations via gossip to prevent trust in compromised DOKOs
300
+
301
+ **Revocation Reasons:**
302
+ - `KEY_COMPROMISED` - Private key leaked or stolen
303
+ - `DOKO_SUPERSEDED` - Replaced by new DOKO
304
+ - `IDENTITY_RETIRED` - Voluntary retirement
305
+ - `LOST_ACCESS` - Lost access to private key
306
+ - `AFFILIATION_ENDED` - Left organization
307
+
308
+ **Usage:**
309
+ ```javascript
310
+ // Generate emergency cert when creating DOKO (store offline!)
311
+ const emergencyCert = DOKORevocation.generateEmergencyCertificate(doko, privateKey);
312
+
313
+ // Self-revoke if key is compromised but still accessible
314
+ const revocation = DOKORevocation.createSelfRevocation(doko, privateKey, 'key_compromised');
315
+
316
+ // Activate emergency revocation if key is lost
317
+ DOKORevocation.activateEmergencyRevocation(emergencyCert);
318
+
319
+ // Check if a DOKO is revoked
320
+ const status = DOKORevocation.isRevoked(dokoId);
321
+ ```
322
+
323
+ #### ✅ Comprehensive Test Coverage
324
+
325
+ **352 tests across all modules:**
326
+
327
+ | Suite | Framework | Tests |
328
+ |-------|-----------|-------|
329
+ | Oracle | Node.js test runner | 98 |
330
+ | Protocol | Node.js test runner | 56 |
331
+ | Multi-Node | Node.js test runner | 18 |
332
+ | Security | Vitest | 180 |
333
+ | **Total** | | **352** |
334
+
335
+ **New Test Files:**
336
+ - `protocol/tests/yak-protocol.test.js` - 56 tests for URL parsing, bookmarks, DOKO integration
337
+ - `tests/multi-node.test.js` - 18 tests for cross-node sync with mock network
338
+
339
+ #### 🎨 Dashboard Improvements
340
+
341
+ - **Bookmarks Panel**: Add, list, remove local bookmarks
342
+ - **Remote Bookmarks Panel**: Subscribe, publish, view mesh-synced bookmarks
343
+ - **Version**: Updated to v2.2.0
344
+
345
+ ---
346
+
347
+ ## [2.1.0] - 2026-01-18
348
+
349
+ ### ✨ YAK:// Protocol v2.1.0 - Bookmarks, SSL Binding & Domain Transfers
350
+
351
+ This release completes Phase 2 of the YAK:// protocol implementation with local bookmarks, SSL/TLS certificate binding, and secure domain transfer workflows.
352
+
353
+ #### 🔖 Local Bookmarks (Phase 2)
354
+
355
+ Personal "pet names" for YAK:// addresses. No global registry needed - bookmarks are local to your node.
356
+
357
+ **Features:**
358
+ - **BookmarkManager**: Manages local bookmarks stored in `data/bookmarks.json`
359
+ - **URL Resolution**: Bookmarks are resolved after builtins, before content hashes
360
+ - **CLI Commands**: Full bookmark management via CLI
361
+ - `yakmesh protocol bookmark add <name> <target>` - Add bookmark
362
+ - `yakmesh protocol bookmark list` - List all bookmarks
363
+ - `yakmesh protocol bookmark get <name>` - Get bookmark details
364
+ - `yakmesh protocol bookmark rm <name>` - Remove bookmark
365
+ - **REST API**: `/bookmarks` endpoints for programmatic access
366
+ - `GET /bookmarks` - List all bookmarks
367
+ - `GET /bookmarks/:name` - Get specific bookmark
368
+ - `POST /bookmarks` - Add bookmark
369
+ - `DELETE /bookmarks/:name` - Remove bookmark
370
+
371
+ **Usage:**
372
+ ```bash
373
+ # Add a bookmark
374
+ yakmesh protocol bookmark add docs yak://site/docs
375
+
376
+ # Use the bookmark
377
+ yakmesh protocol open yak://docs
378
+
379
+ # Test resolution
380
+ yakmesh protocol test yak://docs
381
+ # → http://localhost:3000/site/docs
382
+ ```
383
+
384
+ #### 🔐 SSL/TLS Certificate Binding
385
+
386
+ Bind SSL certificates to DOKO identities for enhanced domain verification.
387
+
388
+ **New Class: `DOKOCertBinding`**
389
+ - `computeFingerprint(cert)` - SHA-256 fingerprint from PEM or DER certificate
390
+ - `createBinding(options)` - Create SSL binding for a domain
391
+ - `addBinding(doko, binding)` - Add binding to DOKO extensions
392
+ - `verifyBinding(binding, cert)` - Verify certificate matches binding
393
+ - `getBindingForDomain(doko, domain)` - Get binding for specific domain
394
+ - `validateBindings(doko)` - Validate all bindings (expiration, etc.)
395
+
396
+ **Cryptographic Chain:**
397
+ ```
398
+ Domain → SSL Certificate → DOKO Identity → Mesh Verification
399
+ ```
400
+
401
+ **19 tests** covering fingerprint computation, binding management, and verification.
402
+
403
+ #### 🔄 Domain Transfer Workflow
404
+
405
+ Secure ownership transfer of domains and DOKO-bound assets.
406
+
407
+ **New Class: `DOKOTransfer`**
408
+ - `createRequest(options)` - Create transfer request with expiration
409
+ - `authorize(request, signature, nodeId)` - Owner authorizes transfer
410
+ - `reject(request, reason)` - Owner rejects transfer
411
+ - `cancel(request)` - Requester cancels pending transfer
412
+ - `verifyAuthorization(transfer, publicKey)` - Verify owner signature
413
+ - `complete(transfer, toNodeId)` - Complete transfer with proof
414
+ - `createProof(completedTransfer)` - Generate mesh-verifiable proof
415
+
416
+ **Transfer Flow:**
417
+ ```
418
+ New Owner → Request → Current Owner → Authorize →
419
+ Mesh Verifies → Complete → Ownership Updated
420
+ ```
421
+
422
+ **Transfer States:** `pending`, `authorized`, `completed`, `rejected`, `expired`, `cancelled`
423
+
424
+ **Transfer Types:** `domain`, `website`, `asset`
425
+
426
+ **19 tests** covering request creation, state transitions, completion, and proof validation.
427
+
428
+ #### 📊 Test Results
429
+
430
+ | Test Suite | Tests | Status |
431
+ |------------|-------|--------|
432
+ | Oracle Tests | 98 | ✅ Pass |
433
+ | Security Tests | 152 | ✅ Pass |
434
+ | DOKO Identity | 60 | ✅ Pass |
435
+ | **Total** | **310** | ✅ All Pass |
436
+
437
+ #### 🔧 Other Changes
438
+
439
+ - Updated protocol version to 2.1.0
440
+ - Fixed regex in DOKO ID format test (mixed case shortId)
441
+ - Improved BookmarkManager normalization (simple `/` prefix)
442
+
443
+ ---
444
+
445
+ ## [2.0.1] - 2026-01-18
446
+
447
+ ### 🔧 Security Patch & Export Completeness
448
+
449
+ This patch release fixes critical ML-DSA-65 argument order bugs discovered during post-release audit.
450
+
451
+ #### 🐛 Bug Fixes
452
+
453
+ ##### ML-DSA-65 Argument Order (CRITICAL)
454
+ Fixed incorrect argument order in two files where the noble-post-quantum API was used incorrectly:
455
+
456
+ - **`oracle/module-sealer.js`**: Fixed `sign()` and `verify()` argument order
457
+ - `sign(secretKey, message)` → `sign(message, secretKey)` ✅
458
+ - `verify(publicKey, message, signature)` → `verify(signature, message, publicKey)` ✅
459
+
460
+ - **`mesh/nakpak-routing.js`**: Fixed `sign()` and `verify()` argument order
461
+ - Same corrections as above
462
+
463
+ **Impact**: Module attestations and NakPak routing signatures were failing validation.
464
+
465
+ ##### JSON Serialization in DOKO Identity
466
+ Fixed `getSignableBytes()` to properly serialize nested objects using recursive key sorting.
467
+
468
+ #### ✨ New Exports
469
+
470
+ Added missing module exports to `package.json`:
471
+
472
+ | Export Path | Module |
473
+ |-------------|--------|
474
+ | `./security/khata-protocol` | KHATA peer endorsement protocol |
475
+ | `./security/mesh-auth` | Mesh authentication |
476
+ | `./identity/node-key` | Node key management |
477
+ | `./mesh/annex` | ANNEX encrypted P2P channels |
478
+ | `./mesh/temporal-encoder` | Temporal encoding utilities |
479
+
480
+ #### 📋 Release Process
481
+
482
+ Added `RELEASE_CHECKLIST.md` with pre-release verification steps including:
483
+ - Cryptographic API argument order verification
484
+ - Export file existence checks
485
+ - Documentation accuracy review
486
+
487
+ ---
488
+
5
489
  ## [2.0.0] - 2026-01-18
6
490
 
7
491
  ### 🧭 NAMCHE Gateway & 📜 DOKO Identity — The "Sherpa Security Stack"
package/README.md CHANGED
@@ -51,15 +51,30 @@ In an era where traditional ECDSA is increasingly vulnerable and network jitter
51
51
  - ⏱️ **Precision Timing** - Support for atomic clocks, GPS, PTP, NTP
52
52
  - 🔌 **Plugin Architecture** - Adapters for any database or API
53
53
  - 🛡️ **Phase Modulation** - Time-based anti-replay protection
54
+ - 🌍 **Geographic Exclusion** - Speed-of-light physics prove where nodes CANNOT be
54
55
 
55
- ### v2.0 — The Sherpa Security Stack
56
+ ### v2.5 — The Complete Stack
56
57
 
58
+ **Identity & Trust:**
57
59
  - 🧭 **NAMCHE Gateway** - 7-gate mathematical verification (no CA required)
58
60
  - 📜 **DOKO Identity** - Self-sovereign identity documents verified by mesh
61
+ - 🏆 **Trust Tiers** - ORACLE/ANCHOR/SENTINEL/PARTICIPANT hierarchy
62
+ - 🔬 **Hardware Attestation** - AES-NI timing proves real silicon
63
+ - ⚖️ **Silicon Parity** - "One silicon = one vote" anti-farm defense
64
+ - ⚠️ **Strike System** - Three strikes with hardware fingerprint tracking
65
+
66
+ **Networking:**
59
67
  - 🏔️ **SHERPA Discovery** - Decentralized peer discovery via public web beacons
60
68
  - 🎒 **NAKPAK Routing** - Post-quantum onion routing for anonymity
61
69
  - 🔐 **ANNEX Channels** - ML-KEM768 encrypted P2P with perfect forward secrecy
62
- - 🤝 **Hybrid Trust** - Multi-factor trust combining crypto + behavior + social proof
70
+ - 🔗 **YAK:// Protocol** - Mesh-native URL scheme with bookmarks
71
+
72
+ **Advanced:**
73
+ - 🌍 **Geographic Proof** - Speed-of-light exclusion zones
74
+ - 🕵️ **Sybil Detection** - Graph analysis for fake identity clusters
75
+ - 📡 **ECHO Ranging** - Privacy-preserving topology discovery
76
+ - 💓 **PULSE Heartbeat** - Liveness detection and partition recovery
77
+ - 🚨 **BEACON Alerts** - Priority emergency broadcast
63
78
 
64
79
  ## Quick Start
65
80
 
@@ -104,7 +119,8 @@ yakmesh/
104
119
  │ ├── doko-identity.js # Self-sovereign identity
105
120
  │ ├── hybrid-trust.js # Multi-factor trust scoring
106
121
  │ ├── tls-binding.js # mTLS certificate binding
107
- └── domain-consensus.js # Mesh-verified domains
122
+ ├── domain-consensus.js # Mesh-verified domains
123
+ │ └── geo-proof.js # Speed-of-light geographic exclusion
108
124
  ├── oracle/ # Self-verifying validation engine
109
125
  ├── mesh/ # WebSocket P2P networking
110
126
  │ ├── sherpa-discovery.js # Decentralized peer discovery
@@ -159,6 +175,72 @@ class MyAdapter extends BaseAdapter {
159
175
 
160
176
  - `@yakmesh/adapter-peerquanta` - PeerQuanta phpBB marketplace
161
177
 
178
+ ## v2.2.0 — YAK:// Protocol & Identity Recovery
179
+
180
+ ### 🔗 YAK:// Protocol
181
+
182
+ Custom URL protocol for mesh-native addressing. Escape HTTP entirely!
183
+
184
+ ```bash
185
+ # Built-in routes
186
+ yak://dashboard # Node dashboard
187
+ yak://peers # Connected peers
188
+ yak://content/<hash> # Content by hash
189
+
190
+ # Personal bookmarks (pet names)
191
+ yakmesh bookmark add alice /site/alice-homepage
192
+ yak://alice # Opens your bookmark
193
+ ```
194
+
195
+ ### 📚 Remote Bookmarks
196
+
197
+ Share bookmark lists between nodes via gossip protocol:
198
+
199
+ ```javascript
200
+ import { getRemoteBookmarkSync } from 'yakmesh/protocol/yak-protocol';
201
+
202
+ const sync = getRemoteBookmarkSync({ nodeId: 'my-node' });
203
+
204
+ // Subscribe to another node's bookmarks
205
+ sync.subscribe('trusted-node-id');
206
+
207
+ // Publish your bookmarks to the mesh
208
+ sync.publish('my-bookmarks', ['project', 'docs', 'friends']);
209
+
210
+ // Resolve remote bookmarks
211
+ sync.resolveRemote('alice'); // Returns target from subscribed node
212
+ ```
213
+
214
+ ### 🔐 DOKO Revocation
215
+
216
+ Key compromise recovery with self-revocation and emergency "break-glass" certificates:
217
+
218
+ ```javascript
219
+ import { DOKORevocation, REVOCATION_REASONS } from 'yakmesh/security/doko-identity';
220
+
221
+ const revocation = new DOKORevocation({ generator, nodeId });
222
+
223
+ // Normal self-revocation
224
+ const cert = revocation.revoke(dokoId, REVOCATION_REASONS.KEY_COMPROMISED, privateKey);
225
+
226
+ // Emergency revocation (primary key compromised, use backup)
227
+ const emergencyCert = revocation.createEmergencyCertificate(
228
+ dokoId,
229
+ REVOCATION_REASONS.KEY_COMPROMISED,
230
+ backupPrivateKey
231
+ );
232
+
233
+ // Check revocation status
234
+ revocation.isRevoked(dokoId); // true
235
+ ```
236
+
237
+ **Revocation Reasons:**
238
+ - `KEY_COMPROMISED` - Private key was exposed
239
+ - `DOKO_SUPERSEDED` - Replaced with new identity
240
+ - `IDENTITY_RETIRED` - No longer in use
241
+ - `LOST_ACCESS` - Cannot access keys
242
+ - `AFFILIATION_ENDED` - Organization membership ended
243
+
162
244
  ## API Endpoints
163
245
 
164
246
  | Endpoint | Method | Description |
@@ -171,6 +253,20 @@ class MyAdapter extends BaseAdapter {
171
253
  | `/time/status` | GET | Time source detection |
172
254
  | `/time/capabilities` | GET | Time oracle eligibility |
173
255
  | `/connect` | POST | Connect to a peer |
256
+ | `/bookmarks` | GET | List local bookmarks |
257
+ | `/bookmarks` | POST | Add a bookmark |
258
+ | `/bookmarks/:name` | DELETE | Remove a bookmark |
259
+ | `/bookmarks/remote` | GET | List remote bookmarks |
260
+ | `/bookmarks/remote/subscribe` | POST | Subscribe to node |
261
+ | `/bookmarks/remote/publish` | POST | Publish bookmark list |
262
+ | `/bookmarks/remote/status` | GET | Remote sync status |
263
+ | `/security/doko/stats` | GET | DOKO identity stats |
264
+ | `/security/namche/gates` | GET | Gateway verification status |
265
+ | `/geo/status` | GET | Geographic proof status |
266
+ | `/geo/landmarks` | GET/POST | List or add landmarks |
267
+ | `/geo/zones` | GET | List exclusion zones |
268
+ | `/geo/prove` | POST | Generate geographic proof |
269
+ | `/geo/verify` | POST | Verify another node's claims |
174
270
 
175
271
  ## Pro Features
176
272