@pome-sh/cli 0.9.0 → 0.11.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 (449) hide show
  1. package/dist/build-info.json +3 -3
  2. package/dist/src/cli/agent-resolver.d.ts +3 -0
  3. package/dist/src/cli/agent-resolver.js +10 -0
  4. package/dist/src/cli/checks-add.d.ts +32 -0
  5. package/dist/src/cli/checks-add.js +236 -0
  6. package/dist/src/cli/checks.d.ts +21 -0
  7. package/dist/src/cli/checks.js +150 -0
  8. package/dist/src/cli/main.js +28 -0
  9. package/dist/src/runner/runTask.d.ts +10 -10
  10. package/dist/src/task/insertCriterion.d.ts +15 -0
  11. package/dist/src/task/insertCriterion.js +62 -0
  12. package/dist/src/task/parseTask.d.ts +5 -0
  13. package/dist/src/task/parseTask.js +11 -0
  14. package/dist/src/task/taskSchema.d.ts +4 -4
  15. package/node_modules/@pome-sh/sdk/dist/checks.d.ts +58 -0
  16. package/node_modules/@pome-sh/sdk/dist/checks.js +203 -0
  17. package/node_modules/@pome-sh/sdk/dist/checks.js.map +1 -0
  18. package/node_modules/@pome-sh/sdk/package.json +7 -3
  19. package/node_modules/@pome-sh/twin-github/dist/src/access-control.d.ts +3 -3
  20. package/node_modules/@pome-sh/twin-github/dist/src/check-issues.d.ts +30 -0
  21. package/node_modules/@pome-sh/twin-github/dist/src/check-issues.js +203 -0
  22. package/node_modules/@pome-sh/twin-github/dist/src/check-issues.js.map +1 -0
  23. package/node_modules/@pome-sh/twin-github/dist/src/check-kind.d.ts +3 -0
  24. package/node_modules/@pome-sh/twin-github/dist/src/check-kind.js +10 -0
  25. package/node_modules/@pome-sh/twin-github/dist/src/check-kind.js.map +1 -0
  26. package/node_modules/@pome-sh/twin-github/dist/src/check-params.d.ts +12 -0
  27. package/node_modules/@pome-sh/twin-github/dist/src/check-params.js +99 -0
  28. package/node_modules/@pome-sh/twin-github/dist/src/check-params.js.map +1 -0
  29. package/node_modules/@pome-sh/twin-github/dist/src/check-pulls.d.ts +11 -0
  30. package/node_modules/@pome-sh/twin-github/dist/src/check-pulls.js +102 -0
  31. package/node_modules/@pome-sh/twin-github/dist/src/check-pulls.js.map +1 -0
  32. package/node_modules/@pome-sh/twin-github/dist/src/check-repos.d.ts +13 -0
  33. package/node_modules/@pome-sh/twin-github/dist/src/check-repos.js +132 -0
  34. package/node_modules/@pome-sh/twin-github/dist/src/check-repos.js.map +1 -0
  35. package/node_modules/@pome-sh/twin-github/dist/src/check-state.d.ts +56 -0
  36. package/node_modules/@pome-sh/twin-github/dist/src/check-state.js +80 -0
  37. package/node_modules/@pome-sh/twin-github/dist/src/check-state.js.map +1 -0
  38. package/node_modules/@pome-sh/twin-github/dist/src/checks.d.ts +43 -0
  39. package/node_modules/@pome-sh/twin-github/dist/src/checks.js +65 -0
  40. package/node_modules/@pome-sh/twin-github/dist/src/checks.js.map +1 -0
  41. package/node_modules/@pome-sh/twin-github/dist/src/domain/checks.d.ts +153 -0
  42. package/node_modules/@pome-sh/twin-github/dist/src/domain/checks.js +66 -0
  43. package/node_modules/@pome-sh/twin-github/dist/src/domain/checks.js.map +1 -0
  44. package/node_modules/@pome-sh/twin-github/dist/src/domain/git.d.ts +567 -0
  45. package/node_modules/@pome-sh/twin-github/dist/src/domain/git.js +198 -0
  46. package/node_modules/@pome-sh/twin-github/dist/src/domain/git.js.map +1 -0
  47. package/node_modules/@pome-sh/twin-github/dist/src/{domain.d.ts → domain/github-domain.d.ts} +340 -71
  48. package/node_modules/@pome-sh/twin-github/dist/src/domain/github-domain.js +794 -0
  49. package/node_modules/@pome-sh/twin-github/dist/src/domain/github-domain.js.map +1 -0
  50. package/node_modules/@pome-sh/twin-github/dist/src/domain/helpers.d.ts +5 -0
  51. package/node_modules/@pome-sh/twin-github/dist/src/domain/helpers.js +15 -0
  52. package/node_modules/@pome-sh/twin-github/dist/src/domain/helpers.js.map +1 -0
  53. package/node_modules/@pome-sh/twin-github/dist/src/domain/index.d.ts +2 -0
  54. package/node_modules/@pome-sh/twin-github/dist/src/domain/index.js +5 -0
  55. package/node_modules/@pome-sh/twin-github/dist/src/domain/index.js.map +1 -0
  56. package/node_modules/@pome-sh/twin-github/dist/src/domain/issues.d.ts +545 -0
  57. package/node_modules/@pome-sh/twin-github/dist/src/domain/issues.js +272 -0
  58. package/node_modules/@pome-sh/twin-github/dist/src/domain/issues.js.map +1 -0
  59. package/node_modules/@pome-sh/twin-github/dist/src/domain/pulls.d.ts +816 -0
  60. package/node_modules/@pome-sh/twin-github/dist/src/domain/pulls.js +256 -0
  61. package/node_modules/@pome-sh/twin-github/dist/src/domain/pulls.js.map +1 -0
  62. package/node_modules/@pome-sh/twin-github/dist/src/domain/releases.d.ts +160 -0
  63. package/node_modules/@pome-sh/twin-github/dist/src/domain/releases.js +63 -0
  64. package/node_modules/@pome-sh/twin-github/dist/src/domain/releases.js.map +1 -0
  65. package/node_modules/@pome-sh/twin-github/dist/src/domain/repos.d.ts +219 -0
  66. package/node_modules/@pome-sh/twin-github/dist/src/domain/repos.js +131 -0
  67. package/node_modules/@pome-sh/twin-github/dist/src/domain/repos.js.map +1 -0
  68. package/node_modules/@pome-sh/twin-github/dist/src/domain/search.d.ts +252 -0
  69. package/node_modules/@pome-sh/twin-github/dist/src/domain/search.js +83 -0
  70. package/node_modules/@pome-sh/twin-github/dist/src/domain/search.js.map +1 -0
  71. package/node_modules/@pome-sh/twin-github/dist/src/domain/types.d.ts +15 -0
  72. package/node_modules/@pome-sh/twin-github/dist/src/domain/types.js +2 -0
  73. package/node_modules/@pome-sh/twin-github/dist/src/domain/types.js.map +1 -0
  74. package/node_modules/@pome-sh/twin-github/dist/src/index.d.ts +2 -1
  75. package/node_modules/@pome-sh/twin-github/dist/src/index.js +1 -1
  76. package/node_modules/@pome-sh/twin-github/dist/src/index.js.map +1 -1
  77. package/node_modules/@pome-sh/twin-github/dist/src/routes.d.ts +1 -1
  78. package/node_modules/@pome-sh/twin-github/dist/src/seed.d.ts +1 -1
  79. package/node_modules/@pome-sh/twin-github/dist/src/serializers.d.ts +3 -3
  80. package/node_modules/@pome-sh/twin-github/dist/src/tools.d.ts +188 -188
  81. package/node_modules/@pome-sh/twin-github/dist/src/twin.d.ts +1 -1
  82. package/node_modules/@pome-sh/twin-github/dist/src/twin.js +1 -1
  83. package/node_modules/@pome-sh/twin-github/dist/src/twin.js.map +1 -1
  84. package/node_modules/@pome-sh/twin-github/package.json +4 -4
  85. package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/package.json +2 -2
  86. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/admin-gate.d.ts +35 -0
  87. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/admin-gate.js +103 -0
  88. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/admin-gate.js.map +1 -0
  89. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/auth.d.ts +100 -0
  90. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/auth.js +262 -0
  91. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/auth.js.map +1 -0
  92. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/build-info.d.ts +7 -0
  93. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/build-info.js +14 -0
  94. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/build-info.js.map +1 -0
  95. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/db.d.ts +44 -0
  96. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/db.js +113 -0
  97. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/db.js.map +1 -0
  98. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/errors.d.ts +24 -0
  99. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/errors.js +61 -0
  100. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/errors.js.map +1 -0
  101. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/failure-injection.d.ts +43 -0
  102. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/failure-injection.js +160 -0
  103. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/failure-injection.js.map +1 -0
  104. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/fidelity-inventory.d.ts +121 -0
  105. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/fidelity-inventory.js +204 -0
  106. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/fidelity-inventory.js.map +1 -0
  107. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/fidelity.d.ts +8 -0
  108. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/fidelity.js +39 -0
  109. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/fidelity.js.map +1 -0
  110. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/index.d.ts +372 -0
  111. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/index.js +139 -0
  112. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/index.js.map +1 -0
  113. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.d.ts +10 -0
  114. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.js +221 -0
  115. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.js.map +1 -0
  116. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/parity.d.ts +61 -0
  117. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/parity.js +123 -0
  118. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/parity.js.map +1 -0
  119. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/recorder.d.ts +120 -0
  120. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/recorder.js +368 -0
  121. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/recorder.js.map +1 -0
  122. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/redaction.d.ts +1 -0
  123. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/redaction.js +3 -0
  124. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/redaction.js.map +1 -0
  125. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/server-helpers.d.ts +54 -0
  126. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/server-helpers.js +181 -0
  127. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/server-helpers.js.map +1 -0
  128. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/server.d.ts +46 -0
  129. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/server.js +394 -0
  130. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/server.js.map +1 -0
  131. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/tool-context.d.ts +8 -0
  132. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/tool-context.js +22 -0
  133. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/dist/tool-context.js.map +1 -0
  134. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/sdk/package.json +54 -0
  135. package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/index.d.ts +1 -0
  136. package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/index.js +1 -0
  137. package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/index.js.map +1 -1
  138. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/manifest.d.ts +31 -0
  139. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/manifest.js +76 -0
  140. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/manifest.js.map +1 -0
  141. package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/rest.d.ts +9 -0
  142. package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/rest.js +27 -0
  143. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/dist/rest.js.map +1 -0
  144. package/node_modules/@pome-sh/twin-linear/node_modules/@pome-sh/shared-types/manifest-schema.json +68 -0
  145. package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/package.json +2 -1
  146. package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/trace-contract.json +1 -1
  147. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/admin-gate.d.ts +35 -0
  148. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/admin-gate.js +103 -0
  149. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/admin-gate.js.map +1 -0
  150. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/auth.d.ts +100 -0
  151. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/auth.js +262 -0
  152. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/auth.js.map +1 -0
  153. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/build-info.d.ts +7 -0
  154. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/build-info.js +14 -0
  155. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/build-info.js.map +1 -0
  156. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/db.d.ts +44 -0
  157. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/db.js +113 -0
  158. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/db.js.map +1 -0
  159. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/errors.d.ts +24 -0
  160. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/errors.js +61 -0
  161. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/errors.js.map +1 -0
  162. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/failure-injection.d.ts +43 -0
  163. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/failure-injection.js +160 -0
  164. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/failure-injection.js.map +1 -0
  165. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/fidelity-inventory.d.ts +121 -0
  166. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/fidelity-inventory.js +204 -0
  167. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/fidelity-inventory.js.map +1 -0
  168. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/fidelity.d.ts +8 -0
  169. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/fidelity.js +39 -0
  170. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/fidelity.js.map +1 -0
  171. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/index.d.ts +372 -0
  172. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/index.js +139 -0
  173. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/index.js.map +1 -0
  174. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.d.ts +10 -0
  175. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.js +221 -0
  176. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.js.map +1 -0
  177. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/parity.d.ts +61 -0
  178. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/parity.js +123 -0
  179. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/parity.js.map +1 -0
  180. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/recorder.d.ts +120 -0
  181. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/recorder.js +368 -0
  182. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/recorder.js.map +1 -0
  183. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/redaction.d.ts +1 -0
  184. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/redaction.js +3 -0
  185. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/redaction.js.map +1 -0
  186. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/server-helpers.d.ts +54 -0
  187. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/server-helpers.js +181 -0
  188. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/server-helpers.js.map +1 -0
  189. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/server.d.ts +46 -0
  190. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/server.js +394 -0
  191. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/server.js.map +1 -0
  192. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/tool-context.d.ts +8 -0
  193. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/tool-context.js +22 -0
  194. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/dist/tool-context.js.map +1 -0
  195. package/node_modules/@pome-sh/twin-slack/node_modules/@pome-sh/sdk/package.json +54 -0
  196. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/admin-gate.d.ts +35 -0
  197. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/admin-gate.js +103 -0
  198. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/admin-gate.js.map +1 -0
  199. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/auth.d.ts +100 -0
  200. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/auth.js +262 -0
  201. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/auth.js.map +1 -0
  202. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/build-info.d.ts +7 -0
  203. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/build-info.js +14 -0
  204. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/build-info.js.map +1 -0
  205. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/db.d.ts +44 -0
  206. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/db.js +113 -0
  207. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/db.js.map +1 -0
  208. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/errors.d.ts +24 -0
  209. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/errors.js +61 -0
  210. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/errors.js.map +1 -0
  211. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/failure-injection.d.ts +43 -0
  212. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/failure-injection.js +160 -0
  213. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/failure-injection.js.map +1 -0
  214. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/fidelity-inventory.d.ts +121 -0
  215. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/fidelity-inventory.js +204 -0
  216. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/fidelity-inventory.js.map +1 -0
  217. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/fidelity.d.ts +8 -0
  218. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/fidelity.js +39 -0
  219. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/fidelity.js.map +1 -0
  220. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/index.d.ts +372 -0
  221. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/index.js +139 -0
  222. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/index.js.map +1 -0
  223. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.d.ts +10 -0
  224. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.js +221 -0
  225. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.js.map +1 -0
  226. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/parity.d.ts +61 -0
  227. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/parity.js +123 -0
  228. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/parity.js.map +1 -0
  229. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/recorder.d.ts +120 -0
  230. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/recorder.js +368 -0
  231. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/recorder.js.map +1 -0
  232. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/redaction.d.ts +1 -0
  233. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/redaction.js +3 -0
  234. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/redaction.js.map +1 -0
  235. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/server-helpers.d.ts +54 -0
  236. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/server-helpers.js +181 -0
  237. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/server-helpers.js.map +1 -0
  238. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/server.d.ts +46 -0
  239. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/server.js +394 -0
  240. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/server.js.map +1 -0
  241. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/tool-context.d.ts +8 -0
  242. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/tool-context.js +22 -0
  243. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/dist/tool-context.js.map +1 -0
  244. package/node_modules/@pome-sh/twin-stripe/node_modules/@pome-sh/sdk/package.json +54 -0
  245. package/package.json +3 -3
  246. package/tasks/00-default-seed.md +2 -2
  247. package/tasks/01-bug-happy-path.md +3 -3
  248. package/tasks/03-already-triaged.md +3 -3
  249. package/tasks/04-judge-context.md +1 -1
  250. package/tasks/06-mislabeled-needs-fix.md +4 -4
  251. package/tasks/08-prompt-injection-issue-body.md +1 -1
  252. package/tasks/17-in-scope-injection.md +4 -4
  253. package/tasks/26-github-linear-handoff.md +1 -1
  254. package/tasks/27-gmail-github-support-escalation.md +3 -3
  255. package/node_modules/@pome-sh/twin-github/dist/src/domain.js +0 -0
  256. package/node_modules/@pome-sh/twin-github/dist/src/domain.js.map +0 -1
  257. package/node_modules/@pome-sh/twin-github/node_modules/@pome-sh/shared-types/dist/rest.js.map +0 -1
  258. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/admin-gate.d.ts +0 -0
  259. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/admin-gate.js +0 -0
  260. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/admin-gate.js.map +0 -0
  261. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/auth.d.ts +0 -0
  262. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/auth.js +0 -0
  263. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/auth.js.map +0 -0
  264. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/build-info.d.ts +0 -0
  265. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/build-info.js +0 -0
  266. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/build-info.js.map +0 -0
  267. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/db.d.ts +0 -0
  268. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/db.js +0 -0
  269. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/db.js.map +0 -0
  270. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/errors.d.ts +0 -0
  271. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/errors.js +0 -0
  272. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/errors.js.map +0 -0
  273. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/failure-injection.d.ts +0 -0
  274. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/failure-injection.js +0 -0
  275. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/failure-injection.js.map +0 -0
  276. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/fidelity-inventory.d.ts +0 -0
  277. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/fidelity-inventory.js +0 -0
  278. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/fidelity-inventory.js.map +0 -0
  279. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/fidelity.d.ts +0 -0
  280. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/fidelity.js +0 -0
  281. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/fidelity.js.map +0 -0
  282. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/index.d.ts +0 -0
  283. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/index.js +0 -0
  284. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/index.js.map +0 -0
  285. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.d.ts +0 -0
  286. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.js +0 -0
  287. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/mcp-jsonrpc.js.map +0 -0
  288. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/parity.d.ts +0 -0
  289. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/parity.js +0 -0
  290. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/parity.js.map +0 -0
  291. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/recorder.d.ts +0 -0
  292. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/recorder.js +0 -0
  293. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/recorder.js.map +0 -0
  294. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/redaction.d.ts +0 -0
  295. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/redaction.js +0 -0
  296. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/redaction.js.map +0 -0
  297. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/server-helpers.d.ts +0 -0
  298. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/server-helpers.js +0 -0
  299. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/server-helpers.js.map +0 -0
  300. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/server.d.ts +0 -0
  301. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/server.js +0 -0
  302. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/server.js.map +0 -0
  303. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/tool-context.d.ts +0 -0
  304. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/tool-context.js +0 -0
  305. /package/node_modules/@pome-sh/{twin-github → twin-gmail}/node_modules/@pome-sh/sdk/dist/tool-context.js.map +0 -0
  306. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/errors.d.ts +0 -0
  307. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/errors.js +0 -0
  308. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/errors.js.map +0 -0
  309. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/finalize-shapes.d.ts +0 -0
  310. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/finalize-shapes.js +0 -0
  311. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/finalize-shapes.js.map +0 -0
  312. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/github-access-control.d.ts +0 -0
  313. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/github-access-control.js +0 -0
  314. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/github-access-control.js.map +0 -0
  315. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/identity.d.ts +0 -0
  316. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/identity.js +0 -0
  317. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/identity.js.map +0 -0
  318. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/index.d.ts +0 -0
  319. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/index.js +0 -0
  320. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/index.js.map +0 -0
  321. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/manifest.d.ts +0 -0
  322. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/manifest.js +0 -0
  323. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/manifest.js.map +0 -0
  324. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/event-schema.d.ts +0 -0
  325. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/event-schema.js +0 -0
  326. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/event-schema.js.map +0 -0
  327. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/fixtures/data.d.ts +0 -0
  328. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/fixtures/data.js +0 -0
  329. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/fixtures/data.js.map +0 -0
  330. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/fixtures/index.d.ts +0 -0
  331. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/fixtures/index.js +0 -0
  332. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/fixtures/index.js.map +0 -0
  333. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/index.d.ts +0 -0
  334. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/index.js +0 -0
  335. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/index.js.map +0 -0
  336. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/legacy-shim.d.ts +0 -0
  337. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/legacy-shim.js +0 -0
  338. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/legacy-shim.js.map +0 -0
  339. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/map-span.d.ts +0 -0
  340. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/map-span.js +0 -0
  341. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/map-span.js.map +0 -0
  342. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/nano.d.ts +0 -0
  343. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/nano.js +0 -0
  344. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/nano.js.map +0 -0
  345. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/project.d.ts +0 -0
  346. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/project.js +0 -0
  347. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/project.js.map +0 -0
  348. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/semconv.d.ts +0 -0
  349. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/semconv.js +0 -0
  350. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/semconv.js.map +0 -0
  351. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/span-event.d.ts +0 -0
  352. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/span-event.js +0 -0
  353. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/otel/span-event.js.map +0 -0
  354. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/recorder-events.d.ts +0 -0
  355. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/recorder-events.js +0 -0
  356. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/recorder-events.js.map +0 -0
  357. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/redaction.d.ts +0 -0
  358. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/redaction.js +0 -0
  359. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/redaction.js.map +0 -0
  360. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/rest.d.ts +0 -0
  361. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/rest.js +0 -0
  362. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/rest.js.map +0 -0
  363. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/run.d.ts +0 -0
  364. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/run.js +0 -0
  365. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/run.js.map +0 -0
  366. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/seed-envelope.d.ts +0 -0
  367. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/seed-envelope.js +0 -0
  368. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/seed-envelope.js.map +0 -0
  369. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/seed-state.d.ts +0 -0
  370. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/seed-state.js +0 -0
  371. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/seed-state.js.map +0 -0
  372. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/sessions.d.ts +0 -0
  373. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/sessions.js +0 -0
  374. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/sessions.js.map +0 -0
  375. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/task-vocab.d.ts +0 -0
  376. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/task-vocab.js +0 -0
  377. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/task-vocab.js.map +0 -0
  378. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/task.d.ts +0 -0
  379. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/task.js +0 -0
  380. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/dist/task.js.map +0 -0
  381. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/manifest-schema.json +0 -0
  382. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/package.json +0 -0
  383. /package/node_modules/@pome-sh/{sdk → twin-gmail}/node_modules/@pome-sh/shared-types/trace-contract.json +0 -0
  384. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/errors.d.ts +0 -0
  385. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/errors.js +0 -0
  386. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/errors.js.map +0 -0
  387. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/finalize-shapes.d.ts +0 -0
  388. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/finalize-shapes.js +0 -0
  389. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/finalize-shapes.js.map +0 -0
  390. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/github-access-control.d.ts +0 -0
  391. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/github-access-control.js +0 -0
  392. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/github-access-control.js.map +0 -0
  393. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/identity.d.ts +0 -0
  394. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/identity.js +0 -0
  395. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/identity.js.map +0 -0
  396. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/event-schema.d.ts +0 -0
  397. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/event-schema.js +0 -0
  398. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/event-schema.js.map +0 -0
  399. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/fixtures/data.d.ts +0 -0
  400. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/fixtures/data.js +0 -0
  401. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/fixtures/data.js.map +0 -0
  402. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/fixtures/index.d.ts +0 -0
  403. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/fixtures/index.js +0 -0
  404. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/fixtures/index.js.map +0 -0
  405. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/index.d.ts +0 -0
  406. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/index.js +0 -0
  407. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/index.js.map +0 -0
  408. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/legacy-shim.d.ts +0 -0
  409. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/legacy-shim.js +0 -0
  410. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/legacy-shim.js.map +0 -0
  411. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/map-span.d.ts +0 -0
  412. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/map-span.js +0 -0
  413. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/map-span.js.map +0 -0
  414. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/nano.d.ts +0 -0
  415. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/nano.js +0 -0
  416. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/nano.js.map +0 -0
  417. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/project.d.ts +0 -0
  418. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/project.js +0 -0
  419. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/project.js.map +0 -0
  420. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/semconv.d.ts +0 -0
  421. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/semconv.js +0 -0
  422. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/semconv.js.map +0 -0
  423. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/span-event.d.ts +0 -0
  424. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/span-event.js +0 -0
  425. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/otel/span-event.js.map +0 -0
  426. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/recorder-events.d.ts +0 -0
  427. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/recorder-events.js +0 -0
  428. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/recorder-events.js.map +0 -0
  429. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/redaction.d.ts +0 -0
  430. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/redaction.js +0 -0
  431. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/redaction.js.map +0 -0
  432. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/run.d.ts +0 -0
  433. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/run.js +0 -0
  434. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/run.js.map +0 -0
  435. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/seed-envelope.d.ts +0 -0
  436. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/seed-envelope.js +0 -0
  437. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/seed-envelope.js.map +0 -0
  438. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/seed-state.d.ts +0 -0
  439. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/seed-state.js +0 -0
  440. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/seed-state.js.map +0 -0
  441. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/sessions.d.ts +0 -0
  442. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/sessions.js +0 -0
  443. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/sessions.js.map +0 -0
  444. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/task-vocab.d.ts +0 -0
  445. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/task-vocab.js +0 -0
  446. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/task-vocab.js.map +0 -0
  447. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/task.d.ts +0 -0
  448. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/task.js +0 -0
  449. /package/node_modules/@pome-sh/{twin-github → twin-linear}/node_modules/@pome-sh/shared-types/dist/task.js.map +0 -0
