@intentius/chant-lexicon-terraform 0.57.0 → 0.58.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 (381) hide show
  1. package/dist/composites/terraform-adopt-op.d.ts +126 -0
  2. package/dist/composites/terraform-adopt-op.d.ts.map +1 -0
  3. package/dist/composites/terraform-apply-op.d.ts +63 -16
  4. package/dist/composites/terraform-apply-op.d.ts.map +1 -1
  5. package/dist/composites/terraform-watch-op.d.ts +80 -36
  6. package/dist/composites/terraform-watch-op.d.ts.map +1 -1
  7. package/dist/config.d.ts +49 -2
  8. package/dist/config.d.ts.map +1 -1
  9. package/dist/describe-resources.d.ts +256 -16
  10. package/dist/describe-resources.d.ts.map +1 -1
  11. package/dist/hcl/descend.d.ts +98 -0
  12. package/dist/hcl/descend.d.ts.map +1 -0
  13. package/dist/hcl/marker.d.ts +130 -0
  14. package/dist/hcl/marker.d.ts.map +1 -0
  15. package/dist/hcl/parse.d.ts +142 -9
  16. package/dist/hcl/parse.d.ts.map +1 -1
  17. package/dist/hcl/references.d.ts +76 -0
  18. package/dist/hcl/references.d.ts.map +1 -0
  19. package/dist/hcl/roots.d.ts +22 -3
  20. package/dist/hcl/roots.d.ts.map +1 -1
  21. package/dist/hcl/suppressions.d.ts +54 -0
  22. package/dist/hcl/suppressions.d.ts.map +1 -0
  23. package/dist/hcl/value.d.ts +77 -0
  24. package/dist/hcl/value.d.ts.map +1 -0
  25. package/dist/index.d.ts +5 -2
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/integrity.json +32 -5
  28. package/dist/lint/audit-catalog.d.ts +3 -2
  29. package/dist/lint/audit-catalog.d.ts.map +1 -1
  30. package/dist/lint/audit-lineage.d.ts +68 -0
  31. package/dist/lint/audit-lineage.d.ts.map +1 -1
  32. package/dist/lint/post-synth/blocks.d.ts +53 -0
  33. package/dist/lint/post-synth/blocks.d.ts.map +1 -0
  34. package/dist/lint/post-synth/fixtures/load.d.ts +37 -0
  35. package/dist/lint/post-synth/fixtures/load.d.ts.map +1 -0
  36. package/dist/lint/post-synth/index.d.ts.map +1 -1
  37. package/dist/lint/post-synth/module-source.d.ts +38 -0
  38. package/dist/lint/post-synth/module-source.d.ts.map +1 -0
  39. package/dist/lint/post-synth/scope.d.ts +65 -0
  40. package/dist/lint/post-synth/scope.d.ts.map +1 -0
  41. package/dist/lint/post-synth/tf001.d.ts +18 -0
  42. package/dist/lint/post-synth/tf001.d.ts.map +1 -1
  43. package/dist/lint/post-synth/tf002.d.ts +32 -0
  44. package/dist/lint/post-synth/tf002.d.ts.map +1 -0
  45. package/dist/lint/post-synth/tf003.d.ts +22 -0
  46. package/dist/lint/post-synth/tf003.d.ts.map +1 -0
  47. package/dist/lint/post-synth/tf004.d.ts +22 -0
  48. package/dist/lint/post-synth/tf004.d.ts.map +1 -0
  49. package/dist/lint/post-synth/tf005.d.ts +28 -0
  50. package/dist/lint/post-synth/tf005.d.ts.map +1 -0
  51. package/dist/lint/post-synth/tf006.d.ts +21 -0
  52. package/dist/lint/post-synth/tf006.d.ts.map +1 -0
  53. package/dist/lint/post-synth/tf007.d.ts +21 -0
  54. package/dist/lint/post-synth/tf007.d.ts.map +1 -0
  55. package/dist/lint/post-synth/tf008.d.ts +22 -0
  56. package/dist/lint/post-synth/tf008.d.ts.map +1 -0
  57. package/dist/lint/post-synth/tf009.d.ts +24 -0
  58. package/dist/lint/post-synth/tf009.d.ts.map +1 -0
  59. package/dist/lint/post-synth/tf010.d.ts +19 -0
  60. package/dist/lint/post-synth/tf010.d.ts.map +1 -0
  61. package/dist/lint/post-synth/tf011.d.ts +18 -0
  62. package/dist/lint/post-synth/tf011.d.ts.map +1 -0
  63. package/dist/lint/post-synth/tf012.d.ts +17 -0
  64. package/dist/lint/post-synth/tf012.d.ts.map +1 -0
  65. package/dist/lint/post-synth/tf013.d.ts +21 -0
  66. package/dist/lint/post-synth/tf013.d.ts.map +1 -0
  67. package/dist/lint/post-synth/tf014.d.ts +25 -0
  68. package/dist/lint/post-synth/tf014.d.ts.map +1 -0
  69. package/dist/lint/post-synth/tf015.d.ts +21 -0
  70. package/dist/lint/post-synth/tf015.d.ts.map +1 -0
  71. package/dist/lint/post-synth/tf016.d.ts +30 -0
  72. package/dist/lint/post-synth/tf016.d.ts.map +1 -0
  73. package/dist/lint/post-synth/tf017.d.ts +19 -0
  74. package/dist/lint/post-synth/tf017.d.ts.map +1 -0
  75. package/dist/lint/post-synth/tf018.d.ts +20 -0
  76. package/dist/lint/post-synth/tf018.d.ts.map +1 -0
  77. package/dist/lint/post-synth/tf019.d.ts +25 -0
  78. package/dist/lint/post-synth/tf019.d.ts.map +1 -0
  79. package/dist/lint/post-synth/tf020.d.ts +38 -0
  80. package/dist/lint/post-synth/tf020.d.ts.map +1 -0
  81. package/dist/lint/post-synth/tf021.d.ts +41 -0
  82. package/dist/lint/post-synth/tf021.d.ts.map +1 -0
  83. package/dist/lint/post-synth/tf022.d.ts +24 -0
  84. package/dist/lint/post-synth/tf022.d.ts.map +1 -0
  85. package/dist/lint/post-synth/tf024.d.ts +24 -0
  86. package/dist/lint/post-synth/tf024.d.ts.map +1 -0
  87. package/dist/lint/post-synth/tf025.d.ts +29 -0
  88. package/dist/lint/post-synth/tf025.d.ts.map +1 -0
  89. package/dist/lint/post-synth/tf026.d.ts +21 -0
  90. package/dist/lint/post-synth/tf026.d.ts.map +1 -0
  91. package/dist/lint/rules/fixtures/load.d.ts +13 -0
  92. package/dist/lint/rules/fixtures/load.d.ts.map +1 -0
  93. package/dist/lint/rules/plan-before-apply.d.ts +11 -0
  94. package/dist/lint/rules/plan-before-apply.d.ts.map +1 -1
  95. package/dist/lint/secret-shape.d.ts +68 -0
  96. package/dist/lint/secret-shape.d.ts.map +1 -0
  97. package/dist/live-ownership.d.ts +55 -0
  98. package/dist/live-ownership.d.ts.map +1 -0
  99. package/dist/lsp/option-keys.d.ts.map +1 -1
  100. package/dist/manifest.json +1 -1
  101. package/dist/okf/index.md +24 -0
  102. package/dist/okf/rules/TF002.md +11 -0
  103. package/dist/okf/rules/TF003.md +11 -0
  104. package/dist/okf/rules/TF004.md +11 -0
  105. package/dist/okf/rules/TF005.md +11 -0
  106. package/dist/okf/rules/TF006.md +11 -0
  107. package/dist/okf/rules/TF007.md +11 -0
  108. package/dist/okf/rules/TF008.md +11 -0
  109. package/dist/okf/rules/TF009.md +11 -0
  110. package/dist/okf/rules/TF010.md +11 -0
  111. package/dist/okf/rules/TF011.md +11 -0
  112. package/dist/okf/rules/TF012.md +11 -0
  113. package/dist/okf/rules/TF013.md +11 -0
  114. package/dist/okf/rules/TF014.md +11 -0
  115. package/dist/okf/rules/TF015.md +11 -0
  116. package/dist/okf/rules/TF016.md +11 -0
  117. package/dist/okf/rules/TF017.md +11 -0
  118. package/dist/okf/rules/TF018.md +11 -0
  119. package/dist/okf/rules/TF019.md +11 -0
  120. package/dist/okf/rules/TF020.md +11 -0
  121. package/dist/okf/rules/TF021.md +11 -0
  122. package/dist/okf/rules/TF022.md +11 -0
  123. package/dist/okf/rules/TF024.md +11 -0
  124. package/dist/okf/rules/TF025.md +11 -0
  125. package/dist/okf/rules/TF026.md +11 -0
  126. package/dist/op/activities/index.d.ts +13 -6
  127. package/dist/op/activities/index.d.ts.map +1 -1
  128. package/dist/op/activities/live-detect.d.ts +51 -0
  129. package/dist/op/activities/live-detect.d.ts.map +1 -0
  130. package/dist/op/activities/terraform.d.ts +445 -17
  131. package/dist/op/activities/terraform.d.ts.map +1 -1
  132. package/dist/op/activity-contracts.d.ts +148 -0
  133. package/dist/op/activity-contracts.d.ts.map +1 -0
  134. package/dist/op/adoption.d.ts +118 -0
  135. package/dist/op/adoption.d.ts.map +1 -0
  136. package/dist/op/builders.d.ts +46 -6
  137. package/dist/op/builders.d.ts.map +1 -1
  138. package/dist/op/resolve-root-mode.d.ts +45 -0
  139. package/dist/op/resolve-root-mode.d.ts.map +1 -0
  140. package/dist/plugin.d.ts.map +1 -1
  141. package/dist/rules/blocks.ts +109 -0
  142. package/dist/rules/module-source.ts +121 -0
  143. package/dist/rules/plan-before-apply.ts +11 -0
  144. package/dist/rules/scope.ts +107 -0
  145. package/dist/rules/tf001.ts +32 -8
  146. package/dist/rules/tf002.ts +151 -0
  147. package/dist/rules/tf003.ts +71 -0
  148. package/dist/rules/tf004.ts +63 -0
  149. package/dist/rules/tf005.ts +76 -0
  150. package/dist/rules/tf006.ts +53 -0
  151. package/dist/rules/tf007.ts +78 -0
  152. package/dist/rules/tf008.ts +75 -0
  153. package/dist/rules/tf009.ts +59 -0
  154. package/dist/rules/tf010.ts +51 -0
  155. package/dist/rules/tf011.ts +49 -0
  156. package/dist/rules/tf012.ts +47 -0
  157. package/dist/rules/tf013.ts +63 -0
  158. package/dist/rules/tf014.ts +72 -0
  159. package/dist/rules/tf015.ts +63 -0
  160. package/dist/rules/tf016.ts +75 -0
  161. package/dist/rules/tf017.ts +50 -0
  162. package/dist/rules/tf018.ts +72 -0
  163. package/dist/rules/tf019.ts +72 -0
  164. package/dist/rules/tf020.ts +123 -0
  165. package/dist/rules/tf021.ts +126 -0
  166. package/dist/rules/tf022.ts +61 -0
  167. package/dist/rules/tf024.ts +70 -0
  168. package/dist/rules/tf025.ts +101 -0
  169. package/dist/rules/tf026.ts +80 -0
  170. package/dist/skills/chant-terraform.md +1 -1
  171. package/package.json +7 -2
  172. package/src/__fixtures__/live/main.tf +28 -0
  173. package/src/__fixtures__/live-adopt/estate.chdf.hcl +6 -0
  174. package/src/__fixtures__/live-adopt/main.tf +21 -0
  175. package/src/__fixtures__/live-estate/README.md +58 -0
  176. package/src/__fixtures__/live-estate/compute.tf +10 -0
  177. package/src/__fixtures__/live-estate/estate.chdf.hcl +1 -0
  178. package/src/__fixtures__/live-estate/logs.tf +8 -0
  179. package/src/__fixtures__/live-estate/network.tf +24 -0
  180. package/src/__fixtures__/live-estate/rule.tf +11 -0
  181. package/src/__fixtures__/live-estate/unowned.tf +21 -0
  182. package/src/__fixtures__/live-estate/versions.tf +31 -0
  183. package/src/__fixtures__/live-ls.json +98 -0
  184. package/src/__fixtures__/live-plan.json +285 -0
  185. package/src/__fixtures__/live-sidecar/estate.chdf.hcl +3 -0
  186. package/src/__fixtures__/live-sidecar/main.tf +24 -0
  187. package/src/__fixtures__/module-tree/README.md +16 -0
  188. package/src/__fixtures__/module-tree/cycle/main.tf +3 -0
  189. package/src/__fixtures__/module-tree/cycle/modules/a/main.tf +9 -0
  190. package/src/__fixtures__/module-tree/cycle/modules/b/main.tf +9 -0
  191. package/src/__fixtures__/module-tree/missing/main.tf +9 -0
  192. package/src/__fixtures__/module-tree/outside/root/main.tf +9 -0
  193. package/src/__fixtures__/module-tree/root/main.tf +28 -0
  194. package/src/__fixtures__/module-tree/root/modules/cdn/main.tf +15 -0
  195. package/src/__fixtures__/module-tree/root/modules/cdn/modules/bucket/main.tf +11 -0
  196. package/src/__fixtures__/module-tree/shared/main.tf +5 -0
  197. package/src/__fixtures__/references/main.tf +56 -0
  198. package/src/codegen/lint-rules-page.test.ts +28 -0
  199. package/src/composites/terraform-adopt-op.acceptance.test.ts +166 -0
  200. package/src/composites/terraform-adopt-op.test.ts +170 -0
  201. package/src/composites/terraform-adopt-op.ts +197 -0
  202. package/src/composites/terraform-apply-op.acceptance.test.ts +183 -5
  203. package/src/composites/terraform-apply-op.test.ts +167 -15
  204. package/src/composites/terraform-apply-op.ts +105 -28
  205. package/src/composites/terraform-watch-op.test.ts +85 -26
  206. package/src/composites/terraform-watch-op.ts +130 -73
  207. package/src/config.ts +32 -3
  208. package/src/describe-resources.live.test.ts +598 -0
  209. package/src/describe-resources.test.ts +53 -0
  210. package/src/describe-resources.ts +811 -28
  211. package/src/hcl/descend.test.ts +162 -0
  212. package/src/hcl/descend.ts +273 -0
  213. package/src/hcl/marker.test.ts +147 -0
  214. package/src/hcl/marker.ts +235 -0
  215. package/src/hcl/parse.test.ts +69 -0
  216. package/src/hcl/parse.ts +249 -27
  217. package/src/hcl/references.test.ts +116 -0
  218. package/src/hcl/references.ts +172 -0
  219. package/src/hcl/roots.ts +59 -5
  220. package/src/hcl/suppressions.test.ts +147 -0
  221. package/src/hcl/suppressions.ts +204 -0
  222. package/src/hcl/value.test.ts +73 -0
  223. package/src/hcl/value.ts +106 -0
  224. package/src/index.ts +31 -1
  225. package/src/lint/audit-catalog.ts +264 -3
  226. package/src/lint/audit-lineage.ts +319 -1
  227. package/src/lint/audit.test.ts +40 -1
  228. package/src/lint/post-synth/blocks.ts +109 -0
  229. package/src/lint/post-synth/fixtures/TF001/negative.tf +28 -0
  230. package/src/lint/post-synth/fixtures/TF001/positive.tf +24 -0
  231. package/src/lint/post-synth/fixtures/TF002/negative.tf +17 -0
  232. package/src/lint/post-synth/fixtures/TF002/positive-legacy.tf +10 -0
  233. package/src/lint/post-synth/fixtures/TF002/positive-no-version.tf +12 -0
  234. package/src/lint/post-synth/fixtures/TF002/positive.tf +7 -0
  235. package/src/lint/post-synth/fixtures/TF003/negative.tf +10 -0
  236. package/src/lint/post-synth/fixtures/TF003/positive.tf +8 -0
  237. package/src/lint/post-synth/fixtures/TF004/negative-git.tf +3 -0
  238. package/src/lint/post-synth/fixtures/TF004/negative-local.tf +3 -0
  239. package/src/lint/post-synth/fixtures/TF004/negative.tf +4 -0
  240. package/src/lint/post-synth/fixtures/TF004/positive.tf +3 -0
  241. package/src/lint/post-synth/fixtures/TF005/negative-local.tf +3 -0
  242. package/src/lint/post-synth/fixtures/TF005/negative-registry.tf +3 -0
  243. package/src/lint/post-synth/fixtures/TF005/negative-sha.tf +3 -0
  244. package/src/lint/post-synth/fixtures/TF005/negative.tf +3 -0
  245. package/src/lint/post-synth/fixtures/TF005/positive-branch.tf +3 -0
  246. package/src/lint/post-synth/fixtures/TF005/positive-non-semver.tf +3 -0
  247. package/src/lint/post-synth/fixtures/TF005/positive.tf +3 -0
  248. package/src/lint/post-synth/fixtures/TF006/negative.tf +5 -0
  249. package/src/lint/post-synth/fixtures/TF006/positive-empty-default.tf +11 -0
  250. package/src/lint/post-synth/fixtures/TF006/positive.tf +6 -0
  251. package/src/lint/post-synth/fixtures/TF007/negative.tf +10 -0
  252. package/src/lint/post-synth/fixtures/TF007/positive.tf +9 -0
  253. package/src/lint/post-synth/fixtures/TF008/negative-variable.tf +10 -0
  254. package/src/lint/post-synth/fixtures/TF008/negative.tf +8 -0
  255. package/src/lint/post-synth/fixtures/TF008/positive-other-provider.tf +10 -0
  256. package/src/lint/post-synth/fixtures/TF008/positive.tf +5 -0
  257. package/src/lint/post-synth/fixtures/TF009/negative.tf +10 -0
  258. package/src/lint/post-synth/fixtures/TF009/positive.tf +4 -0
  259. package/src/lint/post-synth/fixtures/TF010/negative.tf +5 -0
  260. package/src/lint/post-synth/fixtures/TF010/positive.tf +4 -0
  261. package/src/lint/post-synth/fixtures/TF011/negative.tf +5 -0
  262. package/src/lint/post-synth/fixtures/TF011/positive-blank.tf +5 -0
  263. package/src/lint/post-synth/fixtures/TF011/positive.tf +4 -0
  264. package/src/lint/post-synth/fixtures/TF012/negative.tf +4 -0
  265. package/src/lint/post-synth/fixtures/TF012/positive.tf +3 -0
  266. package/src/lint/post-synth/fixtures/TF013/negative.tf +8 -0
  267. package/src/lint/post-synth/fixtures/TF013/positive-data.tf +8 -0
  268. package/src/lint/post-synth/fixtures/TF013/positive.tf +8 -0
  269. package/src/lint/post-synth/fixtures/TF014/negative/main.tf +26 -0
  270. package/src/lint/post-synth/fixtures/TF014/negative/modules/cdn/main.tf +19 -0
  271. package/src/lint/post-synth/fixtures/TF014/positive/main.tf +16 -0
  272. package/src/lint/post-synth/fixtures/TF014/positive/modules/cdn/main.tf +15 -0
  273. package/src/lint/post-synth/fixtures/TF015/negative/main.tf +13 -0
  274. package/src/lint/post-synth/fixtures/TF015/negative/modules/cdn/main.tf +16 -0
  275. package/src/lint/post-synth/fixtures/TF015/positive/main.tf +13 -0
  276. package/src/lint/post-synth/fixtures/TF015/positive/modules/cdn/main.tf +14 -0
  277. package/src/lint/post-synth/fixtures/TF016/negative-template.tf +7 -0
  278. package/src/lint/post-synth/fixtures/TF016/negative.tf +16 -0
  279. package/src/lint/post-synth/fixtures/TF016/positive-shared-file.tf +12 -0
  280. package/src/lint/post-synth/fixtures/TF016/positive.tf +13 -0
  281. package/src/lint/post-synth/fixtures/TF017/negative.tf +4 -0
  282. package/src/lint/post-synth/fixtures/TF017/positive.tf +5 -0
  283. package/src/lint/post-synth/fixtures/TF018/negative.tf +9 -0
  284. package/src/lint/post-synth/fixtures/TF018/positive-data.tf +9 -0
  285. package/src/lint/post-synth/fixtures/TF018/positive.tf +4 -0
  286. package/src/lint/post-synth/fixtures/TF019/negative.tf +14 -0
  287. package/src/lint/post-synth/fixtures/TF019/positive-output.tf +5 -0
  288. package/src/lint/post-synth/fixtures/TF019/positive.tf +16 -0
  289. package/src/lint/post-synth/fixtures/TF020/negative.tf +43 -0
  290. package/src/lint/post-synth/fixtures/TF020/positive.tf +32 -0
  291. package/src/lint/post-synth/fixtures/TF020/scoped/main.tf +21 -0
  292. package/src/lint/post-synth/fixtures/TF020/scoped/modules/cdn/main.tf +13 -0
  293. package/src/lint/post-synth/fixtures/TF021/negative.tf +31 -0
  294. package/src/lint/post-synth/fixtures/TF021/positive-length.tf +8 -0
  295. package/src/lint/post-synth/fixtures/TF021/positive.tf +8 -0
  296. package/src/lint/post-synth/fixtures/TF022/negative-locator.tf +7 -0
  297. package/src/lint/post-synth/fixtures/TF022/negative.tf +10 -0
  298. package/src/lint/post-synth/fixtures/TF022/positive-nested.tf +10 -0
  299. package/src/lint/post-synth/fixtures/TF022/positive.tf +6 -0
  300. package/src/lint/post-synth/fixtures/TF023/negative/main.tf +15 -0
  301. package/src/lint/post-synth/fixtures/TF023/positive/main.tf +9 -0
  302. package/src/lint/post-synth/fixtures/TF023/positive/state.json +24 -0
  303. package/src/lint/post-synth/fixtures/TF024/live-clean/main.tf +9 -0
  304. package/src/lint/post-synth/fixtures/TF024/live-with-backend/main.tf +14 -0
  305. package/src/lint/post-synth/fixtures/TF024/live-with-cloud/main.tf +16 -0
  306. package/src/lint/post-synth/fixtures/TF025/live-clean/main.tf +13 -0
  307. package/src/lint/post-synth/fixtures/TF025/live-with-workspace-ref/main.tf +13 -0
  308. package/src/lint/post-synth/fixtures/TF026/live-default/main.tf +9 -0
  309. package/src/lint/post-synth/fixtures/TF026/live-explicit-delete/main.tf +13 -0
  310. package/src/lint/post-synth/fixtures/TF026/live-keep/main.tf +13 -0
  311. package/src/lint/post-synth/fixtures/load.ts +108 -0
  312. package/src/lint/post-synth/index.ts +48 -0
  313. package/src/lint/post-synth/module-rules.test.ts +153 -0
  314. package/src/lint/post-synth/module-source.test.ts +75 -0
  315. package/src/lint/post-synth/module-source.ts +121 -0
  316. package/src/lint/post-synth/post-synth.test.ts +14 -15
  317. package/src/lint/post-synth/scope.ts +107 -0
  318. package/src/lint/post-synth/single-block.test.ts +263 -0
  319. package/src/lint/post-synth/suppression.test.ts +110 -0
  320. package/src/lint/post-synth/tf001.ts +32 -8
  321. package/src/lint/post-synth/tf002.test.ts +93 -0
  322. package/src/lint/post-synth/tf002.ts +151 -0
  323. package/src/lint/post-synth/tf003.test.ts +75 -0
  324. package/src/lint/post-synth/tf003.ts +71 -0
  325. package/src/lint/post-synth/tf004.test.ts +47 -0
  326. package/src/lint/post-synth/tf004.ts +63 -0
  327. package/src/lint/post-synth/tf005.test.ts +57 -0
  328. package/src/lint/post-synth/tf005.ts +76 -0
  329. package/src/lint/post-synth/tf006.ts +53 -0
  330. package/src/lint/post-synth/tf007.ts +78 -0
  331. package/src/lint/post-synth/tf008.ts +75 -0
  332. package/src/lint/post-synth/tf009.ts +59 -0
  333. package/src/lint/post-synth/tf010.ts +51 -0
  334. package/src/lint/post-synth/tf011.ts +49 -0
  335. package/src/lint/post-synth/tf012.ts +47 -0
  336. package/src/lint/post-synth/tf013.ts +63 -0
  337. package/src/lint/post-synth/tf014.ts +72 -0
  338. package/src/lint/post-synth/tf015.ts +63 -0
  339. package/src/lint/post-synth/tf016.ts +75 -0
  340. package/src/lint/post-synth/tf017.ts +50 -0
  341. package/src/lint/post-synth/tf018.ts +72 -0
  342. package/src/lint/post-synth/tf019.ts +72 -0
  343. package/src/lint/post-synth/tf020.ts +123 -0
  344. package/src/lint/post-synth/tf021.ts +126 -0
  345. package/src/lint/post-synth/tf022.ts +61 -0
  346. package/src/lint/post-synth/tf024.test.ts +42 -0
  347. package/src/lint/post-synth/tf024.ts +70 -0
  348. package/src/lint/post-synth/tf025.test.ts +46 -0
  349. package/src/lint/post-synth/tf025.ts +101 -0
  350. package/src/lint/post-synth/tf026.test.ts +56 -0
  351. package/src/lint/post-synth/tf026.ts +80 -0
  352. package/src/lint/presets.test.ts +72 -0
  353. package/src/lint/rules/fixtures/TF101/negative-op.ts +2 -0
  354. package/src/lint/rules/fixtures/TF101/positive-op.ts +2 -0
  355. package/src/lint/rules/fixtures/load.ts +53 -0
  356. package/src/lint/rules/plan-before-apply.test.ts +112 -7
  357. package/src/lint/rules/plan-before-apply.ts +11 -0
  358. package/src/lint/secret-shape.test.ts +150 -0
  359. package/src/lint/secret-shape.ts +159 -0
  360. package/src/live-ownership.ts +60 -0
  361. package/src/lsp/completions.test.ts +3 -2
  362. package/src/lsp/option-keys.ts +10 -5
  363. package/src/op/activities/choudoufu.acceptance.test.ts +143 -0
  364. package/src/op/activities/choudoufu.test.ts +693 -0
  365. package/src/op/activities/index.ts +40 -4
  366. package/src/op/activities/live-detect.test.ts +143 -0
  367. package/src/op/activities/live-detect.ts +162 -0
  368. package/src/op/activities/registry.test.ts +11 -3
  369. package/src/op/activities/terraform.test.ts +7 -3
  370. package/src/op/activities/terraform.ts +823 -69
  371. package/src/op/activity-contracts.test.ts +147 -0
  372. package/src/op/activity-contracts.ts +178 -0
  373. package/src/op/adoption.test.ts +170 -0
  374. package/src/op/adoption.ts +241 -0
  375. package/src/op/builders.test.ts +60 -5
  376. package/src/op/builders.ts +93 -5
  377. package/src/op/resolve-root-mode.test.ts +85 -0
  378. package/src/op/resolve-root-mode.ts +72 -0
  379. package/src/plugin.test.ts +68 -0
  380. package/src/plugin.ts +75 -9
  381. package/src/skills/chant-terraform.md +1 -1
