@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
File without changes
package/docs/extension.md CHANGED
File without changes
File without changes
package/docs/gapmatrix.md CHANGED
File without changes
package/docs/hardware.md CHANGED
File without changes
File without changes
@@ -0,0 +1,54 @@
1
+ {
2
+ "version": 1,
3
+ "session": {
4
+ "id": "examplesession-0001",
5
+ "browser": "brave",
6
+ "seed": "examplesession-seed-0001"
7
+ },
8
+ "events": [
9
+ {
10
+ "t": 140,
11
+ "type": "move",
12
+ "x": 120,
13
+ "y": 90
14
+ },
15
+ {
16
+ "t": 300,
17
+ "type": "move",
18
+ "x": 180,
19
+ "y": 140
20
+ },
21
+ {
22
+ "t": 480,
23
+ "type": "click",
24
+ "x": 180,
25
+ "y": 140
26
+ },
27
+ {
28
+ "t": 680,
29
+ "type": "type",
30
+ "key": "k"
31
+ },
32
+ {
33
+ "t": 900,
34
+ "type": "move",
35
+ "x": 240,
36
+ "y": 200
37
+ },
38
+ {
39
+ "t": 1140,
40
+ "type": "click",
41
+ "x": 240,
42
+ "y": 200
43
+ },
44
+ {
45
+ "t": 1400,
46
+ "type": "scroll",
47
+ "dy": 320
48
+ }
49
+ ],
50
+ "captcha": {
51
+ "kind": "hcaptcha",
52
+ "passed": true
53
+ }
54
+ }
File without changes
package/docs/modes.md CHANGED
File without changes
File without changes
@@ -0,0 +1,191 @@
1
+ # ninety.modalities — the wave record
2
+
3
+ the ninety modalities wave (branch waved/ninety.modalities): the saddle
4
+ plane answers the ninety modality plan the owner charged — every planned
5
+ lane of the registry wires an honest executor, every app of the family
6
+ declares the modality its workloads ride, and the report never lies.
7
+
8
+ ## the state the wave found
9
+
10
+ the registry carried the ninety records with 30 live, 3 host and 57
11
+ planned — the catalog promised more than the lanes wired. the edge plane
12
+ drove 16 lanes (10 live, 6 host) and every app of the family named its
13
+ sandbox seat only through the debonair precedent (4 ids).
14
+
15
+ ## the wiring the wave answered
16
+
17
+ - **edgelandeshost.ts** (group a, 25 lanes): the sandbox jails
18
+ (bubblewrap, nsjail, chroot with the fakechroot fallback and the
19
+ privilege gate), the container extensions (podman, containerd, runc,
20
+ crun, the docker max/lite/ghcr profiles), the runtimes (clr, workerd),
21
+ the screens (xvfb-run, the wayland compositor seat), the mobile
22
+ termux host, the builds (bazel, buck2, turborepo), the ci runners
23
+ (actions-runner, gitlab-runner with the exec-removed refusal), the
24
+ network tunnels (tor with the socks circuit, i2p, wireguard with the
25
+ keygen law) and the storage daemons (minio mc, garage). every lane
26
+ probes its binary, runs under the hard deadline in a private temp dir
27
+ and answers the coded absence when the host carries no runtime.
28
+ - **edgelandesinproc.ts** (group b, 19 lanes): the ram recipes (tmpfs,
29
+ mmap, overlayfs, loopram, gitram, zram with the real stored-block
30
+ zlib stream, zswap with the lru pool, swapfile) behind the oom-guard
31
+ quota, the delivery protocols (the cdn mirror manifest, the rfc6455
32
+ wss frame, the quic datagram, the grpc length prefix, the capnp
33
+ segment), the storage wire speakers (libsql envelope, the mysql
34
+ handshake packet, the postgres startup message, the s3 canonical
35
+ signer), the webcontainer seat (the frozen module vm) and the
36
+ local-optin consent gate — pure ts, deterministic, in-process.
37
+ - **edgelandesvirtual.ts** (group c, 7 lanes): the virtual hardware
38
+ compositions riding the engine's own catalogs — the full machine, the
39
+ vgpu mig slice, the screen with the session otp, the driver surface,
40
+ the kvm plan (the qemu argv through the lazy virtualization domain —
41
+ the .js specifier graph loads inside the executor, never the boot),
42
+ the gpuless mesa render and the virgl context. every report says
43
+ composed, never booted.
44
+ - **edgelandesninety.ts** (the merge seat): the six heavyweight probes
45
+ (browser-server, mobile-capacitor, mobile-postmarketos, pod-session,
46
+ confidential-sevsnp, confidential-tdx) and the merged lane tables the
47
+ dispatch plane reads — 73 lanes in the plane, every one carrying its
48
+ executor, the wiring self-check refusing a gap at boot.
49
+ - **edgeplane.ts**: the lane table rides the merged specs, the dispatch
50
+ reads the merged executors, the visitor law guard holds on every run.
51
+ - **modalityregistry.ts**: the honest flips — 51 planned lanes walk to
52
+ live (the lanes the wave wired), 6 walk to host (the heavyweight
53
+ probes), zero stay planned. the census: **81 live, 9 host, 0 planned,
54
+ 90 records.**
55
+ - **the app declarations** (group e): every app of the family names the
56
+ modality its workloads ride — argan (17), cadria (16), cobaia (8),
57
+ devthink (78, the full vocabulary), forge (40), foundry (20), getry
58
+ (13), stealthhead (12), vault (25) and the debonair seat widened 4 →
59
+ 23 — every one through the env opt-in (APP_WORKER_MODALITY), the ids
60
+ mirrored as the string contract, zero imports, the visitor law stated
61
+ in every header.
62
+ - **the vendor mirror**: devthink/modalities.ts re-synced byte-identical
63
+ to the engine registry (the single-source law), the census pins of the
64
+ sandboxlane and e2e suites updated to the new truth.
65
+
66
+ ## the verification the wave recorded
67
+
68
+ - saddle: 28 files / **414 tests green** (379 base + 35 lane tests)
69
+ - argan 69 · cadria 548 · cobaia 30 · debonair 730 · devthink 194 files /
70
+ 3512 · forge 90 · foundry 78 · getry 86 · stealthhead 152 · vault 98
71
+ - family total: **5807 tests green** (5680 base + 127 of the wave)
72
+ - biome zero findings on every file the wave authored
73
+ - the live proof: the webserver answers /api/v1/modalities with
74
+ {plancount: 90, live: 81, host: 9, planned: 0} and /api/v1/edge/lanes
75
+ with the 73 probed lanes (61 live, 12 host)
76
+
77
+ ## the reconciliation with the parallel waves
78
+
79
+ the rebase onto main met two waves that landed while this one worked:
80
+ #239 (the tests home — the tests folders pure inside every app) and
81
+ #240 (the workload law — every app declares its lanes through
82
+ sandboxmodality.ts, the family seat with the join resolver and the
83
+ api routes). the reconciliation honored the no-duplication law: this
84
+ wave dropped its own app declaration seats (the modality.ts files of
85
+ group e) in favor of the #240 family seat the main branch pinned, and
86
+ kept everything the parallel waves did not touch — the fifty-seven
87
+ lane wirings, the registry flips, the vendor mirror sync and the
88
+ census pins. the two census rows #240 charged against the planned-only
89
+ gpu wait (the workload battery and the web workloads lane) now answer
90
+ the post-wave truth: the gpu records this wave wired live make the
91
+ stealthhead world-bake dispatchable, the family census carries zero
92
+ planned-only lanes, and the batteries say so.
93
+
94
+ ## the honest notes
95
+
96
+ - the host binary lanes of group a name runtimes this host does not
97
+ carry — the lanes answer HOST_RUNTIME_ABSENT naming the runtime (the
98
+ language-ruby precedent: live means the engine drives it when the
99
+ host provides the seat).
100
+ - the kvm lane loads the virtualization domain lazily inside the
101
+ executor: the webserver's plain node host resolves only .ts
102
+ specifiers and the domain re-exports virtualgpu through a .js
103
+ specifier — the family law (a domain the host cannot resolve degrades
104
+ that one lane, never the engine boot) now pins the pattern for every
105
+ future lane that reaches the .js graph.
106
+ - the six heavyweight lanes stay host (probe only): the execution
107
+ wiring of a confidential compute seat or a pod session is the next
108
+ rung, and the registry says so.
109
+
110
+ ## the wiring wave (wave four, pr15 — branch wave/ninety.wiring)
111
+
112
+ the wiring wave closed the last gap of the ninety plan: the registry
113
+ carried the ninety records with 81 live and 9 host while the plane
114
+ drove only 73 lanes — seventeen registry-live modalities waited without
115
+ a lane. the wave wired all seventeen, honestly, and the plane table
116
+ now answers the full plan: **90 lanes, 66 live, 24 host.**
117
+
118
+ ### the state the wave found
119
+
120
+ - the plane: 73 lanes (61 live, 12 host); the registry live set ahead
121
+ of the lane table by seventeen ids — runner-deno, runner-serverless,
122
+ language-rust, language-cargo, language-v, language-dotnet,
123
+ language-php, language-lua, language-zig, language-nim, runner-wasi,
124
+ fs-gitobjects, storage-sqlite, network-dns, network-doh, build-make
125
+ and build-ninja, every one already live in the registry.
126
+
127
+ ### the wiring the wave answered
128
+
129
+ - **edgelandeshost.ts** (group a, +12 lanes): the language toolchains
130
+ (rustc with the compile-then-run seat, cargo with CARGO_HOME and the
131
+ target tree inside the private dir, v with HOME at the temp dir,
132
+ dotnet with the csproj seat and DOTNET_CLI_HOME inside, php, lua, zig
133
+ with the global cache inside, nim with the nimcache inside), the
134
+ runner seats (deno with the scoped read permission and DENO_DIR
135
+ inside, wasi through wasmtime with the base64 module bytes) and the
136
+ build tail (make with the Makefile as the code field, ninja with the
137
+ build.ninja as the code field). every lane probes its binary, runs
138
+ under the hard deadline in the private temp dir and answers the coded
139
+ absence when the host carries no runtime — the twelve ride kind host
140
+ (the runtime probe rung), the twenty-five of the first wave stay kind
141
+ live.
142
+ - **edgelandesinproc.ts** (group b, +5 lanes): the serverless runner
143
+ (the v8 isolate manifest — one fresh node:vm context per run, the
144
+ module fingerprint fnv-1a, the frozen inputs surface), the git
145
+ objects vfs (the loose-object header law and the two-hex-char
146
+ fan-out), the sqlite vault (the hundred-byte page-one header with the
147
+ fnv-1a statement id as the change counter) and the network resolvers
148
+ (the rfc1035 question bytes of dns, the rfc8484 base64url ride of
149
+ doh under the https-only resolver law) — pure ts, deterministic,
150
+ seeded, in-process.
151
+ - **edgelandesninety.ts / edgeplane.ts**: the stale sixty-three
152
+ comments now state the post-wiring truth — ninety lanes, sixty-six
153
+ live, twenty-four host.
154
+ - **the pinned tests**: the host battery 25 → 37 (the twelve wave ids
155
+ in alphabetical order, kind host), the inproc battery 19 → 24 with
156
+ the five samples and the wave four seat laws (the isolate, the
157
+ fan-out, the page and the resolvers), the plane table 61/12 → 66/24,
158
+ and the runner-deno refusal test rewired to the wired truth (a real
159
+ run or the coded absence — the gap it proved is closed).
160
+
161
+ ### the verification the wave recorded
162
+
163
+ - saddle: 30 files / **437 tests green** (436 base + 1 seat law test)
164
+ - the build green, dist carrying both lane files
165
+ - biome zero findings on every file the wave touched
166
+ - the live proof: the plane table answers 66 live and 24 host of 90 —
167
+ /api/v1/edge/lanes now reports the ninety probed lanes
168
+
169
+ ### the honest notes
170
+
171
+ - the twelve host seats ride kind host with real executors: the plane
172
+ probes the runtime and the executor drives it when the host carries
173
+ it — an absent runtime answers HOST_RUNTIME_ABSENT naming the runtime,
174
+ exactly like the live seats of the first wave (the kind answers the
175
+ rung the table reports, the executor answers the run).
176
+ - the inproc seats stay deterministic: fixed fnv-1a addresses, rfc1035
177
+ big-endian fields and stored hex — no clock, no randomness, the same
178
+ payload answers the same bytes every run.
179
+ - this engine host carries make only: the eleven other runtimes answer
180
+ the coded absence here while the make lane proves a real run — the
181
+ batteries stay green on both kinds of host.
182
+
183
+ ## the os nicknames of the owner (reference)
184
+
185
+ sandboxprofile.ts answers five guest os ids — android, grapheneos, linux,
186
+ omarchy, windows — and the owner's spoken names are nicknames of those
187
+ builds, not new ids: marsh (marshmallow) → android, grapenios and grafene
188
+ os → grapheneos, omashi → omarchy, linux normal → linux. the owner's "v"
189
+ names no guest os: it answers the language-v lane of the modality
190
+ registry (the v compiler seat). nothing to add — the vocabulary already
191
+ covers every name the owner used.
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,186 @@
1
+ # planning.engine — the saddle engine ladder (the sandbox that actually runs)
2
+
3
+ > the owner order: the interface exists, the engine must WORK — the saddle
4
+ > engine planned for real and wired into the whole system, 100% customizable
5
+ > (storage, ram, aliases, drivers, every knob editable through the api), the
6
+ > git storage and the github tree system living in the db, the sandbox
7
+ > modalities opening with their drivers (vgpu, vcpu, memory) running real on
8
+ > the hosts and NEVER touching the person's machine. the flows of the
9
+ > competitors (the telas files: z.ai, grok, manus, bolt, ai studio, vercel,
10
+ > netlify, cloudflare) are the recipe the engine follows; the framework, the
11
+ > library and the package choice stay open as long as node and the engines
12
+ > orchestrate behind. everything rides mime types + https.
13
+ >
14
+ > ## the competitor recipe the engine copies (from telas-sandbox-fluxo)
15
+ >
16
+ > - one sandbox per session, created implicitly at the first send, discovered
17
+ > never hand-built: workspaces/up (z.ai), /api/preview/{id} (grok),
18
+ > preview/resolve (manus).
19
+ > - the sandbox state streams: checking → quota ok → initializing → ready
20
+ > (sse of states with explicit quotas per user), the pod id in the ready
21
+ > payload.
22
+ > - the preview lives in its own subdomain with the port in it:
23
+ > preview-chat-<id>.devthink.pro, <port>-<hash>.<region>.devthink.run.
24
+ > - versioned storage OUTSIDE the sandbox: versions/<uuid> per write
25
+ > (z.ai), codestorage + commitSha (bolt), git repo in s3 (manus) — the
26
+ > saddle form: git objects inside the db (vault, libgit2) with the
27
+ > commitSha pointer the sandbox rootfs commits against.
28
+ > - ephemeral credentials only: jwt 300s per preview session (grok), otp per
29
+ > vnc (manus) — the saddle form: session-scoped tokens minted per sandbox
30
+ > bind, never a long-lived secret at the edge.
31
+ > - capabilities announced as an event (computer.capabilities.updated): the
32
+ > image inventory (node 26, git, ffmpeg, playwright-headless) reaches the
33
+ > front so features toggle by real capacity.
34
+ > - quotas explicit and queryable (x/min, y/4h, z/global) and the 429 typed
35
+ > before the bind.
36
+ > - the runtime daemon inside the sandbox: supervisord + runtime service
37
+ > (manus :8330/:8340 form) → devthink-runtime on its own port with the
38
+ > watcher loop and the upgrade lock, env in two layers (platform + user).
39
+ > - zero captcha anywhere, zero traffic from the person's browser: the code
40
+ > never transits the visitor, the agent's own headless browser runs inside
41
+ > the sandbox.
42
+
43
+ ## wave SV0 — what already stands (verified, 411 tests green)
44
+
45
+ - [x] SV0.001 the virtual hardware engine: cpu/gpu banks, topology solver,
46
+ the host inventory probes (meminfo, nvidia-smi, glxinfo, vulkan)
47
+ - [x] SV0.002 the vgpu drivers lane: pci ids, nvml shim env, vfio
48
+ bind/unbind, rom dump, looking glass b7, nvidia vgpu profiles, mig
49
+ layouts (blackwell) with density validation, intel sriov dkms, nvenc
50
+ dual engine
51
+ - [x] SV0.003 the vcpu and memory lanes: topology composition, the mttg and
52
+ passage envelopes, the qemu and docker envelopes, the tier policy
53
+ - [x] SV0.004 the orchestrator with the gitops flux planning, the scheduler,
54
+ the queue and the quota lanes, the isolation and security gates
55
+ - [x] SV0.005 the webserver (health, specs, sandbox lifecycle, exec, spa
56
+ shell) and the browser-pure engine port with the transport-neutral
57
+ bundle set
58
+ - [x] SV0.006 the build engine riding node directly (the windows spawnSync
59
+ EINVAL wall gone), the lockstep version stamp across the envelope
60
+ - [x] SV0.007 the competitor flows captured (the telas files live beside the
61
+ md corpus) and the recipe distilled into this plan
62
+
63
+ ## wave SV1 — the modality registry (the fifty, one catalog, the join)
64
+
65
+ - [ ] SV1.001 modalityregistry.ts: every sandbox modality as a record (id,
66
+ family, isolation level, driver requirements, boot cost class, the
67
+ mime contract, the driver modules it mounts) — the catalog grows
68
+ toward the fifty the owner counts, seeded from the rules list
69
+ - [ ] SV1.002 the families: complete virtual (drivers, cpu, gpu, memory, the
70
+ three profiles), universal runner, node packages, docker hardened,
71
+ ghcr immutable, microvm per workflow, browser/webcontainer server side,
72
+ mobile (capacitor, termux, postmarketos), confidential (sev-snp, tdx),
73
+ qemu and firecracker, pod per session, local opt-in, vm+vnc,
74
+ wasm/wasi, vfs, cdn
75
+ - [ ] SV1.003 the join resolver: the workload asks, the engine answers the
76
+ modality set (the nuclear modality — the person chooses none, the
77
+ platform resolves the join of all)
78
+ - [ ] SV1.004 the capability contract per modality: what the workload may
79
+ ask (net off, dropped caps, read-only root, pid limits for the docker
80
+ hardened; the clean rootfs, injected vcpu count, mesa llvmpipe,
81
+ lavapipe, rusticl, xvfb for the microvm)
82
+ - [ ] SV1.005 the boot ladder per modality: cold, warm, hot classes with
83
+ the measured budgets (gvisor without kvm about 200 ms, firecracker
84
+ 125 ms boot the sandbox.ts banner already answers, v8 isolates for
85
+ serverless)
86
+ - [ ] SV1.006 tests: the registry determinism, the join resolution on the
87
+ three base profiles (max, balanced, lite), every record complete
88
+
89
+ ## wave SV2 — the vfs and the cdn lane (the packages never touch the visitor)
90
+
91
+ - [ ] SV2.001 vfs.ts: the virtual file system born from prisma/git/db —
92
+ read(path) → chunk pointers from the db, write(path, bytes) → chunk
93
+ catalog with sha-256 and compression, automatic reuse of equal chunks
94
+ - [ ] SV2.002 the cdn lane: the ~45 cdns (esm.sh among them) fetched INSIDE
95
+ the sandbox over https through the vfs mirror — the person's browser
96
+ never loads a cdn byte of a sandbox workload
97
+ - [ ] SV2.003 the granular materialization: packages install ten by ten,
98
+ forty by forty inside the sandbox from the catalog (package.10 law) —
99
+ never on the build host
100
+ - [ ] SV2.004 the mime contract: every vfs object answers its mimetype, the
101
+ api serves content-type on every read (the mimetypes file feeds the
102
+ mapping)
103
+ - [ ] SV2.005 tests: chunk dedupe round trip, sha-256 stability, the cdn
104
+ mirror mock, the mime headers on every route
105
+
106
+ ## wave SV3 — the git storage and the github tree (the code survives the sandbox)
107
+
108
+ - [ ] SV3.001 gitobjects.ts: git objects and blobs inside the db through
109
+ libgit2 semantics — the tree system the github tree law names: read
110
+ tree(path) → entries, write tree, commit with the parent chain
111
+ - [ ] SV3.002 the versioned write: every sandbox write stamps versions/<uuid>
112
+ with the commitSha — the bolt/z.ai pattern with the vault storage
113
+ - [ ] SV3.003 the github tree lane: read the live tree of a repository over
114
+ the api (authenticated), mirror into the git objects table, the
115
+ sandbox mounts the tree as its rootfs through the vfs
116
+ - [ ] SV3.004 the rollback: checkout any commitSha back into a running
117
+ sandbox (the history the vitrine clicks through)
118
+ - [ ] SV3.005 tests: tree round trip, commit chain integrity, the github
119
+ mirror with a recorded fixture, rollback determinism
120
+
121
+ ## wave SV4 — the session sandbox law (pod per session, the states stream)
122
+
123
+ - [ ] SV4.001 sandboxup: one sandbox per session created implicitly at the
124
+ first send, discovered by session id — never a hand-built url
125
+ - [ ] SV4.002 the states stream over sse: checking → quota ok →
126
+ initializing → ready with the sandbox id, quotas per user explicit in
127
+ the handshake
128
+ - [ ] SV4.003 the capabilities event: the image inventory (node 26, git,
129
+ ffmpeg, playwright-headless, ffmpeg) announced when the sandbox turns
130
+ ready
131
+ - [ ] SV4.004 the preview subdomain: preview-<session>.devthink.pro with the
132
+ port binding, the ephemeral jwt 300s per bind (claims sub, session,
133
+ port)
134
+ - [ ] SV4.005 the runtime daemon: devthink-runtime inside the sandbox (the
135
+ supervisord + watcher loop + upgrade lock the manus form proves), env
136
+ in two layers (platform + session)
137
+ - [ ] SV4.006 the sweep: ttl 15 minutes, the sweep period the webserver
138
+ already carries, the workspace quota answering with the sandbox id
139
+ - [ ] SV4.007 tests: the state ladder order, the quota refusal typed 429,
140
+ the jwt expiry, the capabilities payload
141
+
142
+ ## wave SV5 — config and aliases (100% customizable through the api)
143
+
144
+ - [ ] SV5.001 sandboxconfig.ts: every knob editable — base (max, balanced,
145
+ lite), os image (android, grapheneos, linux, omarchy, windows,
146
+ distros), arch (arm64, amd64), vcpu count, vram mib, storage quota,
147
+ the modality join, the driver set
148
+ - [ ] SV5.002 the aliases table: user-defined aliases per sandbox (the
149
+ short names the shell and the api resolve), add/rename/remove through
150
+ the api, unique per owner
151
+ - [ ] SV5.003 the config store: rows in sqlite through parameter binding,
152
+ the api serves and accepts the whole surface (the ui edits the same
153
+ rows), defaults from the seed catalog never hardcoded in components
154
+ - [ ] SV5.004 the presets: named profiles (the three bases plus user
155
+ presets) shareable and versioned
156
+ - [ ] SV5.005 tests: config round trip, alias uniqueness, preset apply,
157
+ the api contract with a fake request
158
+
159
+ ## wave SV6 — the runners (forge at the frontier, foundry the face)
160
+
161
+ - [ ] SV6.001 the docker hardened runner: no network, dropped caps,
162
+ read-only root, pid limits, runsc option
163
+ - [ ] SV6.002 the microvm runner: clean rootfs, injected vcpu count, the
164
+ cpu id via ld_preload, mesa llvmpipe + lavapipe + rusticl + xvfb for
165
+ the gpu-less render, iso-style and ghcr sources
166
+ - [ ] SV6.003 the wasm/wasi runner: wasmer and wasmedge behind the same
167
+ dispatch contract
168
+ - [ ] SV6.004 the universal runner: any binary of the market through the
169
+ binfmt form, the platform processes included
170
+ - [ ] SV6.005 the dispatch result: the same SandboxState/DispatchResult
171
+ shape every runner answers (the contract the tests already pin)
172
+ - [ ] SV6.006 tests: per-runner dispatch on the recorded fixtures, the
173
+ hardening gates refusing the forbidden flags
174
+
175
+ ## wave SV7 — the verification (the owner reads the live proof)
176
+
177
+ - [ ] SV7.001 the full battery green on every wave's modules
178
+ - [ ] SV7.002 the live proof: sandbox up through the api, the states stream
179
+ answering, exec inside, the vfs fetch of a cdn package, the git
180
+ commit with the commitSha, the preview subdomain bound with the
181
+ ephemeral jwt
182
+ - [ ] SV7.003 the live proof: the config edited through the api (ram,
183
+ storage, alias), the next boot honoring it
184
+ - [ ] SV7.004 the debonair bridge: the render jobs of the audio engine run
185
+ inside a saddle sandbox (the no-client-dsp law of the music pipeline)
186
+ - [ ] SV7.005 the worklog and the ladder ticked, the wave committed