@tacuchi/agent-workflow-cli 20.25.0 → 21.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 (124) hide show
  1. package/README.md +1 -1
  2. package/dist/adapters/node-file-system.js +3 -0
  3. package/dist/adapters/node-file-system.js.map +1 -1
  4. package/dist/application/design/design-gate-service.js +246 -0
  5. package/dist/application/design/design-gate-service.js.map +1 -0
  6. package/dist/application/design/design-graph-service.js +85 -0
  7. package/dist/application/design/design-graph-service.js.map +1 -0
  8. package/dist/application/design/design-index-service.js +132 -0
  9. package/dist/application/design/design-index-service.js.map +1 -0
  10. package/dist/application/design/design-publish-service.js +488 -0
  11. package/dist/application/design/design-publish-service.js.map +1 -0
  12. package/dist/application/design/design-resolver-service.js +165 -0
  13. package/dist/application/design/design-resolver-service.js.map +1 -0
  14. package/dist/application/resume-service.js +23 -4
  15. package/dist/application/resume-service.js.map +1 -1
  16. package/dist/application/self/install-skill.js +25 -8
  17. package/dist/application/self/install-skill.js.map +1 -1
  18. package/dist/application/semantic-operation/protocol.js +18 -12
  19. package/dist/application/semantic-operation/protocol.js.map +1 -1
  20. package/dist/application/semantic-operation/publish.js +56 -9
  21. package/dist/application/semantic-operation/publish.js.map +1 -1
  22. package/dist/application/skills-resolver-service.js +19 -4
  23. package/dist/application/skills-resolver-service.js.map +1 -1
  24. package/dist/application/status-service.js +1 -0
  25. package/dist/application/status-service.js.map +1 -1
  26. package/dist/application/workline-index-service.js +6 -0
  27. package/dist/application/workline-index-service.js.map +1 -1
  28. package/dist/application/workspace-init-service.js +9 -1
  29. package/dist/application/workspace-init-service.js.map +1 -1
  30. package/dist/cli/commands/designs.js +110 -0
  31. package/dist/cli/commands/designs.js.map +1 -0
  32. package/dist/cli/commands/index.js +2 -0
  33. package/dist/cli/commands/index.js.map +1 -1
  34. package/dist/cli/commands/resume.js +8 -0
  35. package/dist/cli/commands/resume.js.map +1 -1
  36. package/dist/cli/commands/status.js +45 -0
  37. package/dist/cli/commands/status.js.map +1 -1
  38. package/dist/cli/help-groups.js +3 -0
  39. package/dist/cli/help-groups.js.map +1 -1
  40. package/dist/cli/parser.js +1 -0
  41. package/dist/cli/parser.js.map +1 -1
  42. package/dist/domain/design/artifact-body.js +223 -0
  43. package/dist/domain/design/artifact-body.js.map +1 -0
  44. package/dist/domain/design/artifact.js +606 -0
  45. package/dist/domain/design/artifact.js.map +1 -0
  46. package/dist/domain/design/baseline.js +359 -0
  47. package/dist/domain/design/baseline.js.map +1 -0
  48. package/dist/domain/design/capability.js +51 -0
  49. package/dist/domain/design/capability.js.map +1 -0
  50. package/dist/domain/design/closure.js +161 -0
  51. package/dist/domain/design/closure.js.map +1 -0
  52. package/dist/domain/design/governance.js +298 -0
  53. package/dist/domain/design/governance.js.map +1 -0
  54. package/dist/domain/design/identity.js +145 -0
  55. package/dist/domain/design/identity.js.map +1 -0
  56. package/dist/domain/design/manifest.js +552 -0
  57. package/dist/domain/design/manifest.js.map +1 -0
  58. package/dist/domain/design/maturity.js +234 -0
  59. package/dist/domain/design/maturity.js.map +1 -0
  60. package/dist/domain/design/naming.js +117 -0
  61. package/dist/domain/design/naming.js.map +1 -0
  62. package/dist/domain/design/projections.js +165 -0
  63. package/dist/domain/design/projections.js.map +1 -0
  64. package/dist/domain/design/reference.js +234 -0
  65. package/dist/domain/design/reference.js.map +1 -0
  66. package/dist/domain/design/retired.js +61 -0
  67. package/dist/domain/design/retired.js.map +1 -0
  68. package/dist/domain/design/revision.js +219 -0
  69. package/dist/domain/design/revision.js.map +1 -0
  70. package/dist/domain/design/secrets.js +86 -0
  71. package/dist/domain/design/secrets.js.map +1 -0
  72. package/dist/domain/design/validation.js +75 -0
  73. package/dist/domain/design/validation.js.map +1 -0
  74. package/dist/domain/design/yaml-subset.js +390 -0
  75. package/dist/domain/design/yaml-subset.js.map +1 -0
  76. package/dist/domain/safe-path.js +23 -0
  77. package/dist/domain/safe-path.js.map +1 -0
  78. package/dist/domain/skills.js +27 -3
  79. package/dist/domain/skills.js.map +1 -1
  80. package/package.json +1 -1
  81. package/skills/w/SKILL.md +13 -11
  82. package/skills/w/artifacts/README.md +3 -4
  83. package/skills/w/artifacts/artifacts-core/CHECKPOINT.md +2 -2
  84. package/skills/w/commands/README.md +2 -0
  85. package/skills/w/commands/export-diagrams.md +1 -1
  86. package/skills/w/commands/export-manuals.md +1 -1
  87. package/skills/w/commands/export-reports.md +1 -1
  88. package/skills/w/commands/export-scripts.md +1 -1
  89. package/skills/w/commands/fix-git.md +1 -1
  90. package/skills/w/commands/generate-launch.md +2 -2
  91. package/skills/w/commands/persist.md +2 -2
  92. package/skills/w/commands/plan-exec.md +13 -7
  93. package/skills/w/commands/plan-new.md +8 -4
  94. package/skills/w/commands/plan-refine.md +8 -5
  95. package/skills/w/commands/quick.md +4 -4
  96. package/skills/w/commands/resume.md +2 -2
  97. package/skills/w/commands/spec-new.md +4 -4
  98. package/skills/w/commands/spec-refine.md +3 -2
  99. package/skills/w/commands/status.md +1 -1
  100. package/skills/w/commands/workspace-init.md +1 -1
  101. package/skills/w/context/MANIFEST.json +19 -8
  102. package/skills/w/harness/HARNESS.md +14 -10
  103. package/skills/w/loops/CHASSIS.md +9 -8
  104. package/skills/w/loops/CODE-POLICIES.md +22 -7
  105. package/skills/w/loops/README.md +1 -1
  106. package/skills/w/loops/plan-exec-loop/LOOP.md +127 -61
  107. package/skills/w/loops/plan-new-loop/LOOP.md +66 -70
  108. package/skills/w/loops/plan-refine-loop/LOOP.md +15 -7
  109. package/skills/w/loops/spec-refine-loop/LOOP.md +14 -12
  110. package/skills/w/modules/DESIGN-REFERENCES.md +109 -0
  111. package/skills/w/modules/PERSIST-ROUTING.md +1 -0
  112. package/skills/w/modules/PLAN-EXECUTION-BATCHES.md +84 -0
  113. package/skills/w/roles/README.md +7 -5
  114. package/skills/w/roles/design/ROLE.md +217 -0
  115. package/skills/w/schemas/design/design-baseline.v1.schema.json +71 -0
  116. package/skills/w/schemas/design/design-manifest.v1.schema.json +322 -0
  117. package/skills/w/schemas/design/design-review.v1.schema.json +72 -0
  118. package/skills/w/schemas/design/design-revocation.v1.schema.json +54 -0
  119. package/skills/w/schemas/design/ui-flow.v1.schema.json +211 -0
  120. package/skills/w/schemas/design/ui-screen.v1.schema.json +214 -0
  121. package/skills/w/artifacts/artifacts-design/SPEC.md +0 -42
  122. package/skills/w/modules/PLAN-DESIGN-SPECS.md +0 -12
  123. package/skills/w/modules/PLAN-REFINE-DESIGN-SPECS.md +0 -7
  124. package/skills/w/roles/ui-spec/ROLE.md +0 -147
