@agent-teams/repository-mutation 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (243) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/LICENSE +201 -0
  3. package/README.md +10 -0
  4. package/dist/canonical-json.d.ts +12 -0
  5. package/dist/canonical-json.d.ts.map +1 -0
  6. package/dist/canonical-json.js +137 -0
  7. package/dist/canonical-json.js.map +1 -0
  8. package/dist/errors.d.ts +6 -0
  9. package/dist/errors.d.ts.map +1 -0
  10. package/dist/errors.js +9 -0
  11. package/dist/errors.js.map +1 -0
  12. package/dist/index.d.ts +25 -0
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js +13 -0
  15. package/dist/index.js.map +1 -0
  16. package/dist/installed-artifact-identity.d.ts +15 -0
  17. package/dist/installed-artifact-identity.d.ts.map +1 -0
  18. package/dist/installed-artifact-identity.js +127 -0
  19. package/dist/installed-artifact-identity.js.map +1 -0
  20. package/dist/node.d.ts +29 -0
  21. package/dist/node.d.ts.map +1 -0
  22. package/dist/node.js +19 -0
  23. package/dist/node.js.map +1 -0
  24. package/dist/package-version.d.ts +3 -0
  25. package/dist/package-version.d.ts.map +1 -0
  26. package/dist/package-version.js +11 -0
  27. package/dist/package-version.js.map +1 -0
  28. package/dist/qualification/index.d.ts +24 -0
  29. package/dist/qualification/index.d.ts.map +1 -0
  30. package/dist/qualification/index.js +11 -0
  31. package/dist/qualification/index.js.map +1 -0
  32. package/dist/repository-mutation/adapters/node/node-absent-file-publication-private.d.ts +19 -0
  33. package/dist/repository-mutation/adapters/node/node-absent-file-publication-private.d.ts.map +1 -0
  34. package/dist/repository-mutation/adapters/node/node-absent-file-publication-private.js +74 -0
  35. package/dist/repository-mutation/adapters/node/node-absent-file-publication-private.js.map +1 -0
  36. package/dist/repository-mutation/adapters/node/node-absent-file-publication.d.ts +35 -0
  37. package/dist/repository-mutation/adapters/node/node-absent-file-publication.d.ts.map +1 -0
  38. package/dist/repository-mutation/adapters/node/node-absent-file-publication.js +181 -0
  39. package/dist/repository-mutation/adapters/node/node-absent-file-publication.js.map +1 -0
  40. package/dist/repository-mutation/adapters/node/node-bounded-regular-file.d.ts +23 -0
  41. package/dist/repository-mutation/adapters/node/node-bounded-regular-file.d.ts.map +1 -0
  42. package/dist/repository-mutation/adapters/node/node-bounded-regular-file.js +134 -0
  43. package/dist/repository-mutation/adapters/node/node-bounded-regular-file.js.map +1 -0
  44. package/dist/repository-mutation/adapters/node/node-cleanup-owned-temporary.d.ts +26 -0
  45. package/dist/repository-mutation/adapters/node/node-cleanup-owned-temporary.d.ts.map +1 -0
  46. package/dist/repository-mutation/adapters/node/node-cleanup-owned-temporary.js +172 -0
  47. package/dist/repository-mutation/adapters/node/node-cleanup-owned-temporary.js.map +1 -0
  48. package/dist/repository-mutation/adapters/node/node-create-and-bind-directory.d.ts +14 -0
  49. package/dist/repository-mutation/adapters/node/node-create-and-bind-directory.d.ts.map +1 -0
  50. package/dist/repository-mutation/adapters/node/node-create-and-bind-directory.js +23 -0
  51. package/dist/repository-mutation/adapters/node/node-create-and-bind-directory.js.map +1 -0
  52. package/dist/repository-mutation/adapters/node/node-directory-durability.d.ts +17 -0
  53. package/dist/repository-mutation/adapters/node/node-directory-durability.d.ts.map +1 -0
  54. package/dist/repository-mutation/adapters/node/node-directory-durability.js +47 -0
  55. package/dist/repository-mutation/adapters/node/node-directory-durability.js.map +1 -0
  56. package/dist/repository-mutation/adapters/node/node-directory-materialization.d.ts +37 -0
  57. package/dist/repository-mutation/adapters/node/node-directory-materialization.d.ts.map +1 -0
  58. package/dist/repository-mutation/adapters/node/node-directory-materialization.js +244 -0
  59. package/dist/repository-mutation/adapters/node/node-directory-materialization.js.map +1 -0
  60. package/dist/repository-mutation/adapters/node/node-existing-repository-ancestors.d.ts +13 -0
  61. package/dist/repository-mutation/adapters/node/node-existing-repository-ancestors.d.ts.map +1 -0
  62. package/dist/repository-mutation/adapters/node/node-existing-repository-ancestors.js +67 -0
  63. package/dist/repository-mutation/adapters/node/node-existing-repository-ancestors.js.map +1 -0
  64. package/dist/repository-mutation/adapters/node/node-known-file-apply-effects.d.ts +84 -0
  65. package/dist/repository-mutation/adapters/node/node-known-file-apply-effects.d.ts.map +1 -0
  66. package/dist/repository-mutation/adapters/node/node-known-file-apply-effects.js +232 -0
  67. package/dist/repository-mutation/adapters/node/node-known-file-apply-effects.js.map +1 -0
  68. package/dist/repository-mutation/adapters/node/node-known-file-apply-faults.d.ts +9 -0
  69. package/dist/repository-mutation/adapters/node/node-known-file-apply-faults.d.ts.map +1 -0
  70. package/dist/repository-mutation/adapters/node/node-known-file-apply-faults.js +2 -0
  71. package/dist/repository-mutation/adapters/node/node-known-file-apply-faults.js.map +1 -0
  72. package/dist/repository-mutation/adapters/node/node-known-file-apply-observation.d.ts +6 -0
  73. package/dist/repository-mutation/adapters/node/node-known-file-apply-observation.d.ts.map +1 -0
  74. package/dist/repository-mutation/adapters/node/node-known-file-apply-observation.js +30 -0
  75. package/dist/repository-mutation/adapters/node/node-known-file-apply-observation.js.map +1 -0
  76. package/dist/repository-mutation/adapters/node/node-known-file-apply-operation.d.ts +11 -0
  77. package/dist/repository-mutation/adapters/node/node-known-file-apply-operation.d.ts.map +1 -0
  78. package/dist/repository-mutation/adapters/node/node-known-file-apply-operation.js +159 -0
  79. package/dist/repository-mutation/adapters/node/node-known-file-apply-operation.js.map +1 -0
  80. package/dist/repository-mutation/adapters/node/node-known-file-apply-state.d.ts +9 -0
  81. package/dist/repository-mutation/adapters/node/node-known-file-apply-state.d.ts.map +1 -0
  82. package/dist/repository-mutation/adapters/node/node-known-file-apply-state.js +22 -0
  83. package/dist/repository-mutation/adapters/node/node-known-file-apply-state.js.map +1 -0
  84. package/dist/repository-mutation/adapters/node/node-known-file-recovery-cleanup.d.ts +9 -0
  85. package/dist/repository-mutation/adapters/node/node-known-file-recovery-cleanup.d.ts.map +1 -0
  86. package/dist/repository-mutation/adapters/node/node-known-file-recovery-cleanup.js +203 -0
  87. package/dist/repository-mutation/adapters/node/node-known-file-recovery-cleanup.js.map +1 -0
  88. package/dist/repository-mutation/adapters/node/node-known-file-recovery-executor.d.ts +17 -0
  89. package/dist/repository-mutation/adapters/node/node-known-file-recovery-executor.d.ts.map +1 -0
  90. package/dist/repository-mutation/adapters/node/node-known-file-recovery-executor.js +22 -0
  91. package/dist/repository-mutation/adapters/node/node-known-file-recovery-executor.js.map +1 -0
  92. package/dist/repository-mutation/adapters/node/node-known-file-recovery-filesystem.d.ts +28 -0
  93. package/dist/repository-mutation/adapters/node/node-known-file-recovery-filesystem.d.ts.map +1 -0
  94. package/dist/repository-mutation/adapters/node/node-known-file-recovery-filesystem.js +213 -0
  95. package/dist/repository-mutation/adapters/node/node-known-file-recovery-filesystem.js.map +1 -0
  96. package/dist/repository-mutation/adapters/node/node-known-file-recovery-observation.d.ts +15 -0
  97. package/dist/repository-mutation/adapters/node/node-known-file-recovery-observation.d.ts.map +1 -0
  98. package/dist/repository-mutation/adapters/node/node-known-file-recovery-observation.js +51 -0
  99. package/dist/repository-mutation/adapters/node/node-known-file-recovery-observation.js.map +1 -0
  100. package/dist/repository-mutation/adapters/node/node-known-file-recovery-preimage-captured-cleanup.d.ts +29 -0
  101. package/dist/repository-mutation/adapters/node/node-known-file-recovery-preimage-captured-cleanup.d.ts.map +1 -0
  102. package/dist/repository-mutation/adapters/node/node-known-file-recovery-preimage-captured-cleanup.js +72 -0
  103. package/dist/repository-mutation/adapters/node/node-known-file-recovery-preimage-captured-cleanup.js.map +1 -0
  104. package/dist/repository-mutation/adapters/node/node-known-file-recovery-preimage-captured.d.ts +31 -0
  105. package/dist/repository-mutation/adapters/node/node-known-file-recovery-preimage-captured.d.ts.map +1 -0
  106. package/dist/repository-mutation/adapters/node/node-known-file-recovery-preimage-captured.js +254 -0
  107. package/dist/repository-mutation/adapters/node/node-known-file-recovery-preimage-captured.js.map +1 -0
  108. package/dist/repository-mutation/adapters/node/node-known-file-recovery-preimage.d.ts +13 -0
  109. package/dist/repository-mutation/adapters/node/node-known-file-recovery-preimage.d.ts.map +1 -0
  110. package/dist/repository-mutation/adapters/node/node-known-file-recovery-preimage.js +210 -0
  111. package/dist/repository-mutation/adapters/node/node-known-file-recovery-preimage.js.map +1 -0
  112. package/dist/repository-mutation/adapters/node/node-known-file-recovery-retirement.d.ts +15 -0
  113. package/dist/repository-mutation/adapters/node/node-known-file-recovery-retirement.d.ts.map +1 -0
  114. package/dist/repository-mutation/adapters/node/node-known-file-recovery-retirement.js +181 -0
  115. package/dist/repository-mutation/adapters/node/node-known-file-recovery-retirement.js.map +1 -0
  116. package/dist/repository-mutation/adapters/node/node-known-file-recovery-state.d.ts +12 -0
  117. package/dist/repository-mutation/adapters/node/node-known-file-recovery-state.d.ts.map +1 -0
  118. package/dist/repository-mutation/adapters/node/node-known-file-recovery-state.js +18 -0
  119. package/dist/repository-mutation/adapters/node/node-known-file-recovery-state.js.map +1 -0
  120. package/dist/repository-mutation/adapters/node/node-known-file-transaction-filesystem.d.ts +25 -0
  121. package/dist/repository-mutation/adapters/node/node-known-file-transaction-filesystem.d.ts.map +1 -0
  122. package/dist/repository-mutation/adapters/node/node-known-file-transaction-filesystem.js +150 -0
  123. package/dist/repository-mutation/adapters/node/node-known-file-transaction-filesystem.js.map +1 -0
  124. package/dist/repository-mutation/adapters/node/node-known-file-transaction-inspection.d.ts +12 -0
  125. package/dist/repository-mutation/adapters/node/node-known-file-transaction-inspection.d.ts.map +1 -0
  126. package/dist/repository-mutation/adapters/node/node-known-file-transaction-inspection.js +56 -0
  127. package/dist/repository-mutation/adapters/node/node-known-file-transaction-inspection.js.map +1 -0
  128. package/dist/repository-mutation/adapters/node/node-known-file-transaction-journal-store.d.ts +22 -0
  129. package/dist/repository-mutation/adapters/node/node-known-file-transaction-journal-store.d.ts.map +1 -0
  130. package/dist/repository-mutation/adapters/node/node-known-file-transaction-journal-store.js +246 -0
  131. package/dist/repository-mutation/adapters/node/node-known-file-transaction-journal-store.js.map +1 -0
  132. package/dist/repository-mutation/adapters/node/node-known-file-transaction-lease-release.d.ts +21 -0
  133. package/dist/repository-mutation/adapters/node/node-known-file-transaction-lease-release.d.ts.map +1 -0
  134. package/dist/repository-mutation/adapters/node/node-known-file-transaction-lease-release.js +34 -0
  135. package/dist/repository-mutation/adapters/node/node-known-file-transaction-lease-release.js.map +1 -0
  136. package/dist/repository-mutation/adapters/node/node-known-file-transaction-receipt.d.ts +4 -0
  137. package/dist/repository-mutation/adapters/node/node-known-file-transaction-receipt.d.ts.map +1 -0
  138. package/dist/repository-mutation/adapters/node/node-known-file-transaction-receipt.js +43 -0
  139. package/dist/repository-mutation/adapters/node/node-known-file-transaction-receipt.js.map +1 -0
  140. package/dist/repository-mutation/adapters/node/node-known-file-transaction-recovery.d.ts +14 -0
  141. package/dist/repository-mutation/adapters/node/node-known-file-transaction-recovery.d.ts.map +1 -0
  142. package/dist/repository-mutation/adapters/node/node-known-file-transaction-recovery.js +109 -0
  143. package/dist/repository-mutation/adapters/node/node-known-file-transaction-recovery.js.map +1 -0
  144. package/dist/repository-mutation/adapters/node/node-known-file-transaction.d.ts +21 -0
  145. package/dist/repository-mutation/adapters/node/node-known-file-transaction.d.ts.map +1 -0
  146. package/dist/repository-mutation/adapters/node/node-known-file-transaction.js +215 -0
  147. package/dist/repository-mutation/adapters/node/node-known-file-transaction.js.map +1 -0
  148. package/dist/repository-mutation/adapters/node/node-prepare-exact-sibling-temporary.d.ts +18 -0
  149. package/dist/repository-mutation/adapters/node/node-prepare-exact-sibling-temporary.d.ts.map +1 -0
  150. package/dist/repository-mutation/adapters/node/node-prepare-exact-sibling-temporary.js +30 -0
  151. package/dist/repository-mutation/adapters/node/node-prepare-exact-sibling-temporary.js.map +1 -0
  152. package/dist/repository-mutation/adapters/node/node-publish-prepared-absent-file.d.ts +31 -0
  153. package/dist/repository-mutation/adapters/node/node-publish-prepared-absent-file.d.ts.map +1 -0
  154. package/dist/repository-mutation/adapters/node/node-publish-prepared-absent-file.js +50 -0
  155. package/dist/repository-mutation/adapters/node/node-publish-prepared-absent-file.js.map +1 -0
  156. package/dist/repository-mutation/adapters/node/node-repository-path.d.ts +2 -0
  157. package/dist/repository-mutation/adapters/node/node-repository-path.d.ts.map +1 -0
  158. package/dist/repository-mutation/adapters/node/node-repository-path.js +7 -0
  159. package/dist/repository-mutation/adapters/node/node-repository-path.js.map +1 -0
  160. package/dist/repository-mutation/adapters/node/node-terminal-evidence-directory.d.ts +21 -0
  161. package/dist/repository-mutation/adapters/node/node-terminal-evidence-directory.d.ts.map +1 -0
  162. package/dist/repository-mutation/adapters/node/node-terminal-evidence-directory.js +59 -0
  163. package/dist/repository-mutation/adapters/node/node-terminal-evidence-directory.js.map +1 -0
  164. package/dist/repository-mutation/application/model/directory-materialization.d.ts +35 -0
  165. package/dist/repository-mutation/application/model/directory-materialization.d.ts.map +1 -0
  166. package/dist/repository-mutation/application/model/directory-materialization.js +11 -0
  167. package/dist/repository-mutation/application/model/directory-materialization.js.map +1 -0
  168. package/dist/repository-mutation/application/model/exact-postimage.d.ts +17 -0
  169. package/dist/repository-mutation/application/model/exact-postimage.d.ts.map +1 -0
  170. package/dist/repository-mutation/application/model/exact-postimage.js +11 -0
  171. package/dist/repository-mutation/application/model/exact-postimage.js.map +1 -0
  172. package/dist/repository-mutation/application/model/known-file-transaction-journal.d.ts +69 -0
  173. package/dist/repository-mutation/application/model/known-file-transaction-journal.d.ts.map +1 -0
  174. package/dist/repository-mutation/application/model/known-file-transaction-journal.js +15 -0
  175. package/dist/repository-mutation/application/model/known-file-transaction-journal.js.map +1 -0
  176. package/dist/repository-mutation/application/model/known-file-transaction.d.ts +64 -0
  177. package/dist/repository-mutation/application/model/known-file-transaction.d.ts.map +1 -0
  178. package/dist/repository-mutation/application/model/known-file-transaction.js +2 -0
  179. package/dist/repository-mutation/application/model/known-file-transaction.js.map +1 -0
  180. package/dist/repository-mutation/application/model/path-identity.d.ts +7 -0
  181. package/dist/repository-mutation/application/model/path-identity.d.ts.map +1 -0
  182. package/dist/repository-mutation/application/model/path-identity.js +2 -0
  183. package/dist/repository-mutation/application/model/path-identity.js.map +1 -0
  184. package/dist/repository-mutation/application/model/repository-path.d.ts +8 -0
  185. package/dist/repository-mutation/application/model/repository-path.d.ts.map +1 -0
  186. package/dist/repository-mutation/application/model/repository-path.js +74 -0
  187. package/dist/repository-mutation/application/model/repository-path.js.map +1 -0
  188. package/dist/repository-mutation/application/policies/classify-known-file-recovery-transition.d.ts +33 -0
  189. package/dist/repository-mutation/application/policies/classify-known-file-recovery-transition.d.ts.map +1 -0
  190. package/dist/repository-mutation/application/policies/classify-known-file-recovery-transition.js +21 -0
  191. package/dist/repository-mutation/application/policies/classify-known-file-recovery-transition.js.map +1 -0
  192. package/dist/repository-mutation/application/policies/known-file-transaction-envelope.d.ts +9 -0
  193. package/dist/repository-mutation/application/policies/known-file-transaction-envelope.d.ts.map +1 -0
  194. package/dist/repository-mutation/application/policies/known-file-transaction-envelope.js +214 -0
  195. package/dist/repository-mutation/application/policies/known-file-transaction-envelope.js.map +1 -0
  196. package/dist/repository-mutation/application/policies/known-file-transaction-plan.d.ts +7 -0
  197. package/dist/repository-mutation/application/policies/known-file-transaction-plan.d.ts.map +1 -0
  198. package/dist/repository-mutation/application/policies/known-file-transaction-plan.js +253 -0
  199. package/dist/repository-mutation/application/policies/known-file-transaction-plan.js.map +1 -0
  200. package/dist/repository-mutation/application/ports/owned-temporary-cleanup-transition.d.ts +7 -0
  201. package/dist/repository-mutation/application/ports/owned-temporary-cleanup-transition.d.ts.map +1 -0
  202. package/dist/repository-mutation/application/ports/owned-temporary-cleanup-transition.js +2 -0
  203. package/dist/repository-mutation/application/ports/owned-temporary-cleanup-transition.js.map +1 -0
  204. package/dist/repository-mutation-envelope.d.ts +32 -0
  205. package/dist/repository-mutation-envelope.d.ts.map +1 -0
  206. package/dist/repository-mutation-envelope.js +292 -0
  207. package/dist/repository-mutation-envelope.js.map +1 -0
  208. package/dist/state-contract.d.ts +6 -0
  209. package/dist/state-contract.d.ts.map +1 -0
  210. package/dist/state-contract.js +6 -0
  211. package/dist/state-contract.js.map +1 -0
  212. package/dist/strict-json.d.ts +7 -0
  213. package/dist/strict-json.d.ts.map +1 -0
  214. package/dist/strict-json.js +131 -0
  215. package/dist/strict-json.js.map +1 -0
  216. package/dist/transaction-coordination/adapters/node/node-journal-slot-evidence.d.ts +29 -0
  217. package/dist/transaction-coordination/adapters/node/node-journal-slot-evidence.d.ts.map +1 -0
  218. package/dist/transaction-coordination/adapters/node/node-journal-slot-evidence.js +139 -0
  219. package/dist/transaction-coordination/adapters/node/node-journal-slot-evidence.js.map +1 -0
  220. package/dist/transaction-coordination/adapters/node/node-journal-slot-profile.d.ts +151 -0
  221. package/dist/transaction-coordination/adapters/node/node-journal-slot-profile.d.ts.map +1 -0
  222. package/dist/transaction-coordination/adapters/node/node-journal-slot-profile.js +29 -0
  223. package/dist/transaction-coordination/adapters/node/node-journal-slot-profile.js.map +1 -0
  224. package/dist/transaction-coordination/adapters/node/node-journal-slot-store.d.ts +25 -0
  225. package/dist/transaction-coordination/adapters/node/node-journal-slot-store.d.ts.map +1 -0
  226. package/dist/transaction-coordination/adapters/node/node-journal-slot-store.js +303 -0
  227. package/dist/transaction-coordination/adapters/node/node-journal-slot-store.js.map +1 -0
  228. package/dist/transaction-coordination/adapters/node/node-operation-lock.d.ts +16 -0
  229. package/dist/transaction-coordination/adapters/node/node-operation-lock.d.ts.map +1 -0
  230. package/dist/transaction-coordination/adapters/node/node-operation-lock.js +359 -0
  231. package/dist/transaction-coordination/adapters/node/node-operation-lock.js.map +1 -0
  232. package/dist/transaction-coordination/adapters/node/node-state-directory.d.ts +11 -0
  233. package/dist/transaction-coordination/adapters/node/node-state-directory.d.ts.map +1 -0
  234. package/dist/transaction-coordination/adapters/node/node-state-directory.js +91 -0
  235. package/dist/transaction-coordination/adapters/node/node-state-directory.js.map +1 -0
  236. package/dist/transaction-coordination/mutation-lease.d.ts +38 -0
  237. package/dist/transaction-coordination/mutation-lease.d.ts.map +1 -0
  238. package/dist/transaction-coordination/mutation-lease.js +351 -0
  239. package/dist/transaction-coordination/mutation-lease.js.map +1 -0
  240. package/package.json +52 -0
  241. package/schemas/known-file-transaction-plan/v1.schema.json +65 -0
  242. package/schemas/known-file-transaction-receipt/v1.schema.json +36 -0
  243. package/schemas/repository-mutation-transaction-envelope/v1.schema.json +46 -0
