@invarn/cibuild 2.9.5 → 2.9.7

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 (553) hide show
  1. package/dist/chunk-35SI42CD.mjs +1 -0
  2. package/dist/chunk-IC45KVLJ.mjs +1 -0
  3. package/dist/chunk-XDY4V23V.mjs +1 -0
  4. package/dist/cli.cjs +14 -14
  5. package/dist/commands.mjs +1 -0
  6. package/dist/lib.mjs +3934 -0
  7. package/package.json +6 -10
  8. package/dist/src/cli.d.ts +0 -3
  9. package/dist/src/cli.d.ts.map +0 -1
  10. package/dist/src/cli.js +0 -399
  11. package/dist/src/commands/a-credential-target-follows-the-flavor-source-set.test.d.ts +0 -38
  12. package/dist/src/commands/a-credential-target-follows-the-flavor-source-set.test.d.ts.map +0 -1
  13. package/dist/src/commands/a-credential-target-follows-the-flavor-source-set.test.js +0 -222
  14. package/dist/src/commands/a-credential-two-workflows-cannot-share-is-declared-per-workflow.test.d.ts +0 -41
  15. package/dist/src/commands/a-credential-two-workflows-cannot-share-is-declared-per-workflow.test.d.ts.map +0 -1
  16. package/dist/src/commands/a-credential-two-workflows-cannot-share-is-declared-per-workflow.test.js +0 -324
  17. package/dist/src/commands/a-properties-stand-in-declares-the-keys-the-build-reads.test.d.ts +0 -2
  18. package/dist/src/commands/a-properties-stand-in-declares-the-keys-the-build-reads.test.d.ts.map +0 -1
  19. package/dist/src/commands/a-properties-stand-in-declares-the-keys-the-build-reads.test.js +0 -382
  20. package/dist/src/commands/an-already-stored-value-does-not-answer-the-target-question.test.d.ts +0 -29
  21. package/dist/src/commands/an-already-stored-value-does-not-answer-the-target-question.test.d.ts.map +0 -1
  22. package/dist/src/commands/an-already-stored-value-does-not-answer-the-target-question.test.js +0 -160
  23. package/dist/src/commands/android-gms-guard.test.d.ts +0 -9
  24. package/dist/src/commands/android-gms-guard.test.d.ts.map +0 -1
  25. package/dist/src/commands/android-gms-guard.test.js +0 -78
  26. package/dist/src/commands/android-java-version.test.d.ts +0 -12
  27. package/dist/src/commands/android-java-version.test.d.ts.map +0 -1
  28. package/dist/src/commands/android-java-version.test.js +0 -209
  29. package/dist/src/commands/android-scanner-java.test.d.ts +0 -2
  30. package/dist/src/commands/android-scanner-java.test.d.ts.map +0 -1
  31. package/dist/src/commands/android-scanner-java.test.js +0 -130
  32. package/dist/src/commands/android-scanner.d.ts +0 -250
  33. package/dist/src/commands/android-scanner.d.ts.map +0 -1
  34. package/dist/src/commands/android-scanner.js +0 -1639
  35. package/dist/src/commands/build.d.ts +0 -215
  36. package/dist/src/commands/build.d.ts.map +0 -1
  37. package/dist/src/commands/build.js +0 -1433
  38. package/dist/src/commands/build.test.d.ts +0 -13
  39. package/dist/src/commands/build.test.d.ts.map +0 -1
  40. package/dist/src/commands/build.test.js +0 -121
  41. package/dist/src/commands/detect-platform.d.ts +0 -13
  42. package/dist/src/commands/detect-platform.d.ts.map +0 -1
  43. package/dist/src/commands/detect-platform.js +0 -51
  44. package/dist/src/commands/detect-project.d.ts +0 -7
  45. package/dist/src/commands/detect-project.d.ts.map +0 -1
  46. package/dist/src/commands/detect-project.js +0 -12
  47. package/dist/src/commands/each-flavor-is-asked-for-its-own-properties-file.test.d.ts +0 -26
  48. package/dist/src/commands/each-flavor-is-asked-for-its-own-properties-file.test.d.ts.map +0 -1
  49. package/dist/src/commands/each-flavor-is-asked-for-its-own-properties-file.test.js +0 -196
  50. package/dist/src/commands/edit.d.ts +0 -12
  51. package/dist/src/commands/edit.d.ts.map +0 -1
  52. package/dist/src/commands/edit.js +0 -652
  53. package/dist/src/commands/edit.test.d.ts +0 -6
  54. package/dist/src/commands/edit.test.d.ts.map +0 -1
  55. package/dist/src/commands/edit.test.js +0 -45
  56. package/dist/src/commands/fidelity-trim.d.ts +0 -13
  57. package/dist/src/commands/fidelity-trim.d.ts.map +0 -1
  58. package/dist/src/commands/fidelity-trim.js +0 -21
  59. package/dist/src/commands/fidelity-trim.test.d.ts +0 -8
  60. package/dist/src/commands/fidelity-trim.test.d.ts.map +0 -1
  61. package/dist/src/commands/fidelity-trim.test.js +0 -79
  62. package/dist/src/commands/file-secret-collector.d.ts +0 -50
  63. package/dist/src/commands/file-secret-collector.d.ts.map +0 -1
  64. package/dist/src/commands/file-secret-collector.js +0 -217
  65. package/dist/src/commands/flavors-a-convention-plugin-creates-are-still-found.test.d.ts +0 -38
  66. package/dist/src/commands/flavors-a-convention-plugin-creates-are-still-found.test.d.ts.map +0 -1
  67. package/dist/src/commands/flavors-a-convention-plugin-creates-are-still-found.test.js +0 -300
  68. package/dist/src/commands/github-workflow.d.ts +0 -5
  69. package/dist/src/commands/github-workflow.d.ts.map +0 -1
  70. package/dist/src/commands/github-workflow.js +0 -45
  71. package/dist/src/commands/index.d.ts +0 -33
  72. package/dist/src/commands/index.d.ts.map +0 -1
  73. package/dist/src/commands/index.js +0 -33
  74. package/dist/src/commands/init.d.ts +0 -20
  75. package/dist/src/commands/init.d.ts.map +0 -1
  76. package/dist/src/commands/init.js +0 -264
  77. package/dist/src/commands/ios-scanner.d.ts +0 -104
  78. package/dist/src/commands/ios-scanner.d.ts.map +0 -1
  79. package/dist/src/commands/ios-scanner.js +0 -492
  80. package/dist/src/commands/ios-scheme-ranking.test.d.ts +0 -2
  81. package/dist/src/commands/ios-scheme-ranking.test.d.ts.map +0 -1
  82. package/dist/src/commands/ios-scheme-ranking.test.js +0 -264
  83. package/dist/src/commands/local-properties-reaches-every-workflow.test.d.ts +0 -30
  84. package/dist/src/commands/local-properties-reaches-every-workflow.test.d.ts.map +0 -1
  85. package/dist/src/commands/local-properties-reaches-every-workflow.test.js +0 -146
  86. package/dist/src/commands/reset.d.ts +0 -7
  87. package/dist/src/commands/reset.d.ts.map +0 -1
  88. package/dist/src/commands/reset.js +0 -81
  89. package/dist/src/commands/run.d.ts +0 -22
  90. package/dist/src/commands/run.d.ts.map +0 -1
  91. package/dist/src/commands/run.js +0 -141
  92. package/dist/src/commands/secrets-sync-workflow.d.ts +0 -15
  93. package/dist/src/commands/secrets-sync-workflow.d.ts.map +0 -1
  94. package/dist/src/commands/secrets-sync-workflow.js +0 -255
  95. package/dist/src/commands/secrets-upload.d.ts +0 -21
  96. package/dist/src/commands/secrets-upload.d.ts.map +0 -1
  97. package/dist/src/commands/secrets-upload.js +0 -177
  98. package/dist/src/commands/secrets-upload.test.d.ts +0 -5
  99. package/dist/src/commands/secrets-upload.test.d.ts.map +0 -1
  100. package/dist/src/commands/secrets-upload.test.js +0 -60
  101. package/dist/src/commands/validate.d.ts +0 -10
  102. package/dist/src/commands/validate.d.ts.map +0 -1
  103. package/dist/src/commands/validate.js +0 -46
  104. package/dist/src/config.d.ts +0 -3
  105. package/dist/src/config.d.ts.map +0 -1
  106. package/dist/src/config.js +0 -47
  107. package/dist/src/envman/cli.d.ts +0 -21
  108. package/dist/src/envman/cli.d.ts.map +0 -1
  109. package/dist/src/envman/cli.js +0 -240
  110. package/dist/src/envman/envman.d.ts +0 -83
  111. package/dist/src/envman/envman.d.ts.map +0 -1
  112. package/dist/src/envman/envman.js +0 -361
  113. package/dist/src/envman/envman.test.d.ts +0 -5
  114. package/dist/src/envman/envman.test.d.ts.map +0 -1
  115. package/dist/src/envman/envman.test.js +0 -236
  116. package/dist/src/envman/envstore-round-trip.test.d.ts +0 -27
  117. package/dist/src/envman/envstore-round-trip.test.d.ts.map +0 -1
  118. package/dist/src/envman/envstore-round-trip.test.js +0 -130
  119. package/dist/src/envman/index.d.ts +0 -23
  120. package/dist/src/envman/index.d.ts.map +0 -1
  121. package/dist/src/envman/index.js +0 -23
  122. package/dist/src/envman/shim.d.ts +0 -16
  123. package/dist/src/envman/shim.d.ts.map +0 -1
  124. package/dist/src/envman/shim.js +0 -66
  125. package/dist/src/envman/types.d.ts +0 -55
  126. package/dist/src/envman/types.d.ts.map +0 -1
  127. package/dist/src/envman/types.js +0 -12
  128. package/dist/src/lib.d.ts +0 -33
  129. package/dist/src/lib.d.ts.map +0 -1
  130. package/dist/src/lib.js +0 -37
  131. package/dist/src/pipeline.d.ts +0 -3
  132. package/dist/src/pipeline.d.ts.map +0 -1
  133. package/dist/src/pipeline.js +0 -57
  134. package/dist/src/runner-node-step.test.d.ts +0 -12
  135. package/dist/src/runner-node-step.test.d.ts.map +0 -1
  136. package/dist/src/runner-node-step.test.js +0 -61
  137. package/dist/src/runner.d.ts +0 -31
  138. package/dist/src/runner.d.ts.map +0 -1
  139. package/dist/src/runner.js +0 -240
  140. package/dist/src/shared/detect-project.d.ts +0 -57
  141. package/dist/src/shared/detect-project.d.ts.map +0 -1
  142. package/dist/src/shared/detect-project.js +0 -219
  143. package/dist/src/shared/detect-project.test.d.ts +0 -2
  144. package/dist/src/shared/detect-project.test.d.ts.map +0 -1
  145. package/dist/src/shared/detect-project.test.js +0 -161
  146. package/dist/src/shared/git.d.ts +0 -25
  147. package/dist/src/shared/git.d.ts.map +0 -1
  148. package/dist/src/shared/git.js +0 -53
  149. package/dist/src/shared/git.test.d.ts +0 -9
  150. package/dist/src/shared/git.test.d.ts.map +0 -1
  151. package/dist/src/shared/git.test.js +0 -66
  152. package/dist/src/shared/gitignore.d.ts +0 -6
  153. package/dist/src/shared/gitignore.d.ts.map +0 -1
  154. package/dist/src/shared/gitignore.js +0 -26
  155. package/dist/src/shared/gradle-settings.d.ts +0 -49
  156. package/dist/src/shared/gradle-settings.d.ts.map +0 -1
  157. package/dist/src/shared/gradle-settings.js +0 -138
  158. package/dist/src/shared/gradle-settings.test.d.ts +0 -2
  159. package/dist/src/shared/gradle-settings.test.d.ts.map +0 -1
  160. package/dist/src/shared/gradle-settings.test.js +0 -65
  161. package/dist/src/shared/prompts.d.ts +0 -30
  162. package/dist/src/shared/prompts.d.ts.map +0 -1
  163. package/dist/src/shared/prompts.js +0 -121
  164. package/dist/src/shared/xcode-container.test.d.ts +0 -2
  165. package/dist/src/shared/xcode-container.test.d.ts.map +0 -1
  166. package/dist/src/shared/xcode-container.test.js +0 -123
  167. package/dist/src/step-marker.d.ts +0 -12
  168. package/dist/src/step-marker.d.ts.map +0 -1
  169. package/dist/src/step-marker.js +0 -29
  170. package/dist/src/step-marker.test.d.ts +0 -11
  171. package/dist/src/step-marker.test.d.ts.map +0 -1
  172. package/dist/src/step-marker.test.js +0 -45
  173. package/dist/src/types.d.ts +0 -58
  174. package/dist/src/types.d.ts.map +0 -1
  175. package/dist/src/types.js +0 -2
  176. package/dist/src/yaml/a-cache-path-must-not-swallow-a-credential.test.d.ts +0 -28
  177. package/dist/src/yaml/a-cache-path-must-not-swallow-a-credential.test.d.ts.map +0 -1
  178. package/dist/src/yaml/a-cache-path-must-not-swallow-a-credential.test.js +0 -223
  179. package/dist/src/yaml/a-declared-secret-reaches-the-file-step.test.d.ts +0 -20
  180. package/dist/src/yaml/a-declared-secret-reaches-the-file-step.test.d.ts.map +0 -1
  181. package/dist/src/yaml/a-declared-secret-reaches-the-file-step.test.js +0 -201
  182. package/dist/src/yaml/a-declared-slot-may-name-the-workflow-it-belongs-to.test.d.ts +0 -37
  183. package/dist/src/yaml/a-declared-slot-may-name-the-workflow-it-belongs-to.test.d.ts.map +0 -1
  184. package/dist/src/yaml/a-declared-slot-may-name-the-workflow-it-belongs-to.test.js +0 -255
  185. package/dist/src/yaml/a-missing-credential-is-loud.test.d.ts +0 -32
  186. package/dist/src/yaml/a-missing-credential-is-loud.test.d.ts.map +0 -1
  187. package/dist/src/yaml/a-missing-credential-is-loud.test.js +0 -301
  188. package/dist/src/yaml/a-runtime-requirement-names-a-real-provider.test.d.ts +0 -18
  189. package/dist/src/yaml/a-runtime-requirement-names-a-real-provider.test.d.ts.map +0 -1
  190. package/dist/src/yaml/a-runtime-requirement-names-a-real-provider.test.js +0 -66
  191. package/dist/src/yaml/a-scoped-slot-must-name-a-workflow-the-pipeline-has.test.d.ts +0 -34
  192. package/dist/src/yaml/a-scoped-slot-must-name-a-workflow-the-pipeline-has.test.d.ts.map +0 -1
  193. package/dist/src/yaml/a-scoped-slot-must-name-a-workflow-the-pipeline-has.test.js +0 -218
  194. package/dist/src/yaml/a-value-this-instance-stored-is-a-value-it-has.test.d.ts +0 -27
  195. package/dist/src/yaml/a-value-this-instance-stored-is-a-value-it-has.test.d.ts.map +0 -1
  196. package/dist/src/yaml/a-value-this-instance-stored-is-a-value-it-has.test.js +0 -126
  197. package/dist/src/yaml/bitrise-compat.d.ts +0 -65
  198. package/dist/src/yaml/bitrise-compat.d.ts.map +0 -1
  199. package/dist/src/yaml/bitrise-compat.js +0 -206
  200. package/dist/src/yaml/bitrise-compat.test.d.ts +0 -5
  201. package/dist/src/yaml/bitrise-compat.test.d.ts.map +0 -1
  202. package/dist/src/yaml/bitrise-compat.test.js +0 -347
  203. package/dist/src/yaml/cache-key-missing-file.test.d.ts +0 -12
  204. package/dist/src/yaml/cache-key-missing-file.test.d.ts.map +0 -1
  205. package/dist/src/yaml/cache-key-missing-file.test.js +0 -116
  206. package/dist/src/yaml/converter.d.ts +0 -103
  207. package/dist/src/yaml/converter.d.ts.map +0 -1
  208. package/dist/src/yaml/converter.js +0 -420
  209. package/dist/src/yaml/converter.test.d.ts +0 -5
  210. package/dist/src/yaml/converter.test.d.ts.map +0 -1
  211. package/dist/src/yaml/converter.test.js +0 -548
  212. package/dist/src/yaml/e2e.test.d.ts +0 -6
  213. package/dist/src/yaml/e2e.test.d.ts.map +0 -1
  214. package/dist/src/yaml/e2e.test.js +0 -446
  215. package/dist/src/yaml/env-resolver.d.ts +0 -218
  216. package/dist/src/yaml/env-resolver.d.ts.map +0 -1
  217. package/dist/src/yaml/env-resolver.js +0 -591
  218. package/dist/src/yaml/env-resolver.test.d.ts +0 -5
  219. package/dist/src/yaml/env-resolver.test.d.ts.map +0 -1
  220. package/dist/src/yaml/env-resolver.test.js +0 -502
  221. package/dist/src/yaml/every-build-log-witnesses-the-commit-on-disk.test.d.ts +0 -16
  222. package/dist/src/yaml/every-build-log-witnesses-the-commit-on-disk.test.d.ts.map +0 -1
  223. package/dist/src/yaml/every-build-log-witnesses-the-commit-on-disk.test.js +0 -126
  224. package/dist/src/yaml/fidelity-input-digest.d.ts +0 -37
  225. package/dist/src/yaml/fidelity-input-digest.d.ts.map +0 -1
  226. package/dist/src/yaml/fidelity-input-digest.js +0 -208
  227. package/dist/src/yaml/fidelity-input-digest.test.d.ts +0 -2
  228. package/dist/src/yaml/fidelity-input-digest.test.d.ts.map +0 -1
  229. package/dist/src/yaml/fidelity-input-digest.test.js +0 -167
  230. package/dist/src/yaml/fidelity-manifest.d.ts +0 -126
  231. package/dist/src/yaml/fidelity-manifest.d.ts.map +0 -1
  232. package/dist/src/yaml/fidelity-manifest.js +0 -134
  233. package/dist/src/yaml/fidelity-manifest.test.d.ts +0 -12
  234. package/dist/src/yaml/fidelity-manifest.test.d.ts.map +0 -1
  235. package/dist/src/yaml/fidelity-manifest.test.js +0 -251
  236. package/dist/src/yaml/interactive-prompts.d.ts +0 -71
  237. package/dist/src/yaml/interactive-prompts.d.ts.map +0 -1
  238. package/dist/src/yaml/interactive-prompts.js +0 -260
  239. package/dist/src/yaml/meta-helpers.d.ts +0 -28
  240. package/dist/src/yaml/meta-helpers.d.ts.map +0 -1
  241. package/dist/src/yaml/meta-helpers.js +0 -46
  242. package/dist/src/yaml/missing-env-handler.d.ts +0 -45
  243. package/dist/src/yaml/missing-env-handler.d.ts.map +0 -1
  244. package/dist/src/yaml/missing-env-handler.js +0 -64
  245. package/dist/src/yaml/parser.d.ts +0 -33
  246. package/dist/src/yaml/parser.d.ts.map +0 -1
  247. package/dist/src/yaml/parser.js +0 -148
  248. package/dist/src/yaml/parser.test.d.ts +0 -5
  249. package/dist/src/yaml/parser.test.d.ts.map +0 -1
  250. package/dist/src/yaml/parser.test.js +0 -83
  251. package/dist/src/yaml/pipeline-with-secrets.d.ts +0 -25
  252. package/dist/src/yaml/pipeline-with-secrets.d.ts.map +0 -1
  253. package/dist/src/yaml/pipeline-with-secrets.js +0 -76
  254. package/dist/src/yaml/platform-detector.d.ts +0 -83
  255. package/dist/src/yaml/platform-detector.d.ts.map +0 -1
  256. package/dist/src/yaml/platform-detector.js +0 -189
  257. package/dist/src/yaml/platform-detector.test.d.ts +0 -5
  258. package/dist/src/yaml/platform-detector.test.d.ts.map +0 -1
  259. package/dist/src/yaml/platform-detector.test.js +0 -525
  260. package/dist/src/yaml/preflight-validation.d.ts +0 -29
  261. package/dist/src/yaml/preflight-validation.d.ts.map +0 -1
  262. package/dist/src/yaml/preflight-validation.js +0 -21
  263. package/dist/src/yaml/secrets-manager.d.ts +0 -87
  264. package/dist/src/yaml/secrets-manager.d.ts.map +0 -1
  265. package/dist/src/yaml/secrets-manager.js +0 -230
  266. package/dist/src/yaml/shell-assignments.d.ts +0 -40
  267. package/dist/src/yaml/shell-assignments.d.ts.map +0 -1
  268. package/dist/src/yaml/shell-assignments.js +0 -77
  269. package/dist/src/yaml/step-validator-check-failure.test.d.ts +0 -24
  270. package/dist/src/yaml/step-validator-check-failure.test.d.ts.map +0 -1
  271. package/dist/src/yaml/step-validator-check-failure.test.js +0 -130
  272. package/dist/src/yaml/step-validator-self-assigned.test.d.ts +0 -23
  273. package/dist/src/yaml/step-validator-self-assigned.test.d.ts.map +0 -1
  274. package/dist/src/yaml/step-validator-self-assigned.test.js +0 -191
  275. package/dist/src/yaml/step-validator.d.ts +0 -67
  276. package/dist/src/yaml/step-validator.d.ts.map +0 -1
  277. package/dist/src/yaml/step-validator.js +0 -466
  278. package/dist/src/yaml/step-validator.test.d.ts +0 -18
  279. package/dist/src/yaml/step-validator.test.d.ts.map +0 -1
  280. package/dist/src/yaml/step-validator.test.js +0 -140
  281. package/dist/src/yaml/steps/android-sign.d.ts +0 -35
  282. package/dist/src/yaml/steps/android-sign.d.ts.map +0 -1
  283. package/dist/src/yaml/steps/android-sign.js +0 -147
  284. package/dist/src/yaml/steps/android-variant-resolution.test.d.ts +0 -2
  285. package/dist/src/yaml/steps/android-variant-resolution.test.d.ts.map +0 -1
  286. package/dist/src/yaml/steps/android-variant-resolution.test.js +0 -260
  287. package/dist/src/yaml/steps/android-version.d.ts +0 -26
  288. package/dist/src/yaml/steps/android-version.d.ts.map +0 -1
  289. package/dist/src/yaml/steps/android-version.js +0 -128
  290. package/dist/src/yaml/steps/android-version.test.d.ts +0 -5
  291. package/dist/src/yaml/steps/android-version.test.d.ts.map +0 -1
  292. package/dist/src/yaml/steps/android-version.test.js +0 -196
  293. package/dist/src/yaml/steps/android.d.ts +0 -156
  294. package/dist/src/yaml/steps/android.d.ts.map +0 -1
  295. package/dist/src/yaml/steps/android.js +0 -1092
  296. package/dist/src/yaml/steps/app-store-deploy.d.ts +0 -48
  297. package/dist/src/yaml/steps/app-store-deploy.d.ts.map +0 -1
  298. package/dist/src/yaml/steps/app-store-deploy.js +0 -167
  299. package/dist/src/yaml/steps/base.d.ts +0 -263
  300. package/dist/src/yaml/steps/base.d.ts.map +0 -1
  301. package/dist/src/yaml/steps/base.js +0 -380
  302. package/dist/src/yaml/steps/bitrise-android-tools.d.ts +0 -26
  303. package/dist/src/yaml/steps/bitrise-android-tools.d.ts.map +0 -1
  304. package/dist/src/yaml/steps/bitrise-android-tools.js +0 -200
  305. package/dist/src/yaml/steps/bitrise-android-tools.test.d.ts +0 -5
  306. package/dist/src/yaml/steps/bitrise-android-tools.test.d.ts.map +0 -1
  307. package/dist/src/yaml/steps/bitrise-android-tools.test.js +0 -280
  308. package/dist/src/yaml/steps/bitrise-apk-info.d.ts +0 -22
  309. package/dist/src/yaml/steps/bitrise-apk-info.d.ts.map +0 -1
  310. package/dist/src/yaml/steps/bitrise-apk-info.js +0 -144
  311. package/dist/src/yaml/steps/bitrise-apk-info.test.d.ts +0 -5
  312. package/dist/src/yaml/steps/bitrise-apk-info.test.d.ts.map +0 -1
  313. package/dist/src/yaml/steps/bitrise-apk-info.test.js +0 -331
  314. package/dist/src/yaml/steps/bitrise-slack.d.ts +0 -49
  315. package/dist/src/yaml/steps/bitrise-slack.d.ts.map +0 -1
  316. package/dist/src/yaml/steps/bitrise-slack.js +0 -280
  317. package/dist/src/yaml/steps/bitrise-slack.test.d.ts +0 -5
  318. package/dist/src/yaml/steps/bitrise-slack.test.d.ts.map +0 -1
  319. package/dist/src/yaml/steps/bitrise-slack.test.js +0 -484
  320. package/dist/src/yaml/steps/bitrise-ssh.d.ts +0 -27
  321. package/dist/src/yaml/steps/bitrise-ssh.d.ts.map +0 -1
  322. package/dist/src/yaml/steps/bitrise-ssh.js +0 -134
  323. package/dist/src/yaml/steps/bitrise-ssh.test.d.ts +0 -5
  324. package/dist/src/yaml/steps/bitrise-ssh.test.d.ts.map +0 -1
  325. package/dist/src/yaml/steps/bitrise-ssh.test.js +0 -205
  326. package/dist/src/yaml/steps/cache-pull-daemon.test.d.ts +0 -27
  327. package/dist/src/yaml/steps/cache-pull-daemon.test.d.ts.map +0 -1
  328. package/dist/src/yaml/steps/cache-pull-daemon.test.js +0 -212
  329. package/dist/src/yaml/steps/cache-pull-restore-roots.test.d.ts +0 -42
  330. package/dist/src/yaml/steps/cache-pull-restore-roots.test.d.ts.map +0 -1
  331. package/dist/src/yaml/steps/cache-pull-restore-roots.test.js +0 -209
  332. package/dist/src/yaml/steps/cache-push-daemon.test.d.ts +0 -27
  333. package/dist/src/yaml/steps/cache-push-daemon.test.d.ts.map +0 -1
  334. package/dist/src/yaml/steps/cache-push-daemon.test.js +0 -171
  335. package/dist/src/yaml/steps/cache.d.ts +0 -59
  336. package/dist/src/yaml/steps/cache.d.ts.map +0 -1
  337. package/dist/src/yaml/steps/cache.js +0 -1027
  338. package/dist/src/yaml/steps/capture-injection.d.ts +0 -30
  339. package/dist/src/yaml/steps/capture-injection.d.ts.map +0 -1
  340. package/dist/src/yaml/steps/capture-injection.js +0 -88
  341. package/dist/src/yaml/steps/capture-injection.test.d.ts +0 -2
  342. package/dist/src/yaml/steps/capture-injection.test.d.ts.map +0 -1
  343. package/dist/src/yaml/steps/capture-injection.test.js +0 -163
  344. package/dist/src/yaml/steps/cocoapods-deployment-floor.d.ts +0 -42
  345. package/dist/src/yaml/steps/cocoapods-deployment-floor.d.ts.map +0 -1
  346. package/dist/src/yaml/steps/cocoapods-deployment-floor.js +0 -140
  347. package/dist/src/yaml/steps/cocoapods-deployment-floor.test.d.ts +0 -11
  348. package/dist/src/yaml/steps/cocoapods-deployment-floor.test.d.ts.map +0 -1
  349. package/dist/src/yaml/steps/cocoapods-deployment-floor.test.js +0 -176
  350. package/dist/src/yaml/steps/cocoapods-install-emits-valid-bash.test.d.ts +0 -22
  351. package/dist/src/yaml/steps/cocoapods-install-emits-valid-bash.test.d.ts.map +0 -1
  352. package/dist/src/yaml/steps/cocoapods-install-emits-valid-bash.test.js +0 -97
  353. package/dist/src/yaml/steps/cocoapods-locked-bundler.test.d.ts +0 -17
  354. package/dist/src/yaml/steps/cocoapods-locked-bundler.test.d.ts.map +0 -1
  355. package/dist/src/yaml/steps/cocoapods-locked-bundler.test.js +0 -282
  356. package/dist/src/yaml/steps/cocoapods-skip-if-absent.test.d.ts +0 -17
  357. package/dist/src/yaml/steps/cocoapods-skip-if-absent.test.d.ts.map +0 -1
  358. package/dist/src/yaml/steps/cocoapods-skip-if-absent.test.js +0 -132
  359. package/dist/src/yaml/steps/envstore-loader.test.d.ts +0 -15
  360. package/dist/src/yaml/steps/envstore-loader.test.d.ts.map +0 -1
  361. package/dist/src/yaml/steps/envstore-loader.test.js +0 -143
  362. package/dist/src/yaml/steps/fastlane.d.ts +0 -27
  363. package/dist/src/yaml/steps/fastlane.d.ts.map +0 -1
  364. package/dist/src/yaml/steps/fastlane.js +0 -79
  365. package/dist/src/yaml/steps/fidelity-aspect-guard.d.ts +0 -53
  366. package/dist/src/yaml/steps/fidelity-aspect-guard.d.ts.map +0 -1
  367. package/dist/src/yaml/steps/fidelity-aspect-guard.js +0 -72
  368. package/dist/src/yaml/steps/fidelity-aspect-guard.test.d.ts +0 -11
  369. package/dist/src/yaml/steps/fidelity-aspect-guard.test.d.ts.map +0 -1
  370. package/dist/src/yaml/steps/fidelity-aspect-guard.test.js +0 -50
  371. package/dist/src/yaml/steps/fidelity-reference-provenance.d.ts +0 -87
  372. package/dist/src/yaml/steps/fidelity-reference-provenance.d.ts.map +0 -1
  373. package/dist/src/yaml/steps/fidelity-reference-provenance.js +0 -111
  374. package/dist/src/yaml/steps/fidelity-reference-provenance.test.d.ts +0 -22
  375. package/dist/src/yaml/steps/fidelity-reference-provenance.test.d.ts.map +0 -1
  376. package/dist/src/yaml/steps/fidelity-reference-provenance.test.js +0 -118
  377. package/dist/src/yaml/steps/file.d.ts +0 -52
  378. package/dist/src/yaml/steps/file.d.ts.map +0 -1
  379. package/dist/src/yaml/steps/file.js +0 -108
  380. package/dist/src/yaml/steps/flutter.d.ts +0 -63
  381. package/dist/src/yaml/steps/flutter.d.ts.map +0 -1
  382. package/dist/src/yaml/steps/flutter.js +0 -215
  383. package/dist/src/yaml/steps/git-clone-names-the-inputs-it-ignores.test.d.ts +0 -16
  384. package/dist/src/yaml/steps/git-clone-names-the-inputs-it-ignores.test.d.ts.map +0 -1
  385. package/dist/src/yaml/steps/git-clone-names-the-inputs-it-ignores.test.js +0 -127
  386. package/dist/src/yaml/steps/git-clone.d.ts +0 -32
  387. package/dist/src/yaml/steps/git-clone.d.ts.map +0 -1
  388. package/dist/src/yaml/steps/git-clone.js +0 -171
  389. package/dist/src/yaml/steps/git-fetch-retry-exec.test.d.ts +0 -10
  390. package/dist/src/yaml/steps/git-fetch-retry-exec.test.d.ts.map +0 -1
  391. package/dist/src/yaml/steps/git-fetch-retry-exec.test.js +0 -162
  392. package/dist/src/yaml/steps/git-fetch-retry.d.ts +0 -62
  393. package/dist/src/yaml/steps/git-fetch-retry.d.ts.map +0 -1
  394. package/dist/src/yaml/steps/git-fetch-retry.js +0 -155
  395. package/dist/src/yaml/steps/git-fetch-retry.test.d.ts +0 -5
  396. package/dist/src/yaml/steps/git-fetch-retry.test.d.ts.map +0 -1
  397. package/dist/src/yaml/steps/git-fetch-retry.test.js +0 -86
  398. package/dist/src/yaml/steps/google-play-deploy.d.ts +0 -37
  399. package/dist/src/yaml/steps/google-play-deploy.d.ts.map +0 -1
  400. package/dist/src/yaml/steps/google-play-deploy.js +0 -193
  401. package/dist/src/yaml/steps/google-play-deploy.test.d.ts +0 -5
  402. package/dist/src/yaml/steps/google-play-deploy.test.d.ts.map +0 -1
  403. package/dist/src/yaml/steps/google-play-deploy.test.js +0 -310
  404. package/dist/src/yaml/steps/gradle-memory.d.ts +0 -61
  405. package/dist/src/yaml/steps/gradle-memory.d.ts.map +0 -1
  406. package/dist/src/yaml/steps/gradle-memory.js +0 -386
  407. package/dist/src/yaml/steps/gradle-memory.test.d.ts +0 -2
  408. package/dist/src/yaml/steps/gradle-memory.test.d.ts.map +0 -1
  409. package/dist/src/yaml/steps/gradle-memory.test.js +0 -344
  410. package/dist/src/yaml/steps/gradle-sdk-cmake.d.ts +0 -28
  411. package/dist/src/yaml/steps/gradle-sdk-cmake.d.ts.map +0 -1
  412. package/dist/src/yaml/steps/gradle-sdk-cmake.js +0 -107
  413. package/dist/src/yaml/steps/gradle-sdk-cmake.test.d.ts +0 -2
  414. package/dist/src/yaml/steps/gradle-sdk-cmake.test.d.ts.map +0 -1
  415. package/dist/src/yaml/steps/gradle-sdk-cmake.test.js +0 -183
  416. package/dist/src/yaml/steps/index.d.ts +0 -10
  417. package/dist/src/yaml/steps/index.d.ts.map +0 -1
  418. package/dist/src/yaml/steps/index.js +0 -1461
  419. package/dist/src/yaml/steps/ios-deps.d.ts +0 -78
  420. package/dist/src/yaml/steps/ios-deps.d.ts.map +0 -1
  421. package/dist/src/yaml/steps/ios-deps.js +0 -279
  422. package/dist/src/yaml/steps/ios-deps.test.d.ts +0 -5
  423. package/dist/src/yaml/steps/ios-deps.test.d.ts.map +0 -1
  424. package/dist/src/yaml/steps/ios-deps.test.js +0 -90
  425. package/dist/src/yaml/steps/ios-signing.d.ts +0 -31
  426. package/dist/src/yaml/steps/ios-signing.d.ts.map +0 -1
  427. package/dist/src/yaml/steps/ios-signing.js +0 -144
  428. package/dist/src/yaml/steps/ios-version.d.ts +0 -47
  429. package/dist/src/yaml/steps/ios-version.d.ts.map +0 -1
  430. package/dist/src/yaml/steps/ios-version.js +0 -151
  431. package/dist/src/yaml/steps/java-home-version-spec.test.d.ts +0 -10
  432. package/dist/src/yaml/steps/java-home-version-spec.test.d.ts.map +0 -1
  433. package/dist/src/yaml/steps/java-home-version-spec.test.js +0 -58
  434. package/dist/src/yaml/steps/linting.d.ts +0 -47
  435. package/dist/src/yaml/steps/linting.d.ts.map +0 -1
  436. package/dist/src/yaml/steps/linting.js +0 -148
  437. package/dist/src/yaml/steps/phase2.test.d.ts +0 -6
  438. package/dist/src/yaml/steps/phase2.test.d.ts.map +0 -1
  439. package/dist/src/yaml/steps/phase2.test.js +0 -197
  440. package/dist/src/yaml/steps/phase3.test.d.ts +0 -5
  441. package/dist/src/yaml/steps/phase3.test.d.ts.map +0 -1
  442. package/dist/src/yaml/steps/phase3.test.js +0 -144
  443. package/dist/src/yaml/steps/phase4.test.d.ts +0 -5
  444. package/dist/src/yaml/steps/phase4.test.d.ts.map +0 -1
  445. package/dist/src/yaml/steps/phase4.test.js +0 -166
  446. package/dist/src/yaml/steps/phase5.test.d.ts +0 -6
  447. package/dist/src/yaml/steps/phase5.test.d.ts.map +0 -1
  448. package/dist/src/yaml/steps/phase5.test.js +0 -263
  449. package/dist/src/yaml/steps/registry.d.ts +0 -88
  450. package/dist/src/yaml/steps/registry.d.ts.map +0 -1
  451. package/dist/src/yaml/steps/registry.js +0 -125
  452. package/dist/src/yaml/steps/registry.test.d.ts +0 -5
  453. package/dist/src/yaml/steps/registry.test.d.ts.map +0 -1
  454. package/dist/src/yaml/steps/registry.test.js +0 -235
  455. package/dist/src/yaml/steps/release.d.ts +0 -50
  456. package/dist/src/yaml/steps/release.d.ts.map +0 -1
  457. package/dist/src/yaml/steps/release.js +0 -154
  458. package/dist/src/yaml/steps/render-post-processor.d.ts +0 -100
  459. package/dist/src/yaml/steps/render-post-processor.d.ts.map +0 -1
  460. package/dist/src/yaml/steps/render-post-processor.js +0 -270
  461. package/dist/src/yaml/steps/render-post-processor.test.d.ts +0 -13
  462. package/dist/src/yaml/steps/render-post-processor.test.d.ts.map +0 -1
  463. package/dist/src/yaml/steps/render-post-processor.test.js +0 -220
  464. package/dist/src/yaml/steps/script.d.ts +0 -23
  465. package/dist/src/yaml/steps/script.d.ts.map +0 -1
  466. package/dist/src/yaml/steps/script.js +0 -63
  467. package/dist/src/yaml/steps/spec-validation.test.d.ts +0 -6
  468. package/dist/src/yaml/steps/spec-validation.test.d.ts.map +0 -1
  469. package/dist/src/yaml/steps/spec-validation.test.js +0 -130
  470. package/dist/src/yaml/steps/steps.test.d.ts +0 -6
  471. package/dist/src/yaml/steps/steps.test.d.ts.map +0 -1
  472. package/dist/src/yaml/steps/steps.test.js +0 -881
  473. package/dist/src/yaml/steps/structural-facts.d.ts +0 -992
  474. package/dist/src/yaml/steps/structural-facts.d.ts.map +0 -1
  475. package/dist/src/yaml/steps/structural-facts.js +0 -3276
  476. package/dist/src/yaml/steps/structural-facts.test.d.ts +0 -12
  477. package/dist/src/yaml/steps/structural-facts.test.d.ts.map +0 -1
  478. package/dist/src/yaml/steps/structural-facts.test.js +0 -3039
  479. package/dist/src/yaml/steps/test-config.d.ts +0 -5
  480. package/dist/src/yaml/steps/test-config.d.ts.map +0 -1
  481. package/dist/src/yaml/steps/test-config.js +0 -25
  482. package/dist/src/yaml/steps/trim-align-corpus.test.d.ts +0 -28
  483. package/dist/src/yaml/steps/trim-align-corpus.test.d.ts.map +0 -1
  484. package/dist/src/yaml/steps/trim-align-corpus.test.js +0 -383
  485. package/dist/src/yaml/steps/trim-align.d.ts +0 -87
  486. package/dist/src/yaml/steps/trim-align.d.ts.map +0 -1
  487. package/dist/src/yaml/steps/trim-align.js +0 -367
  488. package/dist/src/yaml/steps/trim-align.test.d.ts +0 -11
  489. package/dist/src/yaml/steps/trim-align.test.d.ts.map +0 -1
  490. package/dist/src/yaml/steps/trim-align.test.js +0 -261
  491. package/dist/src/yaml/steps/ui-fidelity-preview-android.d.ts +0 -66
  492. package/dist/src/yaml/steps/ui-fidelity-preview-android.d.ts.map +0 -1
  493. package/dist/src/yaml/steps/ui-fidelity-preview-android.js +0 -251
  494. package/dist/src/yaml/steps/ui-fidelity-preview-android.test.d.ts +0 -13
  495. package/dist/src/yaml/steps/ui-fidelity-preview-android.test.d.ts.map +0 -1
  496. package/dist/src/yaml/steps/ui-fidelity-preview-android.test.js +0 -302
  497. package/dist/src/yaml/steps/ui-fidelity-preview.d.ts +0 -134
  498. package/dist/src/yaml/steps/ui-fidelity-preview.d.ts.map +0 -1
  499. package/dist/src/yaml/steps/ui-fidelity-preview.js +0 -173
  500. package/dist/src/yaml/steps/ui-fidelity-preview.test.d.ts +0 -11
  501. package/dist/src/yaml/steps/ui-fidelity-preview.test.d.ts.map +0 -1
  502. package/dist/src/yaml/steps/ui-fidelity-preview.test.js +0 -210
  503. package/dist/src/yaml/steps/ui-fidelity-render-android.d.ts +0 -155
  504. package/dist/src/yaml/steps/ui-fidelity-render-android.d.ts.map +0 -1
  505. package/dist/src/yaml/steps/ui-fidelity-render-android.js +0 -1389
  506. package/dist/src/yaml/steps/ui-fidelity-render-android.test.d.ts +0 -2
  507. package/dist/src/yaml/steps/ui-fidelity-render-android.test.d.ts.map +0 -1
  508. package/dist/src/yaml/steps/ui-fidelity-render-android.test.js +0 -1106
  509. package/dist/src/yaml/steps/ui-fidelity-render.d.ts +0 -230
  510. package/dist/src/yaml/steps/ui-fidelity-render.d.ts.map +0 -1
  511. package/dist/src/yaml/steps/ui-fidelity-render.js +0 -1597
  512. package/dist/src/yaml/steps/ui-fidelity-render.test.d.ts +0 -18
  513. package/dist/src/yaml/steps/ui-fidelity-render.test.d.ts.map +0 -1
  514. package/dist/src/yaml/steps/ui-fidelity-render.test.js +0 -1871
  515. package/dist/src/yaml/steps/xcode-app-product.d.ts +0 -90
  516. package/dist/src/yaml/steps/xcode-app-product.d.ts.map +0 -1
  517. package/dist/src/yaml/steps/xcode-app-product.js +0 -247
  518. package/dist/src/yaml/steps/xcode-app-product.test.d.ts +0 -2
  519. package/dist/src/yaml/steps/xcode-app-product.test.d.ts.map +0 -1
  520. package/dist/src/yaml/steps/xcode-app-product.test.js +0 -202
  521. package/dist/src/yaml/steps/xcode-derived-data.test.d.ts +0 -30
  522. package/dist/src/yaml/steps/xcode-derived-data.test.d.ts.map +0 -1
  523. package/dist/src/yaml/steps/xcode-derived-data.test.js +0 -279
  524. package/dist/src/yaml/steps/xcode-destination.d.ts +0 -47
  525. package/dist/src/yaml/steps/xcode-destination.d.ts.map +0 -1
  526. package/dist/src/yaml/steps/xcode-destination.js +0 -202
  527. package/dist/src/yaml/steps/xcode-destination.test.d.ts +0 -9
  528. package/dist/src/yaml/steps/xcode-destination.test.d.ts.map +0 -1
  529. package/dist/src/yaml/steps/xcode-destination.test.js +0 -227
  530. package/dist/src/yaml/steps/xcode-new.test.d.ts +0 -5
  531. package/dist/src/yaml/steps/xcode-new.test.d.ts.map +0 -1
  532. package/dist/src/yaml/steps/xcode-new.test.js +0 -211
  533. package/dist/src/yaml/steps/xcode-resolve-retry.test.d.ts +0 -9
  534. package/dist/src/yaml/steps/xcode-resolve-retry.test.d.ts.map +0 -1
  535. package/dist/src/yaml/steps/xcode-resolve-retry.test.js +0 -146
  536. package/dist/src/yaml/steps/xcode-simulator-archs.d.ts +0 -53
  537. package/dist/src/yaml/steps/xcode-simulator-archs.d.ts.map +0 -1
  538. package/dist/src/yaml/steps/xcode-simulator-archs.js +0 -98
  539. package/dist/src/yaml/steps/xcode-simulator-archs.test.d.ts +0 -21
  540. package/dist/src/yaml/steps/xcode-simulator-archs.test.d.ts.map +0 -1
  541. package/dist/src/yaml/steps/xcode-simulator-archs.test.js +0 -155
  542. package/dist/src/yaml/steps/xcode.d.ts +0 -230
  543. package/dist/src/yaml/steps/xcode.d.ts.map +0 -1
  544. package/dist/src/yaml/steps/xcode.js +0 -1350
  545. package/dist/src/yaml/types.d.ts +0 -76
  546. package/dist/src/yaml/types.d.ts.map +0 -1
  547. package/dist/src/yaml/types.js +0 -5
  548. package/dist/src/yaml/validation-types.d.ts +0 -102
  549. package/dist/src/yaml/validation-types.d.ts.map +0 -1
  550. package/dist/src/yaml/validation-types.js +0 -8
  551. package/dist/src/yaml/yaml-updater.d.ts +0 -24
  552. package/dist/src/yaml/yaml-updater.d.ts.map +0 -1
  553. package/dist/src/yaml/yaml-updater.js +0 -128
