@jevitate/cli 0.12.0 → 0.14.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 (271) hide show
  1. package/dist/author-journey-cli.d.ts +9 -0
  2. package/dist/author-journey-cli.js +18 -1
  3. package/dist/author-journey-cli.js.map +1 -1
  4. package/dist/bin.js +25673 -24216
  5. package/dist/build-info.generated.js +2 -2
  6. package/dist/catalog-analysis.js +4 -2
  7. package/dist/catalog-analysis.js.map +1 -1
  8. package/dist/catalog-bundle-api.js +1 -3
  9. package/dist/catalog-bundle-api.js.map +1 -1
  10. package/dist/catalog-bundle-findings.js +1 -3
  11. package/dist/catalog-bundle-findings.js.map +1 -1
  12. package/dist/catalog-bundle.js +1 -4
  13. package/dist/catalog-bundle.js.map +1 -1
  14. package/dist/catalog-cli.js +48 -6
  15. package/dist/catalog-cli.js.map +1 -1
  16. package/dist/catalog-review.d.ts +8 -0
  17. package/dist/catalog-review.js +26 -0
  18. package/dist/catalog-review.js.map +1 -1
  19. package/dist/catalog.d.ts +42 -0
  20. package/dist/catalog.js +67 -4
  21. package/dist/catalog.js.map +1 -1
  22. package/dist/check-execute.js +9 -0
  23. package/dist/check-execute.js.map +1 -1
  24. package/dist/check-plan.d.ts +5 -2
  25. package/dist/check-plan.js +9 -5
  26. package/dist/check-plan.js.map +1 -1
  27. package/dist/check-suite.js +1 -3
  28. package/dist/check-suite.js.map +1 -1
  29. package/dist/cli-output.js +1 -3
  30. package/dist/cli-output.js.map +1 -1
  31. package/dist/cli-shared.d.ts +1 -1
  32. package/dist/cli-shared.js +2 -0
  33. package/dist/cli-shared.js.map +1 -1
  34. package/dist/defect-evidence.js +4 -8
  35. package/dist/defect-evidence.js.map +1 -1
  36. package/dist/environments.d.ts +1 -1
  37. package/dist/environments.js +1 -1
  38. package/dist/environments.js.map +1 -1
  39. package/dist/exit-codes.d.ts +0 -1
  40. package/dist/exit-codes.js +2 -0
  41. package/dist/exit-codes.js.map +1 -1
  42. package/dist/explore-adversarial.d.ts +10 -1
  43. package/dist/explore-adversarial.js +3 -0
  44. package/dist/explore-adversarial.js.map +1 -1
  45. package/dist/explore-cli/adversarial-strategy.d.ts +3 -0
  46. package/dist/explore-cli/adversarial-strategy.js +101 -0
  47. package/dist/explore-cli/adversarial-strategy.js.map +1 -0
  48. package/dist/explore-cli/coverage-strategy.d.ts +3 -0
  49. package/dist/explore-cli/coverage-strategy.js +97 -0
  50. package/dist/explore-cli/coverage-strategy.js.map +1 -0
  51. package/dist/explore-cli/feature-strategy.d.ts +3 -0
  52. package/dist/explore-cli/feature-strategy.js +60 -0
  53. package/dist/explore-cli/feature-strategy.js.map +1 -0
  54. package/dist/explore-cli/goal-strategy.d.ts +3 -0
  55. package/dist/explore-cli/goal-strategy.js +185 -0
  56. package/dist/explore-cli/goal-strategy.js.map +1 -0
  57. package/dist/explore-cli/options.d.ts +3 -0
  58. package/dist/explore-cli/options.js +157 -0
  59. package/dist/explore-cli/options.js.map +1 -0
  60. package/dist/explore-cli/run.d.ts +7 -0
  61. package/dist/explore-cli/run.js +702 -0
  62. package/dist/explore-cli/run.js.map +1 -0
  63. package/dist/explore-cli/scope-region.d.ts +17 -0
  64. package/dist/explore-cli/scope-region.js +24 -0
  65. package/dist/explore-cli/scope-region.js.map +1 -0
  66. package/dist/explore-cli/shared.d.ts +167 -0
  67. package/dist/explore-cli/shared.js +20 -0
  68. package/dist/explore-cli/shared.js.map +1 -0
  69. package/dist/explore-cli/usability-strategy.d.ts +3 -0
  70. package/dist/explore-cli/usability-strategy.js +137 -0
  71. package/dist/explore-cli/usability-strategy.js.map +1 -0
  72. package/dist/explore-cli.d.ts +2 -2
  73. package/dist/explore-cli.js +2 -1347
  74. package/dist/explore-cli.js.map +1 -1
  75. package/dist/explore-coverage.d.ts +10 -1
  76. package/dist/explore-coverage.js +3 -0
  77. package/dist/explore-coverage.js.map +1 -1
  78. package/dist/explore-feature.d.ts +6 -0
  79. package/dist/explore-feature.js +1 -0
  80. package/dist/explore-feature.js.map +1 -1
  81. package/dist/explore-goal.d.ts +6 -0
  82. package/dist/explore-goal.js +1 -0
  83. package/dist/explore-goal.js.map +1 -1
  84. package/dist/explore-specs.d.ts +3 -1
  85. package/dist/explore-specs.js +2 -1
  86. package/dist/explore-specs.js.map +1 -1
  87. package/dist/github-issue-filer.js +1 -4
  88. package/dist/github-issue-filer.js.map +1 -1
  89. package/dist/goal-run-flags.d.ts +0 -1
  90. package/dist/goal-run-flags.js.map +1 -1
  91. package/dist/inbox-cli.js +1 -3
  92. package/dist/inbox-cli.js.map +1 -1
  93. package/dist/init-skills.js +1 -4
  94. package/dist/init-skills.js.map +1 -1
  95. package/dist/journey-anchor-api.d.ts +10 -9
  96. package/dist/journey-anchor-api.js +12 -22
  97. package/dist/journey-anchor-api.js.map +1 -1
  98. package/dist/journey-anchor-cli.d.ts +1 -1
  99. package/dist/journey-anchor-cli.js +22 -8
  100. package/dist/journey-anchor-cli.js.map +1 -1
  101. package/dist/journey-cli/anchors.d.ts +4 -0
  102. package/dist/journey-cli/anchors.js +48 -0
  103. package/dist/journey-cli/anchors.js.map +1 -0
  104. package/dist/journey-cli/find.d.ts +4 -0
  105. package/dist/journey-cli/find.js +44 -0
  106. package/dist/journey-cli/find.js.map +1 -0
  107. package/dist/journey-cli/lint.d.ts +4 -0
  108. package/dist/journey-cli/lint.js +84 -0
  109. package/dist/journey-cli/lint.js.map +1 -0
  110. package/dist/journey-cli/list.d.ts +4 -0
  111. package/dist/journey-cli/list.js +48 -0
  112. package/dist/journey-cli/list.js.map +1 -0
  113. package/dist/journey-cli/migrate.d.ts +4 -0
  114. package/dist/journey-cli/migrate.js +101 -0
  115. package/dist/journey-cli/migrate.js.map +1 -0
  116. package/dist/journey-cli/promote.d.ts +4 -0
  117. package/dist/journey-cli/promote.js +181 -0
  118. package/dist/journey-cli/promote.js.map +1 -0
  119. package/dist/journey-cli/publish.d.ts +4 -0
  120. package/dist/journey-cli/publish.js +70 -0
  121. package/dist/journey-cli/publish.js.map +1 -0
  122. package/dist/journey-cli/review.d.ts +4 -0
  123. package/dist/journey-cli/review.js +108 -0
  124. package/dist/journey-cli/review.js.map +1 -0
  125. package/dist/journey-cli/run.d.ts +4 -0
  126. package/dist/journey-cli/run.js +244 -0
  127. package/dist/journey-cli/run.js.map +1 -0
  128. package/dist/journey-cli/shared.d.ts +9 -0
  129. package/dist/journey-cli/shared.js +12 -0
  130. package/dist/journey-cli/shared.js.map +1 -0
  131. package/dist/journey-cli/verify.d.ts +4 -0
  132. package/dist/journey-cli/verify.js +125 -0
  133. package/dist/journey-cli/verify.js.map +1 -0
  134. package/dist/journey-cli.d.ts +3 -2
  135. package/dist/journey-cli.js +25 -950
  136. package/dist/journey-cli.js.map +1 -1
  137. package/dist/journey-link-api.d.ts +40 -0
  138. package/dist/journey-link-api.js +90 -0
  139. package/dist/journey-link-api.js.map +1 -0
  140. package/dist/journey-link-cli.d.ts +7 -0
  141. package/dist/journey-link-cli.js +58 -0
  142. package/dist/journey-link-cli.js.map +1 -0
  143. package/dist/journey-link-hints.d.ts +8 -0
  144. package/dist/journey-link-hints.js +68 -0
  145. package/dist/journey-link-hints.js.map +1 -0
  146. package/dist/journey-lint-sarif.js +3 -0
  147. package/dist/journey-lint-sarif.js.map +1 -1
  148. package/dist/journey-network-checks.d.ts +9 -1
  149. package/dist/journey-network-checks.js +55 -12
  150. package/dist/journey-network-checks.js.map +1 -1
  151. package/dist/journey-prefix.d.ts +9 -1
  152. package/dist/journey-prefix.js +12 -0
  153. package/dist/journey-prefix.js.map +1 -1
  154. package/dist/journey-review/render.d.ts +43 -0
  155. package/dist/journey-review/render.js +461 -0
  156. package/dist/journey-review/render.js.map +1 -0
  157. package/dist/journey-review-api.d.ts +1 -0
  158. package/dist/journey-review-api.js +7 -0
  159. package/dist/journey-review-api.js.map +1 -1
  160. package/dist/journey-review-store.js +1 -0
  161. package/dist/journey-review-store.js.map +1 -1
  162. package/dist/journey-review.d.ts +6 -4
  163. package/dist/journey-review.js +18 -393
  164. package/dist/journey-review.js.map +1 -1
  165. package/dist/journey-verify.js +2 -1
  166. package/dist/journey-verify.js.map +1 -1
  167. package/dist/ledger-api.js +1 -4
  168. package/dist/ledger-api.js.map +1 -1
  169. package/dist/locator-health-api.js +1 -3
  170. package/dist/locator-health-api.js.map +1 -1
  171. package/dist/locator-health.d.ts +0 -1
  172. package/dist/locator-health.js +0 -3
  173. package/dist/locator-health.js.map +1 -1
  174. package/dist/log-classes.js +1 -3
  175. package/dist/log-classes.js.map +1 -1
  176. package/dist/log-sources.js +17 -1
  177. package/dist/log-sources.js.map +1 -1
  178. package/dist/mcp-api.js +16 -821
  179. package/dist/mcp-api.js.map +1 -1
  180. package/dist/mcp-cli-tools.js +48 -7
  181. package/dist/mcp-cli-tools.js.map +1 -1
  182. package/dist/mcp-tools/cli.d.ts +3 -0
  183. package/dist/mcp-tools/cli.js +20 -0
  184. package/dist/mcp-tools/cli.js.map +1 -0
  185. package/dist/mcp-tools/explore.d.ts +3 -0
  186. package/dist/mcp-tools/explore.js +141 -0
  187. package/dist/mcp-tools/explore.js.map +1 -0
  188. package/dist/mcp-tools/findings.d.ts +3 -0
  189. package/dist/mcp-tools/findings.js +277 -0
  190. package/dist/mcp-tools/findings.js.map +1 -0
  191. package/dist/mcp-tools/inbox.d.ts +3 -0
  192. package/dist/mcp-tools/inbox.js +106 -0
  193. package/dist/mcp-tools/inbox.js.map +1 -0
  194. package/dist/mcp-tools/journey.d.ts +3 -0
  195. package/dist/mcp-tools/journey.js +260 -0
  196. package/dist/mcp-tools/journey.js.map +1 -0
  197. package/dist/mcp-tools/shared.d.ts +39 -0
  198. package/dist/mcp-tools/shared.js +69 -0
  199. package/dist/mcp-tools/shared.js.map +1 -0
  200. package/dist/mission-fixtures.js +1 -8
  201. package/dist/mission-fixtures.js.map +1 -1
  202. package/dist/mission-queue-cli.js +1 -3
  203. package/dist/mission-queue-cli.js.map +1 -1
  204. package/dist/multi-run.js +1 -3
  205. package/dist/multi-run.js.map +1 -1
  206. package/dist/pre-approval.js +4 -4
  207. package/dist/pre-approval.js.map +1 -1
  208. package/dist/readiness.js +2 -2
  209. package/dist/readiness.js.map +1 -1
  210. package/dist/report-api.js +1 -4
  211. package/dist/report-api.js.map +1 -1
  212. package/dist/resource-preflight.js.map +1 -1
  213. package/dist/run-metadata.js +1 -3
  214. package/dist/run-metadata.js.map +1 -1
  215. package/dist/run-tags-cli.d.ts +0 -2
  216. package/dist/run-tags-cli.js +0 -4
  217. package/dist/run-tags-cli.js.map +1 -1
  218. package/dist/session-check.js +1 -3
  219. package/dist/session-check.js.map +1 -1
  220. package/dist/signal-triage.js +6 -2
  221. package/dist/signal-triage.js.map +1 -1
  222. package/dist/suite-explore-options.d.ts +8 -0
  223. package/dist/suite-explore-options.js +4 -0
  224. package/dist/suite-explore-options.js.map +1 -1
  225. package/dist/sweep-api.d.ts +9 -0
  226. package/dist/sweep-api.js +70 -4
  227. package/dist/sweep-api.js.map +1 -1
  228. package/dist/sweep-cli.d.ts +2 -0
  229. package/dist/sweep-cli.js +22 -5
  230. package/dist/sweep-cli.js.map +1 -1
  231. package/dist/transcript-file.d.ts +0 -3
  232. package/dist/transcript-file.js +0 -9
  233. package/dist/transcript-file.js.map +1 -1
  234. package/dist/ui-api.js +1 -4
  235. package/dist/ui-api.js.map +1 -1
  236. package/dist/ux-usability/analysis.d.ts +14 -0
  237. package/dist/ux-usability/analysis.js +106 -0
  238. package/dist/ux-usability/analysis.js.map +1 -0
  239. package/dist/ux-usability/done-adjudication.d.ts +15 -0
  240. package/dist/ux-usability/done-adjudication.js +56 -0
  241. package/dist/ux-usability/done-adjudication.js.map +1 -0
  242. package/dist/ux-usability/hang.d.ts +5 -0
  243. package/dist/ux-usability/hang.js +41 -0
  244. package/dist/ux-usability/hang.js.map +1 -0
  245. package/dist/ux-usability/loop.d.ts +15 -0
  246. package/dist/ux-usability/loop.js +104 -0
  247. package/dist/ux-usability/loop.js.map +1 -0
  248. package/dist/ux-usability/observe.d.ts +7 -0
  249. package/dist/ux-usability/observe.js +89 -0
  250. package/dist/ux-usability/observe.js.map +1 -0
  251. package/dist/ux-usability/result.d.ts +11 -0
  252. package/dist/ux-usability/result.js +113 -0
  253. package/dist/ux-usability/result.js.map +1 -0
  254. package/dist/ux-usability/setup.d.ts +76 -0
  255. package/dist/ux-usability/setup.js +204 -0
  256. package/dist/ux-usability/setup.js.map +1 -0
  257. package/dist/ux-usability/teardown.d.ts +3 -0
  258. package/dist/ux-usability/teardown.js +13 -0
  259. package/dist/ux-usability/teardown.js.map +1 -0
  260. package/dist/ux-usability.d.ts +20 -17
  261. package/dist/ux-usability.js +15 -589
  262. package/dist/ux-usability.js.map +1 -1
  263. package/dist/verify-fix-api.js +1 -4
  264. package/dist/verify-fix-api.js.map +1 -1
  265. package/package.json +5 -6
  266. package/skills/jevitate-explore/SKILL.md +9 -1
  267. package/skills/jevitate-getting-started/SKILL.md +1 -0
  268. package/skills/jevitate-promotion-ready/SKILL.md +76 -0
  269. package/skills/jevitate-record/SKILL.md +3 -0
  270. package/skills/jevitate-run-journey/SKILL.md +3 -0
  271. package/skills/jevitate-test-campaign/SKILL.md +5 -3
