@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,291 @@
1
+ import { GTWR_RULES, checkJobStory, checkPersona } from "@jevitate/journey";
2
+ import { catalogJourney, findJob, findPersona, journeyLinks } from "./catalog.js";
3
+ import { buildJourneyReview } from "./journey-review.js";
4
+ import { readVerifyRecord } from "./journey-review-store.js";
5
+ import { JEV_SKIPPED_PASS_REAL } from "./jev-advisor.js";
6
+ /**
7
+ * #434 — the Readiness section of every review sheet (`journey|job|persona review --readiness`, and
8
+ * every approval: `persona approve`, `job approve`, `journey promote`, `demo approve`), as two
9
+ * pre-approval analyzers kept visibly apart:
10
+ *
11
+ * 1. `readiness` — deterministic checks, each pass / warn / fail with a fix-it line: the links
12
+ * exist and are approved, the intent is complete, the lint passes, the mutation proof is known
13
+ * and current; a job's story parts; and the INCOSE GtWR writing rules (gtwr-rules.ts) on job
14
+ * stories and personas, each citing its rule id and characteristic. Blocking stays with the
15
+ * gates that already exist (lint errors → `--accept-weak`, unapproved links →
16
+ * `--accept-unvetted`, broken links → the catalog-links acknowledgment), so readiness never
17
+ * double-gates: none of its findings requires an acknowledgment.
18
+ * 2. `readiness-jev` — advisory Jev questions (typed Noul answers, each with its probability)
19
+ * through the judgment gateway. A low probability becomes "not ready because … (GtWR:
20
+ * <characteristic>)". Jev never decides: none of these findings requires an acknowledgment, and
21
+ * none changes an exit code. Without an advisor (no `--real`, no key) it reports why it skipped.
22
+ */
23
+ export const READINESS = "readiness";
24
+ export const READINESS_JEV = "readiness-jev";
25
+ /** A Jev probability below this is "not ready because …". */
26
+ export const READINESS_LOW_PROBABILITY = 0.5;
27
+ function finding(analyzer, code, severity, message, extra = {}) {
28
+ return {
29
+ analyzer,
30
+ code,
31
+ severity,
32
+ message,
33
+ ...(extra.fix === undefined ? {} : { fix: extra.fix }),
34
+ requiresAcknowledgment: false,
35
+ ...(extra.items === undefined || extra.items.length === 0 ? {} : { items: extra.items }),
36
+ ...(extra.characteristic === undefined ? {} : { characteristic: extra.characteristic }),
37
+ ...(extra.probability === undefined ? {} : { probability: extra.probability }),
38
+ };
39
+ }
40
+ const check = (code, severity, message, extra = {}) => finding(READINESS, code, severity, severity === "info" ? `pass — ${message}` : message, extra);
41
+ // ── Deterministic: GtWR writing rules ────────────────────────────────────────────────────────
42
+ const RULE_TEXT = new Map(GTWR_RULES.map((r) => [r.id, r.description]));
43
+ /** #434: one GtWR rule finding as a readiness finding (`gtwr:<rule>@<field>`), citing the rule and characteristic. */
44
+ export function gtwrFinding(q) {
45
+ return finding(READINESS, `${q.ruleId}@${q.field}`, q.severity, `${q.field}: ${q.message} (rule ${q.ruleId}, GtWR: ${q.characteristic})`, {
46
+ fix: `reword the ${q.field} — ${RULE_TEXT.get(q.ruleId) ?? q.ruleId}`,
47
+ characteristic: q.characteristic,
48
+ });
49
+ }
50
+ // ── Deterministic: per subject ───────────────────────────────────────────────────────────────
51
+ function jobChecks(job, catalog) {
52
+ const out = [];
53
+ const missing = ["trigger", "motivation", "outcome"].filter((p) => job.job[p].trim() === "");
54
+ out.push(missing.length === 0
55
+ ? check("readiness.story", "info", "the job story has its trigger, motivation and outcome")
56
+ : check("readiness.story", "fail", `the job story is missing its ${missing.join(", ")}`, { fix: `write it as "When [trigger], I want to [motivation], so I can [outcome]."`, characteristic: "conforming" }));
57
+ if (job.personas.length === 0) {
58
+ out.push(check("readiness.personas", "warn", "it serves no persona", { fix: `add the persona ids it serves to its "personas"` }));
59
+ }
60
+ else {
61
+ const unknown = job.personas.filter((id) => findPersona(catalog, id) === undefined);
62
+ const unvetted = job.personas.filter((id) => {
63
+ const p = findPersona(catalog, id);
64
+ return p !== undefined && p.status !== "approved";
65
+ });
66
+ if (unknown.length > 0)
67
+ out.push(check("readiness.personas", "fail", `it serves persona(s) the catalog does not declare: ${unknown.join(", ")}`, { fix: "declare them in .jevitate/personas.json", items: unknown.map((id) => `persona:${id}`) }));
68
+ else if (unvetted.length > 0)
69
+ out.push(check("readiness.personas", "warn", `its persona(s) are not approved: ${unvetted.join(", ")}`, { fix: unvetted.map((id) => `jevitate persona approve ${id}`).join("; "), items: unvetted.map((id) => `persona:${id}`) }));
70
+ else
71
+ out.push(check("readiness.personas", "info", `every persona it serves is approved (${job.personas.join(", ")})`));
72
+ }
73
+ out.push(...checkJobStory(job.job).map(gtwrFinding));
74
+ return out;
75
+ }
76
+ function personaChecks(p, catalog) {
77
+ const out = [];
78
+ out.push((p.description ?? "").trim() === ""
79
+ ? check("readiness.description", "fail", "it has no description of who this user is", { fix: `add a "description" to the persona in .jevitate/personas.json`, characteristic: "conforming" })
80
+ : check("readiness.description", "info", "it describes who this user is"));
81
+ const jobs = catalog.jobs.filter((j) => j.personas.includes(p.id));
82
+ out.push(jobs.length === 0
83
+ ? check("readiness.jobs", "warn", "no job in the catalog serves it", { fix: `list it in a job's "personas" (.jevitate/jobs.json)` })
84
+ : check("readiness.jobs", "info", `${jobs.length} job(s) serve it (${jobs.map((j) => j.id).join(", ")})`));
85
+ out.push(...checkPersona({ ...(p.description === undefined ? {} : { description: p.description }), ...(p.role === undefined ? {} : { role: p.role }) }).map(gtwrFinding));
86
+ return out;
87
+ }
88
+ async function journeyChecks(j, catalog) {
89
+ const out = [];
90
+ const links = journeyLinks(catalog, j);
91
+ const id = j.id;
92
+ // 1. it links an existing job and persona
93
+ if (links.job === undefined || links.persona === undefined) {
94
+ out.push(check("readiness.links", "warn", `it links ${links.job === undefined && links.persona === undefined ? "no job and no persona" : links.job === undefined ? "no job" : "no persona"}`, {
95
+ fix: "set metadata.job and metadata.persona to catalog ids (.jevitate/jobs.json, .jevitate/personas.json)",
96
+ }));
97
+ }
98
+ else if (links.job.status === "unknown" || links.persona.status === "unknown") {
99
+ const dangling = [...(links.job.status === "unknown" ? [`job:${links.job.id}`] : []), ...(links.persona.status === "unknown" ? [`persona:${links.persona.id}`] : [])];
100
+ out.push(check("readiness.links", "fail", `it links item(s) the catalog does not declare: ${dangling.join(", ")}`, { fix: "fix metadata.job / metadata.persona, or declare them", items: dangling }));
101
+ }
102
+ else {
103
+ out.push(check("readiness.links", "info", `it links job '${links.job.id}' and persona '${links.persona.id}'`));
104
+ // 2. both are approved
105
+ out.push(links.unvetted.length === 0
106
+ ? check("readiness.links-approved", "info", "its job and persona are approved")
107
+ : check("readiness.links-approved", "warn", `not approved: ${links.unvetted.join(", ")}`, {
108
+ fix: "jevitate job|persona review/approve <id> (promote otherwise needs --accept-unvetted)",
109
+ items: links.unvetted.map((u) => u.replace(/ \(.*\)$/, "")),
110
+ }));
111
+ }
112
+ const lastVerify = catalog.journeysDir === undefined ? null : await readVerifyRecord(catalog.journeysDir, id);
113
+ const review = buildJourneyReview(j.journey, { lastVerify });
114
+ // 3. the intent is complete: goal, success criteria, each step's objective and expected result
115
+ const noExpected = review.steps.filter((s) => s.expectedResult === undefined).map((s) => s.number);
116
+ const gaps = [...review.summary.missingIntent, ...(noExpected.length === 0 ? [] : [`${noExpected.length} of ${review.steps.length} step(s) have no expected result (step ${noExpected.join(", ")})`])];
117
+ out.push(gaps.length === 0
118
+ ? check("readiness.intent", "info", "its goal, success criteria and every step's objective and expected result are written")
119
+ : check("readiness.intent", "warn", `the intent is incomplete: ${gaps.map((g) => g.replace(/ — draft it with .*$/, "")).join("; ")}`, { fix: `draft it with \`jevitate journey annotate ${id}\``, characteristic: "complete" }));
120
+ // 4a. the lint passes
121
+ out.push(review.proof.lint.errors === 0
122
+ ? check("readiness.lint", "info", `\`journey lint\` passes${review.proof.lint.warnings === 0 ? "" : ` (${review.proof.lint.warnings} warning(s))`}`)
123
+ : check("readiness.lint", "fail", `\`journey lint\` has ${review.proof.lint.errors} error(s): its assertions cannot prove its outcome`, {
124
+ fix: `strengthen it (jevitate journey lint ${id}); promote refuses without --accept-weak`,
125
+ characteristic: "verifiable",
126
+ }));
127
+ // 4b. the mutation proof is known and current
128
+ out.push(verifyCheck(review, id));
129
+ return out;
130
+ }
131
+ function verifyCheck(review, id) {
132
+ const v = review.proof.verify;
133
+ const fix = `jevitate journey verify ${id} --mutate`;
134
+ if (v.status === "not-verified")
135
+ return check("readiness.verify", "warn", "its mutation proof is unknown: `journey verify --mutate` never ran", { fix, characteristic: "verifiable" });
136
+ if (v.stale)
137
+ return check("readiness.verify", "warn", `its mutation proof (${v.verdict}, ${v.at}) is for an older version: the Journey changed since`, { fix, characteristic: "verifiable" });
138
+ if (v.verdict !== "proven")
139
+ return check("readiness.verify", "warn", `its mutation proof is ${v.verdict} (${v.at})${v.reason === undefined ? "" : `: ${v.reason}`}`, { fix, characteristic: "verifiable" });
140
+ return check("readiness.verify", "info", `its mutation proof is current and proven (${v.at})`);
141
+ }
142
+ function subjectJourney(subject, catalog, ctx) {
143
+ return ctx.journey === undefined ? catalog.journeys.find((x) => x.id === subject.id) : catalogJourney(ctx.journey);
144
+ }
145
+ /** #434: the deterministic readiness checks and GtWR rule findings. */
146
+ export const readinessAnalyzer = {
147
+ id: READINESS,
148
+ appliesTo: ["persona", "job", "journey"],
149
+ async analyze(subject, catalog, ctx) {
150
+ if (ctx.readiness !== true)
151
+ return [];
152
+ if (subject.kind === "job") {
153
+ const job = findJob(catalog, subject.id);
154
+ return job === undefined ? [] : jobChecks(job, catalog);
155
+ }
156
+ if (subject.kind === "persona") {
157
+ const p = findPersona(catalog, subject.id);
158
+ return p === undefined ? [] : personaChecks(p, catalog);
159
+ }
160
+ const j = subjectJourney(subject, catalog, ctx);
161
+ return j === undefined ? [] : journeyChecks(j, catalog);
162
+ },
163
+ };
164
+ const JOB_QUESTIONS = [
165
+ { name: "outcome_oriented", instructions: "Is this job story about the outcome the user wants, rather than a description of a product feature?", characteristic: "necessary", notReady: "the story reads as a feature description, not an outcome", ready: "the story is outcome-oriented" },
166
+ { name: "trigger_is_situation", instructions: "Is the trigger (the 'When …' part) a situation the user is in, rather than a description of who the user is?", characteristic: "conforming", notReady: "the trigger describes a persona, not a situation", ready: "the trigger is a situation" },
167
+ { name: "unambiguous", instructions: "Would two careful readers agree on exactly what this job means?", characteristic: "unambiguous", notReady: "two readers could disagree on what this job means", ready: "it reads unambiguously" },
168
+ { name: "verifiable", instructions: "Could an automated success check prove that the outcome ('so I can …') was reached?", characteristic: "verifiable", notReady: "no success check could prove this outcome", ready: "a success check could prove the outcome" },
169
+ { name: "singular", instructions: "Is this one job, rather than several jobs combined?", characteristic: "singular", notReady: "it combines several jobs", ready: "it is one job" },
170
+ { name: "necessary", instructions: "Is this a real user need, rather than an implementation detail?", characteristic: "necessary", notReady: "it reads as an implementation detail, not a user need", ready: "it is a real user need" },
171
+ ];
172
+ const PERSONA_QUESTIONS = [
173
+ { name: "unambiguous", instructions: "Would two careful readers picture the same kind of user from this persona description?", characteristic: "unambiguous", notReady: "two readers could picture different users", ready: "it describes one recognisable kind of user" },
174
+ { name: "singular", instructions: "Does this describe one kind of user, rather than several different kinds of user combined?", characteristic: "singular", notReady: "it combines several kinds of user", ready: "it is one kind of user" },
175
+ { name: "necessary", instructions: "Does this persona describe a real kind of user of the product, rather than a system, a feature or a test account?", characteristic: "necessary", notReady: "it reads as a system, a feature or a test account, not a user", ready: "it is a real kind of user" },
176
+ ];
177
+ const JOURNEY_OUTCOME = { name: "accomplishes_outcome", instructions: "Do these steps accomplish the job's outcome (the 'so I can …') for this persona?", characteristic: "correct", notReady: "its steps may not accomplish the job's outcome for this persona", ready: "its steps accomplish the job's outcome" };
178
+ const JOURNEY_END_STATE = { name: "end_state_proves_outcome", instructions: "Do the end-state checks prove that the outcome was reached, rather than only that a page loaded?", characteristic: "verifiable", notReady: "its end-state checks may only prove that a page loaded, not the outcome", ready: "its end-state checks prove the outcome" };
179
+ const JOURNEY_RELATED = { name: "steps_related", instructions: "Is every step needed for the job (no step unrelated to it)?", characteristic: "necessary", notReady: "some steps look unrelated to the job", ready: "every step serves the job" };
180
+ const JOURNEY_PLAUSIBLE = { name: "plausible_for_persona", instructions: "Are these actions plausible for this persona's role (for example, not a buyer doing an administrator's action)?", characteristic: "appropriate", notReady: "its actions look implausible for this persona's role", ready: "its actions fit the persona's role" };
181
+ const JOURNEY_DELTAS = { name: "expected_matches_deltas", instructions: "Does each step's written expected result match what the step was recorded doing (its requests and checks)?", characteristic: "correct", notReady: "some steps' written expected results do not match what they were recorded doing", ready: "the written expected results match the recorded steps" };
182
+ function journeyQuestions(hasJob, hasPersona) {
183
+ return [...(hasJob ? [JOURNEY_OUTCOME] : []), JOURNEY_END_STATE, JOURNEY_RELATED, ...(hasPersona ? [JOURNEY_PLAUSIBLE] : []), JOURNEY_DELTAS];
184
+ }
185
+ function stateOf(goal, url, lines, history = []) {
186
+ return { goal, url, controls: [], history: [...history], visibleText: lines.join("\n") };
187
+ }
188
+ function personaText(p, id) {
189
+ if (p === undefined)
190
+ return `Persona '${id}'`;
191
+ return `Persona '${p.id}'${p.role === undefined ? "" : ` (account role: ${p.role})`}: ${p.description ?? "(no description)"}`;
192
+ }
193
+ function journeyState(j, catalog) {
194
+ const links = journeyLinks(catalog, j);
195
+ const job = links.job === undefined ? undefined : findJob(catalog, links.job.id);
196
+ const persona = links.persona === undefined ? undefined : findPersona(catalog, links.persona.id);
197
+ const review = buildJourneyReview(j.journey);
198
+ const recorded = (n) => review.sideEffects.writeRequests.filter((w) => w.step === n).map((w) => `${w.method} ${w.endpoint}`);
199
+ const steps = review.steps.map((s) => [
200
+ `${s.number}. ${s.action}`,
201
+ ...(s.objective === undefined ? [] : [`objective: ${s.objective}`]),
202
+ ...(s.expectedResult === undefined ? [] : [`expected: ${s.expectedResult}`]),
203
+ ...(s.assertion === undefined ? [] : [`checked: ${s.assertion}`]),
204
+ ...(recorded(s.number).length === 0 ? [] : [`recorded requests: ${recorded(s.number).join(", ")}`]),
205
+ ].join(" — "));
206
+ const lines = [
207
+ `Journey '${j.id}': ${j.name}`,
208
+ ...(job === undefined ? [] : [`Job: ${job.story}`]),
209
+ ...(links.persona === undefined ? [] : [personaText(persona, links.persona.id)]),
210
+ ...(review.summary.goal === undefined ? [] : [`Goal: ${review.summary.goal}`]),
211
+ ...review.summary.successCriteria.map((c) => `Success criterion: ${c.description}`),
212
+ `End-state checks: ${review.proof.endState.length === 0 ? "none" : review.proof.endState.join("; ")}`,
213
+ ];
214
+ return { state: stateOf(job?.story ?? review.summary.goal ?? j.name, j.journey.recording.site, lines, steps), hasJob: job !== undefined, hasPersona: links.persona !== undefined };
215
+ }
216
+ function questionsOf(qs) {
217
+ return Object.fromEntries(qs.map((q) => [q.name, { kind: "noul", instructions: q.instructions }]));
218
+ }
219
+ function probabilityOf(a) {
220
+ if (a === undefined)
221
+ return undefined;
222
+ if (a.kind === "noul")
223
+ return a.probability;
224
+ if (a.kind === "score")
225
+ return a.value;
226
+ return a.confidence;
227
+ }
228
+ /** #434: one Jev answer as an advisory finding — never requiring an acknowledgment. */
229
+ function jevFinding(q, a, cached) {
230
+ const p = probabilityOf(a);
231
+ const prob = p === undefined ? undefined : Math.min(1, Math.max(0, p));
232
+ const asked = `asked: "${q.instructions}"${cached ? " (cached answer)" : ""}`;
233
+ if (prob === undefined)
234
+ return finding(READINESS_JEV, `jev.${q.name}`, "warn", `no answer to "${q.instructions}"`, { characteristic: q.characteristic });
235
+ return prob < READINESS_LOW_PROBABILITY
236
+ ? finding(READINESS_JEV, `jev.${q.name}`, "warn", `not ready because ${q.notReady} (GtWR: ${q.characteristic}) — ${asked}`, { characteristic: q.characteristic, probability: prob })
237
+ : finding(READINESS_JEV, `jev.${q.name}`, "info", `${q.ready} — ${asked}`, { characteristic: q.characteristic, probability: prob });
238
+ }
239
+ /** #434: the advisory Jev readiness questions (Noul, with probabilities). */
240
+ export const jevReadinessAnalyzer = {
241
+ id: READINESS_JEV,
242
+ appliesTo: ["persona", "job", "journey"],
243
+ async analyze(subject, catalog, ctx) {
244
+ if (ctx.readiness !== true)
245
+ return [];
246
+ let qs;
247
+ let state;
248
+ if (subject.kind === "job") {
249
+ const job = findJob(catalog, subject.id);
250
+ if (job === undefined)
251
+ return [];
252
+ qs = JOB_QUESTIONS;
253
+ state = stateOf("Review this job story", "about:catalog", [
254
+ `Job story: ${job.story}`,
255
+ `Trigger (When …): ${job.job.trigger}`,
256
+ `Motivation (I want to …): ${job.job.motivation}`,
257
+ `Outcome (so I can …): ${job.job.outcome}`,
258
+ ...job.personas.map((id) => personaText(findPersona(catalog, id), id)),
259
+ ]);
260
+ }
261
+ else if (subject.kind === "persona") {
262
+ const p = findPersona(catalog, subject.id);
263
+ if (p === undefined)
264
+ return [];
265
+ qs = PERSONA_QUESTIONS;
266
+ state = stateOf("Review this persona", "about:catalog", [personaText(p, p.id)]);
267
+ }
268
+ else {
269
+ const j = subjectJourney(subject, catalog, ctx);
270
+ if (j === undefined)
271
+ return [];
272
+ const built = journeyState(j, catalog);
273
+ qs = journeyQuestions(built.hasJob, built.hasPersona);
274
+ state = built.state;
275
+ }
276
+ const setup = ctx.jev;
277
+ if (setup === undefined || !("advisor" in setup)) {
278
+ return [finding(READINESS_JEV, "jev.skipped", "info", `Jev review skipped: ${setup === undefined ? JEV_SKIPPED_PASS_REAL : setup.skipped}`)];
279
+ }
280
+ let result;
281
+ try {
282
+ result = await setup.advisor.ask(state, questionsOf(qs));
283
+ }
284
+ catch (err) {
285
+ // Advisory: a failed model call never gates an approval — the deterministic layer stands.
286
+ return [finding(READINESS_JEV, "jev.failed", "warn", `Jev review could not run: ${err instanceof Error ? err.message : String(err)} — the deterministic checks above still apply`)];
287
+ }
288
+ return qs.map((q) => jevFinding(q, result.answers[q.name], result.cached));
289
+ },
290
+ };
291
+ //# sourceMappingURL=readiness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readiness.js","sourceRoot":"","sources":["../src/readiness.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { TAG_FLAG, TAG_HELP, collectTag, taggedAction } from "./run-tags-cli.js";
1
2
  import { BranchReplayInputError, JourneyPrefixStaleError, prefixFromBranch, recordedBranchOf } from "./journey-prefix.js";
