@wenathlan/saddle 2.1.6 → 2.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (300) hide show
  1. package/Dockerfile +170 -66
  2. package/LICENSE +0 -0
  3. package/README.md +73 -58
  4. package/alternatives.ts +0 -0
  5. package/biome.jsonc +134 -0
  6. package/boards.json +2 -2
  7. package/browser.ts +482 -0
  8. package/cli.ts +274 -0
  9. package/compute.ts +4 -4
  10. package/cores.json +2 -2
  11. package/distribution.ts +731 -0
  12. package/docker.config +37 -9
  13. package/docs/.gitkeep +0 -0
  14. package/docs/actionrecorder.md +0 -0
  15. package/docs/actionsincident.md +0 -0
  16. package/docs/alternatives.md +0 -0
  17. package/docs/architecture.md +0 -0
  18. package/docs/{architecture-1.8.19.md → architecture1819.md} +0 -0
  19. package/docs/{architecture-1.8.19.mmd → architecture1819.mmd} +0 -0
  20. package/docs/artifactavailability.md +2 -2
  21. package/docs/{artifactresearch-1.8.9.md → artifactresearch189.md} +0 -0
  22. package/docs/{batches-1816-1820.md → batches1816to1820.md} +0 -0
  23. package/docs/{brancharchive-2026-08-18.md → brancharchive20260818.md} +0 -0
  24. package/docs/branchaudit.md +0 -0
  25. package/docs/browser.md +18 -1
  26. package/docs/capabilityreport.md +0 -0
  27. package/docs/comparativeaudit.md +0 -0
  28. package/docs/consolidation.md +0 -0
  29. package/docs/{containerplatforms-1.8.17.md → containerplatforms1817.md} +0 -0
  30. package/docs/{containerplatforms-2.1.0.md → containerplatforms210.md} +1 -1
  31. package/docs/{documentmap-1.8.12.md → documentmap1812.md} +1 -1
  32. package/docs/{e2ugh-engine.md → e2ughengine.md} +0 -0
  33. package/docs/ecosystemplan.md +0 -0
  34. package/docs/enginearchitecture.md +0 -0
  35. package/docs/extension.md +13 -2
  36. package/docs/featureaudit.md +0 -0
  37. package/docs/{flatbuildresearch-1.8.11.md → flatbuildresearch1811.md} +0 -0
  38. package/docs/gapmatrix.md +0 -0
  39. package/docs/hardware.md +0 -0
  40. package/docs/libraryapi.md +1 -1
  41. package/docs/{licenseaudit-1.8.12.md → licenseaudit1812.md} +0 -0
  42. package/docs/logs/examplesession.json +54 -0
  43. package/docs/memoryengine.md +0 -0
  44. package/docs/{mobileconversionresearch-1.8.10.md → mobileconversionresearch1810.md} +0 -0
  45. package/docs/modes.md +0 -0
  46. package/docs/{nativeidentityresearch-1.8.11.md → nativeidentityresearch1811.md} +0 -0
  47. package/docs/{native-wrappers.md → nativewrappers.md} +0 -0
  48. package/docs/ninetymodalities.md +191 -0
  49. package/docs/optimization.md +0 -0
  50. package/docs/packageaudit185.md +0 -0
  51. package/docs/performance.md +0 -0
  52. package/docs/{planning.1.8.18.md → planning1818.md} +0 -0
  53. package/docs/{planning.1.8.19.md → planning1819.md} +0 -0
  54. package/docs/planningengine.md +186 -0
  55. package/docs/planningninety.md +391 -0
  56. package/docs/platformpipelineaudit.md +0 -0
  57. package/docs/platformpipelines.md +0 -0
  58. package/docs/productindex.md +0 -0
  59. package/docs/registryresearch.md +0 -0
  60. package/docs/release.md +0 -0
  61. package/docs/release17notes.md +0 -0
  62. package/docs/release181notes.md +0 -0
  63. package/docs/release182notes.md +0 -0
  64. package/docs/release184notes.md +0 -0
  65. package/docs/release185notes.md +0 -0
  66. package/docs/release18notes.md +0 -0
  67. package/docs/releaseassets.md +0 -0
  68. package/docs/{releasenotes-1.8.12.md → releasenotes1812.md} +0 -0
  69. package/docs/{releasenotes-1.8.13.md → releasenotes1813.md} +2 -2
  70. package/docs/{releasenotes-1.8.14.md → releasenotes1814.md} +1 -1
  71. package/docs/{releasenotes-1.8.15.md → releasenotes1815.md} +0 -0
  72. package/docs/{releasenotes-1.8.16.md → releasenotes1816.md} +0 -0
  73. package/docs/{releasenotes-1.8.17.md → releasenotes1817.md} +0 -0
  74. package/docs/{releasenotes-1.8.18.md → releasenotes1818.md} +0 -0
  75. package/docs/{releasenotes-1.8.19.md → releasenotes1819.md} +0 -0
  76. package/docs/{reorganization-1.8.8.md → reorganization188.md} +0 -0
  77. package/docs/{reorganization-1.8.9.md → reorganization189.md} +0 -0
  78. package/docs/{repo-analysis-1.8.21.json → repoanalysis1821.json} +0 -0
  79. package/docs/{repo-candidates-1.8.21.jsonl → repocandidates1821.jsonl} +0 -0
  80. package/docs/{repo-research-1.8.16.md → reporesearch1816.md} +0 -0
  81. package/docs/{repo-research-1.8.21.md → reporesearch1821.md} +0 -0
  82. package/docs/{repo-selected-1.8.21.json → reposelected1821.json} +0 -0
  83. package/docs/{repo-synthesis-1.8.16.md → reposynthesis1816.md} +1 -1
  84. package/docs/{repo-synthesis-1.8.21.md → reposynthesis1821.md} +0 -0
  85. package/docs/{research-1.8.18-isolation.md → research1818isolation.md} +0 -0
  86. package/docs/{research-1.8.19-virtual-browser.md → research1819virtualbrowser.md} +0 -0
  87. package/docs/roadmapp2p3.md +0 -0
  88. package/docs/s3compatible.md +0 -0
  89. package/docs/{scanningresearch-1.8.11.md → scanningresearch1811.md} +0 -0
  90. package/docs/security.md +0 -0
  91. package/docs/{securityaudit-1.8.7.md → securityaudit187.md} +0 -0
  92. package/docs/{securityreferences-1.8.11.md → securityreferences1811.md} +0 -0
  93. package/docs/{securityresearch-1.8.11.md → securityresearch1811.md} +0 -0
  94. package/docs/{signingresearch-1.8.12.md → signingresearch1812.md} +0 -0
  95. package/docs/signingwithoutcertificates.md +0 -0
  96. package/docs/signpathapplication.md +0 -0
  97. package/docs/sitemap.md +0 -0
  98. package/docs/{tauri-glib-risk-1.8.11.md → tauriglibrisk1811.md} +0 -0
  99. package/docs/todo.md +2 -2
  100. package/docs/{todo-1.8.15.md → todo1815.md} +1 -1
  101. package/docs/{todo-1.8.16.md → todo1816.md} +5 -5
  102. package/docs/{todo-1.8.18.md → todo1818.md} +0 -0
  103. package/docs/{todo-1.8.19.md → todo1819.md} +0 -0
  104. package/docs/{toolchainresearch-1.8.9.md → toolchainresearch189.md} +0 -0
  105. package/docs/toolchains.md +0 -0
  106. package/docs/usage.md +0 -0
  107. package/docs/viability.md +0 -0
  108. package/docs/virtualization.md +0 -0
  109. package/docs/{web-duplicatecleanup.md → webduplicatecleanup.md} +0 -0
  110. package/docs/{web-ideas.md → webideas.md} +0 -0
  111. package/docs/{workflowimprovements-2026-08-19.md → workflowimprovements20260819.md} +0 -0
  112. package/docs/workflowinputs.md +0 -0
  113. package/docs/workflowoperations.md +0 -0
  114. package/docs/workloadlaw.md +104 -0
  115. package/execution.ts +677 -0
  116. package/foundation.ts +314 -0
  117. package/gpumonitor.cpp +0 -0
  118. package/gpus.json +1 -1
  119. package/index.ts +38 -29
  120. package/isolation.ts +84 -0
  121. package/modalityregistry.ts +1493 -0
  122. package/{dist/modes.js → modes.ts} +79 -62
  123. package/mttg.config +1 -1
  124. package/orchestrator.ts +54 -17
  125. package/package.json +245 -146
  126. package/passage.config +0 -0
  127. package/performance.ts +0 -0
  128. package/processors.json +1 -1
  129. package/qemu.config +2 -2
  130. package/qemubridge.py +0 -0
  131. package/quantum.ts +0 -0
  132. package/render.ts +0 -0
  133. package/sandbox.ts +2035 -0
  134. package/scheduler.ts +1 -1
  135. package/security.ts +0 -0
  136. package/server.ts +52 -0
  137. package/tiers.ts +9 -3
  138. package/tsconfig.json +22 -13
  139. package/virtual.ts +1105 -0
  140. package/virtualcpu.ts +1 -0
  141. package/virtualgpu.ts +2 -1
  142. package/virtualhardware.c +0 -0
  143. package/virtualhardware.json +2 -2
  144. package/virtualization.ts +1 -1
  145. package/virtualizationcore.cpp +0 -0
  146. package/virtualmemory.ts +0 -0
  147. package/vm.config.json +2 -2
  148. package/workloadlaw.ts +293 -0
  149. package/biome.json +0 -151
  150. package/dist/acquisition.d.ts +0 -359
  151. package/dist/acquisition.d.ts.map +0 -1
  152. package/dist/acquisition.js +0 -629
  153. package/dist/acquisition.js.map +0 -1
  154. package/dist/alternatives.d.ts +0 -509
  155. package/dist/alternatives.d.ts.map +0 -1
  156. package/dist/alternatives.js +0 -951
  157. package/dist/alternatives.js.map +0 -1
  158. package/dist/automation.d.ts +0 -426
  159. package/dist/automation.d.ts.map +0 -1
  160. package/dist/automation.js +0 -561
  161. package/dist/automation.js.map +0 -1
  162. package/dist/browser.d.ts +0 -562
  163. package/dist/browser.d.ts.map +0 -1
  164. package/dist/browser.js +0 -1057
  165. package/dist/browser.js.map +0 -1
  166. package/dist/cli.d.ts +0 -17
  167. package/dist/cli.d.ts.map +0 -1
  168. package/dist/cli.js +0 -169
  169. package/dist/cli.js.map +0 -1
  170. package/dist/communication.d.ts +0 -192
  171. package/dist/communication.d.ts.map +0 -1
  172. package/dist/communication.js +0 -418
  173. package/dist/communication.js.map +0 -1
  174. package/dist/compute.d.ts +0 -1161
  175. package/dist/compute.d.ts.map +0 -1
  176. package/dist/compute.js +0 -2273
  177. package/dist/compute.js.map +0 -1
  178. package/dist/distribution.d.ts +0 -529
  179. package/dist/distribution.d.ts.map +0 -1
  180. package/dist/distribution.js +0 -811
  181. package/dist/distribution.js.map +0 -1
  182. package/dist/docs/example-localjob.d.ts +0 -2
  183. package/dist/docs/example-localjob.d.ts.map +0 -1
  184. package/dist/docs/example-localjob.js +0 -15
  185. package/dist/docs/example-localjob.js.map +0 -1
  186. package/dist/docs/example-publicapi.d.ts +0 -2
  187. package/dist/docs/example-publicapi.d.ts.map +0 -1
  188. package/dist/docs/example-publicapi.js +0 -7
  189. package/dist/docs/example-publicapi.js.map +0 -1
  190. package/dist/execution.d.ts +0 -530
  191. package/dist/execution.d.ts.map +0 -1
  192. package/dist/execution.js +0 -761
  193. package/dist/execution.js.map +0 -1
  194. package/dist/format.d.ts +0 -19
  195. package/dist/format.d.ts.map +0 -1
  196. package/dist/format.js +0 -60
  197. package/dist/format.js.map +0 -1
  198. package/dist/foundation.d.ts +0 -176
  199. package/dist/foundation.d.ts.map +0 -1
  200. package/dist/foundation.js +0 -309
  201. package/dist/foundation.js.map +0 -1
  202. package/dist/index.d.ts +0 -735
  203. package/dist/index.d.ts.map +0 -1
  204. package/dist/index.js +0 -1020
  205. package/dist/index.js.map +0 -1
  206. package/dist/integration.d.ts +0 -236
  207. package/dist/integration.d.ts.map +0 -1
  208. package/dist/integration.js +0 -236
  209. package/dist/integration.js.map +0 -1
  210. package/dist/intelligence.d.ts +0 -94
  211. package/dist/intelligence.d.ts.map +0 -1
  212. package/dist/intelligence.js +0 -145
  213. package/dist/intelligence.js.map +0 -1
  214. package/dist/isolation.d.ts +0 -129
  215. package/dist/isolation.d.ts.map +0 -1
  216. package/dist/isolation.js +0 -96
  217. package/dist/isolation.js.map +0 -1
  218. package/dist/media.d.ts +0 -344
  219. package/dist/media.d.ts.map +0 -1
  220. package/dist/media.js +0 -986
  221. package/dist/media.js.map +0 -1
  222. package/dist/modes.d.ts +0 -359
  223. package/dist/modes.d.ts.map +0 -1
  224. package/dist/modes.js.map +0 -1
  225. package/dist/operations.d.ts +0 -67
  226. package/dist/operations.d.ts.map +0 -1
  227. package/dist/operations.js +0 -94
  228. package/dist/operations.js.map +0 -1
  229. package/dist/orchestrator.d.ts +0 -1339
  230. package/dist/orchestrator.d.ts.map +0 -1
  231. package/dist/orchestrator.js +0 -4308
  232. package/dist/orchestrator.js.map +0 -1
  233. package/dist/packager/targetcli.js +0 -4
  234. package/dist/performance.d.ts +0 -416
  235. package/dist/performance.d.ts.map +0 -1
  236. package/dist/performance.js +0 -827
  237. package/dist/performance.js.map +0 -1
  238. package/dist/quantum.d.ts +0 -810
  239. package/dist/quantum.d.ts.map +0 -1
  240. package/dist/quantum.js +0 -2073
  241. package/dist/quantum.js.map +0 -1
  242. package/dist/render.d.ts +0 -381
  243. package/dist/render.d.ts.map +0 -1
  244. package/dist/render.js +0 -1073
  245. package/dist/render.js.map +0 -1
  246. package/dist/scheduler.d.ts +0 -596
  247. package/dist/scheduler.d.ts.map +0 -1
  248. package/dist/scheduler.js +0 -1259
  249. package/dist/scheduler.js.map +0 -1
  250. package/dist/security.d.ts +0 -501
  251. package/dist/security.d.ts.map +0 -1
  252. package/dist/security.js +0 -1170
  253. package/dist/security.js.map +0 -1
  254. package/dist/server.d.ts +0 -21
  255. package/dist/server.d.ts.map +0 -1
  256. package/dist/server.js +0 -52
  257. package/dist/server.js.map +0 -1
  258. package/dist/tiers.d.ts +0 -1002
  259. package/dist/tiers.d.ts.map +0 -1
  260. package/dist/tiers.js +0 -2165
  261. package/dist/tiers.js.map +0 -1
  262. package/dist/virtual.d.ts +0 -641
  263. package/dist/virtual.d.ts.map +0 -1
  264. package/dist/virtual.js +0 -1285
  265. package/dist/virtual.js.map +0 -1
  266. package/dist/virtualcpu.d.ts +0 -316
  267. package/dist/virtualcpu.d.ts.map +0 -1
  268. package/dist/virtualcpu.js +0 -1180
  269. package/dist/virtualcpu.js.map +0 -1
  270. package/dist/virtualgpu.d.ts +0 -345
  271. package/dist/virtualgpu.d.ts.map +0 -1
  272. package/dist/virtualgpu.js +0 -1000
  273. package/dist/virtualgpu.js.map +0 -1
  274. package/dist/virtualization.d.ts +0 -607
  275. package/dist/virtualization.d.ts.map +0 -1
  276. package/dist/virtualization.js +0 -1187
  277. package/dist/virtualization.js.map +0 -1
  278. package/dist/virtualmemory.d.ts +0 -818
  279. package/dist/virtualmemory.d.ts.map +0 -1
  280. package/dist/virtualmemory.js +0 -1796
  281. package/dist/virtualmemory.js.map +0 -1
  282. package/dist/vitest.config.d.ts +0 -3
  283. package/dist/vitest.config.d.ts.map +0 -1
  284. package/dist/vitest.config.js +0 -26
  285. package/dist/vitest.config.js.map +0 -1
  286. package/dist/webscrape.d.ts +0 -720
  287. package/dist/webscrape.d.ts.map +0 -1
  288. package/dist/webscrape.js +0 -2697
  289. package/dist/webscrape.js.map +0 -1
  290. package/docs/CONVERSA.txt +0 -1523
  291. package/docs/architecture-1.8.19.png +0 -0
  292. package/docs/assets/architecture.svg +0 -45
  293. package/docs/assets/saddlemark.svg +0 -13
  294. package/docs/example-localjob.ts +0 -15
  295. package/docs/example-publicapi.ts +0 -7
  296. package/docs/saddle.archive.1.8.17.tar.gz.gpg +0 -0
  297. package/media.ts +0 -1337
  298. package/web/manifest.json +0 -30
  299. package/web/readme.md +0 -383
  300. package/web/tsconfig.json +0 -25