@@ -1,6 +1,6 @@
1
1
  import { type JourneyBranchPoint } from "@jevitate/journey";
2
2
  import { type Actor } from "@jevitate/screenplay";
3
- import type { Recording } from "@jevitate/recording";
3
+ import type { Recording, TargetDescriptor } from "@jevitate/recording";
4
4
  import type { BrowserSession } from "@jevitate/playwright";
5
5
  import { type ResolvedJourneyEnvironment } from "./environments.js";
6
6
  import type { BrowserRunOptions } from "./browser-run-options.js";
@@ -51,6 +51,14 @@ export interface JourneyPrefix {
51
51
  * replay types them into the page the mission then perceives, so the mission must redact them.
52
52
  */
53
53
  readonly secrets: readonly string[];
54
+ /**
55
+ * #519: the page region the named anchor declares (`region` on the anchor), parsed. Absent for a
56
+ * numeric `--at-step` or an anchor without one. Authoritative: a per-run `--scope-region` is refused.
57
+ */
58
+ readonly region?: {
59
+ readonly spec: string;
60
+ readonly descriptor: TargetDescriptor;
61
+ };
54
62
  /** Top-level steps the prefix replays: what one re-replay on a reset costs against `maxActions`. */
55
63
  readonly steps: number;
56
64
  /**
@@ -8,6 +8,7 @@ import { SiteGateRefusedError } from "@jevitate/runtime";
8
8
  import { applyJourneyEnvironment, environmentFromFlags } from "./environments.js";
9
9
  import { JourneyRequiresAuthError, UnknownJourneyError, prefixParams, runJourneyProgrammatically } from "./journey-api.js";
10
10
  import { withSiteGate } from "./site-gate-cli.js";
11
+ import { parseDescriptorSpec } from "./explore-specs.js";
11
12
  /**
12
13
  * #293 — journey-anchored exploration: `jevitate explore --from-journey <id> --at-step <n|name>`.
13
14
  *
@@ -130,6 +131,16 @@ export async function resolveJourneyPrefix(opts) {
130
131
  throw new JourneyPrefixArgsError(`journey '${opts.id}' has no usable site URL (${JSON.stringify(site)})`);
131
132
  }
132
133
  const allowedOrigins = opts.environment === undefined ? [new URL(site).origin] : [...opts.environment.allowedOrigins];
134
+ let region;
135
+ // #519: only an anchor NAMED by --at-step scopes the run; a step number that happens to be an anchor does not.
136
+ if (resolved.anchor?.region !== undefined && !/^[0-9]+$/.test(opts.atStep.trim())) {
137
+ try {
138
+ region = { spec: resolved.anchor.region, descriptor: parseDescriptorSpec(resolved.anchor.region) };
139
+ }
140
+ catch (err) {
141
+ throw new JourneyPrefixArgsError(`anchor ${resolved.anchor.name}'s region ${JSON.stringify(resolved.anchor.region)} is not a usable descriptor: ${err instanceof Error ? err.message : String(err)}`);
142
+ }
143
+ }
133
144
  const where = `step ${branch.step}${branch.anchor === undefined ? "" : ` (anchor ${branch.anchor})`}`;
134
145
  const secretNames = secretParamNames(full, used).filter((n) => n in used);
135
146
  const secretValues = secretParamValues(full, used);
@@ -138,6 +149,7 @@ export async function resolveJourneyPrefix(opts) {
138
149
  startUrl,
139
150
  allowedOrigins,
140
151
  secrets: secretValues,
152
+ ...(region === undefined ? {} : { region }),
141
153
  steps: resolved.step,
142
154
  replayInfo: {
143
155
  journeysDir: resolvePath(opts.dir),
@@ -1 +1 @@
1
- {"version":3,"file":"journey-prefix.js","sourceRoot":"","sources":["../src/journey-prefix.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"journey-prefix.js","sourceRoot":"","sources":["../src/journey-prefix.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import type { JourneyReview } from "@jevitate/journey";
2
+ import type { RenderOptions } from "../journey-review.js";
3
+ export type Style = "markdown" | "text";
4
+ /** `2026-10-11T08:33:26.979Z` as `11 Oct 2026 08:33 UTC` — parsed, not locale-formatted, so it is deterministic. */
5
+ export declare function humanTime(iso: string): string;
6
+ /** Step numbers as ranges: 1, 2, 3, 5 becomes `1–3, 5`. */
7
+ export declare function stepRanges(numbers: readonly number[]): string;
8
+ /** `1 step` / `2 steps`. */
9
+ export declare const plural: (n: number, one: string, many?: string) => string;
10
+ /** The mutable rendering state and closures `renderSheet` used to define inline. */
11
+ export declare class SheetWriter {
12
+ readonly out: string[];
13
+ readonly md: boolean;
14
+ readonly width: number;
15
+ readonly full: boolean;
16
+ readonly color: boolean;
17
+ readonly bullet: string;
18
+ constructor(style: Style, opts?: RenderOptions);
19
+ /** One item: wrapped and hanging in text, a single line in Markdown. */
20
+ put(prefix: string, text: string, hang?: number): void;
21
+ gap(): void;
22
+ /** A section header: caps in text, a heading in Markdown. */
23
+ head(label: string, title?: string): void;
24
+ /** A level-3 heading in the full detail. */
25
+ h3(t: string): void;
26
+ code(s: string): string;
27
+ em(s: string): string;
28
+ cmd(c: string): string;
29
+ }
30
+ export declare function createSheetWriter(style: Style, opts?: RenderOptions): SheetWriter;
31
+ /** Paints a finished sheet, then collapses blank-line runs and trims the tail. */
32
+ export declare function finishSheet(w: SheetWriter): string;
33
+ export declare function renderHeader(r: JourneyReview, w: SheetWriter, opts: RenderOptions): void;
34
+ export declare function renderAttention(r: JourneyReview, w: SheetWriter, opts: RenderOptions): void;
35
+ export declare function renderWhatItDoes(r: JourneyReview, w: SheetWriter, opts: RenderOptions): void;
36
+ export declare function renderInputs(r: JourneyReview, w: SheetWriter, opts: RenderOptions): void;
37
+ export declare function renderSteps(r: JourneyReview, w: SheetWriter, opts: RenderOptions): void;
38
+ export declare function renderProvesAtTheEnd(r: JourneyReview, w: SheetWriter, opts: RenderOptions): void;
39
+ export declare function renderWrites(r: JourneyReview, w: SheetWriter, opts: RenderOptions): void;
40
+ export declare function renderClear(r: JourneyReview, w: SheetWriter, opts: RenderOptions): void;
41
+ export declare function renderProposal(r: JourneyReview, w: SheetWriter, opts: RenderOptions): void;
42
+ export declare function renderFullDetail(r: JourneyReview, w: SheetWriter, opts: RenderOptions): void;
43
+ export declare function renderApprove(r: JourneyReview, w: SheetWriter, opts: RenderOptions): void;
@@ -0,0 +1,461 @@
1
+ import { describeProvenance } from "../approval-provenance.js";
2
+ import { renderFindings } from "../catalog-review.js";
3
+ /**
4
+ * #499 — the review sheet's rendering primitives and one renderer per section. `renderSheet` (in
5
+ * `journey-review.ts`) creates a `SheetWriter` and calls these in the same order as before; this
6
+ * file is a move-only split of that function.
7
+ */
8
+ /** #467: the label of a change that only added step ids; re-approving it takes the warn path of the anchor rules. */
9
+ const STEP_ID_ONLY_LABEL = "ids added only (warn path)";
10
+ const DEFAULT_WIDTH = 100;
11
+ const NB = "\u00a0";
12
+ const MONTHS = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
13
+ /** `2026-10-11T08:33:26.979Z` as `11 Oct 2026 08:33 UTC` — parsed, not locale-formatted, so it is deterministic. */
14
+ export function humanTime(iso) {
15
+ const m = /^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d)/.exec(iso);
16
+ if (m === null)
17
+ return iso;
18
+ return `${Number(m[3])} ${MONTHS[Number(m[2]) - 1] ?? m[2]} ${m[1]} ${m[4]}:${m[5]} UTC`;
19
+ }
20
+ /** Spaces inside a command or hash must not become line breaks. */
21
+ const nb = (s) => s.replace(/ /g, NB);
22
+ /** Wraps `text` after `prefix`; continuation lines are indented `hang` columns. Words (and nb-joined commands) are never cut. */
23
+ function wrapText(prefix, text, width, hang = prefix.length) {
24
+ const words = text.split(" ").filter((w) => w !== "");
25
+ const lines = [];
26
+ let cur = prefix;
27
+ let empty = true;
28
+ for (const w of words) {
29
+ if (!empty && cur.length + 1 + w.length > width) {
30
+ lines.push(cur);
31
+ cur = " ".repeat(hang);
32
+ empty = true;
33
+ }
34
+ cur += `${empty ? "" : " "}${w}`;
35
+ empty = false;
36
+ }
37
+ lines.push(cur);
38
+ return lines.map((l) => l.replaceAll(NB, " ").trimEnd());
39
+ }
40
+ const HEADERS = ["NEEDS YOUR ATTENTION", "WHAT IT DOES", "STEPS", "PROVES AT THE END", "WRITES", "CLEAR", "APPROVE", "INPUTS", "PROPOSED REVISION (SELF-HEAL)", "DETAIL", "Review"];
41
+ function paint(line, color) {
42
+ if (!color)
43
+ return line;
44
+ const header = HEADERS.find((h) => line.startsWith(h) && (line.length === h.length || line[h.length] === " "));
45
+ const body = line.replaceAll("⚠", "\u001b[33m⚠\u001b[0m").replaceAll("✓", "\u001b[32m✓\u001b[0m");
46
+ return header === undefined ? body : `\u001b[1m${header}\u001b[0m${body.slice(header.length)}`;
47
+ }
48
+ /** Step numbers as ranges: 1, 2, 3, 5 becomes `1–3, 5`. */
49
+ export function stepRanges(numbers) {
50
+ const sorted = [...new Set(numbers)].sort((a, b) => a - b);
51
+ const parts = [];
52
+ for (let i = 0; i < sorted.length;) {
53
+ let j = i;
54
+ while (j + 1 < sorted.length && sorted[j + 1] === sorted[j] + 1)
55
+ j++;
56
+ parts.push(j === i ? `${sorted[i]}` : `${sorted[i]}–${sorted[j]}`);
57
+ i = j + 1;
58
+ }
59
+ return parts.join(", ");
60
+ }
61
+ /** `1 step` / `2 steps`. */
62
+ export const plural = (n, one, many = `${one}s`) => `${n} ${n === 1 ? one : many}`;
63
+ /** #469: the verified pull request behind a pr-review approval, one line (empty for any other channel). */
64
+ function prLines(p) {
65
+ const pr = p?.pr;
66
+ if (pr === undefined)
67
+ return [];
68
+ const parts = [
69
+ `PR #${pr.number}${pr.url === undefined ? "" : ` (${pr.url})`}`,
70
+ `reviewer ${pr.reviewer}`,
71
+ ...(pr.author === undefined ? [] : [`author ${pr.author}`]),
72
+ `merged ${pr.mergedSha.slice(0, 12)}`,
73
+ ...(pr.codeOwner === undefined ? [] : [pr.codeOwner ? "reviewer is a code owner" : "reviewer is NOT a code owner"]),
74
+ ];
75
+ return [`Pull-request approval: ${parts.join(" · ")}`];
76
+ }
77
+ /** The mutable rendering state and closures `renderSheet` used to define inline. */
78
+ export class SheetWriter {
79
+ out = [];
80
+ md;
81
+ width;
82
+ full;
83
+ color;
84
+ bullet;
85
+ constructor(style, opts = {}) {
86
+ this.md = style === "markdown";
87
+ this.width = Math.max(40, opts.width ?? DEFAULT_WIDTH);
88
+ this.full = opts.full === true;
89
+ this.color = opts.color === true && !this.md;
90
+ this.bullet = this.md ? "- " : " ";
91
+ }
92
+ /** One item: wrapped and hanging in text, a single line in Markdown. */
93
+ put(prefix, text, hang) {
94
+ if (this.md)
95
+ this.out.push(`${prefix}${text}`.replaceAll(NB, " "));
96
+ else
97
+ this.out.push(...wrapText(prefix, text, this.width, hang));
98
+ }
99
+ gap() {
100
+ this.out.push("");
101
+ }
102
+ /** A section header: caps in text, a heading in Markdown. */
103
+ head(label, title = label.charAt(0) + label.slice(1).toLowerCase()) {
104
+ if (!this.md)
105
+ this.out.push(label);
106
+ else
107
+ this.out.push(`## ${title}`, "");
108
+ }
109
+ /** A level-3 heading in the full detail. */
110
+ h3(t) {
111
+ this.out.push(this.md ? `### ${t}` : `${t}:`);
112
+ }
113
+ code(s) {
114
+ return this.md ? `\`${s.replace(/`/g, "'")}\`` : s;
115
+ }
116
+ em(s) {
117
+ return this.md ? `_${s}_` : s;
118
+ }
119
+ cmd(c) {
120
+ return this.md ? this.code(c) : nb(c);
121
+ }
122
+ }
123
+ export function createSheetWriter(style, opts = {}) {
124
+ return new SheetWriter(style, opts);
125
+ }
126
+ /** Paints a finished sheet, then collapses blank-line runs and trims the tail. */
127
+ export function finishSheet(w) {
128
+ return `${w.out.map((l) => paint(l, w.color)).join("\n").replace(/\n{3,}/g, "\n\n").trimEnd()}\n`;
129
+ }
130
+ // ── Sections ───────────────────────────────────────────────────────────────────────────────────
131
+ export function renderHeader(r, w, opts) {
132
+ void opts;
133
+ // ── Header
134
+ const prov = r.approval?.provenance;
135
+ const c = r.changeSinceApproval;
136
+ const changed = (c.kind === "diff" || c.kind === "snapshot-missing") && c.changed;
137
+ const plainApproval = prov !== undefined && prov.channel === "tty" && prov.agentSignals.filter((x) => !/not.?tty/i.test(x)).length === 0;
138
+ const approvedBy = prov?.user === undefined ? "" : ` by ${prov.user}`;
139
+ const status = !r.promoted
140
+ ? "not promoted"
141
+ : r.approval === undefined
142
+ ? "promoted (no approval recorded)"
143
+ : `approved ${humanTime(r.approval.at)}${plainApproval ? `${approvedBy} (terminal)` : ` — ${describeProvenance(prov)}`} · ${nb(changed ? "CHANGED since approval" : "unchanged since approval")}`;
144
+ if (w.md)
145
+ w.out.push(`# Review: ${r.name}`, "", `**${r.id}** · ${status}`);
146
+ else {
147
+ w.put("Review ", r.name);
148
+ w.put(" ", `${r.id} · ${status}`);
149
+ }
150
+ for (const l of prLines(prov))
151
+ w.put(w.md ? "" : " ", l);
152
+ w.gap();
153
+ }
154
+ export function renderAttention(r, w, opts) {
155
+ void opts;
156
+ // ── Needs your attention
157
+ const attention = r.attention ?? [];
158
+ if (attention.length === 0) {
159
+ if (w.md)
160
+ w.out.push("## Needs your attention", "", "Nothing — every gate is clear.");
161
+ else
162
+ w.out.push("NEEDS YOUR ATTENTION nothing — every gate is clear");
163
+ }
164
+ else {
165
+ w.head("NEEDS YOUR ATTENTION", "Needs your attention");
166
+ for (const a of attention) {
167
+ const icon = a.severity === "warn" ? "⚠" : "○";
168
+ const hint = a.hint === undefined ? "" : ` → ${/^(jevitate|--)/.test(a.hint) ? w.cmd(a.hint) : a.hint}`;
169
+ w.put(`${w.bullet}${icon} `, `${a.text}${hint}`, w.bullet.length + 2);
170
+ }
171
+ }
172
+ w.gap();
173
+ }
174
+ export function renderWhatItDoes(r, w, opts) {
175
+ const full = opts.full === true;
176
+ // ── What it does
177
+ const s = r.summary;
178
+ const wid = [];
179
+ const primary = s.goal ?? s.intent ?? s.description;
180
+ w.head("WHAT IT DOES", "What it does");
181
+ if (primary !== undefined)
182
+ w.put(w.bullet, primary);
183
+ if (s.goal !== undefined && s.intent !== undefined && s.intent !== s.goal && full)
184
+ w.put(w.bullet, s.intent);
185
+ if (s.description !== undefined && s.description !== primary && full)
186
+ w.put(w.bullet, s.description);
187
+ for (const cr of s.successCriteria)
188
+ w.put(w.bullet, `Success: ${cr.description}${cr.check === undefined || !full ? "" : ` (checked by ${w.code(cr.check)})`}`);
189
+ for (const pc of s.preconditions)
190
+ w.put(w.bullet, `Needs: ${pc}`);
191
+ if (s.persona !== undefined)
192
+ wid.push(`persona ${s.persona}`);
193
+ if (s.role !== undefined)
194
+ wid.push(`runs as ${s.role}`);
195
+ if (s.requiresAuth)
196
+ wid.push("Signed in");
197
+ wid.push(...r.sideEffects.origins.slice(0, 1));
198
+ const files = r.steps.flatMap((st) => (st.file === undefined ? [] : [st.file]));
199
+ if (wid.length > 0)
200
+ w.put(w.bullet, wid.join(" · "));
201
+ if (files.length > 0)
202
+ w.put(w.bullet, `Uploads ${files.map(nb).join(", ")}`);
203
+ w.gap();
204
+ }
205
+ export function renderInputs(r, w, opts) {
206
+ void opts;
207
+ // ── Inputs (only when present)
208
+ if (r.inputs.params.length > 0 || r.inputs.secrets.length > 0) {
209
+ w.head("INPUTS", "Inputs");
210
+ if (r.inputs.params.length > 0)
211
+ w.put(w.bullet, `Parameters: ${r.inputs.params.map((p) => `${w.code(p.name)}${p.secret ? " (secret)" : ""}${p.description === undefined ? "" : ` — ${p.description}`}`).join("; ")}`);
212
+ for (const x of r.inputs.secrets)
213
+ w.put(w.bullet, `Secret ${w.code(x.field)} from ${x.manager} on ${x.origin}`);
214
+ w.gap();
215
+ }
216
+ }
217
+ export function renderSteps(r, w, opts) {
218
+ const full = opts.full === true;
219
+ // ── Steps
220
+ if (r.steps.length > 0) {
221
+ w.head("STEPS", "Steps");
222
+ const numW = String(r.steps.length).length;
223
+ for (const st of r.steps) {
224
+ const anchors = (st.anchors ?? []).map((a) => `⚓ ${a}`).join(" ");
225
+ const target = full && st.target !== undefined ? ` — target: ${[st.target.role, st.target.name === undefined ? undefined : `"${st.target.name}"`].filter((x) => x !== undefined).join(" ")}` : "";
226
+ const lead = w.md ? `${st.number}. ` : ` ${String(st.number).padStart(numW)} `;
227
+ const prefixLen = lead.length;
228
+ // M4: a labelled step's exact locator follows its label, so a spoofed label cannot hide it.
229
+ const locator = st.locator === undefined ? "" : `${w.md ? " " : " "}‹${w.code(st.locator)}›`;
230
+ w.put(lead, `${w.md ? `**${st.action}**` : st.action}${locator}${target}${anchors === "" ? "" : ` ${anchors}`}`, w.md ? 0 : prefixLen);
231
+ const sub = w.md ? " - " : " ".repeat(prefixLen);
232
+ const subHang = sub.length + 2;
233
+ if (st.checks !== undefined) {
234
+ const joined = st.checks.map((k) => (k.weak ? `⚠ ${k.text} (proves nothing)` : `✓ ${k.text}`));
235
+ if (w.md)
236
+ for (const j of joined)
237
+ w.put(sub, j);
238
+ else if (sub.length + joined.join(" · ").length <= w.width)
239
+ w.put(sub, joined.join(" · "), subHang);
240
+ else
241
+ for (const j of joined)
242
+ w.put(sub, j, subHang);
243
+ }
244
+ const writes = [...new Set(r.sideEffects.writeRequests.filter((wr) => wr.step === st.number && wr.source !== "end-state").map((wr) => `${wr.method} ${wr.endpoint}`))];
245
+ if (writes.length > 0)
246
+ w.put(sub, `writes ${writes.join(" · ")}`, subHang);
247
+ if (full) {
248
+ if (st.objective !== undefined)
249
+ w.put(sub, `Objective: ${st.objective}`, subHang);
250
+ if (st.expectedResult !== undefined)
251
+ w.put(sub, `Expected result: ${st.expectedResult}`, subHang);
252
+ if (st.file !== undefined)
253
+ w.put(sub, `File: ${w.code(st.file)}`, subHang);
254
+ if (st.params.length > 0)
255
+ w.put(sub, `Params: ${st.params.map((p) => w.code(p)).join(", ")}`, subHang);
256
+ }
257
+ }
258
+ w.gap();
259
+ }
260
+ }
261
+ export function renderProvesAtTheEnd(r, w, opts) {
262
+ void opts;
263
+ // ── Proves at the end
264
+ const endState = r.proof.endStateText ?? r.proof.endState;
265
+ if (endState.length > 0) {
266
+ w.head("PROVES AT THE END", "Proves at the end");
267
+ for (const e of endState)
268
+ w.put(`${w.bullet}✓ `, e, w.bullet.length + 2);
269
+ w.gap();
270
+ }
271
+ }
272
+ export function renderWrites(r, w, opts) {
273
+ void opts;
274
+ // ── Writes
275
+ const fx = r.sideEffects;
276
+ const byEndpoint = new Map();
277
+ for (const wr of fx.writeRequests) {
278
+ const key = `${wr.method} ${wr.endpoint}`;
279
+ const e = byEndpoint.get(key) ?? { steps: [], end: false };
280
+ if (wr.step !== undefined)
281
+ e.steps.push(wr.step);
282
+ if (wr.source === "end-state")
283
+ e.end = true;
284
+ byEndpoint.set(key, e);
285
+ }
286
+ if (byEndpoint.size > 0 || fx.riskyControls.length > 0 || fx.origins.length > 1) {
287
+ w.head("WRITES", "Writes");
288
+ for (const [key, e] of byEndpoint) {
289
+ const where = [...(e.steps.length === 0 ? [] : [`${e.steps.length > 1 ? "steps" : "step"} ${stepRanges(e.steps)}`]), ...(e.end ? ["end state"] : [])];
290
+ w.put(w.bullet, `${w.code(key)}${where.length === 0 ? "" : ` (${where.join(", ")})`}`);
291
+ }
292
+ for (const x of fx.riskyControls) {
293
+ w.put(w.bullet, `Risky control, step ${x.step}: ${x.role === undefined ? "" : `${x.role} `}"${x.control}" — ${x.risk} [${w.code(x.ruleId)}]${x.waivedBy === undefined ? "" : ` (exempted by allowControl ${w.code(x.waivedBy)})`}`);
294
+ }
295
+ if (fx.origins.length > 1)
296
+ w.put(w.bullet, `Origins: ${fx.origins.map((o) => w.code(o)).join(", ")}`);
297
+ w.gap();
298
+ }
299
+ }
300
+ export function renderClear(r, w, opts) {
301
+ const full = opts.full === true;
302
+ // ── Clear
303
+ const clear = [];
304
+ const lint = r.proof.lint;
305
+ if (lint.errors === 0 && lint.warnings === 0)
306
+ clear.push("lint ✓");
307
+ if (r.locatorHealth !== undefined && r.locatorHealth.brittle === 0)
308
+ clear.push(`locators ${r.locatorHealth.stable}/${r.locatorHealth.stable} stable ✓`);
309
+ if (r.catalog !== undefined && !r.catalog.linked)
310
+ clear.push("not linked to a job/persona (info)");
311
+ else if (r.catalog !== undefined && r.catalog.unvetted.length === 0 && r.catalog.needsReReview.length === 0)
312
+ clear.push("catalog links ✓");
313
+ const related = new Set((r.findings ?? []).filter((f) => f.analyzer === "catalog-analysis" && f.code.startsWith("pair:")).flatMap((f) => (f.items ?? []).filter((i) => i !== `journey:${r.id}`)));
314
+ const relatedCount = related.size > 0 ? related.size : (r.findings ?? []).filter((f) => f.analyzer === "catalog-analysis" && f.code.startsWith("pair:")).length;
315
+ if (relatedCount > 0)
316
+ clear.push(`${plural(relatedCount, "related Journey", "related Journeys")} share writes${full ? "" : " (--full for detail)"}`);
317
+ const v = r.proof.verify;
318
+ if (v.status === "recorded" && !v.stale && v.verdict !== "insensitive")
319
+ clear.push(`mutation proof ${v.verdict} ✓`);
320
+ if (clear.length > 0) {
321
+ if (w.md)
322
+ w.out.push("## Clear", "", clear.join(" · "));
323
+ else
324
+ w.put("CLEAR ", clear.join(" · "), 9);
325
+ w.gap();
326
+ }
327
+ }
328
+ export function renderProposal(r, w, opts) {
329
+ void opts;
330
+ // ── Self-heal proposal
331
+ if (r.proposal !== undefined) {
332
+ const pr = r.proposal;
333
+ w.head("PROPOSED REVISION (SELF-HEAL)", "Proposed revision (self-heal)");
334
+ w.put(w.bullet, `${w.code(pr.proposalId)} from ${humanTime(pr.createdAt)}: accepting it makes the content hash ${nb(w.code(pr.proposedHash))} (made against ${nb(w.code(pr.baseHash))})`);
335
+ const scope = pr.changes.range ?? (pr.changes.notes.length > 0 ? "change notes" : "no change context");
336
+ w.put(w.bullet, `Change context: ${scope}${pr.changes.baseSha === undefined ? "" : ` (${pr.changes.baseSha.slice(0, 8)}..${(pr.changes.headSha ?? "").slice(0, 8)})`} · heal attempts ${pr.attempts.total} (${pr.attempts.rejected} rejected)`);
337
+ for (const n of pr.changes.notes)
338
+ w.put(w.bullet, `note: ${n}`);
339
+ if (pr.stale)
340
+ w.put(w.bullet, `STALE — the Journey changed after this proposal was made; it cannot be accepted. Re-run: ${w.cmd(`jevitate journey run ${r.id} --self-heal`)}`);
341
+ if (pr.problem !== undefined && !pr.stale)
342
+ w.put(w.bullet, `REFUSED — ${pr.problem}`);
343
+ for (const st of pr.steps) {
344
+ w.put(w.bullet, `Step ${st.number}: ${st.hypothesis}`);
345
+ w.put(`${w.bullet} `, `before: ${w.code(st.before)}`);
346
+ w.put(`${w.bullet} `, `after: ${w.code(st.after)}`);
347
+ for (const e of st.evidence)
348
+ w.put(`${w.bullet} `, `evidence: ${e}`);
349
+ for (const sh of st.screenshots)
350
+ w.put(`${w.bullet} `, `screenshot: ${sh}`);
351
+ }
352
+ if (pr.stale || pr.problem !== undefined)
353
+ w.put(w.bullet, w.em("not acceptable as it stands"));
354
+ else
355
+ w.put(w.bullet, `Accept exactly this revision: ${w.cmd(pr.acceptCommand)}`);
356
+ w.put(w.bullet, `Reject it: ${w.cmd(`jevitate journey promote ${r.id} --reject-proposal ${pr.proposalId} --reason "<why>"`)}`);
357
+ w.gap();
358
+ }
359
+ }
360
+ export function renderFullDetail(r, w, opts) {
361
+ void opts;
362
+ // ── Full detail
363
+ w.head("DETAIL", "Detail");
364
+ const lint = r.proof.lint;
365
+ const c = r.changeSinceApproval;
366
+ w.h3(`Lint: ${lint.errors} error(s), ${lint.warnings} warning(s)`);
367
+ if (lint.findings.length === 0)
368
+ w.put(w.bullet, w.em("no findings"));
369
+ for (const f of lint.findings)
370
+ w.put(w.bullet, `${f.level} ${f.rule}${f.step === undefined ? "" : ` (step ${f.step})`}: ${f.message}`);
371
+ if (r.proof.acceptedWeak !== undefined)
372
+ w.put(w.bullet, `Accepted weak: "${r.proof.acceptedWeak.reason}" (waived: ${r.proof.acceptedWeak.rules.join(", ")})`);
373
+ const v = r.proof.verify;
374
+ const verify = v.status === "not-verified" ? `not verified — ${v.hint}` : `${v.verdict} (${humanTime(v.at)})${v.stale ? " — STALE: the Journey changed after this proof ran" : ""}${v.reason === undefined ? "" : ` — ${v.reason}`}: ${Object.entries(v.summary).map(([k, n]) => `${n} ${k}`).join(", ")}`;
375
+ w.put("", `Mutation proof: ${verify}`);
376
+ w.gap();
377
+ w.h3("Change since last approval");
378
+ if (c.kind === "first-approval")
379
+ w.put(w.bullet, w.em("first approval — nothing approved before"));
380
+ else if (c.kind === "no-record")
381
+ w.put(w.bullet, w.em("promoted before approvals were recorded — no approved version to compare with"));
382
+ else {
383
+ w.put(w.bullet, `Approved${c.approvedAt === undefined ? "" : ` ${humanTime(c.approvedAt)}`} as ${nb(w.code(c.approvedHash))}${c.kind === "snapshot-missing" ? "; its snapshot is missing" : ""} — ${c.changed ? "CHANGED since" : "unchanged since"}`);
384
+ if (c.stepIdOnly === true)
385
+ w.put(w.bullet, STEP_ID_ONLY_LABEL);
386
+ if (c.kind === "diff") {
387
+ for (const [label, d] of [["Steps", c.steps], ["Assertions", c.assertions], ["Side effects", c.sideEffects]]) {
388
+ if (d.added.length === 0 && d.removed.length === 0)
389
+ continue;
390
+ w.put(w.bullet, `${label}:`);
391
+ for (const l of d.removed)
392
+ w.put(`${w.bullet} `, `− ${l}`, w.bullet.length + 4);
393
+ for (const l of d.added)
394
+ w.put(`${w.bullet} `, `+ ${l}`, w.bullet.length + 4);
395
+ }
396
+ }
397
+ }
398
+ w.gap();
399
+ if (r.anchorWarnings !== undefined && r.anchorWarnings.length > 0) {
400
+ w.h3("Anchor rules");
401
+ for (const warn of r.anchorWarnings)
402
+ w.put(w.bullet, `${warn.severity} ${warn.path}${warn.step === undefined ? "" : ` (step ${warn.step})`}: ${warn.message}${warn.fix === undefined ? "" : ` — fix: ${warn.fix}`}`);
403
+ w.gap();
404
+ }
405
+ if (r.locatorHealth !== undefined) {
406
+ const lh = r.locatorHealth;
407
+ w.h3("Locator health (advisory)");
408
+ w.put("", lh.line);
409
+ if (lh.brittleSteps.length === 0)
410
+ w.put(w.bullet, w.em("no brittle steps"));
411
+ for (const b of lh.brittleSteps)
412
+ w.put(w.bullet, `step ${b.index + 1}${b.stepId === undefined ? "" : ` [${b.stepId}]`} ${b.kind} ${w.code(b.locator)}${b.route === undefined ? "" : ` on ${b.route}`} — ${b.reasons.join("; ")} — fix: ${b.fix}`);
413
+ w.gap();
414
+ }
415
+ if (r.catalog !== undefined) {
416
+ const k = r.catalog;
417
+ const st = (x) => (x === "stale" ? "STALE — needs re-review" : x === "unknown" ? "UNKNOWN — not declared in the catalog" : x);
418
+ w.h3("Catalog");
419
+ if (!k.linked)
420
+ w.put(w.bullet, w.em("not linked to a job/persona"));
421
+ else {
422
+ w.put(w.bullet, k.job === undefined ? "Job: none" : `Job: ${w.code(k.job.id)} (${st(k.job.status)})${k.job.story === undefined ? "" : ` — ${k.job.story}`}`);
423
+ w.put(w.bullet, k.persona === undefined ? "Persona: none" : `Persona: ${w.code(k.persona.id)} (${st(k.persona.status)})`);
424
+ }
425
+ w.gap();
426
+ }
427
+ if (r.findings !== undefined) {
428
+ for (const l of renderFindings(r.findings, w.md ? "markdown" : "text")) {
429
+ if (w.md || l === "" || !/^\s*- /.test(l))
430
+ w.out.push(l);
431
+ else {
432
+ const lead = /^(\s*- )/.exec(l)[1];
433
+ w.put(lead, l.slice(lead.length), lead.length + 2);
434
+ }
435
+ }
436
+ }
437
+ if (r.approval !== undefined) {
438
+ w.h3("Approval record");
439
+ w.put(w.bullet, describeProvenance(r.approval.provenance));
440
+ for (const waive of r.approval.waivers ?? [])
441
+ w.put(w.bullet, `waived (${waive.kind}): "${waive.reason}" — ${waive.items.join(", ")}`);
442
+ if (r.approval.acceptedFindings !== undefined)
443
+ w.put(w.bullet, `acknowledged findings: "${r.approval.acceptedFindings.reason}" — ${r.approval.acceptedFindings.findings.join(", ")}`);
444
+ w.gap();
445
+ }
446
+ }
447
+ export function renderApprove(r, w, opts) {
448
+ void opts;
449
+ // ── Approve (the one place the content hash appears)
450
+ const c = r.changeSinceApproval;
451
+ const changed = (c.kind === "diff" || c.kind === "snapshot-missing") && c.changed;
452
+ const approved = r.promoted && !changed && (c.kind === "diff" || c.kind === "snapshot-missing" || c.kind === "no-record");
453
+ w.head("APPROVE", "Approve");
454
+ const approveCmd = w.cmd(`jevitate journey promote ${r.id} --reviewed-hash ${r.contentHash}`);
455
+ w.put(w.bullet, `${approved ? "(already approved) " : ""}${approveCmd}`);
456
+ if (w.md)
457
+ w.out.push("", `Content hash: ${w.code(r.contentHash)}`);
458
+ else
459
+ w.out.push(`Content hash: ${r.contentHash}`);
460
+ }
461
+ //# sourceMappingURL=render.js.map