@jevitate/cli 0.7.0 → 0.8.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 (220) hide show
  1. package/dist/ai-cli.d.ts +3 -1
  2. package/dist/ai-cli.js +60 -16
  3. package/dist/ai-cli.js.map +1 -1
  4. package/dist/approval-provenance.d.ts +120 -0
  5. package/dist/approval-provenance.js +300 -0
  6. package/dist/approval-provenance.js.map +1 -0
  7. package/dist/author-journey-cli.js +4 -2
  8. package/dist/author-journey-cli.js.map +1 -1
  9. package/dist/bin.js +29019 -22450
  10. package/dist/build-info.generated.js +2 -2
  11. package/dist/builtin-analyzers.d.ts +7 -0
  12. package/dist/builtin-analyzers.js +19 -0
  13. package/dist/builtin-analyzers.js.map +1 -0
  14. package/dist/campaign-cli.d.ts +6 -0
  15. package/dist/campaign-cli.js +9 -4
  16. package/dist/campaign-cli.js.map +1 -1
  17. package/dist/catalog-analysis.d.ts +70 -0
  18. package/dist/catalog-analysis.js +507 -0
  19. package/dist/catalog-analysis.js.map +1 -0
  20. package/dist/catalog-api.d.ts +73 -0
  21. package/dist/catalog-api.js +97 -0
  22. package/dist/catalog-api.js.map +1 -0
  23. package/dist/catalog-cli.d.ts +12 -0
  24. package/dist/catalog-cli.js +224 -0
  25. package/dist/catalog-cli.js.map +1 -0
  26. package/dist/catalog-review.d.ts +29 -0
  27. package/dist/catalog-review.js +290 -0
  28. package/dist/catalog-review.js.map +1 -0
  29. package/dist/catalog.d.ts +133 -0
  30. package/dist/catalog.js +352 -0
  31. package/dist/catalog.js.map +1 -0
  32. package/dist/check-api.js +24 -2
  33. package/dist/check-api.js.map +1 -1
  34. package/dist/check-cli.d.ts +3 -0
  35. package/dist/check-cli.js +18 -4
  36. package/dist/check-cli.js.map +1 -1
  37. package/dist/check-execute.js +25 -9
  38. package/dist/check-execute.js.map +1 -1
  39. package/dist/check-plan.js +4 -1
  40. package/dist/check-plan.js.map +1 -1
  41. package/dist/check-suite.js +6 -3
  42. package/dist/check-suite.js.map +1 -1
  43. package/dist/check-types.d.ts +12 -1
  44. package/dist/check-types.js.map +1 -1
  45. package/dist/cli-output.js +82 -4
  46. package/dist/cli-output.js.map +1 -1
  47. package/dist/cli-shared.d.ts +22 -2
  48. package/dist/cli-shared.js +34 -5
  49. package/dist/cli-shared.js.map +1 -1
  50. package/dist/demo-aspect-api.d.ts +15 -0
  51. package/dist/demo-aspect-api.js +26 -1
  52. package/dist/demo-aspect-api.js.map +1 -1
  53. package/dist/demo-aspect-cli.js +64 -5
  54. package/dist/demo-aspect-cli.js.map +1 -1
  55. package/dist/exit-codes.js +4 -0
  56. package/dist/exit-codes.js.map +1 -1
  57. package/dist/explore-adversarial.d.ts +3 -1
  58. package/dist/explore-adversarial.js +2 -2
  59. package/dist/explore-adversarial.js.map +1 -1
  60. package/dist/explore-author.js +5 -2
  61. package/dist/explore-author.js.map +1 -1
  62. package/dist/explore-cli.js +144 -9
  63. package/dist/explore-cli.js.map +1 -1
  64. package/dist/explore-coverage.d.ts +6 -2
  65. package/dist/explore-coverage.js +4 -3
  66. package/dist/explore-coverage.js.map +1 -1
  67. package/dist/explore-feature.d.ts +3 -1
  68. package/dist/explore-feature.js +2 -2
  69. package/dist/explore-feature.js.map +1 -1
  70. package/dist/explore-goal.d.ts +37 -6
  71. package/dist/explore-goal.js +61 -48
  72. package/dist/explore-goal.js.map +1 -1
  73. package/dist/explore-shared.d.ts +12 -7
  74. package/dist/explore-shared.js +9 -1
  75. package/dist/explore-shared.js.map +1 -1
  76. package/dist/goal-run-flags.d.ts +2 -0
  77. package/dist/goal-run-flags.js +8 -1
  78. package/dist/goal-run-flags.js.map +1 -1
  79. package/dist/http-5xx-outcome.d.ts +8 -3
  80. package/dist/http-5xx-outcome.js +5 -15
  81. package/dist/http-5xx-outcome.js.map +1 -1
  82. package/dist/init-cli.d.ts +7 -0
  83. package/dist/init-cli.js +79 -9
  84. package/dist/init-cli.js.map +1 -1
  85. package/dist/init-codeowners.d.ts +39 -0
  86. package/dist/init-codeowners.js +91 -0
  87. package/dist/init-codeowners.js.map +1 -0
  88. package/dist/init-keys.d.ts +3 -1
  89. package/dist/init-keys.js +20 -8
  90. package/dist/init-keys.js.map +1 -1
  91. package/dist/init-skills.d.ts +85 -7
  92. package/dist/init-skills.js +303 -36
  93. package/dist/init-skills.js.map +1 -1
  94. package/dist/jev-advisor.d.ts +72 -0
  95. package/dist/jev-advisor.js +172 -0
  96. package/dist/jev-advisor.js.map +1 -0
  97. package/dist/journey-api.d.ts +34 -2
  98. package/dist/journey-api.js +51 -20
  99. package/dist/journey-api.js.map +1 -1
  100. package/dist/journey-cli.js +156 -12
  101. package/dist/journey-cli.js.map +1 -1
  102. package/dist/journey-review-api.d.ts +19 -0
  103. package/dist/journey-review-api.js +46 -0
  104. package/dist/journey-review-api.js.map +1 -0
  105. package/dist/journey-review-store.d.ts +16 -0
  106. package/dist/journey-review-store.js +95 -0
  107. package/dist/journey-review-store.js.map +1 -0
  108. package/dist/journey-review.d.ts +47 -0
  109. package/dist/journey-review.js +499 -0
  110. package/dist/journey-review.js.map +1 -0
  111. package/dist/journey-verify.js +14 -1
  112. package/dist/journey-verify.js.map +1 -1
  113. package/dist/key-report.d.ts +20 -5
  114. package/dist/key-report.js +32 -9
  115. package/dist/key-report.js.map +1 -1
  116. package/dist/kill-signal.js +10 -2
  117. package/dist/kill-signal.js.map +1 -1
  118. package/dist/load-cli.js +4 -2
  119. package/dist/load-cli.js.map +1 -1
  120. package/dist/log-classes.d.ts +73 -0
  121. package/dist/log-classes.js +167 -0
  122. package/dist/log-classes.js.map +1 -0
  123. package/dist/log-correlation.d.ts +29 -10
  124. package/dist/log-correlation.js +44 -21
  125. package/dist/log-correlation.js.map +1 -1
  126. package/dist/login-cli.d.ts +15 -0
  127. package/dist/login-cli.js +116 -0
  128. package/dist/login-cli.js.map +1 -0
  129. package/dist/logs-cli.js +3 -1
  130. package/dist/logs-cli.js.map +1 -1
  131. package/dist/mcp-api.d.ts +1 -0
  132. package/dist/mcp-api.js +61 -12
  133. package/dist/mcp-api.js.map +1 -1
  134. package/dist/mcp-cli-runner.d.ts +2 -0
  135. package/dist/mcp-cli-runner.js +3 -1
  136. package/dist/mcp-cli-runner.js.map +1 -1
  137. package/dist/mcp-cli-tools.d.ts +5 -0
  138. package/dist/mcp-cli-tools.js +158 -23
  139. package/dist/mcp-cli-tools.js.map +1 -1
  140. package/dist/mission-cli.js +8 -4
  141. package/dist/mission-cli.js.map +1 -1
  142. package/dist/mission-journal.d.ts +4 -1
  143. package/dist/mission-journal.js +9 -3
  144. package/dist/mission-journal.js.map +1 -1
  145. package/dist/mission-queue-cli.js +21 -2
  146. package/dist/mission-queue-cli.js.map +1 -1
  147. package/dist/mission-queue-runner.d.ts +6 -0
  148. package/dist/mission-queue-runner.js +33 -3
  149. package/dist/mission-queue-runner.js.map +1 -1
  150. package/dist/multi-run-cli.d.ts +7 -1
  151. package/dist/multi-run-cli.js +10 -3
  152. package/dist/multi-run-cli.js.map +1 -1
  153. package/dist/multi-run.d.ts +38 -3
  154. package/dist/multi-run.js +115 -23
  155. package/dist/multi-run.js.map +1 -1
  156. package/dist/persona-login.d.ts +199 -0
  157. package/dist/persona-login.js +574 -0
  158. package/dist/persona-login.js.map +1 -0
  159. package/dist/pre-approval.d.ts +98 -0
  160. package/dist/pre-approval.js +175 -0
  161. package/dist/pre-approval.js.map +1 -0
  162. package/dist/program.js +10 -0
  163. package/dist/program.js.map +1 -1
  164. package/dist/project-dir.d.ts +2 -1
  165. package/dist/project-dir.js +3 -1
  166. package/dist/project-dir.js.map +1 -1
  167. package/dist/readiness.d.ts +29 -0
  168. package/dist/readiness.js +291 -0
  169. package/dist/readiness.js.map +1 -0
  170. package/dist/regression-cli.js +4 -2
  171. package/dist/regression-cli.js.map +1 -1
  172. package/dist/report-api.d.ts +24 -2
  173. package/dist/report-api.js +33 -5
  174. package/dist/report-api.js.map +1 -1
  175. package/dist/report-cli.js +8 -1
  176. package/dist/report-cli.js.map +1 -1
  177. package/dist/result-schema.d.ts +12 -0
  178. package/dist/result-schema.js +8 -0
  179. package/dist/result-schema.js.map +1 -1
  180. package/dist/run-index.d.ts +4 -2
  181. package/dist/run-index.js +3 -1
  182. package/dist/run-index.js.map +1 -1
  183. package/dist/run-key-preflight.d.ts +2 -1
  184. package/dist/run-key-preflight.js +3 -2
  185. package/dist/run-key-preflight.js.map +1 -1
  186. package/dist/run-metadata.d.ts +26 -0
  187. package/dist/run-metadata.js +41 -0
  188. package/dist/run-metadata.js.map +1 -0
  189. package/dist/run-tags-cli.d.ts +12 -0
  190. package/dist/run-tags-cli.js +35 -0
  191. package/dist/run-tags-cli.js.map +1 -0
  192. package/dist/site-cli.d.ts +1 -1
  193. package/dist/site-cli.js +24 -1
  194. package/dist/site-cli.js.map +1 -1
  195. package/dist/source-cli.js +4 -2
  196. package/dist/source-cli.js.map +1 -1
  197. package/dist/suite-explore-options.d.ts +14 -0
  198. package/dist/suite-explore-options.js +7 -0
  199. package/dist/suite-explore-options.js.map +1 -1
  200. package/dist/sweep-api.d.ts +266 -0
  201. package/dist/sweep-api.js +828 -0
  202. package/dist/sweep-api.js.map +1 -0
  203. package/dist/sweep-cli.d.ts +9 -0
  204. package/dist/sweep-cli.js +115 -0
  205. package/dist/sweep-cli.js.map +1 -0
  206. package/dist/target-config.d.ts +5 -2
  207. package/dist/target-config.js +15 -0
  208. package/dist/target-config.js.map +1 -1
  209. package/dist/ux-cli.js +3 -1
  210. package/dist/ux-cli.js.map +1 -1
  211. package/dist/ux-usability.d.ts +9 -3
  212. package/dist/ux-usability.js +5 -3
  213. package/dist/ux-usability.js.map +1 -1
  214. package/dist/verify-fix-cli.js +4 -2
  215. package/dist/verify-fix-cli.js.map +1 -1
  216. package/package.json +12 -12
  217. package/skills/jevitate-demo/SKILL.md +5 -2
  218. package/skills/jevitate-getting-started/SKILL.md +12 -0
  219. package/skills/jevitate-run-journey/SKILL.md +17 -4
  220. package/skills/jevitate-test-campaign/SKILL.md +26 -5