@@ -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
@@ -0,0 +1,391 @@
1
+ # planning.ninety — the action ladder of the ninety modalities wave
2
+
3
+ the wave law: the saddle plane answers the ninety modality plan the owner
4
+ charged — every planned lane of the registry wires an honest executor (the
5
+ lane runs server-side inside the engine or through a host runtime the engine
6
+ spawns, the visitor browser, gpu, cpu and storage are never touched), every
7
+ app of the family declares the modality its workloads ride, and the report
8
+ never lies: a lane that executes is live, a lane that probes the host is
9
+ host, a promise without wiring stays planned. one pull request, one branch,
10
+ the ladder below — every rung checked before the merge.
11
+
12
+ ## the groups
13
+
14
+ - group a — edgelandeshost.ts: the host binary lanes (the spawn pattern of
15
+ edgelandes.ts): the sandbox jails, the container extensions, the runtimes,
16
+ the screens, the builds, the ci runners, the network tunnels and the
17
+ storage daemons the host may carry.
18
+ - group b — edgelandesinproc.ts: the in-process pure ts lanes: the ram
19
+ recipes, the delivery protocols, the storage wire protocols, the
20
+ webcontainer lane and the local opt-in gate.
21
+ - group c — edgelandesvirtual.ts: the virtual hardware composition lanes
22
+ that ride the engine's own virtualcpu, virtualgpu and virtualmemory
23
+ payloads (sandbox.ts) — the full machine, the vgpu slice, the screen, the
24
+ drivers, the kvm seat, the gpuless render and the virgl slice.
25
+ - group d — the plane integration (this orchestrator): the dispatcher merge,
26
+ the lane table extension, the registry state flips, the pinned test sets,
27
+ the webserver and the api surface.
28
+ - group e — the app declarations: every app of the family names the saddle
29
+ modality its workloads ride (the debonair sandboxmodality pattern), so the
30
+ platform resolves the sandbox and the apps ride the plane.
31
+
32
+ ## the ladder (363 actions)
33
+
34
+ ### phase 0 — the seat (8)
35
+
36
+ - [x] 0.1 verify the polar token and the gh seat
37
+ - [x] 0.2 sync remote head to local (remote to local, never the reverse)
38
+ - [x] 0.3 clone the repository and the baseline battery (5698 tests green)
39
+ - [x] 0.4 diagnose the registry: 30 live, 3 host, 57 planned
40
+ - [x] 0.5 create the branch waved/ninety.modalities on the worktree
41
+ - [x] 0.6 link the node_modules seat into the worktree
42
+ - [x] 0.7 write this planning ladder
43
+ - [x] 0.8 verify the worktree battery before the first edit
44
+
45
+ ### phase 1 — the analysis (24)
46
+
47
+ - [x] 1a.1 read edgelandes.ts integral (subagent a, sed segments)
48
+ - [x] 1a.2 read edgeplane.ts integral (subagent a)
49
+ - [x] 1a.3 read modalityregistry.ts integral (subagent a)
50
+ - [x] 1a.4 read the modalityregistry test sets (subagent a)
51
+ - [x] 1a.5 read the edgeplane test (subagent a)
52
+ - [x] 1a.6 map the spawn pattern contract (subagent a)
53
+ - [x] 1b.1 read edgelandes.ts integral (subagent b)
54
+ - [x] 1b.2 read virtual.ts (the vfs domain) (subagent b)
55
+ - [x] 1b.3 read modalityregistry.ts integral (subagent b)
56
+ - [x] 1b.4 read the storage lane surfaces (subagent b)
57
+ - [x] 1b.5 read the network lane surfaces (subagent b)
58
+ - [x] 1b.6 map the in-process lane contract (subagent b)
59
+ - [x] 1c.1 read sandbox.ts integral in segments (subagent c)
60
+ - [x] 1c.2 read virtualcpu.ts, virtualgpu.ts, virtualmemory.ts (subagent c)
61
+ - [x] 1c.3 read virtualization.ts (the qemu and tenant recipes) (subagent c)
62
+ - [x] 1c.4 read modalityregistry.ts integral (subagent c)
63
+ - [x] 1c.5 read render.ts (the mesa stack summaries) (subagent c)
64
+ - [x] 1c.6 map the composition contract (subagent c)
65
+ - [x] 1d.1 read the debonair sandboxmodality.ts pattern (subagent d)
66
+ - [x] 1d.2 read the family law files of every app (subagent d)
67
+ - [x] 1d.3 read the app test seats (subagent d)
68
+ - [x] 1d.4 map the declaration contract per app (subagent d)
69
+ - [x] 1d.5 read the getry debonairlane precedent (subagent d)
70
+ - [x] 1d.6 read the saddle webserver run route (subagent d)
71
+
72
+ ### phase 2a — the host lanes (106)
73
+
74
+ - [x] 2a.007 write the file header and the imports of edgelandeshost.ts
75
+ - [x] 2a.008 export the executor and spec types riding the edgelandes contract
76
+ - [x] 2a.009 sandbox-bubblewrap: the bwrap probe
77
+ - [x] 2a.010 sandbox-bubblewrap: the executor (bwrap --ro-bind / / --unshare-all)
78
+ - [x] 2a.011 sandbox-bubblewrap: the lane spec entry
79
+ - [x] 2a.012 sandbox-bubblewrap: the test row
80
+ - [x] 2a.013 sandbox-nsjail: the nsjail probe
81
+ - [x] 2a.014 sandbox-nsjail: the executor (the nsjail config tree)
82
+ - [x] 2a.015 sandbox-nsjail: the lane spec entry
83
+ - [x] 2a.016 sandbox-nsjail: the test row
84
+ - [x] 2a.017 sandbox-chroot: the chroot probe
85
+ - [x] 2a.018 sandbox-chroot: the executor (the fakechroot fallback law)
86
+ - [x] 2a.019 sandbox-chroot: the lane spec entry
87
+ - [x] 2a.020 sandbox-chroot: the test row
88
+ - [x] 2a.021 container-podman: the podman probe
89
+ - [x] 2a.022 container-podman: the executor (rootless run --rm)
90
+ - [x] 2a.023 container-podman: the lane spec entry
91
+ - [x] 2a.024 container-podman: the test row
92
+ - [x] 2a.025 container-containerd: the containerd probe
93
+ - [x] 2a.026 container-containerd: the executor (ctr run under the deadline)
94
+ - [x] 2a.027 container-containerd: the lane spec entry
95
+ - [x] 2a.028 container-containerd: the test row
96
+ - [x] 2a.029 container-runc: the runc probe
97
+ - [x] 2a.030 container-runc: the executor (the spec.json and rootfs tree)
98
+ - [x] 2a.031 container-runc: the lane spec entry
99
+ - [x] 2a.032 container-runc: the test row
100
+ - [x] 2a.033 container-crun: the crun probe
101
+ - [x] 2a.034 container-crun: the executor (the crun run spec)
102
+ - [x] 2a.035 container-crun: the lane spec entry
103
+ - [x] 2a.036 container-crun: the test row
104
+ - [x] 2a.037 container-max: the docker max profile executor
105
+ - [x] 2a.038 container-max: the spec and the test row
106
+ - [x] 2a.039 container-lite: the docker lite profile executor
107
+ - [x] 2a.040 container-lite: the spec and the test row
108
+ - [x] 2a.041 container-ghcr: the ghcr immutable executor (pull --quiet)
109
+ - [x] 2a.042 container-ghcr: the spec and the test row
110
+ - [x] 2a.043 runtime-clr: the dotnet probe
111
+ - [x] 2a.044 runtime-clr: the executor (dotnet run the csx/script seat)
112
+ - [x] 2a.045 runtime-clr: the spec and the test row
113
+ - [x] 2a.046 runtime-workerd: the workerd probe
114
+ - [x] 2a.047 runtime-workerd: the executor (the capnp config and the run)
115
+ - [x] 2a.048 runtime-workerd: the spec and the test row
116
+ - [x] 2a.049 screen-xvfb: the xvfb-run probe
117
+ - [x] 2a.050 screen-xvfb: the executor (the virtual display run)
118
+ - [x] 2a.051 screen-xvfb: the spec and the test row
119
+ - [x] 2a.052 screen-wayland: the compositor probe (cage, weston)
120
+ - [x] 2a.053 screen-wayland: the executor (the headless compositor session)
121
+ - [x] 2a.054 screen-wayland: the spec and the test row
122
+ - [x] 2a.055 mobile-termux: the termux probe
123
+ - [x] 2a.056 mobile-termux: the executor (the honest absent answer law)
124
+ - [x] 2a.057 mobile-termux: the spec and the test row
125
+ - [x] 2a.058 build-bazel: the bazel probe
126
+ - [x] 2a.059 build-bazel: the executor (the BUILD file and the run)
127
+ - [x] 2a.060 build-bazel: the spec and the test row
128
+ - [x] 2a.061 build-buck: the buck2 probe
129
+ - [x] 2a.062 build-buck: the executor (the BUCK file and the run)
130
+ - [x] 2a.063 build-buck: the spec and the test row
131
+ - [x] 2a.064 build-turborepo: the turbo probe
132
+ - [x] 2a.065 build-turborepo: the executor (turbo run through the module seat)
133
+ - [x] 2a.066 build-turborepo: the spec and the test row
134
+ - [x] 2a.067 ci-actions: the actions-runner probe
135
+ - [x] 2a.068 ci-actions: the executor (the runner config law)
136
+ - [x] 2a.069 ci-actions: the spec and the test row
137
+ - [x] 2a.070 ci-gitlab: the gitlab-runner probe
138
+ - [x] 2a.071 ci-gitlab: the executor (the executor shell law)
139
+ - [x] 2a.072 ci-gitlab: the spec and the test row
140
+ - [x] 2a.073 network-tor: the tor probe
141
+ - [x] 2a.074 network-tor: the executor (the socks resolve through the circuit)
142
+ - [x] 2a.075 network-tor: the spec and the test row
143
+ - [x] 2a.076 network-i2p: the i2p probe
144
+ - [x] 2a.077 network-i2p: the executor (the tunnel address law)
145
+ - [x] 2a.078 network-i2p: the spec and the test row
146
+ - [x] 2a.079 network-wireguard: the wg probe
147
+ - [x] 2a.080 network-wireguard: the executor (the interface handshake law)
148
+ - [x] 2a.081 network-wireguard: the spec and the test row
149
+ - [x] 2a.082 storage-minio: the mc probe
150
+ - [x] 2a.083 storage-minio: the executor (the bucket alias law)
151
+ - [x] 2a.084 storage-minio: the spec and the test row
152
+ - [x] 2a.085 storage-garage: the garage probe
153
+ - [x] 2a.086 storage-garage: the executor (the key and bucket law)
154
+ - [x] 2a.087 storage-garage: the spec and the test row
155
+ - [x] 2a.088 write the executor map export (edgelaneexecutorshost)
156
+ - [x] 2a.089 write the lane spec export (hostlanespecs)
157
+ - [x] 2a.090 write the id export (hostlaneids)
158
+ - [x] 2a.091 the absent-runtime honesty test (every host lane answers the coded absence when the binary is absent)
159
+ - [x] 2a.092 the present-runtime smoke (the lanes whose binaries this host carries answer a real run)
160
+ - [x] 2a.093 the deadline law test (no host lane exceeds its budget)
161
+ - [x] 2a.094 the tempdir law test (no lane leaves bytes behind)
162
+ - [x] 2a.095 the output cap test (256 kb ceiling)
163
+ - [x] 2a.096 the spec coverage test (every executor has a spec, every spec an executor)
164
+ - [x] 2a.097 biome the file zero findings
165
+ - [x] 2a.098 the file compiles under the project baseline
166
+ - [x] 2a.099 the test file runs green
167
+ - [x] 2a.100 the report: the lane ids and the states
168
+ - [x] 2a.101 re-read the file top to bottom (the self review)
169
+ - [x] 2a.102 fix every finding of the self review
170
+ - [x] 2a.103 re-run the battery
171
+ - [x] 2a.104 the honest summary to the orchestrator
172
+ - [x] 2a.105 the group a checkpoint row in this ladder
173
+ - [x] 2a.106 the count check: twenty-five modalities wired
174
+
175
+ ### phase 2b — the in-process lanes (82)
176
+
177
+ - [x] 2b.007 write the file header and the imports of edgelandesinproc.ts
178
+ - [x] 2b.008 export the executor and spec types riding the contract
179
+ - [x] 2b.009 ram-tmpfs: the tmpfs mount recipe
180
+ - [x] 2b.010 ram-tmpfs: the executor (the in-memory fs tree)
181
+ - [x] 2b.011 ram-tmpfs: the spec and the test row
182
+ - [x] 2b.012 ram-mmap: the zero-copy map recipe
183
+ - [x] 2b.013 ram-mmap: the executor (the byte window law)
184
+ - [x] 2b.014 ram-mmap: the spec and the test row
185
+ - [x] 2b.015 ram-overlayfs: the overlay recipe
186
+ - [x] 2b.016 ram-overlayfs: the executor (the layer union law)
187
+ - [x] 2b.017 ram-overlayfs: the spec and the test row
188
+ - [x] 2b.018 ram-loopram: the loop disk recipe
189
+ - [x] 2b.019 ram-loopram: the executor (the sector map law)
190
+ - [x] 2b.020 ram-loopram: the spec and the test row
191
+ - [x] 2b.021 ram-gitram: the git object cache recipe
192
+ - [x] 2b.022 ram-gitram: the executor (the hash table law)
193
+ - [x] 2b.023 ram-gitram: the spec and the test row
194
+ - [x] 2b.024 ram-zram: the zstd stream recipe
195
+ - [x] 2b.025 ram-zram: the executor (the compressed page law)
196
+ - [x] 2b.026 ram-zram: the spec and the test row
197
+ - [x] 2b.027 ram-zswap: the swap front recipe
198
+ - [x] 2b.028 ram-zswap: the executor (the pool law)
199
+ - [x] 2b.029 ram-zswap: the spec and the test row
200
+ - [x] 2b.030 ram-swapfile: the swap file recipe
201
+ - [x] 2b.031 ram-swapfile: the executor (the extent table law)
202
+ - [x] 2b.032 ram-swapfile: the spec and the test row
203
+ - [x] 2b.033 delivery-cdn: the mirror manifest executor
204
+ - [x] 2b.034 delivery-cdn: the spec and the test row
205
+ - [x] 2b.035 delivery-wss: the websocket frame executor
206
+ - [x] 2b.036 delivery-wss: the spec and the test row
207
+ - [x] 2b.037 delivery-webtransport: the http3 datagram executor
208
+ - [x] 2b.038 delivery-webtransport: the spec and the test row
209
+ - [x] 2b.039 delivery-grpc: the grpc frame executor
210
+ - [x] 2b.040 delivery-grpc: the spec and the test row
211
+ - [x] 2b.041 delivery-capnproto: the capnp segment executor
212
+ - [x] 2b.042 delivery-capnproto: the spec and the test row
213
+ - [x] 2b.043 storage-libsql: the libsql seat executor
214
+ - [x] 2b.044 storage-libsql: the spec and the test row
215
+ - [x] 2b.045 storage-mysql: the wire handshake executor
216
+ - [x] 2b.046 storage-mysql: the spec and the test row
217
+ - [x] 2b.047 storage-postgres: the wire startup executor
218
+ - [x] 2b.048 storage-postgres: the spec and the test row
219
+ - [x] 2b.049 storage-s3: the bucket request executor
220
+ - [x] 2b.050 storage-s3: the spec and the test row
221
+ - [x] 2b.051 browser-webcontainer: the in-process node seat executor
222
+ - [x] 2b.052 browser-webcontainer: the spec and the test row
223
+ - [x] 2b.053 local-optin: the consent gate executor
224
+ - [x] 2b.054 local-optin: the spec and the test row
225
+ - [x] 2b.055 write the executor map export (edgelaneexecutorsinproc)
226
+ - [x] 2b.056 write the lane spec export (inproclanespecs)
227
+ - [x] 2b.057 write the id export (inproclaneids)
228
+ - [x] 2b.058 the determinism test (same input answers the same bytes)
229
+ - [x] 2b.059 the quota law test (every recipe answers its ceiling honestly)
230
+ - [x] 2b.060 the recipe fidelity test (the tmpfs microsecond, the map five, the zram five hundred)
231
+ - [x] 2b.061 the protocol frame tests (wss, webtransport, grpc, capnproto round trips)
232
+ - [x] 2b.062 the storage wire tests (the handshake bytes of every protocol)
233
+ - [x] 2b.063 the consent law test (local-optin refuses without the declared consent)
234
+ - [x] 2b.064 the webcontainer law test (the node seat answers the module law)
235
+ - [x] 2b.065 the spec coverage test
236
+ - [x] 2b.066 biome the file zero findings
237
+ - [x] 2b.067 the file compiles under the baseline
238
+ - [x] 2b.068 the test file runs green
239
+ - [x] 2b.069 the report: the lane ids and the states
240
+ - [x] 2b.070 re-read the file top to bottom (the self review)
241
+ - [x] 2b.071 fix every finding
242
+ - [x] 2b.072 re-run the battery
243
+ - [x] 2b.073 the honest summary
244
+ - [x] 2b.074 the checkpoint row
245
+ - [x] 2b.075 the count check: nineteen modalities wired
246
+ - [x] 2b.076 the oom-guard law row (every ram recipe answers the guard)
247
+ - [x] 2b.077 the origin-pin law row (every delivery lane pins the origin)
248
+ - [x] 2b.078 the auth-token law row (every storage wire lane carries the token law)
249
+ - [x] 2b.079 the visitor law row (no in-process lane touches a browser surface)
250
+ - [x] 2b.080 the artifact law row (every lane answers the artifact mime)
251
+ - [x] 2b.081 the inputs law row (the frozen inputs surface)
252
+ - - [x] 2b.082 the group b final check
253
+
254
+ ### phase 2c — the virtual hardware lanes (41)
255
+
256
+ - [x] 2c.007 write the file header and the imports of edgelandesvirtual.ts
257
+ - [x] 2c.008 export the executor and spec types riding the contract
258
+ - [x] 2c.009 virtual-full: the complete machine composition
259
+ - [x] 2c.010 virtual-full: the executor (cpu, gpu, memory, boot sequence)
260
+ - [x] 2c.011 virtual-full: the spec and the test row
261
+ - [x] 2c.012 virtual-vgpu: the mig slice composition
262
+ - [x] 2c.013 virtual-vgpu: the executor (the slice table law)
263
+ - [x] 2c.014 virtual-vgpu: the spec and the test row
264
+ - [x] 2c.015 virtual-screen: the vm plus vnc composition
265
+ - [x] 2c.016 virtual-screen: the executor (the display tree law)
266
+ - [x] 2c.017 virtual-screen: the spec and the test row
267
+ - [x] 2c.018 virtual-drivers: the driver surface composition
268
+ - [x] 2c.019 virtual-drivers: the executor (the nvml shim law)
269
+ - [x] 2c.020 virtual-drivers: the spec and the test row
270
+ - [x] 2c.021 virtual-kvm: the kvm machine composition
271
+ - [x] 2c.022 virtual-kvm: the executor (the clean rootfs law)
272
+ - [x] 2c.023 virtual-kvm: the spec and the test row
273
+ - [x] 2c.024 microvm-gpuless: the mesa llvmpipe composition
274
+ - [x] 2c.025 microvm-gpuless: the executor (lavapipe, rusticl, xvfb)
275
+ - [x] 2c.026 microvm-gpuless: the spec and the test row
276
+ - [x] 2c.027 gpu-virgl: the virgl context composition
277
+ - [x] 2c.028 gpu-virgl: the executor (the context quota law)
278
+ - [x] 2c.029 gpu-virgl: the spec and the test row
279
+ - [x] 2c.030 write the executor map export (edgelaneexecutorsvirtual)
280
+ - [x] 2c.031 write the lane spec export (virtuallanespecs)
281
+ - [x] 2c.032 write the id export (virtuallaneids)
282
+ - [x] 2c.033 the payload fidelity test (the procfs, smi and dmesg bytes the native engine emits)
283
+ - [x] 2c.034 the composition law test (every machine answers cpu, memory and boot)
284
+ - [x] 2c.035 the gpu law test (the vgpu slice answers the mig table)
285
+ - [x] 2c.036 the spec coverage test
286
+ - [x] 2c.037 biome the file zero findings
287
+ - [x] 2c.038 the file compiles under the baseline
288
+ - [x] 2c.039 the test file runs green
289
+ - [x] 2c.040 the report: the lane ids and the states
290
+ - [x] 2c.041 the count check: seven modalities wired
291
+
292
+ ### phase 2d — the plane integration (30)
293
+
294
+ - [x] 2d.1 merge the three executor maps into the dispatcher surface
295
+ - [x] 2d.2 extend the EDGELANES table with the group a entries
296
+ - [x] 2d.3 extend the EDGELANES table with the group b entries
297
+ - [x] 2d.4 extend the EDGELANES table with the group c entries
298
+ - [x] 2d.5 flip the registry states of the group a lanes to live
299
+ - [x] 2d.6 flip the registry states of the group b lanes to live
300
+ - [x] 2d.7 flip the registry states of the group c lanes to live
301
+ - [x] 2d.8 flip the six heavyweight lanes to host (browser-server, mobile-capacitor, mobile-postmarketos, pod-session, confidential-sevsnp, confidential-tdx)
302
+ - [x] 2d.9 the host probes of the six heavyweight lanes
303
+ - [x] 2d.10 update the pinned LIVESET of the registry test
304
+ - [x] 2d.11 update the pinned HOSTSET of the registry test
305
+ - [x] 2d.12 the plan report test (57 planned walks to 0, live 30 walks to 81, host 3 walks to 9)
306
+ - [x] 2d.13 extend the edgeplane test: the new lanes dispatch through runonedge
307
+ - [x] 2d.14 the lane table test (every lane probes, the report never lies)
308
+ - [x] 2d.15 the visitor law test over the new lanes
309
+ - [x] 2d.16 the webserver lanes route serves the extended table
310
+ - [x] 2d.17 the webserver run route dispatches the new lanes
311
+ - [x] 2d.18 the api surface types of the new lanes
312
+ - [x] 2d.19 the build check (npm run check green)
313
+ - [x] 2d.20 the full saddle battery green
314
+ - [x] 2d.21 the modalityregistry count stays ninety
315
+ - [x] 2d.22 the honest state audit (no lane claims more than it wires)
316
+ - [x] 2d.23 the join resolver walks the new records
317
+ - [x] 2d.24 the boot ladder still holds
318
+ - [x] 2d.25 the dist package carries the new files
319
+ - [x] 2d.26 the package export surface stays intact
320
+ - [x] 2d.27 the docs row (the worklog entry)
321
+ - [x] 2d.28 the plan ladder rows checked
322
+ - [x] 2d.29 the self review of the integration
323
+ - [x] 2d.30 the integration checkpoint
324
+
325
+ ### phase 2e — the app declarations (50, reconciled)
326
+
327
+ (the rebase onto main dropped the group e files: the parallel wave
328
+ #240 landed the family declaration seat — sandboxmodality.ts with the
329
+ join resolver — while this wave worked, and the no-duplication law
330
+ keeps the main branch's seat. the fifty rows below record the work
331
+ this wave did before the reconciliation; the debonair widening and
332
+ the per-app seats live on only in the wave history.)
333
+
334
+ - [x] 2e.01 argan: the modality declaration surface
335
+ - [x] 2e.02 argan: the declaration test
336
+ - [x] 2e.03 cadria: the modality declaration surface
337
+ - [x] 2e.04 cadria: the declaration test
338
+ - [x] 2e.05 cobaia: the modality declaration surface
339
+ - [x] 2e.06 cobaia: the declaration test
340
+ - [x] 2e.07 debonair: the wider vocabulary (the ninety ids ride the worker seat)
341
+ - [x] 2e.08 debonair: the declaration test update
342
+ - [x] 2e.09 devthink: the modality declaration surface
343
+ - [x] 2e.10 devthink: the declaration test
344
+ - [x] 2e.11 forge: the modality declaration surface
345
+ - [x] 2e.12 forge: the declaration test
346
+ - [x] 2e.13 foundry: the modality declaration surface
347
+ - [x] 2e.14 foundry: the declaration test
348
+ - [x] 2e.15 getry: the modality declaration surface
349
+ - [x] 2e.16 getry: the declaration test
350
+ - [x] 2e.17 stealthhead: the modality declaration surface
351
+ - [x] 2e.18 stealthhead: the declaration test
352
+ - [x] 2e.19 vault: the modality declaration surface
353
+ - [x] 2e.20 vault: the declaration test
354
+ - [x] 2e.21–2e.50: per-app verification rows (battery green, biome zero, the declaration law, the env seat, the family seam, the docs row, the honest summary — one row per app, ten apps)
355
+
356
+ ### phase 3 — the verification (15)
357
+
358
+ - [x] 3.1 the saddle battery green
359
+ - [x] 3.2 the devthink battery green
360
+ - [x] 3.3 the debonair battery green
361
+ - [x] 3.4 the getry battery green
362
+ - [x] 3.5 the forge battery green
363
+ - [x] 3.6 the foundry battery green
364
+ - [x] 3.7 the vault battery green
365
+ - [x] 3.8 the argan battery green
366
+ - [x] 3.9 the cadria battery green
367
+ - [x] 3.10 the cobaia battery green
368
+ - [x] 3.11 the stealthhead battery green
369
+ - [x] 3.12 the biome check of every touched file
370
+ - [x] 3.13 the build check
371
+ - [x] 3.14 the live proof (the lanes report through the api)
372
+ - [x] 3.15 the total count: every battery green, zero regression
373
+
374
+ ### phase 4 — the pull request (8)
375
+
376
+ - [x] 4.1 the commit with the family identity
377
+ - [x] 4.2 the branch push
378
+ - [x] 4.3 the pull request body (the law voice)
379
+ - [x] 4.4 the ci watch
380
+ - [x] 4.5 the flake law (rerun or admin when a check flakes)
381
+ - [x] 4.6 the squash merge keeping only main
382
+ - [x] 4.7 the branch delete
383
+ - [x] 4.8 the worklog and the ladder close
384
+
385
+ ## the honest state map (the wave answered)
386
+
387
+ - planned 57 → 0
388
+ - live 30 → 81 (30 + 51 wired)
389
+ - host 3 → 9 (3 + 6 heavyweight probes)
390
+ - total stays 90 (the plan count the owner charged)
391
+ - merged: pr #241 squashed as 538683c3, the branch deleted, only main
File without changes
File without changes
File without changes
File without changes
package/docs/release.md CHANGED
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -1,6 +1,6 @@
1
1
  # Saddle 1.8.13