2
3
  import { existsSync } from "node:fs";
3
4
  import { readFile, writeFile } from "node:fs/promises";
@@ -174,7 +175,8 @@ export function registerRegressionCommands(program, deps) {
174
175
  .option("--storage-state <file>", "Playwright storageState JSON to open the replay session authenticated (#129); must exist")
175
176
  .option("--param <kv>", "#293: a Journey param as key=value (repeatable) for a failure found from a Journey branch point — every replay goes through the same prefix; a secret param (never persisted) must be given again", collectParam, {})
176
177
  .option("--json", "emit a JSON envelope")
177
- .action(async function (id) {
178
+ .option(TAG_FLAG, TAG_HELP, collectTag, [])
179
+ .action(taggedAction(program, "regression run", async function (id) {
178
180
  // #245: demo mode (--headed/--slow-mo), resolved before any browser opens.
179
181
  let browser;
180
182
  try {
@@ -279,6 +281,6 @@ export function registerRegressionCommands(program, deps) {
279
281
  for (const close of opened)
280
282
  await close();
281
283
  }
282
- });
284
+ }));
283
285
  }
284
286
  //# sourceMappingURL=regression-cli.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"regression-cli.js","sourceRoot":"","sources":["../src/regression-cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"regression-cli.js","sourceRoot":"","sources":["../src/regression-cli.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { type RunIndexDeps } from "./run-index.js";
2
- import { type ConsolidatedDefect, type FindingsDiff, type RunRecord } from "@jevitate/findings";
2
+ import { type ConsolidatedDefect, type EnvironmentCauseSummary, type FindingsDiff, type RunRecord } from "@jevitate/findings";
3
3
  import { type UsageAggregate } from "@jevitate/ai-core";
4
4
  /**
5
5
  * The programmatic surface behind `jevitate report` (#139), `jevitate diff` / `--baseline` (#138)
@@ -90,6 +90,8 @@ export declare function resolveSince(since: string, ctx: RunRefContext): string;
90
90
  export interface BuildReportOptions {
91
91
  readonly target?: string;
92
92
  readonly since?: string;
93
+ /** #426: `--tag key=value` filters — only runs carrying EVERY one (AND). */
94
+ readonly tags?: Readonly<Record<string, string>>;
93
95
  readonly dirs?: readonly string[];
94
96
  readonly baseline?: string;
95
97
  readonly baselinesDir?: string;
@@ -108,19 +110,33 @@ export interface RunSummary {
108
110
  readonly missionOutcome?: string;
109
111
  /** #217: a goal run's own ending, beside the canonical `missionOutcome`. */
110
112
  readonly goalOutcome?: string;
113
+ /** #423: why the goal was not achieved. */
114
+ readonly goalReason?: string;
115
+ /** #423: the run's defect verdict, by kind — orthogonal to `goalOutcome`. */
116
+ readonly defectOutcome?: {
117
+ readonly status: string;
118
+ readonly byKind: Readonly<Record<string, number>>;
119
+ };
111
120
  readonly targetBuild?: string;
112
121
  readonly engineCommit?: string;
113
122
  readonly findings: number;
123
+ /** #426: the run's tags. */
124
+ readonly tags?: Readonly<Record<string, string>>;
114
125
  }
115
126
  export interface ReportResult {
116
127
  readonly target?: string;
117
128
  readonly since?: string;
129
+ /** #426: the tag filter the report was narrowed to. */
130
+ readonly tags?: Readonly<Record<string, string>>;
118
131
  readonly runs: readonly RunSummary[];
119
132
  readonly defects: readonly ConsolidatedDefect[];
133
+ /** #422: the batch's environment/config faults, once each (summed over the runs) — never defects. */
134
+ readonly environmentFaults: readonly EnvironmentCauseSummary[];
120
135
  readonly summary: {
121
136
  readonly defects: number;
122
137
  readonly advisory: number;
123
138
  readonly runs: number;
139
+ readonly environmentFaults: number;
124
140
  };
125
141
  /**
126
142
  * Model usage summed over the reported runs (#163). Runs whose result carries no `usage` (they made
@@ -132,13 +148,19 @@ export interface ReportResult {
132
148
  readonly markdown: string;
133
149
  }
134
150
  export declare function summarizeRun(r: RunRecord): RunSummary;
151
+ /** #426: the runs carrying every filter tag (AND); no filter keeps them all. */
152
+ export declare function filterRunsByTags<R extends {
153
+ readonly tags?: Readonly<Record<string, string>>;
154
+ }>(runs: readonly R[], tags: Readonly<Record<string, string>> | undefined): R[];
135
155
  export declare function buildReport(opts: BuildReportOptions): Promise<ReportResult>;
136
156
  /** Sums the runs' persisted usage (#163). */
137
157
  export declare function usageOfRuns(runs: readonly RunRecord[]): UsageAggregate;
138
158
  /** The report's cost section: the full total, flagged when partial. */
139
159
  export declare function usageMarkdown(u: UsageAggregate): string;
140
160
  /** `jevitate diff <runA> <runB>`: A is the baseline side, B the current side. */
141
- export declare function diffRunRefs(a: string, b: string, ctx: RunRefContext): {
161
+ export declare function diffRunRefs(a: string, b: string, ctx: RunRefContext & {
162
+ readonly tags?: Readonly<Record<string, string>>;
163
+ }): {
142
164
  diff: FindingsDiff;
143
165
  markdown: string;
144
166
  baseline: RunSummary[];
@@ -3,9 +3,9 @@ import { allResultDirs, projectDataDir } from "./project-dir.js";
3
3
  import { indexedRunsFor, projectLogDirs } from "./run-index.js";
4
4
  import { mkdir, readFile, readdir, writeFile } from "node:fs/promises";
5
5
  import { basename, dirname, join, resolve } from "node:path";
6
- import { consolidate, diffRuns, renderReportMarkdown, runFromMissionResult, runFromUxReport, runIdOf, } from "@jevitate/findings";
6
+ import { consolidate, diffRuns, environmentCausesOf, renderReportMarkdown, runFromMissionResult, runFromUxReport, runIdOf, } from "@jevitate/findings";
7
7
  import { formatUsageLine, sumUsage, usageCountsFrom } from "@jevitate/ai-core";
8
- import { clock } from "@jevitate/domain";
8
+ import { clock, matchesRunTags } from "@jevitate/domain";
9
9
  /**
10
10
  * The programmatic surface behind `jevitate report` (#139), `jevitate diff` / `--baseline` (#138)
11
11
  * and `jevitate baseline tag`. It only READS what the runners already persisted — every result was
@@ -352,10 +352,24 @@ export function summarizeRun(r) {
352
352
  ...(r.startedAt === undefined ? {} : { startedAt: r.startedAt }),
353
353
  ...(r.missionOutcome === undefined ? {} : { missionOutcome: r.missionOutcome }),
354
354
  ...(r.goalOutcome === undefined ? {} : { goalOutcome: r.goalOutcome }),
355
+ ...(r.goalReason === undefined ? {} : { goalReason: r.goalReason }),
356
+ ...(r.defectOutcome === undefined ? {} : { defectOutcome: r.defectOutcome }),
355
357
  ...(r.targetBuild === undefined ? {} : { targetBuild: r.targetBuild }),
356
358
  ...(r.engine?.commit === undefined ? {} : { engineCommit: r.engine.commit }),
359
+ ...(r.tags === undefined ? {} : { tags: r.tags }),
357
360
  };
358
361
  }
362
+ /** #426: the runs carrying every filter tag (AND); no filter keeps them all. */
363
+ export function filterRunsByTags(runs, tags) {
364
+ if (tags === undefined || Object.keys(tags).length === 0)
365
+ return [...runs];
366
+ return runs.filter((r) => matchesRunTags(r.tags ?? {}, tags));
367
+ }
368
+ function tagsLabel(tags) {
369
+ return Object.entries(tags)
370
+ .map(([k, v]) => `${k}=${v}`)
371
+ .join(", ");
372
+ }
359
373
  export async function buildReport(opts) {
360
374
  const explicitDirs = opts.dirs !== undefined && opts.dirs.length > 0;
361
375
  const sources = explicitDirs ? { dirs: [...opts.dirs], files: [] } : defaultReportSources(opts.target !== undefined, opts.index);
@@ -379,6 +393,12 @@ export async function buildReport(opts) {
379
393
  const since = opts.since === undefined ? undefined : resolveSince(opts.since, ctx);
380
394
  if (since !== undefined)
381
395
  runs = runs.filter((r) => r.startedAt !== undefined && r.startedAt >= since);
396
+ const tagFilter = opts.tags !== undefined && Object.keys(opts.tags).length > 0 ? opts.tags : undefined;
397
+ runs = filterRunsByTags(runs, tagFilter);
398
+ // #426: like --target, a tag no run carries is refused (exit 64) — never an empty "nothing wrong" report.
399
+ if (tagFilter !== undefined && runs.length === 0 && opts.runs === undefined) {
400
+ throw new ReportInputError(`--tag ${tagsLabel(tagFilter)} matches no recorded run`);
401
+ }
382
402
  const defects = consolidate(runs);
383
403
  let diff;
384
404
  let baselineRuns;
@@ -387,8 +407,9 @@ export async function buildReport(opts) {
387
407
  diff = diffRuns(baselineRuns, runs);
388
408
  }
389
409
  const usage = usageOfRuns(runs);
410
+ const environmentFaults = environmentCausesOf(runs);
390
411
  const markdown = renderReportMarkdown({
391
- title: `Defect report${targetLabel === undefined ? "" : ` — ${targetLabel}`}${since === undefined ? "" : ` since ${since}`}`,
412
+ title: `Defect report${targetLabel === undefined ? "" : ` — ${targetLabel}`}${since === undefined ? "" : ` since ${since}`}${tagFilter === undefined ? "" : ` tagged ${tagsLabel(tagFilter)}`}`,
392
413
  runs,
393
414
  defects,
394
415
  ...(diff === undefined ? {} : { diff }),
@@ -396,12 +417,15 @@ export async function buildReport(opts) {
396
417
  return {
397
418
  ...(targetLabel === undefined ? {} : { target: targetLabel }),
398
419
  ...(since === undefined ? {} : { since }),
420
+ ...(tagFilter === undefined ? {} : { tags: tagFilter }),
399
421
  runs: runs.map(summarizeRun),
400
422
  defects,
423
+ environmentFaults,
401
424
  summary: {
402
425
  defects: defects.filter((d) => d.severity === "hard").length,
403
426
  advisory: defects.filter((d) => d.severity === "advisory").length,
404
427
  runs: runs.length,
428
+ environmentFaults: environmentFaults.length,
405
429
  },
406
430
  usage,
407
431
  ...(diff === undefined ? {} : { diff }),
@@ -422,8 +446,12 @@ export function usageMarkdown(u) {
422
446
  }
423
447
  /** `jevitate diff <runA> <runB>`: A is the baseline side, B the current side. */
424
448
  export function diffRunRefs(a, b, ctx) {
425
- const base = resolveRunRef(a, ctx);
426
- const cur = resolveRunRef(b, ctx);
449
+ // #426: `--tag` narrows BOTH sides (a baseline tag or a dir holds runs of many features).
450
+ const base = filterRunsByTags(resolveRunRef(a, ctx), ctx.tags);
451
+ const cur = filterRunsByTags(resolveRunRef(b, ctx), ctx.tags);
452
+ if (ctx.tags !== undefined && Object.keys(ctx.tags).length > 0 && (base.length === 0 || cur.length === 0)) {
453
+ throw new ReportInputError(`--tag ${tagsLabel(ctx.tags)} matches no run of ${base.length === 0 ? a : b}`);
454
+ }
427
455
  const diff = diffRuns(base, cur);
428
456
  const markdown = renderReportMarkdown({ title: `Diff ${a} → ${b}`, runs: cur, defects: consolidate(cur), diff });
429
457
  return { diff, markdown, baseline: base.map(summarizeRun), current: cur.map(summarizeRun) };