@@ -0,0 +1,507 @@
1
+ import { contentHash } from "@jevitate/domain";
2
+ import { CatalogAnalysisSchema, GTWR_SET_CHARACTERISTICS, PAIR_RELATIONS, } from "@jevitate/journey";
3
+ import { catalogJourney, findJob, findPersona, journeyLinks, personaLinkId } from "./catalog.js";
4
+ import { buildCatalogStatus, renderAnalysisGroups } from "./catalog-review.js";
5
+ import { buildJourneyReview } from "./journey-review.js";
6
+ import { readVerifyRecord } from "./journey-review-store.js";
7
+ import { JEV_SKIPPED_PASS_REAL, jevLayerOf } from "./jev-advisor.js";
8
+ /**
9
+ * #435 — catalog analysis: problems BETWEEN items (conflicts, duplicates, overlaps, gaps, drift),
10
+ * grouped by the INCOSE Guide to Writing Requirements' set characteristics (complete, consistent,
11
+ * feasible, comprehensible, able to be validated, correct).
12
+ *
13
+ * - Candidate pairs are chosen by CODE, so cost is bounded (never O(n²) model calls): jobs that
14
+ * share a persona or trigger/outcome terms; Journeys whose expected writes (the #432 sheet's) hit
15
+ * the same resource, flagged when the methods oppose (create vs delete, enable vs disable) or
16
+ * when they do the same job as the same persona; personas with the same role or largely the same
17
+ * jobs. Each pair records why it was paired.
18
+ * - Jev classifies each judged pair as a typed Choice (compatible | duplicate | overlapping |
19
+ * conflicting | dependent) with a probability. The one-line reason is built by code from the two
20
+ * items' own text and the pairing evidence — never model prose.
21
+ * - The acknowledgment rule is code over the typed answer: on an APPROVAL, a `conflicting` or
22
+ * `duplicate` classification with probability ≥ `CONFLICT_ACK_THRESHOLD` on a pair involving the
23
+ * item being approved requires `--accept-findings "<reason>"`. Everything else is informational,
24
+ * and the on-demand `catalog analyze` never gates anything.
25
+ * - Per approval only the item's own pairs are judged, at most `APPROVAL_PAIR_CAP` of them; the
26
+ * rest are listed as overflow (never silently dropped). Answers are cached by content hash
27
+ * (jev-advisor.ts), so re-approving an unchanged item asks nothing new.
28
+ * - It only READS: it never writes a catalog file, a Journey or an approval.
29
+ */
30
+ export const CATALOG_ANALYSIS = "catalog-analysis";
31
+ /** A `conflicting` / `duplicate` classification at or above this probability needs an acknowledgment to approve. */
32
+ export const CONFLICT_ACK_THRESHOLD = 0.7;
33
+ /** The most candidate pairs judged before one approval (the rest are reported as overflow). */
34
+ export const APPROVAL_PAIR_CAP = 8;
35
+ /** The default most candidate pairs judged by `catalog analyze` (`--max-pairs`). */
36
+ export const ANALYZE_PAIR_CAP = 50;
37
+ // ── Text helpers ─────────────────────────────────────────────────────────────────────────────
38
+ const STOPWORDS = new Set(("a an the and or but of to in on at by for from with without into onto over under about as is are was were be been being it its this that these those i me my mine we us our " +
39
+ "you your they them their he she his her when want wants can could would should will so then than there here what which who whom whose how why where not no yes do does done " +
40
+ "did have has had get gets got make makes made need needs new some any all each every one more most other just also only very want able").split(" "));
41
+ /** The significant terms of a text: lowercase words of 3+ letters, stopwords dropped, a plural `s` folded. */
42
+ export function significantTerms(text) {
43
+ const out = new Set();
44
+ for (const raw of text.toLowerCase().split(/[^a-z0-9]+/)) {
45
+ if (raw.length < 3 || STOPWORDS.has(raw) || /^\d+$/.test(raw))
46
+ continue;
47
+ out.add(raw.length > 4 && raw.endsWith("s") && !raw.endsWith("ss") ? raw.slice(0, -1) : raw);
48
+ }
49
+ return out;
50
+ }
51
+ function intersect(a, b) {
52
+ return [...a].filter((x) => b.has(x));
53
+ }
54
+ function jaccard(a, b) {
55
+ const both = intersect(a, b).length;
56
+ const either = new Set([...a, ...b]).size;
57
+ return either === 0 ? 0 : both / either;
58
+ }
59
+ function quote(s, max = 120) {
60
+ const t = s.trim().replace(/\s+/g, " ");
61
+ return `"${t.length > max ? `${t.slice(0, max - 1)}…` : t}"`;
62
+ }
63
+ // ── Write resources (Journeys) ───────────────────────────────────────────────────────────────
64
+ const OPPOSITE_ACTIONS = {
65
+ enable: "disable", disable: "enable", publish: "unpublish", unpublish: "publish", archive: "unarchive", unarchive: "archive",
66
+ lock: "unlock", unlock: "lock", follow: "unfollow", unfollow: "follow", subscribe: "unsubscribe", unsubscribe: "subscribe",
67
+ block: "unblock", unblock: "block", activate: "deactivate", deactivate: "activate", share: "unshare", unshare: "share",
68
+ approve: "reject", reject: "approve", open: "close", close: "open", start: "stop", stop: "start",
69
+ };
70
+ const OPPOSING_METHODS = new Set(["POST|DELETE", "DELETE|POST", "PUT|DELETE", "DELETE|PUT", "PATCH|DELETE", "DELETE|PATCH"]);
71
+ const ID_SEGMENT = /^(\d+|[0-9a-f]{8,}|[0-9a-f-]{36}|:[\w-]+|\{[^}]*\}|\*{1,2}|\[[^\]]*\])$/i;
72
+ /** #435: a write request's resource: the path without ids, wildcards and a trailing action verb. */
73
+ export function writeResource(method, endpoint) {
74
+ let path = endpoint.trim();
75
+ try {
76
+ if (/^https?:\/\//i.test(path))
77
+ path = new URL(path).pathname;
78
+ }
79
+ catch {
80
+ // not a URL: read it as a path
81
+ }
82
+ path = path.split(/[?#]/)[0] ?? "";
83
+ const segments = path.split("/").filter((s) => s !== "" && !ID_SEGMENT.test(s));
84
+ const last = segments[segments.length - 1]?.toLowerCase();
85
+ const action = last !== undefined && OPPOSITE_ACTIONS[last] !== undefined ? last : undefined;
86
+ if (action !== undefined)
87
+ segments.pop();
88
+ return { method: method.toUpperCase(), endpoint, resource: `/${segments.join("/").toLowerCase()}`, ...(action === undefined ? {} : { action }) };
89
+ }
90
+ function journeyWrites(j) {
91
+ const seen = new Set();
92
+ const out = [];
93
+ for (const w of buildJourneyReview(j.journey).sideEffects.writeRequests) {
94
+ const ref = writeResource(w.method, w.endpoint);
95
+ const key = `${ref.method} ${ref.resource} ${ref.action ?? ""}`;
96
+ if (seen.has(key) || ref.resource === "/")
97
+ continue;
98
+ seen.add(key);
99
+ out.push(ref);
100
+ }
101
+ return out;
102
+ }
103
+ function itemsOf(catalog) {
104
+ return [
105
+ ...catalog.jobs.map((j) => ({ ref: `job:${j.id}`, kind: "job", id: j.id, vetted: j.status === "approved", hash: j.contentHash, text: j.story })),
106
+ ...catalog.personas.map((p) => ({
107
+ ref: `persona:${p.id}`,
108
+ kind: "persona",
109
+ id: p.id,
110
+ vetted: p.status === "approved",
111
+ hash: p.contentHash,
112
+ text: `${p.id}${p.role === undefined ? "" : ` (role: ${p.role})`}: ${p.description ?? "no description"}`,
113
+ })),
114
+ ...catalog.journeys.map((j) => ({ ref: `journey:${j.id}`, kind: "journey", id: j.id, vetted: j.promoted, hash: j.contentHash, text: journeyText(j, catalog) })),
115
+ ];
116
+ }
117
+ function journeyText(j, catalog) {
118
+ const job = j.job === undefined ? undefined : findJob(catalog, j.job);
119
+ const persona = personaLinkId(catalog, j);
120
+ const writes = journeyWrites(j).map((w) => `${w.method} ${w.endpoint}`);
121
+ return `${j.name}${job === undefined ? "" : ` — job: ${job.story}`}${persona === undefined ? "" : ` — as ${persona}`}${j.journey.metadata.goal === undefined ? "" : ` — goal: ${j.journey.metadata.goal}`}${writes.length === 0 ? "" : ` — writes: ${writes.join(", ")}`}`;
122
+ }
123
+ function jobPairs(catalog) {
124
+ const out = [];
125
+ const jobs = catalog.jobs;
126
+ const terms = new Map(jobs.map((j) => [j.id, { trigger: significantTerms(j.job.trigger), outcome: significantTerms(j.job.outcome) }]));
127
+ for (let i = 0; i < jobs.length; i++) {
128
+ for (let k = i + 1; k < jobs.length; k++) {
129
+ const a = jobs[i];
130
+ const b = jobs[k];
131
+ const reasons = [];
132
+ const shared = a.personas.filter((p) => b.personas.includes(p));
133
+ if (shared.length > 0)
134
+ reasons.push(`both serve persona ${shared.map((p) => `'${p}'`).join(", ")}`);
135
+ const ta = terms.get(a.id);
136
+ const tb = terms.get(b.id);
137
+ const all = (t) => new Set([...t.trigger, ...t.outcome]);
138
+ const common = intersect(all(ta), all(tb));
139
+ if (common.length >= 2 || (common.length === 1 && jaccard(all(ta), all(tb)) >= 0.3))
140
+ reasons.push(`shared trigger/outcome terms: ${common.sort().join(", ")}`);
141
+ if (reasons.length > 0)
142
+ out.push({ a: `job:${a.id}`, b: `job:${b.id}`, kind: "job", reasons });
143
+ }
144
+ }
145
+ return out;
146
+ }
147
+ function personaPairs(catalog) {
148
+ const out = [];
149
+ const ps = catalog.personas;
150
+ const jobsOf = (id) => new Set(catalog.jobs.filter((j) => j.personas.includes(id)).map((j) => j.id));
151
+ for (let i = 0; i < ps.length; i++) {
152
+ for (let k = i + 1; k < ps.length; k++) {
153
+ const a = ps[i];
154
+ const b = ps[k];
155
+ const reasons = [];
156
+ if (a.role !== undefined && b.role !== undefined && a.role.trim() !== "" && a.role.trim().toLowerCase() === b.role.trim().toLowerCase())
157
+ reasons.push(`same account role '${a.role.trim()}'`);
158
+ const ja = jobsOf(a.id);
159
+ const jb = jobsOf(b.id);
160
+ const common = intersect(ja, jb);
161
+ if (common.length > 0 && jaccard(ja, jb) >= 0.5)
162
+ reasons.push(`largely the same jobs: ${common.sort().join(", ")}`);
163
+ if (reasons.length > 0)
164
+ out.push({ a: `persona:${a.id}`, b: `persona:${b.id}`, kind: "persona", reasons });
165
+ }
166
+ }
167
+ return out;
168
+ }
169
+ function journeyPairs(catalog) {
170
+ const out = [];
171
+ const js = catalog.journeys;
172
+ const writes = new Map(js.map((j) => [j.id, journeyWrites(j)]));
173
+ for (let i = 0; i < js.length; i++) {
174
+ for (let k = i + 1; k < js.length; k++) {
175
+ const a = js[i];
176
+ const b = js[k];
177
+ const reasons = [];
178
+ const pa = personaLinkId(catalog, a);
179
+ if (a.job !== undefined && a.job === b.job && pa !== undefined && pa === personaLinkId(catalog, b))
180
+ reasons.push(`both do job '${a.job}' as persona '${pa}'`);
181
+ const seen = new Set();
182
+ for (const wa of writes.get(a.id)) {
183
+ for (const wb of writes.get(b.id)) {
184
+ if (wa.resource !== wb.resource)
185
+ continue;
186
+ let why;
187
+ if (OPPOSING_METHODS.has(`${wa.method}|${wb.method}`))
188
+ why = `opposing writes on ${wa.resource}: ${wa.method} ${wa.endpoint} vs ${wb.method} ${wb.endpoint}`;
189
+ else if (wa.action !== undefined && wb.action !== undefined && OPPOSITE_ACTIONS[wa.action] === wb.action)
190
+ why = `opposing writes on ${wa.resource}: ${wa.action} vs ${wb.action}`;
191
+ else
192
+ why = `both write ${wa.resource} (${wa.method} ${wa.endpoint}, ${wb.method} ${wb.endpoint})`;
193
+ if (!seen.has(why)) {
194
+ seen.add(why);
195
+ reasons.push(why);
196
+ }
197
+ }
198
+ }
199
+ if (reasons.length > 0)
200
+ out.push({ a: `journey:${a.id}`, b: `journey:${b.id}`, kind: "journey", reasons });
201
+ }
202
+ }
203
+ return out;
204
+ }
205
+ /** #435: every candidate pair of the catalog, each with why code paired it. */
206
+ export function candidatePairs(catalog) {
207
+ return [...jobPairs(catalog), ...personaPairs(catalog), ...journeyPairs(catalog)];
208
+ }
209
+ /** The catalog an approval sees: the Journey being approved as it will be approved (demo approve annotates first). */
210
+ export function withJourney(catalog, journey) {
211
+ if (journey === undefined)
212
+ return catalog;
213
+ const others = catalog.journeys.filter((j) => j.id !== journey.id);
214
+ return { ...catalog, journeys: [...others, journey].sort((x, y) => x.id.localeCompare(y.id)) };
215
+ }
216
+ // ── Jev classification ───────────────────────────────────────────────────────────────────────
217
+ const RELATION_MEANING = {
218
+ compatible: "both can hold together; neither repeats nor contradicts the other",
219
+ duplicate: "they describe the same job (or the same user, or the same flow)",
220
+ overlapping: "one contains the other, or they largely cover the same ground",
221
+ conflicting: "their outcomes cannot both hold (for the same user and data), or they leave the app in contradictory states",
222
+ dependent: "one must happen before the other",
223
+ };
224
+ const RELATION_CHARACTERISTIC = {
225
+ compatible: "consistent",
226
+ duplicate: "consistent",
227
+ overlapping: "consistent",
228
+ conflicting: "consistent",
229
+ dependent: "comprehensible",
230
+ };
231
+ const RELATION_ACTION = {
232
+ compatible: undefined,
233
+ duplicate: "merge them, or retire one",
234
+ overlapping: "split or reword them so one does not contain the other",
235
+ conflicting: "reword one so both can hold, or scope them to different users or data",
236
+ dependent: "state the order: make the earlier one a precondition of the later",
237
+ };
238
+ function pairQuestion(kind) {
239
+ const what = kind === "job" ? "job stories" : kind === "persona" ? "personas" : "Journeys (recorded user flows)";
240
+ return {
241
+ relation: {
242
+ kind: "choice",
243
+ options: PAIR_RELATIONS,
244
+ descriptions: RELATION_MEANING,
245
+ instructions: `How do these two ${what} (A and B) relate? Answer only from their text.`,
246
+ },
247
+ };
248
+ }
249
+ function pairState(pair, a, b) {
250
+ return {
251
+ goal: `Classify how two catalog ${pair.kind}s relate`,
252
+ url: "about:catalog",
253
+ controls: [],
254
+ history: [],
255
+ visibleText: [`A (${a.ref}): ${a.text}`, `B (${b.ref}): ${b.text}`, `Paired because: ${pair.reasons.join("; ")}`].join("\n"),
256
+ };
257
+ }
258
+ function relationOf(a) {
259
+ if (a === undefined || a.kind !== "choice" || !PAIR_RELATIONS.includes(a.value))
260
+ return undefined;
261
+ return { relation: a.value, probability: Math.min(1, Math.max(0, a.confidence)) };
262
+ }
263
+ function f(code, severity, message, characteristic, extra = {}) {
264
+ return {
265
+ analyzer: CATALOG_ANALYSIS,
266
+ code,
267
+ severity,
268
+ message,
269
+ ...(extra.fix === undefined ? {} : { fix: extra.fix }),
270
+ requiresAcknowledgment: extra.ack === true,
271
+ ...(extra.items === undefined || extra.items.length === 0 ? {} : { items: extra.items }),
272
+ characteristic,
273
+ ...(extra.probability === undefined ? {} : { probability: extra.probability }),
274
+ };
275
+ }
276
+ function involves(ref, pair) {
277
+ return pair.a === ref || pair.b === ref;
278
+ }
279
+ function completeness(catalog, subjectRef) {
280
+ const out = [];
281
+ const status = buildCatalogStatus(catalog);
282
+ for (const p of catalog.personas) {
283
+ if (subjectRef !== undefined && subjectRef !== `persona:${p.id}`)
284
+ continue;
285
+ if (!catalog.jobs.some((j) => j.status === "approved" && j.personas.includes(p.id))) {
286
+ out.push(f(`gap.persona-no-approved-job:${p.id}`, "warn", `persona '${p.id}' has no approved job`, "complete", { fix: `write or approve a job that serves it (jevitate job approve <id>)`, items: [`persona:${p.id}`] }));
287
+ }
288
+ }
289
+ for (const id of status.approvedJobsWithoutPromotedJourney) {
290
+ if (subjectRef !== undefined && subjectRef !== `job:${id}`)
291
+ continue;
292
+ out.push(f(`gap.job-no-promoted-journey:${id}`, "warn", `approved job '${id}' has no promoted Journey`, "complete", { fix: "add a Journey that does it (explore-author-journey, record) and promote it", items: [`job:${id}`] }));
293
+ }
294
+ if (subjectRef?.startsWith("job:") === true) {
295
+ const id = subjectRef.slice(4);
296
+ const job = findJob(catalog, id);
297
+ for (const pid of job?.personas ?? []) {
298
+ if (!catalog.jobs.some((j) => j.id !== id && j.status === "approved" && j.personas.includes(pid))) {
299
+ out.push(f(`fills.persona:${pid}`, "info", `approving job '${id}' gives persona '${pid}' its first approved job`, "complete", { items: [`persona:${pid}`] }));
300
+ }
301
+ }
302
+ }
303
+ if (subjectRef?.startsWith("journey:") === true) {
304
+ const j = catalog.journeys.find((x) => `journey:${x.id}` === subjectRef);
305
+ const pid = j === undefined ? undefined : personaLinkId(catalog, j);
306
+ if (j?.job !== undefined && pid !== undefined) {
307
+ const covered = catalog.journeys.some((x) => x.id !== j.id && x.promoted && x.job === j.job && personaLinkId(catalog, x) === pid);
308
+ out.push(covered
309
+ ? f("coverage.already-covered", "info", `job '${j.job}' as persona '${pid}' already has another promoted Journey — check this one adds something (see the pairs above)`, "consistent", { items: [`job:${j.job}`, `persona:${pid}`] })
310
+ : f("coverage.fills-gap", "info", `promoting it covers job '${j.job}' as persona '${pid}', which has no other promoted Journey`, "complete", { items: [`job:${j.job}`, `persona:${pid}`] }));
311
+ }
312
+ }
313
+ return out;
314
+ }
315
+ async function updateAdvice(catalog, subjectRef) {
316
+ const out = [];
317
+ const status = buildCatalogStatus(catalog);
318
+ for (const s of status.stale) {
319
+ const ref = `${s.kind}:${s.id}`;
320
+ if (subjectRef !== undefined && subjectRef !== ref)
321
+ continue;
322
+ out.push(f(`update.stale:${ref}`, "warn", `consider re-reviewing ${s.kind} '${s.id}' because ${s.reason}`, "correct", { fix: `jevitate ${s.kind} review ${s.id}`, items: [ref] }));
323
+ }
324
+ for (const d of status.danglingLinks) {
325
+ if (subjectRef !== undefined && subjectRef !== `journey:${d.journey}`)
326
+ continue;
327
+ out.push(f(`update.dangling:${d.journey}`, "warn", `consider updating journey '${d.journey}' because it links ${d.kind} '${d.id}', which the catalog does not declare`, "correct", { items: [`journey:${d.journey}`, `${d.kind}:${d.id}`] }));
328
+ }
329
+ if (catalog.journeysDir === undefined)
330
+ return out;
331
+ // The last recorded result of a promoted Journey: its mutation proof (`.verify/<id>.json`).
332
+ for (const j of catalog.journeys) {
333
+ if (!j.promoted)
334
+ continue;
335
+ const links = journeyLinks(catalog, j);
336
+ const related = [`journey:${j.id}`, ...(links.job === undefined ? [] : [`job:${links.job.id}`]), ...(links.persona === undefined ? [] : [`persona:${links.persona.id}`])];
337
+ if (subjectRef !== undefined && !related.includes(subjectRef))
338
+ continue;
339
+ const rec = await readVerifyRecord(catalog.journeysDir, j.id);
340
+ if (rec === null || rec.verdict === "proven")
341
+ continue;
342
+ const current = rec.contentHash === j.contentHash;
343
+ out.push(f(`update.proof:${j.id}`, "warn", `consider updating journey '${j.id}'${links.job === undefined ? "" : ` (job '${links.job.id}')`} because its last mutation proof is ${rec.verdict} (${rec.at}${current ? "" : ", on an older version"})${rec.reason === undefined ? "" : `: ${rec.reason}`}`, rec.verdict === "insensitive" ? "able to be validated" : "feasible", { fix: `jevitate journey verify ${j.id} --mutate, then fix the Journey or its job`, items: related }));
344
+ }
345
+ return out;
346
+ }
347
+ async function suggestMissingJobs(catalog, subjectRef, setup) {
348
+ if (setup === undefined || !("advisor" in setup))
349
+ return [];
350
+ const out = [];
351
+ for (const p of catalog.personas) {
352
+ if (subjectRef !== undefined && subjectRef !== `persona:${p.id}`)
353
+ continue;
354
+ const jobs = catalog.jobs.filter((j) => j.personas.includes(p.id));
355
+ if (jobs.length === 0)
356
+ continue; // the deterministic gap already says so
357
+ const state = {
358
+ goal: "Judge whether this persona's job list is complete",
359
+ url: "about:catalog",
360
+ controls: [],
361
+ history: [],
362
+ visibleText: [`Persona '${p.id}'${p.role === undefined ? "" : ` (role: ${p.role})`}: ${p.description ?? "no description"}`, ...jobs.map((j) => `Job ${j.id}: ${j.story}`)].join("\n"),
363
+ };
364
+ const questions = { complete: { kind: "noul", instructions: "Do these jobs cover what this kind of user obviously needs to do with the product (no obvious job missing)?" } };
365
+ try {
366
+ const { answers } = await setup.advisor.ask(state, questions);
367
+ const a = answers.complete;
368
+ const prob = a?.kind === "noul" ? a.probability : undefined;
369
+ if (prob !== undefined && prob < 0.5) {
370
+ out.push(f(`suggest.missing-jobs:${p.id}`, "info", `persona '${p.id}' may be missing jobs (a suggestion, never created): its ${jobs.length} job(s) may not cover what this user obviously needs`, "complete", { probability: prob, items: [`persona:${p.id}`], fix: "consider adding the job(s) this user needs to .jevitate/jobs.json" }));
371
+ }
372
+ }
373
+ catch (err) {
374
+ out.push(f(`jev.failed:missing-jobs:${p.id}`, "warn", `Jev could not judge persona '${p.id}''s job list: ${err instanceof Error ? err.message : String(err)}`, "complete"));
375
+ }
376
+ }
377
+ return out;
378
+ }
379
+ function pairFinding(pair, a, b, subjectRef, gate) {
380
+ const items = [pair.a, pair.b];
381
+ const other = subjectRef === undefined ? `${pair.a}~${pair.b}` : pair.a === subjectRef ? pair.b : pair.a;
382
+ const c = pair.classification;
383
+ if (c === undefined) {
384
+ return f(`pair:${other}`, "info", `candidate pair ${pair.a} and ${pair.b} (${pair.reasons.join("; ")}) — not classified`, "consistent", { items });
385
+ }
386
+ const gating = (c.relation === "conflicting" || c.relation === "duplicate") && c.probability >= CONFLICT_ACK_THRESHOLD;
387
+ const ack = gate && gating && subjectRef !== undefined && involves(subjectRef, pair);
388
+ const severity = gating ? "fail" : c.relation === "compatible" || c.relation === "dependent" ? "info" : "warn";
389
+ const action = RELATION_ACTION[c.relation];
390
+ return f(`${c.relation}:${other}`, severity, `${c.relation}: ${a.ref} and ${b.ref} — ${c.reason}`, RELATION_CHARACTERISTIC[c.relation], {
391
+ items,
392
+ probability: c.probability,
393
+ ...(action === undefined ? {} : { fix: action }),
394
+ ack,
395
+ });
396
+ }
397
+ function pairReason(pair, a, b) {
398
+ return `${quote(a.text)} vs ${quote(b.text)} (paired: ${pair.reasons.join("; ")})`;
399
+ }
400
+ function refOfSubject(s) {
401
+ return `${s.kind}:${s.id}`;
402
+ }
403
+ /**
404
+ * #435: the catalog analysis — of the whole catalog (`catalog analyze`), or incrementally of the
405
+ * item being approved/reviewed (`opts.subject`: only its pairs, only advice involving it). Never writes.
406
+ */
407
+ export async function analyzeCatalog(catalog, opts = {}) {
408
+ const subjectRef = opts.subject === undefined ? undefined : refOfSubject(opts.subject);
409
+ const cap = Math.max(1, opts.pairCap ?? (subjectRef === undefined ? ANALYZE_PAIR_CAP : APPROVAL_PAIR_CAP));
410
+ const items = new Map(itemsOf(catalog).map((i) => [i.ref, i]));
411
+ const all = candidatePairs(catalog).filter((p) => subjectRef === undefined || involves(subjectRef, p));
412
+ // Judge first what matters most: pairs with an approved/promoted item, then the best-evidenced.
413
+ const vetted = (p) => Number(items.get(p.a)?.vetted === true) + Number(items.get(p.b)?.vetted === true);
414
+ const ranked = all.map((p, i) => ({ p, i })).sort((x, y) => vetted(y.p) - vetted(x.p) || y.p.reasons.length - x.p.reasons.length || x.i - y.i).map(({ p }) => p);
415
+ const judged = ranked.slice(0, cap);
416
+ const overflow = ranked.slice(cap);
417
+ const setup = opts.jev;
418
+ const advisor = setup !== undefined && "advisor" in setup ? setup.advisor : undefined;
419
+ const findings = [];
420
+ const pairs = [];
421
+ for (const pair of judged) {
422
+ const a = items.get(pair.a);
423
+ const b = items.get(pair.b);
424
+ let classified = pair;
425
+ if (advisor !== undefined) {
426
+ try {
427
+ const { answers, cached } = await advisor.ask(pairState(pair, a, b), pairQuestion(pair.kind));
428
+ const rel = relationOf(answers.relation);
429
+ if (rel !== undefined)
430
+ classified = { ...pair, classification: { ...rel, reason: pairReason(pair, a, b), cached } };
431
+ }
432
+ catch (err) {
433
+ findings.push(f(`jev.failed:${pair.a}~${pair.b}`, "warn", `Jev could not classify ${pair.a} and ${pair.b}: ${err instanceof Error ? err.message : String(err)} — listed unclassified`, "consistent", { items: [pair.a, pair.b] }));
434
+ }
435
+ }
436
+ pairs.push(classified);
437
+ findings.push(pairFinding(classified, a, b, subjectRef, opts.gate === true));
438
+ }
439
+ if (overflow.length > 0) {
440
+ findings.push(f("pairs.overflow", "warn", `${overflow.length} more candidate pair(s) were not judged (cap ${cap}): ${overflow.map((p) => `${p.a}~${p.b}`).join(", ")}`, "consistent", {
441
+ fix: subjectRef === undefined ? "raise --max-pairs, or analyze again after resolving the judged pairs" : "run `jevitate catalog analyze --real` to judge them all",
442
+ items: [...new Set(overflow.flatMap((p) => [p.a, p.b]))],
443
+ }));
444
+ }
445
+ if (advisor === undefined && judged.length > 0) {
446
+ findings.push(f("jev.skipped", "info", `Jev classification skipped: ${setup !== undefined && "skipped" in setup ? setup.skipped : JEV_SKIPPED_PASS_REAL} — the candidate pairs are listed unclassified`, "consistent"));
447
+ }
448
+ findings.push(...completeness(catalog, subjectRef));
449
+ findings.push(...(await updateAdvice(catalog, subjectRef)));
450
+ findings.push(...(await suggestMissingJobs(catalog, subjectRef, setup)));
451
+ const groups = GTWR_SET_CHARACTERISTICS.map((characteristic) => ({ characteristic, findings: findings.filter((x) => x.characteristic === characteristic) })).filter((g) => g.findings.length > 0);
452
+ const report = CatalogAnalysisSchema.parse({
453
+ scope: opts.subject === undefined ? { kind: "catalog" } : { kind: opts.subject.kind, id: opts.subject.id },
454
+ catalogHash: contentHash([...items.values()].map((i) => [i.ref, i.hash]).sort()),
455
+ threshold: CONFLICT_ACK_THRESHOLD,
456
+ pairCap: cap,
457
+ pairs,
458
+ overflow,
459
+ groups,
460
+ jev: jevLayerOf(setup),
461
+ });
462
+ return { report, findings };
463
+ }
464
+ /** #435: the incremental analysis before every approval (and in every review sheet). */
465
+ export const catalogAnalysisAnalyzer = {
466
+ id: CATALOG_ANALYSIS,
467
+ appliesTo: ["persona", "job", "journey"],
468
+ async analyze(subject, catalog, ctx) {
469
+ const view = subject.kind === "journey" && ctx.journey !== undefined ? withJourney(catalog, catalogJourney(ctx.journey)) : catalog;
470
+ const known = subject.kind === "journey" ? view.journeys.some((j) => j.id === subject.id) : subject.kind === "job" ? findJob(view, subject.id) !== undefined : findPersona(view, subject.id) !== undefined;
471
+ if (!known)
472
+ return [];
473
+ const { findings } = await analyzeCatalog(view, { subject, ...(ctx.jev === undefined ? {} : { jev: ctx.jev }), gate: ctx.action !== "review" });
474
+ return findings;
475
+ },
476
+ };
477
+ // ── Rendering ────────────────────────────────────────────────────────────────────────────────
478
+ /** #435: `jevitate catalog analyze` as text or Markdown. */
479
+ export function renderCatalogAnalysis(r, style) {
480
+ const md = style === "markdown";
481
+ const h1 = (s) => (md ? `# ${s}` : `${s}\n${"=".repeat(s.length)}`);
482
+ const h2 = (s) => (md ? `## ${s}` : s.toUpperCase());
483
+ const li = (s) => `${md ? "" : " "}- ${s}`;
484
+ const all = r.groups.flatMap((g) => g.findings);
485
+ const jev = r.jev.status === "skipped" ? `skipped — ${r.jev.reason ?? ""}` : `ran — ${r.jev.asked} question(s) asked, ${r.jev.cached} answered from the cache`;
486
+ const out = [
487
+ h1("Catalog analysis"),
488
+ "",
489
+ `Catalog hash: ${r.catalogHash}`,
490
+ `Jev classification (advisory): ${jev}`,
491
+ `Candidate pairs: ${r.pairs.length} judged (cap ${r.pairCap})${r.overflow.length === 0 ? "" : `, ${r.overflow.length} over the cap (listed, not judged)`}`,
492
+ `Acknowledgment threshold (on approval): conflicting / duplicate at p ≥ ${r.threshold}`,
493
+ "",
494
+ h2("Candidate pairs"),
495
+ "",
496
+ ...(r.pairs.length === 0
497
+ ? [li("none")]
498
+ : r.pairs.map((p) => li(`${p.a} ~ ${p.b}: ${p.classification === undefined ? "unclassified" : `${p.classification.relation} (p=${p.classification.probability.toFixed(2)}${p.classification.cached ? ", cached" : ""})`} — paired: ${p.reasons.join("; ")}`))),
499
+ ...(r.overflow.length === 0 ? [] : ["", h2("Over the cap (not judged)"), "", ...r.overflow.map((p) => li(`${p.a} ~ ${p.b} — paired: ${p.reasons.join("; ")}`))]),
500
+ "",
501
+ h2("Findings by GtWR set characteristic"),
502
+ "",
503
+ ...(all.length === 0 ? [li("none")] : renderAnalysisGroups(all, style)),
504
+ ];
505
+ return `${out.join("\n").replace(/\n{3,}/g, "\n\n").trimEnd()}\n`;
506
+ }
507
+ //# sourceMappingURL=catalog-analysis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog-analysis.js","sourceRoot":"","sources":["../src/catalog-analysis.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ import type { CatalogApproval, Finding, Journey, JourneyApprovalWaiver, AcceptedFindings } from "@jevitate/journey";
2
+ import { type Catalog } from "./catalog.js";
3
+ import type { JevSetup } from "./jev-advisor.js";
4
+ import { type ApprovalConfirm } from "./approval-provenance.js";
5
+ /**
6
+ * #433 — the approvals of the catalog (`persona approve`, `job approve`: a person's act, CLI only)
7
+ * and the catalog gate every Journey approval (`journey promote`, `demo approve`) passes.
8
+ */
9
+ /** The catalog's directory: `--dir`, else the CLI's seam, else the project's `.jevitate/` (null outside a project). */
10
+ export declare function resolveCatalogDir(seam: string | undefined, flag?: string): string | null;
11
+ /** Loads the catalog of a project data dir and a journeys dir. */
12
+ export declare function loadCatalog(catalogDir: string | null, journeysDir: string): Promise<Catalog>;
13
+ /** The journeys directory of a catalog `--dir` (its `journeys/`), else the CLI's default. */
14
+ export declare function catalogJourneysDir(flag: string | undefined, fallback: string): string;
15
+ /** `persona|job approve --reviewed-hash`: the item changed after the reviewer's sheet was produced. */
16
+ export declare class StaleCatalogReviewError extends Error {
17
+ readonly code = "E_CATALOG_REVIEW_STALE";
18
+ }
19
+ export interface CatalogApproveOptions {
20
+ /** The content hash of the sheet the reviewer read; refused when the item changed since. */
21
+ readonly reviewedHash?: string;
22
+ /** `--accept-findings "<reason>"`: acknowledges findings that require it (recorded with the approval). */
23
+ readonly acceptFindings?: string;
24
+ /** #434/#435: the advisory Jev layer of the pre-approval readiness and analysis (`--real`), or why it is skipped. */
25
+ readonly jev?: JevSetup;
26
+ /**
27
+ * #437: confirms the approval (after the findings gate, before the write) and returns its
28
+ * provenance (the CLI's `makeApprovalConfirm`). Omitted: recorded as `non-interactive`.
29
+ */
30
+ readonly confirm?: ApprovalConfirm;
31
+ }
32
+ export interface CatalogApproveResult {
33
+ readonly kind: "persona" | "job";
34
+ readonly id: string;
35
+ readonly approval: CatalogApproval;
36
+ /** The status before this approval (`draft` or `stale` — or `approved`, re-approved unchanged). */
37
+ readonly previousStatus: "draft" | "approved" | "stale";
38
+ readonly findings: readonly Finding[];
39
+ readonly file: string;
40
+ }
41
+ /**
42
+ * #433: approves a persona or a job — bound to its content hash, after the shared pre-approval
43
+ * pipeline (`preApprovalFindings` + the acknowledgment rule). A human act: never an MCP tool.
44
+ */
45
+ export declare function approveCatalogItem(kind: "persona" | "job", catalog: Catalog, id: string, opts?: CatalogApproveOptions): Promise<CatalogApproveResult>;
46
+ /** #433: `journey promote` of a Journey whose linked job/persona is not approved, without `--accept-unvetted`. */
47
+ export declare class UnvettedLinksError extends Error {
48
+ readonly unvetted: readonly string[];
49
+ readonly code = "E_JOURNEY_UNVETTED";
50
+ constructor(message: string, unvetted: readonly string[]);
51
+ }
52
+ export interface JourneyCatalogGateOptions {
53
+ readonly catalogDir: string | null;
54
+ readonly journeysDir: string;
55
+ readonly action: "journey promote" | "demo approve";
56
+ /** `--accept-unvetted "<reason>"`: promote although a linked job/persona is not approved (recorded). */
57
+ readonly acceptUnvetted?: string;
58
+ readonly acceptFindings?: string;
59
+ /** #434/#435: the advisory Jev layer (`--real`), or why it is skipped. */
60
+ readonly jev?: JevSetup;
61
+ }
62
+ export interface JourneyCatalogGate {
63
+ readonly waivers?: JourneyApprovalWaiver[];
64
+ readonly acceptedFindings?: AcceptedFindings;
65
+ readonly findings: readonly Finding[];
66
+ }
67
+ /**
68
+ * #433: the catalog gate of a Journey approval. A Journey linking a job or a catalog persona needs
69
+ * each linked item approved (an unknown, draft or stale one is "unvetted"), or a recorded waiver
70
+ * (`--accept-unvetted "<reason>"` → `approval.waivers`). An unlinked Journey passes (opt-in). Then
71
+ * the shared pre-approval pipeline and its acknowledgment rule (`--accept-findings`).
72
+ */
73
+ export declare function journeyCatalogGate(journey: Journey, opts: JourneyCatalogGateOptions): Promise<JourneyCatalogGate>;