p-dev-harness 0.3.0 → 0.3.1

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 (808) hide show
  1. package/README.md +16 -5
  2. package/dist/github/client.d.ts +88 -1
  3. package/dist/github/client.d.ts.map +1 -1
  4. package/dist/github/client.js +98 -7
  5. package/dist/github/client.js.map +1 -1
  6. package/dist/github/rate-limit-metadata.d.ts +16 -0
  7. package/dist/github/rate-limit-metadata.d.ts.map +1 -0
  8. package/dist/github/rate-limit-metadata.js +73 -0
  9. package/dist/github/rate-limit-metadata.js.map +1 -0
  10. package/dist/p-dev/git-object-plumbing.d.ts +19 -0
  11. package/dist/p-dev/git-object-plumbing.d.ts.map +1 -0
  12. package/dist/p-dev/git-object-plumbing.js +196 -0
  13. package/dist/p-dev/git-object-plumbing.js.map +1 -0
  14. package/dist/p-dev/package-paths.d.ts +1 -0
  15. package/dist/p-dev/package-paths.d.ts.map +1 -1
  16. package/dist/p-dev/package-paths.js +3 -0
  17. package/dist/p-dev/package-paths.js.map +1 -1
  18. package/dist/p-dev/workspace-snapshot-digest.d.ts +12 -0
  19. package/dist/p-dev/workspace-snapshot-digest.d.ts.map +1 -0
  20. package/dist/p-dev/workspace-snapshot-digest.js +34 -0
  21. package/dist/p-dev/workspace-snapshot-digest.js.map +1 -0
  22. package/dist/p-dev/workspace-snapshot-generator.d.ts +15 -0
  23. package/dist/p-dev/workspace-snapshot-generator.d.ts.map +1 -0
  24. package/dist/p-dev/workspace-snapshot-generator.js +69 -0
  25. package/dist/p-dev/workspace-snapshot-generator.js.map +1 -0
  26. package/dist/p-dev/workspace-snapshot-git.d.ts +26 -0
  27. package/dist/p-dev/workspace-snapshot-git.d.ts.map +1 -0
  28. package/dist/p-dev/workspace-snapshot-git.js +151 -0
  29. package/dist/p-dev/workspace-snapshot-git.js.map +1 -0
  30. package/dist/p-dev/workspace-snapshot-manifest.d.ts +18 -0
  31. package/dist/p-dev/workspace-snapshot-manifest.d.ts.map +1 -0
  32. package/dist/p-dev/workspace-snapshot-manifest.js +292 -0
  33. package/dist/p-dev/workspace-snapshot-manifest.js.map +1 -0
  34. package/dist/p-dev/workspace-snapshot-policy.d.ts +16 -0
  35. package/dist/p-dev/workspace-snapshot-policy.d.ts.map +1 -0
  36. package/dist/p-dev/workspace-snapshot-policy.js +168 -0
  37. package/dist/p-dev/workspace-snapshot-policy.js.map +1 -0
  38. package/dist/p-dev/workspace-snapshot-types.d.ts +54 -0
  39. package/dist/p-dev/workspace-snapshot-types.d.ts.map +1 -0
  40. package/dist/p-dev/workspace-snapshot-types.js +7 -0
  41. package/dist/p-dev/workspace-snapshot-types.js.map +1 -0
  42. package/dist/p-dev/workspace-snapshot-validation.d.ts +17 -0
  43. package/dist/p-dev/workspace-snapshot-validation.d.ts.map +1 -0
  44. package/dist/p-dev/workspace-snapshot-validation.js +115 -0
  45. package/dist/p-dev/workspace-snapshot-validation.js.map +1 -0
  46. package/dist/setup/github-remote-provider.d.ts +129 -0
  47. package/dist/setup/github-remote-provider.d.ts.map +1 -1
  48. package/dist/setup/github-remote-provider.js +214 -3
  49. package/dist/setup/github-remote-provider.js.map +1 -1
  50. package/dist/setup/github-remote-setup-live.d.ts +46 -1
  51. package/dist/setup/github-remote-setup-live.d.ts.map +1 -1
  52. package/dist/setup/github-remote-setup-live.js +121 -4
  53. package/dist/setup/github-remote-setup-live.js.map +1 -1
  54. package/dist/setup/github-secret-encryption.d.ts.map +1 -1
  55. package/dist/setup/github-secret-encryption.js +3 -1
  56. package/dist/setup/github-secret-encryption.js.map +1 -1
  57. package/dist/setup/github-upload-rate-limit-gate.d.ts +17 -0
  58. package/dist/setup/github-upload-rate-limit-gate.d.ts.map +1 -0
  59. package/dist/setup/github-upload-rate-limit-gate.js +42 -0
  60. package/dist/setup/github-upload-rate-limit-gate.js.map +1 -0
  61. package/dist/setup/harness-managed-repo-marker.d.ts +28 -1
  62. package/dist/setup/harness-managed-repo-marker.d.ts.map +1 -1
  63. package/dist/setup/harness-managed-repo-marker.js +165 -2
  64. package/dist/setup/harness-managed-repo-marker.js.map +1 -1
  65. package/dist/setup/harness-provisioning-context.d.ts +14 -12
  66. package/dist/setup/harness-provisioning-context.d.ts.map +1 -1
  67. package/dist/setup/harness-provisioning-context.js +54 -42
  68. package/dist/setup/harness-provisioning-context.js.map +1 -1
  69. package/dist/setup/harness-provisioning-pending-state.d.ts +33 -22
  70. package/dist/setup/harness-provisioning-pending-state.d.ts.map +1 -1
  71. package/dist/setup/harness-provisioning-pending-state.js +49 -30
  72. package/dist/setup/harness-provisioning-pending-state.js.map +1 -1
  73. package/dist/setup/harness-repo-provisioning.d.ts +10 -5
  74. package/dist/setup/harness-repo-provisioning.d.ts.map +1 -1
  75. package/dist/setup/harness-repo-provisioning.js +403 -335
  76. package/dist/setup/harness-repo-provisioning.js.map +1 -1
  77. package/dist/setup/harness-snapshot-provisioning-helpers.d.ts +21 -0
  78. package/dist/setup/harness-snapshot-provisioning-helpers.d.ts.map +1 -0
  79. package/dist/setup/harness-snapshot-provisioning-helpers.js +55 -0
  80. package/dist/setup/harness-snapshot-provisioning-helpers.js.map +1 -0
  81. package/dist/setup/harness-snapshot-provisioning.d.ts +111 -0
  82. package/dist/setup/harness-snapshot-provisioning.d.ts.map +1 -0
  83. package/dist/setup/harness-snapshot-provisioning.js +684 -0
  84. package/dist/setup/harness-snapshot-provisioning.js.map +1 -0
  85. package/dist/setup/harness-workspace-snapshot-loader.d.ts +15 -0
  86. package/dist/setup/harness-workspace-snapshot-loader.d.ts.map +1 -0
  87. package/dist/setup/harness-workspace-snapshot-loader.js +80 -0
  88. package/dist/setup/harness-workspace-snapshot-loader.js.map +1 -0
  89. package/dist/setup/mock-git-repository-store.d.ts +43 -0
  90. package/dist/setup/mock-git-repository-store.d.ts.map +1 -0
  91. package/dist/setup/mock-git-repository-store.js +232 -0
  92. package/dist/setup/mock-git-repository-store.js.map +1 -0
  93. package/gui/.next/BUILD_ID +1 -1
  94. package/gui/.next/app-build-manifest.json +49 -49
  95. package/gui/.next/app-path-routes-manifest.json +15 -15
  96. package/gui/.next/build-manifest.json +2 -2
  97. package/gui/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  98. package/gui/.next/server/app/_not-found.html +1 -1
  99. package/gui/.next/server/app/_not-found.rsc +2 -2
  100. package/gui/.next/server/app/api/setup/apply-connect-services/route.js +1 -1
  101. package/gui/.next/server/app/api/setup/apply-connect-services/route.js.nft.json +1 -1
  102. package/gui/.next/server/app/api/setup/apply-connect-services/route_client-reference-manifest.js +1 -1
  103. package/gui/.next/server/app/api/setup/apply-harness-repo-provisioning/route.js +1 -1
  104. package/gui/.next/server/app/api/setup/apply-harness-repo-provisioning/route.js.nft.json +1 -1
  105. package/gui/.next/server/app/api/setup/apply-harness-repo-provisioning/route_client-reference-manifest.js +1 -1
  106. package/gui/.next/server/app/api/setup/apply-harness-secrets/route.js +1 -1
  107. package/gui/.next/server/app/api/setup/apply-harness-secrets/route.js.nft.json +1 -1
  108. package/gui/.next/server/app/api/setup/apply-harness-secrets/route_client-reference-manifest.js +1 -1
  109. package/gui/.next/server/app/api/setup/apply-linear-setup/route.js +1 -1
  110. package/gui/.next/server/app/api/setup/apply-linear-setup/route.js.nft.json +1 -1
  111. package/gui/.next/server/app/api/setup/apply-linear-setup/route_client-reference-manifest.js +1 -1
  112. package/gui/.next/server/app/api/setup/apply-local-files/route.js +1 -1
  113. package/gui/.next/server/app/api/setup/apply-local-files/route.js.nft.json +1 -1
  114. package/gui/.next/server/app/api/setup/apply-local-files/route_client-reference-manifest.js +1 -1
  115. package/gui/.next/server/app/api/setup/apply-target-workflow/route.js +1 -1
  116. package/gui/.next/server/app/api/setup/apply-target-workflow/route.js.nft.json +1 -1
  117. package/gui/.next/server/app/api/setup/apply-target-workflow/route_client-reference-manifest.js +1 -1
  118. package/gui/.next/server/app/api/setup/apply-vercel-bridge/route.js +1 -1
  119. package/gui/.next/server/app/api/setup/apply-vercel-bridge/route.js.nft.json +1 -1
  120. package/gui/.next/server/app/api/setup/apply-vercel-bridge/route_client-reference-manifest.js +1 -1
  121. package/gui/.next/server/app/api/setup/finalize-target-workflow/route.js +1 -1
  122. package/gui/.next/server/app/api/setup/finalize-target-workflow/route.js.nft.json +1 -1
  123. package/gui/.next/server/app/api/setup/finalize-target-workflow/route_client-reference-manifest.js +1 -1
  124. package/gui/.next/server/app/api/setup/harness-provisioning-summary/route.js +1 -1
  125. package/gui/.next/server/app/api/setup/harness-provisioning-summary/route.js.nft.json +1 -1
  126. package/gui/.next/server/app/api/setup/harness-provisioning-summary/route_client-reference-manifest.js +1 -1
  127. package/gui/.next/server/app/api/setup/linear-options/route.js +1 -1
  128. package/gui/.next/server/app/api/setup/linear-options/route.js.nft.json +1 -1
  129. package/gui/.next/server/app/api/setup/linear-options/route_client-reference-manifest.js +1 -1
  130. package/gui/.next/server/app/api/setup/linear-summary/route.js +1 -1
  131. package/gui/.next/server/app/api/setup/linear-summary/route.js.nft.json +1 -1
  132. package/gui/.next/server/app/api/setup/linear-summary/route_client-reference-manifest.js +1 -1
  133. package/gui/.next/server/app/api/setup/local-readiness/route_client-reference-manifest.js +1 -1
  134. package/gui/.next/server/app/api/setup/manual-harness-secret-values/route.js +1 -1
  135. package/gui/.next/server/app/api/setup/manual-harness-secret-values/route.js.nft.json +1 -1
  136. package/gui/.next/server/app/api/setup/manual-harness-secret-values/route_client-reference-manifest.js +1 -1
  137. package/gui/.next/server/app/api/setup/preview-connect-services/route.js +1 -1
  138. package/gui/.next/server/app/api/setup/preview-connect-services/route.js.nft.json +1 -1
  139. package/gui/.next/server/app/api/setup/preview-connect-services/route_client-reference-manifest.js +1 -1
  140. package/gui/.next/server/app/api/setup/preview-harness-repo-provisioning/route.js +1 -1
  141. package/gui/.next/server/app/api/setup/preview-harness-repo-provisioning/route.js.nft.json +1 -1
  142. package/gui/.next/server/app/api/setup/preview-harness-repo-provisioning/route_client-reference-manifest.js +1 -1
  143. package/gui/.next/server/app/api/setup/preview-harness-secrets/route.js +1 -1
  144. package/gui/.next/server/app/api/setup/preview-harness-secrets/route.js.nft.json +1 -1
  145. package/gui/.next/server/app/api/setup/preview-harness-secrets/route_client-reference-manifest.js +1 -1
  146. package/gui/.next/server/app/api/setup/preview-linear-setup/route.js +1 -1
  147. package/gui/.next/server/app/api/setup/preview-linear-setup/route.js.nft.json +1 -1
  148. package/gui/.next/server/app/api/setup/preview-linear-setup/route_client-reference-manifest.js +1 -1
  149. package/gui/.next/server/app/api/setup/preview-local-files/route.js +1 -1
  150. package/gui/.next/server/app/api/setup/preview-local-files/route.js.nft.json +1 -1
  151. package/gui/.next/server/app/api/setup/preview-local-files/route_client-reference-manifest.js +1 -1
  152. package/gui/.next/server/app/api/setup/preview-target-workflow/route.js +1 -1
  153. package/gui/.next/server/app/api/setup/preview-target-workflow/route.js.nft.json +1 -1
  154. package/gui/.next/server/app/api/setup/preview-target-workflow/route_client-reference-manifest.js +1 -1
  155. package/gui/.next/server/app/api/setup/preview-vercel-bridge/route.js +1 -1
  156. package/gui/.next/server/app/api/setup/preview-vercel-bridge/route.js.nft.json +1 -1
  157. package/gui/.next/server/app/api/setup/preview-vercel-bridge/route_client-reference-manifest.js +1 -1
  158. package/gui/.next/server/app/api/setup/remote-summary/route.js +1 -1
  159. package/gui/.next/server/app/api/setup/remote-summary/route.js.nft.json +1 -1
  160. package/gui/.next/server/app/api/setup/remote-summary/route_client-reference-manifest.js +1 -1
  161. package/gui/.next/server/app/api/setup/summary/route.js +1 -1
  162. package/gui/.next/server/app/api/setup/summary/route.js.nft.json +1 -1
  163. package/gui/.next/server/app/api/setup/summary/route_client-reference-manifest.js +1 -1
  164. package/gui/.next/server/app/api/setup/vercel-bridge-options/route.js +1 -1
  165. package/gui/.next/server/app/api/setup/vercel-bridge-options/route.js.nft.json +1 -1
  166. package/gui/.next/server/app/api/setup/vercel-bridge-options/route_client-reference-manifest.js +1 -1
  167. package/gui/.next/server/app/api/setup/vercel-bridge-redeploy-status/route.js +1 -1
  168. package/gui/.next/server/app/api/setup/vercel-bridge-redeploy-status/route.js.nft.json +1 -1
  169. package/gui/.next/server/app/api/setup/vercel-bridge-redeploy-status/route_client-reference-manifest.js +1 -1
  170. package/gui/.next/server/app/api/setup/vercel-summary/route.js +1 -1
  171. package/gui/.next/server/app/api/setup/vercel-summary/route.js.nft.json +1 -1
  172. package/gui/.next/server/app/api/setup/vercel-summary/route_client-reference-manifest.js +1 -1
  173. package/gui/.next/server/app/api/setup/verify-harness-repo/route.js +1 -1
  174. package/gui/.next/server/app/api/setup/verify-harness-repo/route.js.nft.json +1 -1
  175. package/gui/.next/server/app/api/setup/verify-harness-repo/route_client-reference-manifest.js +1 -1
  176. package/gui/.next/server/app/api/setup/verify-service/route_client-reference-manifest.js +1 -1
  177. package/gui/.next/server/app/api/setup/verify-target-repo/route_client-reference-manifest.js +1 -1
  178. package/gui/.next/server/app/index.html +1 -1
  179. package/gui/.next/server/app/index.rsc +2 -2
  180. package/gui/.next/server/app/page_client-reference-manifest.js +1 -1
  181. package/gui/.next/server/app/settings/configure/page.js +2 -2
  182. package/gui/.next/server/app/settings/configure/page.js.nft.json +1 -1
  183. package/gui/.next/server/app/settings/configure/page_client-reference-manifest.js +1 -1
  184. package/gui/.next/server/app-paths-manifest.json +15 -15
  185. package/gui/.next/server/chunks/477.js +2 -2
  186. package/gui/.next/server/chunks/647.js +82 -0
  187. package/gui/.next/server/chunks/900.js +1 -1
  188. package/gui/.next/server/pages/404.html +1 -1
  189. package/gui/.next/server/pages/500.html +1 -1
  190. package/gui/.next/static/css/781f3c93b6d7425a.css +3 -0
  191. package/gui/.next/trace +4 -4
  192. package/package.json +2 -1
  193. package/workspace-snapshot/files/.agents/skills/architecture-evolution-audit/SKILL.md +282 -0
  194. package/workspace-snapshot/files/.agents/skills/code-health-audit/SKILL.md +188 -0
  195. package/workspace-snapshot/files/.agents/skills/implementation/SKILL.md +279 -0
  196. package/workspace-snapshot/files/.agents/skills/issue-intake/SKILL.md +163 -0
  197. package/workspace-snapshot/files/.agents/skills/issue-intake/examples.md +112 -0
  198. package/workspace-snapshot/files/.agents/skills/planner/SKILL.md +253 -0
  199. package/workspace-snapshot/files/.agents/skills/security-audit/SKILL.md +270 -0
  200. package/workspace-snapshot/files/.env.example +37 -0
  201. package/workspace-snapshot/files/.github/CODEOWNERS +4 -0
  202. package/workspace-snapshot/files/.github/dependabot.yml +12 -0
  203. package/workspace-snapshot/files/.github/workflows/ci.yml +32 -0
  204. package/workspace-snapshot/files/.github/workflows/codeql.yml +35 -0
  205. package/workspace-snapshot/files/.github/workflows/harness-auto-runner.yml +561 -0
  206. package/workspace-snapshot/files/.harness/config.example.json +83 -0
  207. package/workspace-snapshot/files/AGENTS.md +130 -0
  208. package/workspace-snapshot/files/ARCHITECTURE.md +385 -0
  209. package/workspace-snapshot/files/CHANGELOG.md +166 -0
  210. package/workspace-snapshot/files/LICENSE +21 -0
  211. package/workspace-snapshot/files/README.md +110 -0
  212. package/workspace-snapshot/files/ROADMAP.md +50 -0
  213. package/workspace-snapshot/files/api/linear-webhook.ts +41 -0
  214. package/workspace-snapshot/files/apps/gui/app/api/setup/apply-connect-services/route.ts +21 -0
  215. package/workspace-snapshot/files/apps/gui/app/api/setup/apply-harness-repo-provisioning/route.ts +35 -0
  216. package/workspace-snapshot/files/apps/gui/app/api/setup/apply-harness-secrets/route.ts +42 -0
  217. package/workspace-snapshot/files/apps/gui/app/api/setup/apply-linear-setup/route.ts +23 -0
  218. package/workspace-snapshot/files/apps/gui/app/api/setup/apply-local-files/route.ts +42 -0
  219. package/workspace-snapshot/files/apps/gui/app/api/setup/apply-target-workflow/route.ts +49 -0
  220. package/workspace-snapshot/files/apps/gui/app/api/setup/apply-vercel-bridge/route.ts +26 -0
  221. package/workspace-snapshot/files/apps/gui/app/api/setup/finalize-target-workflow/route.ts +32 -0
  222. package/workspace-snapshot/files/apps/gui/app/api/setup/harness-provisioning-summary/route.ts +17 -0
  223. package/workspace-snapshot/files/apps/gui/app/api/setup/linear-options/route.ts +17 -0
  224. package/workspace-snapshot/files/apps/gui/app/api/setup/linear-summary/route.ts +15 -0
  225. package/workspace-snapshot/files/apps/gui/app/api/setup/local-readiness/route.ts +18 -0
  226. package/workspace-snapshot/files/apps/gui/app/api/setup/manual-harness-secret-values/route.ts +33 -0
  227. package/workspace-snapshot/files/apps/gui/app/api/setup/preview-connect-services/route.ts +17 -0
  228. package/workspace-snapshot/files/apps/gui/app/api/setup/preview-harness-repo-provisioning/route.ts +22 -0
  229. package/workspace-snapshot/files/apps/gui/app/api/setup/preview-harness-secrets/route.ts +19 -0
  230. package/workspace-snapshot/files/apps/gui/app/api/setup/preview-linear-setup/route.ts +20 -0
  231. package/workspace-snapshot/files/apps/gui/app/api/setup/preview-local-files/route.ts +17 -0
  232. package/workspace-snapshot/files/apps/gui/app/api/setup/preview-target-workflow/route.ts +25 -0
  233. package/workspace-snapshot/files/apps/gui/app/api/setup/preview-vercel-bridge/route.ts +23 -0
  234. package/workspace-snapshot/files/apps/gui/app/api/setup/remote-summary/route.ts +15 -0
  235. package/workspace-snapshot/files/apps/gui/app/api/setup/summary/route.ts +10 -0
  236. package/workspace-snapshot/files/apps/gui/app/api/setup/vercel-bridge-options/route.ts +29 -0
  237. package/workspace-snapshot/files/apps/gui/app/api/setup/vercel-bridge-redeploy-status/route.ts +22 -0
  238. package/workspace-snapshot/files/apps/gui/app/api/setup/vercel-summary/route.ts +15 -0
  239. package/workspace-snapshot/files/apps/gui/app/api/setup/verify-harness-repo/route.ts +31 -0
  240. package/workspace-snapshot/files/apps/gui/app/api/setup/verify-service/route.ts +41 -0
  241. package/workspace-snapshot/files/apps/gui/app/api/setup/verify-target-repo/route.ts +33 -0
  242. package/workspace-snapshot/files/apps/gui/app/layout.tsx +28 -0
  243. package/workspace-snapshot/files/apps/gui/app/page.tsx +5 -0
  244. package/workspace-snapshot/files/apps/gui/app/settings/configure/page.tsx +34 -0
  245. package/workspace-snapshot/files/apps/gui/components/custom/app-shell.tsx +39 -0
  246. package/workspace-snapshot/files/apps/gui/components/custom/configure-experience.tsx +671 -0
  247. package/workspace-snapshot/files/apps/gui/components/custom/configure-page-content.tsx +45 -0
  248. package/workspace-snapshot/files/apps/gui/components/custom/configure-workflow.tsx +1284 -0
  249. package/workspace-snapshot/files/apps/gui/components/custom/connected-status.tsx +30 -0
  250. package/workspace-snapshot/files/apps/gui/components/custom/environment-config-form.tsx +400 -0
  251. package/workspace-snapshot/files/apps/gui/components/custom/first-run-stepper.tsx +199 -0
  252. package/workspace-snapshot/files/apps/gui/components/custom/github-token-help-disclosure.tsx +142 -0
  253. package/workspace-snapshot/files/apps/gui/components/custom/guided-cloud-secrets-card.tsx +993 -0
  254. package/workspace-snapshot/files/apps/gui/components/custom/guided-linear-workspace-card.tsx +526 -0
  255. package/workspace-snapshot/files/apps/gui/components/custom/guided-local-readiness-card.tsx +132 -0
  256. package/workspace-snapshot/files/apps/gui/components/custom/guided-step-transition.tsx +60 -0
  257. package/workspace-snapshot/files/apps/gui/components/custom/guided-target-workflow-card.tsx +396 -0
  258. package/workspace-snapshot/files/apps/gui/components/custom/guided-vercel-bridge-card.tsx +861 -0
  259. package/workspace-snapshot/files/apps/gui/components/custom/local-write-confirmation.tsx +91 -0
  260. package/workspace-snapshot/files/apps/gui/components/custom/local-write-preview.tsx +52 -0
  261. package/workspace-snapshot/files/apps/gui/components/custom/preview-panel.tsx +19 -0
  262. package/workspace-snapshot/files/apps/gui/components/custom/primary-setup-task-card.tsx +65 -0
  263. package/workspace-snapshot/files/apps/gui/components/custom/readiness-banner.tsx +91 -0
  264. package/workspace-snapshot/files/apps/gui/components/custom/remote-action-confirmation.tsx +155 -0
  265. package/workspace-snapshot/files/apps/gui/components/custom/remote-action-preview.tsx +84 -0
  266. package/workspace-snapshot/files/apps/gui/components/custom/remote-secret-form.tsx +123 -0
  267. package/workspace-snapshot/files/apps/gui/components/custom/remote-setup-section.tsx +354 -0
  268. package/workspace-snapshot/files/apps/gui/components/custom/review-cloud-secrets-disclosure.tsx +59 -0
  269. package/workspace-snapshot/files/apps/gui/components/custom/review-generated-files-disclosure.tsx +67 -0
  270. package/workspace-snapshot/files/apps/gui/components/custom/section-card.tsx +33 -0
  271. package/workspace-snapshot/files/apps/gui/components/custom/service-icons.tsx +30 -0
  272. package/workspace-snapshot/files/apps/gui/components/custom/setup-apply-result.tsx +52 -0
  273. package/workspace-snapshot/files/apps/gui/components/custom/setup-checklist.tsx +206 -0
  274. package/workspace-snapshot/files/apps/gui/components/custom/setup-dashboard.tsx +124 -0
  275. package/workspace-snapshot/files/apps/gui/components/custom/setup-readonly-sections.tsx +210 -0
  276. package/workspace-snapshot/files/apps/gui/components/custom/status-badge.tsx +22 -0
  277. package/workspace-snapshot/files/apps/gui/components/custom/target-repo-config-form.tsx +647 -0
  278. package/workspace-snapshot/files/apps/gui/components/custom/target-workflow-pr-card.tsx +283 -0
  279. package/workspace-snapshot/files/apps/gui/components/custom/theme-provider.tsx +11 -0
  280. package/workspace-snapshot/files/apps/gui/components/custom/theme-toggle.tsx +44 -0
  281. package/workspace-snapshot/files/apps/gui/components/custom/workflow-install-pending-panel.tsx +116 -0
  282. package/workspace-snapshot/files/apps/gui/components/ui/badge.tsx +40 -0
  283. package/workspace-snapshot/files/apps/gui/components/ui/button.tsx +52 -0
  284. package/workspace-snapshot/files/apps/gui/components/ui/card.tsx +64 -0
  285. package/workspace-snapshot/files/apps/gui/components/ui/checkbox.tsx +21 -0
  286. package/workspace-snapshot/files/apps/gui/components/ui/input.tsx +22 -0
  287. package/workspace-snapshot/files/apps/gui/components/ui/label.tsx +20 -0
  288. package/workspace-snapshot/files/apps/gui/components/ui/separator.tsx +23 -0
  289. package/workspace-snapshot/files/apps/gui/components/ui/skeleton.tsx +13 -0
  290. package/workspace-snapshot/files/apps/gui/components/ui/textarea.tsx +22 -0
  291. package/workspace-snapshot/files/apps/gui/components.json +21 -0
  292. package/workspace-snapshot/files/apps/gui/lib/constants/breakpoints.ts +13 -0
  293. package/workspace-snapshot/files/apps/gui/lib/constants/form.ts +8 -0
  294. package/workspace-snapshot/files/apps/gui/lib/constants/index.ts +4 -0
  295. package/workspace-snapshot/files/apps/gui/lib/constants/layout.ts +9 -0
  296. package/workspace-snapshot/files/apps/gui/lib/constants/spacing.ts +8 -0
  297. package/workspace-snapshot/files/apps/gui/lib/guided-setup.ts +216 -0
  298. package/workspace-snapshot/files/apps/gui/lib/setup-json-response.ts +19 -0
  299. package/workspace-snapshot/files/apps/gui/lib/setup-server.ts +836 -0
  300. package/workspace-snapshot/files/apps/gui/lib/step6-remote-state.ts +43 -0
  301. package/workspace-snapshot/files/apps/gui/lib/utils.ts +6 -0
  302. package/workspace-snapshot/files/apps/gui/lib/vercel-bridge-polling-ui.ts +16 -0
  303. package/workspace-snapshot/files/apps/gui/lib/verification-state.ts +170 -0
  304. package/workspace-snapshot/files/apps/gui/next-env.d.ts +6 -0
  305. package/workspace-snapshot/files/apps/gui/next.config.ts +34 -0
  306. package/workspace-snapshot/files/apps/gui/postcss.config.mjs +8 -0
  307. package/workspace-snapshot/files/apps/gui/public/setup/github-token/github-pat-generate-classic.png +0 -0
  308. package/workspace-snapshot/files/apps/gui/public/setup/github-token/github-pat-generate-new-token.png +0 -0
  309. package/workspace-snapshot/files/apps/gui/public/setup/github-token/github-pat-verify-email.png +0 -0
  310. package/workspace-snapshot/files/apps/gui/styles/globals.css +86 -0
  311. package/workspace-snapshot/files/apps/gui/tsconfig.json +24 -0
  312. package/workspace-snapshot/files/apps/gui/tweetsodium.d.ts +14 -0
  313. package/workspace-snapshot/files/docs/architecture/linear-automation-state-machine.md +267 -0
  314. package/workspace-snapshot/files/docs/decisions/0001-cursor-first-v0.1.md +59 -0
  315. package/workspace-snapshot/files/docs/decisions/0003-automation-state-machine-and-auto-model-policy.md +65 -0
  316. package/workspace-snapshot/files/docs/decisions/0004-agent-provider-boundary.md +109 -0
  317. package/workspace-snapshot/files/docs/design/product-development-harness-gui.md +1024 -0
  318. package/workspace-snapshot/files/docs/getting-started.md +123 -0
  319. package/workspace-snapshot/files/docs/gui-local.md +151 -0
  320. package/workspace-snapshot/files/docs/gui-remote-setup.md +106 -0
  321. package/workspace-snapshot/files/docs/integration-repair.md +82 -0
  322. package/workspace-snapshot/files/docs/issue-intake.md +124 -0
  323. package/workspace-snapshot/files/docs/linear-watcher-setup.md +184 -0
  324. package/workspace-snapshot/files/docs/milestones/m1-runner-foundation.md +51 -0
  325. package/workspace-snapshot/files/docs/milestones/m2-planning-phase.md +129 -0
  326. package/workspace-snapshot/files/docs/milestones/m3-implementation-phase.md +158 -0
  327. package/workspace-snapshot/files/docs/milestones/m4-handoff-phase.md +122 -0
  328. package/workspace-snapshot/files/docs/milestones/m5-revision-phase.md +101 -0
  329. package/workspace-snapshot/files/docs/milestones/m6-merge-phase.md +143 -0
  330. package/workspace-snapshot/files/docs/milestones/m7-issue-intake.md +72 -0
  331. package/workspace-snapshot/files/docs/milestones/m8-linear-watcher.md +80 -0
  332. package/workspace-snapshot/files/docs/npm-packaging-spike.md +52 -0
  333. package/workspace-snapshot/files/docs/operator-config.md +187 -0
  334. package/workspace-snapshot/files/docs/p-dev.md +213 -0
  335. package/workspace-snapshot/files/docs/production-sync-automation.md +176 -0
  336. package/workspace-snapshot/files/docs/provider-portability.md +131 -0
  337. package/workspace-snapshot/files/docs/releases/release-process.md +272 -0
  338. package/workspace-snapshot/files/docs/releases/v0.2.0.md +193 -0
  339. package/workspace-snapshot/files/docs/releases/v0.3.0.md +188 -0
  340. package/workspace-snapshot/files/docs/releases/v0.3.1.md +102 -0
  341. package/workspace-snapshot/files/docs/research/001-manual-run-retrospective.md +64 -0
  342. package/workspace-snapshot/files/docs/research/002-linear-cursor-integration-smoke-test.md +64 -0
  343. package/workspace-snapshot/files/docs/research/003-cursor-automation-planning-router-spike.md +104 -0
  344. package/workspace-snapshot/files/docs/research/README.md +26 -0
  345. package/workspace-snapshot/files/docs/security.md +190 -0
  346. package/workspace-snapshot/files/docs/skills/README.md +7 -0
  347. package/workspace-snapshot/files/docs/skills/skill-architecture.md +197 -0
  348. package/workspace-snapshot/files/docs/target-repo-branch-setup.md +80 -0
  349. package/workspace-snapshot/files/evals/README.md +31 -0
  350. package/workspace-snapshot/files/examples/README.md +32 -0
  351. package/workspace-snapshot/files/examples/runs/001-target-app-github-link/README.md +49 -0
  352. package/workspace-snapshot/files/examples/runs/001-target-app-github-link/eval-scorecard.md +63 -0
  353. package/workspace-snapshot/files/examples/runs/001-target-app-github-link/implementation-plan.md +79 -0
  354. package/workspace-snapshot/files/examples/runs/001-target-app-github-link/linear-issue.md +74 -0
  355. package/workspace-snapshot/files/examples/runs/001-target-app-github-link/pr-readiness-report.md +92 -0
  356. package/workspace-snapshot/files/examples/runs/m5.5-live-sandbox-smoke/README.md +73 -0
  357. package/workspace-snapshot/files/gpt/issue-intake/custom-gpt-instructions.md +112 -0
  358. package/workspace-snapshot/files/gpt/issue-intake/knowledge.md +278 -0
  359. package/workspace-snapshot/files/gpt/issue-intake/setup-guide.md +115 -0
  360. package/workspace-snapshot/files/gpt/issue-intake/smoke-test.md +119 -0
  361. package/workspace-snapshot/files/harness.config.json +92 -0
  362. package/workspace-snapshot/files/harness.config.schema.json +352 -0
  363. package/workspace-snapshot/files/package-lock.json +3716 -0
  364. package/workspace-snapshot/files/package.json +60 -0
  365. package/workspace-snapshot/files/packages/p-dev/LICENSE +21 -0
  366. package/workspace-snapshot/files/packages/p-dev/README.md +64 -0
  367. package/workspace-snapshot/files/packages/p-dev/gui.next.config.mjs +13 -0
  368. package/workspace-snapshot/files/packages/p-dev/package.json +63 -0
  369. package/workspace-snapshot/files/prompts/issue-intake-chatgpt.md +264 -0
  370. package/workspace-snapshot/files/scripts/generate-config-schema.ts +16 -0
  371. package/workspace-snapshot/files/scripts/prepare-p-dev-package.ts +155 -0
  372. package/workspace-snapshot/files/skills/README.md +7 -0
  373. package/workspace-snapshot/files/skills/issue-intake/README.md +5 -0
  374. package/workspace-snapshot/files/src/agents/cursor-provider.ts +109 -0
  375. package/workspace-snapshot/files/src/agents/index.ts +68 -0
  376. package/workspace-snapshot/files/src/agents/provider.ts +7 -0
  377. package/workspace-snapshot/files/src/agents/types.ts +85 -0
  378. package/workspace-snapshot/files/src/artifacts/events.ts +31 -0
  379. package/workspace-snapshot/files/src/artifacts/manifest-fields.ts +9 -0
  380. package/workspace-snapshot/files/src/artifacts/manifest.ts +20 -0
  381. package/workspace-snapshot/files/src/artifacts/paths.ts +145 -0
  382. package/workspace-snapshot/files/src/artifacts/redact.ts +50 -0
  383. package/workspace-snapshot/files/src/artifacts/run-id.ts +4 -0
  384. package/workspace-snapshot/files/src/artifacts/snapshot.ts +13 -0
  385. package/workspace-snapshot/files/src/artifacts/summary.ts +116 -0
  386. package/workspace-snapshot/files/src/cli/commands/diagnose-vercel-bridge.ts +25 -0
  387. package/workspace-snapshot/files/src/cli/commands/doctor.ts +205 -0
  388. package/workspace-snapshot/files/src/cli/commands/inspect.ts +46 -0
  389. package/workspace-snapshot/files/src/cli/commands/operator-init.ts +39 -0
  390. package/workspace-snapshot/files/src/cli/commands/redact-output.ts +19 -0
  391. package/workspace-snapshot/files/src/cli/commands/resolve-route.ts +81 -0
  392. package/workspace-snapshot/files/src/cli/commands/run.ts +53 -0
  393. package/workspace-snapshot/files/src/cli/commands/sync-production.ts +207 -0
  394. package/workspace-snapshot/files/src/cli/commands/validate-issue.ts +72 -0
  395. package/workspace-snapshot/files/src/cli/exit-codes.ts +4 -0
  396. package/workspace-snapshot/files/src/cli/finalize-exit.ts +9 -0
  397. package/workspace-snapshot/files/src/cli/program.ts +200 -0
  398. package/workspace-snapshot/files/src/config/defaults.ts +33 -0
  399. package/workspace-snapshot/files/src/config/load-config.ts +80 -0
  400. package/workspace-snapshot/files/src/config/load-dotenv.ts +11 -0
  401. package/workspace-snapshot/files/src/config/resolve-config.ts +127 -0
  402. package/workspace-snapshot/files/src/config/schema.ts +129 -0
  403. package/workspace-snapshot/files/src/config/status-names.ts +63 -0
  404. package/workspace-snapshot/files/src/config/types.ts +1 -0
  405. package/workspace-snapshot/files/src/cursor/agent-factory.ts +126 -0
  406. package/workspace-snapshot/files/src/cursor/errors.ts +18 -0
  407. package/workspace-snapshot/files/src/cursor/git-result.ts +87 -0
  408. package/workspace-snapshot/files/src/cursor/model.ts +47 -0
  409. package/workspace-snapshot/files/src/cursor/revision-git-result.ts +80 -0
  410. package/workspace-snapshot/files/src/cursor/run-cleanup.ts +30 -0
  411. package/workspace-snapshot/files/src/cursor/run-observer.ts +367 -0
  412. package/workspace-snapshot/files/src/cursor/urls.ts +19 -0
  413. package/workspace-snapshot/files/src/fixture/frontmatter.ts +56 -0
  414. package/workspace-snapshot/files/src/github/actions-url.ts +13 -0
  415. package/workspace-snapshot/files/src/github/base-branch.ts +120 -0
  416. package/workspace-snapshot/files/src/github/check-policy.ts +108 -0
  417. package/workspace-snapshot/files/src/github/client.ts +796 -0
  418. package/workspace-snapshot/files/src/github/commit-reachability.ts +184 -0
  419. package/workspace-snapshot/files/src/github/links.ts +23 -0
  420. package/workspace-snapshot/files/src/github/merge-result.ts +31 -0
  421. package/workspace-snapshot/files/src/github/pr-discovery.ts +55 -0
  422. package/workspace-snapshot/files/src/github/pr-inspector.ts +297 -0
  423. package/workspace-snapshot/files/src/github/pr-url.ts +23 -0
  424. package/workspace-snapshot/files/src/github/rate-limit-metadata.ts +105 -0
  425. package/workspace-snapshot/files/src/gui/configure-health.ts +160 -0
  426. package/workspace-snapshot/files/src/gui/dev-server-process.ts +213 -0
  427. package/workspace-snapshot/files/src/gui/port.ts +78 -0
  428. package/workspace-snapshot/files/src/gui/repo-root.ts +61 -0
  429. package/workspace-snapshot/files/src/gui/start-configure-stable.ts +139 -0
  430. package/workspace-snapshot/files/src/gui/start-gui.ts +126 -0
  431. package/workspace-snapshot/files/src/index.ts +10 -0
  432. package/workspace-snapshot/files/src/linear/client.ts +49 -0
  433. package/workspace-snapshot/files/src/linear/comment-card.ts +74 -0
  434. package/workspace-snapshot/files/src/linear/comments.ts +891 -0
  435. package/workspace-snapshot/files/src/linear/handoff-comment.ts +19 -0
  436. package/workspace-snapshot/files/src/linear/issue-query.ts +70 -0
  437. package/workspace-snapshot/files/src/linear/markers.ts +238 -0
  438. package/workspace-snapshot/files/src/linear/merge-source-comment.ts +46 -0
  439. package/workspace-snapshot/files/src/linear/parser.ts +101 -0
  440. package/workspace-snapshot/files/src/linear/phase-labels.ts +58 -0
  441. package/workspace-snapshot/files/src/linear/planning-comment.ts +19 -0
  442. package/workspace-snapshot/files/src/linear/pm-feedback-comment.ts +41 -0
  443. package/workspace-snapshot/files/src/linear/revision-comment.ts +19 -0
  444. package/workspace-snapshot/files/src/linear/states.ts +20 -0
  445. package/workspace-snapshot/files/src/linear/writer.ts +216 -0
  446. package/workspace-snapshot/files/src/p-dev/browser.ts +26 -0
  447. package/workspace-snapshot/files/src/p-dev/cli.ts +93 -0
  448. package/workspace-snapshot/files/src/p-dev/git-object-plumbing.ts +271 -0
  449. package/workspace-snapshot/files/src/p-dev/launch.ts +173 -0
  450. package/workspace-snapshot/files/src/p-dev/main.ts +10 -0
  451. package/workspace-snapshot/files/src/p-dev/next-bin.ts +8 -0
  452. package/workspace-snapshot/files/src/p-dev/node-version.ts +46 -0
  453. package/workspace-snapshot/files/src/p-dev/package-paths.ts +47 -0
  454. package/workspace-snapshot/files/src/p-dev/package-version.ts +63 -0
  455. package/workspace-snapshot/files/src/p-dev/runtime-mode.ts +28 -0
  456. package/workspace-snapshot/files/src/p-dev/shutdown.ts +66 -0
  457. package/workspace-snapshot/files/src/p-dev/workspace-snapshot-digest.ts +50 -0
  458. package/workspace-snapshot/files/src/p-dev/workspace-snapshot-generator.ts +112 -0
  459. package/workspace-snapshot/files/src/p-dev/workspace-snapshot-git.ts +221 -0
  460. package/workspace-snapshot/files/src/p-dev/workspace-snapshot-manifest.ts +336 -0
  461. package/workspace-snapshot/files/src/p-dev/workspace-snapshot-policy.ts +198 -0
  462. package/workspace-snapshot/files/src/p-dev/workspace-snapshot-types.ts +59 -0
  463. package/workspace-snapshot/files/src/p-dev/workspace-snapshot-validation.ts +137 -0
  464. package/workspace-snapshot/files/src/p-dev/workspace.ts +114 -0
  465. package/workspace-snapshot/files/src/preview/production-from-merge.ts +143 -0
  466. package/workspace-snapshot/files/src/preview/urls.ts +28 -0
  467. package/workspace-snapshot/files/src/preview/vercel-from-pr.ts +123 -0
  468. package/workspace-snapshot/files/src/prompts/branch-name.ts +22 -0
  469. package/workspace-snapshot/files/src/prompts/builder.ts +88 -0
  470. package/workspace-snapshot/files/src/prompts/implementation.md +77 -0
  471. package/workspace-snapshot/files/src/prompts/integration-repair-builder.ts +65 -0
  472. package/workspace-snapshot/files/src/prompts/integration-repair.md +111 -0
  473. package/workspace-snapshot/files/src/prompts/planning.md +64 -0
  474. package/workspace-snapshot/files/src/prompts/revision-builder.ts +61 -0
  475. package/workspace-snapshot/files/src/prompts/revision.md +71 -0
  476. package/workspace-snapshot/files/src/resolver/allowed-repos.ts +18 -0
  477. package/workspace-snapshot/files/src/resolver/errors.ts +14 -0
  478. package/workspace-snapshot/files/src/resolver/normalize-repo.ts +32 -0
  479. package/workspace-snapshot/files/src/resolver/target-repo.ts +118 -0
  480. package/workspace-snapshot/files/src/runner/building-recovery.ts +26 -0
  481. package/workspace-snapshot/files/src/runner/dry-run.ts +137 -0
  482. package/workspace-snapshot/files/src/runner/errors.ts +70 -0
  483. package/workspace-snapshot/files/src/runner/execution-environment.ts +179 -0
  484. package/workspace-snapshot/files/src/runner/fixture.ts +25 -0
  485. package/workspace-snapshot/files/src/runner/idempotency.ts +507 -0
  486. package/workspace-snapshot/files/src/runner/orchestrator.ts +182 -0
  487. package/workspace-snapshot/files/src/runner/phase-args.ts +49 -0
  488. package/workspace-snapshot/files/src/runner/phase-infer.ts +67 -0
  489. package/workspace-snapshot/files/src/runner/phases/handoff.ts +615 -0
  490. package/workspace-snapshot/files/src/runner/phases/implementation.ts +617 -0
  491. package/workspace-snapshot/files/src/runner/phases/integration-repair.ts +613 -0
  492. package/workspace-snapshot/files/src/runner/phases/merge.ts +1202 -0
  493. package/workspace-snapshot/files/src/runner/phases/planning.ts +456 -0
  494. package/workspace-snapshot/files/src/runner/phases/production-sync.ts +308 -0
  495. package/workspace-snapshot/files/src/runner/phases/revision.ts +795 -0
  496. package/workspace-snapshot/files/src/runner/preflight.ts +218 -0
  497. package/workspace-snapshot/files/src/runner/resolve-route.ts +154 -0
  498. package/workspace-snapshot/files/src/setup/config-builder.ts +117 -0
  499. package/workspace-snapshot/files/src/setup/config-local-editor.ts +260 -0
  500. package/workspace-snapshot/files/src/setup/config-writer.ts +173 -0
  501. package/workspace-snapshot/files/src/setup/control-plane-readiness-server.ts +16 -0
  502. package/workspace-snapshot/files/src/setup/control-plane-readiness.ts +291 -0
  503. package/workspace-snapshot/files/src/setup/control-plane-setup-state.ts +60 -0
  504. package/workspace-snapshot/files/src/setup/control-plane-types.ts +121 -0
  505. package/workspace-snapshot/files/src/setup/doctor-summary.ts +96 -0
  506. package/workspace-snapshot/files/src/setup/env-merge.ts +266 -0
  507. package/workspace-snapshot/files/src/setup/env-writer.ts +179 -0
  508. package/workspace-snapshot/files/src/setup/first-run-readiness.ts +1431 -0
  509. package/workspace-snapshot/files/src/setup/generated-instructions.ts +96 -0
  510. package/workspace-snapshot/files/src/setup/github-dispatch-token.ts +88 -0
  511. package/workspace-snapshot/files/src/setup/github-remote-provider.ts +983 -0
  512. package/workspace-snapshot/files/src/setup/github-remote-setup-live.ts +775 -0
  513. package/workspace-snapshot/files/src/setup/github-repo-slug.ts +31 -0
  514. package/workspace-snapshot/files/src/setup/github-secret-encryption.ts +16 -0
  515. package/workspace-snapshot/files/src/setup/github-upload-rate-limit-gate.ts +58 -0
  516. package/workspace-snapshot/files/src/setup/github-workflow-permissions.ts +174 -0
  517. package/workspace-snapshot/files/src/setup/gui-view-model.ts +566 -0
  518. package/workspace-snapshot/files/src/setup/guided-config-form.ts +52 -0
  519. package/workspace-snapshot/files/src/setup/harness-dispatch-repo.ts +158 -0
  520. package/workspace-snapshot/files/src/setup/harness-managed-repo-marker.ts +653 -0
  521. package/workspace-snapshot/files/src/setup/harness-provisioning-context.ts +331 -0
  522. package/workspace-snapshot/files/src/setup/harness-provisioning-pending-state.ts +282 -0
  523. package/workspace-snapshot/files/src/setup/harness-repo-provisioning.ts +1656 -0
  524. package/workspace-snapshot/files/src/setup/harness-secret-fingerprint.ts +51 -0
  525. package/workspace-snapshot/files/src/setup/harness-secret-setup.ts +439 -0
  526. package/workspace-snapshot/files/src/setup/harness-snapshot-provisioning-helpers.ts +92 -0
  527. package/workspace-snapshot/files/src/setup/harness-snapshot-provisioning.ts +1007 -0
  528. package/workspace-snapshot/files/src/setup/harness-template-identity.ts +151 -0
  529. package/workspace-snapshot/files/src/setup/harness-workspace-snapshot-loader.ts +105 -0
  530. package/workspace-snapshot/files/src/setup/linear-setup-apply.ts +270 -0
  531. package/workspace-snapshot/files/src/setup/linear-setup-client.ts +276 -0
  532. package/workspace-snapshot/files/src/setup/linear-setup-plan.ts +353 -0
  533. package/workspace-snapshot/files/src/setup/linear-setup-summary.ts +33 -0
  534. package/workspace-snapshot/files/src/setup/linear-status-contract.ts +110 -0
  535. package/workspace-snapshot/files/src/setup/linear-webhook-env-local.ts +104 -0
  536. package/workspace-snapshot/files/src/setup/linear-webhook-secret.ts +441 -0
  537. package/workspace-snapshot/files/src/setup/local-apply-actions.ts +524 -0
  538. package/workspace-snapshot/files/src/setup/local-readiness-checks.ts +334 -0
  539. package/workspace-snapshot/files/src/setup/mock-git-repository-store.ts +291 -0
  540. package/workspace-snapshot/files/src/setup/mock-target-workflow-finalization.ts +445 -0
  541. package/workspace-snapshot/files/src/setup/model-settings.ts +73 -0
  542. package/workspace-snapshot/files/src/setup/permission-model.ts +79 -0
  543. package/workspace-snapshot/files/src/setup/redact-secrets.ts +85 -0
  544. package/workspace-snapshot/files/src/setup/remote-actions.ts +214 -0
  545. package/workspace-snapshot/files/src/setup/remote-apply-actions.ts +390 -0
  546. package/workspace-snapshot/files/src/setup/remote-preview-fingerprint.ts +37 -0
  547. package/workspace-snapshot/files/src/setup/remote-setup-summary.ts +143 -0
  548. package/workspace-snapshot/files/src/setup/secret-change-token.ts +14 -0
  549. package/workspace-snapshot/files/src/setup/service-verification.ts +549 -0
  550. package/workspace-snapshot/files/src/setup/setup-actions.ts +183 -0
  551. package/workspace-snapshot/files/src/setup/setup-github-auth.ts +15 -0
  552. package/workspace-snapshot/files/src/setup/setup-state.ts +74 -0
  553. package/workspace-snapshot/files/src/setup/stale-smoke-repo.ts +141 -0
  554. package/workspace-snapshot/files/src/setup/sync-downstream-summaries.ts +105 -0
  555. package/workspace-snapshot/files/src/setup/target-workflow-finalization-lock.ts +95 -0
  556. package/workspace-snapshot/files/src/setup/target-workflow-finalization-types.ts +55 -0
  557. package/workspace-snapshot/files/src/setup/target-workflow-finalization.ts +897 -0
  558. package/workspace-snapshot/files/src/setup/target-workflow-setup.ts +247 -0
  559. package/workspace-snapshot/files/src/setup/test-only-provisioning-provider.ts +51 -0
  560. package/workspace-snapshot/files/src/setup/test-only-remote-setup-provider.ts +51 -0
  561. package/workspace-snapshot/files/src/setup/tweetsodium.d.ts +14 -0
  562. package/workspace-snapshot/files/src/setup/vercel-bridge-diagnostics.ts +510 -0
  563. package/workspace-snapshot/files/src/setup/vercel-bridge-options.ts +160 -0
  564. package/workspace-snapshot/files/src/setup/vercel-bridge-readiness.ts +150 -0
  565. package/workspace-snapshot/files/src/setup/vercel-bridge-redeploy-poll.ts +744 -0
  566. package/workspace-snapshot/files/src/setup/vercel-bridge-redeploy-state.ts +46 -0
  567. package/workspace-snapshot/files/src/setup/vercel-bridge-structured-log.ts +86 -0
  568. package/workspace-snapshot/files/src/setup/vercel-bridge-verification.ts +63 -0
  569. package/workspace-snapshot/files/src/setup/vercel-production-redeploy.ts +298 -0
  570. package/workspace-snapshot/files/src/setup/vercel-setup-apply.ts +1058 -0
  571. package/workspace-snapshot/files/src/setup/vercel-setup-client.ts +695 -0
  572. package/workspace-snapshot/files/src/setup/vercel-setup-plan.ts +672 -0
  573. package/workspace-snapshot/files/src/setup/vercel-setup-summary.ts +42 -0
  574. package/workspace-snapshot/files/src/setup/vercel-webhook-probe.ts +161 -0
  575. package/workspace-snapshot/files/src/setup/workflow-install-merge-errors.ts +166 -0
  576. package/workspace-snapshot/files/src/types/parsed-issue.ts +8 -0
  577. package/workspace-snapshot/files/src/types/run.ts +157 -0
  578. package/workspace-snapshot/files/src/validate/constants.ts +2 -0
  579. package/workspace-snapshot/files/src/validate/issue.ts +286 -0
  580. package/workspace-snapshot/files/src/validate/report.ts +68 -0
  581. package/workspace-snapshot/files/src/validate/types.ts +29 -0
  582. package/workspace-snapshot/files/src/webhook/dispatch-github.ts +44 -0
  583. package/workspace-snapshot/files/src/webhook/dispatch-statuses.ts +26 -0
  584. package/workspace-snapshot/files/src/webhook/extract-issue-key.ts +49 -0
  585. package/workspace-snapshot/files/src/webhook/filter.ts +41 -0
  586. package/workspace-snapshot/files/src/webhook/handle-linear-webhook.ts +201 -0
  587. package/workspace-snapshot/files/src/webhook/parse-linear-issue-event.ts +105 -0
  588. package/workspace-snapshot/files/src/webhook/redact-log.ts +26 -0
  589. package/workspace-snapshot/files/src/webhook/types.ts +75 -0
  590. package/workspace-snapshot/files/src/webhook/verify.ts +68 -0
  591. package/workspace-snapshot/files/src/webhook/workflow-command.ts +10 -0
  592. package/workspace-snapshot/files/src/workflow/dispatch-metadata.ts +59 -0
  593. package/workspace-snapshot/files/src/workflow/manifest-summary.ts +57 -0
  594. package/workspace-snapshot/files/src/workflow/production-sync-dispatch.ts +65 -0
  595. package/workspace-snapshot/files/src/workflow/summarize-manifest.ts +20 -0
  596. package/workspace-snapshot/files/src/workflow/validate.ts +43 -0
  597. package/workspace-snapshot/files/src/workflow/write-dispatch-metadata.ts +8 -0
  598. package/workspace-snapshot/files/templates/eval-scorecard.md +54 -0
  599. package/workspace-snapshot/files/templates/implementation-plan.md +59 -0
  600. package/workspace-snapshot/files/templates/linear-issue.md +53 -0
  601. package/workspace-snapshot/files/templates/pr-readiness-report.md +57 -0
  602. package/workspace-snapshot/files/tests/agents/cursor-provider.test.ts +238 -0
  603. package/workspace-snapshot/files/tests/artifacts/manifest.test.ts +54 -0
  604. package/workspace-snapshot/files/tests/artifacts/redact.test.ts +47 -0
  605. package/workspace-snapshot/files/tests/cli/doctor.test.ts +120 -0
  606. package/workspace-snapshot/files/tests/cli/finalize-exit.test.ts +28 -0
  607. package/workspace-snapshot/files/tests/cli/operator-init.test.ts +146 -0
  608. package/workspace-snapshot/files/tests/cli/sync-production-dispatch.test.ts +103 -0
  609. package/workspace-snapshot/files/tests/cli/validate-issue.test.ts +99 -0
  610. package/workspace-snapshot/files/tests/config/load-dotenv.test.ts +64 -0
  611. package/workspace-snapshot/files/tests/config/resolve-config.test.ts +273 -0
  612. package/workspace-snapshot/files/tests/config/schema.test.ts +107 -0
  613. package/workspace-snapshot/files/tests/cursor/agent-factory.test.ts +217 -0
  614. package/workspace-snapshot/files/tests/cursor/git-result.test.ts +77 -0
  615. package/workspace-snapshot/files/tests/cursor/model.test.ts +108 -0
  616. package/workspace-snapshot/files/tests/cursor/revision-git-result.test.ts +68 -0
  617. package/workspace-snapshot/files/tests/cursor/run-cleanup.test.ts +52 -0
  618. package/workspace-snapshot/files/tests/cursor/run-observer.test.ts +280 -0
  619. package/workspace-snapshot/files/tests/cursor/urls.test.ts +27 -0
  620. package/workspace-snapshot/files/tests/fixtures/config/minimal.json +16 -0
  621. package/workspace-snapshot/files/tests/fixtures/github/pr-4-vercel-comment.json +10 -0
  622. package/workspace-snapshot/files/tests/fixtures/issues/broad-for-direct-impl.md +28 -0
  623. package/workspace-snapshot/files/tests/fixtures/issues/context-target-repo.md +21 -0
  624. package/workspace-snapshot/files/tests/fixtures/issues/explicit-target-repo.md +21 -0
  625. package/workspace-snapshot/files/tests/fixtures/issues/gpt-broad-example.md +35 -0
  626. package/workspace-snapshot/files/tests/fixtures/issues/gpt-narrow-example.md +30 -0
  627. package/workspace-snapshot/files/tests/fixtures/issues/invalid-missing-task.md +16 -0
  628. package/workspace-snapshot/files/tests/fixtures/issues/invalid-no-ac-bullets.md +20 -0
  629. package/workspace-snapshot/files/tests/fixtures/issues/missing-acceptance-criteria.md +17 -0
  630. package/workspace-snapshot/files/tests/fixtures/issues/unknown-repo.md +20 -0
  631. package/workspace-snapshot/files/tests/fixtures/issues/valid-minimal.md +20 -0
  632. package/workspace-snapshot/files/tests/fixtures/issues/valid-project-only.md +17 -0
  633. package/workspace-snapshot/files/tests/fixtures/issues/valid-target-app.md +31 -0
  634. package/workspace-snapshot/files/tests/fixtures/linear/implementation-comment-wes-13.md +16 -0
  635. package/workspace-snapshot/files/tests/fixtures/linear/pm-feedback-wes-13.md +3 -0
  636. package/workspace-snapshot/files/tests/fixtures/webhook/issue-building-to-pr-open.json +27 -0
  637. package/workspace-snapshot/files/tests/fixtures/webhook/issue-pm-review.json +27 -0
  638. package/workspace-snapshot/files/tests/fixtures/webhook/issue-ready-for-planning.json +27 -0
  639. package/workspace-snapshot/files/tests/fixtures/webhook/issue-title-only-update.json +25 -0
  640. package/workspace-snapshot/files/tests/fixtures/workflows/harness-auto-runner-with-production-sync.yml +561 -0
  641. package/workspace-snapshot/files/tests/fixtures/workflows/trigger-harness-production-sync.yml +31 -0
  642. package/workspace-snapshot/files/tests/github/actions-url.test.ts +45 -0
  643. package/workspace-snapshot/files/tests/github/base-branch.test.ts +156 -0
  644. package/workspace-snapshot/files/tests/github/check-policy.test.ts +59 -0
  645. package/workspace-snapshot/files/tests/github/client.test.ts +226 -0
  646. package/workspace-snapshot/files/tests/github/commit-reachability.test.ts +148 -0
  647. package/workspace-snapshot/files/tests/github/merge-result.test.ts +26 -0
  648. package/workspace-snapshot/files/tests/github/pr-discovery.test.ts +55 -0
  649. package/workspace-snapshot/files/tests/github/pr-inspector.test.ts +393 -0
  650. package/workspace-snapshot/files/tests/github/pr-url.test.ts +30 -0
  651. package/workspace-snapshot/files/tests/github/rate-limit-metadata.test.ts +92 -0
  652. package/workspace-snapshot/files/tests/gui/configure-fix-loop.test.ts +460 -0
  653. package/workspace-snapshot/files/tests/gui/configure-health.test.ts +67 -0
  654. package/workspace-snapshot/files/tests/gui/design-system.test.ts +86 -0
  655. package/workspace-snapshot/files/tests/gui/dev-server-process.test.ts +22 -0
  656. package/workspace-snapshot/files/tests/gui/guided-setup.test.ts +186 -0
  657. package/workspace-snapshot/files/tests/gui/m6-configure-boundaries.test.ts +884 -0
  658. package/workspace-snapshot/files/tests/gui/packaged-harness-cloud-secrets-routes.test.ts +287 -0
  659. package/workspace-snapshot/files/tests/gui/packaged-harness-provisioning-routes.test.ts +212 -0
  660. package/workspace-snapshot/files/tests/gui/packaged-harness-target-workflow-routes.test.ts +227 -0
  661. package/workspace-snapshot/files/tests/gui/port.test.ts +74 -0
  662. package/workspace-snapshot/files/tests/gui/repo-root.test.ts +60 -0
  663. package/workspace-snapshot/files/tests/gui/setup-api.test.ts +181 -0
  664. package/workspace-snapshot/files/tests/gui/setup-json-response.test.ts +34 -0
  665. package/workspace-snapshot/files/tests/gui/step6-remote-state.test.ts +75 -0
  666. package/workspace-snapshot/files/tests/gui/sync-downstream-summaries.test.ts +198 -0
  667. package/workspace-snapshot/files/tests/gui/vercel-bridge-polling-ui.test.ts +25 -0
  668. package/workspace-snapshot/files/tests/gui/verification-state.test.ts +172 -0
  669. package/workspace-snapshot/files/tests/linear/comment-assertions.ts +24 -0
  670. package/workspace-snapshot/files/tests/linear/comment-card.test.ts +73 -0
  671. package/workspace-snapshot/files/tests/linear/comments.test.ts +185 -0
  672. package/workspace-snapshot/files/tests/linear/handoff-comment.test.ts +34 -0
  673. package/workspace-snapshot/files/tests/linear/markers.test.ts +97 -0
  674. package/workspace-snapshot/files/tests/linear/merge-comment.test.ts +61 -0
  675. package/workspace-snapshot/files/tests/linear/merge-source-comment.test.ts +49 -0
  676. package/workspace-snapshot/files/tests/linear/parser.test.ts +83 -0
  677. package/workspace-snapshot/files/tests/linear/planning-comment.test.ts +29 -0
  678. package/workspace-snapshot/files/tests/linear/pm-feedback-comment.test.ts +63 -0
  679. package/workspace-snapshot/files/tests/p-dev/browser.test.ts +38 -0
  680. package/workspace-snapshot/files/tests/p-dev/cli.test.ts +39 -0
  681. package/workspace-snapshot/files/tests/p-dev/git-object-plumbing.test.ts +139 -0
  682. package/workspace-snapshot/files/tests/p-dev/launch.test.ts +110 -0
  683. package/workspace-snapshot/files/tests/p-dev/next-bin.test.ts +16 -0
  684. package/workspace-snapshot/files/tests/p-dev/node-version.test.ts +20 -0
  685. package/workspace-snapshot/files/tests/p-dev/package-manifest.test.ts +47 -0
  686. package/workspace-snapshot/files/tests/p-dev/package-packed-artifact.test.ts +130 -0
  687. package/workspace-snapshot/files/tests/p-dev/package-paths.test.ts +43 -0
  688. package/workspace-snapshot/files/tests/p-dev/package-version.test.ts +55 -0
  689. package/workspace-snapshot/files/tests/p-dev/packaged-workspace-setup.test.ts +87 -0
  690. package/workspace-snapshot/files/tests/p-dev/runtime-mode.test.ts +18 -0
  691. package/workspace-snapshot/files/tests/p-dev/workspace-snapshot-digest.test.ts +61 -0
  692. package/workspace-snapshot/files/tests/p-dev/workspace-snapshot-generator.test.ts +76 -0
  693. package/workspace-snapshot/files/tests/p-dev/workspace-snapshot-policy.test.ts +35 -0
  694. package/workspace-snapshot/files/tests/p-dev/workspace-snapshot-validation.test.ts +158 -0
  695. package/workspace-snapshot/files/tests/p-dev/workspace.test.ts +80 -0
  696. package/workspace-snapshot/files/tests/preview/production-from-merge.test.ts +39 -0
  697. package/workspace-snapshot/files/tests/preview/vercel-from-pr.test.ts +120 -0
  698. package/workspace-snapshot/files/tests/prompts/builder.test.ts +58 -0
  699. package/workspace-snapshot/files/tests/prompts/implementation-builder.test.ts +76 -0
  700. package/workspace-snapshot/files/tests/prompts/issue-intake-chatgpt.test.ts +105 -0
  701. package/workspace-snapshot/files/tests/resolver/allowed-repos.test.ts +44 -0
  702. package/workspace-snapshot/files/tests/resolver/normalize-repo.test.ts +44 -0
  703. package/workspace-snapshot/files/tests/resolver/target-repo.test.ts +91 -0
  704. package/workspace-snapshot/files/tests/runner/building-recovery.test.ts +30 -0
  705. package/workspace-snapshot/files/tests/runner/dry-run.test.ts +128 -0
  706. package/workspace-snapshot/files/tests/runner/execution-environment.test.ts +114 -0
  707. package/workspace-snapshot/files/tests/runner/handoff.test.ts +312 -0
  708. package/workspace-snapshot/files/tests/runner/idempotency-handoff.test.ts +170 -0
  709. package/workspace-snapshot/files/tests/runner/idempotency-implementation.test.ts +143 -0
  710. package/workspace-snapshot/files/tests/runner/idempotency-merge.test.ts +118 -0
  711. package/workspace-snapshot/files/tests/runner/idempotency-revision.test.ts +111 -0
  712. package/workspace-snapshot/files/tests/runner/idempotency.test.ts +83 -0
  713. package/workspace-snapshot/files/tests/runner/implementation.test.ts +196 -0
  714. package/workspace-snapshot/files/tests/runner/integration-repair.test.ts +263 -0
  715. package/workspace-snapshot/files/tests/runner/merge.test.ts +760 -0
  716. package/workspace-snapshot/files/tests/runner/orchestrator.test.ts +301 -0
  717. package/workspace-snapshot/files/tests/runner/phase-args.test.ts +38 -0
  718. package/workspace-snapshot/files/tests/runner/planning.test.ts +160 -0
  719. package/workspace-snapshot/files/tests/runner/resolve-route.test.ts +249 -0
  720. package/workspace-snapshot/files/tests/runner/revision.test.ts +326 -0
  721. package/workspace-snapshot/files/tests/setup/config-builder.test.ts +136 -0
  722. package/workspace-snapshot/files/tests/setup/config-local-editor.test.ts +164 -0
  723. package/workspace-snapshot/files/tests/setup/connect-services-credential-availability.test.ts +151 -0
  724. package/workspace-snapshot/files/tests/setup/connect-services-env.test.ts +84 -0
  725. package/workspace-snapshot/files/tests/setup/control-plane-readiness.test.ts +59 -0
  726. package/workspace-snapshot/files/tests/setup/doctor-summary.test.ts +48 -0
  727. package/workspace-snapshot/files/tests/setup/env-merge.test.ts +177 -0
  728. package/workspace-snapshot/files/tests/setup/env-writer.test.ts +97 -0
  729. package/workspace-snapshot/files/tests/setup/first-run-readiness.test.ts +1099 -0
  730. package/workspace-snapshot/files/tests/setup/generated-instructions.test.ts +48 -0
  731. package/workspace-snapshot/files/tests/setup/github-dispatch-token.test.ts +111 -0
  732. package/workspace-snapshot/files/tests/setup/github-remote-provider.test.ts +66 -0
  733. package/workspace-snapshot/files/tests/setup/github-remote-setup-live.test.ts +59 -0
  734. package/workspace-snapshot/files/tests/setup/github-workflow-permissions.test.ts +71 -0
  735. package/workspace-snapshot/files/tests/setup/gui-remote-storage.test.ts +43 -0
  736. package/workspace-snapshot/files/tests/setup/gui-view-model.test.ts +251 -0
  737. package/workspace-snapshot/files/tests/setup/guided-config-form.test.ts +54 -0
  738. package/workspace-snapshot/files/tests/setup/harness-dispatch-repo.test.ts +105 -0
  739. package/workspace-snapshot/files/tests/setup/harness-managed-repo-marker.test.ts +141 -0
  740. package/workspace-snapshot/files/tests/setup/harness-provisioning-context.test.ts +89 -0
  741. package/workspace-snapshot/files/tests/setup/harness-provisioning-pending-state.test.ts +88 -0
  742. package/workspace-snapshot/files/tests/setup/harness-repo-provisioning.test.ts +897 -0
  743. package/workspace-snapshot/files/tests/setup/harness-secret-setup.test.ts +255 -0
  744. package/workspace-snapshot/files/tests/setup/harness-snapshot-default-branch.test.ts +73 -0
  745. package/workspace-snapshot/files/tests/setup/harness-snapshot-description-finalization.test.ts +136 -0
  746. package/workspace-snapshot/files/tests/setup/harness-snapshot-marker-tree.test.ts +61 -0
  747. package/workspace-snapshot/files/tests/setup/harness-snapshot-reconciliation.test.ts +132 -0
  748. package/workspace-snapshot/files/tests/setup/harness-snapshot-structured-errors.test.ts +137 -0
  749. package/workspace-snapshot/files/tests/setup/harness-snapshot-upload-rate-limit.test.ts +105 -0
  750. package/workspace-snapshot/files/tests/setup/linear-setup-apply.test.ts +131 -0
  751. package/workspace-snapshot/files/tests/setup/linear-setup-plan.test.ts +106 -0
  752. package/workspace-snapshot/files/tests/setup/linear-webhook-env-local.test.ts +95 -0
  753. package/workspace-snapshot/files/tests/setup/linear-webhook-secret.test.ts +256 -0
  754. package/workspace-snapshot/files/tests/setup/live-provisioning-error-preservation.test.ts +98 -0
  755. package/workspace-snapshot/files/tests/setup/local-apply-actions.test.ts +352 -0
  756. package/workspace-snapshot/files/tests/setup/local-readiness-checks.test.ts +175 -0
  757. package/workspace-snapshot/files/tests/setup/model-settings.test.ts +52 -0
  758. package/workspace-snapshot/files/tests/setup/packaged-provisioning-permissions.test.ts +41 -0
  759. package/workspace-snapshot/files/tests/setup/permission-model.test.ts +38 -0
  760. package/workspace-snapshot/files/tests/setup/redact-secrets.test.ts +78 -0
  761. package/workspace-snapshot/files/tests/setup/remote-actions.test.ts +45 -0
  762. package/workspace-snapshot/files/tests/setup/remote-apply-actions.test.ts +302 -0
  763. package/workspace-snapshot/files/tests/setup/remote-preview-fingerprint.test.ts +121 -0
  764. package/workspace-snapshot/files/tests/setup/service-verification.test.ts +312 -0
  765. package/workspace-snapshot/files/tests/setup/setup-actions.test.ts +96 -0
  766. package/workspace-snapshot/files/tests/setup/setup-form-defaults.test.ts +35 -0
  767. package/workspace-snapshot/files/tests/setup/setup-server-remote.test.ts +90 -0
  768. package/workspace-snapshot/files/tests/setup/stale-smoke-repo.test.ts +84 -0
  769. package/workspace-snapshot/files/tests/setup/step6-automatic-apply-outcome.test.ts +303 -0
  770. package/workspace-snapshot/files/tests/setup/target-workflow-finalization-lock.test.ts +51 -0
  771. package/workspace-snapshot/files/tests/setup/target-workflow-finalization-step-github.test.ts +435 -0
  772. package/workspace-snapshot/files/tests/setup/target-workflow-finalization.test.ts +222 -0
  773. package/workspace-snapshot/files/tests/setup/target-workflow-setup.test.ts +62 -0
  774. package/workspace-snapshot/files/tests/setup/test-workspace-snapshot-fixture.ts +100 -0
  775. package/workspace-snapshot/files/tests/setup/vercel-bridge-diagnostics.test.ts +429 -0
  776. package/workspace-snapshot/files/tests/setup/vercel-bridge-options.test.ts +135 -0
  777. package/workspace-snapshot/files/tests/setup/vercel-bridge-preview-fingerprint.test.ts +52 -0
  778. package/workspace-snapshot/files/tests/setup/vercel-bridge-redeploy-poll.test.ts +582 -0
  779. package/workspace-snapshot/files/tests/setup/vercel-bridge-structured-log.test.ts +45 -0
  780. package/workspace-snapshot/files/tests/setup/vercel-bridge-verification.test.ts +39 -0
  781. package/workspace-snapshot/files/tests/setup/vercel-endpoint-reachability.test.ts +60 -0
  782. package/workspace-snapshot/files/tests/setup/vercel-production-redeploy.test.ts +184 -0
  783. package/workspace-snapshot/files/tests/setup/vercel-setup-apply.test.ts +1282 -0
  784. package/workspace-snapshot/files/tests/setup/vercel-setup-client.test.ts +395 -0
  785. package/workspace-snapshot/files/tests/setup/vercel-setup-plan.test.ts +261 -0
  786. package/workspace-snapshot/files/tests/setup/vercel-webhook-probe.test.ts +78 -0
  787. package/workspace-snapshot/files/tests/setup/workflow-install-merge-errors.test.ts +38 -0
  788. package/workspace-snapshot/files/tests/validate-issue/report.test.ts +56 -0
  789. package/workspace-snapshot/files/tests/validate-issue/validate-issue.test.ts +202 -0
  790. package/workspace-snapshot/files/tests/webhook/dispatch-github.test.ts +193 -0
  791. package/workspace-snapshot/files/tests/webhook/extract-issue-key.test.ts +65 -0
  792. package/workspace-snapshot/files/tests/webhook/filter.test.ts +132 -0
  793. package/workspace-snapshot/files/tests/webhook/harness-auto-runner-workflow.test.ts +169 -0
  794. package/workspace-snapshot/files/tests/webhook/parse-linear-issue-event.test.ts +89 -0
  795. package/workspace-snapshot/files/tests/webhook/verify.test.ts +125 -0
  796. package/workspace-snapshot/files/tests/workflow/dispatch-metadata.test.ts +38 -0
  797. package/workspace-snapshot/files/tests/workflow/manifest-summary.test.ts +58 -0
  798. package/workspace-snapshot/files/tests/workflow/production-sync-dispatch.test.ts +101 -0
  799. package/workspace-snapshot/files/tests/workflow/validate.test.ts +70 -0
  800. package/workspace-snapshot/files/tests/workflow/workflow-shell-safety.test.ts +92 -0
  801. package/workspace-snapshot/files/tsconfig.json +22 -0
  802. package/workspace-snapshot/files/vercel.json +10 -0
  803. package/workspace-snapshot/files/vitest.config.ts +15 -0
  804. package/workspace-snapshot/manifest.json +4911 -0
  805. package/gui/.next/server/chunks/120.js +0 -81
  806. package/gui/.next/static/css/cc2acc71c03f3b4b.css +0 -3
  807. /package/gui/.next/static/{7x8X_k4tESvkyqRnNCC9E → ZGJuemeaiW4yT7CTlmjdG}/_buildManifest.js +0 -0
  808. /package/gui/.next/static/{7x8X_k4tESvkyqRnNCC9E → ZGJuemeaiW4yT7CTlmjdG}/_ssgManifest.js +0 -0
