@wenathlan/saddle 2.1.6 → 2.1.7

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 (291) hide show
  1. package/Dockerfile +158 -60
  2. package/LICENSE +0 -0
  3. package/README.md +68 -53
  4. package/alternatives.ts +0 -0
  5. package/biome.jsonc +134 -0
  6. package/boards.json +2 -2
  7. package/compute.ts +4 -4
  8. package/cores.json +2 -2
  9. package/docker.config +37 -9
  10. package/docs/.gitkeep +0 -0
  11. package/docs/actionrecorder.md +0 -0
  12. package/docs/actionsincident.md +0 -0
  13. package/docs/alternatives.md +0 -0
  14. package/docs/architecture.md +0 -0
  15. package/docs/{architecture-1.8.19.md → architecture1819.md} +0 -0
  16. package/docs/{architecture-1.8.19.mmd → architecture1819.mmd} +0 -0
  17. package/docs/artifactavailability.md +2 -2
  18. package/docs/{artifactresearch-1.8.9.md → artifactresearch189.md} +0 -0
  19. package/docs/{batches-1816-1820.md → batches1816to1820.md} +0 -0
  20. package/docs/{brancharchive-2026-08-18.md → brancharchive20260818.md} +0 -0
  21. package/docs/branchaudit.md +0 -0
  22. package/docs/browser.md +0 -0
  23. package/docs/capabilityreport.md +0 -0
  24. package/docs/comparativeaudit.md +0 -0
  25. package/docs/consolidation.md +0 -0
  26. package/docs/{containerplatforms-1.8.17.md → containerplatforms1817.md} +0 -0
  27. package/docs/{containerplatforms-2.1.0.md → containerplatforms210.md} +1 -1
  28. package/docs/{documentmap-1.8.12.md → documentmap1812.md} +1 -1
  29. package/docs/{e2ugh-engine.md → e2ughengine.md} +0 -0
  30. package/docs/ecosystemplan.md +0 -0
  31. package/docs/enginearchitecture.md +0 -0
  32. package/docs/extension.md +0 -0
  33. package/docs/featureaudit.md +0 -0
  34. package/docs/{flatbuildresearch-1.8.11.md → flatbuildresearch1811.md} +0 -0
  35. package/docs/gapmatrix.md +0 -0
  36. package/docs/hardware.md +0 -0
  37. package/docs/libraryapi.md +0 -0
  38. package/docs/{licenseaudit-1.8.12.md → licenseaudit1812.md} +0 -0
  39. package/docs/logs/examplesession.json +54 -0
  40. package/docs/memoryengine.md +0 -0
  41. package/docs/{mobileconversionresearch-1.8.10.md → mobileconversionresearch1810.md} +0 -0
  42. package/docs/modes.md +0 -0
  43. package/docs/{nativeidentityresearch-1.8.11.md → nativeidentityresearch1811.md} +0 -0
  44. package/docs/{native-wrappers.md → nativewrappers.md} +0 -0
  45. package/docs/ninetymodalities.md +191 -0
  46. package/docs/optimization.md +0 -0
  47. package/docs/packageaudit185.md +0 -0
  48. package/docs/performance.md +0 -0
  49. package/docs/{planning.1.8.18.md → planning1818.md} +0 -0
  50. package/docs/{planning.1.8.19.md → planning1819.md} +0 -0
  51. package/docs/planningengine.md +186 -0
  52. package/docs/planningninety.md +391 -0
  53. package/docs/platformpipelineaudit.md +0 -0
  54. package/docs/platformpipelines.md +0 -0
  55. package/docs/productindex.md +0 -0
  56. package/docs/registryresearch.md +0 -0
  57. package/docs/release.md +0 -0
  58. package/docs/release17notes.md +0 -0
  59. package/docs/release181notes.md +0 -0
  60. package/docs/release182notes.md +0 -0
  61. package/docs/release184notes.md +0 -0
  62. package/docs/release185notes.md +0 -0
  63. package/docs/release18notes.md +0 -0
  64. package/docs/releaseassets.md +0 -0
  65. package/docs/{releasenotes-1.8.12.md → releasenotes1812.md} +0 -0
  66. package/docs/{releasenotes-1.8.13.md → releasenotes1813.md} +2 -2
  67. package/docs/{releasenotes-1.8.14.md → releasenotes1814.md} +1 -1
  68. package/docs/{releasenotes-1.8.15.md → releasenotes1815.md} +0 -0
  69. package/docs/{releasenotes-1.8.16.md → releasenotes1816.md} +0 -0
  70. package/docs/{releasenotes-1.8.17.md → releasenotes1817.md} +0 -0
  71. package/docs/{releasenotes-1.8.18.md → releasenotes1818.md} +0 -0
  72. package/docs/{releasenotes-1.8.19.md → releasenotes1819.md} +0 -0
  73. package/docs/{reorganization-1.8.8.md → reorganization188.md} +0 -0
  74. package/docs/{reorganization-1.8.9.md → reorganization189.md} +0 -0
  75. package/docs/{repo-analysis-1.8.21.json → repoanalysis1821.json} +0 -0
  76. package/docs/{repo-candidates-1.8.21.jsonl → repocandidates1821.jsonl} +0 -0
  77. package/docs/{repo-research-1.8.16.md → reporesearch1816.md} +0 -0
  78. package/docs/{repo-research-1.8.21.md → reporesearch1821.md} +0 -0
  79. package/docs/{repo-selected-1.8.21.json → reposelected1821.json} +0 -0
  80. package/docs/{repo-synthesis-1.8.16.md → reposynthesis1816.md} +1 -1
  81. package/docs/{repo-synthesis-1.8.21.md → reposynthesis1821.md} +0 -0
  82. package/docs/{research-1.8.18-isolation.md → research1818isolation.md} +0 -0
  83. package/docs/{research-1.8.19-virtual-browser.md → research1819virtualbrowser.md} +0 -0
  84. package/docs/roadmapp2p3.md +0 -0
  85. package/docs/s3compatible.md +0 -0
  86. package/docs/{scanningresearch-1.8.11.md → scanningresearch1811.md} +0 -0
  87. package/docs/security.md +0 -0
  88. package/docs/{securityaudit-1.8.7.md → securityaudit187.md} +0 -0
  89. package/docs/{securityreferences-1.8.11.md → securityreferences1811.md} +0 -0
  90. package/docs/{securityresearch-1.8.11.md → securityresearch1811.md} +0 -0
  91. package/docs/{signingresearch-1.8.12.md → signingresearch1812.md} +0 -0
  92. package/docs/signingwithoutcertificates.md +0 -0
  93. package/docs/signpathapplication.md +0 -0
  94. package/docs/sitemap.md +0 -0
  95. package/docs/{tauri-glib-risk-1.8.11.md → tauriglibrisk1811.md} +0 -0
  96. package/docs/todo.md +2 -2
  97. package/docs/{todo-1.8.15.md → todo1815.md} +1 -1
  98. package/docs/{todo-1.8.16.md → todo1816.md} +5 -5
  99. package/docs/{todo-1.8.18.md → todo1818.md} +0 -0
  100. package/docs/{todo-1.8.19.md → todo1819.md} +0 -0
  101. package/docs/{toolchainresearch-1.8.9.md → toolchainresearch189.md} +0 -0
  102. package/docs/toolchains.md +0 -0
  103. package/docs/usage.md +0 -0
  104. package/docs/viability.md +0 -0
  105. package/docs/virtualization.md +0 -0
  106. package/docs/{web-duplicatecleanup.md → webduplicatecleanup.md} +0 -0
  107. package/docs/{web-ideas.md → webideas.md} +0 -0
  108. package/docs/{workflowimprovements-2026-08-19.md → workflowimprovements20260819.md} +0 -0
  109. package/docs/workflowinputs.md +0 -0
  110. package/docs/workflowoperations.md +0 -0
  111. package/docs/workloadlaw.md +104 -0
  112. package/gpumonitor.cpp +0 -0
  113. package/gpus.json +1 -1
  114. package/index.ts +19 -10
  115. package/manifest.json +20 -0
  116. package/modalityregistry.ts +1493 -0
  117. package/mttg.config +1 -1
  118. package/orchestrator.ts +52 -15
  119. package/package.json +192 -99
  120. package/passage.config +0 -0
  121. package/performance.ts +0 -0
  122. package/processors.json +1 -1
  123. package/qemu.config +2 -2
  124. package/qemubridge.py +0 -0
  125. package/quantum.ts +0 -0
  126. package/render.ts +0 -0
  127. package/scheduler.ts +0 -0
  128. package/security.ts +0 -0
  129. package/tiers.ts +9 -3
  130. package/tsconfig.json +21 -11
  131. package/virtualcpu.ts +1 -0
  132. package/virtualgpu.ts +1 -0
  133. package/virtualhardware.c +0 -0
  134. package/virtualhardware.json +2 -2
  135. package/virtualization.ts +0 -0
  136. package/virtualizationcore.cpp +0 -0
  137. package/virtualmemory.ts +0 -0
  138. package/vm.config.json +2 -2
  139. package/biome.json +0 -151
  140. package/dist/acquisition.d.ts +0 -359
  141. package/dist/acquisition.d.ts.map +0 -1
  142. package/dist/acquisition.js +0 -629
  143. package/dist/acquisition.js.map +0 -1
  144. package/dist/alternatives.d.ts +0 -509
  145. package/dist/alternatives.d.ts.map +0 -1
  146. package/dist/alternatives.js +0 -951
  147. package/dist/alternatives.js.map +0 -1
  148. package/dist/automation.d.ts +0 -426
  149. package/dist/automation.d.ts.map +0 -1
  150. package/dist/automation.js +0 -561
  151. package/dist/automation.js.map +0 -1
  152. package/dist/browser.d.ts +0 -562
  153. package/dist/browser.d.ts.map +0 -1
  154. package/dist/browser.js +0 -1057
  155. package/dist/browser.js.map +0 -1
  156. package/dist/cli.d.ts +0 -17
  157. package/dist/cli.d.ts.map +0 -1
  158. package/dist/cli.js +0 -169
  159. package/dist/cli.js.map +0 -1
  160. package/dist/communication.d.ts +0 -192
  161. package/dist/communication.d.ts.map +0 -1
  162. package/dist/communication.js +0 -418
  163. package/dist/communication.js.map +0 -1
  164. package/dist/compute.d.ts +0 -1161
  165. package/dist/compute.d.ts.map +0 -1
  166. package/dist/compute.js +0 -2273
  167. package/dist/compute.js.map +0 -1
  168. package/dist/distribution.d.ts +0 -529
  169. package/dist/distribution.d.ts.map +0 -1
  170. package/dist/distribution.js +0 -811
  171. package/dist/distribution.js.map +0 -1
  172. package/dist/docs/example-localjob.d.ts +0 -2
  173. package/dist/docs/example-localjob.d.ts.map +0 -1
  174. package/dist/docs/example-localjob.js +0 -15
  175. package/dist/docs/example-localjob.js.map +0 -1
  176. package/dist/docs/example-publicapi.d.ts +0 -2
  177. package/dist/docs/example-publicapi.d.ts.map +0 -1
  178. package/dist/docs/example-publicapi.js +0 -7
  179. package/dist/docs/example-publicapi.js.map +0 -1
  180. package/dist/execution.d.ts +0 -530
  181. package/dist/execution.d.ts.map +0 -1
  182. package/dist/execution.js +0 -761
  183. package/dist/execution.js.map +0 -1
  184. package/dist/format.d.ts +0 -19
  185. package/dist/format.d.ts.map +0 -1
  186. package/dist/format.js +0 -60
  187. package/dist/format.js.map +0 -1
  188. package/dist/foundation.d.ts +0 -176
  189. package/dist/foundation.d.ts.map +0 -1
  190. package/dist/foundation.js +0 -309
  191. package/dist/foundation.js.map +0 -1
  192. package/dist/index.d.ts +0 -735
  193. package/dist/index.d.ts.map +0 -1
  194. package/dist/index.js +0 -1020
  195. package/dist/index.js.map +0 -1
  196. package/dist/integration.d.ts +0 -236
  197. package/dist/integration.d.ts.map +0 -1
  198. package/dist/integration.js +0 -236
  199. package/dist/integration.js.map +0 -1
  200. package/dist/intelligence.d.ts +0 -94
  201. package/dist/intelligence.d.ts.map +0 -1
  202. package/dist/intelligence.js +0 -145
  203. package/dist/intelligence.js.map +0 -1
  204. package/dist/isolation.d.ts +0 -129
  205. package/dist/isolation.d.ts.map +0 -1
  206. package/dist/isolation.js +0 -96
  207. package/dist/isolation.js.map +0 -1
  208. package/dist/media.d.ts +0 -344
  209. package/dist/media.d.ts.map +0 -1
  210. package/dist/media.js +0 -986
  211. package/dist/media.js.map +0 -1
  212. package/dist/modes.d.ts +0 -359
  213. package/dist/modes.d.ts.map +0 -1
  214. package/dist/modes.js +0 -134
  215. package/dist/modes.js.map +0 -1
  216. package/dist/operations.d.ts +0 -67
  217. package/dist/operations.d.ts.map +0 -1
  218. package/dist/operations.js +0 -94
  219. package/dist/operations.js.map +0 -1
  220. package/dist/orchestrator.d.ts +0 -1339
  221. package/dist/orchestrator.d.ts.map +0 -1
  222. package/dist/orchestrator.js +0 -4308
  223. package/dist/orchestrator.js.map +0 -1
  224. package/dist/packager/targetcli.js +0 -4
  225. package/dist/performance.d.ts +0 -416
  226. package/dist/performance.d.ts.map +0 -1
  227. package/dist/performance.js +0 -827
  228. package/dist/performance.js.map +0 -1
  229. package/dist/quantum.d.ts +0 -810
  230. package/dist/quantum.d.ts.map +0 -1
  231. package/dist/quantum.js +0 -2073
  232. package/dist/quantum.js.map +0 -1
  233. package/dist/render.d.ts +0 -381
  234. package/dist/render.d.ts.map +0 -1
  235. package/dist/render.js +0 -1073
  236. package/dist/render.js.map +0 -1
  237. package/dist/scheduler.d.ts +0 -596
  238. package/dist/scheduler.d.ts.map +0 -1
  239. package/dist/scheduler.js +0 -1259
  240. package/dist/scheduler.js.map +0 -1
  241. package/dist/security.d.ts +0 -501
  242. package/dist/security.d.ts.map +0 -1
  243. package/dist/security.js +0 -1170
  244. package/dist/security.js.map +0 -1
  245. package/dist/server.d.ts +0 -21
  246. package/dist/server.d.ts.map +0 -1
  247. package/dist/server.js +0 -52
  248. package/dist/server.js.map +0 -1
  249. package/dist/tiers.d.ts +0 -1002
  250. package/dist/tiers.d.ts.map +0 -1
  251. package/dist/tiers.js +0 -2165
  252. package/dist/tiers.js.map +0 -1
  253. package/dist/virtual.d.ts +0 -641
  254. package/dist/virtual.d.ts.map +0 -1
  255. package/dist/virtual.js +0 -1285
  256. package/dist/virtual.js.map +0 -1
  257. package/dist/virtualcpu.d.ts +0 -316
  258. package/dist/virtualcpu.d.ts.map +0 -1
  259. package/dist/virtualcpu.js +0 -1180
  260. package/dist/virtualcpu.js.map +0 -1
  261. package/dist/virtualgpu.d.ts +0 -345
  262. package/dist/virtualgpu.d.ts.map +0 -1
  263. package/dist/virtualgpu.js +0 -1000
  264. package/dist/virtualgpu.js.map +0 -1
  265. package/dist/virtualization.d.ts +0 -607
  266. package/dist/virtualization.d.ts.map +0 -1
  267. package/dist/virtualization.js +0 -1187
  268. package/dist/virtualization.js.map +0 -1
  269. package/dist/virtualmemory.d.ts +0 -818
  270. package/dist/virtualmemory.d.ts.map +0 -1
  271. package/dist/virtualmemory.js +0 -1796
  272. package/dist/virtualmemory.js.map +0 -1
  273. package/dist/vitest.config.d.ts +0 -3
  274. package/dist/vitest.config.d.ts.map +0 -1
  275. package/dist/vitest.config.js +0 -26
  276. package/dist/vitest.config.js.map +0 -1
  277. package/dist/webscrape.d.ts +0 -720
  278. package/dist/webscrape.d.ts.map +0 -1
  279. package/dist/webscrape.js +0 -2697
  280. package/dist/webscrape.js.map +0 -1
  281. package/docs/CONVERSA.txt +0 -1523
  282. package/docs/architecture-1.8.19.png +0 -0
  283. package/docs/assets/architecture.svg +0 -45
  284. package/docs/assets/saddlemark.svg +0 -13
  285. package/docs/example-localjob.ts +0 -15
  286. package/docs/example-publicapi.ts +0 -7
  287. package/docs/saddle.archive.1.8.17.tar.gz.gpg +0 -0
  288. package/media.ts +0 -1337
  289. package/web/manifest.json +0 -30
  290. package/web/readme.md +0 -383
  291. package/web/tsconfig.json +0 -25
