@agent-teams/docs-protocol 0.1.3 → 0.2.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 (120) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/README.md +51 -2
  3. package/assets/catalog.json +1 -1
  4. package/assets/history/sha256-d697c5c7c9bcfccfc006fcf7e4d4cc8e7c629f9689781b9b0b50f30d82bc019e/caller.yml +14 -0
  5. package/assets/transition-catalog.json +1 -1
  6. package/dist/adapters/docs-command-envelope-schema-validator.d.ts.map +1 -1
  7. package/dist/adapters/docs-command-envelope-schema-validator.js +30 -8
  8. package/dist/adapters/docs-command-envelope-schema-validator.js.map +1 -1
  9. package/dist/adapters/docs-profile-schema-validator.d.ts.map +1 -1
  10. package/dist/adapters/docs-profile-schema-validator.js +13 -7
  11. package/dist/adapters/docs-profile-schema-validator.js.map +1 -1
  12. package/dist/adapters/foundation-docs-port.d.ts +10 -9
  13. package/dist/adapters/foundation-docs-port.d.ts.map +1 -1
  14. package/dist/adapters/foundation-docs-port.js +15 -10
  15. package/dist/adapters/foundation-docs-port.js.map +1 -1
  16. package/dist/adapters/node-adoption-inspector.js +2 -2
  17. package/dist/adapters/node-adoption-inspector.js.map +1 -1
  18. package/dist/adapters/node-profile-reader.d.ts +3 -3
  19. package/dist/adapters/node-profile-reader.d.ts.map +1 -1
  20. package/dist/application/authority-handshake.d.ts +4 -4
  21. package/dist/application/authority-handshake.d.ts.map +1 -1
  22. package/dist/application/compiled-document.d.ts +11 -0
  23. package/dist/application/compiled-document.d.ts.map +1 -0
  24. package/dist/application/compiled-document.js +31 -0
  25. package/dist/application/compiled-document.js.map +1 -0
  26. package/dist/application/docs-new-completion.d.ts +5 -4
  27. package/dist/application/docs-new-completion.d.ts.map +1 -1
  28. package/dist/application/docs-new-completion.js.map +1 -1
  29. package/dist/application/docs-protocol-v1-presenter.d.ts +140 -0
  30. package/dist/application/docs-protocol-v1-presenter.d.ts.map +1 -0
  31. package/dist/application/docs-protocol-v1-presenter.js +77 -0
  32. package/dist/application/docs-protocol-v1-presenter.js.map +1 -0
  33. package/dist/application/docs-protocol.d.ts +210 -3
  34. package/dist/application/docs-protocol.d.ts.map +1 -1
  35. package/dist/application/docs-protocol.js +46 -13
  36. package/dist/application/docs-protocol.js.map +1 -1
  37. package/dist/composition/cli-input.d.ts +12 -0
  38. package/dist/composition/cli-input.d.ts.map +1 -0
  39. package/dist/composition/cli-input.js +66 -0
  40. package/dist/composition/cli-input.js.map +1 -0
  41. package/dist/composition/cli.d.ts +4 -4
  42. package/dist/composition/cli.d.ts.map +1 -1
  43. package/dist/composition/cli.js +21 -144
  44. package/dist/composition/cli.js.map +1 -1
  45. package/dist/composition/docs-human-renderer.d.ts +5 -0
  46. package/dist/composition/docs-human-renderer.d.ts.map +1 -0
  47. package/dist/composition/docs-human-renderer.js +94 -0
  48. package/dist/composition/docs-human-renderer.js.map +1 -0
  49. package/dist/composition/node-docs-api.d.ts +191 -0
  50. package/dist/composition/node-docs-api.d.ts.map +1 -1
  51. package/dist/composition/node-docs-api.js +18 -0
  52. package/dist/composition/node-docs-api.js.map +1 -1
  53. package/dist/composition/qualification-cli.d.ts +2 -0
  54. package/dist/composition/qualification-cli.d.ts.map +1 -0
  55. package/dist/composition/qualification-cli.js +119 -0
  56. package/dist/composition/qualification-cli.js.map +1 -0
  57. package/dist/consumer-integration/adapters/consumer-integration-schema-validator.d.ts.map +1 -1
  58. package/dist/consumer-integration/adapters/consumer-integration-schema-validator.js +8 -3
  59. package/dist/consumer-integration/adapters/consumer-integration-schema-validator.js.map +1 -1
  60. package/dist/consumer-integration/adapters/node-consumer-integration-repository.d.ts.map +1 -1
  61. package/dist/consumer-integration/adapters/node-consumer-integration-repository.js +10 -3
  62. package/dist/consumer-integration/adapters/node-consumer-integration-repository.js.map +1 -1
  63. package/dist/consumer-integration/application/policies/consumer-integration-assets.d.ts +2 -1
  64. package/dist/consumer-integration/application/policies/consumer-integration-assets.d.ts.map +1 -1
  65. package/dist/consumer-integration/application/policies/consumer-integration-assets.js +12 -5
  66. package/dist/consumer-integration/application/policies/consumer-integration-assets.js.map +1 -1
  67. package/dist/consumer-integration/application/policies/consumer-integration-prior-cohort.js +2 -2
  68. package/dist/consumer-integration/application/policies/consumer-integration-prior-cohort.js.map +1 -1
  69. package/dist/consumer-integration/application/use-cases/plan-consumer-integration.js +2 -2
  70. package/dist/consumer-integration/application/use-cases/plan-consumer-integration.js.map +1 -1
  71. package/dist/consumer-integration/composition/canonical-docs-skill-v2.d.ts +2 -0
  72. package/dist/consumer-integration/composition/canonical-docs-skill-v2.d.ts.map +1 -0
  73. package/dist/consumer-integration/composition/canonical-docs-skill-v2.js +2 -0
  74. package/dist/consumer-integration/composition/canonical-docs-skill-v2.js.map +1 -0
  75. package/dist/consumer-integration/generated/canonical-assets.d.ts +2 -1
  76. package/dist/consumer-integration/generated/canonical-assets.d.ts.map +1 -1
  77. package/dist/consumer-integration/generated/canonical-assets.js +2 -1
  78. package/dist/consumer-integration/generated/canonical-assets.js.map +1 -1
  79. package/dist/domain/model-v2.d.ts +170 -0
  80. package/dist/domain/model-v2.d.ts.map +1 -0
  81. package/dist/domain/model-v2.js +2 -0
  82. package/dist/domain/model-v2.js.map +1 -0
  83. package/dist/domain/model.d.ts +1 -99
  84. package/dist/domain/model.d.ts.map +1 -1
  85. package/dist/domain/model.js.map +1 -1
  86. package/dist/domain/profile-policy.d.ts +2 -1
  87. package/dist/domain/profile-policy.d.ts.map +1 -1
  88. package/dist/domain/profile-policy.js +20 -12
  89. package/dist/domain/profile-policy.js.map +1 -1
  90. package/dist/index.d.ts +4 -2
  91. package/dist/index.d.ts.map +1 -1
  92. package/dist/index.js +3 -2
  93. package/dist/index.js.map +1 -1
  94. package/dist/qualification/filesystem-evidence.d.ts +15 -0
  95. package/dist/qualification/filesystem-evidence.d.ts.map +1 -0
  96. package/dist/qualification/filesystem-evidence.js +325 -0
  97. package/dist/qualification/filesystem-evidence.js.map +1 -0
  98. package/dist/qualification/index.d.ts +3 -0
  99. package/dist/qualification/index.d.ts.map +1 -1
  100. package/dist/qualification/index.js +12 -326
  101. package/dist/qualification/index.js.map +1 -1
  102. package/dist/qualification/qualification-runtime.d.ts +58 -0
  103. package/dist/qualification/qualification-runtime.d.ts.map +1 -0
  104. package/dist/qualification/qualification-runtime.js +160 -0
  105. package/dist/qualification/qualification-runtime.js.map +1 -0
  106. package/dist/qualification/qualification-v2-runner.d.ts +4 -0
  107. package/dist/qualification/qualification-v2-runner.d.ts.map +1 -0
  108. package/dist/qualification/qualification-v2-runner.js +306 -0
  109. package/dist/qualification/qualification-v2-runner.js.map +1 -0
  110. package/dist/qualification/v2-contract.d.ts +91 -0
  111. package/dist/qualification/v2-contract.d.ts.map +1 -0
  112. package/dist/qualification/v2-contract.js +2 -0
  113. package/dist/qualification/v2-contract.js.map +1 -0
  114. package/package.json +7 -2
  115. package/schemas/docs-consumer-integration-profile/v2.schema.json +283 -0
  116. package/schemas/docs-protocol-command-envelope/v2.schema.json +285 -0
  117. package/schemas/docs-protocol-profile/v2.schema.json +46 -0
  118. package/schemas/docs-protocol-qualification/v2.schema.json +78 -0
  119. package/schemas/docs-protocol-qualification-receipt/v2.schema.json +113 -0
  120. package/skills/docs/SKILL.md +3 -2