@@ -0,0 +1,184 @@
1
+ # Linear watcher setup
2
+
3
+ Operator guide for the v0.3.0 event-driven auto-runner.
4
+
5
+ **Related:** [`docs/milestones/m8-linear-watcher.md`](milestones/m8-linear-watcher.md), [`ARCHITECTURE.md`](../ARCHITECTURE.md), [`docs/security.md`](security.md), [`docs/releases/v0.3.0.md`](releases/v0.3.0.md)
6
+
7
+ ---
8
+
9
+ ## Overview
10
+
11
+ When a Linear issue moves to an **actionable trigger status**, the harness runs automatically in GitHub Actions — no local `npm run harness:run` required.
12
+
13
+ ```text
14
+ Linear webhook → Vercel bridge → GitHub repository_dispatch → GitHub Actions → harness --phase auto
15
+ ```
16
+
17
+ ---
18
+
19
+ ## 1. Vercel webhook bridge
20
+
21
+ ### Create Vercel project
22
+
23
+ 1. Link this repo to Vercel (production branch: `main`).
24
+ 2. Deploy; endpoint path is `/api/linear-webhook`.
25
+
26
+ ### Vercel environment variables (Production)
27
+
28
+ | Variable | Required | Notes |
29
+ |----------|----------|-------|
30
+ | `LINEAR_WEBHOOK_SECRET` | yes | From Linear webhook signing secret |
31
+ | `GITHUB_DISPATCH_TOKEN` | yes | See [GitHub dispatch token](#github-dispatch-token) |
32
+ | `GITHUB_DISPATCH_REPOSITORY` | no | Default: `weston-uribe/agentic-product-development-harness` |
33
+ | `GITHUB_DISPATCH_EVENT_TYPE` | no | Default: `linear_issue_status_changed` |
34
+ | `LINEAR_WEBHOOK_TIMESTAMP_TOLERANCE_MS` | no | Default: `60000` |
35
+ | `HARNESS_TEAM_KEY` | **yes in production** | Set to `WES` — reject non-team issue keys |
36
+
37
+ **Do not** put `LINEAR_API_KEY`, `CURSOR_API_KEY`, or merge-capable `GITHUB_TOKEN` in Vercel. See [`docs/security.md`](security.md) for the full token matrix.
38
+
39
+ ### GitHub dispatch token
40
+
41
+ `GITHUB_DISPATCH_TOKEN` must be able to call `POST /repos/{owner}/{repo}/dispatches`:
42
+
43
+ | PAT type | Required permission |
44
+ |----------|---------------------|
45
+ | **Fine-grained** | **Contents: write** on `weston-uribe/agentic-product-development-harness` only |
46
+ | **Classic** | **`repo` scope** |
47
+
48
+ - Contents: read is **not** sufficient.
49
+ - Scope the token to the harness repo only (fine-grained PAT).
50
+ - This token triggers workflows; it does not need access to target repos.
51
+
52
+ ---
53
+
54
+ ## 2. GitHub Actions secrets
55
+
56
+ In repo **Settings → Secrets and variables → Actions**:
57
+
58
+ | Secret | Used by |
59
+ |--------|---------|
60
+ | `LINEAR_API_KEY` | All live harness phases |
61
+ | `CURSOR_API_KEY` | planning, implementation, revision, merge repair fallback |
62
+ | `HARNESS_GITHUB_TOKEN` | handoff, revision, merge — mapped to runtime `GITHUB_TOKEN` in the workflow |
63
+
64
+ `HARNESS_GITHUB_TOKEN` must be a PAT with access to **target repos** used by the harness (e.g. target-app), including classic `repo` scope or equivalent fine-grained permissions for PR read, checks, merge, and PR branch repair. Fine-grained PATs need **Contents: Read and write** plus **Pull requests: Read and write** on target repos.
65
+
66
+ Run `npm run harness:doctor -- --profile merge` with `GITHUB_TOKEN` set before enabling merge automation. Doctor verifies target base branches and token write permission used by integration repair.
67
+
68
+ Do **not** name the Actions secret `GITHUB_TOKEN` — GitHub reserves that name for the auto-generated workflow token. The workflow maps `HARNESS_GITHUB_TOKEN` → `env: GITHUB_TOKEN` for the harness CLI.
69
+
70
+ ---
71
+
72
+ ## 3. Linear webhook
73
+
74
+ 1. Linear → **Settings → API → Webhooks → New webhook**
75
+ 2. URL: `https://<vercel-project>.vercel.app/api/linear-webhook`
76
+ 3. Team: WES (or all public teams)
77
+ 4. Resource types: **Issue** only
78
+ 5. Copy signing secret → Vercel `LINEAR_WEBHOOK_SECRET`
79
+
80
+ ### Dispatch allowlist (bridge filter)
81
+
82
+ The webhook **only dispatches GitHub Actions** when the issue's **current status** is:
83
+
84
+ - Ready for Planning
85
+ - Ready for Build
86
+ - PR Open
87
+ - Needs Revision
88
+ - Ready to Merge
89
+
90
+ All other statuses return HTTP 200 with `{ "accepted": false, "reason": "ignored_status" }` and **do not** start GHA. This includes transitional statuses the harness sets itself (Planning, Building, PM Review, Merging, Merged / Deployed).
91
+
92
+ Harness-initiated **Building → PR Open** still dispatches because `PR Open` is allowlisted.
93
+
94
+ ---
95
+
96
+ ## 4. Manual validation gates
97
+
98
+ ### Gate 1: Local / unit tests
99
+
100
+ ```bash
101
+ npm install
102
+ npm test
103
+ npm run build
104
+ npm run generate:config-schema
105
+ npm run harness:doctor
106
+ ```
107
+
108
+ Requires local `.env` with harness secrets for doctor checks.
109
+
110
+ ### Gate 2: workflow_dispatch
111
+
112
+ 1. Confirm GHA secrets are set.
113
+ 2. Actions → **Harness Auto Runner** → Run workflow.
114
+ 3. Input: `issue=WES-XX`, `phase=auto`.
115
+ 4. Confirm harness runs in cloud; download artifact with `runs/WES-XX/<run-id>/`.
116
+
117
+ For canceled or stuck integration repair while the issue is **Merging**, use `workflow_dispatch` with `issue=WES-XX`, `phase=merge`, and `force=true`. v1 intentionally does not dispatch from **Merging** automatically.
118
+
119
+ ### Gate 3: repository_dispatch
120
+
121
+ ```bash
122
+ gh api repos/weston-uribe/agentic-product-development-harness/dispatches \
123
+ -f event_type=linear_issue_status_changed \
124
+ -f client_payload[issueKey]=WES-XX \
125
+ -f client_payload[statusName]="Ready for Planning" \
126
+ -f client_payload[linearDeliveryId]=manual-test-1 \
127
+ -f client_payload[receivedAt]=$(date -u +%Y-%m-%dT%H:%M:%SZ)
128
+ ```
129
+
130
+ Confirm GHA run starts and executes `harness:run --phase auto`.
131
+
132
+ Use a PAT with Contents: write (fine-grained) or `repo` scope (classic).
133
+
134
+ ### Gate 4: Linear webhook live
135
+
136
+ 1. Deploy Vercel endpoint; configure Linear Issue webhook.
137
+ 2. Move test issue **Backlog → Ready for Planning** (or **Ready for Build**).
138
+ 3. Confirm Vercel log shows dispatch; GHA run starts; harness executes correct phase.
139
+ 4. Duplicate delivery: confirm idempotent skip, no harmful duplicate work.
140
+ 5. **Negative — PM Review:** After handoff, confirm `{ "reason": "ignored_status" }` and **no GHA run**.
141
+ 6. **Negative — Planning/Building:** Harness moves to transitional status; confirm `ignored_status`, no GHA.
142
+ 7. **Negative — title edit:** Edit title only; confirm `ignored_event`, no GHA.
143
+
144
+ ---
145
+
146
+ ## 5. Local webhook testing
147
+
148
+ ```bash
149
+ # Sign a fixture body
150
+ BODY=$(cat tests/fixtures/webhook/issue-ready-for-planning.json)
151
+ SIG=$(node -e "const c=require('crypto');console.log(c.createHmac('sha256',process.env.LINEAR_WEBHOOK_SECRET).update(process.argv[1]).digest('hex'))" "$BODY")
152
+
153
+ curl -X POST http://localhost:3000/api/linear-webhook \
154
+ -H "Content-Type: application/json" \
155
+ -H "Linear-Signature: $SIG" \
156
+ -H "Linear-Delivery: test-uuid" \
157
+ -H "Linear-Event: Issue" \
158
+ -H "Linear-Timestamp: 1700000000000" \
159
+ -d "$BODY"
160
+ ```
161
+
162
+ Use `vercel dev` for local endpoint testing.
163
+
164
+ ---
165
+
166
+ ## 6. Recovery
167
+
168
+ | Scenario | Recovery |
169
+ |----------|----------|
170
+ | GHA run failed after successful dispatch | Re-run via `workflow_dispatch` with same issue key |
171
+ | Dispatch failed (webhook 500) | Linear retries automatically; fix token/repo config |
172
+ | Wrong phase / stuck issue | Manual status change to allowlisted trigger status |
173
+
174
+ ---
175
+
176
+ ## 7. Failure responses (webhook)
177
+
178
+ | HTTP | Body | Meaning |
179
+ |------|------|---------|
180
+ | 401 | `invalid_signature` / `timestamp_out_of_tolerance` | Reject; fix secret or clock |
181
+ | 200 | `ignored_status` | Expected for non-trigger statuses |
182
+ | 200 | `ignored_event` | Non-Issue or no status change |
183
+ | 200 | `missing_issue_key` | Payload unusable; check Linear config |
184
+ | 500 | `dispatch_failed` | GitHub dispatch failed; Linear will retry |
@@ -0,0 +1,51 @@
1
+ # Milestone 1 — Runner foundation
2
+
3
+ **Status:** Implemented (dry-run path only)
4
+
5
+ ## What exists
6
+
7
+ - TypeScript CLI: `doctor`, `run --dry-run`, `inspect`
8
+ - `harness.config.json` with Zod validation and `allowedTargetRepos` allowlist
9
+ - Linear issue description parser (required sections + Target repo fallback)
10
+ - Target repo resolver (explicit field → project/team mapping → denial)
11
+ - Run artifacts under `runs/<issue>/<run-id>/` (gitignored)
12
+
13
+ ## Commands
14
+
15
+ ```bash
16
+ npm install
17
+ npm test
18
+ npm run harness:doctor
19
+ npm run harness:run -- --issue WES-FIXTURE --dry-run --fixture tests/fixtures/issues/valid-target-app.md
20
+ npm run harness:inspect -- --run runs/WES-FIXTURE/<run-id>
21
+ ```
22
+
23
+ Live Linear dry-run is optional when `LINEAR_API_KEY` is set in `.env`.
24
+
25
+ ## Required issue headers
26
+
27
+ - `## Target repo` (preferred) or `Target repo:` under Context and links
28
+ - `## Task` or `## Problem`
29
+ - `## Acceptance criteria`
30
+ - `## Out of scope`
31
+ - `## Validation expectations` (optional)
32
+
33
+ ## Deferred to later milestones
34
+
35
+ - Cursor SDK agent launch
36
+ - Linear status transitions and comments
37
+ - GitHub PR discovery and Vercel preview capture
38
+ - `harness:watch` poller
39
+ - Revision and merge/deploy loops
40
+
41
+ ## Authoritative workspace
42
+
43
+ Use `/Users/weston/Code/agentic-product-development-harness` (not the stale `.cursor` workspace clone).
44
+
45
+ ## Config schema
46
+
47
+ Zod schema: `src/config/schema.ts`. Regenerate JSON Schema (optional):
48
+
49
+ ```bash
50
+ npm run generate:config-schema
51
+ ```
@@ -0,0 +1,129 @@
1
+ # Milestone 2 — Planning phase
2
+
3
+ **Status:** Implemented (live planning path; no implementation agent)
4
+
5
+ ## What exists
6
+
7
+ - Live planning orchestration triggered from Linear **Ready for Planning**
8
+ - Cursor SDK **cloud** planning agent against the resolved target repo (not harness cwd)
9
+ - Linear status transitions: **Planning** → **Ready for Build** (or **Blocked** on failure after entering Planning)
10
+ - Planning comment posted to Linear with harness marker footer
11
+ - Idempotency guard via marker footer (`harness-orchestrator-v1`, `phase: planning`, `run_id`, cursor IDs, model, target repo)
12
+ - Extended artifacts, manifest fields, and JSONL events for planning runs
13
+ - Doctor checks `CURSOR_API_KEY` (required for live planning); model/repo listing is warn-only
14
+
15
+ ## What is deferred
16
+
17
+ - Implementation / build phase agent
18
+ - Branch creation, PR open, preview capture, watcher poller
19
+ - Revision and merge/deploy loops
20
+
21
+ ## Prerequisites
22
+
23
+ 1. Copy `.env.example` to `.env` and set:
24
+ - `LINEAR_API_KEY`
25
+ - `CURSOR_API_KEY`
26
+ 2. Target repo must be connected in Cursor cloud settings (validated by live planning run; doctor warns if `Cursor.repositories.list()` is unavailable).
27
+ 3. Linear issue must include required sections (see Milestone 1 docs) and be in **Ready for Planning**.
28
+
29
+ ## Commands
30
+
31
+ ```bash
32
+ npm install
33
+ npm test
34
+ npm run build
35
+
36
+ # Config and auth checks
37
+ npm run harness:doctor
38
+
39
+ # M1 regression (fixture, no network)
40
+ npm run harness:run -- --issue WES-FIXTURE --dry-run \
41
+ --fixture tests/fixtures/issues/valid-target-app.md
42
+
43
+ # Optional live preflight (read-only)
44
+ npm run harness:run -- --issue WES-XX --dry-run
45
+
46
+ # Live planning (manual integration gate)
47
+ npm run harness:run -- --issue WES-XX --phase planning
48
+
49
+ # Auto phase infers planning from issue status
50
+ npm run harness:run -- --issue WES-XX
51
+
52
+ # Re-run after partial failure (issue stuck in Planning)
53
+ npm run harness:run -- --issue WES-XX --phase planning --force
54
+
55
+ # Inspect artifacts
56
+ npm run harness:inspect -- --run runs/WES-XX/<run-id>
57
+ ```
58
+
59
+ ## Manual target-app integration test
60
+
61
+ Create a Linear issue in **Ready for Planning** targeting the target repo.
62
+
63
+ **Suggested task (planning-only, harmless):**
64
+
65
+ > Plan adding a temporary Hello World page and top-nav link. Do not implement.
66
+
67
+ **Required sections:** Target repo, Task, Acceptance criteria, Out of scope
68
+
69
+ **Run:**
70
+
71
+ ```bash
72
+ npm run harness:run -- --issue WES-XX --phase planning
73
+ ```
74
+
75
+ **Pass criteria:**
76
+
77
+ - Linear issue moves to **Ready for Build**
78
+ - One planning comment with full marker footer
79
+ - `runs/WES-XX/<run-id>/manifest.json` has `cursorAgentId`, `cursorRunId`, `finalOutcome: success`
80
+ - No PR or branch on the target repo
81
+ - Re-run without `--force` exits with duplicate skip and does not post a new comment
82
+
83
+ ## Artifacts (planning run)
84
+
85
+ ```text
86
+ runs/<issue>/<run-id>/
87
+ manifest.json
88
+ run-summary.md
89
+ events.jsonl
90
+ linear/
91
+ issue-snapshot-before.json
92
+ issue-snapshot-after.json
93
+ comments-written.md
94
+ prompts/
95
+ planning-agent.md
96
+ outputs/
97
+ planning-result.md
98
+ cursor/
99
+ run-result.json
100
+ errors/
101
+ error.json # on failure
102
+ ```
103
+
104
+ ## Exit codes
105
+
106
+ | Code | Meaning |
107
+ |------|---------|
108
+ | 0 | Success or duplicate skip |
109
+ | 1 | Config / CLI error |
110
+ | 2 | Preflight failure (parse, resolver, allowlist) |
111
+ | 3 | Planning phase failure after eligible start |
112
+
113
+ ## Authoritative workspace
114
+
115
+ Use `/Users/weston/Code/agentic-product-development-harness` (not the stale `.cursor` workspace clone).
116
+
117
+ ## Config
118
+
119
+ `harness.config.json` adds:
120
+
121
+ - `defaultModel` — Cursor model for planning agent
122
+ - `linear.transitionalStatuses.readyForBuild` — post-planning status
123
+ - `planning.timeoutSeconds` — cloud agent wait timeout (default 1800)
124
+
125
+ Regenerate JSON Schema (optional):
126
+
127
+ ```bash
128
+ npm run generate:config-schema
129
+ ```
@@ -0,0 +1,158 @@
1
+ # Milestone 3 — Implementation phase
2
+
3
+ **Status:** Implemented (live implementation path; no preview/revision/merge loop)
4
+
5
+ ## What exists
6
+
7
+ - Live implementation orchestration triggered from Linear **Ready for Build**
8
+ - Optional loading of the latest durable planning comment
9
+ - Cursor SDK **cloud** implementation agent against the resolved target repo
10
+ - Linear status transitions: **Building** → **PR Open** (or **Blocked** after entering Building)
11
+ - Branch and PR capture from Cursor SDK git metadata
12
+ - Implementation summary comment posted to Linear with harness marker footer
13
+ - Extended artifacts, manifest fields, and JSONL events for implementation runs
14
+
15
+ ## What is deferred
16
+
17
+ - Vercel preview capture
18
+ - PM Review transition
19
+ - Revision loop
20
+ - Watcher/poller
21
+ - Merge/deploy automation
22
+ - Releases and skills
23
+
24
+ ## Prerequisites
25
+
26
+ 1. Copy `.env.example` to `.env` and set:
27
+ - `LINEAR_API_KEY`
28
+ - `CURSOR_API_KEY`
29
+ 2. Target repo must be connected in Cursor cloud settings.
30
+ 3. Linear issue must include required sections and be in **Ready for Build**.
31
+
32
+ ## Commands
33
+
34
+ ```bash
35
+ npm install
36
+ npm test
37
+ npm run build
38
+
39
+ # Config and auth checks
40
+ npm run harness:doctor
41
+
42
+ # M1 regression (fixture, no network)
43
+ npm run harness:run -- --issue WES-FIXTURE --dry-run \
44
+ --fixture tests/fixtures/issues/valid-target-app.md
45
+
46
+ # Live implementation
47
+ npm run harness:run -- --issue WES-12 --phase implementation
48
+
49
+ # Auto phase infers implementation from Ready for Build
50
+ npm run harness:run -- --issue WES-12
51
+
52
+ # Retry after partial failure when issue is stuck in Building
53
+ npm run harness:run -- --issue WES-12 --phase implementation --force
54
+
55
+ # Inspect artifacts
56
+ npm run harness:inspect -- --run runs/WES-12/<run-id>
57
+ ```
58
+
59
+ ## Manual target-app integration gate
60
+
61
+ Do **not** use WES-11. WES-11 was the Milestone 2 planning-only gate and explicitly prohibited implementation, branches, and PRs.
62
+
63
+ Create a new Linear issue, likely **WES-12**.
64
+
65
+ **Title:** M3 implementation integration test — target app hello world
66
+
67
+ **Status:** Ready for Build
68
+
69
+ **Labels:** `harness`, `target-app`, `implementation-agent`
70
+
71
+ **Description:**
72
+
73
+ ```markdown
74
+ ## Target repo
75
+ owner/example-target-app
76
+
77
+ ## Task
78
+ Add a temporary Hello World page to the target app and add a top-nav link to that page.
79
+
80
+ ## Acceptance criteria
81
+ - [ ] A temporary Hello World page exists in the target app
82
+ - [ ] A visible top-nav link opens the Hello World page
83
+ - [ ] The change is narrow and reversible
84
+ - [ ] Validation commands are run
85
+ - [ ] A PR is opened against the target repo
86
+ - [ ] No merge is performed
87
+ - [ ] No preview capture or PM Review transition is required in this milestone
88
+
89
+ ## Out of scope
90
+ - [ ] Merging the PR
91
+ - [ ] Capturing Vercel preview
92
+ - [ ] Moving the issue to PM Review
93
+ - [ ] Revision loop
94
+ - [ ] Merge/deploy automation
95
+ - [ ] Editing the harness repo except through orchestrator code
96
+ - [ ] Releases
97
+ - [ ] Skills
98
+
99
+ ## Validation expectations
100
+ Run the target repo validation commands from harness config, expected to include npm run lint and npm run build if available.
101
+ ```
102
+
103
+ **Pass criteria:**
104
+
105
+ - Issue moves **Ready for Build** → **Building** → **PR Open**
106
+ - PR opens against `owner/example-target-app`
107
+ - Branch matches `cursor/<issue-key>-*`
108
+ - One implementation comment includes marker footer with `branch` and `pr_url`
109
+ - `manifest.json` has `finalOutcome: success`, `branch`, `prUrl`, `cursorAgentId`, `cursorRunId`
110
+ - No merge, PM Review transition, or preview capture
111
+ - Re-run without `--force` exits with duplicate skip
112
+
113
+ ## Artifacts
114
+
115
+ ```text
116
+ runs/<issue>/<run-id>/
117
+ manifest.json
118
+ run-summary.md
119
+ events.jsonl
120
+ linear/
121
+ issue-snapshot-before.json
122
+ issue-snapshot-after.json
123
+ planning-comment-loaded.md
124
+ comments-written.md
125
+ prompts/
126
+ implementation-agent.md
127
+ outputs/
128
+ implementation-result.md
129
+ cursor/
130
+ run-result.json
131
+ github/
132
+ pr-metadata.json
133
+ errors/
134
+ error.json # on failure
135
+ ```
136
+
137
+ ## Exit codes
138
+
139
+ | Code | Meaning |
140
+ |------|---------|
141
+ | 0 | Success or duplicate skip |
142
+ | 1 | Config / CLI error |
143
+ | 2 | Preflight or eligibility failure |
144
+ | 3 | Live phase failure after eligible start |
145
+
146
+ ## Config
147
+
148
+ `harness.config.json` includes:
149
+
150
+ - `implementation.timeoutSeconds` — cloud agent wait timeout
151
+ - `implementation.branchPrefix` — deterministic branch prefix
152
+ - `repos[].validation.commands` — target-repo validation commands included in the implementation prompt
153
+
154
+ Regenerate JSON Schema after config changes:
155
+
156
+ ```bash
157
+ npm run generate:config-schema
158
+ ```
@@ -0,0 +1,122 @@
1
+ # Milestone 4 — Handoff phase
2
+
3
+ **Status:** Implemented (PR Open → PM Review handoff; no revision loop or merge)
4
+
5
+ ## What exists
6
+
7
+ - Live handoff orchestration triggered from Linear **PR Open**
8
+ - Reads the latest durable **implementation** marker comment for `pr_url`, `branch`, and `target_repo`
9
+ - Inspects the linked GitHub PR via REST API (`GITHUB_TOKEN` required)
10
+ - Captures Vercel preview URL from PR comments when available (bounded polling)
11
+ - Posts PM handoff comment to Linear with harness marker footer
12
+ - Linear status transition: **PR Open** → **PM Review** (or **Blocked** after handoff begins on failure)
13
+ - Extended artifacts, manifest fields, and JSONL events for handoff runs
14
+ - Auto phase routing: **PR Open** → `handoff` (not implementation)
15
+
16
+ ## What is deferred
17
+
18
+ - Revision loop (**Needs Revision** → **Revising** → **PM Review**)
19
+ - Engineering Review transition
20
+ - Merge/deploy automation
21
+ - Watcher/poller
22
+ - Releases and skills
23
+
24
+ ## Prerequisites
25
+
26
+ 1. Copy `.env.example` to `.env` and set:
27
+ - `LINEAR_API_KEY`
28
+ - **`GITHUB_TOKEN`** (required for handoff — `repo` or fine-grained PR read scope)
29
+ 2. Issue must be in **PR Open** with a prior implementation marker comment containing `pr_url`.
30
+ 3. `CURSOR_API_KEY` is **not** required for handoff runs.
31
+
32
+ ## Commands
33
+
34
+ ```bash
35
+ npm install
36
+ npm test
37
+ npm run build
38
+
39
+ # Config and auth checks (GITHUB_TOKEN required under M4)
40
+ npm run harness:doctor
41
+
42
+ # Live handoff
43
+ npm run harness:run -- --issue WES-13 --phase handoff
44
+
45
+ # Auto phase infers handoff from PR Open
46
+ npm run harness:run -- --issue WES-13
47
+
48
+ # Inspect artifacts
49
+ npm run harness:inspect -- --run runs/WES-13/<run-id>
50
+ ```
51
+
52
+ ## Manual integration gate
53
+
54
+ **Issue:** WES-13 (starts **PR Open**)
55
+
56
+ **PR:** [target repo PR #4](https://github.com/owner/example-target-app/pull/4) (open, unmerged)
57
+
58
+ **Pass criteria:**
59
+
60
+ - WES-13: PR Open → PM Review
61
+ - Exactly one new handoff comment with marker footer (`phase: handoff`, `pr_url`, `branch`, `preview_url` if found, `previous_implementation_run_id`)
62
+ - `manifest.json`: `finalOutcome: success`, populated `prUrl`, `branch`, `changedFiles`, `checkSummary`
63
+ - Artifacts: `github/pr.json`, `linear/handoff-comment.md`, `vercel/deployment.json` (if preview captured)
64
+ - PR #4 remains **open**, **unmerged**
65
+ - Re-run without `--force` → duplicate skip (exit 0)
66
+
67
+ **Do not:** merge PR #4, rerun WES-12, modify target repo manually, move to Engineering Review.
68
+
69
+ ## Artifacts
70
+
71
+ ```text
72
+ runs/<issue>/<run-id>/
73
+ manifest.json
74
+ run-summary.md
75
+ events.jsonl
76
+ linear/
77
+ issue-snapshot-before.json
78
+ issue-snapshot-after.json
79
+ implementation-comment-loaded.md
80
+ handoff-comment.md
81
+ comments-written.md
82
+ github/
83
+ pr.json
84
+ checks.json
85
+ vercel/
86
+ deployment.json
87
+ errors/
88
+ error.json # on failure
89
+ ```
90
+
91
+ ## Exit codes
92
+
93
+ | Code | Meaning |
94
+ |------|---------|
95
+ | 0 | Success or duplicate skip |
96
+ | 1 | Config / CLI error |
97
+ | 2 | Preflight, eligibility, or auth failure (no Linear writes when auth fails at start) |
98
+ | 3 | Live phase failure after handoff began |
99
+
100
+ ## Config
101
+
102
+ `harness.config.json` includes:
103
+
104
+ - `handoff.allowPmReviewWithoutPreview` — proceed to PM Review when preview is not found (default: `true`)
105
+ - `preview.pollTimeoutSeconds` — max wait for Vercel preview comment
106
+ - `preview.pollIntervalSeconds` — poll interval between comment fetches
107
+ - `linear.eligibleStatuses.handoff` — statuses eligible for handoff (default: PR Open)
108
+
109
+ Regenerate JSON Schema after config changes:
110
+
111
+ ```bash
112
+ npm run generate:config-schema
113
+ ```
114
+
115
+ ## GITHUB_TOKEN
116
+
117
+ Handoff requires a valid GitHub token before any Linear writes:
118
+
119
+ - `harness:doctor` fails when `GITHUB_TOKEN` is missing or invalid
120
+ - Handoff preflight returns exit code 2 with `github_auth_failure` when the token is absent at run start
121
+
122
+ Recommended scopes: classic `repo` or fine-grained token with read access to pull requests and checks for the target repository.