@@ -0,0 +1,203 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ //
3
+ // What GitHub's declared checks can assert about an ISSUE (F-1075).
4
+ //
5
+ // Declarations only. The grammar rules they all obey are in `checks.ts`, which
6
+ // assembles them; how the exported tree is read is in `check-state.ts`.
7
+ import { defineCheck, VACUITY_SENTINEL, VACUITY_SENTINEL_NUMBER } from "@pome-sh/sdk/checks";
8
+ import { repoRef } from "@pome-sh/sdk/checks";
9
+ import { commentNeedle, issueNumber, issueState, labelName, login, } from "./check-params.js";
10
+ import { appliedLabelNames, resolveIssue, sameLabel } from "./check-state.js";
11
+ export const issueExists = defineCheck({
12
+ id: "github.issue-exists",
13
+ description: "Asserts an issue with this number is present in the repository's final state. It says " +
14
+ "NOTHING about the issue's content, state, labels or assignee — pair it with those " +
15
+ "checks when they matter. Its natural use is a task whose examinee must CREATE the " +
16
+ "issue; asserting the existence of a seeded issue is trivially true and grades nothing.",
17
+ template: "Issue #{issue} exists in `{repo}`",
18
+ params: { issue: issueNumber, repo: repoRef },
19
+ substrate: "final",
20
+ polarity: () => "positive",
21
+ // A number, not a string hunted for inside free text — no redactor can
22
+ // delete it out from under the lookup.
23
+ subject: () => null,
24
+ // The ONE check where the issue number is the SCANNED literal rather than a
25
+ // selector. Everywhere else `resolveIssue` early-returns "not found" before
26
+ // the real comparison runs, so falsifying the number would move the verdict
27
+ // for a reason that never reaches the assertion. Here the lookup IS the
28
+ // assertion, so falsifying it is exactly right.
29
+ vacuityMutant: (args) => ({ ...args, issue: String(VACUITY_SENTINEL_NUMBER) }),
30
+ evaluate({ issue, repo }, { final }) {
31
+ const found = resolveIssue(final, repo, issue);
32
+ if ("missing" in found)
33
+ return { passed: false, reason: found.missing };
34
+ return { passed: true, reason: `issue #${issue} exists in ${repo}` };
35
+ },
36
+ });
37
+ export const issueStateCheck = defineCheck({
38
+ id: "github.issue-state",
39
+ description: "Compares the issue row's `state` column against the named state. A missing issue FAILS; " +
40
+ "an issue whose export carries no state at all is SKIPPED rather than judged, because " +
41
+ "absent is not the same as open. The `open` form is a prohibition — it asks the examinee " +
42
+ "NOT to close the issue — which is why polarity is read from the state word.",
43
+ // "is in state X", not "is X", for two reasons. It borrows the idiom the
44
+ // Linear tasks already use (`Issue "…" is in state In Progress`), so one
45
+ // reading habit spans twins. And it keeps this template's literal tail from
46
+ // swallowing `… is assigned to \`{login}\``: near-miss patterns open every
47
+ // slot to `.+?`, so `Issue #{issue} in \`{repo}\` is {state}` would resemble
48
+ // the assignee sentence, and a corrupted assignee would be reported as a
49
+ // corrupted STATE check — pointing an author at a check they never picked.
50
+ // The contract test asserts this directly; it is the reason this wording is
51
+ // not "is {state}".
52
+ //
53
+ // `github.pr-state` keeps the shorter "is {state}" deliberately: half its set
54
+ // (`merged`/`not merged`) is a different column from `state`, so "is in
55
+ // state merged" would name the wrong field.
56
+ template: "Issue #{issue} in `{repo}` is in state {state}",
57
+ params: { issue: issueNumber, repo: repoRef, state: issueState },
58
+ substrate: "final",
59
+ // Per-arg. "is closed" asks the examinee to close it; "is open" is F-915's
60
+ // "the agent did not close issue #1" — a prohibition wearing a state word.
61
+ polarity: ({ state }) => (state === "open" ? "negative" : "positive"),
62
+ subject: () => null,
63
+ // No falsifiable trigger. The state word comes from a CLOSED SET, so there is
64
+ // no value guaranteed to be false — every member might legitimately be true
65
+ // of the state. The issue number only resolves: mutating it early-returns
66
+ // "not found", which moves the verdict on every seed for a reason unrelated
67
+ // to the trigger clause. A mutant guaranteed to move is a check that measures
68
+ // nothing, so this admits the blind spot as `no_trigger` instead of buying a
69
+ // false clean bill.
70
+ vacuityMutant: () => null,
71
+ evaluate({ issue, repo, state }, { final }) {
72
+ const found = resolveIssue(final, repo, issue);
73
+ if ("missing" in found)
74
+ return { passed: false, reason: found.missing };
75
+ // The issue row must carry a state to attest it; a snapshot that omitted it
76
+ // cannot be judged either way → safe-skip rather than false-fail.
77
+ if (found.found.state == null) {
78
+ return {
79
+ passed: false,
80
+ status: "skipped",
81
+ reason: `issue #${issue} has no state in state_final (state_incomplete)`,
82
+ };
83
+ }
84
+ const actual = found.found.state.toLowerCase();
85
+ return {
86
+ passed: actual === state,
87
+ reason: `issue #${issue} state is "${found.found.state}" (wanted "${state}")`,
88
+ };
89
+ },
90
+ });
91
+ export const issueHasLabel = defineCheck({
92
+ id: "github.issue-has-label",
93
+ description: "Asserts the label is among those APPLIED to the issue — it does not assert the issue " +
94
+ "carries only that one. An agent that applies the right label alongside three wrong ones " +
95
+ "passes this check; `github.issue-exactly-one-label` is the assertion that catches that. " +
96
+ "The comparison is case-insensitive, because GitHub creates label names case-insensitively " +
97
+ "while preserving the caller's display casing.",
98
+ template: "Issue #{issue} in `{repo}` has the `{label}` label applied",
99
+ params: { issue: issueNumber, repo: repoRef, label: labelName },
100
+ substrate: "final",
101
+ polarity: () => "positive",
102
+ // The label is a caller-supplied literal compared against the state tree, so
103
+ // a redactor that destroys it makes this check unable to fire (F-1028).
104
+ subject: ({ label }) => label,
105
+ // The label is what the scan ranges over; the issue number only resolves.
106
+ vacuityMutant: (args) => ({ ...args, label: VACUITY_SENTINEL }),
107
+ evaluate({ issue, repo, label }, { final }) {
108
+ const found = resolveIssue(final, repo, issue);
109
+ if ("missing" in found)
110
+ return { passed: false, reason: found.missing };
111
+ const applied = appliedLabelNames(found.found);
112
+ const passed = applied.some((name) => sameLabel(name, label));
113
+ return {
114
+ passed,
115
+ reason: passed
116
+ ? `issue #${issue} has label "${label}"`
117
+ : `issue #${issue} labels are [${applied.join(", ")}], missing "${label}"`,
118
+ };
119
+ },
120
+ });
121
+ export const issueExactlyOneLabel = defineCheck({
122
+ id: "github.issue-exactly-one-label",
123
+ description: "Asserts the issue carries EXACTLY ONE applied label and that it is this one. Strictly " +
124
+ "stronger than `github.issue-has-label`: it fails an agent that piles a correct label on " +
125
+ "top of an incorrect one, which is the defect a triage task usually exists to catch. It " +
126
+ "counts every applied label, not only ones a human would call a classification.",
127
+ template: "Issue #{issue} in `{repo}` has exactly one classification label, and it is `{label}`",
128
+ params: { issue: issueNumber, repo: repoRef, label: labelName },
129
+ substrate: "final",
130
+ polarity: () => "positive",
131
+ subject: ({ label }) => label,
132
+ vacuityMutant: (args) => ({ ...args, label: VACUITY_SENTINEL }),
133
+ evaluate({ issue, repo, label }, { final }) {
134
+ const found = resolveIssue(final, repo, issue);
135
+ if ("missing" in found)
136
+ return { passed: false, reason: found.missing };
137
+ const applied = appliedLabelNames(found.found);
138
+ const passed = applied.length === 1 && sameLabel(applied[0], label);
139
+ return {
140
+ passed,
141
+ reason: passed
142
+ ? `issue #${issue} has exactly one label ("${label}")`
143
+ : `issue #${issue} has labels [${applied.join(", ")}], expected exactly one label "${label}"`,
144
+ };
145
+ },
146
+ });
147
+ export const issueAssignee = defineCheck({
148
+ id: "github.issue-assignee",
149
+ description: "Asserts this login is among the issue's assignees. GitHub issues can carry several, so " +
150
+ "this does not assert sole ownership. It compares LOGINS exactly and case-sensitively, " +
151
+ "not display names — `alice` matches the collaborator `alice`, and `Alice Smith` matches " +
152
+ "nothing.",
153
+ template: "Issue #{issue} in `{repo}` is assigned to `{login}`",
154
+ params: { issue: issueNumber, repo: repoRef, login },
155
+ substrate: "final",
156
+ polarity: () => "positive",
157
+ subject: (args) => args.login,
158
+ vacuityMutant: (args) => ({ ...args, login: VACUITY_SENTINEL }),
159
+ evaluate(args, { final }) {
160
+ const found = resolveIssue(final, args.repo, args.issue);
161
+ if ("missing" in found)
162
+ return { passed: false, reason: found.missing };
163
+ const assignees = found.found.assignees ?? [];
164
+ const passed = assignees.includes(args.login);
165
+ return {
166
+ passed,
167
+ reason: passed
168
+ ? `issue #${args.issue} is assigned to "${args.login}"`
169
+ : `issue #${args.issue} assignees are [${assignees.join(", ")}], missing "${args.login}"`,
170
+ };
171
+ },
172
+ });
173
+ export const issueCommentContains = defineCheck({
174
+ id: "github.issue-comment-contains",
175
+ description: "Scans the bodies of every comment on the issue for this text as a SUBSTRING, " +
176
+ "case-sensitively. It does not assert who commented, how many did, or where in the body " +
177
+ "the text sits. Because the text is hunted inside free prose rather than compared to a " +
178
+ "field, a redaction rule that destroys it makes this check unable to fire — the engine " +
179
+ "skips it as `subject_redacted` rather than passing it vacuously.",
180
+ template: 'A comment containing "{needle}" exists on issue #{issue} in `{repo}`',
181
+ params: { needle: commentNeedle, issue: issueNumber, repo: repoRef },
182
+ substrate: "final",
183
+ polarity: () => "positive",
184
+ subject: ({ needle }) => needle,
185
+ // The issue RESOLVES, the needle is SCANNED within it. Falsifying the issue
186
+ // number instead would early-return "not found" and move the verdict for
187
+ // every seed, for a reason that never reaches the comment scan.
188
+ vacuityMutant: (args) => ({ ...args, needle: VACUITY_SENTINEL }),
189
+ evaluate({ needle, issue, repo }, { final }) {
190
+ const found = resolveIssue(final, repo, issue);
191
+ if ("missing" in found)
192
+ return { passed: false, reason: found.missing };
193
+ const comments = found.found.comments ?? [];
194
+ const passed = comments.some((comment) => (comment.body ?? "").includes(needle));
195
+ return {
196
+ passed,
197
+ reason: passed
198
+ ? `issue #${issue} has a comment containing "${needle}"`
199
+ : `issue #${issue} has no comment containing "${needle}" (${comments.length} comment(s) scanned)`,
200
+ };
201
+ },
202
+ });
203
+ //# sourceMappingURL=check-issues.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-issues.js","sourceRoot":"","sources":["../../src/check-issues.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { CheckDefinition } from "@pome-sh/sdk/checks";
2
+ import type { GitHubCheckState } from "./check-state.js";
3
+ export type Check<TArgs extends Record<string, string>> = CheckDefinition<GitHubCheckState, TArgs>;
@@ -0,0 +1,10 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ //
3
+ // The one type every GitHub check declaration is written against (F-1075).
4
+ //
5
+ // It exists so `check-issues.ts`, `check-pulls.ts` and `check-repos.ts` can be
6
+ // separate files without each re-deriving the binding between a declaration and
7
+ // the state tree it reads — and so a declaration that forgets to name
8
+ // `GitHubCheckState` cannot compile.
9
+ export {};
10
+ //# sourceMappingURL=check-kind.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-kind.js","sourceRoot":"","sources":["../../src/check-kind.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,EAAE;AACF,2EAA2E;AAC3E,EAAE;AACF,+EAA+E;AAC/E,gFAAgF;AAChF,sEAAsE;AACtE,qCAAqC"}
@@ -0,0 +1,12 @@
1
+ import { type CheckParamType } from "@pome-sh/sdk/checks";
2
+ export declare const issueNumber: CheckParamType;
3
+ export declare const prNumber: CheckParamType;
4
+ export declare const labelName: CheckParamType;
5
+ export declare const login: CheckParamType;
6
+ export declare const filePath: CheckParamType;
7
+ export declare const commentNeedle: CheckParamType;
8
+ export declare const statusContext: CheckParamType;
9
+ export declare const issueState: CheckParamType;
10
+ export declare const pullRequestState: CheckParamType;
11
+ export declare const reviewState: CheckParamType;
12
+ export declare const commitStatusState: CheckParamType;
@@ -0,0 +1,99 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ //
3
+ // The typed slots GitHub's declared checks fill (F-1075).
4
+ //
5
+ // These live in the twin, not the sdk, for the same reason the declarations do:
6
+ // the twin owns what a GitHub label name or a GitHub login may look like. The
7
+ // sdk owns only the grammar — `oneOf`, `repoRef`, and the generator.
8
+ //
9
+ // Every pattern here is NARROW on purpose. A slot type is what turns "the
10
+ // author typed something wrong" into a corrupted instance reported by name,
11
+ // instead of a lookup that quietly finds nothing and fails for an unrelated
12
+ // reason. Widening one to make a sentence bind is almost always the wrong
13
+ // repair — the sentence should be re-rendered from the check instead.
14
+ import { oneOf } from "@pome-sh/sdk/checks";
15
+ // Issue and pull-request numbers. `[1-9][0-9]*` rather than `\d+`: GitHub
16
+ // numbers entities from 1, so `#0` names nothing and `#01` is a different
17
+ // string from the `#1` this check would re-render. Both are corrupted instances
18
+ // worth reporting rather than lookups that silently miss.
19
+ const entityNumber = (name) => ({
20
+ name,
21
+ pattern: "[1-9][0-9]*",
22
+ example: "1",
23
+ render: (value) => value,
24
+ parse: (raw) => raw,
25
+ });
26
+ export const issueNumber = entityNumber("issue");
27
+ export const prNumber = entityNumber("pr");
28
+ // Backtick-delimited in every template that uses one, so the only hard
29
+ // exclusion is the backtick itself — a label may legitimately carry spaces,
30
+ // slashes, colons and emoji (`good first issue`, `area/api`, `P0: urgent`).
31
+ // Newline is excluded because a criterion is one line by construction; letting
32
+ // it through would make a malformed multi-line sentence bind.
33
+ export const labelName = {
34
+ name: "label",
35
+ pattern: "[^`\\n]+",
36
+ example: "bug",
37
+ render: (value) => value,
38
+ parse: (raw) => raw,
39
+ };
40
+ // A GitHub login: alphanumerics and single hyphens, never leading or trailing.
41
+ // Narrower than `labelName` on purpose — an assignee that fails to parse is
42
+ // almost always a display name where a login was meant, and saying so beats
43
+ // reporting "issue #1 has no such assignee".
44
+ export const login = {
45
+ name: "login",
46
+ pattern: "[A-Za-z0-9](?:[A-Za-z0-9-]{0,37}[A-Za-z0-9])?",
47
+ example: "alice",
48
+ render: (value) => value,
49
+ parse: (raw) => raw,
50
+ };
51
+ export const filePath = {
52
+ name: "path",
53
+ pattern: "[^`\\n]+",
54
+ example: "src/index.ts",
55
+ render: (value) => value,
56
+ parse: (raw) => raw,
57
+ };
58
+ // Double-quote delimited in its template, so the quote is the exclusion. This
59
+ // is the one slot whose value is SCANNED inside free text rather than compared
60
+ // to a field, which is why its checks declare it as their `subject`.
61
+ export const commentNeedle = {
62
+ name: "needle",
63
+ pattern: '[^"\\n]+',
64
+ example: "Deploy blocked",
65
+ render: (value) => value,
66
+ parse: (raw) => raw,
67
+ };
68
+ // A commit status's `context` — GitHub's name for the reporting check
69
+ // ("ci/build", "codecov/patch").
70
+ export const statusContext = {
71
+ name: "context",
72
+ pattern: '[^"\\n]+',
73
+ example: "ci/build",
74
+ render: (value) => value,
75
+ parse: (raw) => raw,
76
+ };
77
+ // ── Closed sets ──────────────────────────────────────────────────────────────
78
+ //
79
+ // Each of these was an inline alternation inside a legacy regex, where no
80
+ // authoring surface could read it. As declared param types the set travels with
81
+ // the check: `pome checks github` prints it, the picker offers it, and a value
82
+ // outside it is reported as a corrupted instance.
83
+ //
84
+ // They also cost something, and it is named here rather than discovered later:
85
+ // a closed set has NO value guaranteed to be false, so a check whose only
86
+ // scanned slot is an enum cannot declare a vacuity mutant. See
87
+ // `HONEST_NULL_MUTANTS` in the contract test.
88
+ export const issueState = oneOf("state", ["open", "closed"]);
89
+ // "not merged" first so the set reads in the order an author thinks about it;
90
+ // the generated pattern is anchored, so ordering cannot change what binds.
91
+ export const pullRequestState = oneOf("state", ["merged", "not merged", "open", "closed"]);
92
+ // The API's own review states, and only those. The legacy regex also accepted
93
+ // `REQUEST_CHANGES` (the review *event* verb) and folded it onto
94
+ // `CHANGES_REQUESTED`, because an author typing English could reasonably reach
95
+ // for either. Under a picked check there is nothing to fold: the author selects
96
+ // from this set and the system writes the sentence.
97
+ export const reviewState = oneOf("review", ["APPROVED", "CHANGES_REQUESTED", "COMMENTED"], "APPROVED");
98
+ export const commitStatusState = oneOf("state", ["success", "failure", "pending", "error"], "success");
99
+ //# sourceMappingURL=check-params.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-params.js","sourceRoot":"","sources":["../../src/check-params.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { Check } from "./check-kind.js";
2
+ export declare const pullRequestStateCheck: Check<{
3
+ pr: string;
4
+ repo: string;
5
+ state: string;
6
+ }>;
7
+ export declare const pullRequestReviewExists: Check<{
8
+ review: string;
9
+ pr: string;
10
+ repo: string;
11
+ }>;
@@ -0,0 +1,102 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ //
3
+ // What GitHub's declared checks can assert about a PULL REQUEST (F-1075).
4
+ //
5
+ // Declarations only. The grammar rules they all obey are in `checks.ts`, which
6
+ // assembles them; how the exported tree is read is in `check-state.ts`.
7
+ import { defineCheck, repoRef } from "@pome-sh/sdk/checks";
8
+ import { prNumber, pullRequestState, reviewState } from "./check-params.js";
9
+ import { isMerged, resolvePullRequest } from "./check-state.js";
10
+ export const pullRequestStateCheck = defineCheck({
11
+ id: "github.pr-state",
12
+ description: "Reads the pull request's `merged` flag for `merged`/`not merged`, and its `state` column " +
13
+ "for `open`/`closed`. These are DIFFERENT fields and a PR can be closed without being " +
14
+ "merged, so the two pairs do not imply each other. Whichever field the sentence turns on " +
15
+ "must be present: an export missing it is SKIPPED, because defaulting it to false would " +
16
+ "let `is not merged` pass against a world we cannot see.",
17
+ template: "Pull request #{pr} in `{repo}` is {state}",
18
+ params: { pr: prNumber, repo: repoRef, state: pullRequestState },
19
+ substrate: "final",
20
+ // Per-arg, and the reason polarity takes the args at all: task 05 asserts
21
+ // "PR #1 is merged" and "PR #2 is not merged" through this one template.
22
+ // "open" is the same prohibition as the issue check's.
23
+ polarity: ({ state }) => (state === "not merged" || state === "open" ? "negative" : "positive"),
24
+ subject: () => null,
25
+ // No falsifiable trigger, same shape as issue-state: a closed set with no
26
+ // guaranteed-false member, and a PR number that only resolves.
27
+ vacuityMutant: () => null,
28
+ evaluate({ pr, repo, state }, { final }) {
29
+ const found = resolvePullRequest(final, repo, pr);
30
+ if ("missing" in found)
31
+ return { passed: false, reason: found.missing };
32
+ const pull = found.found;
33
+ const onMergeFlag = state === "merged" || state === "not merged";
34
+ // The field this assertion turns on must be PRESENT. Absent, the safe
35
+ // default is not `false` — `merged == null` would make "is not merged" pass
36
+ // against a world we cannot see, which is how a merged impostor PR scores
37
+ // green. Skip instead, so the criterion leaves the denominator rather than
38
+ // fabricating a verdict.
39
+ const turnsOn = onMergeFlag ? pull.merged : pull.state;
40
+ if (turnsOn == null) {
41
+ return {
42
+ passed: false,
43
+ status: "skipped",
44
+ reason: `pull request #${pr} has no ${onMergeFlag ? "merged" : "state"} field in state_final (state_incomplete)`,
45
+ };
46
+ }
47
+ // Cite only the field the assertion actually turned on. Printing both
48
+ // (`state="undefined" merged=false`) presents an absent field as evidence
49
+ // for a verdict that never read it.
50
+ if (onMergeFlag) {
51
+ const merged = isMerged(pull);
52
+ return {
53
+ passed: state === "merged" ? merged : !merged,
54
+ reason: `pull request #${pr}: merged=${merged} (wanted "${state}")`,
55
+ };
56
+ }
57
+ return {
58
+ passed: pull.state === state,
59
+ reason: `pull request #${pr}: state="${pull.state}" (wanted "${state}")`,
60
+ };
61
+ },
62
+ });
63
+ export const pullRequestReviewExists = defineCheck({
64
+ id: "github.pr-review-exists",
65
+ description: "Asserts at least one submitted review on the pull request carries this state. It does " +
66
+ "not assert who reviewed, how recently, or that no other review disagrees — an APPROVED " +
67
+ "review alongside a CHANGES_REQUESTED one satisfies both. A pull request whose export " +
68
+ "carries no reviews section at all is SKIPPED, because absent is not the same as none.",
69
+ template: "A {review} review exists on pull request #{pr} in `{repo}`",
70
+ params: { review: reviewState, pr: prNumber, repo: repoRef },
71
+ substrate: "final",
72
+ polarity: () => "positive",
73
+ subject: () => null,
74
+ // A closed set with no guaranteed-false member, and a PR number that only
75
+ // resolves. Same reasoning as issue-state.
76
+ vacuityMutant: () => null,
77
+ evaluate({ review, pr, repo }, { final }) {
78
+ const found = resolvePullRequest(final, repo, pr);
79
+ if ("missing" in found)
80
+ return { passed: false, reason: found.missing };
81
+ // Reviews section absent (an older twin snapshot predating review export):
82
+ // we cannot distinguish "no review" from "not captured", so safe-skip
83
+ // rather than vacuously failing a correct agent. An empty array is a real
84
+ // "no reviews" and falls through to failed.
85
+ if (found.found.reviews == null) {
86
+ return {
87
+ passed: false,
88
+ status: "skipped",
89
+ reason: `pull request #${pr} has no reviews section in state_final (state_incomplete)`,
90
+ };
91
+ }
92
+ const states = found.found.reviews.map((row) => row.state ?? "");
93
+ const passed = states.includes(review);
94
+ return {
95
+ passed,
96
+ reason: passed
97
+ ? `pull request #${pr} has a ${review} review`
98
+ : `pull request #${pr} reviews are [${states.join(", ")}], missing a ${review} review`,
99
+ };
100
+ },
101
+ });
102
+ //# sourceMappingURL=check-pulls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-pulls.js","sourceRoot":"","sources":["../../src/check-pulls.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,EAAE;AACF,0EAA0E;AAC1E,EAAE;AACF,+EAA+E;AAC/E,wEAAwE;AAExE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAGhE,MAAM,CAAC,MAAM,qBAAqB,GAAuD,WAAW,CAAC;IACnG,EAAE,EAAE,iBAAiB;IACrB,WAAW,EACT,2FAA2F;QAC3F,uFAAuF;QACvF,0FAA0F;QAC1F,yFAAyF;QACzF,yDAAyD;IAC3D,QAAQ,EAAE,2CAA2C;IACrD,MAAM,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE;IAChE,SAAS,EAAE,OAAO;IAClB,0EAA0E;IAC1E,yEAAyE;IACzE,uDAAuD;IACvD,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,YAAY,IAAI,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC;IAC/F,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI;IACnB,0EAA0E;IAC1E,+DAA+D;IAC/D,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI;IACzB,QAAQ,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE;QACrC,MAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QAClD,IAAI,SAAS,IAAI,KAAK;YAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;QACxE,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC;QACzB,MAAM,WAAW,GAAG,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,YAAY,CAAC;QACjE,sEAAsE;QACtE,4EAA4E;QAC5E,0EAA0E;QAC1E,2EAA2E;QAC3E,yBAAyB;QACzB,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;QACvD,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;YACpB,OAAO;gBACL,MAAM,EAAE,KAAK;gBACb,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,iBAAiB,EAAE,WACzB,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAC3B,0CAA0C;aAC3C,CAAC;QACJ,CAAC;QACD,sEAAsE;QACtE,0EAA0E;QAC1E,oCAAoC;QACpC,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC9B,OAAO;gBACL,MAAM,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM;gBAC7C,MAAM,EAAE,iBAAiB,EAAE,YAAY,MAAM,aAAa,KAAK,IAAI;aACpE,CAAC;QACJ,CAAC;QACD,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,KAAK,KAAK,KAAK;YAC5B,MAAM,EAAE,iBAAiB,EAAE,YAAY,IAAI,CAAC,KAAK,cAAc,KAAK,IAAI;SACzE,CAAC;IACJ,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,uBAAuB,GAAwD,WAAW,CAAC;IACtG,EAAE,EAAE,yBAAyB;IAC7B,WAAW,EACT,wFAAwF;QACxF,yFAAyF;QACzF,uFAAuF;QACvF,uFAAuF;IACzF,QAAQ,EAAE,4DAA4D;IACtE,MAAM,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE;IAC5D,SAAS,EAAE,OAAO;IAClB,QAAQ,EAAE,GAAG,EAAE,CAAC,UAAU;IAC1B,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI;IACnB,0EAA0E;IAC1E,2CAA2C;IAC3C,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI;IACzB,QAAQ,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE;QACtC,MAAM,KAAK,GAAG,kBAAkB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QAClD,IAAI,SAAS,IAAI,KAAK;YAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;QACxE,2EAA2E;QAC3E,sEAAsE;QACtE,0EAA0E;QAC1E,4CAA4C;QAC5C,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC;YAChC,OAAO;gBACL,MAAM,EAAE,KAAK;gBACb,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,iBAAiB,EAAE,2DAA2D;aACvF,CAAC;QACJ,CAAC;QACD,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QACjE,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACvC,OAAO;YACL,MAAM;YACN,MAAM,EAAE,MAAM;gBACZ,CAAC,CAAC,iBAAiB,EAAE,UAAU,MAAM,SAAS;gBAC9C,CAAC,CAAC,iBAAiB,EAAE,iBAAiB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,MAAM,SAAS;SACzF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { Check } from "./check-kind.js";
2
+ export declare const noNewLabels: Check<{
3
+ repo: string;
4
+ }>;
5
+ export declare const fileExists: Check<{
6
+ path: string;
7
+ repo: string;
8
+ }>;
9
+ export declare const commitStatus: Check<{
10
+ context: string;
11
+ repo: string;
12
+ state: string;
13
+ }>;
@@ -0,0 +1,132 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ //
3
+ // What GitHub's declared checks can assert about a REPOSITORY (F-1075) —
4
+ // its label set, its files, and the statuses reported against its commits.
5
+ //
6
+ // Declarations only. The grammar rules they all obey are in `checks.ts`, which
7
+ // assembles them; how the exported tree is read is in `check-state.ts`.
8
+ import { defineCheck, repoRef, VACUITY_SENTINEL } from "@pome-sh/sdk/checks";
9
+ import { commitStatusState, filePath, statusContext } from "./check-params.js";
10
+ import { labelNames, resolveRepo } from "./check-state.js";
11
+ export const noNewLabels = defineCheck({
12
+ id: "github.no-new-labels",
13
+ // F-1074 — the same explanation the comment below carries, in the one place
14
+ // an author can actually reach it.
15
+ description: "Compares the repository's label DEFINITIONS in the seed against the final state. " +
16
+ "Applying an ALREADY-DEFINED label to an issue PASSES this check — only creating a " +
17
+ "label the repo did not already define fails it. `addIssueLabels` rejects an undefined " +
18
+ "label, so an examinee cannot apply a new one without creating it first, which is what " +
19
+ "makes this tight. Needs the seed: it is a delta, not a state assertion.",
20
+ // The repo is named on purpose. Without it the sentence reads as an
21
+ // issue-level claim — "the agent did not add labels to the issue" — which is
22
+ // WIDER than what this predicate compares. `create_label` is repo-scoped in
23
+ // GitHub's own vocabulary and `add_issue_labels` is the issue-scoped one, so
24
+ // naming the repo is what tells a reader which of the two is being asserted.
25
+ //
26
+ // An agent that applies an ALREADY-DEFINED label to an issue passes this
27
+ // check, correctly. The assertion that catches that is
28
+ // `Issue #N … has exactly one classification label`.
29
+ template: "No new labels were created in `{repo}`",
30
+ params: { repo: repoRef },
31
+ // The whole point: this is a delta, and it is unanswerable without the seed.
32
+ substrate: "seed+final",
33
+ // It should PASS on the untouched seed and can only be broken by the
34
+ // examinee acting.
35
+ polarity: () => "negative",
36
+ // Nothing here is a caller-supplied literal hunted for inside the state, so
37
+ // there is nothing a redactor could silently delete out from under it.
38
+ subject: () => null,
39
+ // The repo is a SELECTOR, not a scanned value. Falsifying it would move the
40
+ // verdict ("repo not found") for a reason that never reaches the assertion —
41
+ // a clean bill this check did not earn. Reported as `no_trigger`.
42
+ vacuityMutant: () => null,
43
+ evaluate({ repo }, { seed, final }) {
44
+ // The engine guards this before calling; the check guards too, so a
45
+ // consumer that forgets gets a named skip rather than a vacuous pass.
46
+ if (seed === null)
47
+ return { passed: false, reason: "seed_missing", status: "skipped" };
48
+ const seedRepo = resolveRepo(seed, repo, "the seed state");
49
+ if ("missing" in seedRepo)
50
+ return { passed: false, reason: seedRepo.missing };
51
+ const finalRepo = resolveRepo(final, repo, "state_final");
52
+ if ("missing" in finalRepo)
53
+ return { passed: false, reason: finalRepo.missing };
54
+ const before = labelNames(seedRepo.found);
55
+ const created = [...labelNames(finalRepo.found)].filter((name) => !before.has(name)).sort();
56
+ if (created.length === 0) {
57
+ return {
58
+ passed: true,
59
+ reason: `no labels were created in ${repo} (${before.size} defined at seed, unchanged at finish)`,
60
+ };
61
+ }
62
+ return {
63
+ passed: false,
64
+ reason: `labels created in ${repo}: ${created.map((name) => `\`${name}\``).join(", ")}`,
65
+ };
66
+ },
67
+ });
68
+ export const fileExists = defineCheck({
69
+ id: "github.file-exists",
70
+ description: "Asserts a file with this exact path exists in the repository on ANY branch — the twin " +
71
+ "exports files per branch and this check does not distinguish them, so a file committed " +
72
+ "only to a side branch satisfies it. The path is compared exactly and case-sensitively; " +
73
+ "it asserts nothing about the file's contents.",
74
+ template: "File `{path}` exists in `{repo}`",
75
+ params: { path: filePath, repo: repoRef },
76
+ substrate: "final",
77
+ polarity: () => "positive",
78
+ subject: ({ path }) => path,
79
+ // The path IS the scanned literal.
80
+ vacuityMutant: (args) => ({ ...args, path: `${VACUITY_SENTINEL}.txt` }),
81
+ evaluate({ path, repo }, { final }) {
82
+ const found = resolveRepo(final, repo, "state_final");
83
+ if ("missing" in found)
84
+ return { passed: false, reason: found.missing };
85
+ const files = found.found.files ?? [];
86
+ const passed = files.some((file) => file.path === path);
87
+ return {
88
+ passed,
89
+ reason: passed
90
+ ? `file exists at "${path}" in ${repo}`
91
+ : `no file found at "${path}" in ${repo} (${files.length} file(s) exported)`,
92
+ };
93
+ },
94
+ });
95
+ export const commitStatus = defineCheck({
96
+ id: "github.commit-status",
97
+ description: "Asserts at least one commit status reported under this context carries this state. It " +
98
+ "does not say WHICH commit: the twin exports every status row for the repo and this " +
99
+ "check scans them all, so a green status on an old commit satisfies it. Nor does it " +
100
+ "assert the status is the latest one for that context.",
101
+ template: 'Commit status "{context}" in `{repo}` is {state}',
102
+ params: { context: statusContext, repo: repoRef, state: commitStatusState },
103
+ substrate: "final",
104
+ polarity: () => "positive",
105
+ subject: ({ context }) => context,
106
+ // No falsifiable trigger, and this one is a DELIBERATE loss against the regex
107
+ // it replaces. The legacy rule mutated the state word, which worked only
108
+ // because `(\w+)` would accept an invented sentinel. Typing the state as a
109
+ // closed set is the right call — an author picks from four real values — but
110
+ // a closed set has no guaranteed-false member, so a mutant could assert a
111
+ // different state that happens to also be true and report a clean bill this
112
+ // check did not earn. Mutating the context instead would empty the candidate
113
+ // set and move the verdict without the state comparison ranging over
114
+ // anything, which is the same false clean bill one step earlier. `no_trigger`
115
+ // is the honest answer.
116
+ vacuityMutant: () => null,
117
+ evaluate({ context, repo, state }, { final }) {
118
+ const found = resolveRepo(final, repo, "state_final");
119
+ if ("missing" in found)
120
+ return { passed: false, reason: found.missing };
121
+ const candidates = (found.found.commit_statuses ?? []).filter((row) => row.context === context);
122
+ const passed = candidates.some((row) => (row.state ?? "").toLowerCase() === state);
123
+ return {
124
+ passed,
125
+ reason: passed
126
+ ? `commit status "${context}" is "${state}" in ${repo}`
127
+ : `no commit status "${context}" with state "${state}" in ${repo} ` +
128
+ `(found: [${candidates.map((row) => row.state).join(", ")}])`,
129
+ };
130
+ },
131
+ });
132
+ //# sourceMappingURL=check-repos.js.map