@intentius/sql-yodeler 0.1.0 → 0.3.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 (297) hide show
  1. package/README.md +28 -26
  2. package/dist/bin.js +15 -0
  3. package/dist/bin.js.map +1 -1
  4. package/dist/chant/apply.d.ts +9 -1
  5. package/dist/chant/apply.js +13 -1
  6. package/dist/chant/apply.js.map +1 -1
  7. package/dist/chant/build.js +7 -0
  8. package/dist/chant/build.js.map +1 -1
  9. package/dist/chant/drift.d.ts +69 -1
  10. package/dist/chant/drift.js +152 -5
  11. package/dist/chant/drift.js.map +1 -1
  12. package/dist/chant/runnable.d.ts +19 -0
  13. package/dist/chant/runnable.js +47 -0
  14. package/dist/chant/runnable.js.map +1 -0
  15. package/dist/ci/render.d.ts +289 -0
  16. package/dist/ci/render.js +688 -0
  17. package/dist/ci/render.js.map +1 -0
  18. package/dist/ci/replay.d.ts +17 -0
  19. package/dist/ci/replay.js +69 -0
  20. package/dist/ci/replay.js.map +1 -0
  21. package/dist/cli.d.ts +4 -0
  22. package/dist/cli.js +40 -0
  23. package/dist/cli.js.map +1 -1
  24. package/dist/command.d.ts +6 -0
  25. package/dist/command.js.map +1 -1
  26. package/dist/commands/apply.d.ts +113 -0
  27. package/dist/commands/apply.js +376 -49
  28. package/dist/commands/apply.js.map +1 -1
  29. package/dist/commands/approve.d.ts +5 -0
  30. package/dist/commands/approve.js +155 -0
  31. package/dist/commands/approve.js.map +1 -0
  32. package/dist/commands/checkpoint.d.ts +3 -0
  33. package/dist/commands/checkpoint.js +78 -0
  34. package/dist/commands/checkpoint.js.map +1 -0
  35. package/dist/commands/ci.d.ts +3 -0
  36. package/dist/commands/ci.js +118 -0
  37. package/dist/commands/ci.js.map +1 -0
  38. package/dist/commands/docs.d.ts +11 -0
  39. package/dist/commands/docs.js +108 -0
  40. package/dist/commands/docs.js.map +1 -0
  41. package/dist/commands/drift.d.ts +23 -0
  42. package/dist/commands/drift.js +263 -18
  43. package/dist/commands/drift.js.map +1 -1
  44. package/dist/commands/index.js +16 -0
  45. package/dist/commands/index.js.map +1 -1
  46. package/dist/commands/init.d.ts +3 -0
  47. package/dist/commands/init.js +15 -11
  48. package/dist/commands/init.js.map +1 -1
  49. package/dist/commands/lint.js +25 -8
  50. package/dist/commands/lint.js.map +1 -1
  51. package/dist/commands/mcp.d.ts +3 -0
  52. package/dist/commands/mcp.js +50 -0
  53. package/dist/commands/mcp.js.map +1 -0
  54. package/dist/commands/new.d.ts +2 -0
  55. package/dist/commands/new.js +134 -10
  56. package/dist/commands/new.js.map +1 -1
  57. package/dist/commands/override.d.ts +3 -0
  58. package/dist/commands/override.js +150 -0
  59. package/dist/commands/override.js.map +1 -0
  60. package/dist/commands/plan.js +43 -27
  61. package/dist/commands/plan.js.map +1 -1
  62. package/dist/commands/repair.d.ts +11 -0
  63. package/dist/commands/repair.js +15 -7
  64. package/dist/commands/repair.js.map +1 -1
  65. package/dist/commands/report.d.ts +13 -0
  66. package/dist/commands/report.js +121 -0
  67. package/dist/commands/report.js.map +1 -0
  68. package/dist/commands/revert.d.ts +20 -0
  69. package/dist/commands/revert.js +246 -0
  70. package/dist/commands/revert.js.map +1 -0
  71. package/dist/commands/status.js +44 -17
  72. package/dist/commands/status.js.map +1 -1
  73. package/dist/config/base.d.ts +69 -0
  74. package/dist/config/base.js +121 -0
  75. package/dist/config/base.js.map +1 -0
  76. package/dist/config/define.d.ts +223 -3
  77. package/dist/config/define.js +3 -1
  78. package/dist/config/define.js.map +1 -1
  79. package/dist/config/index.d.ts +2 -0
  80. package/dist/config/index.js +2 -0
  81. package/dist/config/index.js.map +1 -1
  82. package/dist/config/load.d.ts +1 -1
  83. package/dist/config/load.js +150 -5
  84. package/dist/config/load.js.map +1 -1
  85. package/dist/config/settings.d.ts +18 -2
  86. package/dist/config/settings.js +40 -6
  87. package/dist/config/settings.js.map +1 -1
  88. package/dist/env-args.d.ts +6 -0
  89. package/dist/env-args.js +31 -1
  90. package/dist/env-args.js.map +1 -1
  91. package/dist/exit.d.ts +20 -0
  92. package/dist/exit.js +28 -0
  93. package/dist/exit.js.map +1 -0
  94. package/dist/history/client.d.ts +8 -0
  95. package/dist/history/client.js +24 -1
  96. package/dist/history/client.js.map +1 -1
  97. package/dist/history/lock.d.ts +5 -1
  98. package/dist/history/lock.js +8 -2
  99. package/dist/history/lock.js.map +1 -1
  100. package/dist/history/postgres/ddl.d.ts +18 -0
  101. package/dist/history/postgres/ddl.js +27 -2
  102. package/dist/history/postgres/ddl.js.map +1 -1
  103. package/dist/history/postgres/store.d.ts +2 -0
  104. package/dist/history/postgres/store.js +7 -1
  105. package/dist/history/postgres/store.js.map +1 -1
  106. package/dist/history/rows.d.ts +16 -3
  107. package/dist/history/rows.js +30 -1
  108. package/dist/history/rows.js.map +1 -1
  109. package/dist/history/store.d.ts +2 -0
  110. package/dist/history/store.js +2 -2
  111. package/dist/history/store.js.map +1 -1
  112. package/dist/index.d.ts +4 -1
  113. package/dist/index.js +1 -0
  114. package/dist/index.js.map +1 -1
  115. package/dist/init/adopt.js +8 -3
  116. package/dist/init/adopt.js.map +1 -1
  117. package/dist/init/live.d.ts +11 -0
  118. package/dist/init/live.js +25 -2
  119. package/dist/init/live.js.map +1 -1
  120. package/dist/lint/check.d.ts +8 -1
  121. package/dist/lint/check.js +38 -4
  122. package/dist/lint/check.js.map +1 -1
  123. package/dist/lint/report.js +1 -1
  124. package/dist/lint/report.js.map +1 -1
  125. package/dist/lint/routines.d.ts +26 -0
  126. package/dist/lint/routines.js +65 -0
  127. package/dist/lint/routines.js.map +1 -0
  128. package/dist/lint/rules.d.ts +16 -4
  129. package/dist/lint/rules.js +9 -4
  130. package/dist/lint/rules.js.map +1 -1
  131. package/dist/mcp/server.d.ts +40 -0
  132. package/dist/mcp/server.js +106 -0
  133. package/dist/mcp/server.js.map +1 -0
  134. package/dist/mcp/tools.d.ts +72 -0
  135. package/dist/mcp/tools.js +178 -0
  136. package/dist/mcp/tools.js.map +1 -0
  137. package/dist/migrations/checkpoint.d.ts +45 -0
  138. package/dist/migrations/checkpoint.js +110 -0
  139. package/dist/migrations/checkpoint.js.map +1 -0
  140. package/dist/migrations/checks.d.ts +28 -0
  141. package/dist/migrations/checks.js +97 -0
  142. package/dist/migrations/checks.js.map +1 -0
  143. package/dist/migrations/create.d.ts +3 -1
  144. package/dist/migrations/create.js +3 -0
  145. package/dist/migrations/create.js.map +1 -1
  146. package/dist/migrations/directory.js +4 -0
  147. package/dist/migrations/directory.js.map +1 -1
  148. package/dist/migrations/document.d.ts +33 -0
  149. package/dist/migrations/document.js +2 -0
  150. package/dist/migrations/document.js.map +1 -1
  151. package/dist/migrations/index.d.ts +3 -0
  152. package/dist/migrations/index.js +3 -0
  153. package/dist/migrations/index.js.map +1 -1
  154. package/dist/migrations/routines.d.ts +31 -0
  155. package/dist/migrations/routines.js +55 -0
  156. package/dist/migrations/routines.js.map +1 -0
  157. package/dist/notify/index.d.ts +124 -0
  158. package/dist/notify/index.js +210 -0
  159. package/dist/notify/index.js.map +1 -0
  160. package/dist/notify/verify.d.ts +53 -0
  161. package/dist/notify/verify.js +71 -0
  162. package/dist/notify/verify.js.map +1 -0
  163. package/dist/pr/forge.d.ts +4 -0
  164. package/dist/pr/forge.js +21 -7
  165. package/dist/pr/forge.js.map +1 -1
  166. package/dist/pr/issue.d.ts +68 -0
  167. package/dist/pr/issue.js +107 -0
  168. package/dist/pr/issue.js.map +1 -0
  169. package/dist/pr/model.d.ts +12 -1
  170. package/dist/pr/model.js +44 -6
  171. package/dist/pr/model.js.map +1 -1
  172. package/dist/pr/render.d.ts +3 -1
  173. package/dist/pr/render.js +63 -4
  174. package/dist/pr/render.js.map +1 -1
  175. package/dist/project.d.ts +19 -2
  176. package/dist/project.js +33 -1
  177. package/dist/project.js.map +1 -1
  178. package/dist/replay/index.d.ts +3 -0
  179. package/dist/replay/index.js +3 -0
  180. package/dist/replay/index.js.map +1 -1
  181. package/dist/replay/replay.d.ts +9 -1
  182. package/dist/replay/replay.js +63 -32
  183. package/dist/replay/replay.js.map +1 -1
  184. package/dist/replay/report.js +1 -1
  185. package/dist/replay/report.js.map +1 -1
  186. package/dist/replay/shared.d.ts +28 -0
  187. package/dist/replay/shared.js +77 -0
  188. package/dist/replay/shared.js.map +1 -0
  189. package/dist/report/audit.d.ts +138 -0
  190. package/dist/report/audit.js +202 -0
  191. package/dist/report/audit.js.map +1 -0
  192. package/dist/report/jsonl.d.ts +21 -0
  193. package/dist/report/jsonl.js +52 -0
  194. package/dist/report/jsonl.js.map +1 -0
  195. package/dist/report/model.d.ts +68 -0
  196. package/dist/report/model.js +127 -0
  197. package/dist/report/model.js.map +1 -0
  198. package/dist/report/render.d.ts +18 -0
  199. package/dist/report/render.js +127 -0
  200. package/dist/report/render.js.map +1 -0
  201. package/dist/schema-docs/render.d.ts +49 -0
  202. package/dist/schema-docs/render.js +359 -0
  203. package/dist/schema-docs/render.js.map +1 -0
  204. package/dist/schemas.d.ts +37 -0
  205. package/dist/schemas.js +41 -0
  206. package/dist/schemas.js.map +1 -0
  207. package/dist/server.d.ts +40 -0
  208. package/dist/server.js +87 -0
  209. package/dist/server.js.map +1 -0
  210. package/dist/sources/ddl.d.ts +53 -0
  211. package/dist/sources/ddl.js +347 -0
  212. package/dist/sources/ddl.js.map +1 -0
  213. package/dist/sources/index.d.ts +69 -0
  214. package/dist/sources/index.js +170 -0
  215. package/dist/sources/index.js.map +1 -0
  216. package/dist/steps/backfill.d.ts +21 -17
  217. package/dist/steps/backfill.js +20 -20
  218. package/dist/steps/backfill.js.map +1 -1
  219. package/dist/steps/index.d.ts +2 -2
  220. package/dist/steps/index.js +3 -3
  221. package/dist/steps/index.js.map +1 -1
  222. package/dist/steps/postgres-migration.d.ts +35 -25
  223. package/dist/steps/postgres-migration.js +42 -29
  224. package/dist/steps/postgres-migration.js.map +1 -1
  225. package/dist/steps/rebuild.d.ts +15 -15
  226. package/dist/steps/rebuild.js +17 -24
  227. package/dist/steps/rebuild.js.map +1 -1
  228. package/dist/tenants/index.d.ts +40 -0
  229. package/dist/tenants/index.js +122 -0
  230. package/dist/tenants/index.js.map +1 -0
  231. package/dist/tenants/target.d.ts +23 -0
  232. package/dist/tenants/target.js +29 -0
  233. package/dist/tenants/target.js.map +1 -0
  234. package/dist/versioned/checks.d.ts +29 -0
  235. package/dist/versioned/checks.js +54 -0
  236. package/dist/versioned/checks.js.map +1 -0
  237. package/dist/versioned/clickhouse.js +8 -0
  238. package/dist/versioned/clickhouse.js.map +1 -1
  239. package/dist/versioned/driver.d.ts +10 -0
  240. package/dist/versioned/engine.d.ts +61 -1
  241. package/dist/versioned/engine.js +109 -6
  242. package/dist/versioned/engine.js.map +1 -1
  243. package/dist/versioned/explain.js +7 -2
  244. package/dist/versioned/explain.js.map +1 -1
  245. package/dist/versioned/index.d.ts +10 -0
  246. package/dist/versioned/index.js +25 -1
  247. package/dist/versioned/index.js.map +1 -1
  248. package/dist/versioned/op.d.ts +16 -1
  249. package/dist/versioned/op.js +43 -6
  250. package/dist/versioned/op.js.map +1 -1
  251. package/dist/versioned/policy.d.ts +98 -0
  252. package/dist/versioned/policy.js +212 -0
  253. package/dist/versioned/policy.js.map +1 -0
  254. package/dist/versioned/postgres/driver.d.ts +3 -1
  255. package/dist/versioned/postgres/driver.js +30 -3
  256. package/dist/versioned/postgres/driver.js.map +1 -1
  257. package/dist/versioned/postgres/waits.d.ts +46 -0
  258. package/dist/versioned/postgres/waits.js +78 -0
  259. package/dist/versioned/postgres/waits.js.map +1 -0
  260. package/dist/versioned/report.d.ts +3 -0
  261. package/dist/versioned/report.js +13 -1
  262. package/dist/versioned/report.js.map +1 -1
  263. package/dist/versioned/revert.d.ts +128 -0
  264. package/dist/versioned/revert.js +251 -0
  265. package/dist/versioned/revert.js.map +1 -0
  266. package/dist/versioned/stand-down.d.ts +30 -0
  267. package/dist/versioned/stand-down.js +56 -0
  268. package/dist/versioned/stand-down.js.map +1 -0
  269. package/dist/versioned/state.d.ts +25 -0
  270. package/dist/versioned/state.js +36 -3
  271. package/dist/versioned/state.js.map +1 -1
  272. package/dist/waves/index.d.ts +179 -0
  273. package/dist/waves/index.js +268 -0
  274. package/dist/waves/index.js.map +1 -0
  275. package/dist/waves/promotion.d.ts +56 -0
  276. package/dist/waves/promotion.js +108 -0
  277. package/dist/waves/promotion.js.map +1 -0
  278. package/dist/waves/record.d.ts +24 -0
  279. package/dist/waves/record.js +20 -0
  280. package/dist/waves/record.js.map +1 -0
  281. package/package.json +22 -8
  282. package/schemas/apply.schema.json +428 -0
  283. package/schemas/checkpoint.schema.json +19 -0
  284. package/schemas/common.schema.json +213 -0
  285. package/schemas/drift.schema.json +61 -0
  286. package/schemas/event.schema.json +36 -0
  287. package/schemas/init.schema.json +31 -0
  288. package/schemas/lint-rules.schema.json +54 -0
  289. package/schemas/lint.schema.json +294 -0
  290. package/schemas/mcp.schema.json +70 -0
  291. package/schemas/new.schema.json +71 -0
  292. package/schemas/plan.schema.json +489 -0
  293. package/schemas/rebase.schema.json +54 -0
  294. package/schemas/repair.schema.json +20 -0
  295. package/schemas/report.schema.json +114 -0
  296. package/schemas/revert.schema.json +69 -0
  297. package/schemas/status.schema.json +371 -0
