@1aboveio/skills 0.10.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 (397) hide show
  1. package/LICENSE +3 -0
  2. package/README.md +90 -0
  3. package/bin/1aboveio-skills.mjs +18 -0
  4. package/package.json +28 -0
  5. package/runtime/skills/distribution/generated/recipes.json +1189 -0
  6. package/runtime/skills/distribution/scripts/bundles.mjs +280 -0
  7. package/runtime/skills/engineering/engineering-runtime/scripts/main-module.mjs +80 -0
  8. package/skills/backend/airflow-dag-develop/LICENSE +3 -0
  9. package/skills/backend/airflow-dag-develop/SKILL.md +111 -0
  10. package/skills/backend/app-debug/LICENSE +3 -0
  11. package/skills/backend/app-debug/SKILL.md +109 -0
  12. package/skills/backend/app-debug/references/common-errors.md +128 -0
  13. package/skills/backend/python-backend/LICENSE +3 -0
  14. package/skills/backend/python-backend/SKILL.md +326 -0
  15. package/skills/cicd-pipeline/cloud-build/LICENSE +3 -0
  16. package/skills/cicd-pipeline/cloud-build/SKILL.md +707 -0
  17. package/skills/cicd-pipeline/cloud-debug/LICENSE +3 -0
  18. package/skills/cicd-pipeline/cloud-debug/SKILL.md +316 -0
  19. package/skills/cicd-pipeline/cloud-debug/references/build-failures.md +238 -0
  20. package/skills/cicd-pipeline/cloud-debug/references/deploy-failures.md +376 -0
  21. package/skills/cicd-pipeline/cloud-debug/references/pipeline-failures.md +378 -0
  22. package/skills/cicd-pipeline/cloud-deploy/LICENSE +3 -0
  23. package/skills/cicd-pipeline/cloud-deploy/SKILL.md +229 -0
  24. package/skills/cicd-pipeline/cloud-deploy/references/config-templates.md +257 -0
  25. package/skills/cicd-pipeline/docker/LICENSE +3 -0
  26. package/skills/cicd-pipeline/docker/SKILL.md +126 -0
  27. package/skills/cicd-pipeline/google-cloud/LICENSE +3 -0
  28. package/skills/cicd-pipeline/google-cloud/SKILL.md +118 -0
  29. package/skills/cicd-pipeline/google-cloud/references/gcs.md +469 -0
  30. package/skills/cicd-pipeline/google-cloud/references/iam.md +451 -0
  31. package/skills/cicd-pipeline/google-cloud/references/project.md +349 -0
  32. package/skills/cicd-pipeline/google-cloud/references/secrets.md +336 -0
  33. package/skills/cicd-pipeline/google-cloud/references/vpc.md +312 -0
  34. package/skills/cicd-pipeline/google-cloud/scripts/create-sa.sh +36 -0
  35. package/skills/cicd-pipeline/google-cloud/scripts/gcp-config.sh +31 -0
  36. package/skills/cicd-pipeline/google-cloud/scripts/grant-iap.sh +41 -0
  37. package/skills/cicd-pipeline/google-cloud/scripts/setup-secrets.sh +48 -0
  38. package/skills/cicd-pipeline/mergify/LICENSE +3 -0
  39. package/skills/cicd-pipeline/mergify/SKILL.md +138 -0
  40. package/skills/cicd-pipeline/mergify/assets/templates/mergify.yml +237 -0
  41. package/skills/cicd-pipeline/mergify/assets/templates/ruleset.json +46 -0
  42. package/skills/cicd-pipeline/mergify/references/branch-protection.md +277 -0
  43. package/skills/cicd-pipeline/mergify/references/configuration.md +183 -0
  44. package/skills/cicd-pipeline/mergify/references/diagnosis.md +73 -0
  45. package/skills/cicd-pipeline/mergify/references/traps.md +78 -0
  46. package/skills/cicd-pipeline/mergify/references/watch-contract.md +218 -0
  47. package/skills/cicd-pipeline/mergify/scripts/audit-core.mjs +131 -0
  48. package/skills/cicd-pipeline/mergify/scripts/audit.mjs +4 -0
  49. package/skills/cicd-pipeline/mergify/scripts/watch-pr-delivery-core.mjs +663 -0
  50. package/skills/cicd-pipeline/mergify/scripts/watch-pr-delivery.mjs +4 -0
  51. package/skills/cicd-pipeline/podman/LICENSE +3 -0
  52. package/skills/cicd-pipeline/podman/SKILL.md +70 -0
  53. package/skills/cicd-pipeline/podman/agents/openai.yaml +4 -0
  54. package/skills/cicd-pipeline/podman/assets/templates/podman-compose-socket-directory.yml +6 -0
  55. package/skills/cicd-pipeline/podman/assets/templates/podman-service-override.conf +3 -0
  56. package/skills/cicd-pipeline/podman/references/compose-compatibility.md +70 -0
  57. package/skills/cicd-pipeline/podman/references/networking-and-ports.md +74 -0
  58. package/skills/cicd-pipeline/podman/references/rootless-services-and-sockets.md +156 -0
  59. package/skills/cicd-pipeline/podman/references/troubleshooting.md +98 -0
  60. package/skills/engineering/e2e-test/LICENSE +3 -0
  61. package/skills/engineering/e2e-test/SKILL.md +156 -0
  62. package/skills/engineering/e2e-test/assets/ci-gates.cloudbuild.yaml +272 -0
  63. package/skills/engineering/e2e-test/assets/ci-gates.github.yml +451 -0
  64. package/skills/engineering/e2e-test/assets/e2e-workflow.yml +282 -0
  65. package/skills/engineering/e2e-test/references/authoring/auth-flows.md +159 -0
  66. package/skills/engineering/e2e-test/references/authoring/playwright-config.md +71 -0
  67. package/skills/engineering/e2e-test/references/authoring/playwright-patterns.md +219 -0
  68. package/skills/engineering/e2e-test/references/authoring/test-skipping.md +44 -0
  69. package/skills/engineering/e2e-test/references/ci-integration.md +121 -0
  70. package/skills/engineering/e2e-test/references/ci-playwright-container.md +280 -0
  71. package/skills/engineering/e2e-test/references/debugging.md +36 -0
  72. package/skills/engineering/e2e-test/references/presentation-sweep.md +131 -0
  73. package/skills/engineering/e2e-test/references/reviewing.md +39 -0
  74. package/skills/engineering/e2e-test/references/route-discovery.md +50 -0
  75. package/skills/engineering/e2e-test/references/route-manifest.md +44 -0
  76. package/skills/engineering/e2e-test/scripts/detect-routes-fastapi.py +290 -0
  77. package/skills/engineering/e2e-test/scripts/detect-routes-nextjs.mjs +200 -0
  78. package/skills/engineering/e2e-test/scripts/post-visual-evidence.mjs +158 -0
  79. package/skills/engineering/e2e-test/scripts/presentation-checks.mjs +171 -0
  80. package/skills/engineering/e2e-test/scripts/presentation-perceivability.mjs +179 -0
  81. package/skills/engineering/e2e-test/scripts/presentation-reachability.mjs +154 -0
  82. package/skills/engineering/e2e-test/scripts/presentation-render-health.mjs +141 -0
  83. package/skills/engineering/e2e-test/scripts/presentation-sweep.mjs +148 -0
  84. package/skills/engineering/e2e-test/scripts/presentation-temporal.mjs +127 -0
  85. package/skills/engineering/e2e-test/scripts/presentation-visual.mjs +84 -0
  86. package/skills/engineering/e2e-test/scripts/project-route-manifest.mjs +75 -0
  87. package/skills/engineering/e2e-test/scripts/validate-manifest.mjs +106 -0
  88. package/skills/engineering/engineering-runtime/LICENSE +3 -0
  89. package/skills/engineering/engineering-runtime/SKILL.md +10 -0
  90. package/skills/engineering/engineering-runtime/agents/openai.yaml +6 -0
  91. package/skills/engineering/engineering-runtime/coherence/workflow.json +553 -0
  92. package/skills/engineering/engineering-runtime/scripts/exact-head-artifact.mjs +131 -0
  93. package/skills/engineering/engineering-runtime/scripts/head-check-set.mjs +398 -0
  94. package/skills/engineering/engineering-runtime/scripts/main-module.mjs +80 -0
  95. package/skills/engineering/engineering-runtime/scripts/mergify-yaml.mjs +11 -0
  96. package/skills/engineering/engineering-runtime/scripts/package-lock.json +43 -0
  97. package/skills/engineering/engineering-runtime/scripts/package.json +10 -0
  98. package/skills/engineering/engineering-runtime/scripts/required-check-plan.mjs +223 -0
  99. package/skills/engineering/engineering-runtime/scripts/workflow-coherence.mjs +576 -0
  100. package/skills/engineering/engineering-runtime/scripts/workflow-policy.mjs +166 -0
  101. package/skills/engineering/ensure-coverage/LICENSE +3 -0
  102. package/skills/engineering/ensure-coverage/SKILL.md +136 -0
  103. package/skills/engineering/ensure-coverage/evals/evals.json +125 -0
  104. package/skills/engineering/ensure-coverage/references/breadth/coverage-ledger.md +91 -0
  105. package/skills/engineering/ensure-coverage/references/breadth/inventory-contract.md +83 -0
  106. package/skills/engineering/ensure-coverage/references/breadth/surface-baseline.md +44 -0
  107. package/skills/engineering/ensure-coverage/references/breadth/surface-discovery.md +16 -0
  108. package/skills/engineering/ensure-coverage/references/depth/characterization.md +68 -0
  109. package/skills/engineering/ensure-coverage/references/depth/coverage.config.example.json +25 -0
  110. package/skills/engineering/ensure-coverage/references/depth/grading.md +35 -0
  111. package/skills/engineering/ensure-coverage/references/depth/mock-policy.md +87 -0
  112. package/skills/engineering/ensure-coverage/references/depth/test-smells.md +23 -0
  113. package/skills/engineering/ensure-coverage/references/enforcement/ci-contract.md +164 -0
  114. package/skills/engineering/ensure-coverage/references/enforcement/hooks.md +85 -0
  115. package/skills/engineering/ensure-coverage/references/examples/coverage-ledger.md +109 -0
  116. package/skills/engineering/ensure-coverage/references/examples/refund-flow.md +33 -0
  117. package/skills/engineering/ensure-coverage/references/presentation/axis.md +78 -0
  118. package/skills/engineering/ensure-coverage/references/presentation/runner-contract.md +74 -0
  119. package/skills/engineering/ensure-coverage/references/process/audit-mode.md +33 -0
  120. package/skills/engineering/ensure-coverage/references/process/output-template.md +139 -0
  121. package/skills/engineering/ensure-coverage/references/process/review-contract-template.md +119 -0
  122. package/skills/engineering/ensure-coverage/references/process/scope-class.md +178 -0
  123. package/skills/engineering/ensure-coverage/references/process/test-strategy.md +55 -0
  124. package/skills/engineering/ensure-coverage/schemas/coverage-config.schema.json +45 -0
  125. package/skills/engineering/ensure-coverage/schemas/coverage-file.schema.json +93 -0
  126. package/skills/engineering/ensure-coverage/scripts/adapters/nextjs-inventory.mjs +178 -0
  127. package/skills/engineering/ensure-coverage/scripts/check-quarantine-expiry.mjs +101 -0
  128. package/skills/engineering/ensure-coverage/scripts/ci-audit.mjs +358 -0
  129. package/skills/engineering/ensure-coverage/scripts/coverage-checklist.mjs +494 -0
  130. package/skills/engineering/ensure-coverage/scripts/coverage-ledger.mjs +663 -0
  131. package/skills/engineering/ensure-coverage/scripts/design-parity.mjs +591 -0
  132. package/skills/engineering/ensure-coverage/scripts/evidence-block.mjs +367 -0
  133. package/skills/engineering/ensure-coverage/scripts/lint-tests.mjs +269 -0
  134. package/skills/engineering/ensure-coverage/scripts/mock-policy-config.mjs +176 -0
  135. package/skills/engineering/ensure-coverage/scripts/package-lock.json +76 -0
  136. package/skills/engineering/ensure-coverage/scripts/package.json +19 -0
  137. package/skills/engineering/ensure-coverage/scripts/scope-class.mjs +554 -0
  138. package/skills/engineering/harness-runtime/LICENSE +3 -0
  139. package/skills/engineering/harness-runtime/SKILL.md +18 -0
  140. package/skills/engineering/harness-runtime/agents/openai.yaml +6 -0
  141. package/skills/engineering/harness-runtime/bin/discover-models.mjs +4 -0
  142. package/skills/engineering/harness-runtime/bin/model-catalog.mjs +4 -0
  143. package/skills/engineering/harness-runtime/contracts.md +15 -0
  144. package/skills/engineering/harness-runtime/discover-models.mjs +392 -0
  145. package/skills/engineering/harness-runtime/fixtures/native-question-schemas.json +33 -0
  146. package/skills/engineering/harness-runtime/fixtures/question-responses.json +54 -0
  147. package/skills/engineering/harness-runtime/index.mjs +767 -0
  148. package/skills/engineering/harness-runtime/model-catalog.mjs +787 -0
  149. package/skills/engineering/harness-runtime/native-question-contracts.md +37 -0
  150. package/skills/engineering/harness-runtime/references/model-catalog-seed.json +159 -0
  151. package/skills/engineering/harness-runtime/references/model-catalog.md +57 -0
  152. package/skills/engineering/implement-and-pr/LICENSE +3 -0
  153. package/skills/engineering/implement-and-pr/SKILL.md +176 -0
  154. package/skills/engineering/implement-and-pr/references/ci-iteration.md +10 -0
  155. package/skills/engineering/implement-and-pr/references/closeout.md +27 -0
  156. package/skills/engineering/implement-and-pr/references/contract-complete-fix-rounds.md +34 -0
  157. package/skills/engineering/implement-and-pr/references/evidence-rules.md +39 -0
  158. package/skills/engineering/implement-and-pr/references/incremental-plan.md +16 -0
  159. package/skills/engineering/implement-and-pr/references/self-review.md +23 -0
  160. package/skills/engineering/implement-and-pr/references/tdd-mode.md +18 -0
  161. package/skills/engineering/resolve-issues/LICENSE +3 -0
  162. package/skills/engineering/resolve-issues/SKILL.md +167 -0
  163. package/skills/engineering/resolve-issues/generated/workflow-repair-policy.json +448 -0
  164. package/skills/engineering/resolve-issues/references/breaker.md +82 -0
  165. package/skills/engineering/resolve-issues/references/deliverables.md +27 -0
  166. package/skills/engineering/resolve-issues/references/delivery.md +108 -0
  167. package/skills/engineering/resolve-issues/references/evidence-lane.md +21 -0
  168. package/skills/engineering/resolve-issues/references/exact-head-ci.md +287 -0
  169. package/skills/engineering/resolve-issues/references/fan-out.md +33 -0
  170. package/skills/engineering/resolve-issues/references/finalization.md +68 -0
  171. package/skills/engineering/resolve-issues/references/guarantees.md +10 -0
  172. package/skills/engineering/resolve-issues/references/high-risk.md +29 -0
  173. package/skills/engineering/resolve-issues/references/incidents/848/README.md +156 -0
  174. package/skills/engineering/resolve-issues/references/intake.md +86 -0
  175. package/skills/engineering/resolve-issues/references/integration-gate.md +53 -0
  176. package/skills/engineering/resolve-issues/references/interference.md +87 -0
  177. package/skills/engineering/resolve-issues/references/loop.md +134 -0
  178. package/skills/engineering/resolve-issues/references/model-catalog.md +9 -0
  179. package/skills/engineering/resolve-issues/references/postmortem.md +27 -0
  180. package/skills/engineering/resolve-issues/references/pre-flight-model-slots.md +41 -0
  181. package/skills/engineering/resolve-issues/references/pre-flight-recording-and-checkout.md +48 -0
  182. package/skills/engineering/resolve-issues/references/pre-flight.md +41 -0
  183. package/skills/engineering/resolve-issues/references/regression-checklist.md +26 -0
  184. package/skills/engineering/resolve-issues/references/run-state.md +288 -0
  185. package/skills/engineering/resolve-issues/references/sandboxed-testing.md +48 -0
  186. package/skills/engineering/resolve-issues/references/spawn-contract.md +96 -0
  187. package/skills/engineering/resolve-issues/references/terminal-evidence-journal.md +40 -0
  188. package/skills/engineering/resolve-issues/references/why.md +653 -0
  189. package/skills/engineering/resolve-issues/schemas/fix-round.schema.json +49 -0
  190. package/skills/engineering/resolve-issues/scripts/combine-and-verify.mjs +721 -0
  191. package/skills/engineering/resolve-issues/scripts/component-candidate.mjs +962 -0
  192. package/skills/engineering/resolve-issues/scripts/contract-revision.mjs +220 -0
  193. package/skills/engineering/resolve-issues/scripts/detect-delivery-mode.mjs +420 -0
  194. package/skills/engineering/resolve-issues/scripts/detect-target-branch.mjs +256 -0
  195. package/skills/engineering/resolve-issues/scripts/detect-workspace-mode.mjs +168 -0
  196. package/skills/engineering/resolve-issues/scripts/discover-models.mjs +9 -0
  197. package/skills/engineering/resolve-issues/scripts/doctrine.mjs +62 -0
  198. package/skills/engineering/resolve-issues/scripts/evidence-lifecycle-contract.mjs +191 -0
  199. package/skills/engineering/resolve-issues/scripts/exact-head-ci.mjs +413 -0
  200. package/skills/engineering/resolve-issues/scripts/exact-head-github-provider.mjs +332 -0
  201. package/skills/engineering/resolve-issues/scripts/finalize.mjs +488 -0
  202. package/skills/engineering/resolve-issues/scripts/fix-rounds.mjs +3307 -0
  203. package/skills/engineering/resolve-issues/scripts/fixtures/evidence-lifecycle-circular-1001.json +16 -0
  204. package/skills/engineering/resolve-issues/scripts/fixtures/evidence-lifecycle-valid-sequencing.json +51 -0
  205. package/skills/engineering/resolve-issues/scripts/fixtures/fmm-express-830-component-candidate.json +17 -0
  206. package/skills/engineering/resolve-issues/scripts/fixtures/head-check-set-1081.json +166 -0
  207. package/skills/engineering/resolve-issues/scripts/gate-value-series.mjs +92 -0
  208. package/skills/engineering/resolve-issues/scripts/guide-index.mjs +73 -0
  209. package/skills/engineering/resolve-issues/scripts/head-check-set.mjs +159 -0
  210. package/skills/engineering/resolve-issues/scripts/interference.mjs +427 -0
  211. package/skills/engineering/resolve-issues/scripts/model-catalog.mjs +9 -0
  212. package/skills/engineering/resolve-issues/scripts/next-operations.mjs +419 -0
  213. package/skills/engineering/resolve-issues/scripts/postmortem.mjs +909 -0
  214. package/skills/engineering/resolve-issues/scripts/preflight-questions.mjs +322 -0
  215. package/skills/engineering/resolve-issues/scripts/reconcile-contained-unit-prs.mjs +415 -0
  216. package/skills/engineering/resolve-issues/scripts/release-state-contract.mjs +697 -0
  217. package/skills/engineering/resolve-issues/scripts/report.mjs +494 -0
  218. package/skills/engineering/resolve-issues/scripts/required-check-plan.mjs +172 -0
  219. package/skills/engineering/resolve-issues/scripts/round-metadata.mjs +79 -0
  220. package/skills/engineering/resolve-issues/scripts/run-state-review6-cases.mjs +334 -0
  221. package/skills/engineering/resolve-issues/scripts/run-state.mjs +4784 -0
  222. package/skills/engineering/resolve-issues/scripts/sandbox-selftest.mjs +395 -0
  223. package/skills/engineering/resolve-issues/scripts/spawn-contract.mjs +290 -0
  224. package/skills/engineering/resolve-issues/scripts/terminal-dispositions.mjs +170 -0
  225. package/skills/engineering/resolve-issues/scripts/terminal-evidence-journal.mjs +293 -0
  226. package/skills/engineering/resolve-issues/scripts/unit-kind.mjs +197 -0
  227. package/skills/engineering/resolve-issues/scripts/unit-lifecycle.mjs +127 -0
  228. package/skills/engineering/resolve-issues/scripts/watch-delivery.mjs +893 -0
  229. package/skills/engineering/resolve-issues/scripts/workspaces.mjs +829 -0
  230. package/skills/engineering/resolve-issues/workflows/independent-review.workflow.js +290 -0
  231. package/skills/engineering/resolve-issues/workflows/prior-art-scan.workflow.js +80 -0
  232. package/skills/engineering/resolve-issues/workflows/workflow-smoke.mjs +102 -0
  233. package/skills/engineering/resolve-release/LICENSE +3 -0
  234. package/skills/engineering/resolve-release/SKILL.md +112 -0
  235. package/skills/engineering/resolve-release/references/assembly.md +137 -0
  236. package/skills/engineering/resolve-release/references/auto-when-green.md +56 -0
  237. package/skills/engineering/resolve-release/references/candidate.md +167 -0
  238. package/skills/engineering/resolve-release/references/exposure.md +178 -0
  239. package/skills/engineering/resolve-release/references/handoff.md +24 -0
  240. package/skills/engineering/resolve-release/references/postmortem.md +230 -0
  241. package/skills/engineering/resolve-release/references/preflight.md +207 -0
  242. package/skills/engineering/resolve-release/references/principles.md +94 -0
  243. package/skills/engineering/resolve-release/references/regression-checklist.md +36 -0
  244. package/skills/engineering/resolve-release/references/related-skills.md +12 -0
  245. package/skills/engineering/resolve-release/references/routing.md +149 -0
  246. package/skills/engineering/resolve-release/references/verified-sha-github-flow.md +285 -0
  247. package/skills/engineering/resolve-release/references/versioning.md +202 -0
  248. package/skills/engineering/resolve-release/references/why.md +53 -0
  249. package/skills/engineering/resolve-release/scripts/adapter-completion-artifact.mjs +389 -0
  250. package/skills/engineering/resolve-release/scripts/build-changes.mjs +209 -0
  251. package/skills/engineering/resolve-release/scripts/candidate-hygiene.mjs +407 -0
  252. package/skills/engineering/resolve-release/scripts/candidate-identity.mjs +904 -0
  253. package/skills/engineering/resolve-release/scripts/candidate-traffic.mjs +81 -0
  254. package/skills/engineering/resolve-release/scripts/checked-adapter-loader.mjs +612 -0
  255. package/skills/engineering/resolve-release/scripts/close-attempt.mjs +135 -0
  256. package/skills/engineering/resolve-release/scripts/closeout-release.mjs +161 -0
  257. package/skills/engineering/resolve-release/scripts/doctrine.mjs +106 -0
  258. package/skills/engineering/resolve-release/scripts/durable-processing.mjs +522 -0
  259. package/skills/engineering/resolve-release/scripts/ensure-target-green.mjs +659 -0
  260. package/skills/engineering/resolve-release/scripts/evidence-bundle.mjs +1014 -0
  261. package/skills/engineering/resolve-release/scripts/finalize-release.mjs +526 -0
  262. package/skills/engineering/resolve-release/scripts/fixtures/durable-processing-adapter.mjs +169 -0
  263. package/skills/engineering/resolve-release/scripts/green-gate.mjs +599 -0
  264. package/skills/engineering/resolve-release/scripts/isolated-adapter-evaluator.mjs +752 -0
  265. package/skills/engineering/resolve-release/scripts/metadata-pr-status.mjs +56 -0
  266. package/skills/engineering/resolve-release/scripts/metadata-sync.mjs +1538 -0
  267. package/skills/engineering/resolve-release/scripts/postmortem.mjs +381 -0
  268. package/skills/engineering/resolve-release/scripts/preflight-probes.mjs +498 -0
  269. package/skills/engineering/resolve-release/scripts/production-endpoints.mjs +326 -0
  270. package/skills/engineering/resolve-release/scripts/rc-circuit-breaker.mjs +272 -0
  271. package/skills/engineering/resolve-release/scripts/report.mjs +417 -0
  272. package/skills/engineering/resolve-release/scripts/reprobe-credentials.mjs +114 -0
  273. package/skills/engineering/resolve-release/scripts/revalidate-candidate.mjs +238 -0
  274. package/skills/engineering/resolve-release/scripts/review-packet.mjs +503 -0
  275. package/skills/engineering/resolve-release/scripts/rollback-floor.mjs +263 -0
  276. package/skills/engineering/resolve-release/scripts/version-assert.mjs +339 -0
  277. package/skills/engineering/resolve-release/scripts/version-postmortem.mjs +485 -0
  278. package/skills/engineering/resolve-release/scripts/version.mjs +1199 -0
  279. package/skills/engineering/resolve-release/scripts/watch-candidate-delivery.mjs +449 -0
  280. package/skills/engineering/resolve-release/vendor/ACORN-LICENSE +21 -0
  281. package/skills/engineering/resolve-release/vendor/README.md +60 -0
  282. package/skills/engineering/resolve-release/vendor/acorn.mjs +6233 -0
  283. package/skills/engineering/resolve-release/vendor/quickjs/core/LICENSE +21 -0
  284. package/skills/engineering/resolve-release/vendor/quickjs/core/README.md +341 -0
  285. package/skills/engineering/resolve-release/vendor/quickjs/core/README.template.md +70 -0
  286. package/skills/engineering/resolve-release/vendor/quickjs/core/dist/chunk-TAV5CUKK.mjs +2 -0
  287. package/skills/engineering/resolve-release/vendor/quickjs/core/dist/chunk-TAV5CUKK.mjs.map +1 -0
  288. package/skills/engineering/resolve-release/vendor/quickjs/core/dist/chunk-V2S4ZYJR.mjs +7 -0
  289. package/skills/engineering/resolve-release/vendor/quickjs/core/dist/chunk-V2S4ZYJR.mjs.map +1 -0
  290. package/skills/engineering/resolve-release/vendor/quickjs/core/dist/index.d.mts +2033 -0
  291. package/skills/engineering/resolve-release/vendor/quickjs/core/dist/index.d.ts +2033 -0
  292. package/skills/engineering/resolve-release/vendor/quickjs/core/dist/index.js +7 -0
  293. package/skills/engineering/resolve-release/vendor/quickjs/core/dist/index.js.map +1 -0
  294. package/skills/engineering/resolve-release/vendor/quickjs/core/dist/index.mjs +2 -0
  295. package/skills/engineering/resolve-release/vendor/quickjs/core/dist/index.mjs.map +1 -0
  296. package/skills/engineering/resolve-release/vendor/quickjs/core/dist/module-ES6BEMUI.mjs +2 -0
  297. package/skills/engineering/resolve-release/vendor/quickjs/core/dist/module-ES6BEMUI.mjs.map +1 -0
  298. package/skills/engineering/resolve-release/vendor/quickjs/core/dist/module-asyncify-2EFITU5U.mjs +2 -0
  299. package/skills/engineering/resolve-release/vendor/quickjs/core/dist/module-asyncify-2EFITU5U.mjs.map +1 -0
  300. package/skills/engineering/resolve-release/vendor/quickjs/core/package.json +49 -0
  301. package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/LICENSE +21 -0
  302. package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/README.md +5 -0
  303. package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/dist/index.d.mts +549 -0
  304. package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/dist/index.d.ts +549 -0
  305. package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/dist/index.js +2 -0
  306. package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/dist/index.js.map +1 -0
  307. package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/dist/index.mjs +2 -0
  308. package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/dist/index.mjs.map +1 -0
  309. package/skills/engineering/resolve-release/vendor/quickjs/ffi-types/package.json +36 -0
  310. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/LICENSE +47 -0
  311. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/README.md +82 -0
  312. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.browser.d.ts +11 -0
  313. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.browser.mjs +22 -0
  314. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.cjs +21 -0
  315. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.cloudflare.cjs +21 -0
  316. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.cloudflare.d.ts +11 -0
  317. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.d.ts +11 -0
  318. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.mjs +25 -0
  319. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/emscripten-module.wasm +0 -0
  320. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/ffi.d.mts +85 -0
  321. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/ffi.d.ts +85 -0
  322. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/ffi.js +2 -0
  323. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/ffi.js.map +1 -0
  324. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/ffi.mjs +2 -0
  325. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/ffi.mjs.map +1 -0
  326. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/index.d.mts +20 -0
  327. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/index.d.ts +20 -0
  328. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/index.js +2 -0
  329. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/index.js.map +1 -0
  330. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/index.mjs +2 -0
  331. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/dist/index.mjs.map +1 -0
  332. package/skills/engineering/resolve-release/vendor/quickjs/release-sync/package.json +61 -0
  333. package/skills/engineering/review-pr/LICENSE +3 -0
  334. package/skills/engineering/review-pr/SKILL.md +123 -0
  335. package/skills/engineering/review-pr/references/adversarial-reviewer-prompt.md +42 -0
  336. package/skills/engineering/review-pr/references/code-correctness.md +5 -0
  337. package/skills/engineering/review-pr/references/contract-freshness.md +9 -0
  338. package/skills/engineering/review-pr/references/coordination.md +18 -0
  339. package/skills/engineering/review-pr/references/domain-hazards.md +123 -0
  340. package/skills/engineering/review-pr/references/finding-themes.md +7 -0
  341. package/skills/engineering/review-pr/references/github-posting.md +98 -0
  342. package/skills/engineering/review-pr/references/golden-path-smoke.md +5 -0
  343. package/skills/engineering/review-pr/references/incremental-output.md +16 -0
  344. package/skills/engineering/review-pr/references/inputs-and-discovery.md +31 -0
  345. package/skills/engineering/review-pr/references/output-format.md +99 -0
  346. package/skills/engineering/review-pr/references/over-mock-screen.md +7 -0
  347. package/skills/engineering/review-pr/references/promotion-prs.md +16 -0
  348. package/skills/engineering/review-pr/references/re-review.md +18 -0
  349. package/skills/engineering/review-pr/references/review-method.md +199 -0
  350. package/skills/engineering/review-pr/references/review-mode.md +30 -0
  351. package/skills/engineering/review-pr/references/review-posture.md +53 -0
  352. package/skills/engineering/review-pr/references/round1-depth.md +62 -0
  353. package/skills/engineering/review-pr/references/scripts.md +17 -0
  354. package/skills/engineering/review-pr/references/workflow.md +16 -0
  355. package/skills/engineering/review-pr/schemas/findings.schema.json +282 -0
  356. package/skills/engineering/review-pr/scripts/finding-contract.mjs +285 -0
  357. package/skills/engineering/review-pr/scripts/post-review.mjs +405 -0
  358. package/skills/engineering/review-pr/scripts/pr-context.mjs +207 -0
  359. package/skills/engineering/review-pr/scripts/scan-diff.mjs +365 -0
  360. package/skills/engineering/review-pr/scripts/theme-contract.mjs +57 -0
  361. package/skills/engineering/smoke/LICENSE +3 -0
  362. package/skills/engineering/smoke/SKILL.md +131 -0
  363. package/skills/engineering/smoke/assets/smoke.manifest.example.json +53 -0
  364. package/skills/engineering/smoke/references/manifest.md +192 -0
  365. package/skills/engineering/smoke/scripts/smoke.mjs +713 -0
  366. package/skills/fullstack/better-auth/LICENSE +3 -0
  367. package/skills/fullstack/better-auth/SKILL.md +601 -0
  368. package/skills/fullstack/better-auth/references/feishu-api.md +270 -0
  369. package/skills/fullstack/monorepo/LICENSE +3 -0
  370. package/skills/fullstack/monorepo/SKILL.md +465 -0
  371. package/skills/fullstack/nextjs-fullstack/LICENSE +3 -0
  372. package/skills/fullstack/nextjs-fullstack/SKILL.md +210 -0
  373. package/skills/fullstack/nextjs-fullstack/conventions.md +318 -0
  374. package/skills/fullstack/nextjs-fullstack/frontend-conventions.md +61 -0
  375. package/skills/fullstack/nextjs-fullstack/nextjs16.md +287 -0
  376. package/skills/fullstack/nextjs-fullstack/server-actions.md +409 -0
  377. package/skills/fullstack/prisma-setup/LICENSE +3 -0
  378. package/skills/fullstack/prisma-setup/SKILL.md +180 -0
  379. package/skills/fullstack/prisma-setup/nextjs.md +258 -0
  380. package/skills/fullstack/prisma-setup/turborepo.md +301 -0
  381. package/skills/fullstack/shadcn/LICENSE +3 -0
  382. package/skills/fullstack/shadcn/SKILL.md +119 -0
  383. package/skills/fullstack/shadcn/assets/shadcn-small.png +0 -0
  384. package/skills/fullstack/shadcn/assets/shadcn.png +0 -0
  385. package/skills/fullstack/shadcn/cli.md +411 -0
  386. package/skills/fullstack/shadcn/customization.md +224 -0
  387. package/skills/fullstack/shadcn/evals/evals.json +90 -0
  388. package/skills/fullstack/shadcn/mcp.md +101 -0
  389. package/skills/fullstack/shadcn/rules/base-vs-radix.md +323 -0
  390. package/skills/fullstack/shadcn/rules/component-selection.md +67 -0
  391. package/skills/fullstack/shadcn/rules/composition.md +195 -0
  392. package/skills/fullstack/shadcn/rules/data-table.md +201 -0
  393. package/skills/fullstack/shadcn/rules/forms.md +255 -0
  394. package/skills/fullstack/shadcn/rules/icons.md +103 -0
  395. package/skills/fullstack/shadcn/rules/styling.md +167 -0
  396. package/skills/fullstack/zod-v4/LICENSE +3 -0
  397. package/skills/fullstack/zod-v4/SKILL.md +287 -0
