@jevitate/cli 0.9.0 → 0.10.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 (112) hide show
  1. package/dist/anchor-baselines.d.ts +26 -0
  2. package/dist/anchor-baselines.js +25 -0
  3. package/dist/anchor-baselines.js.map +1 -0
  4. package/dist/approval-provenance.d.ts +32 -2
  5. package/dist/approval-provenance.js +92 -5
  6. package/dist/approval-provenance.js.map +1 -1
  7. package/dist/bin.js +10194 -6042
  8. package/dist/build-info.generated.js +2 -2
  9. package/dist/catalog-analysis.js +14 -0
  10. package/dist/catalog-analysis.js.map +1 -1
  11. package/dist/catalog-api.js +12 -4
  12. package/dist/catalog-api.js.map +1 -1
  13. package/dist/catalog-bundle-api.d.ts +73 -0
  14. package/dist/catalog-bundle-api.js +206 -0
  15. package/dist/catalog-bundle-api.js.map +1 -0
  16. package/dist/catalog-bundle-findings.d.ts +54 -0
  17. package/dist/catalog-bundle-findings.js +252 -0
  18. package/dist/catalog-bundle-findings.js.map +1 -0
  19. package/dist/catalog-bundle.d.ts +192 -0
  20. package/dist/catalog-bundle.js +578 -0
  21. package/dist/catalog-bundle.js.map +1 -0
  22. package/dist/catalog-cli.d.ts +6 -0
  23. package/dist/catalog-cli.js +180 -5
  24. package/dist/catalog-cli.js.map +1 -1
  25. package/dist/catalog-refs.d.ts +42 -0
  26. package/dist/catalog-refs.js +188 -0
  27. package/dist/catalog-refs.js.map +1 -0
  28. package/dist/catalog-review.d.ts +3 -1
  29. package/dist/catalog-review.js +61 -0
  30. package/dist/catalog-review.js.map +1 -1
  31. package/dist/catalog.d.ts +27 -3
  32. package/dist/catalog.js +46 -2
  33. package/dist/catalog.js.map +1 -1
  34. package/dist/check-api.js +162 -9
  35. package/dist/check-api.js.map +1 -1
  36. package/dist/check-cli.js +71 -2
  37. package/dist/check-cli.js.map +1 -1
  38. package/dist/check-execute.d.ts +12 -0
  39. package/dist/check-execute.js +55 -3
  40. package/dist/check-execute.js.map +1 -1
  41. package/dist/check-types.d.ts +98 -0
  42. package/dist/check-types.js.map +1 -1
  43. package/dist/cli-output.d.ts +6 -0
  44. package/dist/cli-output.js +23 -0
  45. package/dist/cli-output.js.map +1 -1
  46. package/dist/cli-shared.d.ts +10 -0
  47. package/dist/cli-shared.js +0 -4
  48. package/dist/cli-shared.js.map +1 -1
  49. package/dist/exit-codes.js +15 -0
  50. package/dist/exit-codes.js.map +1 -1
  51. package/dist/forge-verify.d.ts +224 -0
  52. package/dist/forge-verify.js +649 -0
  53. package/dist/forge-verify.js.map +1 -0
  54. package/dist/init-codeowners.d.ts +19 -0
  55. package/dist/init-codeowners.js +66 -0
  56. package/dist/init-codeowners.js.map +1 -1
  57. package/dist/job-draft-api.d.ts +52 -0
  58. package/dist/job-draft-api.js +110 -0
  59. package/dist/job-draft-api.js.map +1 -0
  60. package/dist/journeeze-api.d.ts +71 -0
  61. package/dist/journeeze-api.js +285 -0
  62. package/dist/journeeze-api.js.map +1 -0
  63. package/dist/journeeze-connect.d.ts +156 -0
  64. package/dist/journeeze-connect.js +357 -0
  65. package/dist/journeeze-connect.js.map +1 -0
  66. package/dist/journey-anchor-gate.d.ts +52 -0
  67. package/dist/journey-anchor-gate.js +101 -0
  68. package/dist/journey-anchor-gate.js.map +1 -0
  69. package/dist/journey-api.d.ts +1 -0
  70. package/dist/journey-api.js +37 -10
  71. package/dist/journey-api.js.map +1 -1
  72. package/dist/journey-cli.js +57 -5
  73. package/dist/journey-cli.js.map +1 -1
  74. package/dist/journey-heal.js +1 -1
  75. package/dist/journey-heal.js.map +1 -1
  76. package/dist/journey-lint-sarif.d.ts +3 -2
  77. package/dist/journey-lint-sarif.js +9 -2
  78. package/dist/journey-lint-sarif.js.map +1 -1
  79. package/dist/journey-migrate-api.d.ts +54 -0
  80. package/dist/journey-migrate-api.js +64 -0
  81. package/dist/journey-migrate-api.js.map +1 -0
  82. package/dist/journey-proposal-store.d.ts +9 -0
  83. package/dist/journey-proposal-store.js +23 -0
  84. package/dist/journey-proposal-store.js.map +1 -1
  85. package/dist/journey-result-record.d.ts +2 -0
  86. package/dist/journey-result-record.js +5 -0
  87. package/dist/journey-result-record.js.map +1 -1
  88. package/dist/journey-review-api.js +9 -1
  89. package/dist/journey-review-api.js.map +1 -1
  90. package/dist/journey-review.d.ts +11 -1
  91. package/dist/journey-review.js +77 -5
  92. package/dist/journey-review.js.map +1 -1
  93. package/dist/journey-stale-api.d.ts +40 -0
  94. package/dist/journey-stale-api.js +57 -0
  95. package/dist/journey-stale-api.js.map +1 -0
  96. package/dist/locator-health-api.d.ts +101 -0
  97. package/dist/locator-health-api.js +203 -0
  98. package/dist/locator-health-api.js.map +1 -0
  99. package/dist/locator-health.d.ts +195 -0
  100. package/dist/locator-health.js +419 -0
  101. package/dist/locator-health.js.map +1 -0
  102. package/dist/mcp-cli-tools.d.ts +3 -1
  103. package/dist/mcp-cli-tools.js +55 -5
  104. package/dist/mcp-cli-tools.js.map +1 -1
  105. package/dist/project-config.d.ts +29 -0
  106. package/dist/project-config.js +76 -0
  107. package/dist/project-config.js.map +1 -0
  108. package/package.json +18 -16
  109. package/skills/jevitate-ci-check/SKILL.md +16 -0
  110. package/skills/jevitate-getting-started/SKILL.md +7 -2
  111. package/skills/jevitate-run-journey/SKILL.md +11 -0
  112. package/skills/jevitate-test-campaign/SKILL.md +13 -0
