@agent-teams/engineering-foundation 0.17.0-rc.0 → 0.17.0-rc.2

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 (109) hide show
  1. package/README.md +11 -0
  2. package/dist/capabilities/public-api-compatibility/adapters/outbound/filesystem/changesets-prerelease-state.d.ts +10 -0
  3. package/dist/capabilities/public-api-compatibility/adapters/outbound/filesystem/changesets-prerelease-state.d.ts.map +1 -0
  4. package/dist/capabilities/public-api-compatibility/adapters/outbound/filesystem/changesets-prerelease-state.js +69 -0
  5. package/dist/capabilities/public-api-compatibility/adapters/outbound/filesystem/changesets-prerelease-state.js.map +1 -0
  6. package/dist/capabilities/public-api-compatibility/adapters/outbound/filesystem/filesystem-public-api-repository.d.ts.map +1 -1
  7. package/dist/capabilities/public-api-compatibility/adapters/outbound/filesystem/filesystem-public-api-repository.js +27 -7
  8. package/dist/capabilities/public-api-compatibility/adapters/outbound/filesystem/filesystem-public-api-repository.js.map +1 -1
  9. package/dist/capabilities/public-api-compatibility/application/model/public-api.d.ts +2 -0
  10. package/dist/capabilities/public-api-compatibility/application/model/public-api.d.ts.map +1 -1
  11. package/dist/capabilities/public-api-compatibility/application/use-cases/promote-public-api-baselines.d.ts.map +1 -1
  12. package/dist/capabilities/public-api-compatibility/application/use-cases/promote-public-api-baselines.js +21 -3
  13. package/dist/capabilities/public-api-compatibility/application/use-cases/promote-public-api-baselines.js.map +1 -1
  14. package/dist/document-authoring/composition/inspect-document-transaction.d.ts.map +1 -1
  15. package/dist/document-authoring/composition/inspect-document-transaction.js +11 -12
  16. package/dist/document-authoring/composition/inspect-document-transaction.js.map +1 -1
  17. package/dist/foundation-state-contract.d.ts +1 -0
  18. package/dist/foundation-state-contract.d.ts.map +1 -1
  19. package/dist/foundation-state-contract.js +1 -0
  20. package/dist/foundation-state-contract.js.map +1 -1
  21. package/dist/local-mode/inspection.d.ts.map +1 -1
  22. package/dist/local-mode/inspection.js +11 -1
  23. package/dist/local-mode/inspection.js.map +1 -1
  24. package/dist/mutation/index.d.ts +8 -0
  25. package/dist/mutation/index.d.ts.map +1 -1
  26. package/dist/mutation/index.js +4 -1
  27. package/dist/mutation/index.js.map +1 -1
  28. package/dist/repository-mutation/adapters/node/node-bounded-regular-file.d.ts +2 -0
  29. package/dist/repository-mutation/adapters/node/node-bounded-regular-file.d.ts.map +1 -1
  30. package/dist/repository-mutation/adapters/node/node-bounded-regular-file.js +31 -23
  31. package/dist/repository-mutation/adapters/node/node-bounded-regular-file.js.map +1 -1
  32. package/dist/repository-mutation/adapters/node/node-known-file-recovery-filesystem.d.ts +28 -0
  33. package/dist/repository-mutation/adapters/node/node-known-file-recovery-filesystem.d.ts.map +1 -0
  34. package/dist/repository-mutation/adapters/node/node-known-file-recovery-filesystem.js +194 -0
  35. package/dist/repository-mutation/adapters/node/node-known-file-recovery-filesystem.js.map +1 -0
  36. package/dist/repository-mutation/adapters/node/node-known-file-transaction-filesystem.d.ts +25 -0
  37. package/dist/repository-mutation/adapters/node/node-known-file-transaction-filesystem.d.ts.map +1 -0
  38. package/dist/repository-mutation/adapters/node/node-known-file-transaction-filesystem.js +129 -0
  39. package/dist/repository-mutation/adapters/node/node-known-file-transaction-filesystem.js.map +1 -0
  40. package/dist/repository-mutation/adapters/node/node-known-file-transaction-inspection.d.ts +12 -0
  41. package/dist/repository-mutation/adapters/node/node-known-file-transaction-inspection.d.ts.map +1 -0
  42. package/dist/repository-mutation/adapters/node/node-known-file-transaction-inspection.js +46 -0
  43. package/dist/repository-mutation/adapters/node/node-known-file-transaction-inspection.js.map +1 -0
  44. package/dist/repository-mutation/adapters/node/node-known-file-transaction-journal-store.d.ts +21 -0
  45. package/dist/repository-mutation/adapters/node/node-known-file-transaction-journal-store.d.ts.map +1 -0
  46. package/dist/repository-mutation/adapters/node/node-known-file-transaction-journal-store.js +178 -0
  47. package/dist/repository-mutation/adapters/node/node-known-file-transaction-journal-store.js.map +1 -0
  48. package/dist/repository-mutation/adapters/node/node-known-file-transaction-receipt.d.ts +4 -0
  49. package/dist/repository-mutation/adapters/node/node-known-file-transaction-receipt.d.ts.map +1 -0
  50. package/dist/repository-mutation/adapters/node/node-known-file-transaction-receipt.js +43 -0
  51. package/dist/repository-mutation/adapters/node/node-known-file-transaction-receipt.js.map +1 -0
  52. package/dist/repository-mutation/adapters/node/node-known-file-transaction-recovery.d.ts +11 -0
  53. package/dist/repository-mutation/adapters/node/node-known-file-transaction-recovery.d.ts.map +1 -0
  54. package/dist/repository-mutation/adapters/node/node-known-file-transaction-recovery.js +888 -0
  55. package/dist/repository-mutation/adapters/node/node-known-file-transaction-recovery.js.map +1 -0
  56. package/dist/repository-mutation/adapters/node/node-known-file-transaction.d.ts +20 -0
  57. package/dist/repository-mutation/adapters/node/node-known-file-transaction.d.ts.map +1 -0
  58. package/dist/repository-mutation/adapters/node/node-known-file-transaction.js +546 -0
  59. package/dist/repository-mutation/adapters/node/node-known-file-transaction.js.map +1 -0
  60. package/dist/repository-mutation/application/model/known-file-transaction-journal.d.ts +63 -0
  61. package/dist/repository-mutation/application/model/known-file-transaction-journal.d.ts.map +1 -0
  62. package/dist/repository-mutation/application/model/known-file-transaction-journal.js +15 -0
  63. package/dist/repository-mutation/application/model/known-file-transaction-journal.js.map +1 -0
  64. package/dist/repository-mutation/application/model/known-file-transaction.d.ts +64 -0
  65. package/dist/repository-mutation/application/model/known-file-transaction.d.ts.map +1 -0
  66. package/dist/repository-mutation/application/model/known-file-transaction.js +2 -0
  67. package/dist/repository-mutation/application/model/known-file-transaction.js.map +1 -0
  68. package/dist/repository-mutation/application/policies/known-file-transaction-envelope.d.ts +8 -0
  69. package/dist/repository-mutation/application/policies/known-file-transaction-envelope.d.ts.map +1 -0
  70. package/dist/repository-mutation/application/policies/known-file-transaction-envelope.js +241 -0
  71. package/dist/repository-mutation/application/policies/known-file-transaction-envelope.js.map +1 -0
  72. package/dist/repository-mutation/application/policies/known-file-transaction-plan.d.ts +7 -0
  73. package/dist/repository-mutation/application/policies/known-file-transaction-plan.d.ts.map +1 -0
  74. package/dist/repository-mutation/application/policies/known-file-transaction-plan.js +215 -0
  75. package/dist/repository-mutation/application/policies/known-file-transaction-plan.js.map +1 -0
  76. package/dist/schema-catalog.d.ts.map +1 -1
  77. package/dist/schema-catalog.js +3 -0
  78. package/dist/schema-catalog.js.map +1 -1
  79. package/dist/schema-ids.d.ts +1 -1
  80. package/dist/schema-ids.d.ts.map +1 -1
  81. package/dist/schema-ids.js +3 -0
  82. package/dist/schema-ids.js.map +1 -1
  83. package/dist/semantic-version.d.ts +1 -0
  84. package/dist/semantic-version.d.ts.map +1 -1
  85. package/dist/semantic-version.js +11 -0
  86. package/dist/semantic-version.js.map +1 -1
  87. package/dist/transaction-coordination/adapters/node/document-transaction-status.d.ts +9 -0
  88. package/dist/transaction-coordination/adapters/node/document-transaction-status.d.ts.map +1 -0
  89. package/dist/transaction-coordination/adapters/node/document-transaction-status.js +26 -0
  90. package/dist/transaction-coordination/adapters/node/document-transaction-status.js.map +1 -0
  91. package/dist/transaction-coordination/adapters/node/known-file-transaction-status.d.ts +8 -0
  92. package/dist/transaction-coordination/adapters/node/known-file-transaction-status.d.ts.map +1 -0
  93. package/dist/transaction-coordination/adapters/node/known-file-transaction-status.js +50 -0
  94. package/dist/transaction-coordination/adapters/node/known-file-transaction-status.js.map +1 -0
  95. package/dist/transaction-coordination/adapters/node/node-foundation-transaction-slot.d.ts.map +1 -1
  96. package/dist/transaction-coordination/adapters/node/node-foundation-transaction-slot.js +33 -37
  97. package/dist/transaction-coordination/adapters/node/node-foundation-transaction-slot.js.map +1 -1
  98. package/dist/transaction-coordination/application/foundation-transaction-coordinator.d.ts +1 -1
  99. package/dist/transaction-coordination/application/foundation-transaction-coordinator.d.ts.map +1 -1
  100. package/dist/transaction-coordination/application/foundation-transaction-coordinator.js +12 -1
  101. package/dist/transaction-coordination/application/foundation-transaction-coordinator.js.map +1 -1
  102. package/dist/transaction-coordination/application/model/internal-transaction-status.d.ts +14 -2
  103. package/dist/transaction-coordination/application/model/internal-transaction-status.d.ts.map +1 -1
  104. package/dist/transaction-coordination/application/model/transaction-status.d.ts +6 -2
  105. package/dist/transaction-coordination/application/model/transaction-status.d.ts.map +1 -1
  106. package/package.json +4 -1
  107. package/schemas/foundation-transaction-envelope/v5.schema.json +94 -0
  108. package/schemas/known-file-transaction-plan/v1.schema.json +65 -0
  109. package/schemas/known-file-transaction-receipt/v1.schema.json +36 -0
