@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,606 @@
1
+ import { PLACEHOLDER, bodyCriteria, bodyDigests, bodyReferences, checkHeadings, conditionalKeys, parseBody, } from "./artifact-body.js";
2
+ import { CANONICAL_SCHEMAS } from "./capability.js";
3
+ import { ARTIFACT_PREFIX, anchorIsTheProblem, isDigest, isPackageId, isRevision, parseArtifactId, parseArtifactRef, } from "./identity.js";
4
+ import { Reader, eachRecord, isNonEmptyString, isRecord, } from "./validation.js";
5
+ import { parseYamlSubset } from "./yaml-subset.js";
6
+ /**
7
+ * Flow and Screen Specifications v1 — the two documents that carry the design
8
+ * semantics of a package.
9
+ *
10
+ * The contract's whole point: **identity, graph, states, dependencies and
11
+ * traceability resolve from the frontmatter alone**. Nothing normative may
12
+ * require reading a sentence. The body still has a contract (fixed headings,
13
+ * real text), but it is checked AGAINST the frontmatter, never trusted instead
14
+ * of it — and where the body cites an artifact, it must cite one the
15
+ * frontmatter already declares.
16
+ */
17
+ export const FLOW_SCHEMA_ID = CANONICAL_SCHEMAS.flow;
18
+ export const SCREEN_SCHEMA_ID = CANONICAL_SCHEMAS.screen;
19
+ export const SCHEMA_ID = {
20
+ flow: FLOW_SCHEMA_ID,
21
+ screen: SCREEN_SCHEMA_ID,
22
+ };
23
+ const COMMON_KEYS = [
24
+ "schema",
25
+ "id",
26
+ "revision",
27
+ "maturity",
28
+ "supersedes",
29
+ "purpose",
30
+ "platform",
31
+ "trace",
32
+ "unknowns",
33
+ "not_applicable",
34
+ "external",
35
+ ];
36
+ export const FLOW_ALLOWED_KEYS = {
37
+ "": [...COMMON_KEYS, "actors", "entry", "nodes", "edges", "dependencies"],
38
+ "edges[]": ["from", "trigger", "action", "condition", "to"],
39
+ "trace[]": ["criterion", "source"],
40
+ "unknowns[]": ["question", "blocking"],
41
+ "external[]": ["provider", "revision", "digest"],
42
+ };
43
+ export const SCREEN_ALLOWED_KEYS = {
44
+ "": [...COMMON_KEYS, "title", "default_state", "states", "flow_refs", "dependencies"],
45
+ "states[]": ["anchor", "purpose"],
46
+ "trace[]": ["criterion", "source"],
47
+ "unknowns[]": ["question", "blocking"],
48
+ "external[]": ["provider", "revision", "digest"],
49
+ dependencies: ["rules", "tokens", "assets"],
50
+ };
51
+ export const ALLOWED_KEYS = {
52
+ flow: FLOW_ALLOWED_KEYS,
53
+ screen: SCREEN_ALLOWED_KEYS,
54
+ };
55
+ const ANCHOR_RE = /^[A-Za-z0-9][A-Za-z0-9_-]*$/;
56
+ /**
57
+ * A free-text frontmatter field, checked against the SAME placeholder list the
58
+ * body uses. AC-SEM-08 forbids `N/A` in identity, purpose, platform, base state,
59
+ * references and traceability — and the only sanctioned way to say "does not
60
+ * apply" is `not_applicable.<section>`, which covers sections, never fields.
61
+ */
62
+ function checkText(r, artifact, field, value, action) {
63
+ if (!isNonEmptyString(value)) {
64
+ r.invalid(artifact, `'${field}' es obligatorio y no admite vacío`, action);
65
+ return false;
66
+ }
67
+ if (PLACEHOLDER.test(value.trim())) {
68
+ r.fail("DESIGN_FIELD_PLACEHOLDER", artifact, `'${field}' dice solo '${value.trim()}'`, "un campo del frontmatter no se declara no aplicable: escribí su valor");
69
+ return false;
70
+ }
71
+ return true;
72
+ }
73
+ const DELIMITER = "---";
74
+ /** Split `---`-fenced frontmatter from the Markdown body. */
75
+ export function splitDesignDocument(text) {
76
+ const lines = text.split(/\r?\n/);
77
+ if ((lines[0] ?? "").trim() !== DELIMITER)
78
+ return null;
79
+ for (let i = 1; i < lines.length; i++) {
80
+ if ((lines[i] ?? "").trim() !== DELIMITER)
81
+ continue;
82
+ return {
83
+ frontmatter: lines.slice(1, i).join("\n"),
84
+ body: lines.slice(i + 1).join("\n"),
85
+ bodyLine: i + 2,
86
+ };
87
+ }
88
+ return null;
89
+ }
90
+ export function validateDesignArtifact(text, kind, artifact) {
91
+ const r = new Reader(ALLOWED_KEYS[kind]);
92
+ const split = splitDesignDocument(text);
93
+ if (split === null) {
94
+ r.fail("DESIGN_FRONTMATTER_MISSING", artifact, "el documento no abre y cierra un frontmatter '---'", `empezá el archivo con '---', el frontmatter ${SCHEMA_ID[kind]} y otro '---'`);
95
+ return { ok: false, value: null, failures: r.failures, touched: r.touched };
96
+ }
97
+ const parsed = parseYamlSubset(split.frontmatter);
98
+ if (!parsed.ok) {
99
+ r.fail("DESIGN_FRONTMATTER_UNREADABLE", artifact, `el frontmatter no es legible (línea ${parsed.line + 1}): ${parsed.why}`, "el contrato admite un subconjunto de YAML: mappings, secuencias, flow style y escalares");
100
+ return { ok: false, value: null, failures: r.failures, touched: r.touched };
101
+ }
102
+ const front = parsed.value;
103
+ // The version gate runs first and alone: reading fields off a frontmatter
104
+ // whose shape we do not know would report a pile of derived nonsense.
105
+ const schema = r.read(front, "schema");
106
+ if (schema !== SCHEMA_ID[kind]) {
107
+ r.fail("DESIGN_SCHEMA_UNKNOWN", artifact, `versión de formato no soportada: ${JSON.stringify(schema)}`, `este Workline entiende ${SCHEMA_ID[kind]}`);
108
+ return { ok: false, value: null, failures: r.failures, touched: r.touched };
109
+ }
110
+ r.closed(front, "", artifact);
111
+ const common = readCommon(r, front, kind, artifact);
112
+ const specific = kind === "flow" ? readFlow(r, front, artifact) : readScreen(r, front, artifact);
113
+ const body = parseBody(split.body, split.bodyLine);
114
+ checkHeadings(r, body, kind, artifact);
115
+ checkNotApplicable(r, common.not_applicable, kind, artifact);
116
+ checkBodyAgainstFrontmatter(r, body, kind, artifact, common, specific);
117
+ if (r.failures.length > 0) {
118
+ return { ok: false, value: null, failures: r.failures, touched: r.touched };
119
+ }
120
+ return {
121
+ ok: true,
122
+ value: { kind, ...common, ...specific },
123
+ failures: [],
124
+ touched: r.touched,
125
+ };
126
+ }
127
+ function readCommon(r, front, kind, artifact) {
128
+ const rawId = r.read(front, "id");
129
+ const parsedId = parseArtifactId(rawId);
130
+ const expectedPrefix = ARTIFACT_PREFIX[kind];
131
+ if (parsedId === null || !parsedId.artifact.startsWith(`${expectedPrefix}-`)) {
132
+ r.invalid(artifact, `'id' debe ser DES-NNN/${expectedPrefix}-NNN y llegó ${JSON.stringify(rawId)}`, `escribí la identidad completa, por ejemplo DES-001/${expectedPrefix}-001`);
133
+ }
134
+ const revision = r.read(front, "revision");
135
+ if (!isRevision(revision)) {
136
+ r.invalid(artifact, "'revision' debe ser un entero >= 1", "las revisiones son lógicas y empiezan en 1");
137
+ }
138
+ const maturity = r.read(front, "maturity");
139
+ if (maturity !== "outline" && maturity !== "handoff") {
140
+ r.invalid(artifact, `'maturity' debe ser 'outline' o 'handoff' y llegó ${JSON.stringify(maturity)}`, "declará la madurez de esta revisión");
141
+ }
142
+ const supersedes = r.read(front, "supersedes");
143
+ checkSupersedes(r, supersedes, artifact, rawId, revision);
144
+ const purpose = r.read(front, "purpose");
145
+ checkText(r, artifact, "purpose", purpose, "escribí para qué existe este artefacto");
146
+ const platform = r.read(front, "platform");
147
+ checkText(r, artifact, "platform", platform, "declará la plataforma, por ejemplo web");
148
+ return {
149
+ schema: SCHEMA_ID[kind],
150
+ id: typeof rawId === "string" ? rawId : "",
151
+ revision: isRevision(revision) ? revision : 0,
152
+ maturity: maturity === "handoff" ? "handoff" : "outline",
153
+ supersedes: typeof supersedes === "string" ? supersedes : null,
154
+ purpose: typeof purpose === "string" ? purpose : "",
155
+ platform: typeof platform === "string" ? platform : "",
156
+ trace: readTrace(r, front, artifact),
157
+ unknowns: readUnknowns(r, front, artifact),
158
+ not_applicable: readNotApplicable(r, front, artifact),
159
+ external: readExternal(r, front, artifact),
160
+ };
161
+ }
162
+ /**
163
+ * The design systems this revision borrows from (AC-PKG-09).
164
+ *
165
+ * Pinning is the whole point: a provider without a revision and a digest is a
166
+ * promise that can change underneath the artifact, which is the situation
167
+ * `outline` exists to describe.
168
+ */
169
+ function readExternal(r, front, artifact) {
170
+ const raw = r.read(front, "external");
171
+ if (raw === undefined) {
172
+ r.invalid(artifact, "'external' es obligatorio", "usá [] si no dependés de otro design system");
173
+ return [];
174
+ }
175
+ const out = [];
176
+ for (const entry of eachRecord(r, front, "external", artifact)) {
177
+ const provider = r.read(entry, "external[].provider");
178
+ const revision = r.read(entry, "external[].revision");
179
+ const digest = r.read(entry, "external[].digest");
180
+ if (!isPackageId(provider) || !isRevision(revision) || !isDigest(digest)) {
181
+ r.invalid(artifact, "cada 'external' fija provider DES-NNN, revision entera y digest sha256", "sin proveedor, revisión y digest la dependencia no está fijada");
182
+ continue;
183
+ }
184
+ out.push({ provider: provider, revision, digest: digest });
185
+ }
186
+ return out;
187
+ }
188
+ /**
189
+ * A revision may only supersede an EARLIER revision of ITSELF. Pointing at
190
+ * another artifact would make `supersedes` a second, weaker way of saying
191
+ * "replaces", and currentness is derived from it.
192
+ */
193
+ function checkSupersedes(r, supersedes, artifact, rawId, revision) {
194
+ if (supersedes === undefined) {
195
+ r.invalid(artifact, "falta 'supersedes': el contrato la declara obligatoria", "poné 'supersedes: null' si esta revisión no reemplaza a ninguna");
196
+ return;
197
+ }
198
+ if (supersedes === null)
199
+ return;
200
+ if (anchorIsTheProblem(supersedes)) {
201
+ r.invalid(artifact, `'supersedes' lleva un anchor de estado y supersede una REVISIÓN entera`, "quitá el anchor: se supersede la revisión, no uno de sus estados");
202
+ return;
203
+ }
204
+ const ref = parseArtifactRef(supersedes);
205
+ if (ref === null) {
206
+ r.invalid(artifact, `'supersedes' debe ser null o DES-NNN/XXX-NNN@rN y llegó ${JSON.stringify(supersedes)}`, "referenciá la revisión anterior completa, o null");
207
+ return;
208
+ }
209
+ if (ref.state !== undefined) {
210
+ r.invalid(artifact, `'supersedes' lleva un anchor de estado (#${ref.state}) y supersede una REVISIÓN entera`, "quitá el anchor: se supersede la revisión, no uno de sus estados");
211
+ return;
212
+ }
213
+ const own = parseArtifactId(rawId);
214
+ if (own !== null && (ref.package !== own.package || ref.artifact !== own.artifact)) {
215
+ r.fail("DESIGN_RELATION_BROKEN", artifact, `'supersedes' apunta a ${ref.package}/${ref.artifact} y este artefacto es ${rawId}`, "una revisión solo supersede a una revisión anterior de sí misma");
216
+ return;
217
+ }
218
+ if (isRevision(revision) && ref.revision >= revision) {
219
+ r.fail("DESIGN_RELATION_BROKEN", artifact, `'supersedes' apunta a r${ref.revision} y esta revisión es r${revision}`, "solo se supersede una revisión anterior");
220
+ }
221
+ }
222
+ function readTrace(r, front, artifact) {
223
+ const out = [];
224
+ for (const entry of eachRecord(r, front, "trace", artifact, " de entradas de trazabilidad")) {
225
+ const criterion = r.read(entry, "trace[].criterion");
226
+ const source = r.read(entry, "trace[].source");
227
+ if (!checkText(r, artifact, "trace[].criterion", criterion, "citá el acceptance criterion, por ejemplo S013/AC-SEM-11")) {
228
+ continue;
229
+ }
230
+ if (source !== null &&
231
+ source !== undefined &&
232
+ !checkText(r, artifact, `trace[${criterion}].source`, source, "poné el path del documento que define el criterio, o null")) {
233
+ continue;
234
+ }
235
+ out.push({ criterion, source: typeof source === "string" ? source : null });
236
+ }
237
+ return out;
238
+ }
239
+ function readUnknowns(r, front, artifact) {
240
+ const out = [];
241
+ for (const entry of eachRecord(r, front, "unknowns", artifact, " (vacío si no quedan incógnitas)")) {
242
+ const question = r.read(entry, "unknowns[].question");
243
+ const blocking = r.read(entry, "unknowns[].blocking");
244
+ if (!isNonEmptyString(question)) {
245
+ r.invalid(artifact, "cada entrada de 'unknowns' necesita 'question' no vacía", "escribí la incógnita como pregunta");
246
+ continue;
247
+ }
248
+ if (typeof blocking !== "boolean") {
249
+ r.invalid(artifact, `unknowns['${question}']: 'blocking' debe ser true o false`, "declará si resolverla puede cambiar comportamiento o aceptación");
250
+ continue;
251
+ }
252
+ out.push({ question, blocking });
253
+ }
254
+ return out;
255
+ }
256
+ function readNotApplicable(r, front, artifact) {
257
+ const node = r.read(front, "not_applicable");
258
+ if (node === undefined) {
259
+ r.invalid(artifact, "falta 'not_applicable': el contrato la declara obligatoria", "escribí 'not_applicable: {}' si todo aplica");
260
+ return {};
261
+ }
262
+ if (node === null)
263
+ return {};
264
+ if (!isRecord(node)) {
265
+ r.invalid(artifact, "'not_applicable' debe ser un mapping de sección a razón", "escribí 'not_applicable: {}' si todo aplica");
266
+ return {};
267
+ }
268
+ const out = {};
269
+ for (const [key, reason] of Object.entries(node)) {
270
+ out[key] = typeof reason === "string" ? reason : "";
271
+ }
272
+ return out;
273
+ }
274
+ /**
275
+ * Non-applicability is a claim with a price: it names a CONDITIONAL section and
276
+ * it states why. An essential section cannot be waived at all, and a reason left
277
+ * empty is the same refusal to answer that "N/A" was.
278
+ */
279
+ function checkNotApplicable(r, declared, kind, artifact) {
280
+ const allowed = conditionalKeys(kind);
281
+ for (const [key, reason] of Object.entries(declared)) {
282
+ if (!allowed.includes(key)) {
283
+ r.fail("DESIGN_NOT_APPLICABLE_FORBIDDEN", artifact, `'not_applicable.${key}' no es una sección condicional de ${kind} v1`, `solo estas admiten no-aplicabilidad: ${allowed.join(", ")}`);
284
+ continue;
285
+ }
286
+ if (reason.trim().length === 0 || PLACEHOLDER.test(reason.trim())) {
287
+ r.fail("DESIGN_NOT_APPLICABLE_NO_REASON", artifact, `'not_applicable.${key}' no explica por qué no aplica`, "escribí la razón; ni vacía ni 'N/A' satisfacen el contrato");
288
+ }
289
+ }
290
+ }
291
+ function readFlow(r, front, artifact) {
292
+ const actors = readStringList(r, front, "actors", artifact, "un actor");
293
+ const nodes = readRefList(r, front, "nodes", artifact, "screen", true);
294
+ const dependencies = readRefList(r, front, "dependencies", artifact, null);
295
+ const entry = r.read(front, "entry");
296
+ const entryRef = parseArtifactRef(entry);
297
+ if (entryRef === null) {
298
+ r.invalid(artifact, `'entry' debe ser el estado de pantalla por el que arranca el flow y llegó ${JSON.stringify(entry)}`, "escribí DES-NNN/SCR-NNN@rN#estado");
299
+ }
300
+ else if (entryRef.state === undefined) {
301
+ r.invalid(artifact, "'entry' debe apuntar a un ESTADO de pantalla", "agregá el anchor, por ejemplo @r2#default");
302
+ }
303
+ else if (typeof entry === "string" && nodes.length > 0 && !nodes.includes(entry)) {
304
+ r.fail("DESIGN_RELATION_BROKEN", artifact, `'entry' (${entry}) no está en 'nodes'`, "el punto de entrada es uno de los nodos del grafo: agregalo a 'nodes'");
305
+ }
306
+ const edges = readEdges(r, front, artifact, nodes);
307
+ // With no nodes, every containment check above is vacuous — an edge could point
308
+ // anywhere and nobody would say so. One diagnostic for the root cause beats a
309
+ // pile of derived ones, and beats silence.
310
+ if (nodes.length === 0 && (edges.length > 0 || typeof entry === "string")) {
311
+ r.fail("DESIGN_RELATION_BROKEN", artifact, "'nodes' está vacío y el flow declara entrada o transiciones", "enumerá en 'nodes' los estados de pantalla que el recorrido visita");
312
+ }
313
+ return { actors, entry: typeof entry === "string" ? entry : "", nodes, edges, dependencies };
314
+ }
315
+ function readEdges(r, front, artifact, nodes) {
316
+ const out = [];
317
+ for (const entry of eachRecord(r, front, "edges", artifact, " de transiciones")) {
318
+ const edge = readEdge(r, entry, artifact, nodes);
319
+ if (edge !== null)
320
+ out.push(edge);
321
+ }
322
+ return out;
323
+ }
324
+ function readEdge(r, entry, artifact, nodes) {
325
+ const from = r.read(entry, "edges[].from");
326
+ const trigger = r.read(entry, "edges[].trigger");
327
+ const action = r.read(entry, "edges[].action");
328
+ const condition = r.read(entry, "edges[].condition");
329
+ const to = r.read(entry, "edges[].to");
330
+ if (!isNonEmptyString(trigger)) {
331
+ r.invalid(artifact, "cada arista necesita 'trigger' no vacío", "declará qué dispara la transición");
332
+ return null;
333
+ }
334
+ let ok = true;
335
+ for (const [side, value] of [
336
+ ["from", from],
337
+ ["to", to],
338
+ ]) {
339
+ if (!checkEndpoint(r, artifact, trigger, side, value, nodes))
340
+ ok = false;
341
+ }
342
+ for (const [label, value] of [
343
+ ["action", action],
344
+ ["condition", condition],
345
+ ]) {
346
+ if (value === null || value === undefined || isNonEmptyString(value))
347
+ continue;
348
+ r.invalid(artifact, `edges['${trigger}']: '${label}' debe ser texto o null`, `escribí ${label} o poné null`);
349
+ ok = false;
350
+ }
351
+ if (!ok)
352
+ return null;
353
+ return {
354
+ from: from,
355
+ trigger,
356
+ action: typeof action === "string" ? action : null,
357
+ condition: typeof condition === "string" ? condition : null,
358
+ to: to,
359
+ };
360
+ }
361
+ /**
362
+ * The graph has to close on itself: an endpoint nobody declared as a node is a
363
+ * transition into a screen the flow never says it visits.
364
+ */
365
+ function checkEndpoint(r, artifact, trigger, side, value, nodes) {
366
+ const ref = parseArtifactRef(value);
367
+ if (ref === null) {
368
+ r.invalid(artifact, `edges['${trigger}']: '${side}' debe ser DES-NNN/SCR-NNN@rN#estado y llegó ${JSON.stringify(value)}`, "referenciá el estado de pantalla completo");
369
+ return false;
370
+ }
371
+ // Checked BEFORE membership: without it the author is told to add the
372
+ // unanchored reference to `nodes`, which is the wrong fix for the real problem.
373
+ if (ref.state === undefined) {
374
+ r.invalid(artifact, `edges['${trigger}']: '${side}' (${String(value)}) apunta a una pantalla y una arista conecta ESTADOS`, "agregá el anchor del estado, por ejemplo @r2#default");
375
+ return false;
376
+ }
377
+ if (nodes.length > 0 && !nodes.includes(value)) {
378
+ r.fail("DESIGN_RELATION_BROKEN", artifact, `edges['${trigger}']: '${side}' (${String(value)}) no está en 'nodes'`, "agregá ese estado a 'nodes' o corregí la arista");
379
+ return false;
380
+ }
381
+ return true;
382
+ }
383
+ function readScreen(r, front, artifact) {
384
+ const title = r.read(front, "title");
385
+ checkText(r, artifact, "title", title, "poné el título profesional de la pantalla");
386
+ const states = readStates(r, front, artifact);
387
+ const anchors = states.map((s) => s.anchor);
388
+ const defaultState = r.read(front, "default_state");
389
+ if (!isNonEmptyString(defaultState)) {
390
+ r.invalid(artifact, "'default_state' es obligatorio", "nombrá el anchor del estado base");
391
+ }
392
+ else if (states.length > 0 && !anchors.includes(defaultState)) {
393
+ r.fail("DESIGN_RELATION_BROKEN", artifact, `'default_state' es '${defaultState}' y no está entre los states declarados (${anchors.join(", ")})`, "declaralo en 'states' o apuntá a uno existente");
394
+ }
395
+ if (states.length === 0) {
396
+ r.invalid(artifact, "'states' está vacío: una screen sin estados no tiene nada direccionable", "declará al menos el estado base con su anchor y su propósito");
397
+ }
398
+ const flowRefs = readRefList(r, front, "flow_refs", artifact, "flow");
399
+ return {
400
+ title: typeof title === "string" ? title : "",
401
+ default_state: typeof defaultState === "string" ? defaultState : "",
402
+ states,
403
+ flow_refs: flowRefs,
404
+ dependencies: readScreenDependencies(r, front, artifact),
405
+ };
406
+ }
407
+ /**
408
+ * Screen states. The anchor is what every flow, task and rendition addresses
409
+ * (`DES-001/SCR-002@r2#empty`), so it has to be unique WITHIN THIS REVISION —
410
+ * two states answering to one anchor make every reference to it ambiguous.
411
+ */
412
+ function readStates(r, front, artifact) {
413
+ const out = [];
414
+ const seen = new Set();
415
+ for (const entry of eachRecord(r, front, "states", artifact, " de estados")) {
416
+ const anchor = r.read(entry, "states[].anchor");
417
+ const purpose = r.read(entry, "states[].purpose");
418
+ if (typeof anchor !== "string" || !ANCHOR_RE.test(anchor)) {
419
+ r.invalid(artifact, `anchor de estado inválido: ${JSON.stringify(anchor)}`, "usá letras, números, guion y guion bajo, empezando por alfanumérico (default, empty, permission-denied)");
420
+ continue;
421
+ }
422
+ if (seen.has(anchor)) {
423
+ r.fail("DESIGN_ID_DUPLICATE", artifact, `el anchor de estado '${anchor}' está declarado dos veces`, "un anchor identifica un solo estado dentro de la revisión: renombrá el repetido");
424
+ continue;
425
+ }
426
+ seen.add(anchor);
427
+ if (!checkText(r, artifact, `states['${anchor}'].purpose`, purpose, "escribí qué muestra ese estado")) {
428
+ continue;
429
+ }
430
+ out.push({ anchor, purpose });
431
+ }
432
+ return out;
433
+ }
434
+ function readScreenDependencies(r, front, artifact) {
435
+ const node = r.read(front, "dependencies");
436
+ const empty = { rules: [], tokens: [], assets: [] };
437
+ if (!isRecord(node)) {
438
+ r.invalid(artifact, "'dependencies' debe ser un objeto con 'rules', 'tokens' y 'assets'", "escribí las tres claves, con array vacío donde no haya dependencias");
439
+ return empty;
440
+ }
441
+ r.closed(node, "dependencies", artifact);
442
+ return {
443
+ rules: readRefList(r, node, "dependencies.rules", artifact, "rule"),
444
+ tokens: readRefList(r, node, "dependencies.tokens", artifact, "token"),
445
+ assets: readDigestList(r, node, "dependencies.assets", artifact),
446
+ };
447
+ }
448
+ /** A list of exact artifact references, optionally constrained to one kind. */
449
+ function readRefList(r, node, path, artifact, kind, requireAnchor = false) {
450
+ const raw = r.read(node, path);
451
+ if (!Array.isArray(raw)) {
452
+ r.invalid(artifact, `'${path}' debe ser un array de referencias`, `escribí '${path}': []`);
453
+ return [];
454
+ }
455
+ const out = [];
456
+ for (const value of raw) {
457
+ if (!checkRef(r, artifact, path, value, kind, requireAnchor))
458
+ continue;
459
+ if (out.includes(value)) {
460
+ r.fail("DESIGN_ID_DUPLICATE", artifact, `'${path}' repite ${String(value)}`, "dejá una sola aparición");
461
+ continue;
462
+ }
463
+ out.push(value);
464
+ }
465
+ return out;
466
+ }
467
+ /** One reference: well-formed, of the expected kind, and anchored or not as declared. */
468
+ function checkRef(r, artifact, path, value, kind, requireAnchor) {
469
+ if (anchorIsTheProblem(value)) {
470
+ r.invalid(artifact, `'${path}' referencia revisiones enteras y ${String(value)} lleva un anchor de estado`, "quitá el '#estado' de la referencia: solo una screen tiene estados");
471
+ return false;
472
+ }
473
+ const ref = parseArtifactRef(value);
474
+ if (ref === null) {
475
+ r.invalid(artifact, `'${path}' solo admite referencias DES-NNN/XXX-NNN@rN y llegó ${JSON.stringify(value)}`, "referenciá el artefacto completo, con package y revisión");
476
+ return false;
477
+ }
478
+ if (requireAnchor !== (ref.state !== undefined)) {
479
+ r.invalid(artifact, requireAnchor
480
+ ? `'${path}' referencia ESTADOS de pantalla y ${String(value)} no lleva anchor`
481
+ : `'${path}' referencia revisiones enteras y ${String(value)} lleva un anchor de estado`, requireAnchor
482
+ ? "agregá el anchor, por ejemplo @r2#default"
483
+ : "quitá el '#estado' de la referencia");
484
+ return false;
485
+ }
486
+ const prefix = kind === null ? null : ARTIFACT_PREFIX[kind];
487
+ if (prefix !== null && !ref.artifact.startsWith(`${prefix}-`)) {
488
+ r.invalid(artifact, `'${path}' espera artefactos ${prefix}- y llegó ${String(value)}`, `referenciá un ${kind}`);
489
+ return false;
490
+ }
491
+ return true;
492
+ }
493
+ function readDigestList(r, node, path, artifact) {
494
+ const raw = r.read(node, path);
495
+ if (!Array.isArray(raw)) {
496
+ r.invalid(artifact, `'${path}' debe ser un array de digests`, `escribí '${path}': []`);
497
+ return [];
498
+ }
499
+ const out = [];
500
+ for (const value of raw) {
501
+ if (!isDigest(value)) {
502
+ r.invalid(artifact, `'${path}' referencia assets por digest y llegó ${JSON.stringify(value)}`, "usá 'sha256:' + 64 hex: los assets son content-addressed");
503
+ continue;
504
+ }
505
+ if (!out.includes(value))
506
+ out.push(value);
507
+ }
508
+ return out;
509
+ }
510
+ function readStringList(r, node, path, artifact, what) {
511
+ const raw = r.read(node, path);
512
+ if (!Array.isArray(raw)) {
513
+ r.invalid(artifact, `'${path}' debe ser un array`, `escribí '${path}': []`);
514
+ return [];
515
+ }
516
+ const out = [];
517
+ for (const value of raw) {
518
+ if (!checkText(r, artifact, `${path}[]`, value, `revisá '${path}': ${what}`))
519
+ continue;
520
+ if (!out.includes(value))
521
+ out.push(value);
522
+ }
523
+ return out;
524
+ }
525
+ /**
526
+ * Cross-validation. Only the canonical reference form is extracted from the
527
+ * body, so this never depends on interpreting prose: a mention the frontmatter
528
+ * does not declare is either a typo or a relation nobody made machine-readable,
529
+ * and both are errors.
530
+ */
531
+ function checkBodyAgainstFrontmatter(r, body, kind, artifact, common, specific) {
532
+ checkBodyRefs(r, body, kind, artifact, common, specific);
533
+ checkBodyCriteria(r, body, artifact, common);
534
+ if ("states" in specific)
535
+ checkBodyAssets(r, body, artifact, specific.dependencies.assets);
536
+ }
537
+ function checkBodyRefs(r, body, kind, artifact, common, specific) {
538
+ const declared = declaredReferences(common, specific);
539
+ const own = parseArtifactId(common.id);
540
+ const ownAnchors = "states" in specific ? specific.states.map((s) => s.anchor) : [];
541
+ for (const ref of bodyReferences(body)) {
542
+ const parsedRef = parseArtifactRef(ref);
543
+ if (parsedRef === null)
544
+ continue;
545
+ if (own !== null && parsedRef.package === own.package && parsedRef.artifact === own.artifact) {
546
+ // A reference to THIS artifact is legitimate without being declared — but
547
+ // if it names a state, the state has to exist in this revision.
548
+ checkOwnAnchor(r, artifact, kind, parsedRef.state, ownAnchors);
549
+ continue;
550
+ }
551
+ if (declared.has(ref))
552
+ continue;
553
+ r.fail("DESIGN_BODY_REFERENCE_UNKNOWN", artifact, `el cuerpo cita ${ref} y el frontmatter no lo declara`, kind === "flow"
554
+ ? "agregá esa referencia a 'nodes' o a 'dependencies', o quitala del texto"
555
+ : "agregá esa referencia a 'flow_refs' o a 'dependencies', o quitala del texto");
556
+ }
557
+ }
558
+ /**
559
+ * The spec asks for FOUR things to be contrasted, not one: references, states,
560
+ * criteria and dependencies. A criterion narrated in the body and absent from
561
+ * `trace` is traceability that exists only in prose — the exact thing the
562
+ * frontmatter exists to prevent.
563
+ */
564
+ function checkBodyCriteria(r, body, artifact, common) {
565
+ const traced = new Set(common.trace.map((t) => t.criterion));
566
+ for (const criterion of bodyCriteria(body)) {
567
+ if (traced.has(criterion))
568
+ continue;
569
+ r.fail("DESIGN_BODY_CRITERION_UNKNOWN", artifact, `el cuerpo cita el criterio ${criterion} y 'trace' no lo declara`, "agregalo a 'trace' con su documento fuente, o quitalo del texto");
570
+ }
571
+ }
572
+ function checkBodyAssets(r, body, artifact, declared) {
573
+ const assets = new Set(declared);
574
+ for (const digest of bodyDigests(body)) {
575
+ if (assets.has(digest))
576
+ continue;
577
+ r.fail("DESIGN_BODY_REFERENCE_UNKNOWN", artifact, `el cuerpo cita el asset ${digest} y 'dependencies.assets' no lo declara`, "agregá ese digest a 'dependencies.assets' o quitalo del texto");
578
+ }
579
+ }
580
+ function checkOwnAnchor(r, artifact, kind, state, ownAnchors) {
581
+ if (kind !== "screen" || state === undefined || ownAnchors.includes(state))
582
+ return;
583
+ r.fail("DESIGN_RELATION_BROKEN", artifact, `el cuerpo cita el estado '#${state}' y 'states' no lo declara`, `declaralo en 'states' o citá uno de: ${ownAnchors.join(", ") || "(ninguno)"}`);
584
+ }
585
+ /** Every reference the frontmatter makes machine-readable. */
586
+ function declaredReferences(common, specific) {
587
+ const declared = new Set();
588
+ if (common.supersedes !== null)
589
+ declared.add(common.supersedes);
590
+ if ("nodes" in specific) {
591
+ for (const ref of [...specific.nodes, ...specific.dependencies])
592
+ declared.add(ref);
593
+ if (specific.entry.length > 0)
594
+ declared.add(specific.entry);
595
+ return declared;
596
+ }
597
+ for (const ref of [
598
+ ...specific.flow_refs,
599
+ ...specific.dependencies.rules,
600
+ ...specific.dependencies.tokens,
601
+ ]) {
602
+ declared.add(ref);
603
+ }
604
+ return declared;
605
+ }
606
+ //# sourceMappingURL=artifact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifact.js","sourceRoot":"","sources":["../../../src/domain/design/artifact.ts"],"names":[],"mappings":"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"}