@@ -0,0 +1,150 @@
1
+ import { createHash } from "node:crypto";
2
+ import { lstat, opendir, realpath } from "node:fs/promises";
3
+ import { basename, join, resolve } from "node:path";
4
+ import { portableRepositoryPathIdentity, portableRepositoryPathProblem } from "../../application/model/repository-path.js";
5
+ import { captureFileHandleIdentity, readBoundedRegularFile } from "./node-bounded-regular-file.js";
6
+ import { isLexicallyContainedPath } from "./node-repository-path.js";
7
+ const MAXIMUM_MANAGED_FILE_BYTES = 8 * 1024 * 1024;
8
+ const MAXIMUM_DIRECTORY_ENTRIES = 1024;
9
+ export class KnownFileTransactionError extends Error {
10
+ code;
11
+ constructor(code, message, options) {
12
+ super(message, options);
13
+ this.name = "KnownFileTransactionError";
14
+ this.code = code;
15
+ }
16
+ }
17
+ export function knownFileErrorCode(error) {
18
+ return error instanceof Error && "code" in error
19
+ ? error.code
20
+ : undefined;
21
+ }
22
+ export function sameKnownFileIdentity(left, right) {
23
+ return left.birthtimeNs === right.birthtimeNs &&
24
+ left.dev === right.dev && left.ino === right.ino;
25
+ }
26
+ export function knownFileImageBytes(image) {
27
+ return Buffer.from(image.contentBase64, "base64");
28
+ }
29
+ export function matchesKnownFileImage(observed, image) {
30
+ return observed.state === "file" && observed.bytes !== undefined &&
31
+ observed.bytes.byteLength === image.size &&
32
+ `sha256:${createHash("sha256").update(observed.bytes).digest("hex")}` === image.digest &&
33
+ observed.mode === image.mode;
34
+ }
35
+ export function knownFileTemporaryName(path, planDigest, operationIndex) {
36
+ return `.${basename(path)}.agent-teams.${planDigest.slice(7, 23)}.${operationIndex}.tmp`;
37
+ }
38
+ export function knownFileCaptureDirectoryName(path, planDigest, operationIndex) {
39
+ return `.${basename(path)}.agent-teams.capture.${planDigest.slice(7, 23)}.${operationIndex}`;
40
+ }
41
+ export async function canonicalKnownFileRoot(consumerRoot) {
42
+ const requested = resolve(consumerRoot);
43
+ const metadata = await lstat(requested);
44
+ if (metadata.isSymbolicLink() || !metadata.isDirectory()) {
45
+ throw new KnownFileTransactionError("KNOWN_FILE_ROOT_INVALID", "Consumer root must be one real directory, not a symlink.");
46
+ }
47
+ return realpath(requested);
48
+ }
49
+ export async function knownFileAliasEntry(parent, requested) {
50
+ const identity = portableRepositoryPathIdentity(requested);
51
+ const directory = await opendir(parent);
52
+ const matches = [];
53
+ let entries = 0;
54
+ try {
55
+ for (;;) {
56
+ const entry = await directory.read();
57
+ if (entry === null) {
58
+ break;
59
+ }
60
+ entries += 1;
61
+ if (entries > MAXIMUM_DIRECTORY_ENTRIES) {
62
+ throw new KnownFileTransactionError("KNOWN_FILE_PATH_ALIAS", `Directory enumeration budget was exceeded while checking ${requested}.`);
63
+ }
64
+ if (portableRepositoryPathIdentity(entry.name) === identity) {
65
+ matches.push(entry.name);
66
+ }
67
+ }
68
+ }
69
+ finally {
70
+ await directory.close();
71
+ }
72
+ if (matches.some((entry) => entry !== requested)) {
73
+ throw new KnownFileTransactionError("KNOWN_FILE_PATH_ALIAS", `Portable case or Unicode path collision blocks ${requested}.`);
74
+ }
75
+ return matches.find((entry) => entry === requested);
76
+ }
77
+ async function resolveExistingParent(root, repositoryPath) {
78
+ const problem = portableRepositoryPathProblem(repositoryPath);
79
+ if (problem !== undefined) {
80
+ throw new KnownFileTransactionError("KNOWN_FILE_PATH_INVALID", `Repository path is not portable (${problem}): ${repositoryPath}.`);
81
+ }
82
+ const segments = repositoryPath.split("/");
83
+ segments.pop();
84
+ let current = root;
85
+ for (const segment of segments) {
86
+ if (await knownFileAliasEntry(current, segment) === undefined) {
87
+ return { absolute: current, complete: false };
88
+ }
89
+ current = join(current, segment);
90
+ const metadata = await lstat(current);
91
+ if (metadata.isSymbolicLink() || !metadata.isDirectory()) {
92
+ throw new KnownFileTransactionError("KNOWN_FILE_ANCESTOR_INVALID", `Repository ancestor must be one real directory: ${repositoryPath}.`);
93
+ }
94
+ const canonical = await realpath(current);
95
+ if (!isLexicallyContainedPath(root, canonical) || canonical !== current) {
96
+ throw new KnownFileTransactionError("KNOWN_FILE_PATH_ESCAPE", `Repository ancestor escapes or aliases the root: ${repositoryPath}.`);
97
+ }
98
+ }
99
+ return { absolute: current, complete: true };
100
+ }
101
+ export async function observeKnownFile(root, repositoryPath, maximumBytes) {
102
+ const parent = await resolveExistingParent(root, repositoryPath);
103
+ if (!parent.complete) {
104
+ return { state: "absent" };
105
+ }
106
+ const name = repositoryPath.split("/").at(-1);
107
+ if (await knownFileAliasEntry(parent.absolute, name) === undefined) {
108
+ return { state: "absent" };
109
+ }
110
+ const path = join(root, ...repositoryPath.split("/"));
111
+ const metadata = await lstat(path, { bigint: true });
112
+ if (metadata.isSymbolicLink() || !metadata.isFile()) {
113
+ throw new KnownFileTransactionError("KNOWN_FILE_DESTINATION_INVALID", `Managed path must be a real regular file: ${repositoryPath}.`);
114
+ }
115
+ const observed = await readBoundedRegularFile(path, Math.max(maximumBytes, MAXIMUM_MANAGED_FILE_BYTES));
116
+ if (observed.outcome !== "read") {
117
+ throw new KnownFileTransactionError("KNOWN_FILE_UNSTABLE", `Managed path is oversized, unstable, or invalid: ${repositoryPath}.`);
118
+ }
119
+ if (observed.linkCount !== 1n) {
120
+ throw new KnownFileTransactionError("KNOWN_FILE_HARDLINK", `Managed path has multiple hard links: ${repositoryPath}.`);
121
+ }
122
+ return {
123
+ state: "file",
124
+ bytes: observed.bytes,
125
+ identity: observed.identity,
126
+ mode: observed.mode & 0o777
127
+ };
128
+ }
129
+ export function maximumKnownFileEvidenceBytes(operation) {
130
+ return Math.max(operation.postimage.size, ...(operation.precondition.state === "known-file"
131
+ ? operation.precondition.acceptedPreimages.map(({ size }) => size)
132
+ : [0]));
133
+ }
134
+ export function classifyKnownFileOperation(operation, observed) {
135
+ if (matchesKnownFileImage(observed, operation.postimage)) {
136
+ return { path: operation.path, state: "already-satisfied" };
137
+ }
138
+ if (operation.precondition.state === "absent") {
139
+ if (observed.state !== "absent") {
140
+ throw new KnownFileTransactionError("KNOWN_FILE_CAS_MISMATCH", `Expected an absent managed path: ${operation.path}.`);
141
+ }
142
+ return { path: operation.path, state: "pending" };
143
+ }
144
+ const matchedPreimage = operation.precondition.acceptedPreimages.findIndex((image) => matchesKnownFileImage(observed, image));
145
+ if (matchedPreimage === -1) {
146
+ throw new KnownFileTransactionError("KNOWN_FILE_CAS_MISMATCH", `Managed path does not match an exact accepted preimage: ${operation.path}.`);
147
+ }
148
+ return { path: operation.path, state: "pending", matchedPreimage };
149
+ }
150
+ //# sourceMappingURL=node-known-file-transaction-filesystem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-known-file-transaction-filesystem.js","sourceRoot":"","sources":["../../../../src/repository-mutation/adapters/node/node-known-file-transaction-filesystem.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export type KnownFileTransactionBarrierInspection = {
2
+ readonly state: "idle";
3
+ } | {
4
+ readonly state: "recovery-required";
5
+ readonly code: "KNOWN_FILE_OPERATION_ACTIVE" | "KNOWN_FILE_RECOVERY_REQUIRED";
6
+ readonly recoverableByInstalledBuild: boolean;
7
+ readonly message: string;
8
+ };
9
+ export declare function inspectKnownFileTransactionBarrier(options: {
10
+ readonly consumerRoot: string;
11
+ }): Promise<KnownFileTransactionBarrierInspection>;
12
+ //# sourceMappingURL=node-known-file-transaction-inspection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-known-file-transaction-inspection.d.ts","sourceRoot":"","sources":["../../../../src/repository-mutation/adapters/node/node-known-file-transaction-inspection.ts"],"names":[],"mappings":"AAYA,MAAM,MAAM,qCAAqC,GAC7C;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC1B;IACE,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAC;IACpC,QAAQ,CAAC,IAAI,EACT,6BAA6B,GAC7B,8BAA8B,CAAC;IACnC,QAAQ,CAAC,2BAA2B,EAAE,OAAO,CAAC;IAC9C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;AAYN,wBAAsB,kCAAkC,CAAC,OAAO,EAAE;IAChE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B,GAAG,OAAO,CAAC,qCAAqC,CAAC,CAoCjD"}
@@ -0,0 +1,56 @@
1
+ import { lstat } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { LOCAL_OPERATION_LOCK, LOCAL_STATE_DIRECTORY } from "../../../state-contract.js";
4
+ import { installedRepositoryMutationBuildIdentity } from "../../../installed-artifact-identity.js";
5
+ import { installedRepositoryMutationVersion, REPOSITORY_MUTATION_PACKAGE_NAME } from "../../../package-version.js";
6
+ import { NodeKnownFileTransactionJournalStore } from "./node-known-file-transaction-journal-store.js";
7
+ import { canonicalKnownFileRoot, knownFileErrorCode } from "./node-known-file-transaction-filesystem.js";
8
+ async function operationLockExists(root) {
9
+ try {
10
+ await lstat(join(root, LOCAL_STATE_DIRECTORY, LOCAL_OPERATION_LOCK));
11
+ return true;
12
+ }
13
+ catch (error) {
14
+ if (knownFileErrorCode(error) === "ENOENT") {
15
+ return false;
16
+ }
17
+ throw error;
18
+ }
19
+ }
20
+ export async function inspectKnownFileTransactionBarrier(options) {
21
+ const root = await canonicalKnownFileRoot(options.consumerRoot);
22
+ const hasOperationLock = await operationLockExists(root);
23
+ const [version, buildIdentity] = await Promise.all([
24
+ installedRepositoryMutationVersion(), installedRepositoryMutationBuildIdentity()
25
+ ]);
26
+ const artifact = { name: REPOSITORY_MUTATION_PACKAGE_NAME, version, buildIdentity };
27
+ let observed;
28
+ try {
29
+ observed = await new NodeKnownFileTransactionJournalStore(join(root, LOCAL_STATE_DIRECTORY), artifact, artifact).read();
30
+ }
31
+ catch {
32
+ return Object.freeze({
33
+ state: "recovery-required",
34
+ code: "KNOWN_FILE_RECOVERY_REQUIRED",
35
+ recoverableByInstalledBuild: false,
36
+ message: "Unknown, legacy, corrupt, or ambiguous common transaction evidence must be recovered by its exact owner artifact."
37
+ });
38
+ }
39
+ if (observed !== undefined) {
40
+ return Object.freeze({
41
+ state: "recovery-required", code: "KNOWN_FILE_RECOVERY_REQUIRED",
42
+ recoverableByInstalledBuild: true,
43
+ message: "A known-file transaction must be recovered before another mutation."
44
+ });
45
+ }
46
+ if (hasOperationLock) {
47
+ return Object.freeze({
48
+ state: "recovery-required",
49
+ code: "KNOWN_FILE_OPERATION_ACTIVE",
50
+ recoverableByInstalledBuild: false,
51
+ message: "A Foundation operation is active or interrupted; retry after it completes or recover its evidence."
52
+ });
53
+ }
54
+ return Object.freeze({ state: "idle" });
55
+ }
56
+ //# sourceMappingURL=node-known-file-transaction-inspection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-known-file-transaction-inspection.js","sourceRoot":"","sources":["../../../../src/repository-mutation/adapters/node/node-known-file-transaction-inspection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,wCAAwC,EAAE,MAAM,yCAAyC,CAAC;AACnG,OAAO,EAAE,kCAAkC,EAAE,gCAAgC,EAAE,MAAM,6BAA6B,CAAC;AACnH,OAAO,EAAE,oCAAoC,EAAE,MAAM,gDAAgD,CAAC;AACtG,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAC;AAazG,KAAK,UAAU,mBAAmB,CAAC,IAAY;IAC7C,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,qBAAqB,EAAE,oBAAoB,CAAC,CAAC,CAAC;QACrE,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,kBAAkB,CAAC,KAAK,CAAC,KAAK,QAAQ,EAAE,CAAC;YAAA,OAAO,KAAK,CAAC;QAAA,CAAC;QAC3D,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kCAAkC,CAAC,OAExD;IACC,MAAM,IAAI,GAAG,MAAM,sBAAsB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAChE,MAAM,gBAAgB,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACzD,MAAM,CAAC,OAAO,EAAE,aAAa,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACjD,kCAAkC,EAAE,EAAE,wCAAwC,EAAE;KACjF,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,EAAE,IAAI,EAAE,gCAAgC,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;IACpF,IAAI,QAAQ,CAAC;IACb,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,IAAI,oCAAoC,CACvD,IAAI,CAAC,IAAI,EAAE,qBAAqB,CAAC,EAAE,QAAQ,EAAE,QAAQ,CACtD,CAAC,IAAI,EAAE,CAAC;IACX,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,KAAK,EAAE,mBAAmB;YAC1B,IAAI,EAAE,8BAA8B;YACpC,2BAA2B,EAAE,KAAK;YAClC,OAAO,EAAE,mHAAmH;SAC7H,CAAC,CAAC;IACL,CAAC;IACD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,8BAA8B;YAChE,2BAA2B,EAAE,IAAI;YACjC,OAAO,EAAE,qEAAqE;SAC/E,CAAC,CAAC;IACL,CAAC;IACD,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,KAAK,EAAE,mBAAmB;YAC1B,IAAI,EAAE,6BAA6B;YACnC,2BAA2B,EAAE,KAAK;YAClC,OAAO,EAAE,oGAAoG;SAC9G,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { type RepositoryMutationArtifactIdentity } from "../../../repository-mutation-envelope.js";
2
+ import type { KnownFileTransactionEnvelopeV1 } from "../../application/model/known-file-transaction-journal.js";
3
+ import { captureFileHandleIdentity } from "./node-bounded-regular-file.js";
4
+ export interface KnownFileJournalAuthority {
5
+ readonly digest: `sha256:${string}`;
6
+ readonly identity: Awaited<ReturnType<typeof captureFileHandleIdentity>>;
7
+ }
8
+ declare function readEnvelope(path: string, expectedOwner: RepositoryMutationArtifactIdentity, expectedKernel: RepositoryMutationArtifactIdentity): Promise<{
9
+ readonly authority: KnownFileJournalAuthority;
10
+ readonly envelope: KnownFileTransactionEnvelopeV1;
11
+ } | undefined>;
12
+ export declare class NodeKnownFileTransactionJournalStore {
13
+ #private;
14
+ constructor(stateDirectory: string, expectedOwner: RepositoryMutationArtifactIdentity, expectedKernel: RepositoryMutationArtifactIdentity);
15
+ read(): Promise<Awaited<ReturnType<typeof readEnvelope>>>;
16
+ create(envelope: KnownFileTransactionEnvelopeV1): Promise<KnownFileJournalAuthority>;
17
+ replace(expected: KnownFileJournalAuthority, envelope: KnownFileTransactionEnvelopeV1): Promise<KnownFileJournalAuthority>;
18
+ remove(expected: KnownFileJournalAuthority): Promise<void>;
19
+ canonicalizeTemporary(): Promise<void>;
20
+ }
21
+ export {};
22
+ //# sourceMappingURL=node-known-file-transaction-journal-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-known-file-transaction-journal-store.d.ts","sourceRoot":"","sources":["../../../../src/repository-mutation/adapters/node/node-known-file-transaction-journal-store.ts"],"names":[],"mappings":"AAKA,OAAO,EAGL,KAAK,kCAAkC,EACxC,MAAM,0CAA0C,CAAC;AAKlD,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,2DAA2D,CAAC;AAEhH,OAAO,EACL,yBAAyB,EAG1B,MAAM,gCAAgC,CAAC;AAYxC,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,MAAM,EAAE,UAAU,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC,CAAC;CAC1E;AAwBD,iBAAe,YAAY,CACzB,IAAI,EAAE,MAAM,EACZ,aAAa,EAAE,kCAAkC,EACjD,cAAc,EAAE,kCAAkC,GACjD,OAAO,CAAC;IACT,QAAQ,CAAC,SAAS,EAAE,yBAAyB,CAAC;IAC9C,QAAQ,CAAC,QAAQ,EAAE,8BAA8B,CAAC;CACnD,GAAG,SAAS,CAAC,CAwBb;AAoBD,qBAAa,oCAAoC;;IAO/C,YACE,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,kCAAkC,EACjD,cAAc,EAAE,kCAAkC,EAOnD;IAEY,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,CAAC,CAMrE;IA2FY,MAAM,CAAC,QAAQ,EAAE,8BAA8B,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAOhG;IAEY,OAAO,CAClB,QAAQ,EAAE,yBAAyB,EACnC,QAAQ,EAAE,8BAA8B,GACvC,OAAO,CAAC,yBAAyB,CAAC,CAQpC;IAEY,MAAM,CAAC,QAAQ,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CAEtE;IAEY,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CA0ClD;CACF"}
@@ -0,0 +1,246 @@
1
+ import { createHash, randomUUID } from "node:crypto";
2
+ import { link, lstat, mkdir, open, rename, unlink } from "node:fs/promises";
3
+ import { join } from "node:path";
4
+ import { canonicalJson } from "../../../canonical-json.js";
5
+ import { assertRepositoryMutationArtifactBindings, parseRepositoryMutationEnvelope } from "../../../repository-mutation-envelope.js";
6
+ import { FOUNDATION_TRANSACTION_FILE, KNOWN_FILE_TRANSACTION_TEMPORARY_FILE } from "../../../state-contract.js";
7
+ import { assertKnownFileTransactionEnvelope } from "../../application/policies/known-file-transaction-envelope.js";
8
+ import { captureFileHandleIdentity, pathMatchesRegularFileIdentity, readBoundedRegularFile } from "./node-bounded-regular-file.js";
9
+ import { cleanupIdentityMatchingOwnedTemporary } from "./node-cleanup-owned-temporary.js";
10
+ import { syncDirectoryDurably, syncDirectoryStrictly } from "./node-directory-durability.js";
11
+ import { assertTerminalEvidenceDirectory, ensureTerminalEvidenceDirectory } from "./node-terminal-evidence-directory.js";
12
+ const MAXIMUM_JOURNAL_BYTES = 32 * 1024 * 1024;
13
+ const KNOWN_FILE_TERMINAL_EVIDENCE = `${FOUNDATION_TRANSACTION_FILE}.completed-known-file-evidence`;
14
+ function errorCode(error) {
15
+ return error instanceof Error && "code" in error
16
+ ? error.code
17
+ : undefined;
18
+ }
19
+ function digest(content) {
20
+ return `sha256:${createHash("sha256").update(content).digest("hex")}`;
21
+ }
22
+ function bytes(envelope) {
23
+ assertKnownFileTransactionEnvelope(envelope);
24
+ const result = Buffer.from(`${canonicalJson(envelope)}\n`, "utf8");
25
+ if (result.byteLength > MAXIMUM_JOURNAL_BYTES) {
26
+ throw new Error("Known-file transaction journal exceeds its byte limit.");
27
+ }
28
+ return result;
29
+ }
30
+ async function readEnvelope(path, expectedOwner, expectedKernel) {
31
+ let observed;
32
+ try {
33
+ observed = await readBoundedRegularFile(path, MAXIMUM_JOURNAL_BYTES);
34
+ }
35
+ catch (error) {
36
+ if (errorCode(error) === "ENOENT") {
37
+ return undefined;
38
+ }
39
+ throw error;
40
+ }
41
+ if (observed.outcome !== "read") {
42
+ throw new Error("Known-file transaction journal is not one stable regular file.");
43
+ }
44
+ const generic = parseRepositoryMutationEnvelope(observed.bytes);
45
+ assertRepositoryMutationArtifactBindings(generic, expectedOwner, expectedKernel);
46
+ const parsed = generic;
47
+ assertKnownFileTransactionEnvelope(parsed);
48
+ if (!observed.bytes.equals(bytes(parsed))) {
49
+ throw new Error("Known-file transaction journal bytes are not canonical.");
50
+ }
51
+ return {
52
+ envelope: parsed,
53
+ authority: { digest: digest(observed.bytes), identity: observed.identity }
54
+ };
55
+ }
56
+ async function prove(path, authority) {
57
+ const observed = await readBoundedRegularFile(path, MAXIMUM_JOURNAL_BYTES);
58
+ if (observed.outcome !== "read" || digest(observed.bytes) !== authority.digest ||
59
+ await pathMatchesRegularFileIdentity(path, authority.identity) !== "match") {
60
+ throw new Error("Known-file transaction journal authority changed concurrently.");
61
+ }
62
+ }
63
+ async function proveMissing(path) {
64
+ try {
65
+ await lstat(path);
66
+ }
67
+ catch (error) {
68
+ if (errorCode(error) === "ENOENT") {
69
+ return;
70
+ }
71
+ throw error;
72
+ }
73
+ throw new Error("Known-file transaction journal pathname was recreated concurrently.");
74
+ }
75
+ export class NodeKnownFileTransactionJournalStore {
76
+ #journalPath;
77
+ #parent;
78
+ #temporaryPath;
79
+ #expectedOwner;
80
+ #expectedKernel;
81
+ constructor(stateDirectory, expectedOwner, expectedKernel) {
82
+ this.#parent = stateDirectory;
83
+ this.#journalPath = join(stateDirectory, FOUNDATION_TRANSACTION_FILE);
84
+ this.#temporaryPath = join(stateDirectory, KNOWN_FILE_TRANSACTION_TEMPORARY_FILE);
85
+ this.#expectedOwner = expectedOwner;
86
+ this.#expectedKernel = expectedKernel;
87
+ }
88
+ async read() {
89
+ const canonical = await readEnvelope(this.#journalPath, this.#expectedOwner, this.#expectedKernel);
90
+ if (canonical !== undefined) {
91
+ return canonical;
92
+ }
93
+ return readEnvelope(this.#temporaryPath, this.#expectedOwner, this.#expectedKernel);
94
+ }
95
+ async #writeTemporary(envelope) {
96
+ const content = bytes(envelope);
97
+ let handle;
98
+ try {
99
+ handle = await open(this.#temporaryPath, "wx", 0o600);
100
+ }
101
+ catch (error) {
102
+ if (errorCode(error) === "EEXIST") {
103
+ const stale = await readEnvelope(this.#temporaryPath, this.#expectedOwner, this.#expectedKernel);
104
+ if (stale === undefined) {
105
+ throw error;
106
+ }
107
+ await prove(this.#temporaryPath, stale.authority);
108
+ await unlink(this.#temporaryPath);
109
+ await syncDirectoryStrictly(this.#parent);
110
+ handle = await open(this.#temporaryPath, "wx", 0o600);
111
+ }
112
+ else {
113
+ throw error;
114
+ }
115
+ }
116
+ try {
117
+ await handle.writeFile(content);
118
+ await handle.sync();
119
+ return { digest: digest(content), identity: await captureFileHandleIdentity(handle) };
120
+ }
121
+ finally {
122
+ await handle.close();
123
+ }
124
+ }
125
+ async #retireCanonical(expected) {
126
+ await prove(this.#journalPath, expected);
127
+ const token = randomUUID();
128
+ const quarantine = join(this.#parent, `${FOUNDATION_TRANSACTION_FILE}.known-file-quarantine.${token}`);
129
+ const captured = join(quarantine, "evidence");
130
+ const terminalRoot = await ensureTerminalEvidenceDirectory(join(this.#parent, KNOWN_FILE_TERMINAL_EVIDENCE));
131
+ const terminal = join(terminalRoot.path, token);
132
+ await mkdir(quarantine, { mode: 0o700 });
133
+ await prove(this.#journalPath, expected);
134
+ await rename(this.#journalPath, captured);
135
+ await syncDirectoryStrictly(quarantine);
136
+ await syncDirectoryStrictly(this.#parent);
137
+ try {
138
+ await prove(captured, expected);
139
+ }
140
+ catch (error) {
141
+ // Restore a blocking name without deleting the atomically captured
142
+ // replacement. EEXIST means another foreign barrier already occupies it.
143
+ try {
144
+ await link(captured, this.#journalPath);
145
+ await syncDirectoryStrictly(this.#parent);
146
+ }
147
+ catch (restoreError) {
148
+ if (errorCode(restoreError) !== "EEXIST") {
149
+ throw restoreError;
150
+ }
151
+ }
152
+ throw error;
153
+ }
154
+ await proveMissing(this.#journalPath);
155
+ await assertTerminalEvidenceDirectory(terminalRoot);
156
+ await rename(quarantine, terminal);
157
+ await syncDirectoryStrictly(terminalRoot.path);
158
+ await syncDirectoryStrictly(this.#parent);
159
+ await prove(join(terminal, "evidence"), expected);
160
+ await proveMissing(this.#journalPath);
161
+ }
162
+ async #publishTemporary(authority) {
163
+ await prove(this.#temporaryPath, authority);
164
+ await link(this.#temporaryPath, this.#journalPath);
165
+ await prove(this.#journalPath, authority);
166
+ await syncDirectoryStrictly(this.#parent);
167
+ await prove(this.#journalPath, authority);
168
+ const retired = await cleanupIdentityMatchingOwnedTemporary({
169
+ allowUnsupportedDirectoryDurability: false,
170
+ displayPath: KNOWN_FILE_TRANSACTION_TEMPORARY_FILE,
171
+ expectedIdentity: authority.identity,
172
+ parent: this.#parent,
173
+ rm: async () => { },
174
+ syncDirectory: syncDirectoryDurably,
175
+ temporaryPath: this.#temporaryPath
176
+ });
177
+ if (retired !== "removed") {
178
+ throw new Error("Known-file transaction candidate changed during retirement.");
179
+ }
180
+ await prove(this.#journalPath, authority);
181
+ }
182
+ async create(envelope) {
183
+ if (await readEnvelope(this.#journalPath, this.#expectedOwner, this.#expectedKernel) !== undefined) {
184
+ throw new Error("Foundation transaction slot is already occupied.");
185
+ }
186
+ const authority = await this.#writeTemporary(envelope);
187
+ await this.#publishTemporary(authority);
188
+ return authority;
189
+ }
190
+ async replace(expected, envelope) {
191
+ await prove(this.#journalPath, expected);
192
+ const authority = await this.#writeTemporary(envelope);
193
+ await prove(this.#journalPath, expected);
194
+ await prove(this.#temporaryPath, authority);
195
+ await this.#retireCanonical(expected);
196
+ await this.#publishTemporary(authority);
197
+ return authority;
198
+ }
199
+ async remove(expected) {
200
+ await this.#retireCanonical(expected);
201
+ }
202
+ async canonicalizeTemporary() {
203
+ const canonical = await readEnvelope(this.#journalPath, this.#expectedOwner, this.#expectedKernel);
204
+ if (canonical !== undefined) {
205
+ // The canonical envelope remains authoritative during replacement. A
206
+ // crash can leave an unbound candidate torn or foreign; recovery must
207
+ // neither parse nor mutate that pathname. It remains preserved evidence
208
+ // and must not be parsed as authority. Capture a stable regular
209
+ // candidate by identity and retire it into terminal evidence so neither
210
+ // a torn write nor a concurrent pathname replacement can block replay.
211
+ let candidate;
212
+ try {
213
+ candidate = await readBoundedRegularFile(this.#temporaryPath, MAXIMUM_JOURNAL_BYTES);
214
+ }
215
+ catch (error) {
216
+ if (errorCode(error) === "ENOENT") {
217
+ return;
218
+ }
219
+ throw error;
220
+ }
221
+ if (candidate.outcome !== "read") {
222
+ throw new Error("Known-file transaction candidate cannot be retired safely.");
223
+ }
224
+ const retired = await cleanupIdentityMatchingOwnedTemporary({
225
+ allowUnsupportedDirectoryDurability: false,
226
+ displayPath: KNOWN_FILE_TRANSACTION_TEMPORARY_FILE,
227
+ expectedIdentity: candidate.identity,
228
+ parent: this.#parent,
229
+ rm: async () => { },
230
+ syncDirectory: syncDirectoryDurably,
231
+ temporaryPath: this.#temporaryPath
232
+ });
233
+ if (retired === "different") {
234
+ throw new Error("Known-file transaction candidate changed during retirement.");
235
+ }
236
+ return;
237
+ }
238
+ const temporary = await readEnvelope(this.#temporaryPath, this.#expectedOwner, this.#expectedKernel);
239
+ if (temporary === undefined) {
240
+ throw new Error("Known-file recovery journal is absent.");
241
+ }
242
+ await prove(this.#temporaryPath, temporary.authority);
243
+ await this.#publishTemporary(temporary.authority);
244
+ }
245
+ }
246
+ //# sourceMappingURL=node-known-file-transaction-journal-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-known-file-transaction-journal-store.js","sourceRoot":"","sources":["../../../../src/repository-mutation/adapters/node/node-known-file-transaction-journal-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { type MutationLease } from "../../../transaction-coordination/mutation-lease.js";
2
+ /**
3
+ * Releases a known-file lease without allowing a release failure to mask the
4
+ * already-settled primary failure.
5
+ */
6
+ export declare function releaseKnownFileTransactionLease(options: {
7
+ readonly jointFailureMessage: string;
8
+ readonly lease: MutationLease;
9
+ readonly primaryFailure?: {
10
+ readonly reason: unknown;
11
+ };
12
+ readonly retainTransactionBarrier: boolean;
13
+ }): Promise<void>;
14
+ export declare function releaseKnownFileTransactionLeaseWith(options: {
15
+ readonly jointFailureMessage: string;
16
+ readonly primaryFailure?: {
17
+ readonly reason: unknown;
18
+ };
19
+ readonly release: () => Promise<void>;
20
+ }): Promise<void>;
21
+ //# sourceMappingURL=node-known-file-transaction-lease-release.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-known-file-transaction-lease-release.d.ts","sourceRoot":"","sources":["../../../../src/repository-mutation/adapters/node/node-known-file-transaction-lease-release.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,qDAAqD,CAAC;AAE7D;;;GAGG;AACH,wBAAsB,gCAAgC,CAAC,OAAO,EAAE;IAC9D,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,cAAc,CAAC,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC;IACvD,QAAQ,CAAC,wBAAwB,EAAE,OAAO,CAAC;CAC5C,GAAG,OAAO,CAAC,IAAI,CAAC,CAShB;AAED,wBAAsB,oCAAoC,CAAC,OAAO,EAAE;IAClE,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,cAAc,CAAC,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC;IACvD,QAAQ,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBhB"}
@@ -0,0 +1,34 @@
1
+ import { releaseMutationLease, retainMutationBarrier } from "../../../transaction-coordination/mutation-lease.js";
2
+ /**
3
+ * Releases a known-file lease without allowing a release failure to mask the
4
+ * already-settled primary failure.
5
+ */
6
+ export async function releaseKnownFileTransactionLease(options) {
7
+ return releaseKnownFileTransactionLeaseWith({
8
+ jointFailureMessage: options.jointFailureMessage,
9
+ ...(options.primaryFailure === undefined ? {} : { primaryFailure: options.primaryFailure }),
10
+ release: async () => {
11
+ if (options.retainTransactionBarrier) {
12
+ retainMutationBarrier(options.lease);
13
+ }
14
+ await releaseMutationLease(options.lease);
15
+ }
16
+ });
17
+ }
18
+ export async function releaseKnownFileTransactionLeaseWith(options) {
19
+ let releaseFailure;
20
+ try {
21
+ await options.release();
22
+ }
23
+ catch (error) {
24
+ releaseFailure = { reason: error };
25
+ }
26
+ if (releaseFailure === undefined) {
27
+ return;
28
+ }
29
+ if (options.primaryFailure !== undefined) {
30
+ throw new AggregateError([options.primaryFailure.reason, releaseFailure.reason], options.jointFailureMessage, { cause: options.primaryFailure.reason });
31
+ }
32
+ return Promise.reject(releaseFailure.reason);
33
+ }
34
+ //# sourceMappingURL=node-known-file-transaction-lease-release.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-known-file-transaction-lease-release.js","sourceRoot":"","sources":["../../../../src/repository-mutation/adapters/node/node-known-file-transaction-lease-release.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EAEtB,MAAM,qDAAqD,CAAC;AAE7D;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gCAAgC,CAAC,OAKtD;IACC,OAAO,oCAAoC,CAAC;QAC1C,mBAAmB,EAAE,OAAO,CAAC,mBAAmB;QAChD,GAAG,CAAC,OAAO,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC;QAC3F,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,IAAI,OAAO,CAAC,wBAAwB,EAAE,CAAC;gBAAA,qBAAqB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAAA,CAAC;YAC7E,MAAM,oBAAoB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oCAAoC,CAAC,OAI1D;IACC,IAAI,cAAwD,CAAC;IAC7D,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;IAC1B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,cAAc,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IACrC,CAAC;IACD,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QAAA,OAAO;IAAA,CAAC;IAC3C,IAAI,OAAO,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QACzC,MAAM,IAAI,cAAc,CACtB,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,EACtD,OAAO,CAAC,mBAAmB,EAC3B,EAAE,KAAK,EAAE,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,CACzC,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { KnownFileTransactionReceiptV1 } from "../../application/model/known-file-transaction.js";
2
+ import type { KnownFileTransactionJournalV1 } from "../../application/model/known-file-transaction-journal.js";
3
+ export declare function compileRolledBackReceipt(journal: KnownFileTransactionJournalV1): KnownFileTransactionReceiptV1;
4
+ //# sourceMappingURL=node-known-file-transaction-receipt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-known-file-transaction-receipt.d.ts","sourceRoot":"","sources":["../../../../src/repository-mutation/adapters/node/node-known-file-transaction-receipt.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,mDAAmD,CAAC;AACvG,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,2DAA2D,CAAC;AAG/G,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,6BAA6B,GACrC,6BAA6B,CA0C/B"}