@@ -0,0 +1,119 @@
1
+ # Review Contract Template (canonical)
2
+
3
+ The single source of truth for the Review Contract — the PR-handoff artifact. `implement-and-pr` produces it; `review-pr` verifies against it. Keep this file canonical; both skills point here so the schema cannot drift. Producer-only fields (TDD Mode, RED/GREEN, Local Commands) are optional for non-TDD work; a reviewer treats them as evidence, not required structure.
4
+
5
+ ```markdown
6
+ ## Review Contract
7
+
8
+ Source Work Item: <GitHub issue / PRD / design doc / spec / bug brief ID or link>
9
+ Test Criteria: </docs/tests/YYYY-MM-DD-... link OR "Not required" + reason>
10
+ TDD Mode: <Applied / Not applied + reason>
11
+ Scope Class: <surface-bearing | no-surface + the matched classes — from `scope-class.mjs classify`, NOT self-declared. On `no-surface`, list each matched class's declared ORACLE and its result (or the declared unproven reason); a matched class with no oracle is a blocking finding, not a waiver. See scope-class.md.>
12
+ Implementation Model: <model id the diff was actually written on (spawn read-back), + harness when ambiguous — e.g. "gpt-5.6-terra (codex)" / "sonnet-5 (claude code)". The durable record that makes cross-run model/harness comparison possible; under resolve-issues a contract missing it bounces at the pre-spawn check.>
13
+
14
+ Invariant Class Closed (every fix round; omit on a first-round PR):
15
+ - <per finding: the rule closed — not the cited line — plus the adjacent members (paths / fields / states / interleavings under that same rule) checked, with locators. One line each; "class = this call site, no siblings exist" is a complete answer where the rule genuinely covers one instance. The re-review reconciles against this and marks an instance-only repair `Partially resolved`.>
16
+
17
+ Fix-Round Contract (high-risk state-machine/concurrency fix rounds only — resolve-issues/references/high-risk.md; omit the section otherwise):
18
+ - Finding theme: <stable theme.id + kind + general violated contract>
19
+ - State-machine/concurrency matrix: <every declared state × child/task-kind cell → test locator + execution-evidence locator>
20
+ - Adjacent-state self-review: <one `{ state, evidenceLocator }` entry for every declared state>
21
+ - Durable run record: <the matrix returned to the orchestrator under `fixRound`, and where it banked it — optional mechanization, when the run opted into the deep-audit layer. The producer returns it; it never writes the manifest itself.>
22
+
23
+ Round-1 Depth Obligations (high-risk units only — resolve-issues/references/high-risk.md; omit the section otherwise):
24
+ - Live endpoint probing: <completed + command/result evidence, or not-applicable + specific reason/evidence; never deferred>
25
+ - Shared-consumer impact: <completed + consumer/evidence locators, or not-applicable + specific reason/evidence; never deferred>
26
+
27
+ Acceptance Criteria Covered:
28
+ - AC1: <summary> → <test file/test name/evidence>
29
+ - AC2: <summary> → <test file/test name/evidence>
30
+
31
+ Test Evidence:
32
+ - CI: <workflow/link/result, pending, or blocker>
33
+ - Tests Added/Updated: <files/test names>
34
+ - Local Commands: <command + pass/fail summary>
35
+ - RED/GREEN Evidence: <for TDD mode: failing test command/result then passing command/result per slice, or summary with logs; otherwise Not applicable>
36
+ - Manual Evidence: <screenshots/logs/traces, if applicable>
37
+
38
+ Obligation Impact (per ensure-coverage; omit only if no surfaces changed):
39
+ - Surfaces added/changed: <surface id + kind/class>
40
+ - Baseline/required level + proving test: <surface → @covers test file::name @level>
41
+ - Coverage gate: <coverage-ledger.mjs validate result, or repo wrapper>
42
+ - Presentation sweep: <e2e-test presentation-sweep result for changed browser routes, or N/A>
43
+ - Exclusions/mock exceptions: <None / category+reason, gated>
44
+
45
+ Mock/Fake Policy:
46
+ - <where mocks/fakes are used and why they are sufficient>
47
+ - <where integration coverage is used and what real components are exercised>
48
+
49
+ Known Gaps:
50
+ - None / <gap + explicit approval reference>
51
+
52
+ Reviewer Focus:
53
+ - <specific risks, edge cases, integration points, or ACs that need attention>
54
+ ```
55
+
56
+ ## A `no-surface` unit's inapplicable rows
57
+
58
+ When `scope-class.mjs classify` returns `no-surface`, the rows below are recorded
59
+ `Not applicable` **with the reason the classifier derived** — never generated first and
60
+ marked N/A afterwards. Take them verbatim from `inapplicableArtifacts()` (the CLI's
61
+ `inapplicable` field) so the reason names the matched classes rather than being retyped:
62
+
63
+ - `coverage-checklist.mjs generate` / `validate` — no surface rows to fill
64
+ - `coverage-ledger.mjs validate` — nothing enters the surface inventory
65
+ - e2e route manifest + presentation sweep
66
+ - TDD mode + the create-mode test-criteria gate
67
+
68
+ What stays, on every class, and is never routed through the scope class: `scan-diff`'s
69
+ findings channel (zero-tolerance), CI green on the exact head, the independent review on
70
+ a different model (same spawn, same diversity rule, same verdict bar), and delivery
71
+ recording. **`no-surface` ≠ low-risk** — merge/CI/deploy/IAM paths are config-only *and*
72
+ set `highRisk: true`. Doctrine: [scope-class.md](scope-class.md).
73
+
74
+ ## What counts as valid AC evidence
75
+
76
+ An `AC → test` line attests that the test **runs and asserts the behavior**. It is *not* PASS when backed by:
77
+
78
+ - a **skipped** proving test (`test.skip(...)`), or one **guarded** into a no-op (`if (!data) test.skip()` / `if (!x) return`);
79
+ - an assertion that passes on a **degraded page** (404 / not-found / empty / error) when the AC promises a real rendered result;
80
+ - **CI being green** where that green came from skipping, guarding, or weakening assertions rather than fixing the cause.
81
+
82
+ Tests are **never skipped** to clear an AC ([test-strategy.md](test-strategy.md); `e2e-test` → `references/authoring/test-skipping.md`). A missing precondition (no `payment_live` merchant, no session, an unapplied migration, an off flag) is **seedable** — seed it and let the test run; an un-sandboxable/flaky case goes to the quarantine lane (runs, non-blocking, `Unverified`). A disabled-test AC is `Missing`/`Unverified`, never PASS, and a `TODO`/issue link does not upgrade it.
83
+
84
+ ## Coverage Checklist (method-tagged; every row = decision + evidence)
85
+
86
+ The AC table proves *the specified* behaviour. This checklist proves the **three coverage axes** (breadth / depth / presentation) — including surfaces no AC mentions. One rule for machine and model alike: **no row resolves without a decision (PASS / FAIL / N/A) backed by a checkable evidence locator** — a `file:line`, a rerunnable `` `command` ``, or a #issue. Prose ("looks fine") is not evidence. This stops both failure modes: an implementer can't bank "CI is green" for the judgment rows, and a reviewer can't wave a row through.
87
+
88
+ Each row carries a **Method**, fixed by doctrine (the catalog in `ensure-coverage/scripts/coverage-checklist.mjs`), **not chosen per-PR**:
89
+
90
+ - **gate-lint** — a tool decides and blocks; evidence = its command/output. **Auto-filled.**
91
+ - **lead** — a tool surfaces candidates; you adjudicate each; evidence = the lead + verdict + `file:line`.
92
+ - **judgment** — you reason from code; evidence = `file:line` + argument.
93
+
94
+ **Produce it** with the assembler (gate rows come back filled with decision + evidence; lead/judgment rows come back as a skeleton to complete):
95
+
96
+ ```bash
97
+ node <ensure-coverage>/scripts/coverage-checklist.mjs generate \
98
+ --diff <base> --ci <ci files> --ledger \
99
+ --sweep <presentation-results.json> --smoke <runtime-smoke-results.json> # paste output below
100
+ ```
101
+
102
+ Then complete every lead/judgment row with its locator. **Verify** before handoff and in review — the anti-ritual guard fails any PASS/FAIL row with no locator, any gate row left `TODO`, any cited `file:line` that does not **resolve** in the tree, and any gate row citing its command without the gate's result:
103
+
104
+ ```bash
105
+ node <ensure-coverage>/scripts/coverage-checklist.mjs validate <this-checklist>.md --diff <merge-base>
106
+ ```
107
+
108
+ **Pass `--diff`.** It is what makes a *missing* file decidable: paths this PR deletes are exempt (citing the over-mocked test you removed is true evidence that resolves to nothing on purpose), and without the diff the guard cannot tell that from a stale locator, so it warns instead of blocking. Locators sitting entirely outside the net diff are warned as possible pre-rebase leftovers. A line past the end of an existing file blocks either way — no deletion explains that. `--no-resolve` turns resolution off entirely, for a caller with no tree to resolve against.
109
+
110
+ The rows and their methods are the single source of truth in the script; don't restate the full catalog here (it would drift). Paste the generated table; a completed row looks like:
111
+
112
+ ```markdown
113
+ ### Depth
114
+ | Check | Method | Decision | Evidence |
115
+ |---|---|---|---|
116
+ | No test skipped/focused/xfail added | gate-lint | PASS | `lint-tests.mjs --rules no-skip --diff dev` → 0 findings |
117
+ | Assertions are behavior-first; none pass on a 404/empty/error page | judgment | PASS | real checkout form asserted at `e2e/checkout.spec.ts:88` |
118
+ | First-party interception is justified, not counted as coverage | lead | FAIL | intercepts `**/api/**` at `e2e/journeys/checkout.spec.ts:30` — re-point at seeded path |
119
+ ```
@@ -0,0 +1,178 @@
1
+ # Scope class — which evidence artifacts apply to this unit
2
+
3
+ Read this when a unit's whole diff is CI/policy config, docs, lockfiles or generated
4
+ files, and the coverage artifacts have nothing to say about it. The mechanism is
5
+ `scripts/scope-class.mjs`; this file is the doctrine it enforces.
6
+
7
+ ## The axis, and the axis it is NOT
8
+
9
+ | axis | decides |
10
+ |---|---|
11
+ | `highRisk` (existing) | how deep the **review** goes |
12
+ | `scopeClass` (this) | which coverage/evidence **artifacts** apply |
13
+
14
+ They are orthogonal, and keeping them apart is the whole point. `.mergify.yml`, CI
15
+ workflows, Dockerfile base images, IAM bindings and feature-flag defaults are all
16
+ config-only *and* commonly high-risk. **`no-surface` ≠ low-risk.**
17
+
18
+ Diff size is not blast radius. The incident this exists for
19
+ (a consumer product repo, PR #1065) was a 12-line diff that removed
20
+ `merge_protections_settings.auto_merge_conditions` — it changed who may merge to
21
+ `main`. A rule of the form "config-only ⇒ lighter review" fires hardest exactly where
22
+ it is most wrong. So the cut is never on review depth; it is on *which evidence
23
+ artifacts are applicable*, which is a different question.
24
+
25
+ The reviewer's own line from that PR, and the only artifact in the run that cost work
26
+ and said nothing:
27
+
28
+ > The generic coverage checklist was generated for the policy-only diff but is not
29
+ > fully applicable without a dedicated checklist artifact.
30
+
31
+ Everything else in that run was load-bearing: `mergify config validate`,
32
+ `config simulate` against a live PR, the focused policy suite, `scan-diff` = 0 leads /
33
+ 0 findings.
34
+
35
+ ## Inferred from the diff, deny-by-default
36
+
37
+ Not human-declared, and not at intake — there is no diff at intake. Classification
38
+ runs at **producer close-out**, which already computes `merge-base...HEAD` for the
39
+ evidence block.
40
+
41
+ A unit is `no-surface` only if **every** path in the net diff matches an explicit
42
+ non-runtime pattern. **One unmatched path ⇒ `surface-bearing`, full gates.** This
43
+ fails in the cheap direction on purpose: misclassifying config as surface-bearing
44
+ costs one useless checklist; misclassifying source as `no-surface` silently drops the
45
+ breadth and depth gates. Everything ambiguous fails toward `surface-bearing` — an
46
+ empty diff, a non-list input, a malformed config.
47
+
48
+ **The corollary deny-by-default depends on: no changed path may reach the classifier
49
+ in a form that hides what it is.** Every side of every change is a changed path, and
50
+ anything the parser cannot take at face value fails toward `surface-bearing`.
51
+ Deny-by-default is only as strong as the path list it is handed — a path the list never
52
+ contains cannot be denied, and the classification then reads as clean. The instance
53
+ that earned the rule: `git mv src/lib/auth.ts docs/auth-notes.md` classified
54
+ `no-surface`, because only the post-image survived, so a diff that **deleted a runtime
55
+ source file** looked like a docs edit. So the classifier emits **both sides** of every
56
+ diff entry (rename and copy pre-images included), runs `git diff --name-only` with
57
+ `--no-renames` so detection cannot collapse the pair one layer up, and refuses to glob
58
+ a path it cannot read literally — a `..` segment (`docs/../src/app.ts` matches `docs/**`
59
+ as a string and means `src/app.ts` as a file) or an unsplittable `diff --git` header
60
+ lands in `unmatched` rather than being dropped or matched. Hazard row:
61
+ `rename-preimage-escapes-path-classifiers`.
62
+
63
+ **Test files do not break the classification.** PR #1065 touched
64
+ `mergify-policy.test.ts` and must still classify `no-surface`. The guard against
65
+ "weakened the test so the config passes" is not this table — it is `scan-diff`'s
66
+ findings channel, which stays zero-tolerance for **every** class.
67
+
68
+ The result lands on the run manifest as `units[].scopeClass` so `resolve-issues` step 2's
69
+ pre-spawn check knows an absent checklist is legitimate rather than missing. **The
70
+ producer does not write it** — it **returns** the classifier's JSON payload in its
71
+ result and the orchestrator records it, because the orchestrator is the manifest's only
72
+ writer (ADR 0001 decision 5 (`docs/adr/0001-interference-is-the-scheduling-primitive.md`)).
73
+ **The manifest is the authority, never the producer's say-so** — without the recorded
74
+ field, a `no-surface` unit would bounce to step 3 forever, waiting on a checklist that
75
+ will never be generated.
76
+
77
+ ## One config table, two jobs
78
+
79
+ The patterns and their oracles live together, because both are repo-specific and they
80
+ answer one question: *this artifact is inapplicable — so what proves the change
81
+ instead?*
82
+
83
+ Built-in default set (print the resolved table with `scope-class.mjs table`):
84
+
85
+ | class | patterns (abridged) | oracle | high-risk |
86
+ |---|---|---|---|
87
+ | `merge-policy` | `.mergify.yml`, `CODEOWNERS`, branch-protection config | `mergify config validate` + `config simulate` against a live PR | yes |
88
+ | `ci-workflows` | `.github/workflows/**`, `.github/actions/**` | `actionlint` | yes |
89
+ | `deploy-config` | `cloudbuild*.yaml`, `skaffold*.yaml`, `k8s/**`, `Dockerfile` | render/build without deploying (`skaffold render`, `kustomize build`, `docker build --check`) | yes |
90
+ | `iam-policy` | `iam/**`, `*.iam.yaml`, `*.rego` | policy evaluation against the intended principals (`opa test`, `gcloud policy-troubleshoot`) | yes |
91
+ | `docs` | `docs/**`, `*.md`, `*.mdx` | **none — declared**, so the reviewer knows it is unproven by design | no |
92
+ | `lockfiles` | `package-lock.json`, `uv.lock`, `Cargo.lock`, … | install determinism: re-run the installer, then `git diff --exit-code` | no |
93
+ | `generated` | `**/generated/**`, `*.generated.*`, `*.snap` | regen determinism: re-run the generator, then `git diff --exit-code` | no |
94
+ | `tests` | `*.test.*`, `*.spec.*`, `tests/**`, `e2e/**` | run the changed test suite and paste its output | no |
95
+
96
+ Tune it per repo in `coverage.config.json` → `scopeClass`:
97
+
98
+ ```json
99
+ {
100
+ "scopeClass": {
101
+ "extraClasses": [
102
+ { "id": "terraform", "patterns": ["infra/**/*.tf"], "oracle": "`terraform plan` against the target workspace", "highRisk": true }
103
+ ]
104
+ }
105
+ }
106
+ ```
107
+
108
+ - `extraClasses` is **additive and checked first**, so a repo's own declaration wins
109
+ over an overlapping built-in guess.
110
+ - `classes` **replaces** the table wholesale, for a repo that wants full control.
111
+ - A malformed config falls back to the built-in defaults — a broken config must never
112
+ *widen* `no-surface`.
113
+
114
+ ### The oracle is a requirement, not a waiver
115
+
116
+ **A matched class with no declared oracle is not a pass — it is the finding**
117
+ (`oracle-undeclared`, blocking; the CLI exits 1). Write an oracle, or declare the
118
+ class unproven-by-design (`"oracle": null` plus an `unprovenReason`), which forces the
119
+ Review Contract to *say* the change is unproven rather than implying a gate covered
120
+ it. An empty-string oracle is undeclared; a blank waiver is not a declaration.
121
+
122
+ The oracle requirement is scoped to the `no-surface` lane. A surface-bearing unit
123
+ already owes the full breadth/depth gates, so raising an oracle finding there would
124
+ bill twice for the same obligation.
125
+
126
+ ## What `no-surface` drops
127
+
128
+ Recorded `Not applicable` **with a reason derived from the scope class**, never
129
+ generated-then-marked-N/A. `inapplicableArtifacts()` returns exactly these rows:
130
+
131
+ - `coverage-checklist.mjs generate` / `validate` — no surface rows to fill
132
+ - `coverage-ledger.mjs validate` — nothing enters the surface inventory
133
+ - e2e route manifest + presentation sweep
134
+ - TDD mode + the create-mode test-criteria gate
135
+
136
+ **Smoke keeps the existing path**, it is not skipped: `gates.smoke = 'not-applicable'`
137
+ plus a `smokeNotApplicableReason` (a reasoned N/A reaches ALIVE, an unreasoned one
138
+ stays DEAD — `resolve-issues/scripts/combine-and-verify.mjs`). The only change is that
139
+ the reason string is **derived** from the scope class (`scopeSmokeReason()`), not
140
+ written per run. Less machinery than a skip, and no per-run prose.
141
+
142
+ ## What `no-surface` keeps — all of it
143
+
144
+ `SCOPE_KEPT_OBLIGATIONS` in the script, identical for every class and asserted
145
+ identical by its tests. If someone later tries to route a review obligation through
146
+ this classifier, that constant is where it has to be added, in the open.
147
+
148
+ - `scan-diff`'s findings channel — zero-tolerance for every scope class
149
+ - CI green on the exact head
150
+ - the independent review on a different model — **same reviewer spawn, same
151
+ model-diversity rule, same verdict bar**; an inferred scope class never lightens the
152
+ review
153
+ - delivery recording with ancestry proof
154
+
155
+ ## Risk auto-flag (raise-only)
156
+
157
+ Paths governing merge authority, CI, deploy and IAM set `highRisk: true` **while**
158
+ setting `scopeClass: no-surface`. PR #1064 would have qualified and did not.
159
+
160
+ The flag only ever moves **up**. The orchestrator's recording step ORs it in and can
161
+ never write `false` over a set flag — otherwise a `no-surface` docs diff would clear
162
+ the high-risk tier of a unit intake had already flagged, on the very round its scope
163
+ was classified.
164
+
165
+ ## Usage
166
+
167
+ ```bash
168
+ # at close-out, from the net diff the evidence block already computes
169
+ git diff $(git merge-base origin/<target> HEAD)...HEAD \
170
+ | node <ensure-coverage>/scripts/scope-class.mjs classify --stdin --json > scope.json
171
+
172
+ # then RETURN scope.json's contents in the spawn's result, under `scopeClass`.
173
+ # The orchestrator records it on the unit — the manifest, not the producer, is the
174
+ # authority, and the orchestrator is its only writer (ADR 0001 decision 5).
175
+ ```
176
+
177
+ Exit codes: `0` classified (either class), `1` a blocking oracle finding, `2` usage
178
+ error. `surface-bearing` is exit 0 — a normal, safe outcome, not a failure.
@@ -0,0 +1,55 @@
1
+ # Test Strategy (process)
2
+
3
+ > Read when: choosing the required test level for an AC, classifying E2E type, or deciding whether a skip is allowed.
4
+
5
+ ## Test Level Selection
6
+
7
+ Classify each AC before writing the matrix:
8
+
9
+ - Logic AC: unit test is acceptable for pure decision logic or stable public contracts.
10
+ - Boundary AC: contract/API test is required for request/response, validation, schema, compatibility, and error contracts.
11
+ - Stateful workflow AC: integration test is required for DB writes, transactions, state transitions, idempotency, and recovery.
12
+ - Async/pub-sub/orchestrator AC: integration test is required with real state store plus broker emulator or fake event adapter; assert final durable state and emitted events.
13
+ - Critical money/security AC: integration, API E2E, or Journey E2E is required; mock-only coverage is never acceptable here, even with approval.
14
+ - Browser/UI AC: UI E2E is required for page behavior, navigation, user-visible errors, forms, and role-dependent visibility.
15
+ - Cross-page/core business journey: Journey E2E is required with real APIs where practical; do not mock internal endpoints unless explicitly approved.
16
+
17
+ ## E2E Coverage Rules
18
+
19
+ When E2E is required, classify it explicitly and apply the `e2e-test` skill:
20
+
21
+ - API E2E: endpoint behavior with real app; assert HTTP contract, auth/permissions, durable state, and side effects.
22
+ - UI E2E: page/route behavior; assert loading, navigation, forms, user-visible behavior, auth, and error states.
23
+ - Journey E2E: cross-page or core business flow; assert final outcome and side effects through real APIs where practical.
24
+
25
+ ## Golden-path smoke selection
26
+
27
+ Smoke is not a separate browser-test level. A browser smoke path is a **curated E2E smoke journey**: it uses the same real-app/Playwright discipline as E2E, but only for the handful of journeys whose failure alone means "do not ship." Keep the classification separate:
28
+
29
+ - **E2E obligation** — required by risk and surface behavior; broad functional/journey coverage belongs to the integration lane.
30
+ - **Smoke membership** — release-critical selection from those obligations; small enough to run per-PR and reduced to ALIVE/DEAD by the `smoke` skill.
31
+
32
+ You can use the generated surface inventory to suggest candidates (mutation routes, auth/payments-looking routes, health endpoints), but do not let code discovery decide the golden-path manifest. Product/release judgment must promote candidates into `smoke.manifest.json` and write concrete observables.
33
+
34
+ For audit mode:
35
+
36
+ - Run deterministic route/endpoint discovery before coverage judgment.
37
+ - Include discovery method, discovered count, manifest count, missing/stale/uncovered entries, and changed-route coverage status.
38
+ - Build the user journey inventory before mapping tests; route render-health tests do not prove a business journey unless they exercise the full flow and assert final outcomes.
39
+ - Decompose every reachable dashboard/settings page into its mutation-form journeys (e.g. "operator creates a GitHub connector account"). For each, require UI/Journey E2E proof that the form renders every backend-required field and that submitting it produces a payload the backend accepts plus the expected durable state change. Reject backend-validator, schema-source, and API-forwarding tests as a substitute — they are proxy wiring for a split-contract form.
40
+
41
+ ## Test Skipping Policy (no-skip)
42
+
43
+ The committed suite contains **only tests that run and assert**. A test is never disabled to get past a missing precondition or a failure — no `test.skip()` / `xit` / `describe.skip`, no conditional skip, no *disguised* skip (`if (!data) return` or any guard that no-ops the body while reporting **passed**). **The agent has no discretion to skip**: there is a non-skip answer for every case, and a disabled/guarded test doesn't even clear the gate — the ledger grades it not-covered and the render sweep reports `blocked`, never `pass`.
44
+
45
+ There is **no allow-list** — "skip when it's outside your control" is the exact rationalization that ships false coverage. Map each case to a mechanism that keeps the **signal** or an honest **`Unverified`**:
46
+
47
+ - **Missing state** (data, session, migration, flag, a specific entity status) → **seed it**; constructing it is the test's *arrange* step, not a blocker. The line is "can the agent create this state?", not "is it present now?"
48
+ - **Third-party dependency** → **sandbox at the boundary** (sandbox + test keys; fake only the external adapter).
49
+ - **Un-sandboxable external or a genuine flake** → **quarantine lane**: a non-blocking job that still *runs and reports* the test, surface graded blocking-but-attestable `Unverified`, with a dated exit. Run + report + don't-block ≠ stop running.
50
+ - **Only valid on a specific platform/capability** → **route it** (matrix/tag); selection ≠ skip.
51
+ - **Behavior not built yet** → land the test *with* the behavior (TDD red→green) or don't merge it yet.
52
+ - **Obsolete / wrong test** → **delete it**, don't skip.
53
+ - **Cannot run in any environment we control** → it isn't an automated test → a documented **manual-check**, tracked.
54
+
55
+ **Annotation is not authorization:** a `TODO`/issue link doesn't make a skip acceptable — it's a confession the work was deferred (`TODO: re-enable when we seed …` means it was seedable). **Inherited** skips are pre-existing (a note, not a blocker per `review-pr` diff-discipline), but no PR may *add* one. E2E specifics + the full solutions map: `e2e-test` → `references/authoring/test-skipping.md`.
@@ -0,0 +1,45 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "coverage-config.schema.json",
4
+ "title": "coverage.config.json",
5
+ "description": "Per-project config for ensure-coverage tooling, placed at the repo root. The mockPolicy block declares TOPOLOGY for the default-on, zero-tolerance mock-internal-seam lint rule (references/depth/mock-policy.md) — it tunes what counts as first-party; it does not enable/disable the gate.",
6
+ "type": "object",
7
+ "additionalProperties": true,
8
+ "properties": {
9
+ "mockPolicy": {
10
+ "type": "object",
11
+ "description": "Declares topology for lint-tests' mock-internal-seam rule via the externals-allowlist inversion: flag a mock of first-party code, exempt declared externals. The rule is default-on and cannot be disabled here.",
12
+ "additionalProperties": false,
13
+ "properties": {
14
+ "enabled": {
15
+ "type": "boolean",
16
+ "default": true,
17
+ "description": "Inert / retained for compatibility. The mock-internal-seam gate is ZERO-TOLERANCE and default-on; setting this false does NOT disable it. Config declares topology, not on/off."
18
+ },
19
+ "firstPartyAliasPrefixes": {
20
+ "type": "array",
21
+ "items": { "type": "string" },
22
+ "default": ["@/", "~/"],
23
+ "description": "Import-specifier prefixes denoting first-party app source; a mock of one of these is treated as an internal seam."
24
+ },
25
+ "firstPartyPackages": {
26
+ "type": "array",
27
+ "items": { "type": "string" },
28
+ "default": [],
29
+ "description": "Bare package names — exact or scope prefix (e.g. \"@acme/\") — that are actually first-party workspace packages, so mocking them is an internal seam."
30
+ },
31
+ "externals": {
32
+ "type": "array",
33
+ "items": { "type": "string" },
34
+ "default": [],
35
+ "description": "Regex sources for specifiers that are legitimately external and therefore exempt (overrides first-party detection). Bare npm packages and node: builtins are already external by default; use this only for a first-party-looking specifier that is actually external/generated."
36
+ },
37
+ "testUtilHints": {
38
+ "type": "array",
39
+ "items": { "type": "string" },
40
+ "description": "Path segments that mark a relative import as a test util / fixture / mock rather than a production seam (e.g. __mocks__, fixtures, helpers)."
41
+ }
42
+ }
43
+ }
44
+ }
45
+ }
@@ -0,0 +1,93 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "https://example.com/ensure-coverage/coverage-file.schema.json",
4
+ "title": "Per-requirement coverage file",
5
+ "description": "Curated, hand-authored, one per requirement document at docs/tests/<source>/<id>-<slug>.coverage.(yml|json). Declares ownership and intent only. It MUST NOT carry coverage status — status is computed by the aggregator so files for a shared surface cannot diverge.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["surfaces"],
9
+ "properties": {
10
+ "criteria": {
11
+ "type": "string",
12
+ "description": "Path to this requirement's test criteria doc, e.g. docs/tests/adr/0008-org-model-allowlist.criteria.md"
13
+ },
14
+ "surfaces": {
15
+ "type": "object",
16
+ "description": "Map of surface id (route/api/table/event id, matching the inventory) to its required coverage. May be empty for an accepted requirement with no runtime behavior.",
17
+ "additionalProperties": {
18
+ "type": "object",
19
+ "additionalProperties": false,
20
+ "description": "Deviation/ownership record for one surface. A surface needs NO entry here to be enforced — the Surface Baseline Contract auto-applies a floor from the inventory's (kind, class). An entry exists only to RAISE the floor, mark sensitive, exclude, attest, or attach ownership.",
21
+ "properties": {
22
+ "requiredLevels": {
23
+ "type": "array",
24
+ "description": "Raise the floor above baseline. Strictest required test levels for this surface (unioned with the auto-computed baseline; cannot lower it). Functional tokens: render-health, unit, integration, api, pg-api, browser-journey, journey, ui-e2e, e2e, no-secret-assertion. (`render-health` is a minimal browser reachability/render floor, used as the residual for the `static` exclusion category; it is the breadth-floor sibling of the presentation spine `presentation:render-health` and of e2e-test's Tier-1. The old token `smoke` is kept as a back-compat alias for `render-health`.) Presentation-axis tokens (proven against a real rendered page, never DOM-only): presentation:render-health (the spine — page renders without pageerror/console.error/error boundary/5xx), presentation:spatial, presentation:perceivability, presentation:reachability, presentation:temporal. Every browser route auto-carries the full presentation floor via the Surface Baseline Contract. These tokens are GRADED by the ledger; the e2e-test presentation sweep is the runner that emits per-(route,level) results (see ensure-coverage references/presentation/runner-contract.md).",
25
+ "items": { "type": "string" }
26
+ },
27
+ "sensitive": {
28
+ "type": "boolean",
29
+ "description": "Human-declared escalation for credential/admin/settings surfaces. Adds a contract + auth/tenant-isolation obligation on top of the mechanical floor. May only raise the bar, never lower it."
30
+ },
31
+ "verified": {
32
+ "type": "boolean",
33
+ "description": "Reviewer attestation that the resolved tests genuinely prove the behavior (assertions inspected, evidence confirmed). Promotes a statically-adequate surface from the blocking `Unverified` state to `Covered`. A self-declared @level alone never reaches `Covered`."
34
+ },
35
+ "excludeCells": {
36
+ "type": "object",
37
+ "description": "Gated removal of feature-derived escalation CELLS (e.g. `presentation:perceivability@dark`). Map of cell-qualified level -> { category, reason }. Only `@`-qualified cells may be excluded; the base mechanical floor can never be removed. Each removal is surfaced in the census.",
38
+ "additionalProperties": {
39
+ "type": "object",
40
+ "additionalProperties": false,
41
+ "required": ["category", "reason"],
42
+ "properties": {
43
+ "category": { "type": "string", "description": "Why this cell is out of scope (e.g. deprecated, seed)." },
44
+ "reason": { "type": "string", "description": "Human-readable justification (printed in the census)." }
45
+ }
46
+ }
47
+ },
48
+ "exclude": {
49
+ "type": ["object", "null"],
50
+ "additionalProperties": false,
51
+ "description": "Mark the surface out of scope. PERMITTED ONLY when the adapter's reachability/class signals agree it cannot hurt a user — a reachable mutation route or a mutation API can never be excluded. Surfaced in a visible exclusion census.",
52
+ "required": ["category", "reason"],
53
+ "properties": {
54
+ "category": {
55
+ "type": "string",
56
+ "enum": ["seed", "static", "deprecated", "internal"],
57
+ "description": "Why this surface is out of scope."
58
+ },
59
+ "reason": {
60
+ "type": "string",
61
+ "description": "Human-readable justification (printed in the census)."
62
+ },
63
+ "gapIssue": {
64
+ "type": ["string", "null"],
65
+ "description": "Optional tracker link for the exclusion or a follow-up."
66
+ }
67
+ }
68
+ },
69
+ "uiOnly": {
70
+ "type": "boolean",
71
+ "description": "True if this surface is only reachable/asserted via UI."
72
+ },
73
+ "owner": {
74
+ "type": ["string", "null"],
75
+ "description": "Optional feature-card ownership: team or person responsible for this surface."
76
+ },
77
+ "purpose": {
78
+ "type": ["string", "null"],
79
+ "description": "Optional feature-card field: what this surface is for."
80
+ },
81
+ "userVisibleContract": {
82
+ "type": ["string", "null"],
83
+ "description": "Optional feature-card field: the user-visible contract this surface must uphold."
84
+ },
85
+ "gapIssue": {
86
+ "type": ["string", "null"],
87
+ "description": "Optional tracker link for a known, accepted coverage gap."
88
+ }
89
+ }
90
+ }
91
+ }
92
+ }
93
+ }