@@ -0,0 +1,488 @@
1
+ import { createHash } from "node:crypto";
2
+ import { join } from "node:path";
3
+ import { validateDesignArtifact } from "../../domain/design/artifact.js";
4
+ import { DESIGN_BASELINE_SCHEMA_ID, checkBaselineAuthority, computeBaselineDigest, validateDesignBaseline, } from "../../domain/design/baseline.js";
5
+ import { ARTIFACT_PREFIX, parseArtifactId } from "../../domain/design/identity.js";
6
+ import { validateDesignManifest } from "../../domain/design/manifest.js";
7
+ import { gateDesignDocument } from "../../domain/design/maturity.js";
8
+ import { NAMING, baselinePath, checkNaming } from "../../domain/design/naming.js";
9
+ import { currentRevisions, renderDesignMd, renderPackageMd, } from "../../domain/design/projections.js";
10
+ import { KIND_LIST } from "../../domain/design/revision.js";
11
+ import { checkSafeRelativePath } from "../../domain/safe-path.js";
12
+ import { publishArtifacts } from "../semantic-operation/publish.js";
13
+ import { readDesignIndex } from "./design-index-service.js";
14
+ export async function publishDesignRevision(fs, workspace, input) {
15
+ const unsafe = [...input.files, ...(input.documents ?? [])].flatMap((f) => pathFailure(f.path));
16
+ if (unsafe.length > 0)
17
+ return { ok: false, failures: unsafe };
18
+ const index = await readDesignIndex(fs, workspace);
19
+ const located = locate(index, input.packageId);
20
+ if ("failures" in located)
21
+ return { ok: false, failures: located.failures };
22
+ const { manifest, packagePath } = located;
23
+ const current = manifest.current_baseline;
24
+ const actual = current === null ? null : `${manifest.id}@r${current.revision}`;
25
+ if (input.expectedBase !== actual) {
26
+ return {
27
+ ok: false,
28
+ failures: [
29
+ {
30
+ code: "DESIGN_BASE_STALE",
31
+ artifact: `${packagePath}/design-manifest.json`,
32
+ message: `preparaste sobre ${input.expectedBase ?? "ninguna revisión"} y la vigente es ${actual ?? "ninguna"}`,
33
+ action: "alguien publicó mientras preparabas esta: releé el package y rehacé la revisión sobre la base nueva",
34
+ },
35
+ ],
36
+ };
37
+ }
38
+ const catalog = mergeCatalog(manifest, input.files);
39
+ if ("failures" in catalog)
40
+ return { ok: false, failures: catalog.failures };
41
+ const revision = (manifest.current_baseline?.revision ?? 0) + 1;
42
+ const selection = await buildSelection(fs, workspace, packagePath, catalog.value, input.files);
43
+ if ("failures" in selection)
44
+ return { ok: false, failures: selection.failures };
45
+ const baseline = sealBaseline(manifest, revision, input.published, selection.value);
46
+ const nextManifest = nextManifestOf(manifest, catalog.value, baseline);
47
+ const failures = validateCandidate(nextManifest, baseline, packagePath);
48
+ if (failures.length > 0)
49
+ return { ok: false, failures };
50
+ const artifacts = candidateArtifacts(packagePath, nextManifest, baseline, input.files);
51
+ // The documents go LAST, after the manifest switched the package to the new
52
+ // revision: a reference is only ever visible pointing at a baseline that is
53
+ // already there. `publishArtifacts` rolls the whole batch back either way.
54
+ const published = await publishArtifacts(fs, workspace, [
55
+ ...artifacts,
56
+ ...(input.documents ?? []).map((d) => ({ ...d, overwrite: true })),
57
+ ]);
58
+ if (!published.ok)
59
+ return { ok: false, failures: [publishFailure(published.failure, packagePath)] };
60
+ return { ok: true, value: { revision, baseline, written: published.value.written } };
61
+ }
62
+ /**
63
+ * Every published path, checked at the ENTRANCE.
64
+ *
65
+ * Not inside the per-kind branches: an asset whose digest was already
66
+ * catalogued used to skip the catalog — and with it the only path check there
67
+ * was — while still being written, and `join(root, path)` normalizes `..`.
68
+ * A file escaped the workspace through the one branch that had no guard.
69
+ */
70
+ function pathFailure(path) {
71
+ const check = checkSafeRelativePath(path);
72
+ if (check.ok)
73
+ return [];
74
+ return [
75
+ {
76
+ code: "DESIGN_PATH_UNSAFE",
77
+ artifact: path,
78
+ message: `'${path}' ${check.why}`,
79
+ action: "una publicación escribe DENTRO de su package: usá una ruta relativa sin '..'",
80
+ },
81
+ ];
82
+ }
83
+ /** Last resort: a package with no manifest and no diagnosis of its own. */
84
+ function brokenManifest(packagePath) {
85
+ return {
86
+ code: "DESIGN_MANIFEST_MISSING",
87
+ artifact: `${packagePath}/design-manifest.json`,
88
+ message: "el package no tiene un manifest legible",
89
+ action: "reparalo antes de publicar sobre él",
90
+ };
91
+ }
92
+ /**
93
+ * A publication failure said in this domain's terms.
94
+ *
95
+ * The generic layer offers «confirmá la sobrescritura, o publicá en otro
96
+ * destino»: here both are ILLEGAL — overwriting a published baseline destroys
97
+ * an immutable revision, and a revision has no other destination. And the
98
+ * artifact named must be the file to fix, not the dossier it lives in.
99
+ */
100
+ function publishFailure(failure, packagePath) {
101
+ // `publishArtifacts` ya nombra la ruta relativa al workspace entre comillas.
102
+ const quoted = /'([^']+)'/.exec(failure.message);
103
+ const artifact = quoted?.[1] ?? packagePath;
104
+ if (failure.code !== "PUBLISH_TARGET_EXISTS") {
105
+ return { ...failure, artifact };
106
+ }
107
+ return {
108
+ code: "DESIGN_BASE_STALE",
109
+ artifact,
110
+ message: `'${artifact}' ya existe: alguien publicó esta revisión mientras preparabas`,
111
+ action: "releé el package y rehacé la revisión sobre la base nueva: una publicada no se reescribe",
112
+ };
113
+ }
114
+ function locate(index, packageId) {
115
+ const found = index.packages.filter((p) => p.id === packageId || p.declared_id === packageId);
116
+ if (found.length > 1) {
117
+ return {
118
+ failures: [
119
+ {
120
+ code: "DESIGN_REFERENCE_AMBIGUOUS",
121
+ artifact: index.root,
122
+ message: `${packageId} está declarado por ${found.length} packages`,
123
+ action: "dos packages no pueden reclamar la misma identidad: renombrá uno",
124
+ },
125
+ ],
126
+ };
127
+ }
128
+ const entry = found[0];
129
+ if (entry === undefined) {
130
+ return {
131
+ failures: [
132
+ {
133
+ code: "DESIGN_REFERENCE_MISSING",
134
+ artifact: index.root,
135
+ message: `no hay un package ${packageId} bajo ${index.root}/`,
136
+ action: "revisá 'aw designs': publicar exige un package existente",
137
+ },
138
+ ],
139
+ };
140
+ }
141
+ // Un package ROTO no es un package inexistente: son problemas muy distintos
142
+ // para quien tiene que arreglar uno, así que se devuelven sus fallos reales.
143
+ if (entry.manifest == null) {
144
+ return { failures: entry.failures.length > 0 ? entry.failures : [brokenManifest(entry.path)] };
145
+ }
146
+ return { manifest: entry.manifest, packagePath: entry.path };
147
+ }
148
+ /**
149
+ * The catalog this revision will have: the current one plus what it introduces.
150
+ *
151
+ * Two rules the first draft got backwards. A published document is VALIDATED
152
+ * before it is sealed — sealing bytes that do not satisfy their own contract
153
+ * makes the seal a lie. And for a flow or a screen the **frontmatter** is the
154
+ * authority for identity, revision and maturity (spec § *Canonical authority*):
155
+ * the file name must AGREE with it, never define it.
156
+ */
157
+ function mergeCatalog(manifest, files) {
158
+ const catalog = structuredClone(manifest.catalog);
159
+ const failures = [];
160
+ for (const file of files) {
161
+ if (file.path.startsWith("assets/")) {
162
+ failures.push(...addAsset(catalog, file));
163
+ continue;
164
+ }
165
+ failures.push(...addArtifact(catalog, manifest.id, file));
166
+ }
167
+ return failures.length > 0 ? { failures } : { value: catalog };
168
+ }
169
+ /** One flow, screen, rule, token or rendition into the catalog it belongs to. */
170
+ function addArtifact(catalog, packageId, file) {
171
+ const described = describeFile(file, packageId);
172
+ if ("failures" in described)
173
+ return described.failures;
174
+ const { kind, id, revision, maturity, states, supersedes } = described.value;
175
+ const list = catalog[KIND_LIST[kind]];
176
+ if (list.some((e) => e.id === id && e.revision === revision)) {
177
+ return [
178
+ {
179
+ code: "DESIGN_ID_DUPLICATE",
180
+ artifact: file.path,
181
+ message: `${id}@r${revision} ya está publicada`,
182
+ action: "una revisión publicada no se reescribe: numerá la siguiente",
183
+ },
184
+ ];
185
+ }
186
+ const previous = list.filter((e) => e.id === id).reduce((max, e) => Math.max(max, e.revision), 0);
187
+ list.push({
188
+ id,
189
+ revision,
190
+ path: file.path,
191
+ // El documento declara a quién supersede y F2 ya lo validó; acuñarlo desde
192
+ // el catálogo publicaría un manifest que contradice lo que sella.
193
+ supersedes: supersedes === undefined
194
+ ? previous === 0
195
+ ? null
196
+ : `${packageId}/${id}@r${previous}`
197
+ : supersedes,
198
+ ...(maturity === undefined ? {} : { maturity }),
199
+ ...(states === undefined ? {} : { states }),
200
+ });
201
+ return [];
202
+ }
203
+ /** An asset is content-addressed: its name has to be the digest of its bytes. */
204
+ function addAsset(catalog, file) {
205
+ const digest = digestOf(new TextEncoder().encode(file.content));
206
+ const expected = `assets/${digest.slice("sha256:".length)}-`;
207
+ if (!file.path.startsWith(expected)) {
208
+ return [
209
+ {
210
+ code: "DESIGN_FIELD_INVALID",
211
+ artifact: file.path,
212
+ message: "el nombre del asset no es el digest de su contenido",
213
+ action: `renombralo a '${expected}<nombre>.<ext>'`,
214
+ },
215
+ ];
216
+ }
217
+ const twin = catalog.assets.find((a) => a.digest === digest);
218
+ if (twin !== undefined) {
219
+ // Escribirlo sin catalogarlo dejaría bytes dentro del package que ningún
220
+ // baseline sella: un asset es su contenido, y ya tiene un nombre.
221
+ return [
222
+ {
223
+ code: "DESIGN_ID_DUPLICATE",
224
+ artifact: file.path,
225
+ message: `ese contenido ya está publicado como '${twin.path}'`,
226
+ action: "un asset se direcciona por su contenido: referenciá el que ya existe",
227
+ },
228
+ ];
229
+ }
230
+ catalog.assets.push({ digest, path: file.path });
231
+ return [];
232
+ }
233
+ /**
234
+ * What a published file IS. For a flow or a screen the frontmatter decides and
235
+ * the path must match it; for the kinds F2 gave no frontmatter contract, the
236
+ * name is the only declaration there is — and that is stated, not hidden.
237
+ */
238
+ function describeFile(file, packageId) {
239
+ const kind = kindOfPath(file.path);
240
+ if (kind === null) {
241
+ return {
242
+ failures: [
243
+ {
244
+ code: "DESIGN_FIELD_INVALID",
245
+ artifact: file.path,
246
+ message: `'${file.path}' no está en ninguna carpeta de artefactos normativos`,
247
+ action: `publicá bajo: ${[...Object.values(NAMING).map((r) => r.dir), "assets"].join(", ")}`,
248
+ },
249
+ ],
250
+ };
251
+ }
252
+ if (kind === "flow" || kind === "screen")
253
+ return describeDocument(file, packageId, kind);
254
+ const name = file.path.slice(NAMING[kind].dir.length + 1);
255
+ const parsed = /^((?:RUL|TOK|VIS)-[0-9]+)-r([0-9]{3,})-/.exec(name);
256
+ if (parsed === null) {
257
+ return {
258
+ failures: [
259
+ {
260
+ code: "DESIGN_FIELD_INVALID",
261
+ artifact: file.path,
262
+ message: `'${file.path}' no lleva su identidad y revisión en el nombre`,
263
+ action: `usá '${NAMING[kind].dir}/${ARTIFACT_PREFIX[kind]}-NNN-rNNN-<slug>${NAMING[kind].suffix}'`,
264
+ },
265
+ ],
266
+ };
267
+ }
268
+ return { value: { kind, id: parsed[1], revision: Number(parsed[2]) } };
269
+ }
270
+ /** A flow or a screen: validated, and its identity read from the frontmatter. */
271
+ function describeDocument(file, packageId, kind) {
272
+ const document = validateDesignArtifact(file.content, kind, file.path);
273
+ if (!document.ok || document.value === null)
274
+ return { failures: document.failures };
275
+ const parsed = parseArtifactId(document.value.id);
276
+ if (parsed === null || parsed.package !== packageId) {
277
+ return {
278
+ failures: [
279
+ {
280
+ code: "DESIGN_AUTHORITY_CONFLICT",
281
+ artifact: file.path,
282
+ message: `el frontmatter declara '${document.value.id}' y el package es ${packageId}`,
283
+ action: "un artefacto se publica dentro del package que declara su id",
284
+ },
285
+ ],
286
+ };
287
+ }
288
+ const naming = checkNaming(kind, file.path, parsed.artifact, document.value.revision);
289
+ if (!naming.ok) {
290
+ return {
291
+ failures: [
292
+ {
293
+ code: "DESIGN_AUTHORITY_CONFLICT",
294
+ artifact: file.path,
295
+ message: `el frontmatter declara ${parsed.artifact}@r${document.value.revision} y ${naming.why}`,
296
+ action: `el frontmatter manda: renombralo a '${naming.expected}'`,
297
+ },
298
+ ],
299
+ };
300
+ }
301
+ // La madurez que el documento RECLAMA se comprueba antes de sellarla —después
302
+ // de la identidad, porque un artefacto en el package equivocado se diagnostica
303
+ // por eso y no por su completitud.
304
+ const gate = gateDesignDocument(file.content, kind, file.path);
305
+ if (gate.failures.length > 0)
306
+ return { failures: gate.failures };
307
+ return {
308
+ value: {
309
+ kind,
310
+ id: parsed.artifact,
311
+ revision: document.value.revision,
312
+ maturity: document.value.maturity,
313
+ supersedes: document.value.supersedes,
314
+ ...(document.value.kind === "screen"
315
+ ? { states: document.value.states.map((s) => s.anchor) }
316
+ : {}),
317
+ },
318
+ };
319
+ }
320
+ /** Which artifact kind lives in the directory a path sits in. */
321
+ function kindOfPath(path) {
322
+ const kinds = Object.entries(NAMING);
323
+ const match = kinds
324
+ .sort(([, a], [, b]) => b.dir.length - a.dir.length)
325
+ .find(([, rule]) => path.startsWith(`${rule.dir}/`));
326
+ return match === undefined ? null : match[0];
327
+ }
328
+ /**
329
+ * What the revision seals: the CURRENT revision of every artifact plus every
330
+ * asset. A baseline says what the package IS at this revision, not what changed.
331
+ */
332
+ async function buildSelection(fs, workspace, packagePath, catalog, files) {
333
+ const incoming = new Map(files.map((f) => [f.path, f.content]));
334
+ const entries = [];
335
+ const failures = [];
336
+ for (const key of ["flows", "screens", "rules", "tokens", "renditions"]) {
337
+ for (const entry of currentRevisions(catalog[key])) {
338
+ const bytes = await bytesOf(fs, workspace, packagePath, entry.path, incoming);
339
+ if (bytes === null) {
340
+ failures.push(missingFile(entry.path, packagePath));
341
+ continue;
342
+ }
343
+ entries.push({ path: entry.path, revision: entry.revision, sha256: digestOf(bytes) });
344
+ }
345
+ }
346
+ for (const asset of catalog.assets) {
347
+ const bytes = await bytesOf(fs, workspace, packagePath, asset.path, incoming);
348
+ if (bytes === null) {
349
+ failures.push(missingFile(asset.path, packagePath));
350
+ continue;
351
+ }
352
+ entries.push({ path: asset.path, revision: null, sha256: digestOf(bytes) });
353
+ }
354
+ return failures.length > 0 ? { failures } : { value: entries };
355
+ }
356
+ /** Bytes of a file this revision publishes, or of one already on disk. */
357
+ async function bytesOf(fs, workspace, packagePath, path, incoming) {
358
+ const content = incoming.get(path);
359
+ if (content !== undefined)
360
+ return new TextEncoder().encode(content);
361
+ const absolute = join(workspace, packagePath, path);
362
+ if (!(await fs.exists(absolute)))
363
+ return null;
364
+ return fs.readBytes(absolute);
365
+ }
366
+ function missingFile(path, packagePath) {
367
+ return {
368
+ code: "DESIGN_REFERENCE_FILE_MISSING",
369
+ artifact: `${packagePath}/${path}`,
370
+ message: `el catálogo declara '${path}' y el archivo no está`,
371
+ action: "restauralo o quitalo del catálogo: un baseline sella bytes que existen",
372
+ };
373
+ }
374
+ function digestOf(bytes) {
375
+ return `sha256:${createHash("sha256").update(bytes).digest("hex")}`;
376
+ }
377
+ function sealBaseline(manifest, revision, published, selection) {
378
+ const current = manifest.current_baseline;
379
+ const sealed = {
380
+ // Del registro, no a mano: este es el ÚNICO sitio del sistema que ESCRIBE
381
+ // un id canónico, y un literal aquí puede discrepar del que valida. Cuando
382
+ // eso pasa el floor emite output que su propio validador rechaza y ninguna
383
+ // revisión se publica — un formato paralelo de un solo carácter.
384
+ schema: DESIGN_BASELINE_SCHEMA_ID,
385
+ package: manifest.id,
386
+ revision,
387
+ parent_baseline: current === null ? null : `${manifest.id}@r${current.revision}`,
388
+ published,
389
+ selection,
390
+ };
391
+ return { ...sealed, digest: computeBaselineDigest(sealed) };
392
+ }
393
+ function nextManifestOf(manifest, catalog, baseline) {
394
+ const path = baselinePath(manifest.id, baseline.revision);
395
+ return {
396
+ ...manifest,
397
+ catalog,
398
+ currentness: deriveCurrentness(manifest.id, catalog),
399
+ baselines: [
400
+ ...manifest.baselines,
401
+ {
402
+ revision: baseline.revision,
403
+ path,
404
+ digest: baseline.digest,
405
+ parent_baseline: baseline.parent_baseline,
406
+ published: baseline.published,
407
+ },
408
+ ],
409
+ current_baseline: { revision: baseline.revision, path, digest: baseline.digest },
410
+ };
411
+ }
412
+ /**
413
+ * Currentness is DERIVED, never authored: the highest revision of each artifact
414
+ * is current and the rest are superseded. Minting `supersedes` and leaving the
415
+ * index empty would publish a manifest that contradicts itself.
416
+ */
417
+ function deriveCurrentness(packageId, catalog) {
418
+ const out = [];
419
+ for (const key of ["flows", "screens", "rules", "tokens", "renditions"]) {
420
+ const highest = new Map();
421
+ for (const entry of catalog[key]) {
422
+ highest.set(entry.id, Math.max(highest.get(entry.id) ?? 0, entry.revision));
423
+ }
424
+ for (const entry of catalog[key]) {
425
+ out.push({
426
+ ref: `${packageId}/${entry.id}@r${entry.revision}`,
427
+ state: entry.revision === highest.get(entry.id) ? "current" : "superseded",
428
+ });
429
+ }
430
+ }
431
+ return out;
432
+ }
433
+ /**
434
+ * Everything, before anything is written. The compare-and-swap runs against the
435
+ * manifest as it was READ, which is what makes it a swap: if the line moved
436
+ * since, the candidate's parent no longer matches and the publication stops.
437
+ */
438
+ function validateCandidate(after, baseline, packagePath) {
439
+ // Sin compare-and-swap acá: el candidato DERIVA su parent y su revisión del
440
+ // mismo manifest contra el que se compararía, así que la guarda no podía
441
+ // fallar nunca. El swap real es `expectedBase`, que el que llama declara.
442
+ const manifestPath = `${packagePath}/design-manifest.json`;
443
+ const baselineDoc = `${packagePath}/${baselinePath(after.id, baseline.revision)}`;
444
+ const manifestCheck = validateDesignManifest(JSON.parse(JSON.stringify(after)), manifestPath);
445
+ if (!manifestCheck.ok)
446
+ return manifestCheck.failures;
447
+ const baselineCheck = validateDesignBaseline(JSON.parse(JSON.stringify(baseline)), baselineDoc);
448
+ if (!baselineCheck.ok)
449
+ return baselineCheck.failures;
450
+ return checkBaselineAuthority(manifestCheck.value, baseline, baselineDoc);
451
+ }
452
+ /**
453
+ * The batch. The new revision's files and its baseline are written EXCLUSIVELY —
454
+ * a concurrent publication must lose the race, not overwrite an immutable
455
+ * revision. The index and the projections are meant to be rewritten.
456
+ */
457
+ function candidateArtifacts(packagePath, manifest, baseline, files) {
458
+ const at = (path) => `${packagePath}/${path}`;
459
+ return [
460
+ ...files.map((f) => ({ path: at(f.path), content: f.content, overwrite: false })),
461
+ {
462
+ path: at(baselinePath(manifest.id, baseline.revision)),
463
+ content: `${JSON.stringify(baseline, null, 2)}\n`,
464
+ overwrite: false,
465
+ },
466
+ { path: at("PACKAGE.md"), content: renderPackageMd(manifest), overwrite: true },
467
+ // `design-system/` es CONDICIONAL: crear la carpeta en un package sin reglas
468
+ // ni tokens inventaría estructura que la spec no pide.
469
+ ...(manifest.catalog.rules.length + manifest.catalog.tokens.length > 0
470
+ ? [
471
+ {
472
+ path: at("design-system/DESIGN.md"),
473
+ content: renderDesignMd(manifest),
474
+ overwrite: true,
475
+ },
476
+ ]
477
+ : []),
478
+ // ÚLTIMO, a propósito: el manifest es el interruptor que conmuta el package
479
+ // a la revisión nueva. Escribirlo antes que las proyecciones deja una
480
+ // ventana en la que un rollback fallido publica un baseline colgante.
481
+ {
482
+ path: at("design-manifest.json"),
483
+ content: `${JSON.stringify(manifest, null, 2)}\n`,
484
+ overwrite: true,
485
+ },
486
+ ];
487
+ }
488
+ //# sourceMappingURL=design-publish-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"design-publish-service.js","sourceRoot":"","sources":["../../../src/application/design/design-publish-service.ts"],"names":[],"mappings":"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"}