@@ -1,992 +0,0 @@
1
- /**
2
- * Structural-facts deriver — Signal A of the UI-fidelity structural pass.
3
- *
4
- * Pure and platform-agnostic: it takes a per-node layout dump (clipped +
5
- * unclipped bounds in px, parent) emitted alongside the render and derives
6
- * intent-agnostic geometric facts the fidelity judge should check instead of
7
- * discovering them by eye:
8
- *
9
- * - `overflow` — a node extends past its parent's box (parent does
10
- * NOT clip, so the excess is visibly sticking out).
11
- * - `clipped_by_parent` — a node extends past a CLIPPING parent's box, so the
12
- * excess is cut away (the motivating euro-coin case).
13
- * - `off_screen` — a node extends past the root canvas.
14
- * - `overlap` — two siblings overlap by a significant area.
15
- *
16
- * The deriver does NOT judge or score; it reports facts. The verdict stays the
17
- * agent's. This is the brain of Signal A; the render-side emission + facts
18
- * artifact wiring live in the render step (a separate slice).
19
- */
20
- export interface LayoutBounds {
21
- left: number;
22
- top: number;
23
- right: number;
24
- bottom: number;
25
- }
26
- export interface LayoutNode {
27
- /** Stable id/label for the node within one dump. */
28
- id: string;
29
- /** Clipped root-space bounds in px (boundsInRoot — the visible region,
30
- * clamped by any clipping ancestor). */
31
- bounds: LayoutBounds;
32
- /** Unclipped root-space bounds in px (positionInRoot + size — the true layout
33
- * extent). Absent in legacy dumps emitted before the structural pass tracked
34
- * it; when present, overflow/clip is derived from this so it survives a
35
- * clamping parent (which would otherwise hide the excess in `bounds`). */
36
- unclippedBounds?: LayoutBounds;
37
- /** Parent node id, or null for a root node. */
38
- parentId: string | null;
39
- /** Legacy clip hint (parent clips its children). The current emitter writes a
40
- * constant false; used only for the legacy (no-`unclippedBounds`) fallback. */
41
- clipsChildren: boolean;
42
- /** Accessible text content. */
43
- text?: string;
44
- /** Fill (background) color, hex. */
45
- fillColor?: string;
46
- /** Text (foreground) color, hex. */
47
- textColor?: string;
48
- /** Fill alpha 0..1 (issue 14b), present only when the render painted the fill
49
- * TRANSLUCENT — omitted at full opacity, exactly like the design side, so
50
- * absence means opaque on both sides. Older harnesses omit it always. */
51
- fillAlpha?: number;
52
- /** Text alpha 0..1 (issue 14b), same convention as `fillAlpha`. */
53
- textAlpha?: number;
54
- /** Border (ring) colour, hex — the design's `stroke` (property-recognizer 01),
55
- * read from the layout node's `Modifier.border(...)` element. Absent when the
56
- * node has no border OR has one this read cannot measure (a gradient brush),
57
- * so absence alone is not "no border" — that is what `styleChannels` on the
58
- * dump is for. */
59
- borderColor?: string;
60
- /** Border thickness in DP (the harness reads `Dp.value`), so unlike `bounds`
61
- * it is NOT divided by density. Emitted together with `borderColor` or not at
62
- * all: half a measurement compared against a whole design value is how a
63
- * wrong number ships. */
64
- borderWidth?: number;
65
- /** AnnotatedString background-span extents (issue 16): each range of the
66
- * node's text drawn with a specified span background — the highlighted
67
- * substrings. Offsets index into `text`. Absent in dumps from packages
68
- * generated before the emitter tracked spans, and on spanless text — no
69
- * signal, never a divergence. */
70
- textSpans?: TextSpan[];
71
- /** Laid-out line extents (issue 18): where the node's text ACTUALLY wrapped,
72
- * read from the render's TextLayoutResult — one entry per laid-out line,
73
- * with a VISIBLE end (trailing whitespace and the newline excluded).
74
- * Offsets index into `text`. Absent in dumps from packages generated
75
- * before the emitter tracked lines, and on nodes that lay out no text —
76
- * no signal, never a divergence. */
77
- textLines?: TextLine[];
78
- /** The RESOLVED typeface (typeface facts, issue 03): the font that ACTUALLY
79
- * painted this node's text, post-fallback — NOT the requested
80
- * TextStyle.fontFamily, which still reads "correct" during a runtime
81
- * fallback (the incident class the typeface fact exists to catch). Captured
82
- * via per-glyph shaping (TextRunShaper, API 31+). Absent in dumps from
83
- * packages generated before the emitter tracked it, on non-text nodes, and
84
- * whenever the capture could not resolve — no signal, never a divergence. */
85
- resolvedTypeface?: TypefaceSpec;
86
- /** The TYPE METRICS this node's text was laid out with (typography facts 01),
87
- * in sp: the layout input's own style, which is the style that produced the
88
- * layout. A separate field from `resolvedTypeface` on purpose — that capture
89
- * needs per-glyph shaping (API 31+) and is frequently absent, while these are
90
- * read straight off a style, so coupling them would make a size uncomparable
91
- * on every proof that renders below the shaping seam.
92
- *
93
- * Absent on non-text nodes, in dumps from packages generated before the
94
- * emitter tracked it, and PER METRIC when the style declares one in anything
95
- * but sp — no signal, never a divergence. */
96
- typeMetrics?: TypeMetrics;
97
- /** What the node PAINTS, as distinct from the box it occupies. `Icon(N.dp)`
98
- * paints `N × (path bounds ÷ viewport)` — 62.5% for a typical close glyph —
99
- * while a design reference's key for an icon is its vector PATH box, which is
100
- * pure ink. Without this the two are compared as if they measured the same
101
- * thing. In the drawable's own viewport units: converting to dp needs the
102
- * rendered box, which the consumer holds. Absent in dumps from packages
103
- * generated before the emitter tracked it, and on nodes that paint no painter
104
- * — their layout box IS the measurement. */
105
- paintedInk?: PaintedInk;
106
- }
107
- /** A node's painted extent, in its drawable's viewport units.
108
- *
109
- * `unmeasurable` is a distinct claim from absence: it says the node paints
110
- * SOMETHING whose extent could not be derived (a bitmap painter, a transformed
111
- * or clipped vector group), so a consumer knows it is comparing a container
112
- * against ink rather than assuming it is not. */
113
- export type PaintedInk = {
114
- kind: 'vector';
115
- viewport: {
116
- w: number;
117
- h: number;
118
- };
119
- /** The ink's extent AND, since icon-ink-ratio 02 Half B, its ORIGIN in the
120
- * same viewport units. `x`/`y` are optional because every dump written
121
- * before the origin was captured carries the extent alone — a consumer that
122
- * needs placement must treat their absence as "unknown", never as (0,0) or
123
- * as centred. */
124
- ink: {
125
- w: number;
126
- h: number;
127
- x?: number;
128
- y?: number;
129
- };
130
- } | {
131
- kind: 'unmeasurable';
132
- why: string;
133
- };
134
- /** One styled extent of a text node (an AnnotatedString span style with a
135
- * specified background and/or a specified foreground color). */
136
- export interface TextSpan {
137
- start: number;
138
- end: number;
139
- text: string;
140
- /** Span background color, hex. */
141
- background?: string;
142
- /** Span foreground (text) color, hex — partial-color emphasis. */
143
- color?: string;
144
- }
145
- /** One laid-out line of a text node (issue 18). */
146
- export interface TextLine {
147
- start: number;
148
- end: number;
149
- text: string;
150
- }
151
- export interface LayoutDump {
152
- /** The captured canvas / root bounds in px. */
153
- canvas: LayoutBounds;
154
- nodes: LayoutNode[];
155
- /** The Android SDK the proof rendered at (Robolectric testOptions.targetSdk),
156
- * declared by the emitter. The typeface capture seam (TextRunShaper) is API
157
- * 31+, so a dump from an older render SDK cannot carry `resolvedTypeface` —
158
- * consumers use this to advise "typeface not checked" instead of silently
159
- * passing. Absent in dumps emitted before the field existed. */
160
- renderSdk?: number;
161
- /** The span channels this dump's emitter can report ("background",
162
- * "color"). Absent in dumps emitted before foreground-color spans
163
- * existed — their silence on the color channel is "cannot see", never
164
- * "no color span rendered", so the span compare only derives color-span
165
- * facts when the marker includes "color". */
166
- spanChannels?: string[];
167
- /** The STYLE channels this dump's emitter can report ("border").
168
- * Absent in dumps emitted before border capture existed, and load-bearing in
169
- * that case: their silence means "cannot see a border", NOT "the render has no
170
- * border". The border compare therefore withholds the ABSENCE case entirely
171
- * without this marker and the caller advises "not checked" — reading it the
172
- * other way would put a finding on every stroked design in the catalogue
173
- * (property-recognizer 01). */
174
- styleChannels?: string[];
175
- }
176
- export type Edge = 'left' | 'top' | 'right' | 'bottom';
177
- export type StructuralFact = {
178
- kind: 'overflow';
179
- nodeId: string;
180
- parentId: string;
181
- edges: Edge[];
182
- overflowPx: Partial<Record<Edge, number>>;
183
- } | {
184
- kind: 'clipped_by_parent';
185
- nodeId: string;
186
- clipperId: string;
187
- edges: Edge[];
188
- clippedPx: Partial<Record<Edge, number>>;
189
- } | {
190
- kind: 'off_screen';
191
- nodeId: string;
192
- edges: Edge[];
193
- offscreenPx: Partial<Record<Edge, number>>;
194
- } | {
195
- kind: 'overlap';
196
- nodeIds: [string, string];
197
- overlapPx: {
198
- width: number;
199
- height: number;
200
- };
201
- ratio: number;
202
- } | {
203
- /** Composition runs only (design-frame anchor): the captured wrapper
204
- * root's dp size differs from the declared design frame — an authoring
205
- * problem with the wrapper, never a defect of the screen. While this
206
- * fact is present, placement facts are withheld for the State
207
- * (`StructuralBlock.placement`), so a mis-sized root can never
208
- * masquerade as placement drift. */
209
- kind: 'frame_mismatch';
210
- declared: {
211
- w: number;
212
- h: number;
213
- };
214
- captured: {
215
- w: number;
216
- h: number;
217
- };
218
- deltas: Array<{
219
- dimension: 'w' | 'h';
220
- delta: number;
221
- }>;
222
- } | {
223
- /** One testTag shared by `instanceCount` nodes in the dump — an authoring
224
- * problem with the wrapper, never a defect of the screen. Every id
225
- * lookup (parent pairing, geometry, placement) is last-wins for a
226
- * duplicated tag, so facts derived through it would compare arbitrary
227
- * instances; they are WITHHELD rather than guessed while this fact is
228
- * present, mirroring the `frame_mismatch` withhold pattern. */
229
- kind: 'duplicate_tag';
230
- tag: string;
231
- instanceCount: number;
232
- };
233
- /** The declared design frame for one screen (design px, treated 1:1 with dp —
234
- * same convention as `ReferenceGeometry`). Composition runs declare one per
235
- * State via `params.reference_frame`; component runs never pass it. */
236
- export interface ReferenceFrame {
237
- w: number;
238
- h: number;
239
- }
240
- /** One member root whose position on the surface diverges from the design
241
- * frame beyond tolerance (composition runs only): `expected` is the declared
242
- * design x/y (design px, 1:1 dp), `actual` the rendered root-space dp —
243
- * directly comparable because the root is frame-sized (asserted). Only the
244
- * out-of-tolerance dimensions appear in `deltas`. */
245
- export interface PlacementFact {
246
- elementId: string;
247
- expected: {
248
- x: number;
249
- y: number;
250
- };
251
- actual: {
252
- x: number;
253
- y: number;
254
- };
255
- deltas: Array<{
256
- dimension: 'x' | 'y';
257
- delta: number;
258
- }>;
259
- }
260
- /** Placement drift at or below this many dp is sub-pixel/rounding noise, not
261
- * a misplacement — same reasoning as the size-delta floor. */
262
- export declare const DEFAULT_PLACEMENT_TOLERANCE_DP = 2;
263
- /** Placement-fact gate for one State (composition runs only): present when a
264
- * design frame was declared and asserted against the captured root. When the
265
- * root mis-matches the frame, placement facts are WITHHELD (`withheld: true`,
266
- * with the reason, no `facts`) — the placement deriver must not compute drift
267
- * against a wrongly-sized canvas. When the root matches, `facts` carries the
268
- * tolerance-banded member-root x/y divergences (empty = placement holds). */
269
- export interface StructuralPlacement {
270
- withheld: boolean;
271
- reason?: 'frame_mismatch';
272
- facts?: PlacementFact[];
273
- }
274
- /** Captured-root vs declared-frame tolerance (dp): sub-pixel rounding must not
275
- * read as a mis-sized wrapper root. */
276
- export declare const DEFAULT_FRAME_TOLERANCE_DP = 1;
277
- export interface DeriveStructuralFactsOptions {
278
- /** Edge excesses / overlaps at or below this many px are ignored, so that
279
- * exact-touching layout edges don't read as overflow or overlap. */
280
- tolerancePx?: number;
281
- /** Minimum (intersection area / smaller node area) for an overlap to be
282
- * reported as significant. */
283
- overlapMinRatio?: number;
284
- }
285
- /**
286
- * Node ids that appear on MORE THAN ONE node of the dump (testTag collisions),
287
- * mapped to their instance count. Every id-keyed lookup (parent pairing,
288
- * geometry, placement) is last-wins for such an id, so facts derived through it
289
- * would compare arbitrary instances — consumers withhold them and report the
290
- * collision as a `duplicate_tag` fact instead.
291
- */
292
- export declare function duplicatedNodeIds(nodes: readonly LayoutNode[]): Map<string, number>;
293
- export declare function deriveStructuralFacts(dump: LayoutDump, options?: DeriveStructuralFactsOptions): StructuralFact[];
294
- /** One element's geometry; x/y optional (position is advisory, see ADR-0004). */
295
- export interface ElementGeometry {
296
- width: number;
297
- height: number;
298
- x?: number;
299
- y?: number;
300
- }
301
- export type GeometrySource = Record<string, ElementGeometry>;
302
- export interface DimensionDelta {
303
- dimension: 'width' | 'height' | 'x' | 'y';
304
- generated: number;
305
- reference: number;
306
- delta: number;
307
- }
308
- export interface GeometryDelta {
309
- elementId: string;
310
- deltas: DimensionDelta[];
311
- }
312
- /**
313
- * Per-element dimensional deltas between a GENERATED geometry (render layout) and
314
- * a REFERENCE geometry (design numbers), both in the same unit. Only elements
315
- * present on both sides, and only dimensions supplied on both, are compared.
316
- * Port of `packages/cli/lib/fidelity-geometry-diff.mjs`.
317
- */
318
- export declare function diffKeyGeometry(generated: GeometrySource, reference: GeometrySource | null | undefined, options?: {
319
- tolerancePx?: number;
320
- }): GeometryDelta[];
321
- /** `params.reference_geometry["<Screen>"]` — design px, treated 1:1 with dp. */
322
- export type ReferenceGeometry = Record<string, {
323
- w?: number;
324
- h?: number;
325
- x?: number;
326
- y?: number;
327
- }>;
328
- /**
329
- * Per-edge overhang of an element that overflows its frame (Signal B v2). For a
330
- * clipping element the load-bearing invariant is its overhang per edge (= the
331
- * clip), NOT its raw w/h: width can match and the clip still be wrong. Frame-
332
- * relative edge overhang is the real clip, so it IS flagged — unlike absolute
333
- * canvas x/y, which stays suppressed as a canvas-width artifact.
334
- *
335
- * rendered[edge] = element's unclipped edge − frame's edge (dp)
336
- * design[edge] = design element edge − design frame edge (from reference_geometry)
337
- * deltas = edges where |rendered − design| > overhangTolerance
338
- * clipFlag = any delta present
339
- */
340
- export interface StructuralOverhang {
341
- unit: 'dp';
342
- rendered: Partial<Record<Edge, number>>;
343
- design: Partial<Record<Edge, number>>;
344
- deltas: Array<{
345
- edge: Edge;
346
- delta: number;
347
- }>;
348
- clipFlag: boolean;
349
- /** The clip delta is explained by the element's OWN size being wrong on the
350
- * clip axis (a size delta, not the design's intended clip). */
351
- sizeDriven: boolean;
352
- /** …and that wrong size matches the frame's size — the parent-relative
353
- * (`fillMaxHeight`/`matchParentSize`) signature. The fix is a fixed size. */
354
- frameRelative: boolean;
355
- /** The clip delta is explained by the element's frame-relative POSITION on the
356
- * clip axis being wrong (an offset, not a size). Frame-relative position is NOT
357
- * the suppressed absolute-x/y canvas artifact — it changes the real clip. */
358
- positionDriven: boolean;
359
- }
360
- export interface StructuralGeometryElement {
361
- id: string;
362
- rendered?: {
363
- w: number;
364
- h: number;
365
- x: number;
366
- y: number;
367
- };
368
- design?: {
369
- w: number | undefined;
370
- h: number | undefined;
371
- x?: number;
372
- y?: number;
373
- };
374
- deltas?: Array<{
375
- dimension: 'w' | 'h' | 'x' | 'y';
376
- delta: number;
377
- }>;
378
- sizeFlag?: boolean;
379
- /** Present only when the element overflows its (declared) frame. */
380
- overhang?: StructuralOverhang;
381
- /** What the element PAINTS (see `LayoutNode.paintedInk`), passed through from
382
- * the dump so the judge can compare ink to ink instead of a container to
383
- * ink. Absent for anything that paints no painter, and for every render made
384
- * before the emitter tracked it. */
385
- paintedInk?: PaintedInk;
386
- /**
387
- * The element's render ancestry: every ancestor node id from its IMMEDIATE
388
- * parent up to the root (icon-ink-ratio 05). The dump's `parentId` links are
389
- * consumed here for sibling grouping and were dropped, so the judge could not
390
- * see the render's tree at all — and an element the wrapper nested in the wrong
391
- * container had no finding of its own.
392
- *
393
- * The CHAIN rather than the parent link, because Compose's semantics tree omits
394
- * untagged layout nodes: a declared key routinely sits several levels below the
395
- * container it should be compared against, and an immediate parent alone cannot
396
- * see past the gap. Measured over three gated screens, the parent link produces
397
- * 21 false rows where the chain produces 2.
398
- *
399
- * An EMPTY array is a root node — a measurement, distinguishable from the
400
- * ABSENT field of every render made before this shipped.
401
- */
402
- ancestors?: string[];
403
- }
404
- export interface StructuralGeometry {
405
- unit: 'dp';
406
- density: number;
407
- elements: StructuralGeometryElement[];
408
- }
409
- export interface StructuralSummary {
410
- clean: boolean;
411
- factCount: number;
412
- maxSizeDeltaDp: number | null;
413
- /** Largest |overhang delta| in dp, or null when there is no geometry. */
414
- maxClipDeltaDp: number | null;
415
- }
416
- export interface StructuralBlock {
417
- summary: StructuralSummary;
418
- facts: StructuralFact[];
419
- geometry?: StructuralGeometry;
420
- appearance?: StructuralAppearance;
421
- /** Composition runs only — see `StructuralPlacement`. */
422
- placement?: StructuralPlacement;
423
- }
424
- /** Which reference the appearance facts were diffed against. `previous_render`
425
- * facts are regressions/drift, NOT design divergences (the no-Figma path). */
426
- export type AppearanceBaseline = 'figma' | 'previous_render';
427
- export type AppearanceFact = {
428
- kind: 'color';
429
- elementId: string;
430
- channel: 'fill' | 'text';
431
- rendered: string;
432
- reference: string;
433
- /** CIEDE2000 perceptual distance — measurement only, no significance. */
434
- deltaE: number;
435
- } | {
436
- /** The channel's OPACITY differs from the design's (issue 14b). Its own
437
- * kind, not a `color` one: the hex can match exactly while the design
438
- * paints the element at 30% (disabled) and the render at 100% (enabled),
439
- * and a matching hex gives deltaE 0, which would never flag. */
440
- kind: 'color_alpha';
441
- elementId: string;
442
- channel: 'fill' | 'text';
443
- rendered: number;
444
- reference: number;
445
- }
446
- /** The design declares a STROKE the render drew no border for at all
447
- * (property-recognizer 01). The motivating case: an 18dp badge with a 4dp
448
- * white ring inside it, rendered as a plain green blob, about which the gate
449
- * said nothing because no harness captured a border. Emitted ONLY from a dump
450
- * that declares border capability (`styleChannels`) — an older emitter's
451
- * silence is "cannot see a border", never "no border was drawn". */
452
- | {
453
- kind: 'border_missing';
454
- elementId: string;
455
- reference: string;
456
- referenceWidth?: number;
457
- }
458
- /** A drawn border whose COLOUR differs from the design's stroke. */
459
- | {
460
- kind: 'border';
461
- elementId: string;
462
- rendered: string;
463
- reference: string;
464
- }
465
- /** A drawn border of the right colour and the wrong THICKNESS, in dp. Its own
466
- * kind so a correctly-coloured ring is never reported as a colour problem. */
467
- | {
468
- kind: 'border_width';
469
- elementId: string;
470
- rendered: number;
471
- reference: number;
472
- } | {
473
- kind: 'text_mismatch';
474
- elementId: string;
475
- rendered: string;
476
- reference: string;
477
- } | {
478
- kind: 'text_missing';
479
- elementId: string;
480
- reference: string;
481
- }
482
- /** The highlighted extent (an AnnotatedString background span) differs from
483
- * the declared reference span (issue 16). `rendered` is what the render
484
- * actually highlighted (all span extents, comma-joined); `reference` the
485
- * substring the design highlights. */
486
- | {
487
- kind: 'span_mismatch';
488
- elementId: string;
489
- rendered: string;
490
- reference: string;
491
- }
492
- /** The styled segment's FOREGROUND COLOR differs from the declared span
493
- * color (partial-color emphasis): the extent matched, the emphasis painted
494
- * the wrong color. `rendered`/`reference` are hex; `extent` names the
495
- * segment. Derived only from a dump that DECLARES it can report color
496
- * spans (`spanChannels`) — an old emitter's silence is never a fact. */
497
- | {
498
- kind: 'span_color_mismatch';
499
- elementId: string;
500
- extent?: string;
501
- rendered: string;
502
- reference: string;
503
- }
504
- /** The laid-out line split differs from the declared reference split
505
- * (issue 18): the text wrapped on the wrong word, or dropped/added a
506
- * break. `rendered`/`reference` carry the newline-joined line texts. */
507
- | {
508
- kind: 'line_break_mismatch';
509
- elementId: string;
510
- rendered: string;
511
- reference: string;
512
- }
513
- /** The RESOLVED typeface (what actually painted, post-fallback) diverges from the
514
- * design typeface in family or weight. `rendered` is the font that resolved on
515
- * the render (e.g. a Roboto fallback); `reference` is the design font. The crux
516
- * is "resolved, not requested": a runtime fallback reads correct at the
517
- * TextStyle.fontFamily layer, so the requested family can never be the signal. */
518
- | {
519
- kind: 'typeface';
520
- elementId: string;
521
- channel: 'text';
522
- rendered: TypefaceSpec;
523
- reference: TypefaceSpec;
524
- }
525
- /** ONE type metric — size, tracking or leading — diverges from the design, in
526
- * sp (typography facts 01).
527
- *
528
- * One fact PER METRIC rather than one carrying all three: downstream finding
529
- * identity is `screen + element + category`, so two metrics folded into a
530
- * single fact would collapse into one finding and silently drop the other —
531
- * and the motivating case diverged in TWO of them at once (18sp against 16sp,
532
- * with −0.6 tracking). A separate fact per metric is what keeps both
533
- * reportable.
534
- *
535
- * Emitted only when BOTH sides declare the metric: a design that says nothing
536
- * about tracking is not asserting 0. */
537
- | {
538
- kind: 'type_metric';
539
- elementId: string;
540
- channel: 'text';
541
- metric: TypeMetricKey;
542
- rendered: number;
543
- reference: number;
544
- }
545
- /** In the reference, not rendered. */
546
- | {
547
- kind: 'element_missing';
548
- elementId: string;
549
- }
550
- /** Rendered, not in the reference. */
551
- | {
552
- kind: 'element_extra';
553
- elementId: string;
554
- };
555
- /** A resolved or design typeface: a font `family` plus a numeric `weight`
556
- * (100–900, CSS/OpenType scale). `weight` is optional because a design
557
- * annotation may name only a family (the weight is then derived from a
558
- * weight-suffix token on the family, or defaults to 400 Regular). */
559
- export interface TypefaceSpec {
560
- family: string;
561
- weight?: number;
562
- /** Design-side type metrics in sp (typography facts 01), carried on the same
563
- * reference entry as the family because they arrive on the same channel and
564
- * describe the same thing: the type. The RENDERED side keeps them in its own
565
- * map (`DumpNode.typeMetrics`), because its family capture has an API floor
566
- * these do not. Each is absent when the design declares no value for it. */
567
- fontSize?: number;
568
- letterSpacing?: number;
569
- lineHeight?: number;
570
- }
571
- /** The metrics a text node was laid out with, in sp. Every field optional: a
572
- * style may declare a size and no tracking, and a metric declared in Em or left
573
- * Unspecified is omitted rather than converted — it is not comparable against a
574
- * design that declares absolute sp. */
575
- export interface TypeMetrics {
576
- fontSize?: number;
577
- letterSpacing?: number;
578
- lineHeight?: number;
579
- }
580
- /** The metrics a `type_metric` fact can report, in the order a finding reads
581
- * them: the size first (it explains the others), then tracking, then leading. */
582
- export declare const TYPE_METRIC_KEYS: readonly ["fontSize", "letterSpacing", "lineHeight"];
583
- export type TypeMetricKey = (typeof TYPE_METRIC_KEYS)[number];
584
- /**
585
- * A reference-shaped snapshot of the render's OWN appearance — the element-id
586
- * set plus per-element text/colors it produced. Persisted in the structural
587
- * block so a later no-Figma render can use it as the `previous_render` baseline
588
- * (the colors/text/ids to diff against), mirroring how Signal B's geometry
589
- * baseline reuses the previous render's persisted `geometry`. text/color are
590
- * present only for the elements that exposed them.
591
- */
592
- export interface AppearanceRendered {
593
- elementIds: string[];
594
- text?: TextSource;
595
- color?: ColorSource;
596
- /** The resolved typeface per element (issue 03) — what actually painted,
597
- * post-fallback. Persisted so it serves as the previous-render typeface
598
- * drift baseline. */
599
- typeface?: TypefaceSource;
600
- }
601
- export interface StructuralAppearance {
602
- baseline: AppearanceBaseline;
603
- facts: AppearanceFact[];
604
- /** The render's own appearance, persisted as the baseline source for the next
605
- * no-Figma render. Present whenever Signal C ran. */
606
- rendered?: AppearanceRendered;
607
- /** Signals a check that could NOT run (never a silent pass): e.g. a typeface
608
- * reference was supplied but the proof rendered below SDK 31, where the
609
- * resolved-typeface capture seam does not exist. Standard CI vocabulary
610
- * (LLM-facing). Absent when every requested check ran. */
611
- advisories?: string[];
612
- }
613
- /**
614
- * The reference side of the appearance diff, passed into `buildStructuralBlock`.
615
- * `elementIds` is the reference element-id set (Figma node ids on the `figma`
616
- * baseline; the previous render's element ids on `previous_render`). This slice
617
- * derives presence only; the copy/color slices extend this with reference text /
618
- * colors keyed by element id.
619
- */
620
- export interface AppearanceReference {
621
- baseline: AppearanceBaseline;
622
- elementIds: string[];
623
- /** Reference text per element id (Figma `characters` on the figma baseline; the
624
- * previous render's text on `previous_render`). When supplied, copy facts are
625
- * derived against the render's per-node text. Absent → presence facts only. */
626
- text?: TextSource;
627
- /** Reference fill/text color per element id (Figma `fills` on the figma
628
- * baseline; the previous render's colors on `previous_render`). When supplied,
629
- * color facts are derived against the render's per-node colors. */
630
- color?: ColorSource;
631
- /** Declared highlight extents per element id (issue 16): the substring the
632
- * design highlights on that text element (and optionally its background).
633
- * When supplied, span facts are derived against the render's per-node
634
- * `textSpans`. */
635
- spans?: SpanSource;
636
- /** Declared line splits per element id (issue 18): the exact line texts
637
- * the design breaks that text element into. When supplied, line facts
638
- * are derived against the render's per-node `textLines`. */
639
- lines?: LineSource;
640
- /** Reference typeface per element id (the DESIGN font from Figma node
641
- * metadata on the figma baseline; the previous render's resolved font on
642
- * `previous_render`). When supplied, typeface facts are derived against the
643
- * render's per-node `resolvedTypeface`. */
644
- typeface?: TypefaceSource;
645
- }
646
- /** The per-screen reference params the runner assembles an `AppearanceReference`
647
- * from (the slices of `params.reference_*` for one screen). */
648
- export interface AppearanceReferenceParams {
649
- /** Per-screen `reference_geometry` (design/baseline geometry). Its keys seed
650
- * the element-id set. */
651
- refGeom?: ReferenceGeometry | null;
652
- /** Per-screen `reference_text` (text per element id). */
653
- refText?: TextSource | null;
654
- /** Per-screen `reference_color` (fill/text color per element id). */
655
- refColor?: ColorSource | null;
656
- /** Per-screen `reference_spans` (declared highlight extents per element id). */
657
- refSpans?: SpanSource | null;
658
- /** Per-screen `reference_lines` (declared line split per element id). */
659
- refLines?: LineSource | null;
660
- /** Per-screen `reference_typeface` (the DESIGN font per element id, built by
661
- * the caller from Figma node metadata — typeface issue 04). */
662
- refTypeface?: TypefaceSource | null;
663
- baseline: AppearanceBaseline;
664
- }
665
- /**
666
- * Assemble the `AppearanceReference` from a screen's reference params. Issue 05
667
- * decouples the appearance container from `reference_geometry`: the reference is
668
- * built when ANY of geometry / text / color is present, with `elementIds` = the
669
- * UNION of their keys (geometry first, then text, then color — deduped, order
670
- * preserved). So a run carrying `reference_color` but no `reference_geometry` now
671
- * yields a reference (→ color facts), while a geometry-only run is byte-identical
672
- * to before (color/text keys are a subset). `text`/`color` are attached only when
673
- * present. No reference of any kind → null (no appearance container).
674
- */
675
- export declare function buildAppearanceReferenceFromParams(params: AppearanceReferenceParams): AppearanceReference | null;
676
- /**
677
- * Map a previous catalog render's persisted appearance snapshot
678
- * (`StructuralAppearance.rendered` — element ids + per-element colors) into the
679
- * `previous_render` AppearanceReference the next render diffs against. The
680
- * no-Figma drift path: the colors/ids the next render compares itself to are the
681
- * LAST render's, so a diverging fill surfaces as a regression (drift), marked
682
- * `baseline: 'previous_render'`, distinct from a design divergence.
683
- *
684
- * Pure (no I/O) — the testable core the thin catalog-fetch adapter wraps,
685
- * mirroring how the geometry baseline reuses the previous render's persisted
686
- * `geometry`. `color` is carried only when the previous render exposed colors;
687
- * a previous render with no extractable color yields a presence-only reference
688
- * (element ids, no color). A genuinely absent previous render (no snapshot) →
689
- * null, so the next render carries no appearance container, exactly as before.
690
- * `color` (issue 01/02) and `text` (issue 03) are each carried only when the
691
- * previous render exposed them; an empty map is no signal on that axis.
692
- */
693
- export declare function appearanceReferenceFromPreviousRender(previous: AppearanceRendered | null | undefined): AppearanceReference | null;
694
- /**
695
- * Element-presence facts from the set difference of the rendered element-id set
696
- * and the reference element-id set, keyed on the stable element id shared with
697
- * Signal B. An id present in the reference but not rendered is `element_missing`;
698
- * an id rendered but not in the reference is `element_extra`.
699
- *
700
- * Pure and platform-agnostic: it takes two id collections and is order-
701
- * independent — the result depends only on the two SETS, not on input order or
702
- * duplicates. Output is sorted (missing before extra, each by id) so callers get
703
- * a deterministic list. The deriver reports facts only; significance is a later,
704
- * separately-wired concern.
705
- */
706
- export declare function derivePresenceFacts(renderedIds: Iterable<string>, referenceIds: Iterable<string>): AppearanceFact[];
707
- /** Per-element text content, keyed on the stable element id (rendered text from
708
- * the layout dump's per-node `text`; reference text from the Figma node tree's
709
- * `characters`). A missing or empty string means "no text signal for that
710
- * element," which the deriver treats as absence, never a divergence. */
711
- export type TextSource = Record<string, string | undefined>;
712
- /**
713
- * Copy/text facts from the per-element comparison of rendered text vs reference
714
- * text, keyed on the stable element id shared with Signal B. For each element the
715
- * REFERENCE declares text for: identical text → no fact; a different rendered
716
- * string → `text_mismatch` (both strings attached); empty/absent rendered text →
717
- * `text_missing`. An element with no reference text signal produces no fact —
718
- * absence of a signal is never reported as a divergence, so a rendered string the
719
- * reference never declared is silent.
720
- *
721
- * Pure and platform-agnostic; order-independent and deterministic (output sorted
722
- * by element id). The deriver reports facts only; significance is a later,
723
- * separately-wired concern.
724
- */
725
- export declare function deriveCopyFacts(rendered: TextSource, reference: TextSource): AppearanceFact[];
726
- /** Declared highlight extent per element id: the substring the design
727
- * highlights on that text element (an AnnotatedString background span),
728
- * optionally with its background color. A missing/empty `text` is "no span
729
- * signal for that element" — never a divergence. */
730
- export type SpanSource = Record<string, {
731
- text?: string;
732
- background?: string;
733
- color?: string;
734
- } | undefined>;
735
- /** The rendered highlight extents per element id — each node's `textSpans`
736
- * from the layout dump. `undefined` for a node that emitted no spans (an
737
- * old package, or a spanless text): no signal, never a divergence. */
738
- export type RenderedSpans = Record<string, TextSpan[] | undefined>;
739
- /**
740
- * Span facts (issue 16 + color spans) from the per-element comparison of
741
- * rendered styled extents vs the declared reference span, keyed on the stable
742
- * element id. Channel-scoped: a `background` declaration (highlight chip)
743
- * compares against background-carrying rendered spans; a `color` declaration
744
- * (partial foreground emphasis) against color-carrying ones — a color-only
745
- * rendered span never satisfies a chip declaration. A channel-less
746
- * declaration ({text} only) keeps its legacy semantics (any extent matches).
747
- *
748
- * Capability gate: the COLOR channel compares only when `colorCapable` is
749
- * true (the dump's `spanChannels` marker includes "color") — an old
750
- * emitter's silence is "cannot see", never "no color span rendered". Within
751
- * a capable dump, an ABSENT `textSpans` is a real absence for a color
752
- * declaration (the segment rendered unstyled); background/legacy
753
- * declarations keep the old-package tolerance (no spans array → no fact).
754
- * A wrong extent on either channel is one `span_mismatch`; a matching extent
755
- * whose color diverges is a `span_color_mismatch` carrying both hex values.
756
- *
757
- * Pure and platform-agnostic; order-independent and deterministic (output
758
- * sorted by element id). The deriver reports facts only; significance is a
759
- * later, separately-wired concern.
760
- */
761
- export declare function deriveSpanFacts(rendered: RenderedSpans, reference: SpanSource, colorCapable?: boolean): AppearanceFact[];
762
- /** Declared line split per element id (issue 18): the exact line texts the
763
- * design breaks that text element into, in order. A missing/empty array (or
764
- * one with no usable line text) is "no line signal for that element" —
765
- * never a divergence. */
766
- export type LineSource = Record<string, string[] | undefined>;
767
- /** The rendered laid-out lines per element id — each node's `textLines` from
768
- * the layout dump. `undefined` for a node that emitted no lines (an old
769
- * package, or a node that lays out no text): no signal, never a divergence. */
770
- export type RenderedLines = Record<string, TextLine[] | undefined>;
771
- /**
772
- * Line facts (issue 18) from the per-element comparison of the rendered
773
- * laid-out lines vs the declared reference split, keyed on the stable element
774
- * id. For each element the REFERENCE declares a split for: rendered line
775
- * texts equal to the declared line texts (same count, same order) → no fact;
776
- * anything else — the break on a different word, a dropped break (fewer
777
- * lines), an extra break — is ONE `line_break_mismatch` carrying both splits
778
- * newline-joined. An element whose node emitted NO lines produces no fact —
779
- * old committed packages don't emit `textLines`, and absence of a signal is
780
- * never reported as a divergence (regenerating the package picks it up).
781
- *
782
- * Pure and platform-agnostic; order-independent and deterministic (output
783
- * sorted by element id). The deriver reports facts only; significance is a
784
- * later, separately-wired concern.
785
- */
786
- export declare function deriveLineFacts(rendered: RenderedLines, reference: LineSource): AppearanceFact[];
787
- /** CIELAB triple [L, a, b]. */
788
- export type Lab = [number, number, number];
789
- /** One element's rendered/reference colors, by channel. A missing channel is
790
- * "no color signal" for that element/channel — never a divergence. */
791
- export interface ElementColors {
792
- fill?: string;
793
- text?: string;
794
- /** Per-channel alpha 0..1 (issue 14b), present only when translucent. */
795
- fillAlpha?: number;
796
- textAlpha?: number;
797
- /** The BORDER colour (property-recognizer 01) — the design calls this a
798
- * `stroke`, and both sides use that name so they line up. On the reference
799
- * side it comes from `colors[key].stroke`; on the rendered side from the
800
- * dump's `borderColor`. */
801
- stroke?: string;
802
- /** Border thickness in DP on both sides — the harness reads `Dp.value` and the
803
- * design's `strokeWeight` is in design units, so unlike bounds this is never
804
- * divided by density. */
805
- strokeWeight?: number;
806
- }
807
- export type ColorSource = Record<string, ElementColors>;
808
- /**
809
- * Convert an sRGB hex string to CIELAB (D65). White → ~[100,0,0], black → L 0.
810
- * Returns [0,0,0] for an unparseable string so a malformed color never throws
811
- * (the deriver guards on signal presence separately).
812
- */
813
- export declare function hexToLab(hex: string): Lab;
814
- /**
815
- * CIEDE2000 colour-difference ΔE00 between two CIELAB colours (kL=kC=kH=1).
816
- * Implements Sharma, Wu & Dalal (2005); validated against their supplementary
817
- * test data. Pure and symmetric; identical colours give 0.
818
- */
819
- export declare function ciede2000(lab1: Lab, lab2: Lab): number;
820
- /**
821
- * Border facts (property-recognizer 01) — the design's `stroke` against the
822
- * render's captured border. THE case this exists for: an 18dp badge with a 4dp
823
- * white ring inside it rendered as a plain green blob, about which the gate said
824
- * nothing at all, because the design's stroke lived in an authoring hint and the
825
- * dump captured no border. Nothing compared, so an unmeasured property read as a
826
- * pass.
827
- *
828
- * The DESIGN is the only side that raises the question, exactly as with alpha: an
829
- * entry with no declared `stroke` is skipped, so a wrapper adding a ring the
830
- * design never asked for is not something this calls wrong.
831
- *
832
- * Three kinds, because they are three different fixes — absent / wrong colour /
833
- * wrong thickness. Folding width into `border` would report "the ring is the
834
- * wrong colour" about a ring whose colour is exactly right.
835
- *
836
- * `capable` gates the ABSENCE case only, and both directions of that gate are
837
- * wrong in a way worth naming: without it, a border-blind dump would fire
838
- * `border_missing` on every stroked design in the catalogue; with it applied too
839
- * broadly, a real divergence on a capable dump would go unreported. A colour or
840
- * width difference is a genuine measurement either way — only "I saw no border"
841
- * depends on being able to see borders at all.
842
- *
843
- * Pure and platform-agnostic; deterministic (sorted by element id). Mirrors the
844
- * CLI preview twin in `packages/cli/lib/fidelity-structural.mjs`.
845
- */
846
- export declare function deriveBorderFacts(rendered: ColorSource, reference: ColorSource, capable: boolean): AppearanceFact[];
847
- /**
848
- * Color facts from the per-element, per-channel comparison of rendered vs
849
- * reference color, keyed on the stable element id shared with Signal B. For each
850
- * element/channel the REFERENCE declares a color for and the render also exposes
851
- * one: identical color → no fact; any divergence → a `color` fact carrying the
852
- * channel (fill vs text), both hex values, and the CIEDE2000 ΔE as the metric.
853
- * Fill and text are distinct channels, so a correct background with a wrong text
854
- * color and the reverse are separate facts, never collapsed. A missing rendered
855
- * or reference color for a channel is no signal → no fact.
856
- *
857
- * Pure and platform-agnostic; order-independent and deterministic (output sorted
858
- * by element id then channel, fill before text). Measurement only — significance
859
- * is a later, separately-wired concern.
860
- */
861
- export declare function deriveColorFacts(rendered: ColorSource, reference: ColorSource): AppearanceFact[];
862
- /** One element's resolved/design typeface, by the (single) text channel. */
863
- export type TypefaceSource = Record<string, TypefaceSpec | undefined>;
864
- /**
865
- * Typeface facts from the per-element comparison of the RESOLVED render font vs the
866
- * DESIGN reference font, keyed on the stable element id shared with Signal B. For
867
- * each element the reference declares a typeface for and the render also resolved
868
- * one: normalize both (family-name + weight-encoding) and emit a `typeface` fact
869
- * when the normalized family OR weight differs. A normalization-equivalent pair
870
- * ("Poppins-SemiBold" vs "Poppins" + 600) yields no fact. A missing rendered or
871
- * reference font for an element is no signal → no fact (graceful, no false
872
- * positive). The fact carries the raw `rendered`/`reference` specs as given, so the
873
- * finding names the actual fonts.
874
- *
875
- * Pure and platform-agnostic; order-independent and deterministic (output sorted by
876
- * element id). Measurement only — significance is a later, separately-wired concern.
877
- */
878
- export declare function deriveTypefaceFacts(rendered: TypefaceSource, reference: TypefaceSource): AppearanceFact[];
879
- /** Per-element type metrics, keyed like every other appearance source. */
880
- export type TypeMetricSource = Record<string, TypeMetrics | undefined>;
881
- /**
882
- * Type-metric facts from the per-element comparison of the LAID-OUT metrics
883
- * against the design's, keyed on the stable element id shared with Signal B.
884
- *
885
- * For each element the reference declares and the render measured, each of the
886
- * three metrics is compared independently and emits its own fact when the two
887
- * differ by more than the sub-unit tolerance. A metric missing on EITHER side is
888
- * no signal and yields no fact — a design that declares no tracking is not
889
- * asserting zero, and a style that leaves leading Unspecified has not chosen a
890
- * value to be wrong about.
891
- *
892
- * Pure and platform-agnostic; deterministic (sorted by element id, then by the
893
- * metric order a finding reads them in). Measurement only — significance and
894
- * wording live downstream.
895
- */
896
- export declare function deriveTypeMetricFacts(rendered: TypeMetricSource, reference: TypefaceSource): AppearanceFact[];
897
- /**
898
- * Assemble the inline `structural` block (ADR-0004): Signal-A facts always, plus
899
- * the Signal-B geometry block when `referenceGeometry` is supplied. Size (w/h)
900
- * deltas drive `sizeFlag`/`summary.clean`; x/y position deltas are reported but
901
- * never flagged (canvas-width artifact). Mirrors Invarn's `buildStructuralBlock`.
902
- */
903
- export declare function buildStructuralBlock(dump: LayoutDump, referenceGeometry?: ReferenceGeometry | null, density?: number, options?: {
904
- sizeTolerancePx?: number;
905
- overhangTolerancePx?: number;
906
- }, appearanceReference?: AppearanceReference | null, referenceFrame?: ReferenceFrame | null, anchorFrame?: ReferenceFrame | null): StructuralBlock;
907
- export interface ReviewRow {
908
- element: string;
909
- rendered: string | null;
910
- design: string | null;
911
- fact: string;
912
- verdict: null;
913
- }
914
- export interface ReviewScaffold {
915
- verdict: null;
916
- mustExplain: string[];
917
- rows: ReviewRow[];
918
- }
919
- /**
920
- * Build the run-only `review` scaffold from an assembled structural block:
921
- * size-flagged geometry elements first (load-bearing), then every structural
922
- * fact, each as a row with a null `verdict` the agent must replace.
923
- */
924
- export declare function buildReviewScaffold(structural: {
925
- facts?: StructuralFact[];
926
- geometry?: StructuralGeometry | null;
927
- }): ReviewScaffold;
928
- /**
929
- * Render-side embedded form of the deriver.
930
- *
931
- * The Android render runs as a single self-contained generated script (see
932
- * `generateAndroidRenderScript`), so render-side pure logic is embedded as a
933
- * JS-source string and concatenated in — exactly like `RENDER_SCRIPT_TRIM_STAGE`.
934
- * The typed `deriveStructuralFacts` above stays the canonical, tested spec; the
935
- * `parity` test asserts this embedded port produces identical facts on shared
936
- * fixtures so the two cannot drift.
937
- *
938
- * `deriveStructuralFacts` here is pure; `deriveAndWriteFacts` references runtime
939
- * globals (`fs`, `path`, `artifactsDir`, `log`) defined in the main script and
940
- * is only invoked from there — harmless to define in the eval sandbox.
941
- */
942
- export declare const RENDER_SCRIPT_FACTS_STAGE: string;
943
- /**
944
- * Evaluates the embedded facts stage and returns its pure `deriveStructuralFacts`,
945
- * so the parity test exercises exactly the code that ships in the runtime script
946
- * (mirrors `getPostProcessorInternals`). `deriveAndWriteFacts` references runtime
947
- * globals only when called, so defining it in the sandbox is harmless.
948
- */
949
- export declare function getStructuralFactsStageInternals(): {
950
- deriveStructuralFacts: (dump: LayoutDump, options?: DeriveStructuralFactsOptions) => StructuralFact[];
951
- };
952
- /**
953
- * Render-side embedded form of the Signal-B differ + structural-block assembler.
954
- *
955
- * Concatenated into the generated render script alongside `RENDER_SCRIPT_FACTS_STAGE`
956
- * (function declarations hoist, so order does not matter — `buildStructuralBlock`
957
- * calls the facts stage's `deriveStructuralFacts`). `assembleStructural` references
958
- * runtime globals (`fs`, `path`, `log`) defined in the main script and is only
959
- * invoked from there. Kept byte-equivalent to the typed `buildStructuralBlock` /
960
- * `diffKeyGeometry` above by the parity test, so run-side and preview-side (Invarn)
961
- * structural blocks cannot drift.
962
- */
963
- export declare const RENDER_SCRIPT_GEOMETRY_STAGE: string;
964
- /**
965
- * Evaluates the embedded facts + geometry stages together (mirroring how the
966
- * render script concatenates them) and returns the pure `diffKeyGeometry` +
967
- * `buildStructuralBlock`, so the parity test exercises exactly the shipped code.
968
- */
969
- export declare function getGeometryStageInternals(): {
970
- diffKeyGeometry: (generated: GeometrySource, reference: GeometrySource | null | undefined, options?: {
971
- tolerancePx?: number;
972
- }) => GeometryDelta[];
973
- buildStructuralBlock: (dump: LayoutDump, referenceGeometry?: ReferenceGeometry | null, density?: number, options?: {
974
- sizeTolerancePx?: number;
975
- overhangTolerancePx?: number;
976
- }, appearanceReference?: AppearanceReference | null, referenceFrame?: ReferenceFrame | null, anchorFrame?: ReferenceFrame | null) => StructuralBlock;
977
- buildReviewScaffold: (structural: {
978
- facts?: StructuralFact[];
979
- geometry?: StructuralGeometry | null;
980
- }) => ReviewScaffold;
981
- derivePresenceFacts: (renderedIds: Iterable<string>, referenceIds: Iterable<string>) => AppearanceFact[];
982
- deriveCopyFacts: (rendered: TextSource, reference: TextSource) => AppearanceFact[];
983
- deriveSpanFacts: (rendered: RenderedSpans, reference: SpanSource) => AppearanceFact[];
984
- deriveLineFacts: (rendered: RenderedLines, reference: LineSource) => AppearanceFact[];
985
- deriveColorFacts: (rendered: ColorSource, reference: ColorSource) => AppearanceFact[];
986
- deriveTypefaceFacts: (rendered: TypefaceSource, reference: TypefaceSource) => AppearanceFact[];
987
- deriveTypeMetricFacts: (rendered: TypeMetricSource, reference: TypefaceSource) => AppearanceFact[];
988
- buildAppearanceReferenceFromParams: (params: AppearanceReferenceParams) => AppearanceReference | null;
989
- ciede2000: (lab1: Lab, lab2: Lab) => number;
990
- hexToLab: (hex: string) => Lab;
991
- };
992
- //# sourceMappingURL=structural-facts.d.ts.map