@amalgm/shell 0.1.164-preview.36072132286 → 0.1.164-preview.36809057014

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 (475) hide show
  1. package/PURPOSE.md +642 -128
  2. package/README.md +10 -8
  3. package/dist/accepted-tail.d.ts +26 -0
  4. package/dist/accepted-tail.js +37 -0
  5. package/dist/accepted-tail.js.map +1 -0
  6. package/dist/agent-execution.d.ts +16 -1
  7. package/dist/agent-execution.js +13 -5
  8. package/dist/agent-execution.js.map +1 -1
  9. package/dist/apply-cleanup.d.ts +28 -0
  10. package/dist/apply-cleanup.js +166 -0
  11. package/dist/apply-cleanup.js.map +1 -0
  12. package/dist/apply-recovery.d.ts +47 -0
  13. package/dist/apply-recovery.js +99 -0
  14. package/dist/apply-recovery.js.map +1 -0
  15. package/dist/apply-rows.d.ts +72 -0
  16. package/dist/apply-rows.js +150 -0
  17. package/dist/apply-rows.js.map +1 -0
  18. package/dist/apply-saves.d.ts +85 -0
  19. package/dist/apply-saves.js +238 -0
  20. package/dist/apply-saves.js.map +1 -0
  21. package/dist/boot.js +2 -1
  22. package/dist/boot.js.map +1 -1
  23. package/dist/capture-work.d.ts +8 -0
  24. package/dist/capture-work.js +67 -0
  25. package/dist/capture-work.js.map +1 -0
  26. package/dist/cargo-group.d.ts +45 -0
  27. package/dist/cargo-group.js +88 -0
  28. package/dist/cargo-group.js.map +1 -0
  29. package/dist/channel-session.d.ts +4 -2
  30. package/dist/channel-session.js +4 -3
  31. package/dist/channel-session.js.map +1 -1
  32. package/dist/chat-composition.d.ts +2 -0
  33. package/dist/chat-composition.js +1 -0
  34. package/dist/chat-composition.js.map +1 -1
  35. package/dist/cli.js +20 -1
  36. package/dist/cli.js.map +1 -1
  37. package/dist/construct-apply-host.d.ts +4 -2
  38. package/dist/construct-apply-host.js +8 -3
  39. package/dist/construct-apply-host.js.map +1 -1
  40. package/dist/construct-door.js +1 -1
  41. package/dist/construct-door.js.map +1 -1
  42. package/dist/construct-ledger.d.ts +6 -1
  43. package/dist/construct-ledger.js +21 -33
  44. package/dist/construct-ledger.js.map +1 -1
  45. package/dist/content-cache-collection.d.ts +18 -0
  46. package/dist/content-cache-collection.js +99 -0
  47. package/dist/content-cache-collection.js.map +1 -0
  48. package/dist/content-cache-host.d.ts +83 -17
  49. package/dist/content-cache-host.js +335 -95
  50. package/dist/content-cache-host.js.map +1 -1
  51. package/dist/content-cache-namespace.d.ts +59 -0
  52. package/dist/content-cache-namespace.js +210 -0
  53. package/dist/content-cache-namespace.js.map +1 -0
  54. package/dist/content-cache-ownership.d.ts +13 -0
  55. package/dist/content-cache-ownership.js +75 -0
  56. package/dist/content-cache-ownership.js.map +1 -0
  57. package/dist/content-cache-retention.d.ts +23 -0
  58. package/dist/content-cache-retention.js +195 -0
  59. package/dist/content-cache-retention.js.map +1 -0
  60. package/dist/content-capture-pool.d.ts +287 -0
  61. package/dist/content-capture-pool.js +461 -0
  62. package/dist/content-capture-pool.js.map +1 -0
  63. package/dist/content-capture-worker.d.ts +8 -0
  64. package/dist/content-capture-worker.js +109 -0
  65. package/dist/content-capture-worker.js.map +1 -0
  66. package/dist/content-clock.d.ts +42 -0
  67. package/dist/content-clock.js +166 -0
  68. package/dist/content-clock.js.map +1 -0
  69. package/dist/content-direct.d.ts +2 -0
  70. package/dist/content-direct.js +12 -0
  71. package/dist/content-direct.js.map +1 -1
  72. package/dist/content-failure.d.ts +18 -0
  73. package/dist/content-failure.js +38 -0
  74. package/dist/content-failure.js.map +1 -0
  75. package/dist/content-stream-thread.d.ts +60 -0
  76. package/dist/content-stream-thread.js +95 -0
  77. package/dist/content-stream-thread.js.map +1 -0
  78. package/dist/content-stream-worker.d.ts +7 -0
  79. package/dist/content-stream-worker.js +52 -0
  80. package/dist/content-stream-worker.js.map +1 -0
  81. package/dist/declaration-absorption.d.ts +37 -0
  82. package/dist/declaration-absorption.js +119 -0
  83. package/dist/declaration-absorption.js.map +1 -0
  84. package/dist/declaration-chain.d.ts +36 -0
  85. package/dist/declaration-chain.js +96 -0
  86. package/dist/declaration-chain.js.map +1 -0
  87. package/dist/declaration-commit.d.ts +31 -0
  88. package/dist/declaration-commit.js +49 -0
  89. package/dist/declaration-commit.js.map +1 -0
  90. package/dist/declaration-hold.d.ts +22 -0
  91. package/dist/declaration-hold.js +24 -0
  92. package/dist/declaration-hold.js.map +1 -0
  93. package/dist/declaration-journal.d.ts +62 -0
  94. package/dist/declaration-journal.js +99 -0
  95. package/dist/declaration-journal.js.map +1 -0
  96. package/dist/declaration-save.d.ts +31 -0
  97. package/dist/declaration-save.js +134 -0
  98. package/dist/declaration-save.js.map +1 -0
  99. package/dist/detection/accepted-result.d.ts +19 -1
  100. package/dist/detection/accepted-result.js +36 -5
  101. package/dist/detection/accepted-result.js.map +1 -1
  102. package/dist/detection/admission-save.d.ts +55 -0
  103. package/dist/detection/admission-save.js +48 -0
  104. package/dist/detection/admission-save.js.map +1 -0
  105. package/dist/detection/admission-units.d.ts +66 -0
  106. package/dist/detection/admission-units.js +322 -0
  107. package/dist/detection/admission-units.js.map +1 -0
  108. package/dist/detection/alias-discovery.d.ts +12 -0
  109. package/dist/detection/alias-discovery.js +80 -0
  110. package/dist/detection/alias-discovery.js.map +1 -0
  111. package/dist/detection/alias-examination.d.ts +30 -0
  112. package/dist/detection/alias-examination.js +49 -0
  113. package/dist/detection/alias-examination.js.map +1 -0
  114. package/dist/detection/apply-ownership.d.ts +81 -0
  115. package/dist/detection/apply-ownership.js +232 -0
  116. package/dist/detection/apply-ownership.js.map +1 -0
  117. package/dist/detection/basis-advanced.d.ts +11 -0
  118. package/dist/detection/basis-advanced.js +26 -0
  119. package/dist/detection/basis-advanced.js.map +1 -0
  120. package/dist/detection/capture-outcome.d.ts +16 -0
  121. package/dist/detection/capture-outcome.js +92 -0
  122. package/dist/detection/capture-outcome.js.map +1 -0
  123. package/dist/detection/container-membership.d.ts +32 -0
  124. package/dist/detection/container-membership.js +49 -0
  125. package/dist/detection/container-membership.js.map +1 -0
  126. package/dist/detection/detect-cancelled.d.ts +6 -0
  127. package/dist/detection/detect-cancelled.js +10 -0
  128. package/dist/detection/detect-cancelled.js.map +1 -0
  129. package/dist/detection/directory-proof.d.ts +47 -0
  130. package/dist/detection/directory-proof.js +77 -0
  131. package/dist/detection/directory-proof.js.map +1 -0
  132. package/dist/detection/disposition-rows.d.ts +18 -0
  133. package/dist/detection/disposition-rows.js +29 -0
  134. package/dist/detection/disposition-rows.js.map +1 -0
  135. package/dist/detection/dispositions.d.ts +130 -0
  136. package/dist/detection/dispositions.js +248 -0
  137. package/dist/detection/dispositions.js.map +1 -0
  138. package/dist/detection/git-notice.d.ts +88 -0
  139. package/dist/detection/git-notice.js +444 -0
  140. package/dist/detection/git-notice.js.map +1 -0
  141. package/dist/detection/ground-proof.d.ts +130 -0
  142. package/dist/detection/ground-proof.js +274 -0
  143. package/dist/detection/ground-proof.js.map +1 -0
  144. package/dist/detection/ground-reader.d.ts +29 -0
  145. package/dist/detection/ground-reader.js +102 -0
  146. package/dist/detection/ground-reader.js.map +1 -0
  147. package/dist/detection/held-territory.d.ts +51 -0
  148. package/dist/detection/held-territory.js +205 -0
  149. package/dist/detection/held-territory.js.map +1 -0
  150. package/dist/detection/identity-discovery.d.ts +45 -0
  151. package/dist/detection/identity-discovery.js +287 -0
  152. package/dist/detection/identity-discovery.js.map +1 -0
  153. package/dist/detection/maintenance-sweep.d.ts +108 -0
  154. package/dist/detection/maintenance-sweep.js +325 -0
  155. package/dist/detection/maintenance-sweep.js.map +1 -0
  156. package/dist/detection/name-reach.d.ts +12 -0
  157. package/dist/detection/name-reach.js +28 -0
  158. package/dist/detection/name-reach.js.map +1 -0
  159. package/dist/detection/notebook-basis.d.ts +5 -7
  160. package/dist/detection/notebook-basis.js +6 -7
  161. package/dist/detection/notebook-basis.js.map +1 -1
  162. package/dist/detection/owed-selection.d.ts +51 -0
  163. package/dist/detection/owed-selection.js +169 -0
  164. package/dist/detection/owed-selection.js.map +1 -0
  165. package/dist/detection/portable.d.ts +34 -34
  166. package/dist/detection/portable.js +67 -93
  167. package/dist/detection/portable.js.map +1 -1
  168. package/dist/detection/reconciliation-coverage.d.ts +7 -0
  169. package/dist/detection/reconciliation-coverage.js +16 -0
  170. package/dist/detection/reconciliation-coverage.js.map +1 -0
  171. package/dist/detection/repository-publication.d.ts +20 -0
  172. package/dist/detection/repository-publication.js +79 -0
  173. package/dist/detection/repository-publication.js.map +1 -0
  174. package/dist/detection/repository-routes.d.ts +43 -0
  175. package/dist/detection/repository-routes.js +97 -0
  176. package/dist/detection/repository-routes.js.map +1 -0
  177. package/dist/detection/root-examination.d.ts +94 -0
  178. package/dist/detection/root-examination.js +523 -0
  179. package/dist/detection/root-examination.js.map +1 -0
  180. package/dist/detection/runtime.d.ts +131 -64
  181. package/dist/detection/runtime.js +808 -1103
  182. package/dist/detection/runtime.js.map +1 -1
  183. package/dist/detection/scoped-identity-port.d.ts +34 -0
  184. package/dist/detection/scoped-identity-port.js +81 -0
  185. package/dist/detection/scoped-identity-port.js.map +1 -0
  186. package/dist/detection/seal-law.d.ts +66 -0
  187. package/dist/detection/seal-law.js +116 -0
  188. package/dist/detection/seal-law.js.map +1 -0
  189. package/dist/detection/sharing-policy.d.ts +11 -0
  190. package/dist/detection/sharing-policy.js +32 -0
  191. package/dist/detection/sharing-policy.js.map +1 -0
  192. package/dist/detection/thread-database.d.ts +4 -0
  193. package/dist/detection/thread-database.js +30 -0
  194. package/dist/detection/thread-database.js.map +1 -0
  195. package/dist/detection/unreadable.d.ts +11 -0
  196. package/dist/detection/unreadable.js +9 -0
  197. package/dist/detection/unreadable.js.map +1 -0
  198. package/dist/detection/verified-content.d.ts +6 -0
  199. package/dist/detection/verified-content.js +12 -0
  200. package/dist/detection/verified-content.js.map +1 -0
  201. package/dist/detection/walk-law.d.ts +34 -0
  202. package/dist/detection/walk-law.js +55 -0
  203. package/dist/detection/walk-law.js.map +1 -0
  204. package/dist/development/fly-guest.js +2 -1
  205. package/dist/development/fly-guest.js.map +1 -1
  206. package/dist/entity-apply-host.d.ts +29 -13
  207. package/dist/entity-apply-host.js +1426 -461
  208. package/dist/entity-apply-host.js.map +1 -1
  209. package/dist/entity-apply-store.d.ts +77 -30
  210. package/dist/entity-apply-store.js +221 -516
  211. package/dist/entity-apply-store.js.map +1 -1
  212. package/dist/entity-record-observability.js +2 -0
  213. package/dist/entity-record-observability.js.map +1 -1
  214. package/dist/entity-record-saves.d.ts +20 -0
  215. package/dist/entity-record-saves.js +91 -0
  216. package/dist/entity-record-saves.js.map +1 -0
  217. package/dist/entity-record-store.d.ts +15 -7
  218. package/dist/entity-record-store.js +57 -117
  219. package/dist/entity-record-store.js.map +1 -1
  220. package/dist/files-register-host.d.ts +22 -3
  221. package/dist/files-register-host.js +70 -31
  222. package/dist/files-register-host.js.map +1 -1
  223. package/dist/filesystem.js +3 -2
  224. package/dist/filesystem.js.map +1 -1
  225. package/dist/git-binding.d.ts +65 -0
  226. package/dist/git-binding.js +220 -0
  227. package/dist/git-binding.js.map +1 -0
  228. package/dist/git-capture.d.ts +39 -0
  229. package/dist/git-capture.js +86 -0
  230. package/dist/git-capture.js.map +1 -0
  231. package/dist/git-card.d.ts +12 -0
  232. package/dist/git-card.js +123 -0
  233. package/dist/git-card.js.map +1 -0
  234. package/dist/git-checkpoint-construction.d.ts +41 -0
  235. package/dist/git-checkpoint-construction.js +96 -0
  236. package/dist/git-checkpoint-construction.js.map +1 -0
  237. package/dist/git-checkpoint-preparation.d.ts +37 -0
  238. package/dist/git-checkpoint-preparation.js +145 -0
  239. package/dist/git-checkpoint-preparation.js.map +1 -0
  240. package/dist/git-command.d.ts +61 -8
  241. package/dist/git-command.js +217 -63
  242. package/dist/git-command.js.map +1 -1
  243. package/dist/git-configuration.d.ts +40 -0
  244. package/dist/git-configuration.js +217 -0
  245. package/dist/git-configuration.js.map +1 -0
  246. package/dist/git-evidence.d.ts +61 -0
  247. package/dist/git-evidence.js +181 -0
  248. package/dist/git-evidence.js.map +1 -0
  249. package/dist/git-index-entries.d.ts +15 -0
  250. package/dist/git-index-entries.js +44 -0
  251. package/dist/git-index-entries.js.map +1 -0
  252. package/dist/git-index-format.d.ts +35 -0
  253. package/dist/git-index-format.js +293 -0
  254. package/dist/git-index-format.js.map +1 -0
  255. package/dist/git-index-witness.d.ts +33 -0
  256. package/dist/git-index-witness.js +69 -0
  257. package/dist/git-index-witness.js.map +1 -0
  258. package/dist/git-literal-host.d.ts +82 -0
  259. package/dist/git-literal-host.js +172 -0
  260. package/dist/git-literal-host.js.map +1 -0
  261. package/dist/git-literal-read.d.ts +88 -0
  262. package/dist/git-literal-read.js +170 -0
  263. package/dist/git-literal-read.js.map +1 -0
  264. package/dist/git-literal-replay.d.ts +33 -0
  265. package/dist/git-literal-replay.js +268 -0
  266. package/dist/git-literal-replay.js.map +1 -0
  267. package/dist/git-native-file.d.ts +42 -0
  268. package/dist/git-native-file.js +145 -0
  269. package/dist/git-native-file.js.map +1 -0
  270. package/dist/git-native-index.d.ts +21 -0
  271. package/dist/git-native-index.js +44 -0
  272. package/dist/git-native-index.js.map +1 -0
  273. package/dist/git-operation-host.d.ts +48 -0
  274. package/dist/git-operation-host.js +127 -0
  275. package/dist/git-operation-host.js.map +1 -0
  276. package/dist/git-private-index.d.ts +11 -0
  277. package/dist/git-private-index.js +42 -0
  278. package/dist/git-private-index.js.map +1 -0
  279. package/dist/git-private-repository.d.ts +4 -0
  280. package/dist/git-private-repository.js +69 -0
  281. package/dist/git-private-repository.js.map +1 -0
  282. package/dist/git-private-view.d.ts +39 -0
  283. package/dist/git-private-view.js +162 -0
  284. package/dist/git-private-view.js.map +1 -0
  285. package/dist/git-ref-store.d.ts +12 -0
  286. package/dist/git-ref-store.js +68 -0
  287. package/dist/git-ref-store.js.map +1 -0
  288. package/dist/git-registration-host.d.ts +20 -30
  289. package/dist/git-registration-host.js +86 -249
  290. package/dist/git-registration-host.js.map +1 -1
  291. package/dist/git-repository-host.d.ts +148 -22
  292. package/dist/git-repository-host.js +633 -650
  293. package/dist/git-repository-host.js.map +1 -1
  294. package/dist/git-worktree-host.d.ts +2 -0
  295. package/dist/git-worktree-host.js +16 -0
  296. package/dist/git-worktree-host.js.map +1 -0
  297. package/dist/graph-publication.d.ts +75 -0
  298. package/dist/graph-publication.js +203 -0
  299. package/dist/graph-publication.js.map +1 -0
  300. package/dist/ground-basis.d.ts +242 -0
  301. package/dist/ground-basis.js +1023 -0
  302. package/dist/ground-basis.js.map +1 -0
  303. package/dist/ground-checkpoint-worker.d.ts +1 -0
  304. package/dist/ground-checkpoint-worker.js +84 -0
  305. package/dist/ground-checkpoint-worker.js.map +1 -0
  306. package/dist/ground-checkpoints.d.ts +16 -0
  307. package/dist/ground-checkpoints.js +45 -0
  308. package/dist/ground-checkpoints.js.map +1 -0
  309. package/dist/ground-coordination.d.ts +107 -3
  310. package/dist/ground-coordination.js +249 -24
  311. package/dist/ground-coordination.js.map +1 -1
  312. package/dist/ground-database.d.ts +42 -0
  313. package/dist/ground-database.js +290 -0
  314. package/dist/ground-database.js.map +1 -0
  315. package/dist/ground-differences.d.ts +23 -0
  316. package/dist/ground-differences.js +47 -0
  317. package/dist/ground-differences.js.map +1 -0
  318. package/dist/ground-holders.d.ts +4 -0
  319. package/dist/ground-holders.js +15 -0
  320. package/dist/ground-holders.js.map +1 -0
  321. package/dist/ground-initialization-worker.d.ts +1 -0
  322. package/dist/ground-initialization-worker.js +20 -0
  323. package/dist/ground-initialization-worker.js.map +1 -0
  324. package/dist/ground-initialization.d.ts +35 -0
  325. package/dist/ground-initialization.js +102 -0
  326. package/dist/ground-initialization.js.map +1 -0
  327. package/dist/ground-install-saves.d.ts +63 -0
  328. package/dist/ground-install-saves.js +139 -0
  329. package/dist/ground-install-saves.js.map +1 -0
  330. package/dist/ground-inventory-schema.d.ts +18 -0
  331. package/dist/ground-inventory-schema.js +168 -0
  332. package/dist/ground-inventory-schema.js.map +1 -0
  333. package/dist/ground-profile.d.ts +7 -0
  334. package/dist/ground-profile.js +52 -0
  335. package/dist/ground-profile.js.map +1 -0
  336. package/dist/ground-root-index.d.ts +2 -1
  337. package/dist/ground-root-index.js +16 -14
  338. package/dist/ground-root-index.js.map +1 -1
  339. package/dist/ground-row.d.ts +62 -0
  340. package/dist/ground-row.js +70 -0
  341. package/dist/ground-row.js.map +1 -0
  342. package/dist/ground-save-ops.d.ts +44 -0
  343. package/dist/ground-save-ops.js +41 -0
  344. package/dist/ground-save-ops.js.map +1 -0
  345. package/dist/ground-saver-worker.d.ts +1 -0
  346. package/dist/ground-saver-worker.js +156 -0
  347. package/dist/ground-saver-worker.js.map +1 -0
  348. package/dist/ground-saver.d.ts +75 -0
  349. package/dist/ground-saver.js +216 -0
  350. package/dist/ground-saver.js.map +1 -0
  351. package/dist/ground-store.d.ts +84 -0
  352. package/dist/ground-store.js +473 -0
  353. package/dist/ground-store.js.map +1 -0
  354. package/dist/ground-territory.d.ts +130 -0
  355. package/dist/ground-territory.js +511 -0
  356. package/dist/ground-territory.js.map +1 -0
  357. package/dist/index.d.ts +1 -1
  358. package/dist/index.js.map +1 -1
  359. package/dist/installation/ownership.d.ts +0 -2
  360. package/dist/installation/ownership.js +3 -15
  361. package/dist/installation/ownership.js.map +1 -1
  362. package/dist/machine-host.d.ts +3 -2
  363. package/dist/machine-host.js +28 -16
  364. package/dist/machine-host.js.map +1 -1
  365. package/dist/materialized-graph.d.ts +7 -7
  366. package/dist/materialized-graph.js +11 -23
  367. package/dist/materialized-graph.js.map +1 -1
  368. package/dist/module-thread.d.ts +9 -0
  369. package/dist/module-thread.js +10 -0
  370. package/dist/module-thread.js.map +1 -0
  371. package/dist/native/fsevents-stream.node +0 -0
  372. package/dist/physical-path-witness.d.ts +64 -0
  373. package/dist/physical-path-witness.js +168 -0
  374. package/dist/physical-path-witness.js.map +1 -0
  375. package/dist/register-upload-fusion.d.ts +5 -4
  376. package/dist/register-upload-fusion.js +9 -6
  377. package/dist/register-upload-fusion.js.map +1 -1
  378. package/dist/registry-graph.d.ts +3 -2
  379. package/dist/registry-graph.js +9 -6
  380. package/dist/registry-graph.js.map +1 -1
  381. package/dist/registry-page-cache.d.ts +5 -2
  382. package/dist/registry-page-cache.js.map +1 -1
  383. package/dist/repository-identity-steps.d.ts +5 -0
  384. package/dist/repository-identity-steps.js +33 -0
  385. package/dist/repository-identity-steps.js.map +1 -0
  386. package/dist/runtime-node-flags.d.ts +10 -0
  387. package/dist/runtime-node-flags.js +11 -0
  388. package/dist/runtime-node-flags.js.map +1 -0
  389. package/dist/service/adapter.d.ts +1 -1
  390. package/dist/service/adapter.js +1 -1
  391. package/dist/service/adapter.js.map +1 -1
  392. package/dist/service/cli.js +16 -20
  393. package/dist/service/cli.js.map +1 -1
  394. package/dist/service/control.d.ts +2 -2
  395. package/dist/service/keepalive.d.ts +4 -11
  396. package/dist/service/keepalive.js +65 -118
  397. package/dist/service/keepalive.js.map +1 -1
  398. package/dist/service/policy.d.ts +36 -0
  399. package/dist/service/policy.js +25 -0
  400. package/dist/service/policy.js.map +1 -0
  401. package/dist/service/portable.d.ts +1 -1
  402. package/dist/service/portable.js +1 -1
  403. package/dist/service/portable.js.map +1 -1
  404. package/dist/service/recovery.d.ts +10 -9
  405. package/dist/service/recovery.js +29 -19
  406. package/dist/service/recovery.js.map +1 -1
  407. package/dist/service/windows-action.d.ts +5 -3
  408. package/dist/service/windows-action.js +6 -9
  409. package/dist/service/windows-action.js.map +1 -1
  410. package/dist/service/windows-task.js +5 -5
  411. package/dist/service/windows-task.js.map +1 -1
  412. package/dist/sharing-admission.d.ts +17 -0
  413. package/dist/sharing-admission.js +128 -0
  414. package/dist/sharing-admission.js.map +1 -0
  415. package/dist/snapshot-delivery-baseline.d.ts +12 -3
  416. package/dist/snapshot-delivery-baseline.js +41 -42
  417. package/dist/snapshot-delivery-baseline.js.map +1 -1
  418. package/dist/source-proof.d.ts +36 -0
  419. package/dist/source-proof.js +70 -0
  420. package/dist/source-proof.js.map +1 -0
  421. package/dist/source-signature.d.ts +56 -0
  422. package/dist/source-signature.js +56 -0
  423. package/dist/source-signature.js.map +1 -0
  424. package/dist/source-witness.d.ts +15 -0
  425. package/dist/source-witness.js +29 -0
  426. package/dist/source-witness.js.map +1 -0
  427. package/dist/sqlite-durability.d.ts +31 -0
  428. package/dist/sqlite-durability.js +28 -0
  429. package/dist/sqlite-durability.js.map +1 -0
  430. package/dist/sqlite.d.ts +8 -2
  431. package/dist/sqlite.js +27 -4
  432. package/dist/sqlite.js.map +1 -1
  433. package/dist/sync-address.d.ts +19 -0
  434. package/dist/sync-address.js +52 -0
  435. package/dist/sync-address.js.map +1 -0
  436. package/dist/sync-setting.d.ts +15 -0
  437. package/dist/sync-setting.js +13 -0
  438. package/dist/sync-setting.js.map +1 -1
  439. package/dist/turns.d.ts +42 -0
  440. package/dist/turns.js +112 -0
  441. package/dist/turns.js.map +1 -0
  442. package/dist/updates/bootstrap.d.ts +53 -7
  443. package/dist/updates/bootstrap.js +224 -137
  444. package/dist/updates/bootstrap.js.map +1 -1
  445. package/dist/updates/controller.d.ts +8 -0
  446. package/dist/updates/controller.js +27 -3
  447. package/dist/updates/controller.js.map +1 -1
  448. package/dist/updates/store.d.ts +3 -0
  449. package/dist/updates/store.js +12 -0
  450. package/dist/updates/store.js.map +1 -1
  451. package/dist/user-ground-host.d.ts +364 -69
  452. package/dist/user-ground-host.js +5231 -3366
  453. package/dist/user-ground-host.js.map +1 -1
  454. package/dist/watching/fsevents.d.ts +52 -1
  455. package/dist/watching/fsevents.js +60 -25
  456. package/dist/watching/fsevents.js.map +1 -1
  457. package/dist/watching/host.d.ts +129 -5
  458. package/dist/watching/host.js +433 -80
  459. package/dist/watching/host.js.map +1 -1
  460. package/dist/watching/index.d.ts +1 -1
  461. package/dist/wire-binary.d.ts +3 -2
  462. package/dist/wire-binary.js +10 -8
  463. package/dist/wire-binary.js.map +1 -1
  464. package/dist/wire-client.d.ts +3 -4
  465. package/dist/wire-client.js +18 -44
  466. package/dist/wire-client.js.map +1 -1
  467. package/dist/wire-outbox.d.ts +34 -0
  468. package/dist/wire-outbox.js +127 -0
  469. package/dist/wire-outbox.js.map +1 -0
  470. package/dist/workspace-host.d.ts +4 -0
  471. package/dist/workspace-host.js +12 -1
  472. package/dist/workspace-host.js.map +1 -1
  473. package/examinations/fixtures/private-wire-authority.js +133 -10
  474. package/npm-shrinkwrap.json +43 -56
  475. package/package.json +26 -13