@@ -1,119 +1,9 @@
1
- import { createHash, randomUUID } from "node:crypto";
2
- import { constants } from "node:fs";
3
- import { cp, lstat, mkdir, mkdtemp, open, opendir, readFile, realpath, rename, rm, symlink, writeFile } from "node:fs/promises";
1
+ import { cp, lstat, mkdtemp, realpath, rm } from "node:fs/promises";
4
2
  import { tmpdir } from "node:os";
5
- import { basename, dirname, join, relative, resolve as resolvePath, sep } from "node:path";
6
- import { fileURLToPath } from "node:url";
7
- import { planDocumentationDocumentV2 } from "@agent-teams/engineering-foundation/document-authoring";
8
- import { DocsProtocol } from "../application/docs-protocol.js";
9
- import { NodeDocsAdoptionInspector } from "../adapters/node-adoption-inspector.js";
10
- import { NodeCodeAnchorMatcher } from "../adapters/node-code-anchor-matcher.js";
11
- import { NodeFoundationDocsPort } from "../adapters/foundation-docs-port.js";
12
- import { NodeDocsProfileReader } from "../adapters/node-profile-reader.js";
13
- import { normalizeCodeAnchors, normalizeDocumentIds } from "../domain/document-semantics.js";
14
- import { crashAtDurablePublishing } from "./crash-driver.js";
15
- async function treeEntries(root) {
16
- const entries = [];
17
- async function visit(directory) {
18
- const handle = await opendir(directory);
19
- for await (const entry of handle) {
20
- const absolute = join(directory, entry.name);
21
- const repositoryPath = relative(root, absolute).split(sep).join("/");
22
- if (repositoryPath === "node_modules") {
23
- continue;
24
- }
25
- if (entry.isSymbolicLink()) {
26
- throw new Error(`Qualification fixtures cannot contain symlinks: ${repositoryPath}`);
27
- }
28
- if (entry.isDirectory()) {
29
- entries.push({ kind: "directory", path: repositoryPath });
30
- await visit(absolute);
31
- }
32
- else if (entry.isFile()) {
33
- entries.push({ kind: "file", path: repositoryPath });
34
- }
35
- else {
36
- throw new Error(`Qualification fixtures must contain only directories and regular files: ${repositoryPath}`);
37
- }
38
- }
39
- }
40
- await visit(root);
41
- return Object.freeze(entries.toSorted((left, right) => Buffer.compare(Buffer.from(`${left.kind}\0${left.path}`), Buffer.from(`${right.kind}\0${right.path}`))));
42
- }
43
- async function bootstrapQualificationInstallation(consumerRoot) {
44
- const docsManifestPath = fileURLToPath(new URL("../../package.json", import.meta.url));
45
- const foundationManifestPath = fileURLToPath(import.meta.resolve("@agent-teams/engineering-foundation/package.json"));
46
- const [docsManifest, foundationManifest, consumerManifest] = await Promise.all([
47
- readFile(docsManifestPath, "utf8").then((source) => JSON.parse(source)),
48
- readFile(foundationManifestPath, "utf8").then((source) => JSON.parse(source)),
49
- readFile(join(consumerRoot, "package.json"), "utf8").then((source) => JSON.parse(source))
50
- ]);
51
- await writeFile(join(consumerRoot, "package.json"), `${JSON.stringify({
52
- ...consumerManifest,
53
- devDependencies: {
54
- "@agent-teams/docs-protocol": docsManifest.version,
55
- "@agent-teams/engineering-foundation": foundationManifest.version
56
- }
57
- }, null, 2)}\n`, "utf8");
58
- const scope = join(consumerRoot, "node_modules", "@agent-teams");
59
- await mkdir(scope, { recursive: true });
60
- await Promise.all([
61
- symlink(dirname(docsManifestPath), join(scope, "docs-protocol"), process.platform === "win32" ? "junction" : "dir"),
62
- symlink(dirname(foundationManifestPath), join(scope, "engineering-foundation"), process.platform === "win32" ? "junction" : "dir")
63
- ]);
64
- await writeFile(join(consumerRoot, ".agent-teams-document-authoring-qualification-fixture.json"), `${JSON.stringify({
65
- schemaVersion: 1,
66
- kind: "agent-teams-document-authoring-qualification-fixture",
67
- consumerRoot: await realpath(consumerRoot)
68
- })}\n`, "utf8");
69
- }
70
- async function snapshot(root) {
71
- const hash = createHash("sha256");
72
- for (const entry of await treeEntries(root)) {
73
- hash.update(entry.kind);
74
- hash.update("\0");
75
- hash.update(entry.path);
76
- hash.update("\0");
77
- if (entry.kind === "file") {
78
- hash.update(await readFile(join(root, entry.path)));
79
- hash.update("\0");
80
- }
81
- }
82
- return `sha256:${hash.digest("hex")}`;
83
- }
84
- async function fileSnapshot(root) {
85
- const result = new Map();
86
- for (const entry of await treeEntries(root)) {
87
- const key = `${entry.kind}:${entry.path}`;
88
- result.set(key, entry.kind === "directory"
89
- ? "directory"
90
- : `sha256:${createHash("sha256").update(await readFile(join(root, entry.path))).digest("hex")}`);
91
- }
92
- return result;
93
- }
94
- function changedPaths(before, after) {
95
- return Object.freeze([...new Set([...before.keys(), ...after.keys()])]
96
- .filter((path) => before.get(path) !== after.get(path))
97
- .toSorted((left, right) => Buffer.compare(Buffer.from(left), Buffer.from(right))));
98
- }
99
- function requireSuccess(label, execution) {
100
- if (execution.exitCode !== 0) {
101
- throw new Error(`Docs Protocol qualification ${label} failed with exit code ${execution.exitCode}.`);
102
- }
103
- }
104
- function documentResult(execution) {
105
- requireSuccess("document", execution);
106
- const result = execution.envelope.result;
107
- if (typeof result["documentPath"] !== "string" || typeof result["planDigest"] !== "string" || !("reachability" in result)) {
108
- throw new Error("Docs Protocol qualification expected a successful document result.");
109
- }
110
- return {
111
- documentPath: result["documentPath"],
112
- planDigest: result["planDigest"],
113
- ...(typeof result["receiptDigest"] === "string" ? { receiptDigest: result["receiptDigest"] } : {}),
114
- reachability: result["reachability"]
115
- };
116
- }
3
+ import { dirname, join, relative, resolve as resolvePath, sep } from "node:path";
4
+ import { applyReachability, changedPaths, fileSnapshot, snapshot } from "./filesystem-evidence.js";
5
+ import { bootstrapQualificationInstallation, createProtocol, documentResult, interruptAndRecover, requireSuccess } from "./qualification-runtime.js";
6
+ export { runDocsProtocolQualificationV2 } from "./qualification-v2-runner.js";
117
7
  async function parentState(root, documentPath) {
118
8
  const repositoryParent = dirname(documentPath);
119
9
  const absolute = resolvePath(root, repositoryParent);
@@ -135,207 +25,6 @@ async function parentState(root, documentPath) {
135
25
  throw error;
136
26
  }
137
27
  }