2
2
 
3
- Saddle 1.8.13 carries the active code and release-facing manifests forward from 1.8.12. The previous [1.8.12 release notes](releasenotes-1.8.12.md) remain the canonical record for the licensing and artifact baseline. The comparative 1.8.21 research is planning material and is not presented as a shipped feature.
3
+ Saddle 1.8.13 carries the active code and release-facing manifests forward from 1.8.12. The previous [1.8.12 release notes](releasenotes1812.md) remain the canonical record for the licensing and artifact baseline. The comparative 1.8.21 research is planning material and is not presented as a shipped feature.
4
4
 
5
5
  ## Changes
6
6
 
@@ -67,4 +67,4 @@ The queue, structured extraction, browser context, workflow compensation and ret
67
67
 
68
68
  [1]: https://github.com/wenathlan/saddle "Saddle source repository"
69
69
  [2]: https://github.com/wenathlan/saddle/releases "Saddle release archive"
70
- [3]: https://github.com/wenathlan/saddle/blob/main/docs/releasenotes-1.8.12.md "Saddle 1.8.12 release notes"
70
+ [3]: https://github.com/wenathlan/saddle/blob/main/docs/releasenotes1812.md "Saddle 1.8.12 release notes"
@@ -64,4 +64,4 @@ Local gates passed before the tag was created. Desktop run `31806235468` complet
64
64
 
65
65
  [1]: https://github.com/wenathlan/saddle "Saddle source repository"
66
66
  [2]: https://github.com/wenathlan/saddle/releases "Saddle release archive"
67
- [3]: https://github.com/wenathlan/saddle/blob/main/docs/releasenotes-1.8.13.md "Saddle 1.8.13 release notes"
67
+ [3]: https://github.com/wenathlan/saddle/blob/main/docs/releasenotes1813.md "Saddle 1.8.13 release notes"