@@ -4,9 +4,8 @@
4
4
  *
5
5
  * Shaped after `lexicons/k3s/src/op/activities/k3s.ts`: `promisify(exec)` with
6
6
  * the caller's `AbortSignal` forwarded so a local timeout or Ctrl-C kills the
7
- * child, `safeHeartbeat` on an interval around the long calls, and every
8
- * command and environment string produced by a pure exported function so a
9
- * test can assert on it without running terraform.
7
+ * child, and every command and environment string produced by a pure exported
8
+ * function so a test can assert on it without running terraform.
10
9
  *
11
10
  * Two invariants hold for every call:
12
11
  *
@@ -18,15 +17,61 @@
18
17
  * (terraform answers `flag provided but not defined: -input`), so it
19
18
  * carries the environment variable alone.
20
19
  *
21
- * `terraformApply` takes a saved plan file and nothing else. A bare apply
22
- * re-plans at apply time, which is exactly the gap an approval gate exists to
23
- * close, so it is refused rather than offered.
20
+ * `terraformApply` takes a saved plan file and nothing else on a stock root,
21
+ * since a bare apply re-plans at apply time, which is exactly the gap an
22
+ * approval gate exists to close, so it is refused rather than offered. On a
23
+ * live root (#2103, `terraform.binary: "choudoufu"` plus a declared estate)
24
+ * it is the opposite: choudoufu refuses a plan file by design, so
25
+ * `terraformApply` refuses one there and runs a bare `apply -auto-approve`
26
+ * instead.
27
+ *
28
+ * `choudoufuLivePlan`, `choudoufuLiveLs` and `choudoufuLiveCheck` (#2103) are
29
+ * choudoufu-only activities living in this same module for the same reason
30
+ * the four above do: pure command builders, the `promisify(exec)` shape, and
31
+ * no dependency on the lexicon's HCL parse. `./live-detect.ts` is a
32
+ * deliberately separate, cheap regex-based read of "does this root declare a
33
+ * live estate," used only to decide how `terraformApply` reads a non-zero
34
+ * exit and to
35
+ * auto-detect `-estate` for the two live-only reads that need it; the
36
+ * accurate, AST-based version lives in `../../hcl/parse.ts` and stays out of
37
+ * this module's dependency graph. `choudoufu version` is checked once per
38
+ * module load (`ensureChoudoufuVersion`) and refuses a binary older than
39
+ * {@link MIN_CHOUDOUFU_VERSION}.
24
40
  */
25
41
  import type { TerraformConfig, TerraformRootConfig } from "../../config.js";
42
+ import { type AdoptionCandidate } from "../adoption.js";
26
43
  /** Plan file written into the root directory when a step names none. */
27
44
  export declare const DEFAULT_PLAN_FILE = "chant.tfplan";
28
45
  /** Binary used when the `terraform` namespace records no preference. */
29
46
  export declare const DEFAULT_TERRAFORM_BINARY = "terraform";
47
+ /** Where {@link choudoufuLivePlan} writes GitHub issue #788's JSON document, relative to the root directory. */
48
+ export declare const DEFAULT_LIVE_PLAN_DOCUMENT_FILE = "chant.live-plan.json";
49
+ /**
50
+ * choudoufu below this refuses. v0.12.0 brought `live-plan -json`, `live-ls`
51
+ * and `live-check -json` (#2103); v0.13.0 brought the approval artifact
52
+ * ([choudoufu #878](https://github.com/INTENTIUS/choudoufu/issues/878), PR
53
+ * 889): under a live block `plan -out=FILE` is accepted and `apply FILE`
54
+ * re-plans the live system and refuses on a mismatch with exit status 3.
55
+ * {@link terraformApply} depends on that refusal existing, so the floor is
56
+ * the release that shipped it rather than the one before.
57
+ */
58
+ export declare const MIN_CHOUDOUFU_VERSION = "0.13.0";
59
+ /**
60
+ * choudoufu's own refusal summary for `-out` on the `live-plan -estate`
61
+ * surface (`internal/command/live_mode.go`). That is the one surface where a
62
+ * saved plan file is still refused: a directory reached through `-estate` has
63
+ * no `live` block, so plain `plan` and `apply` there are ordinary state-backed
64
+ * commands and a file written from this form would be applied by something
65
+ * that never heard of the estate. Under a `live` block `plan -out` is
66
+ * accepted (choudoufu #878).
67
+ */
68
+ export declare const CHOUDOUFU_LIVE_PLAN_OUT_REFUSAL = "Saved plan files are not available under live resource markers";
69
+ /** Exit status choudoufu's approval refusals carry: not 1 (any ordinary failure), not 2 (`-detailed-exitcode`). */
70
+ export declare const CHOUDOUFU_APPROVAL_EXIT_CODE = 3;
71
+ /** Summary line of choudoufu's refusal when the fresh live plan differs from the approved plan file. */
72
+ export declare const CHOUDOUFU_APPROVAL_MISMATCH_REFUSAL = "The approved plan no longer matches the live system";
73
+ /** Summary line of choudoufu's sibling refusal when the plan file was produced against another estate. */
74
+ export declare const CHOUDOUFU_WRONG_ESTATE_REFUSAL = "The approved plan belongs to a different estate";
30
75
  /** Fields every activity here takes: which root, and where the project is. */
31
76
  export interface TerraformRootArgs {
32
77
  /**
@@ -55,16 +100,73 @@ export interface TerraformPlanArgs extends TerraformRootArgs {
55
100
  }
56
101
  export interface TerraformApplyArgs extends TerraformRootArgs {
57
102
  /**
58
- * The saved plan file to apply, relative to the root directory — normally
103
+ * The saved plan file to apply, relative to the root directory, normally
59
104
  * `plan.out.planFile`, the Plan step's own output. Required: this activity
60
- * has no bare-apply mode.
105
+ * applies a saved plan and has no bare-apply mode, on either kind of root.
106
+ *
107
+ * On a live root this file is the approval artifact
108
+ * [choudoufu #878](https://github.com/INTENTIUS/choudoufu/issues/878) asked
109
+ * for, in the stock form choudoufu v0.13.0 shipped (PR 889). `plan -out`
110
+ * writes stock's own plan file; `apply <planfile>` never replays it, and
111
+ * never reads it as prior state or as an ownership answer. It re-plans
112
+ * against the live system the way every live-markers run does, then
113
+ * compares its fresh plan with the file's, down to the planned values, and
114
+ * refuses with exit status 3 when they differ. So the seam #2106 left named
115
+ * and unused on these args is now this field itself, and there is nothing
116
+ * separate to pass.
61
117
  */
62
- planFile: string;
118
+ planFile?: string;
63
119
  }
64
120
  export interface TerraformShowArgs extends TerraformRootArgs {
65
121
  /** Show this saved plan file. Omitted, the activity shows current state. */
66
122
  planFile?: string;
67
123
  }
124
+ export interface ChoudoufuLivePlanArgs extends TerraformRootArgs {
125
+ /**
126
+ * The estate whose ownership markers this run looks for (`-estate`).
127
+ * Omitted, it is auto-detected from the root's `live` block or
128
+ * `estate.chdf.hcl` sidecar, the same estate the root's own configuration
129
+ * declares, which is what a live root's every other activity assumes too.
130
+ */
131
+ estate?: string;
132
+ /**
133
+ * Render the human half as choudoufu's adoption ledger (`-adoption-only`)
134
+ * instead of the ordinary plan (#2105).
135
+ *
136
+ * This activity already makes two live reads, one for the `-json` document
137
+ * and one for the human render, because the document carries no rendering of
138
+ * the plan itself. This flag changes only the second of them, which is what
139
+ * makes it possible at all: choudoufu refuses `-adoption-only` and `-json` on
140
+ * one invocation ("this run cannot produce both reports at once"), so the two
141
+ * reports have to come from two runs whether or not chant wants both. The
142
+ * cost is that the second read asks the estate-wide sweep the account-bounded
143
+ * question ("which live resources carry no ownership marker at all"), so it
144
+ * is slower than the ordinary render, not faster.
145
+ */
146
+ adoptionOnly?: boolean;
147
+ }
148
+ export interface ChoudoufuLiveLsArgs extends TerraformRootArgs {
149
+ /** The estate to list (`-estate`). Omitted, auto-detected the same way {@link ChoudoufuLivePlanArgs.estate} is. */
150
+ estate?: string;
151
+ /** `-consistent`: poll past the Resource Groups Tagging API's eventual-consistency window. */
152
+ consistent?: boolean;
153
+ }
154
+ export type ChoudoufuLiveCheckArgs = TerraformRootArgs;
155
+ export interface ChoudoufuAdoptArgs extends TerraformRootArgs {
156
+ /**
157
+ * The adoptable matches to claim, normally `ledger.out.adoptions` from a
158
+ * {@link choudoufuLivePlan} step run with `adoptionOnly`. Each carries the
159
+ * two marker values and, where choudoufu printed one, the tagging command
160
+ * that writes them.
161
+ */
162
+ adoptions: AdoptionCandidate[];
163
+ /**
164
+ * The contested candidates the same ledger refused, normally
165
+ * `ledger.out.contested`. Passed in so the Op's result names what was not
166
+ * adopted and why, beside what was; nothing here is ever written.
167
+ */
168
+ contested?: AdoptionCandidate[];
169
+ }
68
170
  /** What {@link terraformInit} resolved. */
69
171
  export interface TerraformInitResult {
70
172
  /** Absolute path of the root module directory that was initialized. */
@@ -94,14 +196,148 @@ export interface TerraformPlanResult extends PlanChangeCounts {
94
196
  /** `terraform show -no-color <planFile>` — the human-readable plan. */
95
197
  text: string;
96
198
  }
199
+ /**
200
+ * Why a live apply refused the approval artifact it was handed. Both are
201
+ * choudoufu's exit status 3, which is neither 1 (any ordinary failure, which
202
+ * a pipeline must not route back to a reviewer) nor `-detailed-exitcode`'s 2.
203
+ *
204
+ * - `"approval-mismatch"`: the fresh live plan's change set or planned
205
+ * values differ from the approved file's.
206
+ * - `"wrong-estate"`: the file was produced from a configuration naming
207
+ * another estate.
208
+ */
209
+ export type TerraformApprovalRefusal = "approval-mismatch" | "wrong-estate";
97
210
  /** What {@link terraformApply} resolved. */
98
211
  export interface TerraformApplyResult {
99
- /** The plan file that was applied. */
100
- planFile: string;
212
+ /** The plan file that was applied, or that was refused. */
213
+ planFile?: string;
101
214
  /** Absolute path of the root module directory. */
102
215
  dir: string;
103
- /** Always `true` on success; the activity throws otherwise. */
216
+ /** `true` when the plan was applied. `false` exactly when {@link refused} is set. */
104
217
  applied: boolean;
218
+ /**
219
+ * Set when a live apply refused the approval artifact (choudoufu exit 3).
220
+ * This is a result, not a thrown error, so a workflow can route the run
221
+ * back to review instead of treating it as a broken step.
222
+ */
223
+ refused?: TerraformApprovalRefusal;
224
+ /** choudoufu's own refusal text, verbatim, when {@link refused} is set. */
225
+ refusal?: string;
226
+ }
227
+ /** Counts projected out of `live-plan -json`'s `unowned` section. */
228
+ export interface LivePlanUnownedCounts {
229
+ /** Live resources at a declared identity carrying no ownership marker for this estate. */
230
+ unowned: number;
231
+ /** Of those, how many an exact content match makes adoptable. */
232
+ adoptable: number;
233
+ }
234
+ /**
235
+ * What {@link choudoufuLivePlan} resolved. `adds`/`changes`/`destroys` (#2106,
236
+ * {@link PlanChangeCounts}) are parsed off the human-readable render's own
237
+ * "Plan: N to add, N to change, N to destroy." summary line
238
+ * ({@link parseChoudoufuPlanSummary}), not off GitHub issue #788's JSON
239
+ * document: that document is deliberately scoped to the three sections a
240
+ * stock plan's `-json` has no notion of at all (`bound`, `omissions`,
241
+ * `unowned`; `internal/command/views/live_plan.go`'s own `LivePlanDocument`
242
+ * doc comment says as much — "the stock plan's -json...can stay separate")
243
+ * and carries no resource-change diff of its own. The ordinary create/change/
244
+ * destroy diff — including the delete choudoufu's own `undeclared_tagged`
245
+ * quadrant folds into it for an orphaned marked resource, per that same
246
+ * file's `StatelessRemoval` doc comment ("the plan's own resource diff
247
+ * carries the destroy itself for those") — renders only in the human form,
248
+ * the same summary line a stock `terraform plan` prints
249
+ * (`internal/command/views/operation_test.go`'s own fixtures confirm the
250
+ * exact wording), which is why the human run's text, already fetched here for
251
+ * the approver to read, is what this activity parses instead of the JSON.
252
+ */
253
+ export interface ChoudoufuLivePlanResult extends LivePlanUnownedCounts, PlanChangeCounts {
254
+ /** `true` when `-detailed-exitcode` reported exit 2: the live plan proposes changes. */
255
+ drift: boolean;
256
+ /** GitHub issue #788's JSON document (`bound`, `omissions`, `unowned`), captured whole. */
257
+ json: unknown;
258
+ /**
259
+ * The human-readable plan, from a second `live-plan` run without `-json`
260
+ * (the document carries no render of it) — or, under
261
+ * {@link ChoudoufuLivePlanArgs.adoptionOnly}, choudoufu's own adoption ledger.
262
+ */
263
+ text: string;
264
+ /**
265
+ * chant's rendering of the adoption ledger over the `-json` document
266
+ * (#2105): one line per adoptable match with its address, its live identity
267
+ * and the two marker values, then any contested address, listed and never
268
+ * offered. Present on every run, `-adoption-only` or not, since it is a
269
+ * projection of the document rather than a second report.
270
+ */
271
+ ledger: string;
272
+ /**
273
+ * What a finding mode posts: {@link ChoudoufuLivePlanResult.text} and then
274
+ * {@link ChoudoufuLivePlanResult.ledger}. The one field an issue or PR body
275
+ * references, so that the JSON document has no path into a body at all.
276
+ */
277
+ finding: string;
278
+ /** Adoptable matches: exactly one live resource at the declared address, with the marker pair that claims it. */
279
+ adoptions: AdoptionCandidate[];
280
+ /** Every candidate at a declared address more than one live resource sits at. Never adoptable. */
281
+ contested: AdoptionCandidate[];
282
+ /** How many declared addresses are contested — the count `contested` above spells out. */
283
+ ambiguous: number;
284
+ /** Absolute path of the root module directory. */
285
+ dir: string;
286
+ /** Where the JSON document was written, relative to `dir`; {@link DEFAULT_LIVE_PLAN_DOCUMENT_FILE} unless overridden. */
287
+ documentPath: string;
288
+ /** The estate this plan ran against. */
289
+ estate: string;
290
+ }
291
+ /** What {@link choudoufuLiveLs} resolved. */
292
+ export interface ChoudoufuLiveLsResult {
293
+ /** The `-json` listing, parsed: every resource the account holds under the estate. */
294
+ json: unknown;
295
+ /** Absolute path of the root module directory (`live-ls` needs no configuration, but this activity still runs in it). */
296
+ dir: string;
297
+ /** The estate that was listed. */
298
+ estate: string;
299
+ }
300
+ /** One adoption {@link choudoufuAdopt} declined, with the reason an operator acts on. */
301
+ export interface AdoptionRefusal {
302
+ /** The declared instance address that was not claimed. */
303
+ addr: string;
304
+ /** The live resource's identity, when the refusal is about a particular one. */
305
+ identity: string;
306
+ /** Why, in a sentence, always naming the two marker values a hand-write would need. */
307
+ reason: string;
308
+ }
309
+ /** What {@link choudoufuAdopt} resolved. */
310
+ export interface ChoudoufuAdoptResult {
311
+ /**
312
+ * How the markers were written. Only `"tag-write"` today; the field exists
313
+ * because #2105 weighed a second mechanism (choudoufu's `adopt` policy verb)
314
+ * and a later run of this activity should say which one it used rather than
315
+ * leave a reader to infer it from the absence of a field. See the activity's
316
+ * own doc for why the policy verb is not reachable from outside the
317
+ * configuration.
318
+ */
319
+ mechanism: "tag-write";
320
+ /** The declared addresses whose live resources now carry this estate's markers. */
321
+ adopted: string[];
322
+ /** `adopted.length`, as a scalar an outcome attribute can carry. */
323
+ adoptedCount: number;
324
+ /** Every candidate this run declined, contested addresses included, with the reason. */
325
+ refused: AdoptionRefusal[];
326
+ /** How many declared addresses were contested — never adopted, always reported. */
327
+ ambiguous: number;
328
+ /** Absolute path of the root module directory. */
329
+ dir: string;
330
+ }
331
+ /** What {@link choudoufuLiveCheck} resolved. */
332
+ export interface ChoudoufuLiveCheckResult {
333
+ /** `true` when the configuration is refused under live resource markers (a non-zero exit). */
334
+ refused: boolean;
335
+ /** GitHub issue #790's declared roster, parsed, when the output could be parsed as JSON. */
336
+ json: unknown;
337
+ /** The raw `-json` output. */
338
+ text: string;
339
+ /** Absolute path of the root module directory. */
340
+ dir: string;
105
341
  }
106
342
  /** What {@link terraformShow} resolved. */
107
343
  export interface TerraformShowResult extends PlanChangeCounts {
@@ -149,11 +385,56 @@ export declare function terraformPlanCommand(opts: {
149
385
  varFiles?: string[];
150
386
  destroy?: boolean;
151
387
  }): string;
152
- /** `terraform apply <planFile>` — a saved plan, never a bare apply. */
388
+ /**
389
+ * `terraform apply <planFile>` — a saved plan, never a bare apply. The same
390
+ * command on a live root: choudoufu v0.13.0 admits a plan file under a `live`
391
+ * block, and a matched one applies without re-prompting, exactly as stock's
392
+ * own `apply <planfile>` does, so no `-auto-approve` is needed or passed.
393
+ */
153
394
  export declare function terraformApplyCommand(opts: {
154
395
  binary: string;
155
396
  planFile: string;
156
397
  }): string;
398
+ /**
399
+ * `live-plan -detailed-exitcode -json -estate=<estate>`. `-json` is what
400
+ * prints GitHub issue #788's document instead of the plan; the human render
401
+ * needs a second invocation without it (see {@link choudoufuLivePlan}).
402
+ *
403
+ * `adoptionOnly` makes that second invocation print the adoption ledger and
404
+ * nothing else (GitHub issue #587). It is refused here alongside `json`
405
+ * because choudoufu refuses the pair itself, and a builder that emitted a
406
+ * command the binary rejects would move the error to the far side of a
407
+ * process spawn for no gain.
408
+ */
409
+ export declare function choudoufuLivePlanCommand(opts: {
410
+ binary: string;
411
+ estate: string;
412
+ json: boolean;
413
+ adoptionOnly?: boolean;
414
+ noColor?: boolean;
415
+ }): string;
416
+ /** `live-ls -estate=<estate> -json [-consistent]`. */
417
+ export declare function choudoufuLiveLsCommand(opts: {
418
+ binary: string;
419
+ estate: string;
420
+ consistent?: boolean;
421
+ }): string;
422
+ /**
423
+ * `live-check -json`. No `DIR` argument: the activity already runs in the
424
+ * root directory (`cwd`), so `-json` alone checks it, since DIR defaults to
425
+ * `.`. Makes no cloud calls; a non-zero exit is a refusal, not a failure this
426
+ * builder's caller need distinguish from one.
427
+ */
428
+ export declare function choudoufuLiveCheckCommand(opts: {
429
+ binary: string;
430
+ }): string;
431
+ /**
432
+ * Project `live-plan -json`'s `unowned` section into counts: how many live
433
+ * resources at a declared identity carry no ownership marker for this
434
+ * estate, and of those, how many an exact content match makes adoptable
435
+ * (`adopt_tofu_estate`/`adopt_tofu_address` present).
436
+ */
437
+ export declare function countLivePlanUnowned(document: unknown): LivePlanUnownedCounts;
157
438
  /**
158
439
  * `terraform show`. The one command here that takes no `-input` flag
159
440
  * (terraform answers `flag provided but not defined: -input`), so automation
@@ -171,6 +452,30 @@ export declare function terraformShowCommand(opts: {
171
452
  * counts as one add and one destroy, exactly as terraform reports it.
172
453
  */
173
454
  export declare function countPlanChanges(planJson: unknown): PlanChangeCounts;
455
+ /**
456
+ * Parse the ordinary "Plan: N to add, N to change, N to destroy." (or "...N
457
+ * to import, N to add...") summary line out of a human-readable `live-plan`
458
+ * render (#2106). "No changes." — the exit-0 case — matches nothing and
459
+ * reads as zero on every count, the same conservative default
460
+ * {@link countPlanChanges} falls back to on a shape it does not recognize.
461
+ */
462
+ export declare function parseChoudoufuPlanSummary(text: string): PlanChangeCounts;
463
+ /** Whether `version` is strictly older than `min`, comparing `major.minor.patch` numerically. */
464
+ export declare function isOlderVersion(version: string, min: string): boolean;
465
+ /**
466
+ * Extract the release version from `choudoufu version`'s human-readable
467
+ * output: `"choudoufu v0.12.0 (based on OpenTofu v1.13.0)\non darwin_arm64"`.
468
+ * `choudoufu version -json`'s `terraform_version` field is the wrong number
469
+ * here: it names the upstream OpenTofu base this build forked from, not the
470
+ * choudoufu release itself (`internal/command/views/version.go`), so this
471
+ * reads the human form's `choudoufu vX.Y.Z` prefix instead. A dev build with
472
+ * no release tag baked in (`version.Fork` unset) prints only the upstream
473
+ * line and carries no choudoufu version to check at all: `undefined` here,
474
+ * same as an output this cannot parse.
475
+ */
476
+ export declare function parseChoudoufuVersion(versionOutput: string): string | undefined;
477
+ /** Test-only: clear the cached version check so a test can simulate a fresh module load. */
478
+ export declare function __resetChoudoufuVersionCheckForTests(): void;
174
479
  /**
175
480
  * `terraform init` in the named root, with the root's `backendConfig` supplied
176
481
  * as `-backend-config` flags. Uses the longInfra profile: init downloads
@@ -192,10 +497,30 @@ export declare function terraformInit(args: TerraformInitArgs, signal?: AbortSig
192
497
  */
193
498
  export declare function terraformPlan(args: TerraformPlanArgs, signal?: AbortSignal): Promise<TerraformPlanResult>;
194
499
  /**
195
- * `terraform apply <planFile>` in the named root. A saved plan only: without
196
- * one, apply re-plans at apply time and acts on something no gate ever saw,
197
- * so a missing `planFile` is refused here rather than quietly widened into a
198
- * bare apply.
500
+ * Which of choudoufu's two approval refusals an exit-3 apply printed, or
501
+ * `undefined` when the output carries neither summary line. Reads both the
502
+ * stderr the diagnostic is written to and the stdout the fresh plan is
503
+ * rendered on, since the two travel separately.
504
+ */
505
+ export declare function classifyApprovalRefusal(output: string): TerraformApprovalRefusal | undefined;
506
+ /**
507
+ * `terraform apply <planFile>` in the named root, on a stock root and on a
508
+ * live one alike.
509
+ *
510
+ * Neither kind has a bare-apply mode here: without a saved `planFile`, apply
511
+ * re-plans at apply time and acts on something no gate ever saw, so a missing
512
+ * one is refused before the CLI runs. choudoufu v0.13.0 is what makes the
513
+ * live half of that true (choudoufu #878, PR 889): `plan -out` is accepted
514
+ * under a `live` block, and `apply <planfile>` re-plans against the live
515
+ * system, compares its fresh plan with the file's down to the planned values,
516
+ * and applies only when they agree.
517
+ *
518
+ * When they do not, choudoufu exits **3**, neither 1 (any ordinary failure)
519
+ * nor `-detailed-exitcode`'s 2, with one of two named refusals. That is an
520
+ * answer rather than a breakage, so it comes back as a result (`refused`,
521
+ * `refusal`) instead of a thrown error, and a workflow can route the run back
522
+ * to review. Exit 3 is read this way only on a live root; on a stock root
523
+ * nothing produces it and every non-zero exit stays a failure.
199
524
  *
200
525
  * Uses the longInfra profile.
201
526
  */
@@ -210,4 +535,107 @@ export declare function terraformApply(args: TerraformApplyArgs, signal?: AbortS
210
535
  * provider.
211
536
  */
212
537
  export declare function terraformShow(args: TerraformShowArgs, signal?: AbortSignal): Promise<TerraformShowResult>;
538
+ /**
539
+ * `choudoufu live-plan -detailed-exitcode -json -estate=<estate>`, plus a
540
+ * second `live-plan` without `-json` for the human-readable render. GitHub
541
+ * issue #788's JSON document carries no render of the plan itself
542
+ * (`views.LivePlanDocument` has no such field), so unlike `terraformPlan`'s
543
+ * single saved artifact this genuinely needs two live reads.
544
+ *
545
+ * The exit code is the answer, exactly as `terraformPlan`'s is: 0 is no
546
+ * drift, 2 is drift, and anything else is a failure thrown with choudoufu's
547
+ * own stderr attached. The JSON document is written to `documentPath` (under
548
+ * `dir`) for a later step or reviewer to open directly.
549
+ *
550
+ * Uses the longInfra profile: like `terraformPlan`, this reads the live
551
+ * system in full (the estate-wide sweep).
552
+ */
553
+ /**
554
+ * The JSON document within a `live-plan -json` stdout: everything from the
555
+ * first line that is a bare `{` to the end. Stock keeps stdout to the
556
+ * document; choudoufu's `-estate` path precedes it with refresh progress
557
+ * lines (choudoufu #894). Returns the input unchanged when no such line
558
+ * exists, so a clean stdout parses as before and a broken one fails in
559
+ * `JSON.parse` with the real text in the error.
560
+ */
561
+ export declare function liveDocumentFrom(stdout: string): string;
562
+ export declare function choudoufuLivePlan(args: ChoudoufuLivePlanArgs & {
563
+ documentPath?: string;
564
+ }, signal?: AbortSignal): Promise<ChoudoufuLivePlanResult>;
565
+ /**
566
+ * `choudoufu live-ls -estate=<estate> -json [-consistent]`: every resource
567
+ * the account holds under the estate, read straight from the Resource Groups
568
+ * Tagging API. No configuration, state or record store is read.
569
+ *
570
+ * Uses the fastIdempotent profile: like `terraformShow`, this reads an
571
+ * artifact-shaped answer and does not plan.
572
+ */
573
+ export declare function choudoufuLiveLs(args: ChoudoufuLiveLsArgs, signal?: AbortSignal): Promise<ChoudoufuLiveLsResult>;
574
+ /**
575
+ * Claim the adoptable matches an adoption ledger found, by writing the two
576
+ * ownership markers onto each live resource (#2105).
577
+ *
578
+ * ## Why a tag write and not a policy verb
579
+ *
580
+ * choudoufu's `policy` block has an `adopt` verb for exactly this cell
581
+ * (`declared_untagged`), and `site/content/docs/use/migrate.md` names
582
+ * `policy { declared_untagged = "adopt" }` as the way to adopt a whole estate
583
+ * at once instead of one resource at a time. That would have been the smaller
584
+ * write: one apply, no tagging calls of chant's own. It is not reachable from
585
+ * outside the configuration, and #2105 checked both ways in:
586
+ *
587
+ * - a `live` block in a terraform override file is dropped in silence.
588
+ * `Module.mergeFile` (choudoufu's `internal/configs/module.go`) merges
589
+ * backends, cloud blocks, providers and resources from an override file
590
+ * and has no `Lives` case at all, so an `override.tf` carrying
591
+ * `terraform { live { policy { declared_untagged = "adopt" } } }` changes
592
+ * nothing. Measured, not inferred: a policy block with a deliberately
593
+ * invalid verb in an override file passes `live-check` clean, and the same
594
+ * block in a primary file is refused by name.
595
+ * - a second primary file carrying one is refused outright: "A module may
596
+ * have only one 'live' block." So is a sidecar beside an in-block form.
597
+ *
598
+ * Which leaves editing the root's own checked-in live configuration, running
599
+ * an apply, and putting it back — a mutation of a reviewed file, with a
600
+ * failure mode (a run that dies between the two edits) that leaves the estate
601
+ * declaring "adopt everything declared and unmarked" for every later apply.
602
+ * chant does not do that to a repository it does not own.
603
+ *
604
+ * So the mechanism is the tag write, which choudoufu's own migration guide
605
+ * calls the whole contract: "There is no `choudoufu adopt` command and no need
606
+ * for one. Two tags is the whole contract (`live/MARKERS.md`), so any tool
607
+ * that writes two tags can adopt a resource." The command each write runs is
608
+ * the paste-ready one choudoufu printed under `live-plan -adoption-only`,
609
+ * carried on the candidate — built from choudoufu's own provider
610
+ * configuration, so it lands on the region and endpoint the plan just read
611
+ * rather than wherever an operator's AWS CLI profile points, and shell-quoted
612
+ * by choudoufu for exactly this use.
613
+ *
614
+ * ## What it refuses
615
+ *
616
+ * A candidate with no printed command (a service whose tagging call this fork
617
+ * does not spell out: IAM, Route53, S3) is refused with its two marker values
618
+ * named, not guessed at. A contested address — more than one live resource at
619
+ * one declared identity — is refused because no single tag write claims it;
620
+ * `contested` is passed in so the Op's own result names what was refused
621
+ * beside what was written, and nothing in this function can adopt one, since
622
+ * `readAdoptionLedger` never puts a contested candidate in `adoptions`.
623
+ *
624
+ * Uses the longInfra profile: one tagging round trip per resource, against the
625
+ * cloud.
626
+ */
627
+ export declare function choudoufuAdopt(args: ChoudoufuAdoptArgs, signal?: AbortSignal): Promise<ChoudoufuAdoptResult>;
628
+ /**
629
+ * `choudoufu live-check -json`: whether the configuration in this root can
630
+ * move under live resource markers, and what stops it if it cannot. Makes no
631
+ * cloud calls and needs no `live` block at all, since the check this activity
632
+ * runs works on any configuration, which is why it needs no `estate`.
633
+ *
634
+ * A non-zero exit is a refusal choudoufu reports, not a failure of this
635
+ * activity: `refused: true` carries it back rather than throwing. An abort
636
+ * or a spawn failure (no numeric exit code) still throws.
637
+ *
638
+ * Uses the fastIdempotent profile: no cloud calls, no state.
639
+ */
640
+ export declare function choudoufuLiveCheck(args: ChoudoufuLiveCheckArgs, signal?: AbortSignal): Promise<ChoudoufuLiveCheckResult>;
213
641
  //# sourceMappingURL=terraform.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"terraform.d.ts","sourceRoot":"","sources":["../../../src/op/activities/terraform.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAOH,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAczE,wEAAwE;AACxE,eAAO,MAAM,iBAAiB,iBAAiB,CAAC;AAEhD,wEAAwE;AACxE,eAAO,MAAM,wBAAwB,cAAc,CAAC;AAIpD,8EAA8E;AAC9E,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,iBAAkB,SAAQ,iBAAiB;IAC1D,8EAA8E;IAC9E,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,8EAA8E;IAC9E,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,iBAAkB,SAAQ,iBAAiB;IAC1D,8FAA8F;IAC9F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,kBAAmB,SAAQ,iBAAiB;IAC3D;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAkB,SAAQ,iBAAiB;IAC1D,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,2CAA2C;AAC3C,MAAM,WAAW,mBAAmB;IAClC,uEAAuE;IACvE,GAAG,EAAE,MAAM,CAAC;IACZ,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,2DAA2D;AAC3D,MAAM,WAAW,gBAAgB;IAC/B,qGAAqG;IACrG,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,+FAA+F;AAC/F,MAAM,WAAW,mBAAoB,SAAQ,gBAAgB;IAC3D,mGAAmG;IACnG,OAAO,EAAE,OAAO,CAAC;IACjB,+FAA+F;IAC/F,QAAQ,EAAE,MAAM,CAAC;IACjB,kDAAkD;IAClD,GAAG,EAAE,MAAM,CAAC;IACZ,iDAAiD;IACjD,IAAI,EAAE,OAAO,CAAC;IACd,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;CACd;AAED,4CAA4C;AAC5C,MAAM,WAAW,oBAAoB;IACnC,sCAAsC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,kDAAkD;IAClD,GAAG,EAAE,MAAM,CAAC;IACZ,+DAA+D;IAC/D,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,2CAA2C;AAC3C,MAAM,WAAW,mBAAoB,SAAQ,gBAAgB;IAC3D,kEAAkE;IAClE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB,kCAAkC;IAClC,IAAI,EAAE,OAAO,CAAC;IACd,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,GAAG,EAAE,MAAM,CAAC;IACZ,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAID;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,iFAAiF;AACjF,wBAAgB,eAAe,CAAC,MAAM,CAAC,EAAE,eAAe,GAAG,MAAM,CAEhE;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,mBAAmB,EAAE,WAAW,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAK1G;AAED,wFAAwF;AACxF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,GAAG,MAAM,CAQT;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GAAG,MAAM,CAMT;AAED,uEAAuE;AACvE,wBAAgB,qBAAqB,CAAC,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAExF;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAIvG;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,OAAO,GAAG,gBAAgB,CAYpE;AAsED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,iBAAiB,EACvB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,mBAAmB,CAAC,CAe9B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,iBAAiB,EACvB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,mBAAmB,CAAC,CAqC9B;AAED;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,kBAAkB,EACxB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,oBAAoB,CAAC,CAkB/B;AAED;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,iBAAiB,EACvB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,mBAAmB,CAAC,CA2B9B"}
1
+ {"version":3,"file":"terraform.d.ts","sourceRoot":"","sources":["../../../src/op/activities/terraform.ts"],"names":[],"mappings":"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"}