@@ -0,0 +1,578 @@
1
+ import { JOURNEY_MISSION_OUTCOME, JOURNEY_RUN_OUTCOMES, MISSION_EXIT_CODES, MISSION_OUTCOMES } from "@jevitate/domain";
2
+ import { flatJourneySteps, SECRET_PARAM_NAME_RE } from "@jevitate/journey";
3
+ import { CatalogInputError, findJob, findPersona } from "./catalog.js";
4
+ import { describeRefIssue, jobRefIssues, journeyRefIssues, RESERVED_ANCHORS } from "./catalog-refs.js";
5
+ /**
6
+ * #464 (d464a) — the PURE builder of a Journeeze catalog bundle, version 1.0 (journeeze-saas
7
+ * `docs/contract/catalog-bundle-v1.md` at 61f8c92, schema `catalog-bundle.v1.json`). No I/O, no
8
+ * clock: catalog-bundle-api.ts loads the catalog, the raw persona entries, the `check.json` records
9
+ * and the producer identity, and writes what this returns.
10
+ *
11
+ * What goes out, and how (each rule is the contract's):
12
+ * - personas: `{id, description, role, otherFields, approval}` — every descriptive key, so §8's
13
+ * persona hash (`{id, …description, role and otherFields}`) recomputes to jevitate's
14
+ * `personaContentHash`. Session keys (`storageState`, `login`) never leave.
15
+ * - jobs: the `jobs.json` entry as loaded (every jtbd and campaign field — the hash input), with its
16
+ * approval reduced to the contract's `{contentHash, at, channel}` (approval is outside the hash).
17
+ * - journeys: PROMOTED Journeys only, the file as jevitate reads it (the review-hash input), with
18
+ * approval provenance reduced to `{channel, agentSignals}` (no OS user, no reason, no PR reviewer —
19
+ * bookkeeping outside the hash), and `link {job, persona, anchors, serves}` from its metadata.
20
+ * - checks: one per check item that ran, keyed (target.id, commit, runId); a baseline only from a
21
+ * clean run whose `journeyHash` is the exported Journey's approved hash.
22
+ * - findings: whatever the d464c source hands in (`CatalogBundleFinding`), guarded; none by default.
23
+ * - demos and media: NONE in 0.10 — a demo must carry the jz-mask-v1 + synthetic-data attestation,
24
+ * which jevitate cannot make yet, and the contract says a producer that cannot meet it exports no
25
+ * media. So no `demos`, no `files`.
26
+ * - `generatedAt` is left out on purpose: the same catalog gives the same bytes, so the upload's
27
+ * `Idempotency-Key` (sha256 of bundle.json) dedupes a re-publish.
28
+ *
29
+ * Failure policy: personal data or a credential typed in clear anywhere, or a job the bundle cannot
30
+ * carry (a structural reference problem, text that is not one line), REFUSES the export
31
+ * (`CatalogBundleInputError`, exit 64) — nothing is guessed or silently rewritten. A Journey or a
32
+ * check the bundle cannot carry is LEFT OUT with a warning (nothing else references it in a way the
33
+ * reader would refuse). A persona key the bundle cannot carry drops that key and the persona's
34
+ * approval (its hash could not recompute) with a warning.
35
+ */
36
+ // ── The bundle (catalog-bundle.v1.json), as jevitate produces it ─────────────────────────────
37
+ export const BUNDLE_KIND = "journeeze.catalog-bundle";
38
+ export const BUNDLE_VERSION = 1;
39
+ /** The schema minor this producer is built against (contract 61f8c92). */
40
+ export const BUNDLE_MINOR = 0;
41
+ export const CHECK_TARGET_KINDS = ["journey", "goal", "mission", "invariant", "verify_fix", "regression"];
42
+ /** The catalog cannot be exported as it is (personal data, a credential typed in clear, a job the bundle cannot carry) — exit 64. */
43
+ export class CatalogBundleInputError extends CatalogInputError {
44
+ issues;
45
+ code = "E_CATALOG_EXPORT_INPUT";
46
+ constructor(issues) {
47
+ super(`the catalog cannot be exported as a Journeeze bundle (${issues.length} problem(s)): ${issues.join("; ")}`);
48
+ this.issues = issues;
49
+ }
50
+ }
51
+ // ── The contract's text and id rules (catalog-bundle.v1.json $defs) ──────────────────────────
52
+ const CATALOG_ID_RE = /^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/;
53
+ const TARGET_ID_RE = /^[A-Za-z0-9_.-]{1,64}$/;
54
+ const SHA256_RE = /^[0-9a-f]{64}$/;
55
+ const COMMIT_RE = /^[0-9a-f]{7,40}$/;
56
+ const SEMVER_RE = /^[0-9]+\.[0-9]+\.[0-9]+([-+][0-9A-Za-z.-]{1,40})?$/;
57
+ const DATE_TIME_RE = /^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}(\.[0-9]{1,9})?(Z|[+-][0-9]{2}:[0-9]{2})$/;
58
+ const RUN_ID_RE = /^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/;
59
+ const FAILURE_KIND_RE = /^[a-z][a-z0-9-]{0,63}$/;
60
+ const OTHER_FIELD_KEY_RE = /^[A-Za-z][A-Za-z0-9_]{0,63}$/;
61
+ const ONE_LINE_RE = /^(?=.*\S)[^\u0000-\u001f\u007f]+$/u;
62
+ const PERSONAL_DATA_RES = [/[^\s@/]+@[^\s@/]+\.[A-Za-z]{2,}/u, /[0-9]{9,}/u];
63
+ const URL_RES = [/:\/\//u, /(?:^|[^A-Za-z0-9])[Ww][Ww][Ww]\./u];
64
+ const RECORD_ID_RES = [
65
+ /[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}/u,
66
+ /(?<![0-9A-Za-z])(?=[0-9a-fA-F]*[0-9])[0-9a-fA-F]{8,}(?![0-9A-Za-z])/u,
67
+ /[0-9]{6,}/u,
68
+ ];
69
+ const ROUTE_TEMPLATE_RE = /^(\/(\{[A-Za-z][A-Za-z0-9_]{0,63}\}|[A-Za-z0-9._~-]+))*\/?$/u;
70
+ const TFLOW_ID_RE = /^[a-z0-9._:-]{1,96}$/u;
71
+ const FINGERPRINT_RE = /^[0-9a-f]{16}$/u;
72
+ const APPROVAL_CHANNELS = new Set(["tty", "mcp", "ci", "non-interactive", "pr-review", "other"]);
73
+ const RESERVED = new Set(RESERVED_ANCHORS);
74
+ const SESSION_KEYS = new Set(["storageState", "login"]);
75
+ const PERSONA_NAMED_KEYS = new Set(["id", "name", "description", "role", "approval", "storageState", "login"]);
76
+ const MAX_MS = 86_400_000;
77
+ const MAX_STEP = 200;
78
+ const LIMITS = { personas: 200, jobs: 500, journeys: 1000, checks: 5000, findings: 5000 };
79
+ /** Looks like personal data (an email, or 9+ digits) — the contract's `noPersonalData`. */
80
+ export function looksPersonal(s) {
81
+ return PERSONAL_DATA_RES.some((re) => re.test(s));
82
+ }
83
+ /** The contract's `catalogText`: one printable line, no personal data. */
84
+ function catalogTextProblem(s) {
85
+ if (typeof s !== "string")
86
+ return "is not text";
87
+ if (!ONE_LINE_RE.test(s))
88
+ return "is not one printable line";
89
+ if (looksPersonal(s))
90
+ return "looks like personal data (an email or 9+ digits)";
91
+ return null;
92
+ }
93
+ /** The contract's `machineText`: `catalogText`, and no URL and no record id. */
94
+ function machineTextProblem(s, max) {
95
+ const p = catalogTextProblem(s);
96
+ if (p !== null)
97
+ return p;
98
+ const t = s;
99
+ if (t.length > max)
100
+ return `is longer than ${max} characters`;
101
+ if (URL_RES.some((re) => re.test(t)))
102
+ return "carries a URL";
103
+ if (RECORD_ID_RES.some((re) => re.test(t)))
104
+ return "carries a record id";
105
+ return null;
106
+ }
107
+ /** The contract's `routeTemplate`: a path template — no query string, fragment, host or record id. */
108
+ export function isRouteTemplate(route) {
109
+ return route.length >= 1 && route.length <= 256 && ROUTE_TEMPLATE_RE.test(route) && !RECORD_ID_RES.some((re) => re.test(route));
110
+ }
111
+ function isRecord(v) {
112
+ return v !== null && typeof v === "object" && !Array.isArray(v);
113
+ }
114
+ /** A deep copy through JSON — exactly what the reader sees (and hashes). */
115
+ function asJson(v) {
116
+ return JSON.parse(JSON.stringify(v));
117
+ }
118
+ /** A catalog approval in the contract's shape; null when it cannot be carried (`at` not a date-time). */
119
+ function bundleApproval(a) {
120
+ if (!SHA256_RE.test(a.contentHash) || !DATE_TIME_RE.test(a.at))
121
+ return null;
122
+ const channel = a.provenance?.channel;
123
+ return { contentHash: a.contentHash, at: a.at, ...(channel !== undefined && APPROVAL_CHANNELS.has(channel) ? { channel } : {}) };
124
+ }
125
+ // ── Personas ─────────────────────────────────────────────────────────────────────────────────
126
+ function bundlePersonas(input, refuse, warn) {
127
+ return input.catalog.personas.map((p) => {
128
+ const fields = input.personaFields.get(p.id) ?? {};
129
+ const where = `persona ${p.id}`;
130
+ const dropped = [];
131
+ const text = (key, max) => {
132
+ const v = fields[key];
133
+ if (typeof v !== "string")
134
+ return undefined;
135
+ if (looksPersonal(v)) {
136
+ refuse.push(`${where}: ${key} looks like personal data (an email or 9+ digits)`);
137
+ return undefined;
138
+ }
139
+ if (catalogTextProblem(v) !== null || v.length > max) {
140
+ dropped.push(key);
141
+ return undefined;
142
+ }
143
+ return v;
144
+ };
145
+ const description = text("description", 2000);
146
+ const role = text("role", 200);
147
+ const otherFields = {};
148
+ for (const [k, v] of Object.entries(fields)) {
149
+ if (PERSONA_NAMED_KEYS.has(k) || SESSION_KEYS.has(k))
150
+ continue;
151
+ if (typeof v === "string" && looksPersonal(v)) {
152
+ refuse.push(`${where}: ${k} looks like personal data (an email or 9+ digits)`);
153
+ continue;
154
+ }
155
+ const scalar = (typeof v === "string" && v.length <= 1000) || (typeof v === "number" && Number.isFinite(v)) || typeof v === "boolean";
156
+ if (!OTHER_FIELD_KEY_RE.test(k) || !scalar) {
157
+ dropped.push(k);
158
+ continue;
159
+ }
160
+ otherFields[k] = v;
161
+ }
162
+ if (Object.keys(otherFields).length > 20) {
163
+ dropped.push(...Object.keys(otherFields).slice(20));
164
+ for (const k of Object.keys(otherFields).slice(20))
165
+ delete otherFields[k];
166
+ }
167
+ let approval = p.approval === undefined ? null : bundleApproval(p.approval);
168
+ if (dropped.length > 0) {
169
+ warn.push(`${where}: ${dropped.join(", ")} cannot travel in the bundle (one line of text; other keys: a simple name and a short text, number or boolean) — left out${p.approval === undefined ? "" : ", and so is its approval (its hash could not recompute)"}`);
170
+ approval = null;
171
+ }
172
+ else if (p.approval !== undefined && approval === null) {
173
+ warn.push(`${where}: its approval's time is not an ISO date-time — exported without its approval`);
174
+ }
175
+ return {
176
+ id: p.id,
177
+ ...(description === undefined ? {} : { description }),
178
+ ...(role === undefined ? {} : { role }),
179
+ ...(Object.keys(otherFields).length === 0 ? {} : { otherFields }),
180
+ ...(approval === null ? {} : { approval }),
181
+ };
182
+ });
183
+ }
184
+ // ── Jobs ─────────────────────────────────────────────────────────────────────────────────────
185
+ function jobTextIssues(job) {
186
+ const out = [];
187
+ const catalogText = (path, v) => {
188
+ if (v === undefined)
189
+ return;
190
+ const p = catalogTextProblem(v);
191
+ if (p !== null)
192
+ out.push(`${path} ${p}`);
193
+ };
194
+ const personal = (path, v) => {
195
+ if (typeof v === "string" && looksPersonal(v))
196
+ out.push(`${path} looks like personal data (an email or 9+ digits)`);
197
+ };
198
+ for (const k of ["trigger", "motivation", "outcome"])
199
+ catalogText(k, job[k]);
200
+ for (const k of ["context", "constraints"])
201
+ if (Array.isArray(job[k]))
202
+ job[k].forEach((v, i) => catalogText(`${k}[${i}]`, v));
203
+ if (Array.isArray(job.steps))
204
+ job.steps.forEach((s, i) => isRecord(s) && catalogText(`steps[${i}].name`, s.name));
205
+ if (Array.isArray(job.desiredOutcomes)) {
206
+ job.desiredOutcomes.forEach((o, i) => {
207
+ if (!isRecord(o))
208
+ return;
209
+ catalogText(`desiredOutcomes[${i}].object`, o.object);
210
+ catalogText(`desiredOutcomes[${i}].clarifier`, o.clarifier);
211
+ });
212
+ }
213
+ personal("goal", job.goal);
214
+ for (const k of ["success", "preconditions"])
215
+ if (Array.isArray(job[k]))
216
+ job[k].forEach((v, i) => personal(`${k}[${i}]`, v));
217
+ return out;
218
+ }
219
+ function bundleJobs(input, refuse, warn) {
220
+ const { catalog } = input;
221
+ return catalog.jobs.map((j) => {
222
+ const { approval: _a, ...rest } = asJson(j.job);
223
+ for (const issue of jobTextIssues(rest))
224
+ refuse.push(`job ${j.id}: ${issue}`);
225
+ for (const issue of jobRefIssues(catalog, j.id, { enforce: true }))
226
+ if (issue.severity === "error")
227
+ refuse.push(describeRefIssue(issue));
228
+ let approval = null;
229
+ if (j.approval !== undefined) {
230
+ approval = bundleApproval(j.approval);
231
+ if (approval === null)
232
+ warn.push(`job ${j.id}: its approval's time is not an ISO date-time — exported without its approval`);
233
+ }
234
+ return { ...rest, id: j.id, ...(approval === null ? {} : { approval }) };
235
+ });
236
+ }
237
+ // ── Journeys ─────────────────────────────────────────────────────────────────────────────────
238
+ /** Every `{redacted:false, value}` under `node`, with its path — the typed values kept in clear. */
239
+ function clearValues(node, path, out, secretField = false) {
240
+ if (Array.isArray(node)) {
241
+ node.forEach((v, i) => clearValues(v, `${path}[${i}]`, out, secretField));
242
+ return;
243
+ }
244
+ if (!isRecord(node))
245
+ return;
246
+ // A step whose target reads as a credential (password, token, otp, …): its literal is a secret.
247
+ const target = node.target;
248
+ const secretHere = isRecord(target) && ["name", "label", "testId", "text"].some((k) => typeof target[k] === "string" && SECRET_PARAM_NAME_RE.test(target[k]));
249
+ if (node.redacted === false && typeof node.value === "string")
250
+ out.push({ path, value: node.value, secretField });
251
+ for (const [k, v] of Object.entries(node))
252
+ clearValues(v, `${path}.${k}`, out, k === "value" ? secretHere || secretField : secretField);
253
+ }
254
+ /** Journey approval bookkeeping (outside the review hash) keeps only the channel and agent markers: no OS user, reason or reviewer. */
255
+ function trimProvenance(v) {
256
+ if (Array.isArray(v))
257
+ return v.map(trimProvenance);
258
+ if (!isRecord(v))
259
+ return v;
260
+ const out = {};
261
+ for (const [k, x] of Object.entries(v)) {
262
+ if (k === "provenance" && isRecord(x))
263
+ out[k] = { channel: x.channel, agentSignals: Array.isArray(x.agentSignals) ? x.agentSignals : [] };
264
+ else
265
+ out[k] = trimProvenance(x);
266
+ }
267
+ return out;
268
+ }
269
+ /** Why a promoted Journey cannot travel in the bundle, or null when it can (with its link). */
270
+ function journeyLink(catalog, cj) {
271
+ const m = cj.journey.metadata;
272
+ if (!CATALOG_ID_RE.test(m.id))
273
+ return { omit: "its id is not a bundle id (1-64 of [A-Za-z0-9._-])" };
274
+ if (m.name.length < 1 || m.name.length > 200)
275
+ return { omit: "its name is not 1-200 characters" };
276
+ if (m.persona !== undefined) {
277
+ if (!CATALOG_ID_RE.test(m.persona))
278
+ return { omit: `metadata.persona ${JSON.stringify(m.persona)} is free text — the bundle needs a persona id from personas.json` };
279
+ if (findPersona(catalog, m.persona) === undefined)
280
+ return { omit: `metadata.persona '${m.persona}' is not a persona in personas.json` };
281
+ }
282
+ if (m.job !== undefined && findJob(catalog, m.job) === undefined)
283
+ return { omit: `metadata.job '${m.job}' is not a job in jobs.json` };
284
+ const structural = journeyRefIssues(catalog, cj, { enforce: true }).filter((i) => i.severity === "error");
285
+ if (structural.length > 0)
286
+ return { omit: structural.map(describeRefIssue).join("; ") };
287
+ const flat = flatJourneySteps(cj.journey);
288
+ const anchors = [];
289
+ for (const a of m.anchors ?? []) {
290
+ if (!CATALOG_ID_RE.test(a.name) || RESERVED.has(a.name))
291
+ return { omit: `anchor '${a.name}' is not a bundle anchor name (1-64 of [A-Za-z0-9._-], never job_start/job_end)` };
292
+ if (a.stepId !== undefined) {
293
+ const at = flat.findIndex((s) => s.recorded.stepId === a.stepId);
294
+ if (at < 0)
295
+ return { omit: `anchor '${a.name}' names stepId '${a.stepId}', which no step has` };
296
+ if (at + 1 !== a.step)
297
+ return { omit: `anchor '${a.name}': step ${a.step}, but its stepId '${a.stepId}' is step ${at + 1} — re-save the Journey so they agree` };
298
+ }
299
+ if (a.step > flat.length || a.step > MAX_STEP)
300
+ return { omit: `anchor '${a.name}': step ${a.step} is not one of its ${flat.length} steps (at most ${MAX_STEP})` };
301
+ if (m.job === undefined)
302
+ continue;
303
+ anchors.push({ name: a.name, step: a.step, ...(a.jobStep === undefined ? {} : { jobStep: a.jobStep }), ...(a.boundary === undefined ? {} : { boundary: a.boundary }) });
304
+ }
305
+ if (m.job === undefined)
306
+ return {};
307
+ return {
308
+ link: {
309
+ job: m.job,
310
+ ...(m.persona === undefined ? {} : { persona: m.persona }),
311
+ ...(anchors.length === 0 ? {} : { anchors }),
312
+ ...(m.serves === undefined || m.serves.length === 0 ? {} : { serves: [...m.serves] }),
313
+ },
314
+ };
315
+ }
316
+ function bundleJourneys(catalog, refuse, warn) {
317
+ const out = [];
318
+ for (const cj of catalog.journeys) {
319
+ if (!cj.promoted) {
320
+ warn.push(`journey ${cj.id}: not promoted — left out (only promoted Journeys are exported)`);
321
+ continue;
322
+ }
323
+ const clear = [];
324
+ clearValues(cj.journey, "", clear);
325
+ for (const c of clear) {
326
+ if (c.secretField)
327
+ refuse.push(`journey ${cj.id}: ${c.path.slice(1)} types a credential-looking field in clear — make it a secret parameter`);
328
+ else if (looksPersonal(c.value))
329
+ refuse.push(`journey ${cj.id}: ${c.path.slice(1)} types personal data in clear (an email or 9+ digits) — use a parameter or a synthetic value`);
330
+ }
331
+ const linked = journeyLink(catalog, cj);
332
+ if ("omit" in linked) {
333
+ warn.push(`journey ${cj.id}: ${linked.omit} — left out`);
334
+ continue;
335
+ }
336
+ const file = asJson(cj.journey);
337
+ if (file.metadata.approval !== undefined)
338
+ file.metadata.approval = trimProvenance(file.metadata.approval);
339
+ out.push({ cj, entry: { journey: file, ...(linked.link === undefined ? {} : { link: linked.link }) } });
340
+ }
341
+ return out;
342
+ }
343
+ // ── Checks ───────────────────────────────────────────────────────────────────────────────────
344
+ const VERIFY_FIX_OUTCOME = {
345
+ fixed: "clean",
346
+ "still-reproduces": "defects-found",
347
+ intermittent: "intermittent",
348
+ inconclusive: "inconclusive",
349
+ };
350
+ const TARGET_KIND = { journey: "journey", goal: "goal", mission: "mission", "verify-fix": "verify_fix" };
351
+ function kebab(s) {
352
+ return s
353
+ .replace(/^E_/, "")
354
+ .replace(/([a-z0-9])([A-Z])/g, "$1-$2")
355
+ .replace(/[^A-Za-z0-9]+/g, "-")
356
+ .replace(/^-+|-+$/g, "")
357
+ .toLowerCase()
358
+ .slice(0, 64);
359
+ }
360
+ /** A check item's canonical outcome (+ the Journey run's own ending, + why it is inconclusive). */
361
+ function itemOutcome(item) {
362
+ const raw = typeof item.outcome === "string" ? item.outcome : undefined;
363
+ const errorType = isRecord(item.error) && typeof item.error.type === "string" ? item.error.type : undefined;
364
+ if (item.verdict === "pending-review")
365
+ return { outcome: "pending-review", journeyOutcome: "healed-pending-review" };
366
+ if (raw !== undefined && JOURNEY_RUN_OUTCOMES.includes(raw)) {
367
+ const jo = raw;
368
+ return { outcome: JOURNEY_MISSION_OUTCOME[jo], journeyOutcome: jo };
369
+ }
370
+ if (raw !== undefined && MISSION_OUTCOMES.includes(raw)) {
371
+ const outcome = raw;
372
+ const kind = errorType !== undefined && errorType !== raw && outcome === "inconclusive" ? kebab(errorType) : "";
373
+ return { outcome, ...(FAILURE_KIND_RE.test(kind) ? { failureKind: kind } : {}) };
374
+ }
375
+ if (raw !== undefined && item.kind === "verify-fix" && VERIFY_FIX_OUTCOME[raw] !== undefined)
376
+ return { outcome: VERIFY_FIX_OUTCOME[raw] };
377
+ // `not-started`, `host-starved`, an item error with no verdict: inconclusive, and why (contract §12.3).
378
+ if (item.status === "error" || raw !== undefined) {
379
+ const why = kebab(raw ?? errorType ?? "error");
380
+ if (why === "crashed")
381
+ return { outcome: "crashed" };
382
+ return { outcome: "inconclusive", ...(FAILURE_KIND_RE.test(why) && why !== "inconclusive" ? { failureKind: why } : {}) };
383
+ }
384
+ return null;
385
+ }
386
+ function bundleTargetId(name) {
387
+ const id = name.replace(/[^A-Za-z0-9_.-]+/g, "-").slice(0, 64);
388
+ return TARGET_ID_RE.test(id) ? id : null;
389
+ }
390
+ function intMs(v) {
391
+ if (typeof v !== "number" || !Number.isFinite(v) || v < 0)
392
+ return null;
393
+ const ms = Math.round(v);
394
+ return ms <= MAX_MS ? ms : null;
395
+ }
396
+ function bundleBaseline(raw, journey) {
397
+ if (!isRecord(raw))
398
+ return { drop: "it is not a baseline record" };
399
+ const steps = raw.steps;
400
+ const totalMs = intMs(raw.totalMs);
401
+ if (typeof steps !== "number" || !Number.isInteger(steps) || steps < 1 || steps > MAX_STEP)
402
+ return { drop: `its step count ${String(steps)} is not 1-${MAX_STEP}` };
403
+ if (totalMs === null)
404
+ return { drop: "its total time is not 0-86400000 ms" };
405
+ const flat = flatJourneySteps(journey);
406
+ const anchors = [];
407
+ for (const a of Array.isArray(raw.anchors) ? raw.anchors : []) {
408
+ if (!isRecord(a) || typeof a.name !== "string")
409
+ return { drop: "an anchor point has no name" };
410
+ if (!CATALOG_ID_RE.test(a.name))
411
+ return { drop: `anchor point '${a.name}' is not a bundle anchor name` };
412
+ let step;
413
+ if (typeof a.stepId === "string") {
414
+ const at = flat.findIndex((s) => s.recorded.stepId === a.stepId);
415
+ if (at >= 0)
416
+ step = at + 1;
417
+ }
418
+ if (step === undefined && typeof a.step === "number" && Number.isInteger(a.step))
419
+ step = a.step;
420
+ if (step === undefined && a.name === "job_start")
421
+ step = 1;
422
+ if (step === undefined && a.name === "job_end")
423
+ step = steps;
424
+ if (step === undefined || step < 1 || step > MAX_STEP)
425
+ return { drop: `anchor point '${a.name}' has no step` };
426
+ const atMs = intMs(a.atMs);
427
+ if (atMs === null)
428
+ return { drop: `anchor point '${a.name}': its time is not 0-86400000 ms` };
429
+ anchors.push({ anchor: a.name, step, atMs });
430
+ }
431
+ if (anchors.length > MAX_STEP + 2)
432
+ return { drop: "it has more anchor points than the bundle carries" };
433
+ return { baseline: { steps, totalMs, anchors } };
434
+ }
435
+ function bundleChecks(input, journeys, warn) {
436
+ const byId = new Map(journeys.map((j) => [j.cj.id, j.cj]));
437
+ const out = new Map();
438
+ for (const { source, record } of input.checks) {
439
+ const data = isRecord(record) && isRecord(record.data) ? record.data : record;
440
+ if (!isRecord(data) || data.kind !== "jevitate-check" || !Array.isArray(data.items)) {
441
+ warn.push(`${source}: not a jevitate check record — left out`);
442
+ continue;
443
+ }
444
+ const commit = typeof data.targetBuild === "string" ? data.targetBuild.trim().toLowerCase() : "";
445
+ if (!COMMIT_RE.test(commit)) {
446
+ warn.push(`${source}: the check names no commit (run it with --target-build <commit sha>) — its items are left out`);
447
+ continue;
448
+ }
449
+ const at = typeof data.startedAt === "string" ? data.startedAt : "";
450
+ if (!DATE_TIME_RE.test(at)) {
451
+ warn.push(`${source}: the check's start time is not an ISO date-time — its items are left out`);
452
+ continue;
453
+ }
454
+ const checkRunId = `check-${at.replace(/[^0-9A-Za-z]+/g, "-").replace(/-+$/, "")}`;
455
+ for (const item of data.items) {
456
+ if (!isRecord(item) || item.kind === "approvals" || item.status === "skipped")
457
+ continue;
458
+ const name = typeof item.name === "string" ? item.name : "";
459
+ const label = `${source}: item ${JSON.stringify(name)}`;
460
+ const id = bundleTargetId(name);
461
+ const outcome = itemOutcome(item);
462
+ if (id === null || outcome === null) {
463
+ warn.push(`${label}: ${id === null ? "its name is not a bundle target id" : `outcome ${JSON.stringify(item.outcome)} is not one the bundle knows`} — left out`);
464
+ continue;
465
+ }
466
+ const kind = typeof item.kind === "string" ? TARGET_KIND[item.kind] : undefined;
467
+ const runId = typeof item.runId === "string" && RUN_ID_RE.test(item.runId) ? item.runId : checkRunId;
468
+ const journeyId = item.kind === "journey" && CATALOG_ID_RE.test(name) ? name : undefined;
469
+ const journeyHash = typeof item.journeyHash === "string" && SHA256_RE.test(item.journeyHash) ? item.journeyHash : undefined;
470
+ const durationMs = intMs(item.durationMs);
471
+ let baseline;
472
+ if (item.baseline !== undefined) {
473
+ const cj = journeyId === undefined ? undefined : byId.get(journeyId);
474
+ let why;
475
+ if (outcome.outcome !== "clean")
476
+ why = `the run was ${outcome.outcome}, and a baseline comes only from a clean run`;
477
+ else if (journeyId === undefined || journeyHash === undefined)
478
+ why = "the item names no Journey review hash";
479
+ else if (cj === undefined)
480
+ why = `Journey ${journeyId} is not in the bundle`;
481
+ else if (cj.approval?.contentHash !== journeyHash || cj.contentHash !== journeyHash)
482
+ why = `it was measured on a Journey revision (${journeyHash.slice(0, 12)}…) that is not ${journeyId}'s approved one`;
483
+ else {
484
+ const b = bundleBaseline(item.baseline, cj.journey);
485
+ if ("drop" in b)
486
+ why = b.drop;
487
+ else
488
+ baseline = b.baseline;
489
+ }
490
+ if (why !== undefined)
491
+ warn.push(`${label}: baseline left out — ${why}`);
492
+ }
493
+ const check = {
494
+ target: { id, ...(kind === undefined ? {} : { kind }) },
495
+ commit,
496
+ at,
497
+ runId,
498
+ ...(journeyId === undefined ? {} : { journey: journeyId }),
499
+ ...(journeyHash === undefined ? {} : { journeyHash }),
500
+ outcome: outcome.outcome,
501
+ exitCode: MISSION_EXIT_CODES[outcome.outcome],
502
+ ...(outcome.journeyOutcome === undefined ? {} : { journeyOutcome: outcome.journeyOutcome }),
503
+ ...(outcome.failureKind === undefined ? {} : { failureKind: outcome.failureKind }),
504
+ ...(durationMs === null ? {} : { durationMs }),
505
+ ...(baseline === undefined ? {} : { baseline }),
506
+ };
507
+ out.set(`${id}\u0000${commit}\u0000${runId}`, check);
508
+ }
509
+ }
510
+ return [...out.values()].sort((a, b) => a.at.localeCompare(b.at) || a.target.id.localeCompare(b.target.id) || (a.runId ?? "").localeCompare(b.runId ?? ""));
511
+ }
512
+ // ── Findings (the d464c hook's guard) ────────────────────────────────────────────────────────
513
+ /** Why a finding handed in by the d464c source breaks the contract's privacy rules (§7), or []. */
514
+ export function findingIssues(f) {
515
+ const out = [];
516
+ const where = `finding ${f.fingerprint}`;
517
+ if (!FINGERPRINT_RE.test(f.fingerprint))
518
+ out.push(`${where}: fingerprint is not 16 hex characters`);
519
+ if (f.route !== undefined && !isRouteTemplate(f.route))
520
+ out.push(`${where}: route ${JSON.stringify(f.route)} is not a route template (no query, fragment, host or record id)`);
521
+ if (f.tflowId !== undefined && !TFLOW_ID_RE.test(f.tflowId))
522
+ out.push(`${where}: tflowId is not a tflow id`);
523
+ const text = (k, v, max) => {
524
+ if (v === undefined)
525
+ return;
526
+ const p = machineTextProblem(v, max);
527
+ if (p !== null)
528
+ out.push(`${where}: ${k} ${p}`);
529
+ };
530
+ text("observation", f.observation, 600);
531
+ text("userImpact", f.userImpact, 600);
532
+ text("recommendation", f.recommendation, 600);
533
+ (f.controls ?? []).forEach((c, i) => text(`controls[${i}]`, c, 120));
534
+ return out;
535
+ }
536
+ // ── The bundle ───────────────────────────────────────────────────────────────────────────────
537
+ /** Builds the bundle (pure). Throws `CatalogBundleInputError` when the catalog cannot be exported. */
538
+ export function buildCatalogBundle(input) {
539
+ const refuse = [];
540
+ const warn = [];
541
+ if (!SEMVER_RE.test(input.producer.version))
542
+ refuse.push(`producer version ${JSON.stringify(input.producer.version)} is not semver`);
543
+ const nameProblem = catalogTextProblem(input.productName);
544
+ if (nameProblem !== null || input.productName.length > 200)
545
+ refuse.push(`product name ${JSON.stringify(input.productName)} ${nameProblem ?? "is longer than 200 characters"}`);
546
+ const personas = bundlePersonas(input, refuse, warn);
547
+ const jobs = bundleJobs(input, refuse, warn);
548
+ const journeys = bundleJourneys(input.catalog, refuse, warn);
549
+ const findings = input.findings ?? [];
550
+ for (const f of findings)
551
+ refuse.push(...findingIssues(f));
552
+ for (const [what, n] of [["personas", personas.length], ["jobs", jobs.length], ["journeys", journeys.length], ["findings", findings.length]]) {
553
+ if (n > LIMITS[what])
554
+ refuse.push(`${n} ${what}: the bundle carries at most ${LIMITS[what]}`);
555
+ }
556
+ if (refuse.length > 0)
557
+ throw new CatalogBundleInputError(refuse);
558
+ let checks = bundleChecks(input, journeys, warn);
559
+ if (checks.length > LIMITS.checks) {
560
+ warn.push(`${checks.length} check results: only the latest ${LIMITS.checks} are exported`);
561
+ checks = checks.slice(-LIMITS.checks);
562
+ }
563
+ const commit = input.producer.commit !== undefined && COMMIT_RE.test(input.producer.commit) ? input.producer.commit : undefined;
564
+ return {
565
+ bundle: {
566
+ kind: BUNDLE_KIND,
567
+ version: BUNDLE_VERSION,
568
+ minor: BUNDLE_MINOR,
569
+ producer: { tool: "jevitate", version: input.producer.version, ...(commit === undefined ? {} : { commit }) },
570
+ product: { name: input.productName },
571
+ catalog: { personas, jobs, journeys: journeys.map((j) => j.entry) },
572
+ checks,
573
+ findings: [...findings],
574
+ },
575
+ warnings: warn,
576
+ };
577
+ }
578
+ //# sourceMappingURL=catalog-bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog-bundle.js","sourceRoot":"","sources":["../src/catalog-bundle.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,12 @@
1
1
  import { Command } from "commander";
2
2
  import { type CliDeps } from "./cli-shared.js";
3
3
  import { type JevSetup } from "./jev-advisor.js";
4
+ /**
5
+ * #437/#469: `--allow-channels` help (catalog status; check uses the same text). `pr-review` is a channel a
6
+ * caller can ALLOW, never one it can claim: jevitate records it only after verifying the approving
7
+ * review through the forge API (in CI) — no flag or MCP argument sets it.
8
+ */
9
+ export declare const ALLOW_CHANNELS_HELP = "#437: with --require-approvals, the approval channels that pass (comma list of tty, non-interactive, mcp, ci, pr-review; default tty). #469: pr-review is recorded only by jevitate after it verifies an approving review of the merged PR through the forge API \u2014 never set by a caller";
4
10
  /** #434/#435: `--readiness` / `--real` / `--jev-provider` help. */
5
11
  export declare const READINESS_FLAG_HELP = "#434: add the Readiness section \u2014 deterministic checks with INCOSE GtWR rule findings, and (with --real and a judgment key) advisory Jev questions with probabilities";
6
12
  export declare const REAL_JEV_FLAG_HELP = "#434/#435: ask Jev (advisory; never blocks on its own) \u2014 readiness questions and catalog pair classifications, cached by content hash. Without a judgment key the Jev layer is skipped, the deterministic layer still runs";