@@ -0,0 +1,69 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://intentius.io/sql-yodeler/schemas/v1/revert.schema.json",
4
+ "title": "yodel revert <env> <id> --json",
5
+ "description": "Version 1. The revert of a migration: the statements that take the schema from its recorded schema back to its parent's (a hand-written revert step's first), the digest its gate binds, and what happened: planned (--dry-run), denied by a policy rule, gated (waiting for approval), reverted, or failed. Within a version, fields are only added; a reader ignores fields it does not know.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["environment", "migration", "to", "planDigest", "statements", "dataSteps", "status"],
9
+ "properties": {
10
+ "environment": { "type": "string" },
11
+ "migration": { "type": "string" },
12
+ "to": { "description": "The migration it goes back to; null when the first migration is reverted.", "type": ["string", "null"] },
13
+ "planDigest": { "type": "string" },
14
+ "statements": {
15
+ "type": "array",
16
+ "items": {
17
+ "type": "object",
18
+ "additionalProperties": false,
19
+ "required": ["index", "source", "sql", "rule", "class", "done"],
20
+ "properties": {
21
+ "index": { "type": "integer", "minimum": 0 },
22
+ "source": { "description": "step: the hand-written revert step; reverse: diffed from the recorded schemas.", "enum": ["step", "reverse"] },
23
+ "sql": { "type": "string" },
24
+ "rule": { "type": "string" },
25
+ "class": { "type": "string" },
26
+ "destructive": { "const": true },
27
+ "done": { "description": "It succeeded in an earlier run of this revert and is not sent again.", "type": "boolean" }
28
+ }
29
+ }
30
+ },
31
+ "dataSteps": { "description": "The migration's data steps, which the hand-written revert step undoes.", "$ref": "common.schema.json#/$defs/stringList" },
32
+ "step": {
33
+ "type": "object",
34
+ "additionalProperties": false,
35
+ "required": ["file", "sha", "statements"],
36
+ "properties": { "file": { "type": "string" }, "sha": { "type": "string" }, "statements": { "type": "integer", "minimum": 1 } }
37
+ },
38
+ "status": { "enum": ["planned", "denied", "gated", "reverted", "failed"] },
39
+ "policy": {
40
+ "description": "Each policy rule's outcome over the revert, the policy as the base commit has it; denied when a rule denies the revert and no override is recorded for its digest.",
41
+ "$ref": "common.schema.json#/$defs/policy"
42
+ },
43
+ "wave": {
44
+ "description": "When yodel.config.ts waves names the environment: the wave's gate policy at the base commit, the revert's statements it counts as destructive, and whether it asks for an approval of the revert. The revert waits at the migrations Op's gate either way.",
45
+ "type": "object",
46
+ "additionalProperties": false,
47
+ "required": ["gate", "base", "destructiveSteps", "policyWaits"],
48
+ "properties": {
49
+ "gate": { "enum": ["always", "on-destructive", "never"] },
50
+ "base": { "type": "string" },
51
+ "destructiveSteps": {
52
+ "type": "array",
53
+ "items": {
54
+ "type": "object",
55
+ "additionalProperties": false,
56
+ "required": ["migration", "step", "what", "why"],
57
+ "properties": { "migration": { "type": "string" }, "step": { "type": "integer", "minimum": 0 }, "what": { "type": "string" }, "why": { "type": "string" } }
58
+ }
59
+ },
60
+ "policyWaits": { "type": "boolean" }
61
+ }
62
+ },
63
+ "op": { "type": "string" },
64
+ "gate": { "type": "string" },
65
+ "approve": { "description": "The chant approve command that approves this revert.", "type": "string" },
66
+ "gatePlanDigest": { "type": "string" },
67
+ "exitCode": { "type": "integer" }
68
+ }
69
+ }
@@ -0,0 +1,371 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "https://intentius.io/sql-yodeler/schemas/v1/status.schema.json",
4
+ "title": "yodel status <env> --json",
5
+ "description": "Version 1. The environment's migrations against its history; for an environment with a tenant set (yodel.config.ts environments.<env>.tenants), each tenant's, against its own history. Within a version, fields are only added; a reader ignores fields it does not know. yodel apply --json carries the same fields (apply.schema.json).",
6
+ "type": "object",
7
+ "oneOf": [
8
+ {
9
+ "type": "object",
10
+ "$ref": "#/$defs/report",
11
+ "unevaluatedProperties": false
12
+ },
13
+ {
14
+ "$ref": "#/$defs/tenants"
15
+ }
16
+ ],
17
+ "$defs": {
18
+ "step": {
19
+ "type": "object",
20
+ "additionalProperties": false,
21
+ "required": [
22
+ "index",
23
+ "kind",
24
+ "object",
25
+ "name"
26
+ ],
27
+ "properties": {
28
+ "index": {
29
+ "type": "integer",
30
+ "minimum": 0
31
+ },
32
+ "kind": {
33
+ "enum": [
34
+ "op",
35
+ "manual"
36
+ ]
37
+ },
38
+ "object": {
39
+ "type": "string"
40
+ },
41
+ "name": {
42
+ "type": "string"
43
+ },
44
+ "op": {
45
+ "type": "string"
46
+ },
47
+ "reason": {
48
+ "type": "string"
49
+ }
50
+ }
51
+ },
52
+ "report": {
53
+ "type": "object",
54
+ "required": [
55
+ "environment",
56
+ "history",
57
+ "applied",
58
+ "pending",
59
+ "outOfOrder",
60
+ "partWay",
61
+ "mismatches"
62
+ ],
63
+ "properties": {
64
+ "environment": {
65
+ "type": "string"
66
+ },
67
+ "server": {
68
+ "$ref": "common.schema.json#/$defs/server"
69
+ },
70
+ "history": {
71
+ "description": "Where the history table is: its database (ClickHouse) or schema (Postgres), and on ClickHouse the history's own topology.",
72
+ "type": "object",
73
+ "additionalProperties": false,
74
+ "required": [
75
+ "database"
76
+ ],
77
+ "properties": {
78
+ "database": {
79
+ "type": "string"
80
+ },
81
+ "topology": {
82
+ "type": "string"
83
+ }
84
+ }
85
+ },
86
+ "topology": {
87
+ "description": "ClickHouse only: the topology statements are rendered for, and where it came from.",
88
+ "type": "string"
89
+ },
90
+ "applied": {
91
+ "type": "array",
92
+ "items": {
93
+ "type": "object",
94
+ "additionalProperties": false,
95
+ "required": [
96
+ "id",
97
+ "checksum",
98
+ "appliedBy",
99
+ "recordedAt",
100
+ "planDigest",
101
+ "inDirectory"
102
+ ],
103
+ "properties": {
104
+ "id": {
105
+ "type": "string"
106
+ },
107
+ "checksum": {
108
+ "type": "string"
109
+ },
110
+ "appliedBy": {
111
+ "type": "string"
112
+ },
113
+ "recordedAt": {
114
+ "type": "string"
115
+ },
116
+ "planDigest": {
117
+ "type": "string"
118
+ },
119
+ "inDirectory": {
120
+ "type": "boolean"
121
+ },
122
+ "repairs": {
123
+ "type": "array",
124
+ "items": {
125
+ "type": "object",
126
+ "additionalProperties": false,
127
+ "required": [
128
+ "checksum",
129
+ "by",
130
+ "at",
131
+ "reason"
132
+ ],
133
+ "properties": {
134
+ "checksum": {
135
+ "type": "string"
136
+ },
137
+ "by": {
138
+ "type": "string"
139
+ },
140
+ "at": {
141
+ "type": "string"
142
+ },
143
+ "reason": {
144
+ "type": "string"
145
+ }
146
+ }
147
+ }
148
+ }
149
+ }
150
+ }
151
+ },
152
+ "pending": {
153
+ "type": "array",
154
+ "items": {
155
+ "type": "object",
156
+ "additionalProperties": false,
157
+ "required": [
158
+ "id",
159
+ "checksum",
160
+ "outOfOrder",
161
+ "partWay",
162
+ "opSteps",
163
+ "refusedSteps"
164
+ ],
165
+ "properties": {
166
+ "id": {
167
+ "type": "string"
168
+ },
169
+ "checksum": {
170
+ "type": "string"
171
+ },
172
+ "outOfOrder": {
173
+ "type": "boolean"
174
+ },
175
+ "reverted": {
176
+ "description": "It was applied, then yodel revert undid it: who reverted it and when. Applied again, every statement runs again.",
177
+ "type": "object",
178
+ "additionalProperties": false,
179
+ "required": ["by", "at"],
180
+ "properties": { "by": { "type": "string" }, "at": { "type": "string" } }
181
+ },
182
+ "partWay": {
183
+ "oneOf": [
184
+ {
185
+ "type": "null"
186
+ },
187
+ {
188
+ "type": "object",
189
+ "additionalProperties": false,
190
+ "required": [
191
+ "status",
192
+ "resumeAt",
193
+ "error",
194
+ "done",
195
+ "edited"
196
+ ],
197
+ "properties": {
198
+ "status": {
199
+ "enum": [
200
+ "failed",
201
+ "started"
202
+ ]
203
+ },
204
+ "resumeAt": {
205
+ "type": "integer"
206
+ },
207
+ "failedStatement": {
208
+ "type": "integer"
209
+ },
210
+ "error": {
211
+ "type": "string"
212
+ },
213
+ "done": {
214
+ "type": "array",
215
+ "items": {
216
+ "type": "integer"
217
+ }
218
+ },
219
+ "edited": {
220
+ "type": "boolean"
221
+ }
222
+ }
223
+ }
224
+ ]
225
+ },
226
+ "opSteps": {
227
+ "type": "array",
228
+ "items": {
229
+ "$ref": "#/$defs/step"
230
+ }
231
+ },
232
+ "refusedSteps": {
233
+ "type": "array",
234
+ "items": {
235
+ "allOf": [
236
+ {
237
+ "$ref": "#/$defs/step"
238
+ },
239
+ {
240
+ "required": [
241
+ "reason"
242
+ ],
243
+ "type": "object"
244
+ }
245
+ ]
246
+ }
247
+ }
248
+ }
249
+ }
250
+ },
251
+ "outOfOrder": {
252
+ "$ref": "common.schema.json#/$defs/stringList"
253
+ },
254
+ "partWay": {
255
+ "type": "array",
256
+ "items": {
257
+ "type": "object",
258
+ "additionalProperties": false,
259
+ "required": [
260
+ "id",
261
+ "failedStatement"
262
+ ],
263
+ "properties": {
264
+ "id": {
265
+ "type": "string"
266
+ },
267
+ "resumeAt": {
268
+ "type": "integer"
269
+ },
270
+ "failedStatement": {
271
+ "type": [
272
+ "integer",
273
+ "null"
274
+ ]
275
+ }
276
+ }
277
+ }
278
+ },
279
+ "mismatches": {
280
+ "type": "array",
281
+ "items": {
282
+ "type": "object",
283
+ "additionalProperties": false,
284
+ "required": [
285
+ "kind",
286
+ "id",
287
+ "message"
288
+ ],
289
+ "properties": {
290
+ "kind": {
291
+ "enum": [
292
+ "applied",
293
+ "part-way",
294
+ "missing"
295
+ ]
296
+ },
297
+ "id": {
298
+ "type": "string"
299
+ },
300
+ "recorded": {
301
+ "type": "string"
302
+ },
303
+ "actual": {
304
+ "type": "string"
305
+ },
306
+ "statement": {
307
+ "type": "integer"
308
+ },
309
+ "message": {
310
+ "type": "string"
311
+ }
312
+ }
313
+ }
314
+ },
315
+ "skipped": {
316
+ "description": "The migrations a checkpoint leaves out in this environment, in chain order: covered (before the checkpoint the environment starts from, named) or checkpoint (a checkpoint the environment does not start from). Absent when there are none.",
317
+ "type": "array",
318
+ "items": {
319
+ "type": "object",
320
+ "additionalProperties": false,
321
+ "required": ["id", "reason"],
322
+ "properties": {
323
+ "id": { "type": "string" },
324
+ "reason": { "enum": ["covered", "checkpoint"] },
325
+ "checkpoint": { "type": "string" }
326
+ }
327
+ }
328
+ },
329
+ "planDigest": {
330
+ "description": "The digest yodel apply would ask approval for, when it would not refuse.",
331
+ "type": "string"
332
+ },
333
+ "refusal": {
334
+ "$ref": "common.schema.json#/$defs/refusal"
335
+ }
336
+ }
337
+ },
338
+ "tenants": {
339
+ "type": "object",
340
+ "additionalProperties": false,
341
+ "required": [
342
+ "environment",
343
+ "tenants",
344
+ "upToDate",
345
+ "total"
346
+ ],
347
+ "description": "A tenant set: each tenant's status, named <env>/<tenant>, and how many are up to date.",
348
+ "properties": {
349
+ "environment": {
350
+ "type": "string"
351
+ },
352
+ "tenants": {
353
+ "type": "array",
354
+ "items": {
355
+ "type": "object",
356
+ "$ref": "#/$defs/report",
357
+ "unevaluatedProperties": false
358
+ }
359
+ },
360
+ "upToDate": {
361
+ "type": "integer",
362
+ "minimum": 0
363
+ },
364
+ "total": {
365
+ "type": "integer",
366
+ "minimum": 0
367
+ }
368
+ }
369
+ }
370
+ }
371
+ }