@@ -0,0 +1,523 @@
1
+ /** A complete examination of one root, run on a content thread. Disk and Git
2
+ * are read against O, as of S0, by the same walk and seal laws as the main
3
+ * walk, and O against the sharing (B) selection makes of it, from committed
4
+ * facts alone (see owed-selection.ts). What it cannot prove unchanged it
5
+ * names, D, and never examines: a difference against O, an address where B
6
+ * is not yet O's selection, a repository whose seal no longer answers, or one
7
+ * enclosing a difference. Everything else it closes, and carries what
8
+ * admission needs to retain it:
9
+ * the addresses and Git storage it read, every regular file it read (Git's
10
+ * native files included) as one buffer of exact 64-bit (device, inode) pairs, and
11
+ * which seals it reused. Ground it
12
+ * cannot read, or O it cannot trust, ends it with one reason instead. Its
13
+ * listings close under the root's content clock, stamped on the main thread
14
+ * before the job, as ground-proof.ts closes any walk's: one no stamp can
15
+ * qualify lists again when the walk closes, and a racy one ends it, since
16
+ * only a later stamp closes it and the main walk answers for the root. It
17
+ * never writes.
18
+ *
19
+ * Maintenance is the same walk and comparison against O as it stands, with no
20
+ * selection to prove. It concludes nothing: every difference is
21
+ * a finding for the scoped lanes, ground it cannot read or Apply holds is a
22
+ * gap, and O it cannot trust is one finding at the root. */
23
+ import { lstatSync, readdirSync } from "node:fs";
24
+ import { join, sep } from "node:path";
25
+ import { classifyDirectory, classifyRegisteredRoot, finishSteps, indexRepositoryTerritory } from "@amalgm/live";
26
+ import { CaptureSourceChangedError } from "../content-cache-host.js";
27
+ import { listingQualification } from "../content-clock.js";
28
+ import { heldDeclarations } from "../declaration-hold.js";
29
+ import { currentSequence, rootRevision } from "../ground-basis.js";
30
+ import { groundRowProjection } from "../ground-row.js";
31
+ import { repositoryFootprint } from "../git-configuration.js";
32
+ import { boundedForEach } from "../bounded-for-each.js";
33
+ import { GitCapture } from "../git-capture.js";
34
+ import { collectGitEvidence, sealRefused } from "../git-evidence.js";
35
+ import { pushPhysicalPair } from "../ground-coordination.js";
36
+ import { marksRepository, observeGitMarker } from "../git-repository-host.js";
37
+ import { closePhysically } from "../source-proof.js";
38
+ import { physicalKey, sourceFingerprint, sourceReusable, sourceSignature } from "../source-signature.js";
39
+ import { ApplyOwnershipSnapshot, ownedObject, sqliteApplyOwnership } from "./apply-ownership.js";
40
+ import { GroundSourceProof } from "./ground-proof.js";
41
+ import { threadDatabase } from "./thread-database.js";
42
+ import { owedSelection } from "./owed-selection.js";
43
+ import { readSealedRepositoryEvidence, sealMiss } from "./seal-law.js";
44
+ import { readSharingPolicy } from "./sharing-policy.js";
45
+ import { heldPaths, listAgain, railChanged, vanished, walkDifference, walkSkips } from "./walk-law.js";
46
+ /** Git processes one examination runs at once. */
47
+ const GIT_CONCURRENCY = 4;
48
+ const container = (type) => type === "workspace" || type === "folder" || type === "repo.git";
49
+ /** Why the whole root needs the main walk, and the O it was read against. */
50
+ class Differs {
51
+ reason;
52
+ basis;
53
+ constructor(reason, basis = "") {
54
+ this.reason = reason;
55
+ this.basis = basis;
56
+ }
57
+ }
58
+ function differ(reason, basis = "") { throw new Differs(reason, basis); }
59
+ const NO_CAUSE = { forceObserve: false, dirty: false, scoped: false };
60
+ /** O, B, the seals and Apply ownership as one committed read, stamped with
61
+ * the S0 and root revision it was read at. `includes` is admission's sharing
62
+ * policy, under which it reads where B is not yet O's selection. */
63
+ function readSnapshot(database, job, includes) {
64
+ return database.transaction(() => {
65
+ const roots = database.prepare(`SELECT root_uuid FROM entities
66
+ WHERE absolute_path = ? AND relative_path = '' AND status = 'active'`).pluck().all(job.rootPath);
67
+ const revision = roots.length === 1 ? rootRevision(database, roots[0]) : String(roots.length);
68
+ const basis = `${currentSequence(database)}:${revision}`;
69
+ const refuse = (reason) => differ(reason, basis);
70
+ if (roots.length !== 1)
71
+ refuse(roots.length ? "foreign-root-rows" : "no-root-row");
72
+ const rootUUID = roots[0];
73
+ const prefix = job.rootPath.endsWith(sep) ? job.rootPath : job.rootPath + sep;
74
+ // Another root's row at or inside this one is ground this walk would own.
75
+ for (const inventory of ["entities", "detection_notebook"]) {
76
+ if (database.prepare(`SELECT 1 FROM ${inventory} WHERE root_uuid <> ?
77
+ AND (absolute_path = ? OR (absolute_path >= ? AND absolute_path < ?)) LIMIT 1`)
78
+ .get(rootUUID, job.rootPath, prefix, prefix.slice(0, -1) + String.fromCharCode(sep.charCodeAt(0) + 1))) {
79
+ refuse("foreign-root-rows");
80
+ }
81
+ }
82
+ // Each inventory's rows of the root, addressed where they stand in it.
83
+ // Retired history keeps the address it was retired at.
84
+ const framed = (inventory) => database.prepare(`SELECT ${groundRowProjection(inventory)} FROM ${inventory} WHERE root_uuid = ?`)
85
+ .all(rootUUID).map(row => {
86
+ if (row.resourceId !== job.resourceId)
87
+ refuse("foreign-resource");
88
+ const address = below(job.rootPath, row.absolutePath)
89
+ ?? (row.status === "active" ? refuse("outside-root") : row.relativePath);
90
+ return address === row.relativePath ? row : { ...row, relativePath: address };
91
+ });
92
+ const rows = framed("entities");
93
+ const byPath = new Map();
94
+ for (const row of rows) {
95
+ if (row.status !== "active")
96
+ refuse("inactive-rows");
97
+ byPath.set(row.relativePath, row);
98
+ }
99
+ if (!byPath.has(""))
100
+ refuse("no-root-row");
101
+ let held;
102
+ if (job.core) {
103
+ const references = new Set(rows.filter(row => row.type === "reference").map(row => row.payloadVersion));
104
+ if (job.core.bindings.some(id => !references.has(id)))
105
+ refuse("missing-reference");
106
+ held = heldDeclarations(database, job.core.bindings);
107
+ }
108
+ else if (heldDeclarations(database, [rootUUID]).size)
109
+ refuse("held");
110
+ let owed = [];
111
+ if (includes) {
112
+ const withheld = new Set(heldPaths(rows, held));
113
+ owed = owedSelection(database, { rootUUID, observed: rows, shared: framed("detection_notebook"),
114
+ includes: path => includes(path) && !withheld.has(path) });
115
+ // Nothing of a root B never held was selected.
116
+ if (owed.some(identity => identity.path === ""))
117
+ differ("unshared-root");
118
+ }
119
+ const seals = new Map(rows.filter(row => row.type === "repo.git")
120
+ .map(row => [row.uuid, readSealedRepositoryEvidence(database, row.uuid)]));
121
+ const shared = database.prepare("SELECT uuid FROM detection_notebook WHERE root_uuid = ?").pluck().all(rootUUID);
122
+ const ownership = new ApplyOwnershipSnapshot(sqliteApplyOwnership(database));
123
+ const owners = ownership.use({ subtrees: [job.rootPath], uuids: new Set([...rows.map(row => row.uuid), ...shared]) });
124
+ if (includes && owners.length)
125
+ differ("apply-owner");
126
+ return { rootUUID, revision, basis, byPath, owed, seals, ownership, owners, sequence: currentSequence(database) };
127
+ })();
128
+ }
129
+ const byName = (left, right) => left.name < right.name ? -1 : left.name > right.name ? 1 : 0;
130
+ const ancestors = (path) => path.split("/").slice(0, -1).map((_, index, names) => names.slice(0, index + 1).join("/"));
131
+ /** A path's portable address inside a directory: "" for the directory itself,
132
+ * null outside it. */
133
+ function below(directory, path) {
134
+ if (path === directory)
135
+ return "";
136
+ const prefix = directory.endsWith(sep) ? directory : directory + sep;
137
+ return path.startsWith(prefix) ? path.slice(prefix.length).split(sep).join("/") : null;
138
+ }
139
+ /** The addresses one Apply owner holds in this root, or the whole root when
140
+ * none of its scope can be named here. */
141
+ function ownedAddresses(rootPath, owner, byUuid) {
142
+ const addresses = [
143
+ ...owner.cones.map(cone => below(cone, rootPath) !== null ? "" : below(rootPath, cone)),
144
+ ...owner.uuids.map(uuid => byUuid.get(uuid)?.relativePath ?? null),
145
+ ].filter((address) => address !== null);
146
+ return addresses.length ? addresses : [""];
147
+ }
148
+ /** O rows the walk never reached, every listing being complete: each is
149
+ * absent, and an absent container leaves its O subtree to the collector. */
150
+ function absences(byPath, reached, differences) {
151
+ const covered = new Set(differences.filter(difference => difference.subtree).map(difference => difference.path));
152
+ const found = [];
153
+ for (const [path, row] of [...byPath].filter(([path]) => !reached.has(path))
154
+ .sort(([left], [right]) => left.split("/").length - right.split("/").length)) {
155
+ if (ancestors(path).some(ancestor => covered.has(ancestor)))
156
+ continue;
157
+ if (container(row.type))
158
+ covered.add(path);
159
+ found.push({ path, reason: "absent", uuid: row.uuid, parentUUID: row.parentUUID, physicalKey: row.physicalKey,
160
+ subtree: container(row.type) });
161
+ }
162
+ return found;
163
+ }
164
+ /** A walk difference as the ledger's cause. */
165
+ const causeOf = (reason) => reason === "new-address" ? "new" : reason === "absent" ? "missing" : reason === "racy" ? "racy" : "changed";
166
+ /** What stands at an address now, as a finding names it. */
167
+ function standing(stats) {
168
+ return stats.isDirectory() ? physicalKey(stats) : sourceSignature(stats);
169
+ }
170
+ export async function examineRoot(job) {
171
+ const timings = { sqlMs: 0, walkMs: 0, gitMs: 0, proofMs: 0, closeMs: 0 };
172
+ let at = performance.now();
173
+ const lap = (leg) => { const now = performance.now(); timings[leg] += now - at; at = now; };
174
+ const maintenance = job.purpose === "maintenance";
175
+ // Maintenance only: the first finding at each address, and what it could not read.
176
+ const findings = new Map();
177
+ const gaps = new Map();
178
+ const observed = new Map();
179
+ let basis = "", rootUUID = null;
180
+ const see = (path, cause, seen) => {
181
+ if (!findings.has(path))
182
+ findings.set(path, { path, cause, observed: seen });
183
+ };
184
+ const gapped = (path) => gaps.has("") || gaps.has(path) || ancestors(path).some(ancestor => gaps.has(ancestor));
185
+ const gap = (path, reason) => { if (!gapped(path))
186
+ gaps.set(path, reason); };
187
+ const maintained = (entries) => ({ kind: "maintained", rootUUID, basis, entries,
188
+ findings: [...findings.values()], gaps: [...gaps].map(([path, reason]) => ({ path, reason })), timings });
189
+ try {
190
+ const database = threadDatabase(job.database);
191
+ // Admission selects under the policy this read saw, and closes on it.
192
+ let policy = null;
193
+ if (!maintenance)
194
+ try {
195
+ policy = readSharingPolicy(job.rootPath);
196
+ }
197
+ catch {
198
+ differ("policy");
199
+ }
200
+ const snapshot = readSnapshot(database, job, policy && policy.includes);
201
+ const { byPath, seals, ownership, sequence } = snapshot;
202
+ ({ basis, rootUUID } = snapshot);
203
+ lap("sqlMs");
204
+ const root = byPath.get("");
205
+ const byUuid = new Map([...byPath.values()].map(row => [row.uuid, row]));
206
+ for (const owner of snapshot.owners) {
207
+ for (const address of ownedAddresses(job.rootPath, owner, byUuid))
208
+ gap(address, "apply-owner");
209
+ }
210
+ if (gaps.has("")) {
211
+ lap("walkMs");
212
+ return maintained(0);
213
+ }
214
+ let rootStats;
215
+ try {
216
+ rootStats = lstatSync(job.rootPath, { bigint: true });
217
+ }
218
+ catch (error) {
219
+ if (maintenance && !vanished(error)) {
220
+ gap("", "unread");
221
+ lap("walkMs");
222
+ return maintained(0);
223
+ }
224
+ return differ(vanished(error) ? "moved" : "unread");
225
+ }
226
+ if (!rootStats.isDirectory() || rootStats.isSymbolicLink()
227
+ || root.physicalKey !== physicalKey(rootStats))
228
+ differ("root-replaced");
229
+ let rootMarker;
230
+ if (job.core) {
231
+ if (root.type !== "workspace" || root.name !== job.core.name || root.parentUUID !== null)
232
+ differ("root-identity");
233
+ }
234
+ else {
235
+ rootMarker = observeGitMarker(job.rootPath);
236
+ const repository = marksRepository(rootMarker);
237
+ const type = root.parentUUID ? classifyDirectory({ repository }) : classifyRegisteredRoot({ repository });
238
+ if (type !== root.type)
239
+ differ("root-identity");
240
+ }
241
+ const differences = [];
242
+ const differs = (path, reason, existing, parentUUID, stats, subtree) => {
243
+ differences.push({ path, reason, uuid: existing?.uuid ?? null, parentUUID, physicalKey: physicalKey(stats), subtree });
244
+ if (maintenance)
245
+ observed.set(path, standing(stats));
246
+ };
247
+ // An address emptied mid-walk is absent from O's point of view.
248
+ const lost = (path) => {
249
+ const row = byPath.get(path);
250
+ if (row)
251
+ differences.push({ path, reason: "absent", uuid: row.uuid, parentUUID: row.parentUUID,
252
+ physicalKey: row.physicalKey, subtree: container(row.type) });
253
+ };
254
+ const sources = [];
255
+ // Every container the walk descends is a source its closure re-reads: the
256
+ // proof holds what was read, and how that differs from O is a difference.
257
+ sources.push({ relativePath: "", absolutePath: job.rootPath, ...sourceFingerprint(rootStats),
258
+ ...(rootMarker !== undefined ? { gitMarker: rootMarker } : {}) });
259
+ const walked = [{ uuid: root.uuid, type: root.type, parentUUID: root.parentUUID, relativePath: "",
260
+ absolutePath: job.rootPath, filesystemMode: Number(rootStats.mode), payloadVersion: null }];
261
+ const physical = [];
262
+ const readPhysical = (key) => pushPhysicalPair(physical, key);
263
+ // Admission keeps the names of each listing its clock did not qualify;
264
+ // maintenance concludes nothing from a listing.
265
+ const listings = new Map();
266
+ const visit = (directory, own, parentUUID, parentType, base) => {
267
+ let children;
268
+ try {
269
+ children = readdirSync(directory, { withFileTypes: true }).sort(byName);
270
+ }
271
+ catch (error) {
272
+ if (!maintenance || (base === "" && vanished(error)))
273
+ return differ(vanished(error) ? "moved" : "unread");
274
+ return vanished(error) ? lost(base) : gap(base, "unread");
275
+ }
276
+ if (job.purpose === "admission" && listingQualification(job.clock, own) !== "qualified") {
277
+ listings.set(directory, children.map(child => child.name));
278
+ }
279
+ for (const child of children) {
280
+ if (walkSkips(parentType, child.name))
281
+ continue;
282
+ const relativePath = base ? `${base}/${child.name}` : child.name;
283
+ if (maintenance && gapped(relativePath))
284
+ continue;
285
+ const absolutePath = join(directory, child.name);
286
+ let stats;
287
+ try {
288
+ stats = lstatSync(absolutePath, { bigint: true });
289
+ }
290
+ catch (error) {
291
+ if (!maintenance)
292
+ return differ(vanished(error) ? "moved" : "unread");
293
+ if (vanished(error))
294
+ lost(relativePath);
295
+ else
296
+ gap(relativePath, "unread");
297
+ continue;
298
+ }
299
+ if (stats.isFile())
300
+ physical.push(stats.dev, stats.ino);
301
+ if (ownership.physical(ownedObject(job.rootPath, physicalKey(stats))).length) {
302
+ if (!maintenance)
303
+ differ("apply-owner");
304
+ gap(relativePath, "apply-owner");
305
+ continue;
306
+ }
307
+ const supported = stats.isDirectory() || stats.isFile() || stats.isSymbolicLink();
308
+ const existing = byPath.get(relativePath);
309
+ if (!existing) {
310
+ if (supported)
311
+ differs(relativePath, "new-address", undefined, parentUUID, stats, stats.isDirectory());
312
+ continue;
313
+ }
314
+ if (existing.parentUUID !== parentUUID) {
315
+ if (!maintenance)
316
+ differ("parent");
317
+ differs(relativePath, "parent", existing, parentUUID, stats, container(existing.type));
318
+ continue;
319
+ }
320
+ if (!supported) {
321
+ differs(relativePath, "unsupported", existing, parentUUID, stats, container(existing.type));
322
+ continue;
323
+ }
324
+ let type = existing.type;
325
+ let gitMarker;
326
+ if (stats.isDirectory()) {
327
+ gitMarker = observeGitMarker(absolutePath);
328
+ type = classifyDirectory({ repository: marksRepository(gitMarker) });
329
+ }
330
+ // Another rail owns this address and everything beneath it.
331
+ if (railChanged(existing.type, type)) {
332
+ differs(relativePath, "type", existing, parentUUID, stats, true);
333
+ continue;
334
+ }
335
+ walked.push({ uuid: existing.uuid, type, parentUUID, relativePath, absolutePath, filesystemMode: Number(stats.mode),
336
+ payloadVersion: stats.isDirectory() ? null : existing.payloadVersion });
337
+ const descends = stats.isDirectory() && container(existing.type);
338
+ // A container differs only as another object: its membership is its
339
+ // members, each walked here.
340
+ const unchanged = descends ? existing.physicalKey === physicalKey(stats) : sourceReusable(existing, stats);
341
+ if (unchanged || descends) {
342
+ sources.push({ relativePath, absolutePath, ...sourceFingerprint(stats), ...(gitMarker !== undefined ? { gitMarker } : {}) });
343
+ }
344
+ if (!unchanged) {
345
+ differs(relativePath, walkDifference(existing, type, true, stats, NO_CAUSE), existing, parentUUID, stats, container(existing.type) && !descends);
346
+ }
347
+ if (descends)
348
+ visit(absolutePath, stats, existing.uuid, type, relativePath);
349
+ }
350
+ };
351
+ visit(job.rootPath, rootStats, root.uuid, root.type, "");
352
+ const reached = new Set([...walked.map(entry => entry.relativePath), ...differences.map(difference => difference.path)]);
353
+ for (const difference of absences(byPath, reached, differences))
354
+ if (!gapped(difference.path))
355
+ differences.push(difference);
356
+ // Where B is not yet O's selection, a proof is owed at each address
357
+ // selection reads, as for a difference the walk found there. Only a
358
+ // repository's result is owed at its own address: its Git answers.
359
+ const owedResults = new Set();
360
+ const found = new Set(differences.map(difference => difference.path));
361
+ const subtrees = new Set(differences.filter(difference => difference.subtree).map(difference => difference.path));
362
+ for (const identity of snapshot.owed) {
363
+ const { path } = identity;
364
+ if (identity.reason === "owed" && identity.row.type === "repo.git") {
365
+ owedResults.add(identity.row.uuid);
366
+ continue;
367
+ }
368
+ if (found.has(path) || ancestors(path).some(ancestor => subtrees.has(ancestor)))
369
+ continue;
370
+ found.add(path);
371
+ const standing = byPath.get(path);
372
+ differences.push({ path, reason: identity.reason, uuid: standing?.uuid ?? null,
373
+ parentUUID: standing ? standing.parentUUID : byPath.get(path.slice(0, Math.max(0, path.lastIndexOf("/"))))?.uuid ?? null,
374
+ physicalKey: standing?.physicalKey ?? identity.row.physicalKey, subtree: false });
375
+ }
376
+ const walk = finishSteps(GroundSourceProof.ofWalk(sources, { marker: observeGitMarker, stat: source => {
377
+ try {
378
+ return lstatSync(source.absolutePath, { bigint: true });
379
+ }
380
+ catch (error) {
381
+ if (vanished(error))
382
+ return null;
383
+ throw error;
384
+ }
385
+ }, list: listAgain }, job.purpose === "admission" ? { clock: job.clock, names: listings } : null));
386
+ if (walk.racy.length)
387
+ differ("racy");
388
+ lap("walkMs");
389
+ // A repository enclosing a difference, or a repository whose answer
390
+ // changes, no longer answers; nor does any repository enclosing it, whose
391
+ // identity map holds its payload.
392
+ const invalidated = new Map();
393
+ const invalidate = (uuid, reason) => {
394
+ for (let row = uuid === null ? undefined : byUuid.get(uuid); row; row = row.parentUUID === null ? undefined : byUuid.get(row.parentUUID)) {
395
+ if (row.type !== "repo.git")
396
+ continue;
397
+ if (invalidated.has(row.uuid))
398
+ return;
399
+ invalidated.set(row.uuid, { uuid: row.uuid, path: row.relativePath, reason });
400
+ reason = "nested";
401
+ }
402
+ };
403
+ for (const difference of differences) {
404
+ const own = difference.uuid !== null && byUuid.get(difference.uuid)?.type === "repo.git";
405
+ invalidate(own ? difference.uuid : difference.parentUUID, `member:${difference.reason}`);
406
+ }
407
+ for (const uuid of owedResults)
408
+ invalidate(uuid, "owed");
409
+ // Nested repositories first: an enclosing identity map reads their payloads.
410
+ // Maintenance asks every repository whose members it read.
411
+ const territory = indexRepositoryTerritory(walked);
412
+ const encloses = (path, address) => path === "" || address === path || address.startsWith(`${path}/`);
413
+ const repositories = walked.filter(entry => entry.type === "repo.git" && (maintenance
414
+ ? ![...gaps.keys()].some(address => encloses(entry.relativePath, address)) : !invalidated.has(entry.uuid)))
415
+ .sort((left, right) => right.relativePath.length - left.relativePath.length);
416
+ // Git's answers are independent processes; only the seal decisions depend
417
+ // on one another, so they alone run in order.
418
+ const evidence = new Map();
419
+ await boundedForEach(repositories, GIT_CONCURRENCY, async (repository) => {
420
+ const git = await collectGitEvidence(new GitCapture(repository.absolutePath));
421
+ if (!sealRefused(git))
422
+ git.physical.forEach(readPhysical);
423
+ evidence.set(repository.uuid, git);
424
+ });
425
+ if (maintenance) {
426
+ for (const difference of differences) {
427
+ see(difference.path, causeOf(difference.reason), difference.reason === "absent" ? "absent" : observed.get(difference.path));
428
+ }
429
+ // The seal answers without reconstructing any Card or Checkpoint.
430
+ for (const repository of repositories) {
431
+ repository.payloadVersion = byPath.get(repository.relativePath).payloadVersion;
432
+ const git = evidence.get(repository.uuid);
433
+ const miss = sealMiss({ repository, owned: territory.ownedBy(repository.uuid), git,
434
+ sealed: seals.get(repository.uuid) ?? null, prior: path => byPath.get(path) });
435
+ if (miss !== null) {
436
+ see(repository.relativePath ? `${repository.relativePath}/.git` : ".git", "repository", sealRefused(git) ? miss : `${miss}:${git.fingerprint}`);
437
+ }
438
+ }
439
+ lap("gitMs");
440
+ // What moved while it was read differs too. A directory whose own
441
+ // object stands only listed another membership, which the next visit
442
+ // walks; its members are the findings.
443
+ const closed = await walk.close();
444
+ const directories = new Set(sources.filter(source => ((source.filesystemMode ?? 0) & 0o170000) === 0o040000)
445
+ .map(source => source.absolutePath));
446
+ for (const address of closed.changed) {
447
+ if (directories.has(address) && closed.routes(address))
448
+ continue;
449
+ let now;
450
+ try {
451
+ now = standing(lstatSync(address, { bigint: true }));
452
+ }
453
+ catch (error) {
454
+ if (!vanished(error))
455
+ throw error;
456
+ now = "absent";
457
+ }
458
+ see(below(job.rootPath, address), now === "absent" ? "missing" : "changed", now);
459
+ }
460
+ lap("closeMs");
461
+ return maintained(walked.length);
462
+ }
463
+ const retained = [];
464
+ const proofs = [];
465
+ const footprints = [];
466
+ for (const repository of repositories) {
467
+ if (invalidated.has(repository.uuid))
468
+ continue;
469
+ repository.payloadVersion = byPath.get(repository.relativePath).payloadVersion;
470
+ const owned = territory.ownedBy(repository.uuid);
471
+ const git = evidence.get(repository.uuid);
472
+ const miss = sealMiss({ repository, owned, git, sealed: seals.get(repository.uuid) ?? null,
473
+ prior: path => byPath.get(path) });
474
+ if (miss !== null || sealRefused(git)) {
475
+ invalidate(repository.uuid, `repository:${miss}`);
476
+ continue;
477
+ }
478
+ retained.push(repository.absolutePath);
479
+ footprints.push(...repositoryFootprint(git.binding, git.configuration));
480
+ proofs.push(git.proof);
481
+ }
482
+ lap("gitMs");
483
+ // Every Git answer closes before the walk re-reads its sources; Git's
484
+ // own witnesses close last.
485
+ try {
486
+ await boundedForEach(proofs, GIT_CONCURRENCY, proof => proof.semantic());
487
+ lap("proofMs");
488
+ if ((await walk.close()).changed.length)
489
+ differ("moved");
490
+ for (const proof of proofs)
491
+ closePhysically(proof);
492
+ try {
493
+ policy.validate();
494
+ }
495
+ catch {
496
+ differ("policy");
497
+ }
498
+ }
499
+ catch (error) {
500
+ if (error instanceof Differs)
501
+ throw error;
502
+ differ(error instanceof CaptureSourceChangedError || vanished(error) ? "moved" : "proof-failed");
503
+ }
504
+ lap("closeMs");
505
+ return { kind: "examined", rootUUID: snapshot.rootUUID, revision: snapshot.revision,
506
+ sequence: sequence.toString(), entries: walked.length, differences,
507
+ invalidated: [...invalidated.values()], repositories: retained, footprints: [...new Set(footprints)].sort(),
508
+ physical: BigInt64Array.from(physical), timings };
509
+ }
510
+ catch (error) {
511
+ if (!(error instanceof Differs))
512
+ throw error;
513
+ lap("walkMs");
514
+ if (!maintenance)
515
+ return { kind: "fallback", reason: error.reason, timings };
516
+ // O this walk cannot trust owes the complete root, whatever it found.
517
+ basis = error.basis || basis;
518
+ findings.clear();
519
+ see("", "changed", error.reason);
520
+ return maintained(0);
521
+ }
522
+ }
523
+ //# sourceMappingURL=root-examination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"root-examination.js","sourceRoot":"","sources":["../../src/detection/root-examination.ts"],"names":[],"mappings":"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"}