@tacuchi/agent-workflow-cli 20.26.0 → 21.1.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.
- package/README.md +2 -1
- package/dist/adapters/node-file-system.js +3 -0
- package/dist/adapters/node-file-system.js.map +1 -1
- package/dist/application/capability/compose.js +161 -0
- package/dist/application/capability/compose.js.map +1 -0
- package/dist/application/capability/descriptor-loader.js +109 -0
- package/dist/application/capability/descriptor-loader.js.map +1 -0
- package/dist/application/capability/design-handler.js +299 -0
- package/dist/application/capability/design-handler.js.map +1 -0
- package/dist/application/capability/dispatcher.js +312 -0
- package/dist/application/capability/dispatcher.js.map +1 -0
- package/dist/application/capability/durable-effect.js +220 -0
- package/dist/application/capability/durable-effect.js.map +1 -0
- package/dist/application/capability/installed-inventory.js +168 -0
- package/dist/application/capability/installed-inventory.js.map +1 -0
- package/dist/application/capability/readiness.js +204 -0
- package/dist/application/capability/readiness.js.map +1 -0
- package/dist/application/capability/resolution.js +264 -0
- package/dist/application/capability/resolution.js.map +1 -0
- package/dist/application/capability/wrapper.js +187 -0
- package/dist/application/capability/wrapper.js.map +1 -0
- package/dist/application/context/manifest.js +11 -5
- package/dist/application/context/manifest.js.map +1 -1
- package/dist/application/context/measure.js +5 -2
- package/dist/application/context/measure.js.map +1 -1
- package/dist/application/context/plan-service.js +6 -6
- package/dist/application/context/plan-service.js.map +1 -1
- package/dist/application/design/design-bundle-service.js +148 -0
- package/dist/application/design/design-bundle-service.js.map +1 -0
- package/dist/application/design/design-gate-service.js +246 -0
- package/dist/application/design/design-gate-service.js.map +1 -0
- package/dist/application/design/design-graph-service.js +85 -0
- package/dist/application/design/design-graph-service.js.map +1 -0
- package/dist/application/design/design-index-service.js +132 -0
- package/dist/application/design/design-index-service.js.map +1 -0
- package/dist/application/design/design-proposal-service.js +69 -0
- package/dist/application/design/design-proposal-service.js.map +1 -0
- package/dist/application/design/design-publish-service.js +756 -0
- package/dist/application/design/design-publish-service.js.map +1 -0
- package/dist/application/design/design-record-service.js +100 -0
- package/dist/application/design/design-record-service.js.map +1 -0
- package/dist/application/design/design-resolver-service.js +165 -0
- package/dist/application/design/design-resolver-service.js.map +1 -0
- package/dist/application/flow/advance.js +533 -0
- package/dist/application/flow/advance.js.map +1 -0
- package/dist/application/flow/flow-service.js +65 -0
- package/dist/application/flow/flow-service.js.map +1 -0
- package/dist/application/flow/run-projection.js +80 -0
- package/dist/application/flow/run-projection.js.map +1 -0
- package/dist/application/flow/run-state-service.js +107 -0
- package/dist/application/flow/run-state-service.js.map +1 -0
- package/dist/application/flow/submit.js +423 -0
- package/dist/application/flow/submit.js.map +1 -0
- package/dist/application/resume-service.js +46 -14
- package/dist/application/resume-service.js.map +1 -1
- package/dist/application/self/install-skill.js +11 -0
- package/dist/application/self/install-skill.js.map +1 -1
- package/dist/application/self/uninstall.js +21 -0
- package/dist/application/self/uninstall.js.map +1 -1
- package/dist/application/semantic-operation/protocol.js +18 -12
- package/dist/application/semantic-operation/protocol.js.map +1 -1
- package/dist/application/semantic-operation/publish.js +56 -9
- package/dist/application/semantic-operation/publish.js.map +1 -1
- package/dist/application/skills-resolver-service.js +27 -6
- package/dist/application/skills-resolver-service.js.map +1 -1
- package/dist/application/status-service.js +5 -1
- package/dist/application/status-service.js.map +1 -1
- package/dist/application/workline-index-service.js +6 -0
- package/dist/application/workline-index-service.js.map +1 -1
- package/dist/application/workspace-init-service.js +22 -2
- package/dist/application/workspace-init-service.js.map +1 -1
- package/dist/cli/commands/capability.js +182 -0
- package/dist/cli/commands/capability.js.map +1 -0
- package/dist/cli/commands/designs.js +110 -0
- package/dist/cli/commands/designs.js.map +1 -0
- package/dist/cli/commands/flow.js +71 -0
- package/dist/cli/commands/flow.js.map +1 -0
- package/dist/cli/commands/index.js +6 -0
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/resume.js +8 -0
- package/dist/cli/commands/resume.js.map +1 -1
- package/dist/cli/commands/skills.js +55 -2
- package/dist/cli/commands/skills.js.map +1 -1
- package/dist/cli/commands/status.js +50 -0
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/help-groups.js +9 -0
- package/dist/cli/help-groups.js.map +1 -1
- package/dist/cli/parser.js +7 -0
- package/dist/cli/parser.js.map +1 -1
- package/dist/cli/tui/data/workflow-content.js +5 -0
- package/dist/cli/tui/data/workflow-content.js.map +1 -1
- package/dist/cli/tui/tabs/workflow-tab.js +5 -1
- package/dist/cli/tui/tabs/workflow-tab.js.map +1 -1
- package/dist/domain/capability/descriptor.js +553 -0
- package/dist/domain/capability/descriptor.js.map +1 -0
- package/dist/domain/capability/effects.js +90 -0
- package/dist/domain/capability/effects.js.map +1 -0
- package/dist/domain/capability/protocol.js +494 -0
- package/dist/domain/capability/protocol.js.map +1 -0
- package/dist/domain/contract-reader.js +84 -0
- package/dist/domain/contract-reader.js.map +1 -0
- package/dist/domain/design/adapter.js +161 -0
- package/dist/domain/design/adapter.js.map +1 -0
- package/dist/domain/design/artifact-body.js +223 -0
- package/dist/domain/design/artifact-body.js.map +1 -0
- package/dist/domain/design/artifact.js +750 -0
- package/dist/domain/design/artifact.js.map +1 -0
- package/dist/domain/design/baseline.js +359 -0
- package/dist/domain/design/baseline.js.map +1 -0
- package/dist/domain/design/capability.js +310 -0
- package/dist/domain/design/capability.js.map +1 -0
- package/dist/domain/design/closure.js +161 -0
- package/dist/domain/design/closure.js.map +1 -0
- package/dist/domain/design/direct.js +108 -0
- package/dist/domain/design/direct.js.map +1 -0
- package/dist/domain/design/external-send.js +65 -0
- package/dist/domain/design/external-send.js.map +1 -0
- package/dist/domain/design/governance.js +298 -0
- package/dist/domain/design/governance.js.map +1 -0
- package/dist/domain/design/identity.js +145 -0
- package/dist/domain/design/identity.js.map +1 -0
- package/dist/domain/design/manifest.js +552 -0
- package/dist/domain/design/manifest.js.map +1 -0
- package/dist/domain/design/maturity.js +305 -0
- package/dist/domain/design/maturity.js.map +1 -0
- package/dist/domain/design/naming.js +117 -0
- package/dist/domain/design/naming.js.map +1 -0
- package/dist/domain/design/offline.js +92 -0
- package/dist/domain/design/offline.js.map +1 -0
- package/dist/domain/design/profiles.js +212 -0
- package/dist/domain/design/profiles.js.map +1 -0
- package/dist/domain/design/projections.js +165 -0
- package/dist/domain/design/projections.js.map +1 -0
- package/dist/domain/design/proposal.js +234 -0
- package/dist/domain/design/proposal.js.map +1 -0
- package/dist/domain/design/reference.js +234 -0
- package/dist/domain/design/reference.js.map +1 -0
- package/dist/domain/design/render-bundle.js +0 -0
- package/dist/domain/design/render-bundle.js.map +1 -0
- package/dist/domain/design/rendition.js +472 -0
- package/dist/domain/design/rendition.js.map +1 -0
- package/dist/domain/design/retired.js +61 -0
- package/dist/domain/design/retired.js.map +1 -0
- package/dist/domain/design/revision.js +219 -0
- package/dist/domain/design/revision.js.map +1 -0
- package/dist/domain/design/secrets.js +86 -0
- package/dist/domain/design/secrets.js.map +1 -0
- package/dist/domain/design/sources.js +180 -0
- package/dist/domain/design/sources.js.map +1 -0
- package/dist/domain/design/validation.js +19 -0
- package/dist/domain/design/validation.js.map +1 -0
- package/dist/domain/design/visual-evidence.js +155 -0
- package/dist/domain/design/visual-evidence.js.map +1 -0
- package/dist/domain/design/yaml-subset.js +390 -0
- package/dist/domain/design/yaml-subset.js.map +1 -0
- package/dist/domain/flow/answer.js +459 -0
- package/dist/domain/flow/answer.js.map +1 -0
- package/dist/domain/flow/authority.js +2276 -0
- package/dist/domain/flow/authority.js.map +1 -0
- package/dist/domain/flow/authorization.js +62 -0
- package/dist/domain/flow/authorization.js.map +1 -0
- package/dist/domain/flow/directive.js +421 -0
- package/dist/domain/flow/directive.js.map +1 -0
- package/dist/domain/flow/rules.js +140 -0
- package/dist/domain/flow/rules.js.map +1 -0
- package/dist/domain/flow/run-state.js +317 -0
- package/dist/domain/flow/run-state.js.map +1 -0
- package/dist/domain/harnesses.js +21 -0
- package/dist/domain/harnesses.js.map +1 -1
- package/dist/domain/safe-path.js +23 -0
- package/dist/domain/safe-path.js.map +1 -0
- package/dist/domain/skills.js +26 -3
- package/dist/domain/skills.js.map +1 -1
- package/package.json +1 -1
- package/skills/w/SKILL.md +15 -13
- package/skills/w/artifacts/README.md +3 -4
- package/skills/w/artifacts/artifacts-core/CHECKPOINT.md +2 -2
- package/skills/w/commands/plan-exec.md +11 -5
- package/skills/w/commands/plan-new.md +6 -2
- package/skills/w/commands/plan-refine.md +6 -3
- package/skills/w/commands/quick.md +2 -2
- package/skills/w/commands/spec-new.md +2 -2
- package/skills/w/commands/spec-refine.md +1 -0
- package/skills/w/context/MANIFEST.json +57 -9
- package/skills/w/harness/HARNESS.md +20 -0
- package/skills/w/loops/CHASSIS.md +11 -20
- package/skills/w/loops/CODE-POLICIES.md +18 -9
- package/skills/w/loops/README.md +1 -1
- package/skills/w/loops/plan-exec-loop/LOOP.md +126 -62
- package/skills/w/loops/plan-new-loop/LOOP.md +71 -73
- package/skills/w/loops/plan-refine-loop/LOOP.md +20 -10
- package/skills/w/loops/quick-loop/LOOP.md +18 -26
- package/skills/w/loops/spec-refine-loop/LOOP.md +28 -30
- package/skills/w/modules/COMPACTION.md +2 -6
- package/skills/w/modules/DB-SCRIPTS-ONLY.md +2 -0
- package/skills/w/modules/DESIGN-REFERENCES.md +113 -0
- package/skills/w/modules/IDEATION-GATE.md +3 -3
- package/skills/w/modules/PERSIST-ROUTING.md +1 -0
- package/skills/w/modules/PLAN-EXECUTION-BATCHES.md +65 -0
- package/skills/w/modules/PLAN-INPUT.md +5 -3
- package/skills/w/modules/PLAN-REFINE-SPLIT.md +3 -1
- package/skills/w/modules/PLAN-SPLIT-GATE.md +7 -5
- package/skills/w/modules/PROMPT-CONTINUITY.md +3 -1
- package/skills/w/modules/SPEC-CHANGE-SHAPE.md +4 -4
- package/skills/w/roles/README.md +9 -5
- package/skills/w/roles/design/CONTRACT.md +80 -0
- package/skills/w/roles/design/ROLE.md +224 -0
- package/skills/w/schemas/capability-descriptor.schema.json +260 -0
- package/skills/w/schemas/design/design-baseline.v1.schema.json +71 -0
- package/skills/w/schemas/design/design-manifest.v1.schema.json +322 -0
- package/skills/w/schemas/design/design-render-bundle.v1.schema.json +191 -0
- package/skills/w/schemas/design/design-rendition.v1.schema.json +232 -0
- package/skills/w/schemas/design/design-review.v1.schema.json +72 -0
- package/skills/w/schemas/design/design-revocation.v1.schema.json +54 -0
- package/skills/w/schemas/design/ui-flow.v1.schema.json +211 -0
- package/skills/w/schemas/design/ui-screen.v1.schema.json +242 -0
- package/skills/w/artifacts/artifacts-design/SPEC.md +0 -42
- package/skills/w/modules/PLAN-DESIGN-SPECS.md +0 -12
- package/skills/w/modules/PLAN-REFINE-DESIGN-SPECS.md +0 -7
- package/skills/w/roles/ui-spec/ROLE.md +0 -147
|
@@ -0,0 +1,552 @@
|
|
|
1
|
+
import { checkSafeRelativePath } from "../safe-path.js";
|
|
2
|
+
import { CANONICAL_SCHEMAS } from "./capability.js";
|
|
3
|
+
import { ARTIFACT_PREFIX, GRAMMAR, isArtifactId, isAssetFilename, isDigest, isPackageId, isRevision, parseArtifactRef, parseBaselineRef, } from "./identity.js";
|
|
4
|
+
import { baselinePath, checkGovernanceNaming, checkNaming } from "./naming.js";
|
|
5
|
+
import { secretFailures } from "./secrets.js";
|
|
6
|
+
import { Reader, eachRecord, isNonEmptyString, isRecord, } from "./validation.js";
|
|
7
|
+
/**
|
|
8
|
+
* `design-manifest.json` — the package's MUTABLE index.
|
|
9
|
+
*
|
|
10
|
+
* It is the only file in a package that changes without minting a revision, and
|
|
11
|
+
* that is exactly why it owns nothing normative: it declares where things are,
|
|
12
|
+
* which baseline is current and who references the package, while the baselines
|
|
13
|
+
* and the artifacts they select own what things ARE. A baseline digest excludes
|
|
14
|
+
* this file on purpose, so re-indexing never rewrites history.
|
|
15
|
+
*
|
|
16
|
+
* Validation is hand-written and fail-closed (same call as DEC-001: no schema
|
|
17
|
+
* engine, no new dependency). The published JSON Schema is the normative
|
|
18
|
+
* contract; `skills/w/schemas/design/design-manifest.v1.schema.json` holds it,
|
|
19
|
+
* and a guard test proves this validator reads every property it declares.
|
|
20
|
+
*/
|
|
21
|
+
export const DESIGN_MANIFEST_SCHEMA_ID = CANONICAL_SCHEMAS.manifest;
|
|
22
|
+
export const DESIGN_MANIFEST_FILE = "design-manifest.json";
|
|
23
|
+
/** Workspace-relative root of the durable design taxonomy. */
|
|
24
|
+
export const DESIGNS_DIR = "docs/designs";
|
|
25
|
+
/**
|
|
26
|
+
* Keys each object of the manifest admits, by property path (`""` is the root,
|
|
27
|
+
* `[]` an array item). Drives the unknown-key rejection AND the drift guard: the
|
|
28
|
+
* published schema declares `additionalProperties: false` everywhere, so a key
|
|
29
|
+
* this table does not list is a typo of a real one, never an extension.
|
|
30
|
+
*/
|
|
31
|
+
export const ALLOWED_KEYS = {
|
|
32
|
+
"": [
|
|
33
|
+
"schema",
|
|
34
|
+
"id",
|
|
35
|
+
"title",
|
|
36
|
+
"created",
|
|
37
|
+
"derived_from",
|
|
38
|
+
"current_baseline",
|
|
39
|
+
"baselines",
|
|
40
|
+
"catalog",
|
|
41
|
+
"currentness",
|
|
42
|
+
"governance",
|
|
43
|
+
"relations",
|
|
44
|
+
],
|
|
45
|
+
current_baseline: ["revision", "path", "digest"],
|
|
46
|
+
"baselines[]": ["revision", "path", "digest", "parent_baseline", "published"],
|
|
47
|
+
catalog: ["flows", "screens", "rules", "tokens", "renditions", "assets"],
|
|
48
|
+
"catalog.flows[]": ["id", "revision", "path", "supersedes", "maturity"],
|
|
49
|
+
"catalog.screens[]": ["id", "revision", "path", "supersedes", "maturity", "states"],
|
|
50
|
+
"catalog.rules[]": ["id", "revision", "path", "supersedes"],
|
|
51
|
+
"catalog.tokens[]": ["id", "revision", "path", "supersedes"],
|
|
52
|
+
"catalog.renditions[]": ["id", "revision", "path", "supersedes"],
|
|
53
|
+
"catalog.assets[]": ["digest", "path"],
|
|
54
|
+
"currentness[]": ["ref", "state"],
|
|
55
|
+
governance: ["reviews", "revocations"],
|
|
56
|
+
"governance.reviews[]": ["id", "path", "digest", "target"],
|
|
57
|
+
"governance.revocations[]": ["id", "path", "digest", "target"],
|
|
58
|
+
relations: ["specs", "plans"],
|
|
59
|
+
};
|
|
60
|
+
const CATALOG_KINDS = [
|
|
61
|
+
{ key: "flows", kind: "flow" },
|
|
62
|
+
{ key: "screens", kind: "screen" },
|
|
63
|
+
{ key: "rules", kind: "rule" },
|
|
64
|
+
{ key: "tokens", kind: "token" },
|
|
65
|
+
{ key: "renditions", kind: "rendition" },
|
|
66
|
+
];
|
|
67
|
+
/** Only the screens catalog declares the anchors of each revision. */
|
|
68
|
+
const STATES_KEY = "screens";
|
|
69
|
+
/** Kinds whose revisions carry a maturity. */
|
|
70
|
+
const MATURITY_KEYS = new Set(["flows", "screens"]);
|
|
71
|
+
const ISO_DATE_RE = /^\d{4}-\d{2}-\d{2}$/;
|
|
72
|
+
export function validateDesignManifest(raw, artifact = DESIGN_MANIFEST_FILE) {
|
|
73
|
+
const r = new Reader(ALLOWED_KEYS);
|
|
74
|
+
if (!isRecord(raw)) {
|
|
75
|
+
r.fail("DESIGN_MANIFEST_NOT_OBJECT", artifact, "el manifest no es un objeto JSON", `reescribí '${artifact}' como un único objeto JSON conforme a ${DESIGN_MANIFEST_SCHEMA_ID}`);
|
|
76
|
+
return done(r, null);
|
|
77
|
+
}
|
|
78
|
+
// The version gate runs first and alone: reading fields off a manifest whose
|
|
79
|
+
// shape we do not know would report a pile of derived nonsense.
|
|
80
|
+
const schema = r.read(raw, "schema");
|
|
81
|
+
if (schema !== DESIGN_MANIFEST_SCHEMA_ID) {
|
|
82
|
+
r.fail("DESIGN_SCHEMA_UNKNOWN", artifact, `versión de formato no soportada: ${JSON.stringify(schema)}`, `este Workline entiende ${DESIGN_MANIFEST_SCHEMA_ID}; actualizá la CLI o el package`);
|
|
83
|
+
return done(r, null);
|
|
84
|
+
}
|
|
85
|
+
r.closed(raw, "", artifact);
|
|
86
|
+
const id = r.read(raw, "id");
|
|
87
|
+
if (!isPackageId(id)) {
|
|
88
|
+
r.invalid(artifact, `'id' no es un identificador de package: ${JSON.stringify(id)}`, "usá la forma DES-NNN (tres dígitos o más), independiente del slug y del path");
|
|
89
|
+
}
|
|
90
|
+
const title = r.read(raw, "title");
|
|
91
|
+
if (!isNonEmptyString(title)) {
|
|
92
|
+
r.invalid(artifact, "'title' es obligatorio y no puede estar vacío", "poné el nombre humano del package");
|
|
93
|
+
}
|
|
94
|
+
const created = r.read(raw, "created");
|
|
95
|
+
if (typeof created !== "string" || !ISO_DATE_RE.test(created)) {
|
|
96
|
+
r.invalid(artifact, `'created' no es una fecha YYYY-MM-DD: ${JSON.stringify(created)}`, "escribí la fecha de creación como YYYY-MM-DD");
|
|
97
|
+
}
|
|
98
|
+
const derivedFrom = r.read(raw, "derived_from");
|
|
99
|
+
const derived = derivedFrom === null ? null : parseBaselineRef(derivedFrom);
|
|
100
|
+
if (derivedFrom !== null && derived === null) {
|
|
101
|
+
r.invalid(artifact, `'derived_from' no es un baseline: ${JSON.stringify(derivedFrom)}`, "usá null, o la forma DES-NNN@rN del package del que este deriva");
|
|
102
|
+
}
|
|
103
|
+
else if (derived !== null && derived.package === id) {
|
|
104
|
+
// Una divergencia crea OTRO package. Derivar de uno mismo no es una
|
|
105
|
+
// divergencia: es la línea de baselines, que ya tiene su propio mecanismo.
|
|
106
|
+
r.fail("DESIGN_RELATION_BROKEN", artifact, `'derived_from' apunta a ${String(derivedFrom)}, que es este mismo package`, "una divergencia deriva de OTRO package; dentro del propio, la línea se encadena con 'parent_baseline'");
|
|
107
|
+
}
|
|
108
|
+
const baselines = readBaselines(r, raw, artifact, id);
|
|
109
|
+
const currentBaseline = readCurrentBaseline(r, raw, artifact, baselines);
|
|
110
|
+
const catalog = readCatalog(r, raw, artifact);
|
|
111
|
+
const currentness = readCurrentness(r, raw, artifact, id, catalog);
|
|
112
|
+
checkSupersedesIntegrity(r, artifact, id, catalog);
|
|
113
|
+
const governance = readGovernance(r, raw, artifact, baselines, id);
|
|
114
|
+
const relations = readRelations(r, raw, artifact);
|
|
115
|
+
for (const failure of secretFailures(raw, artifact))
|
|
116
|
+
r.failures.push(failure);
|
|
117
|
+
if (r.failures.length > 0)
|
|
118
|
+
return done(r, null);
|
|
119
|
+
return done(r, {
|
|
120
|
+
schema: DESIGN_MANIFEST_SCHEMA_ID,
|
|
121
|
+
id: id,
|
|
122
|
+
title: title,
|
|
123
|
+
created: created,
|
|
124
|
+
derived_from: derivedFrom,
|
|
125
|
+
current_baseline: currentBaseline,
|
|
126
|
+
baselines,
|
|
127
|
+
catalog,
|
|
128
|
+
currentness,
|
|
129
|
+
governance,
|
|
130
|
+
relations,
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
function readBaselines(r, raw, artifact, packageId) {
|
|
134
|
+
const out = [];
|
|
135
|
+
const seen = new Set();
|
|
136
|
+
for (const entry of eachRecord(r, raw, "baselines", artifact, " (vacío si el package todavía no publicó)")) {
|
|
137
|
+
const parsed = readBaselineEntry(r, entry, artifact, seen, packageId);
|
|
138
|
+
if (parsed !== null)
|
|
139
|
+
out.push(parsed);
|
|
140
|
+
}
|
|
141
|
+
return out;
|
|
142
|
+
}
|
|
143
|
+
function readBaselineEntry(r, entry, artifact, seen, packageId) {
|
|
144
|
+
const revision = r.read(entry, "baselines[].revision");
|
|
145
|
+
const path = r.read(entry, "baselines[].path");
|
|
146
|
+
const digest = r.read(entry, "baselines[].digest");
|
|
147
|
+
const parent = r.read(entry, "baselines[].parent_baseline");
|
|
148
|
+
const published = r.read(entry, "baselines[].published");
|
|
149
|
+
const label = `baselines[r${String(revision)}]`;
|
|
150
|
+
if (!isRevision(revision)) {
|
|
151
|
+
r.invalid(artifact, `${label}: 'revision' debe ser un entero >= 1`, "las revisiones son lógicas y empiezan en 1");
|
|
152
|
+
return null;
|
|
153
|
+
}
|
|
154
|
+
if (seen.has(revision)) {
|
|
155
|
+
r.fail("DESIGN_ID_DUPLICATE", artifact, `la revisión r${revision} aparece dos veces en 'baselines'`, "una revisión publicada es única: eliminá la entrada duplicada");
|
|
156
|
+
return null;
|
|
157
|
+
}
|
|
158
|
+
seen.add(revision);
|
|
159
|
+
if (checkPackagePath(r, artifact, `${label}.path`, path) && isPackageId(packageId)) {
|
|
160
|
+
const expected = baselinePath(packageId, revision);
|
|
161
|
+
if (path !== expected) {
|
|
162
|
+
r.invalid(artifact, `${label}: '${String(path)}' no es el nombre de esa revisión`, `renombralo a '${expected}': la revisión va en el path para que publicar la siguiente no pise esta`);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
if (!isDigest(digest)) {
|
|
166
|
+
r.invalid(artifact, `${label}: 'digest' debe ser 'sha256:' + 64 hex`, "recalculá el digest del baseline");
|
|
167
|
+
}
|
|
168
|
+
if (parent !== null && parseBaselineRef(parent) === null) {
|
|
169
|
+
r.invalid(artifact, `${label}: 'parent_baseline' debe ser null o DES-NNN@rN`, "encadená el baseline con su padre, o null si es el primero");
|
|
170
|
+
}
|
|
171
|
+
if (typeof published !== "string" || !ISO_DATE_RE.test(published)) {
|
|
172
|
+
r.invalid(artifact, `${label}: 'published' no es una fecha YYYY-MM-DD`, "escribí la fecha de publicación como YYYY-MM-DD");
|
|
173
|
+
}
|
|
174
|
+
return {
|
|
175
|
+
revision,
|
|
176
|
+
path: typeof path === "string" ? path : "",
|
|
177
|
+
digest: typeof digest === "string" ? digest : "",
|
|
178
|
+
parent_baseline: typeof parent === "string" ? parent : null,
|
|
179
|
+
published: typeof published === "string" ? published : "",
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
function readCurrentBaseline(r, raw, artifact, baselines) {
|
|
183
|
+
const node = r.read(raw, "current_baseline");
|
|
184
|
+
if (node === null)
|
|
185
|
+
return null;
|
|
186
|
+
if (!isRecord(node)) {
|
|
187
|
+
r.invalid(artifact, "'current_baseline' debe ser un objeto o null", "poné null mientras el package no haya publicado");
|
|
188
|
+
return null;
|
|
189
|
+
}
|
|
190
|
+
r.closed(node, "current_baseline", artifact);
|
|
191
|
+
const revision = r.read(node, "current_baseline.revision");
|
|
192
|
+
const path = r.read(node, "current_baseline.path");
|
|
193
|
+
const digest = r.read(node, "current_baseline.digest");
|
|
194
|
+
if (!isRevision(revision)) {
|
|
195
|
+
r.invalid(artifact, "'current_baseline.revision' debe ser un entero >= 1", "apuntá a una revisión publicada");
|
|
196
|
+
return null;
|
|
197
|
+
}
|
|
198
|
+
checkPackagePath(r, artifact, "current_baseline.path", path);
|
|
199
|
+
if (!isDigest(digest)) {
|
|
200
|
+
r.invalid(artifact, "'current_baseline.digest' debe ser 'sha256:' + 64 hex", "copiá el digest del baseline vigente");
|
|
201
|
+
}
|
|
202
|
+
// The index may only point at a baseline the line actually contains: a
|
|
203
|
+
// current_baseline nobody published is a dangling reference, not a state.
|
|
204
|
+
const match = baselines.find((b) => b.revision === revision);
|
|
205
|
+
if (match === undefined) {
|
|
206
|
+
r.fail("DESIGN_RELATION_BROKEN", artifact, `'current_baseline' apunta a r${revision} y 'baselines' no la contiene`, "publicá esa revisión o apuntá a una existente");
|
|
207
|
+
}
|
|
208
|
+
else if (match.digest !== digest || match.path !== path) {
|
|
209
|
+
r.fail("DESIGN_RELATION_BROKEN", artifact, `'current_baseline' contradice la entrada r${revision} de 'baselines' (path o digest distintos)`, "el catálogo manda: copiá path y digest de 'baselines'");
|
|
210
|
+
}
|
|
211
|
+
return {
|
|
212
|
+
revision,
|
|
213
|
+
path: typeof path === "string" ? path : "",
|
|
214
|
+
digest: typeof digest === "string" ? digest : "",
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
function readCatalog(r, raw, artifact) {
|
|
218
|
+
const node = r.read(raw, "catalog");
|
|
219
|
+
const empty = {
|
|
220
|
+
flows: [],
|
|
221
|
+
screens: [],
|
|
222
|
+
rules: [],
|
|
223
|
+
tokens: [],
|
|
224
|
+
renditions: [],
|
|
225
|
+
assets: [],
|
|
226
|
+
};
|
|
227
|
+
if (!isRecord(node)) {
|
|
228
|
+
r.invalid(artifact, "'catalog' debe ser un objeto con flows, screens, rules, tokens, renditions y assets", "escribí las seis claves, con array vacío donde no haya contenido");
|
|
229
|
+
return empty;
|
|
230
|
+
}
|
|
231
|
+
r.closed(node, "catalog", artifact);
|
|
232
|
+
const catalog = { ...empty };
|
|
233
|
+
for (const { key, kind } of CATALOG_KINDS) {
|
|
234
|
+
catalog[key] = readCatalogList(r, node, artifact, key, kind);
|
|
235
|
+
}
|
|
236
|
+
catalog.assets = readAssets(r, node, artifact);
|
|
237
|
+
return catalog;
|
|
238
|
+
}
|
|
239
|
+
function readCatalogList(r, node, artifact, key, kind) {
|
|
240
|
+
const out = [];
|
|
241
|
+
const seen = new Set();
|
|
242
|
+
for (const entry of eachRecord(r, node, `catalog.${key}`, artifact)) {
|
|
243
|
+
const parsed = readCatalogEntry(r, entry, artifact, key, kind, seen);
|
|
244
|
+
if (parsed !== null)
|
|
245
|
+
out.push(parsed);
|
|
246
|
+
}
|
|
247
|
+
return out;
|
|
248
|
+
}
|
|
249
|
+
function readCatalogEntry(r, entry, artifact, key, kind, seen) {
|
|
250
|
+
const wantsMaturity = MATURITY_KEYS.has(key);
|
|
251
|
+
const id = r.read(entry, `catalog.${key}[].id`);
|
|
252
|
+
const revision = r.read(entry, `catalog.${key}[].revision`);
|
|
253
|
+
const path = r.read(entry, `catalog.${key}[].path`);
|
|
254
|
+
const supersedes = r.read(entry, `catalog.${key}[].supersedes`);
|
|
255
|
+
const maturity = wantsMaturity ? r.read(entry, `catalog.${key}[].maturity`) : undefined;
|
|
256
|
+
const states = key === STATES_KEY ? r.read(entry, `catalog.${key}[].states`) : undefined;
|
|
257
|
+
const label = `catalog.${key}[${String(id)}]`;
|
|
258
|
+
if (!isArtifactId(id, kind)) {
|
|
259
|
+
r.invalid(artifact, `${label}: 'id' debe empezar con ${ARTIFACT_PREFIX[kind]}- y tres dígitos o más`, `usá ${ARTIFACT_PREFIX[kind]}-NNN`);
|
|
260
|
+
return null;
|
|
261
|
+
}
|
|
262
|
+
if (!isRevision(revision)) {
|
|
263
|
+
r.invalid(artifact, `${label}: 'revision' debe ser un entero >= 1`, "las revisiones son lógicas y empiezan en 1");
|
|
264
|
+
return null;
|
|
265
|
+
}
|
|
266
|
+
const slot = `${id}@r${revision}`;
|
|
267
|
+
if (seen.has(slot)) {
|
|
268
|
+
r.fail("DESIGN_ID_DUPLICATE", artifact, `${slot} aparece dos veces en 'catalog.${key}'`, "una revisión de un artefacto se cataloga una sola vez");
|
|
269
|
+
return null;
|
|
270
|
+
}
|
|
271
|
+
seen.add(slot);
|
|
272
|
+
if (checkPackagePath(r, artifact, `${label}.path`, path)) {
|
|
273
|
+
checkArtifactNaming(r, artifact, label, kind, path, id, revision);
|
|
274
|
+
}
|
|
275
|
+
if (supersedes !== null && parseArtifactRef(supersedes) === null) {
|
|
276
|
+
r.invalid(artifact, `${label}: 'supersedes' debe ser null o DES-NNN/XXX-NNN@rN`, "referenciá la revisión anterior completa, o null");
|
|
277
|
+
}
|
|
278
|
+
if (wantsMaturity && maturity !== "outline" && maturity !== "handoff") {
|
|
279
|
+
r.invalid(artifact, `${label}: 'maturity' debe ser 'outline' o 'handoff'`, "declará la madurez de esta revisión");
|
|
280
|
+
return null;
|
|
281
|
+
}
|
|
282
|
+
const anchors = key === STATES_KEY ? readStates(r, artifact, label, states) : undefined;
|
|
283
|
+
if (key === STATES_KEY && anchors === null)
|
|
284
|
+
return null;
|
|
285
|
+
return {
|
|
286
|
+
id,
|
|
287
|
+
revision,
|
|
288
|
+
path: typeof path === "string" ? path : "",
|
|
289
|
+
supersedes: typeof supersedes === "string" ? supersedes : null,
|
|
290
|
+
...(wantsMaturity ? { maturity: maturity } : {}),
|
|
291
|
+
...(anchors === undefined || anchors === null ? {} : { states: anchors }),
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
/** The anchors a screen revision declares: at least one, and each one distinct. */
|
|
295
|
+
function readStates(r, artifact, label, states) {
|
|
296
|
+
const anchor = new RegExp(`^${GRAMMAR.anchor}$`);
|
|
297
|
+
if (!Array.isArray(states) ||
|
|
298
|
+
states.length === 0 ||
|
|
299
|
+
!states.every((s) => typeof s === "string" && anchor.test(s))) {
|
|
300
|
+
r.invalid(artifact, `${label}: 'states' debe listar al menos un anchor en minúsculas`, "catalogá los estados que la screen declara en su frontmatter");
|
|
301
|
+
return null;
|
|
302
|
+
}
|
|
303
|
+
if (new Set(states).size !== states.length) {
|
|
304
|
+
r.fail("DESIGN_ID_DUPLICATE", artifact, `${label}: 'states' repite un anchor`, "cada estado se cataloga una sola vez");
|
|
305
|
+
return null;
|
|
306
|
+
}
|
|
307
|
+
return states;
|
|
308
|
+
}
|
|
309
|
+
function readAssets(r, node, artifact) {
|
|
310
|
+
const out = [];
|
|
311
|
+
const seen = new Set();
|
|
312
|
+
for (const entry of eachRecord(r, node, "catalog.assets", artifact)) {
|
|
313
|
+
const digest = r.read(entry, "catalog.assets[].digest");
|
|
314
|
+
const path = r.read(entry, "catalog.assets[].path");
|
|
315
|
+
if (!isDigest(digest)) {
|
|
316
|
+
r.invalid(artifact, `catalog.assets: 'digest' debe ser 'sha256:' + 64 hex (recibido ${JSON.stringify(digest)})`, "recalculá el SHA-256 del asset");
|
|
317
|
+
continue;
|
|
318
|
+
}
|
|
319
|
+
if (seen.has(digest)) {
|
|
320
|
+
r.fail("DESIGN_ID_DUPLICATE", artifact, `el asset ${digest} está catalogado dos veces`, "los assets son content-addressed: una entrada por digest");
|
|
321
|
+
continue;
|
|
322
|
+
}
|
|
323
|
+
seen.add(digest);
|
|
324
|
+
if (!checkPackagePath(r, artifact, "catalog.assets[].path", path))
|
|
325
|
+
continue;
|
|
326
|
+
// Content-addressed on disk too: the digest lives in the file name, so an
|
|
327
|
+
// asset can never be silently replaced by different bytes under the same path.
|
|
328
|
+
const filename = path.split("/").pop();
|
|
329
|
+
const bare = digest.slice("sha256:".length);
|
|
330
|
+
if (!path.startsWith("assets/")) {
|
|
331
|
+
r.invalid(artifact, `catalog.assets: '${String(path)}' no vive en 'assets/'`, `movelo a 'assets/${bare}-<nombre>.<ext>'`);
|
|
332
|
+
continue;
|
|
333
|
+
}
|
|
334
|
+
if (!isAssetFilename(filename) || !filename.startsWith(`${bare}-`)) {
|
|
335
|
+
r.invalid(artifact, `catalog.assets: '${String(path)}' no usa la forma <sha256>-<safe-name>.<ext> de su digest`, `renombrá el archivo a ${bare}-<nombre>.<ext>`);
|
|
336
|
+
}
|
|
337
|
+
out.push({ digest, path: path });
|
|
338
|
+
}
|
|
339
|
+
return out;
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* `supersedes` names a predecessor, and a predecessor the catalog does not hold
|
|
343
|
+
* is a succession nobody can follow: currentness derives from this field, so a
|
|
344
|
+
* dangling one silently un-supersedes whatever it pointed at.
|
|
345
|
+
*/
|
|
346
|
+
function checkSupersedesIntegrity(r, artifact, packageId, catalog) {
|
|
347
|
+
const catalogued = new Set();
|
|
348
|
+
for (const { key } of CATALOG_KINDS) {
|
|
349
|
+
for (const entry of catalog[key])
|
|
350
|
+
catalogued.add(`${entry.id}@r${entry.revision}`);
|
|
351
|
+
}
|
|
352
|
+
for (const { key } of CATALOG_KINDS) {
|
|
353
|
+
for (const entry of catalog[key]) {
|
|
354
|
+
checkOneSupersedes(r, artifact, packageId, `catalog.${key}`, entry, catalogued);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
function checkOneSupersedes(r, artifact, packageId, listPath, entry, catalogued) {
|
|
359
|
+
if (entry.supersedes === null)
|
|
360
|
+
return;
|
|
361
|
+
const ref = parseArtifactRef(entry.supersedes);
|
|
362
|
+
if (ref === null)
|
|
363
|
+
return; // ya reportado como formato inválido
|
|
364
|
+
const label = `${listPath}[${entry.id}@r${entry.revision}]`;
|
|
365
|
+
const broken = (message, action) => {
|
|
366
|
+
r.fail("DESIGN_RELATION_BROKEN", artifact, `${label}: ${message}`, action);
|
|
367
|
+
};
|
|
368
|
+
if (isPackageId(packageId) && ref.package !== packageId) {
|
|
369
|
+
broken(`'supersedes' apunta a ${ref.package}, otro package`, "una revisión solo supersede a otra del mismo artefacto");
|
|
370
|
+
return;
|
|
371
|
+
}
|
|
372
|
+
if (ref.artifact !== entry.id) {
|
|
373
|
+
broken(`'supersedes' apunta a ${ref.artifact}, otro artefacto`, "una revisión solo supersede a otra del mismo artefacto");
|
|
374
|
+
return;
|
|
375
|
+
}
|
|
376
|
+
if (ref.revision >= entry.revision) {
|
|
377
|
+
broken(`'supersedes' apunta a r${ref.revision}, que no es anterior`, "solo se supersede una revisión anterior");
|
|
378
|
+
return;
|
|
379
|
+
}
|
|
380
|
+
if (!catalogued.has(`${ref.artifact}@r${ref.revision}`)) {
|
|
381
|
+
broken(`'supersedes' apunta a ${entry.supersedes} y el catálogo no la contiene`, "catalogá la revisión anterior: publicar la siguiente nunca la borra");
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
function readCurrentness(r, raw, artifact, packageId, catalog) {
|
|
385
|
+
const catalogued = new Set();
|
|
386
|
+
for (const { key } of CATALOG_KINDS) {
|
|
387
|
+
for (const entry of catalog[key]) {
|
|
388
|
+
catalogued.add(`${entry.id}@r${entry.revision}`);
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
const out = [];
|
|
392
|
+
const seen = new Set();
|
|
393
|
+
for (const entry of eachRecord(r, raw, "currentness", artifact, " (vacío si nada fue superseded)")) {
|
|
394
|
+
const parsed = readCurrentnessEntry(r, entry, artifact, packageId, catalogued, seen);
|
|
395
|
+
if (parsed !== null)
|
|
396
|
+
out.push(parsed);
|
|
397
|
+
}
|
|
398
|
+
return out;
|
|
399
|
+
}
|
|
400
|
+
function readCurrentnessEntry(r, entry, artifact, packageId, catalogued, seen) {
|
|
401
|
+
const ref = r.read(entry, "currentness[].ref");
|
|
402
|
+
const state = r.read(entry, "currentness[].state");
|
|
403
|
+
const parsed = parseArtifactRef(ref);
|
|
404
|
+
if (parsed === null) {
|
|
405
|
+
r.invalid(artifact, `currentness: '${String(ref)}' no es una referencia DES-NNN/XXX-NNN@rN`, "referenciá el artefacto completo");
|
|
406
|
+
return null;
|
|
407
|
+
}
|
|
408
|
+
if (state !== "current" && state !== "superseded") {
|
|
409
|
+
r.invalid(artifact, `currentness[${parsed.artifact}]: 'state' debe ser 'current' o 'superseded'`, "la currentness se deriva de supersedes; escribí uno de los dos valores");
|
|
410
|
+
return null;
|
|
411
|
+
}
|
|
412
|
+
if (seen.has(ref)) {
|
|
413
|
+
r.fail("DESIGN_ID_DUPLICATE", artifact, `currentness repite ${String(ref)}`, "una revisión tiene un solo estado de currentness");
|
|
414
|
+
return null;
|
|
415
|
+
}
|
|
416
|
+
seen.add(ref);
|
|
417
|
+
if (isPackageId(packageId) && parsed.package !== packageId) {
|
|
418
|
+
r.fail("DESIGN_RELATION_BROKEN", artifact, `currentness cita ${String(ref)}, de otro package`, "el manifest solo declara la currentness de sus propios artefactos");
|
|
419
|
+
return null;
|
|
420
|
+
}
|
|
421
|
+
if (!catalogued.has(`${parsed.artifact}@r${parsed.revision}`)) {
|
|
422
|
+
r.fail("DESIGN_RELATION_BROKEN", artifact, `currentness cita ${String(ref)} y el catálogo no la contiene`, "catalogá esa revisión o quitá la entrada");
|
|
423
|
+
return null;
|
|
424
|
+
}
|
|
425
|
+
return { ref: ref, state };
|
|
426
|
+
}
|
|
427
|
+
function readGovernance(r, raw, artifact, baselines, packageId) {
|
|
428
|
+
const node = r.read(raw, "governance");
|
|
429
|
+
if (!isRecord(node)) {
|
|
430
|
+
r.invalid(artifact, "'governance' debe ser un objeto con 'reviews' y 'revocations'", "escribí ambas claves, con array vacío si no hay records");
|
|
431
|
+
return { reviews: [], revocations: [] };
|
|
432
|
+
}
|
|
433
|
+
r.closed(node, "governance", artifact);
|
|
434
|
+
return {
|
|
435
|
+
reviews: readGovernanceList(r, node, artifact, "reviews", "review", baselines, packageId),
|
|
436
|
+
revocations: readGovernanceList(r, node, artifact, "revocations", "revocation", baselines, packageId),
|
|
437
|
+
};
|
|
438
|
+
}
|
|
439
|
+
function readGovernanceList(r, node, artifact, key, kind, baselines, packageId) {
|
|
440
|
+
const out = [];
|
|
441
|
+
const seen = new Set();
|
|
442
|
+
for (const entry of eachRecord(r, node, `governance.${key}`, artifact)) {
|
|
443
|
+
const record = readGovernanceRecord(r, entry, artifact, key, kind, baselines, seen, packageId);
|
|
444
|
+
if (record !== null)
|
|
445
|
+
out.push(record);
|
|
446
|
+
}
|
|
447
|
+
return out;
|
|
448
|
+
}
|
|
449
|
+
function readGovernanceRecord(r, entry, artifact, key, kind, baselines, seen, packageId) {
|
|
450
|
+
const id = r.read(entry, `governance.${key}[].id`);
|
|
451
|
+
const path = r.read(entry, `governance.${key}[].path`);
|
|
452
|
+
const digest = r.read(entry, `governance.${key}[].digest`);
|
|
453
|
+
const target = r.read(entry, `governance.${key}[].target`);
|
|
454
|
+
if (!isArtifactId(id, kind)) {
|
|
455
|
+
r.invalid(artifact, `governance.${key}: 'id' debe empezar con ${ARTIFACT_PREFIX[kind]}-`, `usá ${ARTIFACT_PREFIX[kind]}-NNN`);
|
|
456
|
+
return null;
|
|
457
|
+
}
|
|
458
|
+
if (seen.has(id)) {
|
|
459
|
+
r.fail("DESIGN_ID_DUPLICATE", artifact, `governance.${key} repite ${id}`, "cada record de gobierno tiene un id único");
|
|
460
|
+
return null;
|
|
461
|
+
}
|
|
462
|
+
seen.add(id);
|
|
463
|
+
if (checkPackagePath(r, artifact, `governance.${key}[${id}].path`, path)) {
|
|
464
|
+
// Un record no es un artefacto normativo —no lo selecciona ningún baseline
|
|
465
|
+
// y no tiene revisión propia— pero su ubicación sí es fija: un índice que
|
|
466
|
+
// apunta a cualquier lado no permite encontrarlos sin leer el manifest.
|
|
467
|
+
const kindOf = key === "reviews" ? "review" : "revocation";
|
|
468
|
+
const naming = checkGovernanceNaming(kindOf, path, id);
|
|
469
|
+
if (!naming.ok) {
|
|
470
|
+
r.invalid(artifact, `governance.${key}[${id}]: ${naming.why}`, `movelo a '${naming.expected}'`);
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
if (!isDigest(digest)) {
|
|
474
|
+
r.invalid(artifact, `governance.${key}[${id}]: 'digest' debe ser 'sha256:' + 64 hex`, "recalculá el digest propio del record");
|
|
475
|
+
}
|
|
476
|
+
const ref = parseBaselineRef(target);
|
|
477
|
+
if (ref === null) {
|
|
478
|
+
r.invalid(artifact, `governance.${key}[${id}]: 'target' debe ser DES-NNN@rN`, "un record decide sobre un baseline exacto");
|
|
479
|
+
return null;
|
|
480
|
+
}
|
|
481
|
+
// El package del target se comprobaba… nunca. Un record de este manifest que
|
|
482
|
+
// decide sobre el baseline de OTRO package queda indexado acá y obligado a
|
|
483
|
+
// vivir en esta carpeta: dos afirmaciones que no pueden ser ciertas a la vez.
|
|
484
|
+
if (ref.package !== packageId) {
|
|
485
|
+
r.fail("DESIGN_RELATION_BROKEN", artifact, `governance.${key}[${id}] decide sobre ${String(target)}, que no es de ${String(packageId)}`, "un manifest solo indexa records sobre sus propios baselines");
|
|
486
|
+
return null;
|
|
487
|
+
}
|
|
488
|
+
if (!baselines.some((b) => b.revision === ref.revision)) {
|
|
489
|
+
r.fail("DESIGN_RELATION_BROKEN", artifact, `governance.${key}[${id}] decide sobre ${String(target)} y 'baselines' no la contiene`, "apuntá a un baseline publicado");
|
|
490
|
+
return null;
|
|
491
|
+
}
|
|
492
|
+
return { id, path: path, digest: digest, target: target };
|
|
493
|
+
}
|
|
494
|
+
function readRelations(r, raw, artifact) {
|
|
495
|
+
const node = r.read(raw, "relations");
|
|
496
|
+
if (!isRecord(node)) {
|
|
497
|
+
r.invalid(artifact, "'relations' debe ser un objeto con 'specs' y 'plans'", "escribí ambas claves, con array vacío si el package todavía no tiene consumidores");
|
|
498
|
+
return { specs: [], plans: [] };
|
|
499
|
+
}
|
|
500
|
+
r.closed(node, "relations", artifact);
|
|
501
|
+
return {
|
|
502
|
+
specs: readRelationList(r, node, artifact, "specs"),
|
|
503
|
+
plans: readRelationList(r, node, artifact, "plans"),
|
|
504
|
+
};
|
|
505
|
+
}
|
|
506
|
+
function readRelationList(r, node, artifact, key) {
|
|
507
|
+
const list = r.read(node, `relations.${key}`);
|
|
508
|
+
if (!Array.isArray(list)) {
|
|
509
|
+
r.invalid(artifact, `'relations.${key}' debe ser un array de paths del workspace`, `escribí 'relations.${key}': []`);
|
|
510
|
+
return [];
|
|
511
|
+
}
|
|
512
|
+
const out = [];
|
|
513
|
+
for (const value of list) {
|
|
514
|
+
if (typeof value !== "string") {
|
|
515
|
+
r.invalid(artifact, `'relations.${key}' solo admite paths de texto`, `revisá el array 'relations.${key}'`);
|
|
516
|
+
continue;
|
|
517
|
+
}
|
|
518
|
+
const safe = checkSafeRelativePath(value);
|
|
519
|
+
if (!safe.ok) {
|
|
520
|
+
r.fail("DESIGN_PATH_UNSAFE", artifact, `relations.${key}: '${value}' ${safe.why}`, `usá un path relativo al workspace, por ejemplo docs/${key === "specs" ? "specs" : "plans"}/NNN-....md`);
|
|
521
|
+
continue;
|
|
522
|
+
}
|
|
523
|
+
if (out.includes(safe.path))
|
|
524
|
+
continue;
|
|
525
|
+
out.push(safe.path);
|
|
526
|
+
}
|
|
527
|
+
return out;
|
|
528
|
+
}
|
|
529
|
+
/** The revision belongs in the file name — that is what makes immutability checkable. */
|
|
530
|
+
function checkArtifactNaming(r, artifact, label, kind, path, id, revision) {
|
|
531
|
+
const check = checkNaming(kind, path, id, revision);
|
|
532
|
+
if (check.ok)
|
|
533
|
+
return;
|
|
534
|
+
r.invalid(artifact, `${label}: ${check.why}`, `usá '${check.expected}'`);
|
|
535
|
+
}
|
|
536
|
+
/** A manifest path is package-relative and never escapes the package folder. */
|
|
537
|
+
function checkPackagePath(r, artifact, field, value) {
|
|
538
|
+
if (typeof value !== "string") {
|
|
539
|
+
r.invalid(artifact, `${field} debe ser un path de texto relativo al package`, "escribí el path relativo, por ejemplo flows/FLW-001-r001-alta.md");
|
|
540
|
+
return false;
|
|
541
|
+
}
|
|
542
|
+
const safe = checkSafeRelativePath(value);
|
|
543
|
+
if (!safe.ok) {
|
|
544
|
+
r.fail("DESIGN_PATH_UNSAFE", artifact, `${field}: '${value}' ${safe.why}`, "los paths del manifest son relativos al package y nunca salen de él");
|
|
545
|
+
return false;
|
|
546
|
+
}
|
|
547
|
+
return true;
|
|
548
|
+
}
|
|
549
|
+
function done(r, value) {
|
|
550
|
+
return { ok: value !== null, value, failures: r.failures, touched: r.touched };
|
|
551
|
+
}
|
|
552
|
+
//# sourceMappingURL=manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/domain/design/manifest.ts"],"names":[],"mappings":"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"}
|