package/mttg.config CHANGED
@@ -2,7 +2,7 @@
2
2
  "meta": {
3
3
  "name": "mttg.config",
4
4
  "title": "saddle - MTTG Multi-Tenant Task Groups (cgroups v2 + tenants + transcode) with MTTCG (QEMU TCG) section",
5
- "version": "2.1.6",
5
+ "version": "2.0.154",
6
6
  "date": "2026-08-22",
7
7
  "language": "en",
8
8
  "conceptSeparation": "MTTG = Multi-Tenant Task Groups (cgroup v2 cpu.weight/cpuset/memory/io/pids/hugetlb/rdma + tenants + transcode pipelines). MTTCG = QEMU Multi-Threaded TCG (one host thread per vCPU under TCG). Both live here as DISTINCT sections; MTTCG accel flags also in qemu.config#mttcg.",
package/orchestrator.ts CHANGED
@@ -91,7 +91,10 @@ const runtimecatalog = {
91
91
 
92
92
  /** toolchain stack reported by dumpstate and the version probe. */
93
93
  const stackcatalog = {
94
- nodecurrent: '26.7.0',
94
+ /* walks with the .nvmrc pin the maintenance rung stamps — the 2.0.133
95
+ publish regression answered the engine advertising a node the repository
96
+ retired, so the anchor rides the pin lane now (never ahead of it) */
97
+ nodecurrent: '26.13.0',
95
98
  nodelts: '24.19.0',
96
99
  typescript: '7.0.2',
97
100
  qemu: runtimecatalog.qemu,
@@ -1276,8 +1279,12 @@ class firecrackerruntime extends runtimestrategy {
1276
1279
  * the class also absorbs spawnqemu from the Meta source: the vm plane
1277
1280
  * launches qemu with monitor and qmp unix sockets, a numa pin line,
1278
1281
  * vfio devices for every gpu assignment, extra args from qemu.config
1279
- * and, when the binary is absent (CI), a "sleep 3600" stand-in process
1280
- * so scheduling and lifecycle still exercise end to end.
1282
+ * and — the honest-boot law of the engine-real rung — when the qemu
1283
+ * binary is absent the spawn refuses with ERR_QEMU_ABSENT (the error
1284
+ * names the binary the host must carry) so a vm record never claims
1285
+ * running over a stand-in process: scheduling and lifecycle still
1286
+ * exercise end to end in CI through the argv builders and the create /
1287
+ * destroy planes, never through a faked boot.
1281
1288
  */
1282
1289
  class qemuruntime extends runtimestrategy {
1283
1290
  override readonly name: sandboxruntime = 'qemu';
@@ -1343,13 +1350,24 @@ class qemuruntime extends runtimestrategy {
1343
1350
 
1344
1351
  /**
1345
1352
  * builds the vm plane argv: strategy flags plus the name/uuid, dual
1346
- * unix sockets, virtio balloon, the per-numa bridge netdev, the numa
1347
- * pin line and one vfio-pci device per assigned gpu.
1353
+ * unix sockets, virtio balloon, the numa pin line and one vfio-pci
1354
+ * device per assigned gpu. the netdev answers the honest network law:
1355
+ * the per-numa bridge (br-vhe-N) rides when the interface exists on
1356
+ * the host (the privileged deployments the bridge plane owns), and a
1357
+ * host without the interface rides user-mode networking (slirp) — a
1358
+ * real qemu network mode that needs no privilege — so the argv a host
1359
+ * without the bridge answers is a bootable argv, never a bridge the
1360
+ * kernel would refuse.
1348
1361
  */
1349
1362
  buildvmcommand(vm: vmrecord, assignments: readonly gpuassignment[]): readonly string[] {
1350
1363
  const kvm = kvmavailable();
1351
1364
  const accel = vm.accel === 'kvm' && kvm ? 'kvm' : 'tcg,thread=multi,tb-size=1024';
1352
1365
  const sockets = this.socketsfor(vm.id);
1366
+ const bridgename = `br-vhe-${vm.numanode}`;
1367
+ const bridgeonhost = existsSync(`/sys/class/net/${bridgename}`);
1368
+ const netdev = bridgeonhost
1369
+ ? `bridge,br=${bridgename},id=net0`
1370
+ : 'user,id=net0';
1353
1371
  const args: string[] = [
1354
1372
  vm.qemubinary,
1355
1373
  '-machine',
@@ -1369,7 +1387,7 @@ class qemuruntime extends runtimestrategy {
1369
1387
  '-device',
1370
1388
  'virtio-balloon-pci,id=balloon0',
1371
1389
  '-netdev',
1372
- `bridge,br=br-vhe-${vm.numanode},id=net0`,
1390
+ netdev,
1373
1391
  '-device',
1374
1392
  'virtio-net-pci,netdev=net0',
1375
1393
  '-display',
@@ -1391,8 +1409,12 @@ class qemuruntime extends runtimestrategy {
1391
1409
 
1392
1410
  /**
1393
1411
  * spawns qemu for a vm record; when the binary does not exist the
1394
- * method spawns "sleep 3600" instead so CI environments without qemu
1395
- * still run the scheduling and lifecycle paths (spawnqemu merge).
1412
+ * method refuses with ERR_QEMU_ABSENT — the honest-boot law of the
1413
+ * engine-real rung: a host without the qemu binary never answers a
1414
+ * stand-in process, the vm record never claims running over a sleep
1415
+ * (startvm catches the refusal, marks the vm failed and publishes the
1416
+ * error, so CI exercises the argv builders and the create / destroy
1417
+ * planes instead of a faked boot).
1396
1418
  */
1397
1419
  async spawn(
1398
1420
  vm: vmrecord,
@@ -1401,14 +1423,23 @@ class qemuruntime extends runtimestrategy {
1401
1423
  ): Promise<qemuprocess> {
1402
1424
  try {
1403
1425
  const sockets = this.socketsfor(vm.id);
1404
- const argv = [...this.buildvmcommand(vm, assignments), '-daemonize'];
1426
+ // the socket seats must exist before the guest opens its servers —
1427
+ // qemu creates the socket files itself, never the parent directory
1428
+ mkdirSync(path.dirname(sockets.qmp), { recursive: true });
1429
+ // the foreground law of the honest-boot rung: the tracked child is
1430
+ // the process that lives as long as the vm — the daemonize flag
1431
+ // would fork the daemon and exit the parent at once (the vm would
1432
+ // read stopped over a live machine), so the spawn rides the
1433
+ // foreground argv the exit callback can own
1434
+ const argv = this.buildvmcommand(vm, assignments);
1405
1435
  const [bin, ...rest] = argv;
1406
- let child: ChildProcess;
1407
- if (existsSync(bin)) {
1408
- child = spawn(bin, rest, { stdio: 'ignore', detached: false });
1409
- } else {
1410
- child = spawn('sleep', ['3600'], { stdio: 'ignore', detached: false });
1436
+ if (!existsSync(bin)) {
1437
+ throw new orchestratorerror(
1438
+ `qemu spawn refused for ${vm.id}: the binary ${bin} is absent from the engine host (the honest-boot law — a vm never runs over a stand-in process)`,
1439
+ 'ERR_QEMU_ABSENT',
1440
+ );
1411
1441
  }
1442
+ const child: ChildProcess = spawn(bin, rest, { stdio: 'ignore', detached: false });
1412
1443
  const pid = child.pid ?? randomInt(1000, 11000);
1413
1444
  const processinfo: qemuprocess = {
1414
1445
  vmid: vm.id,
@@ -1423,6 +1454,12 @@ class qemuruntime extends runtimestrategy {
1423
1454
  });
1424
1455
  return processinfo;
1425
1456
  } catch (error) {
1457
+ // the honest-boot refusal rides through untouched — the code the
1458
+ // law answers (ERR_QEMU_ABSENT) is the code startvm and the vm
1459
+ // record read, never the generic spawn wrap
1460
+ if (error instanceof orchestratorerror) {
1461
+ throw error;
1462
+ }
1426
1463
  throw new orchestratorerror(
1427
1464
  `qemu spawn failed for ${vm.id}: ${errormessage(error)}`,
1428
1465
  'ERR_QEMU_SPAWN',
@@ -4389,7 +4426,7 @@ class orchestrator {
4389
4426
  /**
4390
4427
  * default contents of the flat config files written by start(); the
4391
4428
  * version strings carry the v2 anchors (qemu 11.1.0, docker 29.7.2,
4392
- * node 26.7.0), replacing the stale Meta banners.
4429
+ * node 26.12.0), replacing the stale Meta banners.
4393
4430
  */
4394
4431
  #defaultconfigcontents(): Record<configfilename, string> {
4395
4432
  return {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wenathlan/saddle",
3
- "version": "2.1.6",
3
+ "version": "2.1.7",
4
4
  "description": "binary computing engine that turns distributed storage into a publishable working set carrying the merged virtual-hardware engine (the saddle + e2ugh grand merge)",
5
5
  "type": "module",
6
6
  "private": false,
@@ -11,19 +11,35 @@
11
11
  "module": "./dist/index.js",
12
12
  "browser": "./dist/index.js",
13
13
  "types": "./dist/index.d.ts",
14
- "packageManager": "npm@12.0.2",
14
+ "packageManager": "pnpm@12.3.4",
15
15
  "publishConfig": {
16
16
  "access": "public"
17
17
  },
18
18
  "overrides": {
19
+ "uuid": "^11.1.1",
20
+ "deepmerge-ts": "^8.0.0",
21
+ "esbuild": "^0.28.2",
22
+ "follow-redirects": "^1.16.2",
23
+ "minimatch": "^11.0.3",
24
+ "glob": "^14.0.3",
25
+ "mysql2": "^3.24.6",
26
+ "postcss-selector-parser": "^7.1.6",
27
+ "source-map-js": "1.2.2",
28
+ "proxy-addr": "2.0.8",
29
+ "body-parser": "^2.4.0",
30
+ "fast-uri": "^3.1.9",
31
+ "zod": "^4.6.7",
32
+ "undici": "^7.30.1",
33
+ "katex": "^0.18.2",
34
+ "shell-quote": "^1.11.0",
19
35
  "xcode": {
20
36
  "uuid": "11.1.1"
21
37
  },
22
- "uuid": "^11.1.1"
38
+ "@grpc/grpc-js": "1.14.5"
23
39
  },
24
40
  "repository": {
25
41
  "type": "git",
26
- "url": "https://github.com/wenathlan/saddle.git"
42
+ "url": "https://github.com/wenathlan/devthink"
27
43
  },
28
44
  "bugs": {
29
45
  "url": "https://github.com/wenathlan/saddle/issues"
@@ -37,7 +53,6 @@
37
53
  "virtual gpu",
38
54
  "runner",
39
55
  "storage",
40
- "automation",
41
56
  "llvmpipe",
42
57
  "lavapipe",
43
58
  "rusticl",
@@ -47,8 +62,29 @@
47
62
  "ghcr"
48
63
  ],
49
64
  "engines": {
50
- "node": ">=26.7.0",
51
- "npm": ">=12.0.2"
65
+ "bare": "^1.18.0",
66
+ "bun": "^1.4.2",
67
+ "cargo": ">=1.85.0",
68
+ "chrome": "^16.0.912",
69
+ "cnpm": "^9.4.0",
70
+ "corepack": "^0.35.0",
71
+ "deno": "^2.9.5",
72
+ "dotnet": ">=8.0.0",
73
+ "ecmascript": "^5.0.0",
74
+ "firefox": ">=0.8.0",
75
+ "go": ">=1.24.0",
76
+ "iojs": "^1.0.0",
77
+ "java": ">=17",
78
+ "node": ">=26.13.0 <27",
79
+ "npm": "^12.1.0",
80
+ "pnpm": "^12.6.0",
81
+ "python": ">=3.11.0",
82
+ "rust": ">=1.85.0",
83
+ "teleport": ">=0.2.0",
84
+ "typescript": "^5.8.0",
85
+ "v": "^0.5.2",
86
+ "vscode": "^1.118.0",
87
+ "yarn": "^4.17.1"
52
88
  },
53
89
  "peerDependencies": {
54
90
  "playwright": "^1.63.0"
@@ -75,23 +111,22 @@
75
111
  "./sessions": "./dist/foundation.js",
76
112
  "./modes": "./dist/modes.js",
77
113
  "./mode": "./dist/modes.js",
114
+ "./sandbox": "./dist/sandbox.js",
115
+ "./modalities": "./dist/modalityregistry.js",
116
+ "./workloadlaw": "./dist/workloadlaw.js",
78
117
  "./browser": "./dist/browser.js",
79
118
  "./browser-playwright": "./dist/browser.js",
80
- "./bot": "./dist/automation.js",
81
- "./captcha": "./dist/acquisition.js",
82
119
  "./deploy": "./dist/modes.js",
83
120
  "./extension": "./dist/browser.js",
84
121
  "./server-node": "./dist/server.js",
85
122
  "./sessions-file": "./dist/execution.js",
86
123
  "./sessions-store": "./dist/execution.js",
87
124
  "./queue-persistent": "./dist/execution.js",
88
- "./captcha-evidence": "./dist/acquisition.js",
89
125
  "./hash": "./dist/foundation.js",
90
126
  "./release-assets": "./dist/distribution.js",
91
127
  "./release-verify": "./dist/distribution.js",
92
128
  "./release-evidence": "./dist/distribution.js",
93
129
  "./delivery": "./dist/distribution.js",
94
- "./surface-requirements": "./dist/automation.js",
95
130
  "./worker": "./dist/execution.js",
96
131
  "./binary-archive": "./dist/distribution.js",
97
132
  "./binary-transform": "./dist/distribution.js",
@@ -105,7 +140,6 @@
105
140
  "./virtualization": "./virtualization.ts",
106
141
  "./scheduler": "./scheduler.ts",
107
142
  "./compute": "./compute.ts",
108
- "./media": "./media.ts",
109
143
  "./security": "./security.ts",
110
144
  "./performance": "./performance.ts",
111
145
  "./alternatives": "./alternatives.ts",
@@ -124,7 +158,7 @@
124
158
  },
125
159
  "files": [
126
160
  "dist",
127
- "web/manifest.json",
161
+ "manifest.json",
128
162
  "docs",
129
163
  "README.md",
130
164
  "LICENSE",
@@ -132,7 +166,6 @@
132
166
  "orchestrator.ts",
133
167
  "scheduler.ts",
134
168
  "compute.ts",
135
- "media.ts",
136
169
  "virtualcpu.ts",
137
170
  "virtualmemory.ts",
138
171
  "virtualgpu.ts",
@@ -157,16 +190,16 @@
157
190
  "docker.config",
158
191
  "Dockerfile",
159
192
  "tsconfig.json",
160
- "biome.json",
193
+ "biome.jsonc",
194
+ "modalityregistry.ts",
161
195
  "tiers.ts",
162
196
  "quantum.ts"
163
197
  ],
164
198
  "scripts": {
165
- "build:engine": "node tests/scripts/buildengine.mjs",
199
+ "build:engine": "node scriptsbuildengine.ts",
166
200
  "check": "npm run build:engine && node --check dist/index.js && node --check dist/execution.js && node --check dist/cli.js && node --check dist/browser.js && node --check dist/distribution.js",
167
201
  "formatcheck": "node --import tsx format.ts",
168
- "test": "npm run build:engine && node --import tsx --test tests/engine.test.ts tests/extension.test.ts tests/package.test.ts tests/release.test.ts tests/virtualengine.test.ts tests/features.test.ts tests/media.test.ts tests/render.test.ts tests/simulation.test.ts tests/specs.test.ts tests/virtualcpu.test.ts tests/virtualgpu.test.ts tests/virtualmemory.test.ts tests/web.test.ts tests/workflow.test.ts",
169
- "test:legacy": "vitest run tests/agent-utils.test.ts tests/cache.test.ts tests/chunking.test.ts tests/core.test.ts tests/errors.test.ts tests/llms-txt.test.ts tests/middleware.test.ts tests/proxy.test.ts tests/tokens.test.ts",
202
+ "test": "vitest run",
170
203
  "run": "npm run build:engine && node dist/cli.js",
171
204
  "extension:build": "npm run build:engine && node dist/browser.js",
172
205
  "release:assets": "npm run build:engine && node dist/distribution.js",
@@ -177,16 +210,17 @@
177
210
  "tauri": "npx --yes @tauri-apps/cli@2.11.4",
178
211
  "capacitor:sync:android": "npm run web:build:pages && cap sync android",
179
212
  "capacitor:sync:ios": "npm run web:build:pages && cap sync ios",
180
- "native:check:flat": "node tests/scripts/validateflatnative.mjs",
181
- "web:dev": "vite --host --config web/vite.config.ts",
182
- "web:check": "npm run build:engine && tsc --project web/tsconfig.json --noEmit",
183
- "web:build": "vite build --config web/vite.config.ts",
184
- "web:build:pages": "vite build --config web/vite.config.ts",
213
+ "native:check:flat": "node scriptsvalidateflatnative.ts",
214
+ "web:dev": "vite --host",
215
+ "web:check": "npm run build:engine && tsc --project tsconfig.json --noEmit",
216
+ "web:build": "vite build",
217
+ "web:build:pages": "vite build",
218
+ "web:preview": "vite preview --host",
185
219
  "build": "npm run build:engine",
186
220
  "build:tsc": "tsc -p tsconfig.json --noEmitOnError false",
187
221
  "start": "node --import tsx ./cli.ts plan",
188
222
  "dev": "node --import tsx --watch ./cli.ts",
189
- "web": "node web/server.ts",
223
+ "web": "node webserver.ts",
190
224
  "qemu:bridge": "node ./orchestrator.ts --qemu-bridge",
191
225
  "toolchain:verify": "node --version && npx tsc --version && python3 --version && qemu-system-x86_64 --version || true && docker --version",
192
226
  "dev:tsx": "node --import tsx --watch ./cli.ts",
@@ -198,105 +232,164 @@
198
232
  "format": "biome format --write .",
199
233
  "format:biome": "biome format --write .",
200
234
  "format:check": "biome check .",
201
- "test:watch": "node --test --watch tests/*.test.ts",
202
- "test:coverage": "node --test --experimental-test-coverage tests/*.test.ts",
203
- "test:unit": "node --test tests/*.test.ts",
204
- "test:e2e": "node --test tests/*.test.ts",
235
+ "test:watch": "node --test --watch \"tests/*.test.ts\"",
236
+ "test:coverage": "node --test --experimental-test-coverage \"tests/*.test.ts\"",
237
+ "test:unit": "node --test \"tests/*.test.ts\"",
238
+ "test:e2e": "node --test \"tests/*.test.ts\"",
205
239
  "qemu:version": "qemu-system-x86_64 --version || echo 'qemu 11.1.0 expected 2026-08-22'",
206
240
  "vm:create": "node --import tsx ./cli.ts vm",
207
241
  "vm:validate": "node --import tsx ./cli.ts vmlint",
208
242
  "gpu:list": "node --import tsx ./cli.ts gpus",
209
- "docker:build": "docker build -f Dockerfile -t saddle:2.1.6 .",
210
- "docker:run": "docker run --rm --memory-swap=-1 --shm-size=2g saddle:2.1.6",
211
- "docker:health": "docker run --rm saddle:2.1.6 qemu-system-x86_64 --version && curl -fsS http://localhost:8080/health || true",
243
+ "docker:build": "docker build -f Dockerfile -t saddle:2.1.7 .",
244
+ "docker:run": "docker run --rm --memory-swap=-1 --shm-size=2g saddle:2.1.7",
245
+ "docker:health": "docker run --rm saddle:2.1.7 qemu-system-x86_64 --version && curl -fsS http://localhost:8080/health || true",
212
246
  "firecracker:boot": "firecracker --api-sock /tmp/fc-saddle.sock --config-file vmconfig.json 2>/dev/null || echo 'firecracker 1.16.1 warm-pool boot 125ms target'",
213
247
  "py:bridge": "python3 qemubridge.py",
214
248
  "py:test": "python3 -m pytest -q || python3 qemubridge.py",
215
249
  "clean": "rm -rf dist coverage .biome __pycache__",
216
- "prepare": "echo 'saddle grand-merge toolchain 2026-08-23: Node 26.7.0 Current / 24.19.0 LTS, npm 12.0.2, TS 7.0.2, Python 3.14.7, Docker 29.7.2, QEMU 11.1.0, Mesa 26.2.1, LLVM 22.1.8, Firecracker 1.16.1'",
250
+ "prepare": "echo 'saddle grand-merge toolchain 2026-08-23: Node 26.12.0 Current / 24.19.0 LTS, npm 12.0.2, TS 7.0.2, Python 3.14.7, Docker 29.7.2, QEMU 11.1.0, Mesa 26.2.1, LLVM 22.1.8, Firecracker 1.16.1'",
217
251
  "start:engine": "node --import tsx ./cli.ts plan"
218
252
  },
253
+ "dependencies": {
254
+ "@fluentui/react-icons": "^2.0.345",
255
+ "@fontsource-variable/bricolage-grotesque": "^5.3.0",
256
+ "@fontsource-variable/geist-mono": "^5.3.0",
257
+ "@fontsource-variable/inter": "^5.3.0",
258
+ "@fontsource-variable/jetbrains-mono": "^5.3.0",
259
+ "@fontsource-variable/outfit": "^5.3.0",
260
+ "@hono/node-server": "^2.1.5",
261
+ "@libsql/client": "^0.18.0",
262
+ "@prisma/adapter-libsql": "^7.10.1",
263
+ "@prisma/client": "^7.10.1",
264
+ "@wenathlan/cadria": "^2.0.154",
265
+ "@wenathlan/debonair": "^2.0.154",
266
+ "@wenathlan/getry": "^2.0.154",
267
+ "@wenathlan/saddle": "^2.1.6",
268
+ "@wenathlan/vault": "^2.0.154",
269
+ "better-sqlite3": "^13.0.3",
270
+ "drizzle-orm": "^0.45.4",
271
+ "gsap": "^3.15.0",
272
+ "hono": "^4.13.16",
273
+ "ink": "^7.1.1",
274
+ "lucide-react": "^1.66.0",
275
+ "motion": "^12.43.0",
276
+ "react": "^19.3.1",
277
+ "react-devtools-core": "^8.0.0",
278
+ "react-dom": "^19.3.1",
279
+ "three": "^0.187.0",
280
+ "wouter": "^3.13.0",
281
+ "z-ai-web-dev-sdk": "^0.0.18"
282
+ },
219
283
  "devDependencies": {
220
- "@biomejs/biome": "^2.5.11",
221
- "@capacitor/android": "^8.5.1",
222
- "@capacitor/cli": "^8.5.1",
223
- "@capacitor/core": "^8.5.1",
224
- "@capacitor/ios": "^8.5.1",
225
- "@hookform/resolvers": "^5.9.1",
226
- "@radix-ui/react-accordion": "^1.2.12",
227
- "@radix-ui/react-alert-dialog": "^1.1.15",
228
- "@radix-ui/react-aspect-ratio": "^1.1.7",
229
- "@radix-ui/react-avatar": "^1.1.10",
230
- "@radix-ui/react-checkbox": "^1.3.3",
231
- "@radix-ui/react-collapsible": "^1.1.12",
232
- "@radix-ui/react-context-menu": "^2.2.16",
233
- "@radix-ui/react-dialog": "^1.1.15",
234
- "@radix-ui/react-dropdown-menu": "^2.1.16",
235
- "@radix-ui/react-hover-card": "^1.1.15",
236
- "@radix-ui/react-label": "^2.1.7",
237
- "@radix-ui/react-menubar": "^1.1.16",
238
- "@radix-ui/react-navigation-menu": "^1.2.14",
239
- "@radix-ui/react-popover": "^1.1.15",
240
- "@radix-ui/react-progress": "^1.1.7",
241
- "@radix-ui/react-radio-group": "^1.3.8",
242
- "@radix-ui/react-scroll-area": "^1.2.10",
243
- "@radix-ui/react-select": "^2.2.6",
244
- "@radix-ui/react-separator": "^1.1.7",
245
- "@radix-ui/react-slider": "^1.3.6",
246
- "@radix-ui/react-slot": "^1.2.3",
247
- "@radix-ui/react-switch": "^1.2.6",
248
- "@radix-ui/react-tabs": "^1.1.13",
249
- "@radix-ui/react-toggle": "^1.1.10",
250
- "@radix-ui/react-toggle-group": "^1.1.11",
251
- "@radix-ui/react-tooltip": "^1.2.8",
252
- "@tailwindcss/typography": "^0.5.15",
253
- "@tailwindcss/vite": "^4.1.3",
254
- "@types/google.maps": "^3.66.2",
255
- "@types/node": "^26.5.0",
256
- "@types/react": "^19.2.1",
257
- "@types/react-dom": "^19.2.7",
258
- "@vitejs/plugin-react": "^6.1.1",
259
- "add": "^2.0.6",
260
- "autoprefixer": "^10.5.5",
261
- "axios": "^1.20.0",
284
+ "@biomejs/biome": "^2.6.4",
285
+ "@capacitor/android": "^8.6.0",
286
+ "@capacitor/cli": "^8.6.0",
287
+ "@capacitor/core": "^8.6.0",
288
+ "@capacitor/ios": "^8.6.0",
289
+ "@fluentui/react-icons": "^2.0.345",
290
+ "@hookform/resolvers": "^5.9.2",
291
+ "@libsql/client": "^0.18.0",
292
+ "@opencode-ai/sdk": "^1.19.5",
293
+ "@prisma/client": "^7.10.1",
294
+ "@radix-ui/react-accordion": "^1.3.1",
295
+ "@radix-ui/react-alert-dialog": "^1.2.1",
296
+ "@radix-ui/react-aspect-ratio": "^1.2.0",
297
+ "@radix-ui/react-avatar": "^1.3.1",
298
+ "@radix-ui/react-checkbox": "^1.4.1",
299
+ "@radix-ui/react-collapsible": "^1.2.1",
300
+ "@radix-ui/react-context-menu": "^2.4.1",
301
+ "@radix-ui/react-dialog": "^1.3.1",
302
+ "@radix-ui/react-dropdown-menu": "^2.2.1",
303
+ "@radix-ui/react-hover-card": "^1.2.1",
304
+ "@radix-ui/react-label": "^2.1.17",
305
+ "@radix-ui/react-menubar": "^1.2.1",
306
+ "@radix-ui/react-navigation-menu": "^1.4.1",
307
+ "@radix-ui/react-popover": "^1.3.1",
308
+ "@radix-ui/react-progress": "^1.2.1",
309
+ "@radix-ui/react-radio-group": "^1.5.1",
310
+ "@radix-ui/react-scroll-area": "^1.4.0",
311
+ "@radix-ui/react-select": "^2.4.1",
312
+ "@radix-ui/react-separator": "^1.2.0",
313
+ "@radix-ui/react-slider": "^1.6.1",
314
+ "@radix-ui/react-slot": "^1.5.0",
315
+ "@radix-ui/react-switch": "^1.4.1",
316
+ "@radix-ui/react-tabs": "^1.2.1",
317
+ "@radix-ui/react-toggle": "^1.2.1",
318
+ "@radix-ui/react-toggle-group": "^1.2.1",
319
+ "@radix-ui/react-tooltip": "^1.4.1",
320
+ "@tailwindcss/postcss": "^4.3.3",
321
+ "@tailwindcss/typography": "^0.5.20",
322
+ "@tailwindcss/vite": "^4.3.3",
323
+ "@tsconfig/node26": "^26.0.1",
324
+ "@types/better-sqlite3": "^9.6.0",
325
+ "@types/three": "^0.187.0",
326
+ "@types/chrome": "^0.3.7",
327
+ "@types/express": "^5.0.6",
328
+ "@types/google.maps": "^3.66.9",
329
+ "@types/node": "^26.6.6",
330
+ "@types/react": "^19.3.0",
331
+ "@types/react-dom": "^19.3.0",
332
+ "@vitejs/plugin-react": "^6.1.2",
333
+ "add": "^2.0.9",
334
+ "autoprefixer": "^10.6.2",
335
+ "axios": "^1.21.0",
336
+ "better-sqlite3": "^13.0.3",
337
+ "bun-types": "^1.4.4",
338
+ "cheerio": "^1.2.0",
262
339
  "class-variance-authority": "^0.7.1",
263
340
  "clsx": "^2.1.1",
264
341
  "cmdk": "^1.1.1",
342
+ "drizzle-kit": "^0.31.11",
343
+ "drizzle-orm": "^0.45.4",
265
344
  "embla-carousel-react": "^8.6.0",
345
+ "emittery": "^2.2.0",
266
346
  "esbuild": "^0.28.2",
267
- "framer-motion": "^13.1.1",
347
+ "express": "^5.3.0",
348
+ "fast-check": "^4.10.2",
349
+ "framer-motion": "^13.5.1",
350
+ "hono": "^4.13.16",
268
351
  "input-otp": "^1.5.0",
269
352
  "jsdom": "26.1.0",
270
- "lucide-react": "^0.453.0",
271
- "nanoid": "^5.1.5",
353
+ "lucide-react": "^1.66.0",
354
+ "mysql2": "^3.24.6",
355
+ "nanoid": "^6.0.2",
272
356
  "next-themes": "^0.4.6",
273
- "postcss": "^8.5.28",
274
- "prettier": "^3.6.2",
275
- "react": "^19.2.1",
276
- "react-day-picker": "^9.11.1",
277
- "react-dom": "^19.2.1",
278
- "react-hook-form": "^7.87.0",
279
- "react-resizable-panels": "^4.12.4",
280
- "recharts": "^2.15.2",
281
- "sonner": "^2.0.7",
282
- "streamdown": "^2.6.0",
283
- "tailwind-merge": "^3.3.1",
284
- "tailwindcss": "^4.1.14",
357
+ "p-limit": "^7.3.3",
358
+ "p-retry": "^8.0.1",
359
+ "playwright": "^1.64.1",
360
+ "pnpm": "^12.16.1",
361
+ "postcss": "^8.5.32",
362
+ "prettier": "^3.9.10",
363
+ "prisma": "^7.10.1",
364
+ "react": "^19.3.1",
365
+ "react-day-picker": "^10.0.2",
366
+ "react-dom": "^19.3.1",
367
+ "react-hook-form": "^7.91.0",
368
+ "react-resizable-panels": "^4.16.1",
369
+ "recharts": "^3.10.1",
370
+ "sonner": "^2.0.8",
371
+ "streamdown": "^2.7.1",
372
+ "tailwind-merge": "^3.7.0",
373
+ "tailwindcss": "^4.3.3",
285
374
  "tailwindcss-animate": "^1.0.7",
286
- "tsx": "^4.23.13",
375
+ "tsup": "^8.5.1",
376
+ "tsx": "^4.23.15",
287
377
  "tw-animate-css": "^1.4.0",
288
- "typescript": "7.0.2",
378
+ "typescript": "^7.0.2",
289
379
  "vaul": "^1.1.2",
290
- "vite": "^8.2.2",
380
+ "vite": "^8.3.5",
291
381
  "vite-plugin-manus-runtime": "^0.0.59",
292
- "vitest": "^4.1.11",
293
- "wouter": "^3.11.0",
294
- "zod": "^4.5.4"
382
+ "vitest": "^5.0.5",
383
+ "webpack": "^5.112.2",
384
+ "webpack-cli": "^6.0.1",
385
+ "wouter": "^3.13.0",
386
+ "yaml": "^2.9.1",
387
+ "zod": "^4.6.7"
295
388
  },
296
389
  "optionalDependencies": {
297
- "commander": "^13.1.0",
390
+ "commander": "^15.0.0",
298
391
  "dockerode": "^5.0.1",
299
- "express": "^5.1.0"
392
+ "express": "^5.3.0"
300
393
  },
301
394
  "systemLibraries": {
302
395
  "note": "system libraries, not npm packages (declared by nested_package.json v3 as dependencies; kept here as build-time system requirements only)",
@@ -310,9 +403,9 @@
310
403
  "saddle": {
311
404
  "date": "2026-08-23",
312
405
  "toolchain": {
313
- "node": "26.7.0",
406
+ "node": "26.12.0",
314
407
  "nodeLts": "24.19.0",
315
- "nodeCurrent": "26.7.0",
408
+ "nodeCurrent": "26.12.0",
316
409
  "npm": "12.0.2",
317
410
  "typescript": "7.0.2",
318
411
  "python": "3.14.7",
package/passage.config CHANGED
File without changes
package/performance.ts CHANGED
File without changes
package/processors.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "meta": {
4
4
  "name": "processors.json",
5
5
  "title": "saddle - Unified Virtual Processor Database",
6
- "version": "2.1.6",
6
+ "version": "2.0.127",
7
7
  "date": "2026-08-22",
8
8
  "language": "en",
9
9
  "description": "Union of the v5 canonical CPU database (6 x86_64 identities), the e2ugh processor catalog (55 SKUs incl. ARM/Apple/Xeon; lineage kept), Zen5/X3D microarchitecture specs and pool minis. Field conflicts resolved V5-first (model_name/max_boost_ghz/tdp_watts canonical); OMNI complementary fields (arch, core_type, topology, memory_support, release_date) merged in place. Versions re-pinned date-first 2026-08-22.",
package/qemu.config CHANGED
@@ -2,7 +2,7 @@
2
2
  "meta": {
3
3
  "name": "qemu.config",
4
4
  "title": "saddle - QEMU Configuration (canonical JSON; sources: S6 TOML + v5 spec 11.1.0 + libvirt overlay)",
5
- "version": "2.1.6",
5
+ "version": "2.0.154",
6
6
  "date": "2026-08-22",
7
7
  "language": "en",
8
8
  "format": "JSON (canonical v2 schema; sources were S6 TOML + V5 JSON schema + libvirt conf overlay)",
@@ -90,7 +90,7 @@
90
90
  "githubSetupPython": "actions/setup-python@v5.4.0",
91
91
  "platformKernel": "6.11.0+"
92
92
  },
93
- "version": "2.1.6",
93
+ "version": "2.0.154",
94
94
  "title": "saddle - QEMU Configuration (canonical JSON; sources: S6 TOML + v5 spec 11.1.0 + libvirt overlay)",
95
95
  "project": "e2ugh v6",
96
96
  "toolchainV5": {
package/qemubridge.py CHANGED
File without changes
package/quantum.ts CHANGED
File without changes
package/render.ts CHANGED
File without changes
package/scheduler.ts CHANGED
File without changes
package/security.ts CHANGED
File without changes