138
- const MAX_REACHABILITY_INDEX_BYTES = 8 * 1024 * 1024;
139
- function sameFileObservation(left, right) {
140
- return left.dev === right.dev && left.ino === right.ino && left.mtimeNs === right.mtimeNs && left.size === right.size;
141
- }
142
- async function readAtMost(handle, maximumBytes) {
143
- const chunks = [];
144
- let total = 0;
145
- while (total <= maximumBytes) {
146
- const remaining = maximumBytes + 1 - total;
147
- const chunk = Buffer.allocUnsafe(Math.min(64 * 1024, remaining));
148
- const { bytesRead } = await handle.read(chunk, 0, chunk.byteLength, null);
149
- if (bytesRead === 0) {
150
- return Buffer.concat(chunks, total);
151
- }
152
- chunks.push(chunk.subarray(0, bytesRead));
153
- total += bytesRead;
154
- }
155
- return undefined;
156
- }
157
- async function verifyCurrentRegularFile(path, expected) {
158
- const noFollow = process.platform === "win32" ? 0 : constants.O_NOFOLLOW;
159
- const handle = await open(path, constants.O_RDONLY | noFollow);
160
- try {
161
- const metadata = await handle.stat({ bigint: true });
162
- if (!metadata.isFile() || metadata.dev !== expected.dev || metadata.ino !== expected.ino) {
163
- throw new Error("Qualification reachability index identity changed before atomic publication.");
164
- }
165
- }
166
- finally {
167
- await handle.close();
168
- }
169
- }
170
- async function verifyPublishedFile(path, expected) {
171
- const noFollow = process.platform === "win32" ? 0 : constants.O_NOFOLLOW;
172
- const handle = await open(path, constants.O_RDONLY | noFollow);
173
- try {
174
- const before = await handle.stat({ bigint: true });
175
- const bytes = await readAtMost(handle, MAX_REACHABILITY_INDEX_BYTES);
176
- const after = await handle.stat({ bigint: true });
177
- if (!before.isFile() || bytes === undefined || !sameFileObservation(before, after) || !bytes.equals(expected)) {
178
- throw new Error("Qualification reachability index atomic publication could not be verified.");
179
- }
180
- }
181
- finally {
182
- await handle.close();
183
- }
184
- }
185
- async function syncDirectory(path) {
186
- try {
187
- const handle = await open(path, "r");
188
- try {
189
- await handle.sync();
190
- }
191
- finally {
192
- await handle.close();
193
- }
194
- }
195
- catch (error) {
196
- const code = error.code;
197
- if (process.platform !== "win32" || !["EACCES", "EINVAL", "EISDIR", "EPERM"].includes(code ?? "")) {
198
- throw error;
199
- }
200
- }
201
- }
202
- function createProtocol() {
203
- return new DocsProtocol({
204
- adoption: new NodeDocsAdoptionInspector(),
205
- anchors: new NodeCodeAnchorMatcher(),
206
- foundation: new NodeFoundationDocsPort(),
207
- profiles: new NodeDocsProfileReader()
208
- });
209
- }
210
- async function applyReachability(root, reachability) {
211
- const action = reachability;
212
- if (action["state"] === "not-required") {
213
- return;
214
- }
215
- if (action["state"] !== "manual-required" || typeof action["indexPath"] !== "string" || typeof action["markdownLink"] !== "string") {
216
- throw new Error("Qualification apply did not emit one explicit reachability action.");
217
- }
218
- const indexPath = resolvePath(root, action["indexPath"]);
219
- const physicalRoot = await realpath(root);
220
- const noFollow = process.platform === "win32" ? 0 : constants.O_NOFOLLOW;
221
- const nonBlocking = process.platform === "win32" ? 0 : constants.O_NONBLOCK;
222
- const sourceHandle = await open(indexPath, constants.O_RDONLY | noFollow | nonBlocking);
223
- let source;
224
- let identity;
225
- let mode;
226
- try {
227
- const before = await sourceHandle.stat({ bigint: true });
228
- if (!before.isFile() || before.size > BigInt(MAX_REACHABILITY_INDEX_BYTES)) {
229
- throw new Error("Qualification reachability index is not a bounded regular file.");
230
- }
231
- const physicalIndex = await realpath(indexPath);
232
- const pathFromRoot = relative(physicalRoot, physicalIndex);
233
- if (pathFromRoot === ".." || pathFromRoot.startsWith(`..${sep}`) || physicalIndex !== indexPath) {
234
- throw new Error("Qualification reachability index is not a contained regular file without symlinks.");
235
- }
236
- await verifyCurrentRegularFile(physicalIndex, before);
237
- const bytes = await readAtMost(sourceHandle, MAX_REACHABILITY_INDEX_BYTES);
238
- const after = await sourceHandle.stat({ bigint: true });
239
- if (bytes === undefined || !sameFileObservation(before, after) || after.size !== BigInt(bytes.byteLength)) {
240
- throw new Error("Qualification reachability index changed during its bounded read.");
241
- }
242
- source = new TextDecoder("utf-8", { fatal: true }).decode(bytes);
243
- identity = { dev: after.dev, ino: after.ino };
244
- mode = Number(after.mode & 511n);
245
- }
246
- finally {
247
- await sourceHandle.close();
248
- }
249
- const next = Buffer.from(`${source.replace(/\n?$/u, "\n")}- ${action["markdownLink"]}\n`);
250
- if (next.byteLength > MAX_REACHABILITY_INDEX_BYTES) {
251
- throw new Error("Qualification reachability index update exceeds its bounded size.");
252
- }
253
- const parent = dirname(indexPath);
254
- const temporary = join(parent, `.${basename(indexPath)}.docs-protocol-${randomUUID()}.tmp`);
255
- let temporaryExists = false;
256
- try {
257
- const temporaryHandle = await open(temporary, "wx", mode);
258
- temporaryExists = true;
259
- try {
260
- await temporaryHandle.writeFile(next);
261
- await temporaryHandle.chmod(mode);
262
- await temporaryHandle.sync();
263
- }
264
- finally {
265
- await temporaryHandle.close();
266
- }
267
- await verifyCurrentRegularFile(indexPath, identity);
268
- await rename(temporary, indexPath);
269
- temporaryExists = false;
270
- await verifyPublishedFile(indexPath, next);
271
- await syncDirectory(parent);
272
- }
273
- finally {
274
- if (temporaryExists) {
275
- await rm(temporary, { force: true });
276
- }
277
- }
278
- }
279
- function qualificationMetadata(base, blockedBy, codeAnchors) {
280
- return {
281
- ...base.additionalMetadata,
282
- ...(blockedBy.length === 0 ? {} : { blocked_by: blockedBy }),
283
- ...(codeAnchors.length === 0
284
- ? {}
285
- : { code_anchors: codeAnchors.map(({ enforcement, pattern }) => ({ enforcement, pattern })) })
286
- };
287
- }
288
- function signalOption(signal) {
289
- return signal === undefined ? {} : { signal };
290
- }
291
- async function interruptAndRecover(input) {
292
- const profile = await new NodeDocsProfileReader().read({
293
- consumerRoot: input.consumerRoot,
294
- profilePath: input.profilePath,
295
- ...signalOption(input.base.signal)
296
- });
297
- const blockedBy = normalizeDocumentIds(input.base.blockedBy ?? [], "blocked_by");
298
- const related = normalizeDocumentIds([...(input.base.related ?? []), ...blockedBy], "related");
299
- const codeAnchors = normalizeCodeAnchors(input.base.codeAnchors ?? []);
300
- const additionalMetadata = qualificationMetadata(input.base, blockedBy, codeAnchors);
301
- const crashPlan = await planDocumentationDocumentV2({
302
- consumerRoot: input.consumerRoot,
303
- profilePath: profile.foundationProfile.path,
304
- parentPolicy: "create-missing-real-directories",
305
- intent: {
306
- schemaVersion: 1,
307
- ...input.base.intent,
308
- ...(related.length === 0 ? {} : { related }),
309
- ...(Object.keys(additionalMetadata).length === 0 ? {} : { additionalMetadata })
310
- },
311
- ...signalOption(input.base.signal)
312
- });
313
- if (crashPlan.destination !== input.previewResult.documentPath || crashPlan.planDigest !== input.previewResult.planDigest) {
314
- throw new Error("Qualification crash Plan differs from the unified Docs Protocol preview.");
315
- }
316
- await crashAtDurablePublishing(input.consumerRoot, crashPlan, input.base.signal);
317
- const interruptedDoctor = await input.protocol.doctor({
318
- consumerRoot: input.consumerRoot,
319
- profilePath: input.profilePath,
320
- ...signalOption(input.base.signal)
321
- });
322
- if (interruptedDoctor.exitCode !== 1 || interruptedDoctor.envelope.outcome !== "recovery-required" ||
323
- interruptedDoctor.envelope.result.transaction.state !== "recoverable") {
324
- throw new Error("Qualification doctor did not observe its genuine interrupted transaction.");
325
- }
326
- const recovered = await input.protocol.recover({
327
- consumerRoot: input.consumerRoot,
328
- profilePath: input.profilePath,
329
- ...signalOption(input.base.signal)
330
- });
331
- requireSuccess("recover", recovered);
332
- if (recovered.envelope.result.transactionState !== "recovered" || recovered.envelope.result.writeState !== "committed" ||
333
- typeof recovered.envelope.result.receiptDigest !== "string" || recovered.envelope.result.receipt.outcome !== "applied" ||
334
- recovered.envelope.result.receipt.commit.state !== "committed" || recovered.envelope.result.receipt.commit.publication !== "published") {
335
- throw new Error("Qualification recovery did not return truthful committed Receipt evidence.");
336
- }
337
- return recovered.envelope.result;
338
- }
339
28
  export async function runDocsProtocolQualification(request) {
340
29
  const sourceRoot = await realpath(resolvePath(request.fixtureRoot));
341
30
  const before = await snapshot(sourceRoot);
@@ -345,11 +34,11 @@ export async function runDocsProtocolQualification(request) {
345
34
  try {
346
35
  request.signal?.throwIfAborted();
347
36
  await cp(sourceRoot, consumerRoot, { recursive: true, errorOnExist: true, force: false, dereference: false });
348
- await bootstrapQualificationInstallation(consumerRoot);
37
+ await bootstrapQualificationInstallation(consumerRoot, true);
349
38
  const protocol = createProtocol();
350
- const info = await protocol.info({ consumerRoot, profilePath, ...(request.signal === undefined ? {} : { signal: request.signal }) });
39
+ const info = await protocol.infoV2({ consumerRoot, profilePath, ...(request.signal === undefined ? {} : { signal: request.signal }) });
351
40
  requireSuccess("info", info);
352
- const find = await protocol.find({ consumerRoot, profilePath, query: request.scenario.find.query, ...(request.signal === undefined ? {} : { signal: request.signal }) });
41
+ const find = await protocol.findV2({ consumerRoot, profilePath, query: request.scenario.find.query, ...(request.signal === undefined ? {} : { signal: request.signal }) });
353
42
  requireSuccess("find", find);
354
43
  const ids = find.envelope.result.documents.map(({ id }) => id);
355
44
  if (JSON.stringify(ids) !== JSON.stringify(request.scenario.find.expectedIds)) {
@@ -357,7 +46,7 @@ export async function runDocsProtocolQualification(request) {
357
46
  }
358
47
  const base = { ...request.scenario.newDocument, consumerRoot, profilePath, ...(request.signal === undefined ? {} : { signal: request.signal }) };
359
48
  const beforePreview = await fileSnapshot(consumerRoot);
360
- const preview = await protocol.newDocument({ ...base, apply: false });
49
+ const preview = await protocol.newDocumentV2({ ...base, apply: false });
361
50
  requireSuccess("preview", preview);
362
51
  if (changedPaths(beforePreview, await fileSnapshot(consumerRoot)).length !== 0) {
363
52
  throw new Error("Preview mutated its owned disposable consumer.");
@@ -365,10 +54,7 @@ export async function runDocsProtocolQualification(request) {
365
54
  const previewResult = documentResult(preview);
366
55
  const parentBeforeApply = await parentState(consumerRoot, previewResult.documentPath);
367
56
  const recovered = await interruptAndRecover({ base, consumerRoot, previewResult, profilePath, protocol });
368
- const appliedResult = {
369
- ...previewResult,
370
- receiptDigest: recovered.receiptDigest
371
- };
57
+ const appliedResult = { ...previewResult, receiptDigest: recovered.receiptDigest };
372
58
  const applyChanges = changedPaths(beforePreview, await fileSnapshot(consumerRoot));
373
59
  const expectedDirectories = new Set(recovered.receipt.directoryMaterialization?.observedCreatedDirectories ?? []);
374
60
  const unexpectedApplyChanges = applyChanges.filter((entry) => {
@@ -390,11 +76,11 @@ export async function runDocsProtocolQualification(request) {
390
76
  throw new Error("Missing-parent qualification recovery did not truthfully report retained Plan v2 materialization.");
391
77
  }
392
78
  await applyReachability(consumerRoot, appliedResult.reachability);
393
- const check = await protocol.check({ consumerRoot, profilePath, ...(request.signal === undefined ? {} : { signal: request.signal }) });
79
+ const check = await protocol.checkV2({ consumerRoot, profilePath, ...(request.signal === undefined ? {} : { signal: request.signal }) });
394
80
  if (check.exitCode !== 0) {
395
81
  throw new Error(`Docs Protocol qualification check failed: ${JSON.stringify(check.envelope)}.`);
396
82
  }
397
- const doctor = await protocol.doctor({ consumerRoot, profilePath, ...(request.signal === undefined ? {} : { signal: request.signal }) });
83
+ const doctor = await protocol.doctorV2({ consumerRoot, profilePath, ...(request.signal === undefined ? {} : { signal: request.signal }) });
398
84
  requireSuccess("doctor", doctor);
399
85
  if (await snapshot(sourceRoot) !== before) {
400
86
  throw new Error("Qualification modified its source fixture.");
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/qualification/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/qualification/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import { DocsProtocol } from "../application/docs-protocol.js";
2
+ import type { DocsNewRequest } from "../domain/model.js";
3
+ export declare function digest(value: Uint8Array | string): `sha256:${string}`;
4
+ export declare function readContainedBoundedFile(root: string, repositoryPath: string, label: string, maximumBytes?: number): Promise<{
5
+ readonly bytes: Buffer;
6
+ readonly digest: `sha256:${string}`;
7
+ readonly path: string;
8
+ }>;
9
+ export declare function bootstrapQualificationInstallation(consumerRoot: string, rewriteManifest: boolean): Promise<{
10
+ readonly docsVersion: string;
11
+ readonly foundationVersion: string;
12
+ }>;
13
+ export declare function requireSuccess(label: string, execution: {
14
+ readonly envelope?: unknown;
15
+ readonly exitCode: number;
16
+ }): void;
17
+ export declare function documentResult(execution: {
18
+ readonly envelope: {
19
+ readonly result: unknown;
20
+ };
21
+ readonly exitCode: number;
22
+ }): {
23
+ readonly documentPath: string;
24
+ readonly planDigest: string;
25
+ readonly compiled?: {
26
+ readonly document?: {
27
+ readonly content?: string;
28
+ readonly digest?: string;
29
+ };
30
+ };
31
+ readonly receiptDigest?: string;
32
+ readonly reachability: unknown;
33
+ };
34
+ export declare function createProtocol(): DocsProtocol;
35
+ export declare function signalOption(signal: AbortSignal | undefined): {
36
+ readonly signal?: AbortSignal;
37
+ };
38
+ export declare function interruptAndRecover(input: {
39
+ readonly base: Omit<DocsNewRequest, "apply">;
40
+ readonly consumerRoot: string;
41
+ readonly previewResult: ReturnType<typeof documentResult>;
42
+ readonly profilePath: string;
43
+ readonly protocol: DocsProtocol;
44
+ }): Promise<{
45
+ readonly receiptDigest: string;
46
+ readonly receipt: {
47
+ readonly commit: {
48
+ readonly publication: "published";
49
+ readonly state: "committed";
50
+ };
51
+ readonly directoryMaterialization?: {
52
+ readonly observedCreatedDirectories: readonly string[];
53
+ readonly state: string;
54
+ };
55
+ readonly outcome: "applied";
56
+ };
57
+ }>;
58
+ //# sourceMappingURL=qualification-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qualification-runtime.d.ts","sourceRoot":"","sources":["../../src/qualification/qualification-runtime.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAE/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAKzD,wBAAgB,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,GAAG,UAAU,MAAM,EAAE,CAErE;AAED,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,MAAM,EACb,YAAY,SAAoC,GAC/C,OAAO,CAAC;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAsBjG;AAED,wBAAsB,kCAAkC,CAAC,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,GAAG,OAAO,CAAC;IAChH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;CACpC,CAAC,CAgCD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE;IAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAIzH;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE;IAAE,QAAQ,CAAC,QAAQ,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG;IACzH,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE;YAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC;IACpG,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;CAChC,CAaA;AAED,wBAAgB,cAAc,IAAI,YAAY,CAO7C;AAgBD,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG;IAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAE,CAE/F;AAED,wBAAsB,mBAAmB,CAAC,KAAK,EAAE;IAC/C,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IAC7C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;IAC1D,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;CACjC,GAAG,OAAO,CAAC;IACV,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,MAAM,EAAE;YAAE,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;YAAC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAA;SAAE,CAAC;QACpF,QAAQ,CAAC,wBAAwB,CAAC,EAAE;YAClC,QAAQ,CAAC,0BAA0B,EAAE,SAAS,MAAM,EAAE,CAAC;YACvD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;SACxB,CAAC;QACF,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;KAC7B,CAAC;CACH,CAAC,CAsDD"}