@@ -0,0 +1,546 @@
1
+ import { link, lstat, mkdir, open, realpath, rename, unlink } from "node:fs/promises";
2
+ import { join } from "node:path";
3
+ import { canonicalJson, sha256Json } from "../../../canonical-json.js";
4
+ import { installedFoundationVersion } from "../../../package-version.js";
5
+ import { createNodeFoundationTransactionCoordinator } from "../../../transaction-coordination/adapters/node/node-foundation-transaction-coordinator.js";
6
+ import { installedFoundationBuildIdentity } from "../../../transaction-coordination/adapters/node/installed-foundation-build-identity.js";
7
+ import { ensureFoundationStateDirectory } from "../../../transaction-coordination/adapters/node/node-foundation-state-directory.js";
8
+ import { serializeKnownFileIdentity } from "../../application/model/known-file-transaction-journal.js";
9
+ import { compileKnownFileTransactionEnvelope } from "../../application/policies/known-file-transaction-envelope.js";
10
+ import { assertKnownFileTransactionPlan } from "../../application/policies/known-file-transaction-plan.js";
11
+ import { captureFileHandleIdentity, pathMatchesRegularFileIdentity, readBoundedRegularFile } from "./node-bounded-regular-file.js";
12
+ import { syncDirectoryStrictly } from "./node-directory-durability.js";
13
+ import { cleanupCommittedKnownFileCaptures, prepareRollbackTemporary } from "./node-known-file-recovery-filesystem.js";
14
+ import { isLexicallyContainedPath } from "./node-repository-path.js";
15
+ import { NodeKnownFileTransactionJournalStore } from "./node-known-file-transaction-journal-store.js";
16
+ import { inspectKnownFileTransactionBarrier } from "./node-known-file-transaction-inspection.js";
17
+ import { canonicalKnownFileRoot, classifyKnownFileOperation, knownFileAliasEntry, knownFileCaptureDirectoryName, knownFileErrorCode, knownFileImageBytes, knownFileTemporaryName, KnownFileTransactionError, matchesKnownFileImage, maximumKnownFileEvidenceBytes, observeKnownFile, sameKnownFileIdentity } from "./node-known-file-transaction-filesystem.js";
18
+ export { KnownFileTransactionError } from "./node-known-file-transaction-filesystem.js";
19
+ async function initialJournal(root, plan) {
20
+ const operations = [];
21
+ for (const operation of plan.operations) {
22
+ operations.push(classifyKnownFileOperation(operation, await observeKnownFile(root, operation.path, maximumKnownFileEvidenceBytes(operation))));
23
+ }
24
+ return Object.freeze({
25
+ schemaVersion: 1,
26
+ plan,
27
+ operations: Object.freeze(operations),
28
+ authorizedDirectories: Object.freeze([]),
29
+ createdDirectories: Object.freeze([])
30
+ });
31
+ }
32
+ function replaceOperation(journal, index, replacement) {
33
+ return Object.freeze({
34
+ ...journal,
35
+ operations: Object.freeze(journal.operations.with(index, replacement))
36
+ });
37
+ }
38
+ async function persist(store, stored, journal, state = "APPLYING") {
39
+ const envelope = compileKnownFileTransactionEnvelope({
40
+ foundation: stored.envelope.foundation,
41
+ journal,
42
+ state
43
+ });
44
+ stored.authority = await store.replace(stored.authority, envelope);
45
+ stored.envelope = envelope;
46
+ }
47
+ async function ensureParentDirectories(options) {
48
+ const segments = options.operationPath.split("/");
49
+ segments.pop();
50
+ let current = options.root;
51
+ const traversed = [];
52
+ for (const segment of segments) {
53
+ traversed.push(segment);
54
+ const repositoryPath = traversed.join("/");
55
+ const exists = await knownFileAliasEntry(current, segment);
56
+ if (exists === undefined) {
57
+ const authorized = Object.freeze({
58
+ ...options.stored.envelope.journal,
59
+ authorizedDirectories: Object.freeze([
60
+ ...options.stored.envelope.journal.authorizedDirectories,
61
+ repositoryPath
62
+ ])
63
+ });
64
+ await persist(options.store, options.stored, authorized);
65
+ await options.faultInjector?.({
66
+ phase: "after-directory-authorized",
67
+ operationIndex: options.index,
68
+ path: repositoryPath
69
+ });
70
+ await mkdir(join(current, segment), { mode: 0o755 });
71
+ await syncDirectoryStrictly(current);
72
+ const metadata = await lstat(join(current, segment), { bigint: true });
73
+ if (!metadata.isDirectory() || metadata.isSymbolicLink()) {
74
+ throw new KnownFileTransactionError("KNOWN_FILE_DIRECTORY_INVALID", `Created ancestor is not one real directory: ${repositoryPath}.`);
75
+ }
76
+ const identity = serializeKnownFileIdentity({
77
+ birthtimeNs: metadata.birthtimeNs,
78
+ dev: metadata.dev,
79
+ ino: metadata.ino
80
+ });
81
+ await options.faultInjector?.({
82
+ phase: "after-directory-created-unbound",
83
+ operationIndex: options.index,
84
+ path: repositoryPath
85
+ });
86
+ const journal = Object.freeze({
87
+ ...options.stored.envelope.journal,
88
+ authorizedDirectories: Object.freeze(options.stored.envelope.journal.authorizedDirectories.filter((path) => path !== repositoryPath)),
89
+ createdDirectories: Object.freeze([
90
+ ...options.stored.envelope.journal.createdDirectories,
91
+ Object.freeze({ path: repositoryPath, identity })
92
+ ])
93
+ });
94
+ await persist(options.store, options.stored, journal);
95
+ await options.faultInjector?.({
96
+ phase: "after-directory-created",
97
+ operationIndex: options.index,
98
+ path: repositoryPath
99
+ });
100
+ }
101
+ current = join(current, segment);
102
+ const metadata = await lstat(current);
103
+ if (metadata.isSymbolicLink() || !metadata.isDirectory() ||
104
+ !isLexicallyContainedPath(options.root, await realpath(current))) {
105
+ throw new KnownFileTransactionError("KNOWN_FILE_ANCESTOR_INVALID", `Managed path ancestor changed: ${options.operationPath}.`);
106
+ }
107
+ }
108
+ return current;
109
+ }
110
+ async function prepareTemporary(options) {
111
+ const path = join(options.parent, knownFileTemporaryName(options.operation.path, options.planDigest, options.operationIndex));
112
+ const handle = await open(path, "wx", 0o600).catch((error) => {
113
+ throw new KnownFileTransactionError(knownFileErrorCode(error) === "EEXIST" ? "KNOWN_FILE_TEMPORARY_EXISTS" : "KNOWN_FILE_TEMPORARY_CREATE_FAILED", `Could not create the transaction-owned temporary for ${options.operation.path}.`, { cause: error });
114
+ });
115
+ try {
116
+ await handle.writeFile(knownFileImageBytes(options.operation.postimage));
117
+ await handle.chmod(options.operation.postimage.mode);
118
+ await handle.sync();
119
+ return { path, identity: await captureFileHandleIdentity(handle) };
120
+ }
121
+ finally {
122
+ await handle.close();
123
+ }
124
+ }
125
+ async function verifyTemporary(path, identity, image) {
126
+ const observed = await readBoundedRegularFile(path, image.size);
127
+ if (observed.outcome !== "read" || !sameKnownFileIdentity(observed.identity, identity) ||
128
+ !matchesKnownFileImage({ state: "file", bytes: observed.bytes, identity: observed.identity, mode: observed.mode & 0o777 }, image)) {
129
+ throw new KnownFileTransactionError("KNOWN_FILE_TEMPORARY_CHANGED", "Transaction-owned temporary changed before publication.");
130
+ }
131
+ }
132
+ function capturePaths(options) {
133
+ const directory = join(options.parent, knownFileCaptureDirectoryName(options.operation.path, options.planDigest, options.operationIndex));
134
+ return {
135
+ captured: join(directory, "preimage"),
136
+ directory,
137
+ retired: join(directory, "retired")
138
+ };
139
+ }
140
+ async function prepareCaptureDirectory(options) {
141
+ const paths = capturePaths(options);
142
+ await mkdir(paths.directory, { mode: 0o700 }).catch((error) => {
143
+ throw new KnownFileTransactionError(knownFileErrorCode(error) === "EEXIST"
144
+ ? "KNOWN_FILE_CAPTURE_EXISTS"
145
+ : "KNOWN_FILE_CAPTURE_CREATE_FAILED", `Could not create the transaction-owned capture for ${options.operation.path}.`, { cause: error });
146
+ });
147
+ await syncDirectoryStrictly(options.parent);
148
+ const metadata = await lstat(paths.directory, { bigint: true });
149
+ if (!metadata.isDirectory() || metadata.isSymbolicLink()) {
150
+ throw new KnownFileTransactionError("KNOWN_FILE_CAPTURE_INVALID", `Transaction capture is not one real directory: ${options.operation.path}.`);
151
+ }
152
+ return {
153
+ identity: {
154
+ birthtimeNs: metadata.birthtimeNs,
155
+ dev: metadata.dev,
156
+ ino: metadata.ino
157
+ },
158
+ paths
159
+ };
160
+ }
161
+ async function captureKnownPreimage(options) {
162
+ const destination = join(options.root, ...options.operation.path.split("/"));
163
+ await link(destination, options.capture.paths.captured).catch((error) => {
164
+ throw new KnownFileTransactionError("KNOWN_FILE_CAS_MISMATCH", `Could not capture the exact replacement preimage: ${options.operation.path}.`, { cause: error });
165
+ });
166
+ await syncDirectoryStrictly(options.capture.paths.directory);
167
+ const captured = await readBoundedRegularFile(options.capture.paths.captured, maximumKnownFileEvidenceBytes(options.operation));
168
+ const matchedPreimage = captured.outcome === "read"
169
+ ? options.operation.precondition.acceptedPreimages.findIndex((image) => matchesKnownFileImage({
170
+ state: "file",
171
+ bytes: captured.bytes,
172
+ identity: captured.identity,
173
+ mode: captured.mode & 0o777
174
+ }, image))
175
+ : -1;
176
+ if (captured.outcome !== "read" || captured.linkCount !== 2n || matchedPreimage < 0) {
177
+ // This pathname is an alias created by this transaction. Removing the alias
178
+ // cannot remove the editor's public pathname and never discards unknown bytes.
179
+ await unlink(options.capture.paths.captured);
180
+ await syncDirectoryStrictly(options.capture.paths.directory);
181
+ throw new KnownFileTransactionError("KNOWN_FILE_CAS_MISMATCH", `Captured replacement preimage is no longer accepted: ${options.operation.path}.`);
182
+ }
183
+ return { identity: captured.identity, matchedPreimage };
184
+ }
185
+ async function retireCapturedDestination(options) {
186
+ await rename(options.destination, options.capture.paths.retired).catch((error) => {
187
+ throw new KnownFileTransactionError("KNOWN_FILE_CAS_MISMATCH", `Destination disappeared before identity-bound capture: ${options.operationPath}.`, { cause: error });
188
+ });
189
+ await syncDirectoryStrictly(options.capture.paths.directory);
190
+ await syncDirectoryStrictly(options.parent);
191
+ await options.faultInjector?.({
192
+ phase: "after-destination-captured",
193
+ operationIndex: options.index,
194
+ path: options.operationPath
195
+ });
196
+ const retired = await readBoundedRegularFile(options.capture.paths.retired, 8 * 1024 * 1024);
197
+ if (retired.outcome !== "read" ||
198
+ !sameKnownFileIdentity(retired.identity, options.capturedIdentity)) {
199
+ if (retired.outcome === "read") {
200
+ try {
201
+ await link(options.capture.paths.retired, options.destination);
202
+ await syncDirectoryStrictly(options.parent);
203
+ await unlink(options.capture.paths.retired);
204
+ await syncDirectoryStrictly(options.capture.paths.directory);
205
+ }
206
+ catch (error) {
207
+ if (knownFileErrorCode(error) !== "EEXIST") {
208
+ throw error;
209
+ }
210
+ }
211
+ }
212
+ throw new KnownFileTransactionError("KNOWN_FILE_CAS_MISMATCH", `A foreign destination appeared during identity-bound capture: ${options.operationPath}.`);
213
+ }
214
+ const stableCaptured = await readBoundedRegularFile(options.capture.paths.captured, options.preimage.size);
215
+ if (stableCaptured.outcome !== "read" ||
216
+ stableCaptured.linkCount !== 2n ||
217
+ !sameKnownFileIdentity(stableCaptured.identity, options.capturedIdentity) ||
218
+ !matchesKnownFileImage({
219
+ state: "file", bytes: stableCaptured.bytes, identity: stableCaptured.identity,
220
+ mode: stableCaptured.mode & 0o777
221
+ }, options.preimage)) {
222
+ await link(options.capture.paths.retired, options.destination).catch((error) => {
223
+ throw new KnownFileTransactionError("KNOWN_FILE_RECOVERY_CONFLICT", `Mutated retired destination could not be restored: ${options.operationPath}.`, { cause: error });
224
+ });
225
+ await syncDirectoryStrictly(options.parent);
226
+ await unlink(options.capture.paths.retired);
227
+ await syncDirectoryStrictly(options.capture.paths.directory);
228
+ throw new KnownFileTransactionError("KNOWN_FILE_CAS_MISMATCH", `Captured replacement preimage changed through an open file handle: ${options.operationPath}.`);
229
+ }
230
+ await unlink(options.capture.paths.retired);
231
+ await syncDirectoryStrictly(options.capture.paths.directory);
232
+ }
233
+ // oxlint-disable-next-line complexity, max-lines-per-function
234
+ async function executeOperation(options) {
235
+ const operation = options.stored.envelope.journal.plan.operations[options.index];
236
+ let journalOperation = options.stored.envelope.journal.operations[options.index];
237
+ if (journalOperation.state === "already-satisfied" || journalOperation.state === "published") {
238
+ return;
239
+ }
240
+ if (journalOperation.state !== "pending") {
241
+ throw new KnownFileTransactionError("KNOWN_FILE_RECOVERY_REQUIRED", `Operation ${operation.path} is already in progress and requires recovery.`);
242
+ }
243
+ const parent = await ensureParentDirectories({
244
+ ...options,
245
+ operationPath: operation.path
246
+ });
247
+ journalOperation = Object.freeze({ ...journalOperation, state: "temporary-authorized" });
248
+ await persist(options.store, options.stored, replaceOperation(options.stored.envelope.journal, options.index, journalOperation));
249
+ await options.faultInjector?.({
250
+ phase: "after-temporary-authorized",
251
+ operationIndex: options.index,
252
+ path: operation.path
253
+ });
254
+ const temporary = await prepareTemporary({
255
+ operation,
256
+ operationIndex: options.index,
257
+ parent,
258
+ planDigest: options.stored.envelope.journal.plan.planDigest
259
+ });
260
+ await options.faultInjector?.({
261
+ phase: "after-temporary-created-unbound",
262
+ operationIndex: options.index,
263
+ path: operation.path
264
+ });
265
+ journalOperation = Object.freeze({
266
+ ...journalOperation,
267
+ state: "temporary-ready",
268
+ temporaryIdentity: serializeKnownFileIdentity(temporary.identity)
269
+ });
270
+ await persist(options.store, options.stored, replaceOperation(options.stored.envelope.journal, options.index, journalOperation));
271
+ await options.faultInjector?.({
272
+ phase: "after-temporary-synced",
273
+ operationIndex: options.index,
274
+ path: operation.path
275
+ });
276
+ await verifyTemporary(temporary.path, temporary.identity, operation.postimage);
277
+ const destination = join(options.root, ...operation.path.split("/"));
278
+ if (operation.precondition.state === "absent") {
279
+ journalOperation = Object.freeze({ ...journalOperation, state: "publishing" });
280
+ await persist(options.store, options.stored, replaceOperation(options.stored.envelope.journal, options.index, journalOperation));
281
+ await options.faultInjector?.({
282
+ phase: "after-operation-publishing",
283
+ operationIndex: options.index,
284
+ path: operation.path
285
+ });
286
+ await link(temporary.path, destination).catch((error) => {
287
+ throw new KnownFileTransactionError("KNOWN_FILE_CAS_MISMATCH", `Destination appeared during create CAS: ${operation.path}.`, { cause: error });
288
+ });
289
+ await options.faultInjector?.({
290
+ phase: "after-postimage-linked",
291
+ operationIndex: options.index,
292
+ path: operation.path
293
+ });
294
+ await unlink(temporary.path);
295
+ }
296
+ else {
297
+ journalOperation = Object.freeze({ ...journalOperation, state: "capture-authorized" });
298
+ await persist(options.store, options.stored, replaceOperation(options.stored.envelope.journal, options.index, journalOperation));
299
+ await options.faultInjector?.({
300
+ phase: "after-capture-authorized",
301
+ operationIndex: options.index,
302
+ path: operation.path
303
+ });
304
+ const capture = await prepareCaptureDirectory({
305
+ operation,
306
+ operationIndex: options.index,
307
+ parent,
308
+ planDigest: options.stored.envelope.journal.plan.planDigest
309
+ });
310
+ await options.faultInjector?.({
311
+ phase: "after-capture-created-unbound",
312
+ operationIndex: options.index,
313
+ path: operation.path
314
+ });
315
+ journalOperation = Object.freeze({
316
+ ...journalOperation,
317
+ captureDirectoryIdentity: serializeKnownFileIdentity(capture.identity),
318
+ state: "capture-ready"
319
+ });
320
+ await persist(options.store, options.stored, replaceOperation(options.stored.envelope.journal, options.index, journalOperation));
321
+ await options.faultInjector?.({
322
+ phase: "after-capture-ready",
323
+ operationIndex: options.index,
324
+ path: operation.path
325
+ });
326
+ const captured = await captureKnownPreimage({
327
+ capture,
328
+ ...(options.faultInjector === undefined ? {} : { faultInjector: options.faultInjector }),
329
+ index: options.index,
330
+ operation: { ...operation, precondition: operation.precondition },
331
+ root: options.root
332
+ });
333
+ await options.faultInjector?.({
334
+ phase: "after-preimage-linked-unbound",
335
+ operationIndex: options.index,
336
+ path: operation.path
337
+ });
338
+ journalOperation = Object.freeze({
339
+ ...journalOperation,
340
+ capturedPreimageIdentity: serializeKnownFileIdentity(captured.identity),
341
+ matchedPreimage: captured.matchedPreimage,
342
+ state: "preimage-captured"
343
+ });
344
+ await persist(options.store, options.stored, replaceOperation(options.stored.envelope.journal, options.index, journalOperation));
345
+ await options.faultInjector?.({
346
+ phase: "after-preimage-captured",
347
+ operationIndex: options.index,
348
+ path: operation.path
349
+ });
350
+ const rollbackPath = join(parent, `.${operation.path.split("/").at(-1)}.agent-teams.rollback.${options.index}.tmp`);
351
+ const rollbackIdentity = await prepareRollbackTemporary({
352
+ operationPath: operation.path,
353
+ path: rollbackPath,
354
+ preimage: operation.precondition.acceptedPreimages[captured.matchedPreimage]
355
+ });
356
+ await options.faultInjector?.({
357
+ phase: "after-rollback-temporary-created-unbound",
358
+ operationIndex: options.index,
359
+ path: operation.path
360
+ });
361
+ await syncDirectoryStrictly(parent);
362
+ if (await pathMatchesRegularFileIdentity(rollbackPath, rollbackIdentity) !== "match") {
363
+ throw new KnownFileTransactionError("KNOWN_FILE_CAS_MISMATCH", `Rollback temporary changed before durable identity binding: ${operation.path}.`);
364
+ }
365
+ journalOperation = Object.freeze({
366
+ ...journalOperation,
367
+ rollbackTemporaryIdentity: serializeKnownFileIdentity(rollbackIdentity)
368
+ });
369
+ await persist(options.store, options.stored, replaceOperation(options.stored.envelope.journal, options.index, journalOperation));
370
+ await options.faultInjector?.({
371
+ phase: "after-rollback-temporary-ready",
372
+ operationIndex: options.index,
373
+ path: operation.path
374
+ });
375
+ await retireCapturedDestination({
376
+ capture,
377
+ capturedIdentity: captured.identity,
378
+ destination,
379
+ ...(options.faultInjector === undefined ? {} : { faultInjector: options.faultInjector }),
380
+ index: options.index,
381
+ operationPath: operation.path,
382
+ parent,
383
+ preimage: operation.precondition.acceptedPreimages[captured.matchedPreimage]
384
+ });
385
+ journalOperation = Object.freeze({ ...journalOperation, state: "destination-retired" });
386
+ await persist(options.store, options.stored, replaceOperation(options.stored.envelope.journal, options.index, journalOperation));
387
+ await options.faultInjector?.({
388
+ phase: "after-destination-retired",
389
+ operationIndex: options.index,
390
+ path: operation.path
391
+ });
392
+ journalOperation = Object.freeze({ ...journalOperation, state: "publishing" });
393
+ await persist(options.store, options.stored, replaceOperation(options.stored.envelope.journal, options.index, journalOperation));
394
+ await options.faultInjector?.({
395
+ phase: "after-operation-publishing",
396
+ operationIndex: options.index,
397
+ path: operation.path
398
+ });
399
+ await link(temporary.path, destination).catch((error) => {
400
+ throw new KnownFileTransactionError("KNOWN_FILE_CAS_MISMATCH", `Destination appeared during replacement publication: ${operation.path}.`, { cause: error });
401
+ });
402
+ await options.faultInjector?.({
403
+ phase: "after-postimage-linked",
404
+ operationIndex: options.index,
405
+ path: operation.path
406
+ });
407
+ await unlink(temporary.path);
408
+ }
409
+ await syncDirectoryStrictly(parent);
410
+ const published = await observeKnownFile(options.root, operation.path, operation.postimage.size);
411
+ if (!matchesKnownFileImage(published, operation.postimage) || published.identity === undefined ||
412
+ !sameKnownFileIdentity(published.identity, temporary.identity)) {
413
+ throw new KnownFileTransactionError("KNOWN_FILE_POSTIMAGE_INVALID", `Published postimage failed exact verification: ${operation.path}.`);
414
+ }
415
+ journalOperation = Object.freeze({ ...journalOperation, state: "published" });
416
+ await persist(options.store, options.stored, replaceOperation(options.stored.envelope.journal, options.index, journalOperation));
417
+ await options.faultInjector?.({
418
+ phase: "after-operation-published",
419
+ operationIndex: options.index,
420
+ path: operation.path
421
+ });
422
+ }
423
+ export function compileKnownFileTransactionReceipt(journal, outcome) {
424
+ const operations = journal.operations.map((entry, index) => {
425
+ const planOperation = journal.plan.operations[index];
426
+ const operationOutcome = entry.state === "already-satisfied"
427
+ ? "already-satisfied"
428
+ : planOperation.precondition.state === "absent" ? "created" : "replaced";
429
+ return Object.freeze({
430
+ path: entry.path,
431
+ outcome: operationOutcome,
432
+ resultDigest: planOperation.postimage.digest
433
+ });
434
+ });
435
+ const body = {
436
+ schemaVersion: 1,
437
+ protocol: "foundation.replace-known-file/v1",
438
+ planDigest: journal.plan.planDigest,
439
+ outcome,
440
+ operations: Object.freeze(operations)
441
+ };
442
+ return Object.freeze({
443
+ ...body,
444
+ receiptDigest: sha256Json({
445
+ domain: "agent-teams.foundation.known-file-transaction-receipt/v1",
446
+ body
447
+ })
448
+ });
449
+ }
450
+ export async function verifyCommittedKnownFilePostimages(root, journal) {
451
+ for (const operation of journal.plan.operations) {
452
+ if (!matchesKnownFileImage(await observeKnownFile(root, operation.path, operation.postimage.size), operation.postimage)) {
453
+ throw new KnownFileTransactionError("KNOWN_FILE_COMMITTED_DRIFT", `Committed postimage changed before journal retirement: ${operation.path}.`);
454
+ }
455
+ }
456
+ }
457
+ async function verifyApplyingKnownFilePostimages(root, journal) {
458
+ for (const operation of journal.plan.operations) {
459
+ if (!matchesKnownFileImage(await observeKnownFile(root, operation.path, operation.postimage.size), operation.postimage)) {
460
+ throw new KnownFileTransactionError("KNOWN_FILE_PRECOMMIT_DRIFT", `Transaction postimage changed before commit: ${operation.path}.`);
461
+ }
462
+ }
463
+ }
464
+ export async function applyKnownFileTransaction(options) {
465
+ assertKnownFileTransactionPlan(options.plan);
466
+ if (process.platform === "win32") {
467
+ throw new KnownFileTransactionError("KNOWN_FILE_APPLY_UNSUPPORTED", "Known-file apply requires strict directory durability and is not qualified on Windows.");
468
+ }
469
+ const root = await canonicalKnownFileRoot(options.consumerRoot);
470
+ const barrier = await inspectKnownFileTransactionBarrier({ consumerRoot: root });
471
+ if (barrier.state !== "idle" && barrier.code === "KNOWN_FILE_RECOVERY_REQUIRED") {
472
+ throw new KnownFileTransactionError(barrier.code, barrier.message);
473
+ }
474
+ const optimisticJournal = await initialJournal(root, options.plan);
475
+ if (barrier.state === "idle" &&
476
+ optimisticJournal.operations.every(({ state }) => state === "already-satisfied")) {
477
+ return compileKnownFileTransactionReceipt(optimisticJournal, "already-satisfied");
478
+ }
479
+ const coordinator = await createNodeFoundationTransactionCoordinator(root);
480
+ const lease = await coordinator.acquire({ requestedMutation: "known-file-transaction" });
481
+ let retainBarrier = false;
482
+ let store;
483
+ try {
484
+ await options.faultInjector?.({ phase: "after-barrier-acquired" });
485
+ const journal = await initialJournal(root, options.plan);
486
+ if (journal.operations.every(({ state }) => state === "already-satisfied")) {
487
+ return compileKnownFileTransactionReceipt(journal, "already-satisfied");
488
+ }
489
+ const [version, buildIdentity] = await Promise.all([
490
+ installedFoundationVersion(),
491
+ installedFoundationBuildIdentity()
492
+ ]);
493
+ const envelope = compileKnownFileTransactionEnvelope({
494
+ foundation: { version, buildIdentity },
495
+ journal,
496
+ state: "APPLYING"
497
+ });
498
+ const stateDirectory = await ensureFoundationStateDirectory(root);
499
+ store = new NodeKnownFileTransactionJournalStore(stateDirectory);
500
+ const stored = {
501
+ authority: await store.create(envelope),
502
+ envelope
503
+ };
504
+ retainBarrier = true;
505
+ await options.faultInjector?.({ phase: "after-journal-created" });
506
+ for (let index = 0; index < options.plan.operations.length; index += 1) {
507
+ await executeOperation({
508
+ ...(options.faultInjector === undefined ? {} : { faultInjector: options.faultInjector }),
509
+ index,
510
+ root,
511
+ store,
512
+ stored
513
+ });
514
+ }
515
+ await verifyApplyingKnownFilePostimages(root, stored.envelope.journal);
516
+ await persist(store, stored, stored.envelope.journal, "COMMITTED");
517
+ await options.faultInjector?.({ phase: "after-journal-committed" });
518
+ await verifyCommittedKnownFilePostimages(root, stored.envelope.journal);
519
+ await cleanupCommittedKnownFileCaptures(root, stored.envelope.journal, options.faultInjector);
520
+ await verifyCommittedKnownFilePostimages(root, stored.envelope.journal);
521
+ const result = compileKnownFileTransactionReceipt(stored.envelope.journal, "applied");
522
+ await store.remove(stored.authority);
523
+ await options.faultInjector?.({ phase: "after-journal-retired" });
524
+ retainBarrier = false;
525
+ return result;
526
+ }
527
+ catch (error) {
528
+ if (store !== undefined) {
529
+ try {
530
+ retainBarrier = await store.read() !== undefined;
531
+ }
532
+ catch {
533
+ // Unreadable evidence must stay protected for manual inspection.
534
+ retainBarrier = true;
535
+ }
536
+ }
537
+ throw error;
538
+ }
539
+ finally {
540
+ await lease.release({ retainTransactionBarrier: retainBarrier });
541
+ }
542
+ }
543
+ export function canonicalKnownFileTransactionReceipt(value) {
544
+ return `${canonicalJson(value)}\n`;
545
+ }
546
+ //# sourceMappingURL=node-known-file-transaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-known-file-transaction.js","sourceRoot":"","sources":["../../../../src/repository-mutation/adapters/node/node-known-file-transaction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ import type { PortablePathIdentity } from "./path-identity.js";
2
+ import type { KnownFileDigest, KnownFileTransactionPlanV1 } from "./known-file-transaction.js";
3
+ export interface KnownFileTransactionPortableIdentityV1 {
4
+ readonly birthtimeNs: string;
5
+ readonly dev: string;
6
+ readonly ino: string;
7
+ }
8
+ interface KnownFileTransactionRetirementV1 {
9
+ readonly kind: "destination" | "rollback-temporary" | "temporary";
10
+ readonly state: "ready" | "captured" | "unlink-authorized";
11
+ readonly directoryIdentity: KnownFileTransactionPortableIdentityV1;
12
+ readonly pathIdentity: KnownFileTransactionPortableIdentityV1;
13
+ }
14
+ export type KnownFileTransactionJournalOperationV1 = {
15
+ readonly path: string;
16
+ readonly state: "already-satisfied" | "pending" | "temporary-authorized";
17
+ readonly matchedPreimage?: number;
18
+ readonly rollbackTemporaryIdentity?: never;
19
+ readonly captureDirectoryIdentity?: never;
20
+ readonly capturedPreimageIdentity?: never;
21
+ readonly retirement?: never;
22
+ } | {
23
+ readonly path: string;
24
+ readonly state: "temporary-ready" | "capture-authorized" | "capture-ready" | "preimage-captured" | "destination-retired" | "publishing" | "published" | "rollback-restored";
25
+ readonly matchedPreimage?: number;
26
+ readonly rollbackTemporaryIdentity?: KnownFileTransactionPortableIdentityV1;
27
+ readonly temporaryIdentity: KnownFileTransactionPortableIdentityV1;
28
+ readonly captureDirectoryIdentity?: KnownFileTransactionPortableIdentityV1;
29
+ readonly capturedPreimageIdentity?: KnownFileTransactionPortableIdentityV1;
30
+ readonly retirement?: KnownFileTransactionRetirementV1;
31
+ };
32
+ export interface KnownFileTransactionJournalV1 {
33
+ readonly schemaVersion: 1;
34
+ readonly plan: KnownFileTransactionPlanV1;
35
+ readonly operations: readonly KnownFileTransactionJournalOperationV1[];
36
+ readonly authorizedDirectories: readonly string[];
37
+ readonly createdDirectories: readonly {
38
+ readonly path: string;
39
+ readonly identity: KnownFileTransactionPortableIdentityV1;
40
+ }[];
41
+ }
42
+ export interface KnownFileTransactionEnvelopeV1 {
43
+ readonly schemaVersion: 5;
44
+ readonly operationKind: "known-file-transaction";
45
+ readonly recoveryHandler: {
46
+ readonly id: "foundation.replace-known-file";
47
+ readonly contractVersion: 1;
48
+ };
49
+ readonly foundation: {
50
+ readonly version: string;
51
+ readonly buildIdentity: KnownFileDigest;
52
+ };
53
+ readonly adapterContractVersion: 1;
54
+ readonly payloadKind: "known-file-transaction-journal/v1";
55
+ readonly state: "APPLYING" | "COMMITTED";
56
+ readonly journal: KnownFileTransactionJournalV1;
57
+ readonly payloadDigest: KnownFileDigest;
58
+ readonly envelopeDigest: KnownFileDigest;
59
+ }
60
+ export declare function serializeKnownFileIdentity(identity: PortablePathIdentity): KnownFileTransactionPortableIdentityV1;
61
+ export declare function deserializeKnownFileIdentity(identity: KnownFileTransactionPortableIdentityV1): PortablePathIdentity;
62
+ export {};
63
+ //# sourceMappingURL=known-file-transaction-journal.d.ts.map