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.
- package/README.md +16 -5
- package/dist/github/client.d.ts +88 -1
- package/dist/github/client.d.ts.map +1 -1
- package/dist/github/client.js +98 -7
- package/dist/github/client.js.map +1 -1
- package/dist/github/rate-limit-metadata.d.ts +16 -0
- package/dist/github/rate-limit-metadata.d.ts.map +1 -0
- package/dist/github/rate-limit-metadata.js +73 -0
- package/dist/github/rate-limit-metadata.js.map +1 -0
- package/dist/p-dev/git-object-plumbing.d.ts +19 -0
- package/dist/p-dev/git-object-plumbing.d.ts.map +1 -0
- package/dist/p-dev/git-object-plumbing.js +196 -0
- package/dist/p-dev/git-object-plumbing.js.map +1 -0
- package/dist/p-dev/package-paths.d.ts +1 -0
- package/dist/p-dev/package-paths.d.ts.map +1 -1
- package/dist/p-dev/package-paths.js +3 -0
- package/dist/p-dev/package-paths.js.map +1 -1
- package/dist/p-dev/workspace-snapshot-digest.d.ts +12 -0
- package/dist/p-dev/workspace-snapshot-digest.d.ts.map +1 -0
- package/dist/p-dev/workspace-snapshot-digest.js +34 -0
- package/dist/p-dev/workspace-snapshot-digest.js.map +1 -0
- package/dist/p-dev/workspace-snapshot-generator.d.ts +15 -0
- package/dist/p-dev/workspace-snapshot-generator.d.ts.map +1 -0
- package/dist/p-dev/workspace-snapshot-generator.js +69 -0
- package/dist/p-dev/workspace-snapshot-generator.js.map +1 -0
- package/dist/p-dev/workspace-snapshot-git.d.ts +26 -0
- package/dist/p-dev/workspace-snapshot-git.d.ts.map +1 -0
- package/dist/p-dev/workspace-snapshot-git.js +151 -0
- package/dist/p-dev/workspace-snapshot-git.js.map +1 -0
- package/dist/p-dev/workspace-snapshot-manifest.d.ts +18 -0
- package/dist/p-dev/workspace-snapshot-manifest.d.ts.map +1 -0
- package/dist/p-dev/workspace-snapshot-manifest.js +292 -0
- package/dist/p-dev/workspace-snapshot-manifest.js.map +1 -0
- package/dist/p-dev/workspace-snapshot-policy.d.ts +16 -0
- package/dist/p-dev/workspace-snapshot-policy.d.ts.map +1 -0
- package/dist/p-dev/workspace-snapshot-policy.js +168 -0
- package/dist/p-dev/workspace-snapshot-policy.js.map +1 -0
- package/dist/p-dev/workspace-snapshot-types.d.ts +54 -0
- package/dist/p-dev/workspace-snapshot-types.d.ts.map +1 -0
- package/dist/p-dev/workspace-snapshot-types.js +7 -0
- package/dist/p-dev/workspace-snapshot-types.js.map +1 -0
- package/dist/p-dev/workspace-snapshot-validation.d.ts +17 -0
- package/dist/p-dev/workspace-snapshot-validation.d.ts.map +1 -0
- package/dist/p-dev/workspace-snapshot-validation.js +115 -0
- package/dist/p-dev/workspace-snapshot-validation.js.map +1 -0
- package/dist/setup/github-remote-provider.d.ts +129 -0
- package/dist/setup/github-remote-provider.d.ts.map +1 -1
- package/dist/setup/github-remote-provider.js +214 -3
- package/dist/setup/github-remote-provider.js.map +1 -1
- package/dist/setup/github-remote-setup-live.d.ts +46 -1
- package/dist/setup/github-remote-setup-live.d.ts.map +1 -1
- package/dist/setup/github-remote-setup-live.js +121 -4
- package/dist/setup/github-remote-setup-live.js.map +1 -1
- package/dist/setup/github-secret-encryption.d.ts.map +1 -1
- package/dist/setup/github-secret-encryption.js +3 -1
- package/dist/setup/github-secret-encryption.js.map +1 -1
- package/dist/setup/github-upload-rate-limit-gate.d.ts +17 -0
- package/dist/setup/github-upload-rate-limit-gate.d.ts.map +1 -0
- package/dist/setup/github-upload-rate-limit-gate.js +42 -0
- package/dist/setup/github-upload-rate-limit-gate.js.map +1 -0
- package/dist/setup/harness-managed-repo-marker.d.ts +28 -1
- package/dist/setup/harness-managed-repo-marker.d.ts.map +1 -1
- package/dist/setup/harness-managed-repo-marker.js +165 -2
- package/dist/setup/harness-managed-repo-marker.js.map +1 -1
- package/dist/setup/harness-provisioning-context.d.ts +14 -12
- package/dist/setup/harness-provisioning-context.d.ts.map +1 -1
- package/dist/setup/harness-provisioning-context.js +54 -42
- package/dist/setup/harness-provisioning-context.js.map +1 -1
- package/dist/setup/harness-provisioning-pending-state.d.ts +33 -22
- package/dist/setup/harness-provisioning-pending-state.d.ts.map +1 -1
- package/dist/setup/harness-provisioning-pending-state.js +49 -30
- package/dist/setup/harness-provisioning-pending-state.js.map +1 -1
- package/dist/setup/harness-repo-provisioning.d.ts +10 -5
- package/dist/setup/harness-repo-provisioning.d.ts.map +1 -1
- package/dist/setup/harness-repo-provisioning.js +403 -335
- package/dist/setup/harness-repo-provisioning.js.map +1 -1
- package/dist/setup/harness-snapshot-provisioning-helpers.d.ts +21 -0
- package/dist/setup/harness-snapshot-provisioning-helpers.d.ts.map +1 -0
- package/dist/setup/harness-snapshot-provisioning-helpers.js +55 -0
- package/dist/setup/harness-snapshot-provisioning-helpers.js.map +1 -0
- package/dist/setup/harness-snapshot-provisioning.d.ts +111 -0
- package/dist/setup/harness-snapshot-provisioning.d.ts.map +1 -0
- package/dist/setup/harness-snapshot-provisioning.js +684 -0
- package/dist/setup/harness-snapshot-provisioning.js.map +1 -0
- package/dist/setup/harness-workspace-snapshot-loader.d.ts +15 -0
- package/dist/setup/harness-workspace-snapshot-loader.d.ts.map +1 -0
- package/dist/setup/harness-workspace-snapshot-loader.js +80 -0
- package/dist/setup/harness-workspace-snapshot-loader.js.map +1 -0
- package/dist/setup/mock-git-repository-store.d.ts +43 -0
- package/dist/setup/mock-git-repository-store.d.ts.map +1 -0
- package/dist/setup/mock-git-repository-store.js +232 -0
- package/dist/setup/mock-git-repository-store.js.map +1 -0
- package/gui/.next/BUILD_ID +1 -1
- package/gui/.next/app-build-manifest.json +49 -49
- package/gui/.next/app-path-routes-manifest.json +15 -15
- package/gui/.next/build-manifest.json +2 -2
- package/gui/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/gui/.next/server/app/_not-found.html +1 -1
- package/gui/.next/server/app/_not-found.rsc +2 -2
- package/gui/.next/server/app/api/setup/apply-connect-services/route.js +1 -1
- package/gui/.next/server/app/api/setup/apply-connect-services/route.js.nft.json +1 -1
- package/gui/.next/server/app/api/setup/apply-connect-services/route_client-reference-manifest.js +1 -1
- package/gui/.next/server/app/api/setup/apply-harness-repo-provisioning/route.js +1 -1
- package/gui/.next/server/app/api/setup/apply-harness-repo-provisioning/route.js.nft.json +1 -1
- package/gui/.next/server/app/api/setup/apply-harness-repo-provisioning/route_client-reference-manifest.js +1 -1
- package/gui/.next/server/app/api/setup/apply-harness-secrets/route.js +1 -1
- package/gui/.next/server/app/api/setup/apply-harness-secrets/route.js.nft.json +1 -1
- package/gui/.next/server/app/api/setup/apply-harness-secrets/route_client-reference-manifest.js +1 -1
- package/gui/.next/server/app/api/setup/apply-linear-setup/route.js +1 -1
- package/gui/.next/server/app/api/setup/apply-linear-setup/route.js.nft.json +1 -1
- package/gui/.next/server/app/api/setup/apply-linear-setup/route_client-reference-manifest.js +1 -1
- package/gui/.next/server/app/api/setup/apply-local-files/route.js +1 -1
- package/gui/.next/server/app/api/setup/apply-local-files/route.js.nft.json +1 -1
- package/gui/.next/server/app/api/setup/apply-local-files/route_client-reference-manifest.js +1 -1
- package/gui/.next/server/app/api/setup/apply-target-workflow/route.js +1 -1
- package/gui/.next/server/app/api/setup/apply-target-workflow/route.js.nft.json +1 -1
- package/gui/.next/server/app/api/setup/apply-target-workflow/route_client-reference-manifest.js +1 -1
- package/gui/.next/server/app/api/setup/apply-vercel-bridge/route.js +1 -1
- package/gui/.next/server/app/api/setup/apply-vercel-bridge/route.js.nft.json +1 -1
- package/gui/.next/server/app/api/setup/apply-vercel-bridge/route_client-reference-manifest.js +1 -1
- package/gui/.next/server/app/api/setup/finalize-target-workflow/route.js +1 -1
- package/gui/.next/server/app/api/setup/finalize-target-workflow/route.js.nft.json +1 -1
- package/gui/.next/server/app/api/setup/finalize-target-workflow/route_client-reference-manifest.js +1 -1
- package/gui/.next/server/app/api/setup/harness-provisioning-summary/route.js +1 -1
- package/gui/.next/server/app/api/setup/harness-provisioning-summary/route.js.nft.json +1 -1
- package/gui/.next/server/app/api/setup/harness-provisioning-summary/route_client-reference-manifest.js +1 -1
- package/gui/.next/server/app/api/setup/linear-options/route.js +1 -1
- package/gui/.next/server/app/api/setup/linear-options/route.js.nft.json +1 -1
- package/gui/.next/server/app/api/setup/linear-options/route_client-reference-manifest.js +1 -1
- package/gui/.next/server/app/api/setup/linear-summary/route.js +1 -1
- package/gui/.next/server/app/api/setup/linear-summary/route.js.nft.json +1 -1
- package/gui/.next/server/app/api/setup/linear-summary/route_client-reference-manifest.js +1 -1
- package/gui/.next/server/app/api/setup/local-readiness/route_client-reference-manifest.js +1 -1
- package/gui/.next/server/app/api/setup/manual-harness-secret-values/route.js +1 -1
- package/gui/.next/server/app/api/setup/manual-harness-secret-values/route.js.nft.json +1 -1
- package/gui/.next/server/app/api/setup/manual-harness-secret-values/route_client-reference-manifest.js +1 -1
- package/gui/.next/server/app/api/setup/preview-connect-services/route.js +1 -1
- package/gui/.next/server/app/api/setup/preview-connect-services/route.js.nft.json +1 -1
- package/gui/.next/server/app/api/setup/preview-connect-services/route_client-reference-manifest.js +1 -1
- package/gui/.next/server/app/api/setup/preview-harness-repo-provisioning/route.js +1 -1
- package/gui/.next/server/app/api/setup/preview-harness-repo-provisioning/route.js.nft.json +1 -1
- package/gui/.next/server/app/api/setup/preview-harness-repo-provisioning/route_client-reference-manifest.js +1 -1
- package/gui/.next/server/app/api/setup/preview-harness-secrets/route.js +1 -1
- package/gui/.next/server/app/api/setup/preview-harness-secrets/route.js.nft.json +1 -1
- package/gui/.next/server/app/api/setup/preview-harness-secrets/route_client-reference-manifest.js +1 -1
- package/gui/.next/server/app/api/setup/preview-linear-setup/route.js +1 -1
- package/gui/.next/server/app/api/setup/preview-linear-setup/route.js.nft.json +1 -1
- package/gui/.next/server/app/api/setup/preview-linear-setup/route_client-reference-manifest.js +1 -1
- package/gui/.next/server/app/api/setup/preview-local-files/route.js +1 -1
- package/gui/.next/server/app/api/setup/preview-local-files/route.js.nft.json +1 -1
- package/gui/.next/server/app/api/setup/preview-local-files/route_client-reference-manifest.js +1 -1
- package/gui/.next/server/app/api/setup/preview-target-workflow/route.js +1 -1
- package/gui/.next/server/app/api/setup/preview-target-workflow/route.js.nft.json +1 -1
- package/gui/.next/server/app/api/setup/preview-target-workflow/route_client-reference-manifest.js +1 -1
- package/gui/.next/server/app/api/setup/preview-vercel-bridge/route.js +1 -1
- package/gui/.next/server/app/api/setup/preview-vercel-bridge/route.js.nft.json +1 -1
- package/gui/.next/server/app/api/setup/preview-vercel-bridge/route_client-reference-manifest.js +1 -1
- package/gui/.next/server/app/api/setup/remote-summary/route.js +1 -1
- package/gui/.next/server/app/api/setup/remote-summary/route.js.nft.json +1 -1
- package/gui/.next/server/app/api/setup/remote-summary/route_client-reference-manifest.js +1 -1
- package/gui/.next/server/app/api/setup/summary/route.js +1 -1
- package/gui/.next/server/app/api/setup/summary/route.js.nft.json +1 -1
- package/gui/.next/server/app/api/setup/summary/route_client-reference-manifest.js +1 -1
- package/gui/.next/server/app/api/setup/vercel-bridge-options/route.js +1 -1
- package/gui/.next/server/app/api/setup/vercel-bridge-options/route.js.nft.json +1 -1
- package/gui/.next/server/app/api/setup/vercel-bridge-options/route_client-reference-manifest.js +1 -1
- package/gui/.next/server/app/api/setup/vercel-bridge-redeploy-status/route.js +1 -1
- package/gui/.next/server/app/api/setup/vercel-bridge-redeploy-status/route.js.nft.json +1 -1
- package/gui/.next/server/app/api/setup/vercel-bridge-redeploy-status/route_client-reference-manifest.js +1 -1
- package/gui/.next/server/app/api/setup/vercel-summary/route.js +1 -1
- package/gui/.next/server/app/api/setup/vercel-summary/route.js.nft.json +1 -1
- package/gui/.next/server/app/api/setup/vercel-summary/route_client-reference-manifest.js +1 -1
- package/gui/.next/server/app/api/setup/verify-harness-repo/route.js +1 -1
- package/gui/.next/server/app/api/setup/verify-harness-repo/route.js.nft.json +1 -1
- package/gui/.next/server/app/api/setup/verify-harness-repo/route_client-reference-manifest.js +1 -1
- package/gui/.next/server/app/api/setup/verify-service/route_client-reference-manifest.js +1 -1
- package/gui/.next/server/app/api/setup/verify-target-repo/route_client-reference-manifest.js +1 -1
- package/gui/.next/server/app/index.html +1 -1
- package/gui/.next/server/app/index.rsc +2 -2
- package/gui/.next/server/app/page_client-reference-manifest.js +1 -1
- package/gui/.next/server/app/settings/configure/page.js +2 -2
- package/gui/.next/server/app/settings/configure/page.js.nft.json +1 -1
- package/gui/.next/server/app/settings/configure/page_client-reference-manifest.js +1 -1
- package/gui/.next/server/app-paths-manifest.json +15 -15
- package/gui/.next/server/chunks/477.js +2 -2
- package/gui/.next/server/chunks/647.js +82 -0
- package/gui/.next/server/chunks/900.js +1 -1
- package/gui/.next/server/pages/404.html +1 -1
- package/gui/.next/server/pages/500.html +1 -1
- package/gui/.next/static/css/781f3c93b6d7425a.css +3 -0
- package/gui/.next/trace +4 -4
- package/package.json +2 -1
- package/workspace-snapshot/files/.agents/skills/architecture-evolution-audit/SKILL.md +282 -0
- package/workspace-snapshot/files/.agents/skills/code-health-audit/SKILL.md +188 -0
- package/workspace-snapshot/files/.agents/skills/implementation/SKILL.md +279 -0
- package/workspace-snapshot/files/.agents/skills/issue-intake/SKILL.md +163 -0
- package/workspace-snapshot/files/.agents/skills/issue-intake/examples.md +112 -0
- package/workspace-snapshot/files/.agents/skills/planner/SKILL.md +253 -0
- package/workspace-snapshot/files/.agents/skills/security-audit/SKILL.md +270 -0
- package/workspace-snapshot/files/.env.example +37 -0
- package/workspace-snapshot/files/.github/CODEOWNERS +4 -0
- package/workspace-snapshot/files/.github/dependabot.yml +12 -0
- package/workspace-snapshot/files/.github/workflows/ci.yml +32 -0
- package/workspace-snapshot/files/.github/workflows/codeql.yml +35 -0
- package/workspace-snapshot/files/.github/workflows/harness-auto-runner.yml +561 -0
- package/workspace-snapshot/files/.harness/config.example.json +83 -0
- package/workspace-snapshot/files/AGENTS.md +130 -0
- package/workspace-snapshot/files/ARCHITECTURE.md +385 -0
- package/workspace-snapshot/files/CHANGELOG.md +166 -0
- package/workspace-snapshot/files/LICENSE +21 -0
- package/workspace-snapshot/files/README.md +110 -0
- package/workspace-snapshot/files/ROADMAP.md +50 -0
- package/workspace-snapshot/files/api/linear-webhook.ts +41 -0
- package/workspace-snapshot/files/apps/gui/app/api/setup/apply-connect-services/route.ts +21 -0
- package/workspace-snapshot/files/apps/gui/app/api/setup/apply-harness-repo-provisioning/route.ts +35 -0
- package/workspace-snapshot/files/apps/gui/app/api/setup/apply-harness-secrets/route.ts +42 -0
- package/workspace-snapshot/files/apps/gui/app/api/setup/apply-linear-setup/route.ts +23 -0
- package/workspace-snapshot/files/apps/gui/app/api/setup/apply-local-files/route.ts +42 -0
- package/workspace-snapshot/files/apps/gui/app/api/setup/apply-target-workflow/route.ts +49 -0
- package/workspace-snapshot/files/apps/gui/app/api/setup/apply-vercel-bridge/route.ts +26 -0
- package/workspace-snapshot/files/apps/gui/app/api/setup/finalize-target-workflow/route.ts +32 -0
- package/workspace-snapshot/files/apps/gui/app/api/setup/harness-provisioning-summary/route.ts +17 -0
- package/workspace-snapshot/files/apps/gui/app/api/setup/linear-options/route.ts +17 -0
- package/workspace-snapshot/files/apps/gui/app/api/setup/linear-summary/route.ts +15 -0
- package/workspace-snapshot/files/apps/gui/app/api/setup/local-readiness/route.ts +18 -0
- package/workspace-snapshot/files/apps/gui/app/api/setup/manual-harness-secret-values/route.ts +33 -0
- package/workspace-snapshot/files/apps/gui/app/api/setup/preview-connect-services/route.ts +17 -0
- package/workspace-snapshot/files/apps/gui/app/api/setup/preview-harness-repo-provisioning/route.ts +22 -0
- package/workspace-snapshot/files/apps/gui/app/api/setup/preview-harness-secrets/route.ts +19 -0
- package/workspace-snapshot/files/apps/gui/app/api/setup/preview-linear-setup/route.ts +20 -0
- package/workspace-snapshot/files/apps/gui/app/api/setup/preview-local-files/route.ts +17 -0
- package/workspace-snapshot/files/apps/gui/app/api/setup/preview-target-workflow/route.ts +25 -0
- package/workspace-snapshot/files/apps/gui/app/api/setup/preview-vercel-bridge/route.ts +23 -0
- package/workspace-snapshot/files/apps/gui/app/api/setup/remote-summary/route.ts +15 -0
- package/workspace-snapshot/files/apps/gui/app/api/setup/summary/route.ts +10 -0
- package/workspace-snapshot/files/apps/gui/app/api/setup/vercel-bridge-options/route.ts +29 -0
- package/workspace-snapshot/files/apps/gui/app/api/setup/vercel-bridge-redeploy-status/route.ts +22 -0
- package/workspace-snapshot/files/apps/gui/app/api/setup/vercel-summary/route.ts +15 -0
- package/workspace-snapshot/files/apps/gui/app/api/setup/verify-harness-repo/route.ts +31 -0
- package/workspace-snapshot/files/apps/gui/app/api/setup/verify-service/route.ts +41 -0
- package/workspace-snapshot/files/apps/gui/app/api/setup/verify-target-repo/route.ts +33 -0
- package/workspace-snapshot/files/apps/gui/app/layout.tsx +28 -0
- package/workspace-snapshot/files/apps/gui/app/page.tsx +5 -0
- package/workspace-snapshot/files/apps/gui/app/settings/configure/page.tsx +34 -0
- package/workspace-snapshot/files/apps/gui/components/custom/app-shell.tsx +39 -0
- package/workspace-snapshot/files/apps/gui/components/custom/configure-experience.tsx +671 -0
- package/workspace-snapshot/files/apps/gui/components/custom/configure-page-content.tsx +45 -0
- package/workspace-snapshot/files/apps/gui/components/custom/configure-workflow.tsx +1284 -0
- package/workspace-snapshot/files/apps/gui/components/custom/connected-status.tsx +30 -0
- package/workspace-snapshot/files/apps/gui/components/custom/environment-config-form.tsx +400 -0
- package/workspace-snapshot/files/apps/gui/components/custom/first-run-stepper.tsx +199 -0
- package/workspace-snapshot/files/apps/gui/components/custom/github-token-help-disclosure.tsx +142 -0
- package/workspace-snapshot/files/apps/gui/components/custom/guided-cloud-secrets-card.tsx +993 -0
- package/workspace-snapshot/files/apps/gui/components/custom/guided-linear-workspace-card.tsx +526 -0
- package/workspace-snapshot/files/apps/gui/components/custom/guided-local-readiness-card.tsx +132 -0
- package/workspace-snapshot/files/apps/gui/components/custom/guided-step-transition.tsx +60 -0
- package/workspace-snapshot/files/apps/gui/components/custom/guided-target-workflow-card.tsx +396 -0
- package/workspace-snapshot/files/apps/gui/components/custom/guided-vercel-bridge-card.tsx +861 -0
- package/workspace-snapshot/files/apps/gui/components/custom/local-write-confirmation.tsx +91 -0
- package/workspace-snapshot/files/apps/gui/components/custom/local-write-preview.tsx +52 -0
- package/workspace-snapshot/files/apps/gui/components/custom/preview-panel.tsx +19 -0
- package/workspace-snapshot/files/apps/gui/components/custom/primary-setup-task-card.tsx +65 -0
- package/workspace-snapshot/files/apps/gui/components/custom/readiness-banner.tsx +91 -0
- package/workspace-snapshot/files/apps/gui/components/custom/remote-action-confirmation.tsx +155 -0
- package/workspace-snapshot/files/apps/gui/components/custom/remote-action-preview.tsx +84 -0
- package/workspace-snapshot/files/apps/gui/components/custom/remote-secret-form.tsx +123 -0
- package/workspace-snapshot/files/apps/gui/components/custom/remote-setup-section.tsx +354 -0
- package/workspace-snapshot/files/apps/gui/components/custom/review-cloud-secrets-disclosure.tsx +59 -0
- package/workspace-snapshot/files/apps/gui/components/custom/review-generated-files-disclosure.tsx +67 -0
- package/workspace-snapshot/files/apps/gui/components/custom/section-card.tsx +33 -0
- package/workspace-snapshot/files/apps/gui/components/custom/service-icons.tsx +30 -0
- package/workspace-snapshot/files/apps/gui/components/custom/setup-apply-result.tsx +52 -0
- package/workspace-snapshot/files/apps/gui/components/custom/setup-checklist.tsx +206 -0
- package/workspace-snapshot/files/apps/gui/components/custom/setup-dashboard.tsx +124 -0
- package/workspace-snapshot/files/apps/gui/components/custom/setup-readonly-sections.tsx +210 -0
- package/workspace-snapshot/files/apps/gui/components/custom/status-badge.tsx +22 -0
- package/workspace-snapshot/files/apps/gui/components/custom/target-repo-config-form.tsx +647 -0
- package/workspace-snapshot/files/apps/gui/components/custom/target-workflow-pr-card.tsx +283 -0
- package/workspace-snapshot/files/apps/gui/components/custom/theme-provider.tsx +11 -0
- package/workspace-snapshot/files/apps/gui/components/custom/theme-toggle.tsx +44 -0
- package/workspace-snapshot/files/apps/gui/components/custom/workflow-install-pending-panel.tsx +116 -0
- package/workspace-snapshot/files/apps/gui/components/ui/badge.tsx +40 -0
- package/workspace-snapshot/files/apps/gui/components/ui/button.tsx +52 -0
- package/workspace-snapshot/files/apps/gui/components/ui/card.tsx +64 -0
- package/workspace-snapshot/files/apps/gui/components/ui/checkbox.tsx +21 -0
- package/workspace-snapshot/files/apps/gui/components/ui/input.tsx +22 -0
- package/workspace-snapshot/files/apps/gui/components/ui/label.tsx +20 -0
- package/workspace-snapshot/files/apps/gui/components/ui/separator.tsx +23 -0
- package/workspace-snapshot/files/apps/gui/components/ui/skeleton.tsx +13 -0
- package/workspace-snapshot/files/apps/gui/components/ui/textarea.tsx +22 -0
- package/workspace-snapshot/files/apps/gui/components.json +21 -0
- package/workspace-snapshot/files/apps/gui/lib/constants/breakpoints.ts +13 -0
- package/workspace-snapshot/files/apps/gui/lib/constants/form.ts +8 -0
- package/workspace-snapshot/files/apps/gui/lib/constants/index.ts +4 -0
- package/workspace-snapshot/files/apps/gui/lib/constants/layout.ts +9 -0
- package/workspace-snapshot/files/apps/gui/lib/constants/spacing.ts +8 -0
- package/workspace-snapshot/files/apps/gui/lib/guided-setup.ts +216 -0
- package/workspace-snapshot/files/apps/gui/lib/setup-json-response.ts +19 -0
- package/workspace-snapshot/files/apps/gui/lib/setup-server.ts +836 -0
- package/workspace-snapshot/files/apps/gui/lib/step6-remote-state.ts +43 -0
- package/workspace-snapshot/files/apps/gui/lib/utils.ts +6 -0
- package/workspace-snapshot/files/apps/gui/lib/vercel-bridge-polling-ui.ts +16 -0
- package/workspace-snapshot/files/apps/gui/lib/verification-state.ts +170 -0
- package/workspace-snapshot/files/apps/gui/next-env.d.ts +6 -0
- package/workspace-snapshot/files/apps/gui/next.config.ts +34 -0
- package/workspace-snapshot/files/apps/gui/postcss.config.mjs +8 -0
- package/workspace-snapshot/files/apps/gui/public/setup/github-token/github-pat-generate-classic.png +0 -0
- package/workspace-snapshot/files/apps/gui/public/setup/github-token/github-pat-generate-new-token.png +0 -0
- package/workspace-snapshot/files/apps/gui/public/setup/github-token/github-pat-verify-email.png +0 -0
- package/workspace-snapshot/files/apps/gui/styles/globals.css +86 -0
- package/workspace-snapshot/files/apps/gui/tsconfig.json +24 -0
- package/workspace-snapshot/files/apps/gui/tweetsodium.d.ts +14 -0
- package/workspace-snapshot/files/docs/architecture/linear-automation-state-machine.md +267 -0
- package/workspace-snapshot/files/docs/decisions/0001-cursor-first-v0.1.md +59 -0
- package/workspace-snapshot/files/docs/decisions/0003-automation-state-machine-and-auto-model-policy.md +65 -0
- package/workspace-snapshot/files/docs/decisions/0004-agent-provider-boundary.md +109 -0
- package/workspace-snapshot/files/docs/design/product-development-harness-gui.md +1024 -0
- package/workspace-snapshot/files/docs/getting-started.md +123 -0
- package/workspace-snapshot/files/docs/gui-local.md +151 -0
- package/workspace-snapshot/files/docs/gui-remote-setup.md +106 -0
- package/workspace-snapshot/files/docs/integration-repair.md +82 -0
- package/workspace-snapshot/files/docs/issue-intake.md +124 -0
- package/workspace-snapshot/files/docs/linear-watcher-setup.md +184 -0
- package/workspace-snapshot/files/docs/milestones/m1-runner-foundation.md +51 -0
- package/workspace-snapshot/files/docs/milestones/m2-planning-phase.md +129 -0
- package/workspace-snapshot/files/docs/milestones/m3-implementation-phase.md +158 -0
- package/workspace-snapshot/files/docs/milestones/m4-handoff-phase.md +122 -0
- package/workspace-snapshot/files/docs/milestones/m5-revision-phase.md +101 -0
- package/workspace-snapshot/files/docs/milestones/m6-merge-phase.md +143 -0
- package/workspace-snapshot/files/docs/milestones/m7-issue-intake.md +72 -0
- package/workspace-snapshot/files/docs/milestones/m8-linear-watcher.md +80 -0
- package/workspace-snapshot/files/docs/npm-packaging-spike.md +52 -0
- package/workspace-snapshot/files/docs/operator-config.md +187 -0
- package/workspace-snapshot/files/docs/p-dev.md +213 -0
- package/workspace-snapshot/files/docs/production-sync-automation.md +176 -0
- package/workspace-snapshot/files/docs/provider-portability.md +131 -0
- package/workspace-snapshot/files/docs/releases/release-process.md +272 -0
- package/workspace-snapshot/files/docs/releases/v0.2.0.md +193 -0
- package/workspace-snapshot/files/docs/releases/v0.3.0.md +188 -0
- package/workspace-snapshot/files/docs/releases/v0.3.1.md +102 -0
- package/workspace-snapshot/files/docs/research/001-manual-run-retrospective.md +64 -0
- package/workspace-snapshot/files/docs/research/002-linear-cursor-integration-smoke-test.md +64 -0
- package/workspace-snapshot/files/docs/research/003-cursor-automation-planning-router-spike.md +104 -0
- package/workspace-snapshot/files/docs/research/README.md +26 -0
- package/workspace-snapshot/files/docs/security.md +190 -0
- package/workspace-snapshot/files/docs/skills/README.md +7 -0
- package/workspace-snapshot/files/docs/skills/skill-architecture.md +197 -0
- package/workspace-snapshot/files/docs/target-repo-branch-setup.md +80 -0
- package/workspace-snapshot/files/evals/README.md +31 -0
- package/workspace-snapshot/files/examples/README.md +32 -0
- package/workspace-snapshot/files/examples/runs/001-target-app-github-link/README.md +49 -0
- package/workspace-snapshot/files/examples/runs/001-target-app-github-link/eval-scorecard.md +63 -0
- package/workspace-snapshot/files/examples/runs/001-target-app-github-link/implementation-plan.md +79 -0
- package/workspace-snapshot/files/examples/runs/001-target-app-github-link/linear-issue.md +74 -0
- package/workspace-snapshot/files/examples/runs/001-target-app-github-link/pr-readiness-report.md +92 -0
- package/workspace-snapshot/files/examples/runs/m5.5-live-sandbox-smoke/README.md +73 -0
- package/workspace-snapshot/files/gpt/issue-intake/custom-gpt-instructions.md +112 -0
- package/workspace-snapshot/files/gpt/issue-intake/knowledge.md +278 -0
- package/workspace-snapshot/files/gpt/issue-intake/setup-guide.md +115 -0
- package/workspace-snapshot/files/gpt/issue-intake/smoke-test.md +119 -0
- package/workspace-snapshot/files/harness.config.json +92 -0
- package/workspace-snapshot/files/harness.config.schema.json +352 -0
- package/workspace-snapshot/files/package-lock.json +3716 -0
- package/workspace-snapshot/files/package.json +60 -0
- package/workspace-snapshot/files/packages/p-dev/LICENSE +21 -0
- package/workspace-snapshot/files/packages/p-dev/README.md +64 -0
- package/workspace-snapshot/files/packages/p-dev/gui.next.config.mjs +13 -0
- package/workspace-snapshot/files/packages/p-dev/package.json +63 -0
- package/workspace-snapshot/files/prompts/issue-intake-chatgpt.md +264 -0
- package/workspace-snapshot/files/scripts/generate-config-schema.ts +16 -0
- package/workspace-snapshot/files/scripts/prepare-p-dev-package.ts +155 -0
- package/workspace-snapshot/files/skills/README.md +7 -0
- package/workspace-snapshot/files/skills/issue-intake/README.md +5 -0
- package/workspace-snapshot/files/src/agents/cursor-provider.ts +109 -0
- package/workspace-snapshot/files/src/agents/index.ts +68 -0
- package/workspace-snapshot/files/src/agents/provider.ts +7 -0
- package/workspace-snapshot/files/src/agents/types.ts +85 -0
- package/workspace-snapshot/files/src/artifacts/events.ts +31 -0
- package/workspace-snapshot/files/src/artifacts/manifest-fields.ts +9 -0
- package/workspace-snapshot/files/src/artifacts/manifest.ts +20 -0
- package/workspace-snapshot/files/src/artifacts/paths.ts +145 -0
- package/workspace-snapshot/files/src/artifacts/redact.ts +50 -0
- package/workspace-snapshot/files/src/artifacts/run-id.ts +4 -0
- package/workspace-snapshot/files/src/artifacts/snapshot.ts +13 -0
- package/workspace-snapshot/files/src/artifacts/summary.ts +116 -0
- package/workspace-snapshot/files/src/cli/commands/diagnose-vercel-bridge.ts +25 -0
- package/workspace-snapshot/files/src/cli/commands/doctor.ts +205 -0
- package/workspace-snapshot/files/src/cli/commands/inspect.ts +46 -0
- package/workspace-snapshot/files/src/cli/commands/operator-init.ts +39 -0
- package/workspace-snapshot/files/src/cli/commands/redact-output.ts +19 -0
- package/workspace-snapshot/files/src/cli/commands/resolve-route.ts +81 -0
- package/workspace-snapshot/files/src/cli/commands/run.ts +53 -0
- package/workspace-snapshot/files/src/cli/commands/sync-production.ts +207 -0
- package/workspace-snapshot/files/src/cli/commands/validate-issue.ts +72 -0
- package/workspace-snapshot/files/src/cli/exit-codes.ts +4 -0
- package/workspace-snapshot/files/src/cli/finalize-exit.ts +9 -0
- package/workspace-snapshot/files/src/cli/program.ts +200 -0
- package/workspace-snapshot/files/src/config/defaults.ts +33 -0
- package/workspace-snapshot/files/src/config/load-config.ts +80 -0
- package/workspace-snapshot/files/src/config/load-dotenv.ts +11 -0
- package/workspace-snapshot/files/src/config/resolve-config.ts +127 -0
- package/workspace-snapshot/files/src/config/schema.ts +129 -0
- package/workspace-snapshot/files/src/config/status-names.ts +63 -0
- package/workspace-snapshot/files/src/config/types.ts +1 -0
- package/workspace-snapshot/files/src/cursor/agent-factory.ts +126 -0
- package/workspace-snapshot/files/src/cursor/errors.ts +18 -0
- package/workspace-snapshot/files/src/cursor/git-result.ts +87 -0
- package/workspace-snapshot/files/src/cursor/model.ts +47 -0
- package/workspace-snapshot/files/src/cursor/revision-git-result.ts +80 -0
- package/workspace-snapshot/files/src/cursor/run-cleanup.ts +30 -0
- package/workspace-snapshot/files/src/cursor/run-observer.ts +367 -0
- package/workspace-snapshot/files/src/cursor/urls.ts +19 -0
- package/workspace-snapshot/files/src/fixture/frontmatter.ts +56 -0
- package/workspace-snapshot/files/src/github/actions-url.ts +13 -0
- package/workspace-snapshot/files/src/github/base-branch.ts +120 -0
- package/workspace-snapshot/files/src/github/check-policy.ts +108 -0
- package/workspace-snapshot/files/src/github/client.ts +796 -0
- package/workspace-snapshot/files/src/github/commit-reachability.ts +184 -0
- package/workspace-snapshot/files/src/github/links.ts +23 -0
- package/workspace-snapshot/files/src/github/merge-result.ts +31 -0
- package/workspace-snapshot/files/src/github/pr-discovery.ts +55 -0
- package/workspace-snapshot/files/src/github/pr-inspector.ts +297 -0
- package/workspace-snapshot/files/src/github/pr-url.ts +23 -0
- package/workspace-snapshot/files/src/github/rate-limit-metadata.ts +105 -0
- package/workspace-snapshot/files/src/gui/configure-health.ts +160 -0
- package/workspace-snapshot/files/src/gui/dev-server-process.ts +213 -0
- package/workspace-snapshot/files/src/gui/port.ts +78 -0
- package/workspace-snapshot/files/src/gui/repo-root.ts +61 -0
- package/workspace-snapshot/files/src/gui/start-configure-stable.ts +139 -0
- package/workspace-snapshot/files/src/gui/start-gui.ts +126 -0
- package/workspace-snapshot/files/src/index.ts +10 -0
- package/workspace-snapshot/files/src/linear/client.ts +49 -0
- package/workspace-snapshot/files/src/linear/comment-card.ts +74 -0
- package/workspace-snapshot/files/src/linear/comments.ts +891 -0
- package/workspace-snapshot/files/src/linear/handoff-comment.ts +19 -0
- package/workspace-snapshot/files/src/linear/issue-query.ts +70 -0
- package/workspace-snapshot/files/src/linear/markers.ts +238 -0
- package/workspace-snapshot/files/src/linear/merge-source-comment.ts +46 -0
- package/workspace-snapshot/files/src/linear/parser.ts +101 -0
- package/workspace-snapshot/files/src/linear/phase-labels.ts +58 -0
- package/workspace-snapshot/files/src/linear/planning-comment.ts +19 -0
- package/workspace-snapshot/files/src/linear/pm-feedback-comment.ts +41 -0
- package/workspace-snapshot/files/src/linear/revision-comment.ts +19 -0
- package/workspace-snapshot/files/src/linear/states.ts +20 -0
- package/workspace-snapshot/files/src/linear/writer.ts +216 -0
- package/workspace-snapshot/files/src/p-dev/browser.ts +26 -0
- package/workspace-snapshot/files/src/p-dev/cli.ts +93 -0
- package/workspace-snapshot/files/src/p-dev/git-object-plumbing.ts +271 -0
- package/workspace-snapshot/files/src/p-dev/launch.ts +173 -0
- package/workspace-snapshot/files/src/p-dev/main.ts +10 -0
- package/workspace-snapshot/files/src/p-dev/next-bin.ts +8 -0
- package/workspace-snapshot/files/src/p-dev/node-version.ts +46 -0
- package/workspace-snapshot/files/src/p-dev/package-paths.ts +47 -0
- package/workspace-snapshot/files/src/p-dev/package-version.ts +63 -0
- package/workspace-snapshot/files/src/p-dev/runtime-mode.ts +28 -0
- package/workspace-snapshot/files/src/p-dev/shutdown.ts +66 -0
- package/workspace-snapshot/files/src/p-dev/workspace-snapshot-digest.ts +50 -0
- package/workspace-snapshot/files/src/p-dev/workspace-snapshot-generator.ts +112 -0
- package/workspace-snapshot/files/src/p-dev/workspace-snapshot-git.ts +221 -0
- package/workspace-snapshot/files/src/p-dev/workspace-snapshot-manifest.ts +336 -0
- package/workspace-snapshot/files/src/p-dev/workspace-snapshot-policy.ts +198 -0
- package/workspace-snapshot/files/src/p-dev/workspace-snapshot-types.ts +59 -0
- package/workspace-snapshot/files/src/p-dev/workspace-snapshot-validation.ts +137 -0
- package/workspace-snapshot/files/src/p-dev/workspace.ts +114 -0
- package/workspace-snapshot/files/src/preview/production-from-merge.ts +143 -0
- package/workspace-snapshot/files/src/preview/urls.ts +28 -0
- package/workspace-snapshot/files/src/preview/vercel-from-pr.ts +123 -0
- package/workspace-snapshot/files/src/prompts/branch-name.ts +22 -0
- package/workspace-snapshot/files/src/prompts/builder.ts +88 -0
- package/workspace-snapshot/files/src/prompts/implementation.md +77 -0
- package/workspace-snapshot/files/src/prompts/integration-repair-builder.ts +65 -0
- package/workspace-snapshot/files/src/prompts/integration-repair.md +111 -0
- package/workspace-snapshot/files/src/prompts/planning.md +64 -0
- package/workspace-snapshot/files/src/prompts/revision-builder.ts +61 -0
- package/workspace-snapshot/files/src/prompts/revision.md +71 -0
- package/workspace-snapshot/files/src/resolver/allowed-repos.ts +18 -0
- package/workspace-snapshot/files/src/resolver/errors.ts +14 -0
- package/workspace-snapshot/files/src/resolver/normalize-repo.ts +32 -0
- package/workspace-snapshot/files/src/resolver/target-repo.ts +118 -0
- package/workspace-snapshot/files/src/runner/building-recovery.ts +26 -0
- package/workspace-snapshot/files/src/runner/dry-run.ts +137 -0
- package/workspace-snapshot/files/src/runner/errors.ts +70 -0
- package/workspace-snapshot/files/src/runner/execution-environment.ts +179 -0
- package/workspace-snapshot/files/src/runner/fixture.ts +25 -0
- package/workspace-snapshot/files/src/runner/idempotency.ts +507 -0
- package/workspace-snapshot/files/src/runner/orchestrator.ts +182 -0
- package/workspace-snapshot/files/src/runner/phase-args.ts +49 -0
- package/workspace-snapshot/files/src/runner/phase-infer.ts +67 -0
- package/workspace-snapshot/files/src/runner/phases/handoff.ts +615 -0
- package/workspace-snapshot/files/src/runner/phases/implementation.ts +617 -0
- package/workspace-snapshot/files/src/runner/phases/integration-repair.ts +613 -0
- package/workspace-snapshot/files/src/runner/phases/merge.ts +1202 -0
- package/workspace-snapshot/files/src/runner/phases/planning.ts +456 -0
- package/workspace-snapshot/files/src/runner/phases/production-sync.ts +308 -0
- package/workspace-snapshot/files/src/runner/phases/revision.ts +795 -0
- package/workspace-snapshot/files/src/runner/preflight.ts +218 -0
- package/workspace-snapshot/files/src/runner/resolve-route.ts +154 -0
- package/workspace-snapshot/files/src/setup/config-builder.ts +117 -0
- package/workspace-snapshot/files/src/setup/config-local-editor.ts +260 -0
- package/workspace-snapshot/files/src/setup/config-writer.ts +173 -0
- package/workspace-snapshot/files/src/setup/control-plane-readiness-server.ts +16 -0
- package/workspace-snapshot/files/src/setup/control-plane-readiness.ts +291 -0
- package/workspace-snapshot/files/src/setup/control-plane-setup-state.ts +60 -0
- package/workspace-snapshot/files/src/setup/control-plane-types.ts +121 -0
- package/workspace-snapshot/files/src/setup/doctor-summary.ts +96 -0
- package/workspace-snapshot/files/src/setup/env-merge.ts +266 -0
- package/workspace-snapshot/files/src/setup/env-writer.ts +179 -0
- package/workspace-snapshot/files/src/setup/first-run-readiness.ts +1431 -0
- package/workspace-snapshot/files/src/setup/generated-instructions.ts +96 -0
- package/workspace-snapshot/files/src/setup/github-dispatch-token.ts +88 -0
- package/workspace-snapshot/files/src/setup/github-remote-provider.ts +983 -0
- package/workspace-snapshot/files/src/setup/github-remote-setup-live.ts +775 -0
- package/workspace-snapshot/files/src/setup/github-repo-slug.ts +31 -0
- package/workspace-snapshot/files/src/setup/github-secret-encryption.ts +16 -0
- package/workspace-snapshot/files/src/setup/github-upload-rate-limit-gate.ts +58 -0
- package/workspace-snapshot/files/src/setup/github-workflow-permissions.ts +174 -0
- package/workspace-snapshot/files/src/setup/gui-view-model.ts +566 -0
- package/workspace-snapshot/files/src/setup/guided-config-form.ts +52 -0
- package/workspace-snapshot/files/src/setup/harness-dispatch-repo.ts +158 -0
- package/workspace-snapshot/files/src/setup/harness-managed-repo-marker.ts +653 -0
- package/workspace-snapshot/files/src/setup/harness-provisioning-context.ts +331 -0
- package/workspace-snapshot/files/src/setup/harness-provisioning-pending-state.ts +282 -0
- package/workspace-snapshot/files/src/setup/harness-repo-provisioning.ts +1656 -0
- package/workspace-snapshot/files/src/setup/harness-secret-fingerprint.ts +51 -0
- package/workspace-snapshot/files/src/setup/harness-secret-setup.ts +439 -0
- package/workspace-snapshot/files/src/setup/harness-snapshot-provisioning-helpers.ts +92 -0
- package/workspace-snapshot/files/src/setup/harness-snapshot-provisioning.ts +1007 -0
- package/workspace-snapshot/files/src/setup/harness-template-identity.ts +151 -0
- package/workspace-snapshot/files/src/setup/harness-workspace-snapshot-loader.ts +105 -0
- package/workspace-snapshot/files/src/setup/linear-setup-apply.ts +270 -0
- package/workspace-snapshot/files/src/setup/linear-setup-client.ts +276 -0
- package/workspace-snapshot/files/src/setup/linear-setup-plan.ts +353 -0
- package/workspace-snapshot/files/src/setup/linear-setup-summary.ts +33 -0
- package/workspace-snapshot/files/src/setup/linear-status-contract.ts +110 -0
- package/workspace-snapshot/files/src/setup/linear-webhook-env-local.ts +104 -0
- package/workspace-snapshot/files/src/setup/linear-webhook-secret.ts +441 -0
- package/workspace-snapshot/files/src/setup/local-apply-actions.ts +524 -0
- package/workspace-snapshot/files/src/setup/local-readiness-checks.ts +334 -0
- package/workspace-snapshot/files/src/setup/mock-git-repository-store.ts +291 -0
- package/workspace-snapshot/files/src/setup/mock-target-workflow-finalization.ts +445 -0
- package/workspace-snapshot/files/src/setup/model-settings.ts +73 -0
- package/workspace-snapshot/files/src/setup/permission-model.ts +79 -0
- package/workspace-snapshot/files/src/setup/redact-secrets.ts +85 -0
- package/workspace-snapshot/files/src/setup/remote-actions.ts +214 -0
- package/workspace-snapshot/files/src/setup/remote-apply-actions.ts +390 -0
- package/workspace-snapshot/files/src/setup/remote-preview-fingerprint.ts +37 -0
- package/workspace-snapshot/files/src/setup/remote-setup-summary.ts +143 -0
- package/workspace-snapshot/files/src/setup/secret-change-token.ts +14 -0
- package/workspace-snapshot/files/src/setup/service-verification.ts +549 -0
- package/workspace-snapshot/files/src/setup/setup-actions.ts +183 -0
- package/workspace-snapshot/files/src/setup/setup-github-auth.ts +15 -0
- package/workspace-snapshot/files/src/setup/setup-state.ts +74 -0
- package/workspace-snapshot/files/src/setup/stale-smoke-repo.ts +141 -0
- package/workspace-snapshot/files/src/setup/sync-downstream-summaries.ts +105 -0
- package/workspace-snapshot/files/src/setup/target-workflow-finalization-lock.ts +95 -0
- package/workspace-snapshot/files/src/setup/target-workflow-finalization-types.ts +55 -0
- package/workspace-snapshot/files/src/setup/target-workflow-finalization.ts +897 -0
- package/workspace-snapshot/files/src/setup/target-workflow-setup.ts +247 -0
- package/workspace-snapshot/files/src/setup/test-only-provisioning-provider.ts +51 -0
- package/workspace-snapshot/files/src/setup/test-only-remote-setup-provider.ts +51 -0
- package/workspace-snapshot/files/src/setup/tweetsodium.d.ts +14 -0
- package/workspace-snapshot/files/src/setup/vercel-bridge-diagnostics.ts +510 -0
- package/workspace-snapshot/files/src/setup/vercel-bridge-options.ts +160 -0
- package/workspace-snapshot/files/src/setup/vercel-bridge-readiness.ts +150 -0
- package/workspace-snapshot/files/src/setup/vercel-bridge-redeploy-poll.ts +744 -0
- package/workspace-snapshot/files/src/setup/vercel-bridge-redeploy-state.ts +46 -0
- package/workspace-snapshot/files/src/setup/vercel-bridge-structured-log.ts +86 -0
- package/workspace-snapshot/files/src/setup/vercel-bridge-verification.ts +63 -0
- package/workspace-snapshot/files/src/setup/vercel-production-redeploy.ts +298 -0
- package/workspace-snapshot/files/src/setup/vercel-setup-apply.ts +1058 -0
- package/workspace-snapshot/files/src/setup/vercel-setup-client.ts +695 -0
- package/workspace-snapshot/files/src/setup/vercel-setup-plan.ts +672 -0
- package/workspace-snapshot/files/src/setup/vercel-setup-summary.ts +42 -0
- package/workspace-snapshot/files/src/setup/vercel-webhook-probe.ts +161 -0
- package/workspace-snapshot/files/src/setup/workflow-install-merge-errors.ts +166 -0
- package/workspace-snapshot/files/src/types/parsed-issue.ts +8 -0
- package/workspace-snapshot/files/src/types/run.ts +157 -0
- package/workspace-snapshot/files/src/validate/constants.ts +2 -0
- package/workspace-snapshot/files/src/validate/issue.ts +286 -0
- package/workspace-snapshot/files/src/validate/report.ts +68 -0
- package/workspace-snapshot/files/src/validate/types.ts +29 -0
- package/workspace-snapshot/files/src/webhook/dispatch-github.ts +44 -0
- package/workspace-snapshot/files/src/webhook/dispatch-statuses.ts +26 -0
- package/workspace-snapshot/files/src/webhook/extract-issue-key.ts +49 -0
- package/workspace-snapshot/files/src/webhook/filter.ts +41 -0
- package/workspace-snapshot/files/src/webhook/handle-linear-webhook.ts +201 -0
- package/workspace-snapshot/files/src/webhook/parse-linear-issue-event.ts +105 -0
- package/workspace-snapshot/files/src/webhook/redact-log.ts +26 -0
- package/workspace-snapshot/files/src/webhook/types.ts +75 -0
- package/workspace-snapshot/files/src/webhook/verify.ts +68 -0
- package/workspace-snapshot/files/src/webhook/workflow-command.ts +10 -0
- package/workspace-snapshot/files/src/workflow/dispatch-metadata.ts +59 -0
- package/workspace-snapshot/files/src/workflow/manifest-summary.ts +57 -0
- package/workspace-snapshot/files/src/workflow/production-sync-dispatch.ts +65 -0
- package/workspace-snapshot/files/src/workflow/summarize-manifest.ts +20 -0
- package/workspace-snapshot/files/src/workflow/validate.ts +43 -0
- package/workspace-snapshot/files/src/workflow/write-dispatch-metadata.ts +8 -0
- package/workspace-snapshot/files/templates/eval-scorecard.md +54 -0
- package/workspace-snapshot/files/templates/implementation-plan.md +59 -0
- package/workspace-snapshot/files/templates/linear-issue.md +53 -0
- package/workspace-snapshot/files/templates/pr-readiness-report.md +57 -0
- package/workspace-snapshot/files/tests/agents/cursor-provider.test.ts +238 -0
- package/workspace-snapshot/files/tests/artifacts/manifest.test.ts +54 -0
- package/workspace-snapshot/files/tests/artifacts/redact.test.ts +47 -0
- package/workspace-snapshot/files/tests/cli/doctor.test.ts +120 -0
- package/workspace-snapshot/files/tests/cli/finalize-exit.test.ts +28 -0
- package/workspace-snapshot/files/tests/cli/operator-init.test.ts +146 -0
- package/workspace-snapshot/files/tests/cli/sync-production-dispatch.test.ts +103 -0
- package/workspace-snapshot/files/tests/cli/validate-issue.test.ts +99 -0
- package/workspace-snapshot/files/tests/config/load-dotenv.test.ts +64 -0
- package/workspace-snapshot/files/tests/config/resolve-config.test.ts +273 -0
- package/workspace-snapshot/files/tests/config/schema.test.ts +107 -0
- package/workspace-snapshot/files/tests/cursor/agent-factory.test.ts +217 -0
- package/workspace-snapshot/files/tests/cursor/git-result.test.ts +77 -0
- package/workspace-snapshot/files/tests/cursor/model.test.ts +108 -0
- package/workspace-snapshot/files/tests/cursor/revision-git-result.test.ts +68 -0
- package/workspace-snapshot/files/tests/cursor/run-cleanup.test.ts +52 -0
- package/workspace-snapshot/files/tests/cursor/run-observer.test.ts +280 -0
- package/workspace-snapshot/files/tests/cursor/urls.test.ts +27 -0
- package/workspace-snapshot/files/tests/fixtures/config/minimal.json +16 -0
- package/workspace-snapshot/files/tests/fixtures/github/pr-4-vercel-comment.json +10 -0
- package/workspace-snapshot/files/tests/fixtures/issues/broad-for-direct-impl.md +28 -0
- package/workspace-snapshot/files/tests/fixtures/issues/context-target-repo.md +21 -0
- package/workspace-snapshot/files/tests/fixtures/issues/explicit-target-repo.md +21 -0
- package/workspace-snapshot/files/tests/fixtures/issues/gpt-broad-example.md +35 -0
- package/workspace-snapshot/files/tests/fixtures/issues/gpt-narrow-example.md +30 -0
- package/workspace-snapshot/files/tests/fixtures/issues/invalid-missing-task.md +16 -0
- package/workspace-snapshot/files/tests/fixtures/issues/invalid-no-ac-bullets.md +20 -0
- package/workspace-snapshot/files/tests/fixtures/issues/missing-acceptance-criteria.md +17 -0
- package/workspace-snapshot/files/tests/fixtures/issues/unknown-repo.md +20 -0
- package/workspace-snapshot/files/tests/fixtures/issues/valid-minimal.md +20 -0
- package/workspace-snapshot/files/tests/fixtures/issues/valid-project-only.md +17 -0
- package/workspace-snapshot/files/tests/fixtures/issues/valid-target-app.md +31 -0
- package/workspace-snapshot/files/tests/fixtures/linear/implementation-comment-wes-13.md +16 -0
- package/workspace-snapshot/files/tests/fixtures/linear/pm-feedback-wes-13.md +3 -0
- package/workspace-snapshot/files/tests/fixtures/webhook/issue-building-to-pr-open.json +27 -0
- package/workspace-snapshot/files/tests/fixtures/webhook/issue-pm-review.json +27 -0
- package/workspace-snapshot/files/tests/fixtures/webhook/issue-ready-for-planning.json +27 -0
- package/workspace-snapshot/files/tests/fixtures/webhook/issue-title-only-update.json +25 -0
- package/workspace-snapshot/files/tests/fixtures/workflows/harness-auto-runner-with-production-sync.yml +561 -0
- package/workspace-snapshot/files/tests/fixtures/workflows/trigger-harness-production-sync.yml +31 -0
- package/workspace-snapshot/files/tests/github/actions-url.test.ts +45 -0
- package/workspace-snapshot/files/tests/github/base-branch.test.ts +156 -0
- package/workspace-snapshot/files/tests/github/check-policy.test.ts +59 -0
- package/workspace-snapshot/files/tests/github/client.test.ts +226 -0
- package/workspace-snapshot/files/tests/github/commit-reachability.test.ts +148 -0
- package/workspace-snapshot/files/tests/github/merge-result.test.ts +26 -0
- package/workspace-snapshot/files/tests/github/pr-discovery.test.ts +55 -0
- package/workspace-snapshot/files/tests/github/pr-inspector.test.ts +393 -0
- package/workspace-snapshot/files/tests/github/pr-url.test.ts +30 -0
- package/workspace-snapshot/files/tests/github/rate-limit-metadata.test.ts +92 -0
- package/workspace-snapshot/files/tests/gui/configure-fix-loop.test.ts +460 -0
- package/workspace-snapshot/files/tests/gui/configure-health.test.ts +67 -0
- package/workspace-snapshot/files/tests/gui/design-system.test.ts +86 -0
- package/workspace-snapshot/files/tests/gui/dev-server-process.test.ts +22 -0
- package/workspace-snapshot/files/tests/gui/guided-setup.test.ts +186 -0
- package/workspace-snapshot/files/tests/gui/m6-configure-boundaries.test.ts +884 -0
- package/workspace-snapshot/files/tests/gui/packaged-harness-cloud-secrets-routes.test.ts +287 -0
- package/workspace-snapshot/files/tests/gui/packaged-harness-provisioning-routes.test.ts +212 -0
- package/workspace-snapshot/files/tests/gui/packaged-harness-target-workflow-routes.test.ts +227 -0
- package/workspace-snapshot/files/tests/gui/port.test.ts +74 -0
- package/workspace-snapshot/files/tests/gui/repo-root.test.ts +60 -0
- package/workspace-snapshot/files/tests/gui/setup-api.test.ts +181 -0
- package/workspace-snapshot/files/tests/gui/setup-json-response.test.ts +34 -0
- package/workspace-snapshot/files/tests/gui/step6-remote-state.test.ts +75 -0
- package/workspace-snapshot/files/tests/gui/sync-downstream-summaries.test.ts +198 -0
- package/workspace-snapshot/files/tests/gui/vercel-bridge-polling-ui.test.ts +25 -0
- package/workspace-snapshot/files/tests/gui/verification-state.test.ts +172 -0
- package/workspace-snapshot/files/tests/linear/comment-assertions.ts +24 -0
- package/workspace-snapshot/files/tests/linear/comment-card.test.ts +73 -0
- package/workspace-snapshot/files/tests/linear/comments.test.ts +185 -0
- package/workspace-snapshot/files/tests/linear/handoff-comment.test.ts +34 -0
- package/workspace-snapshot/files/tests/linear/markers.test.ts +97 -0
- package/workspace-snapshot/files/tests/linear/merge-comment.test.ts +61 -0
- package/workspace-snapshot/files/tests/linear/merge-source-comment.test.ts +49 -0
- package/workspace-snapshot/files/tests/linear/parser.test.ts +83 -0
- package/workspace-snapshot/files/tests/linear/planning-comment.test.ts +29 -0
- package/workspace-snapshot/files/tests/linear/pm-feedback-comment.test.ts +63 -0
- package/workspace-snapshot/files/tests/p-dev/browser.test.ts +38 -0
- package/workspace-snapshot/files/tests/p-dev/cli.test.ts +39 -0
- package/workspace-snapshot/files/tests/p-dev/git-object-plumbing.test.ts +139 -0
- package/workspace-snapshot/files/tests/p-dev/launch.test.ts +110 -0
- package/workspace-snapshot/files/tests/p-dev/next-bin.test.ts +16 -0
- package/workspace-snapshot/files/tests/p-dev/node-version.test.ts +20 -0
- package/workspace-snapshot/files/tests/p-dev/package-manifest.test.ts +47 -0
- package/workspace-snapshot/files/tests/p-dev/package-packed-artifact.test.ts +130 -0
- package/workspace-snapshot/files/tests/p-dev/package-paths.test.ts +43 -0
- package/workspace-snapshot/files/tests/p-dev/package-version.test.ts +55 -0
- package/workspace-snapshot/files/tests/p-dev/packaged-workspace-setup.test.ts +87 -0
- package/workspace-snapshot/files/tests/p-dev/runtime-mode.test.ts +18 -0
- package/workspace-snapshot/files/tests/p-dev/workspace-snapshot-digest.test.ts +61 -0
- package/workspace-snapshot/files/tests/p-dev/workspace-snapshot-generator.test.ts +76 -0
- package/workspace-snapshot/files/tests/p-dev/workspace-snapshot-policy.test.ts +35 -0
- package/workspace-snapshot/files/tests/p-dev/workspace-snapshot-validation.test.ts +158 -0
- package/workspace-snapshot/files/tests/p-dev/workspace.test.ts +80 -0
- package/workspace-snapshot/files/tests/preview/production-from-merge.test.ts +39 -0
- package/workspace-snapshot/files/tests/preview/vercel-from-pr.test.ts +120 -0
- package/workspace-snapshot/files/tests/prompts/builder.test.ts +58 -0
- package/workspace-snapshot/files/tests/prompts/implementation-builder.test.ts +76 -0
- package/workspace-snapshot/files/tests/prompts/issue-intake-chatgpt.test.ts +105 -0
- package/workspace-snapshot/files/tests/resolver/allowed-repos.test.ts +44 -0
- package/workspace-snapshot/files/tests/resolver/normalize-repo.test.ts +44 -0
- package/workspace-snapshot/files/tests/resolver/target-repo.test.ts +91 -0
- package/workspace-snapshot/files/tests/runner/building-recovery.test.ts +30 -0
- package/workspace-snapshot/files/tests/runner/dry-run.test.ts +128 -0
- package/workspace-snapshot/files/tests/runner/execution-environment.test.ts +114 -0
- package/workspace-snapshot/files/tests/runner/handoff.test.ts +312 -0
- package/workspace-snapshot/files/tests/runner/idempotency-handoff.test.ts +170 -0
- package/workspace-snapshot/files/tests/runner/idempotency-implementation.test.ts +143 -0
- package/workspace-snapshot/files/tests/runner/idempotency-merge.test.ts +118 -0
- package/workspace-snapshot/files/tests/runner/idempotency-revision.test.ts +111 -0
- package/workspace-snapshot/files/tests/runner/idempotency.test.ts +83 -0
- package/workspace-snapshot/files/tests/runner/implementation.test.ts +196 -0
- package/workspace-snapshot/files/tests/runner/integration-repair.test.ts +263 -0
- package/workspace-snapshot/files/tests/runner/merge.test.ts +760 -0
- package/workspace-snapshot/files/tests/runner/orchestrator.test.ts +301 -0
- package/workspace-snapshot/files/tests/runner/phase-args.test.ts +38 -0
- package/workspace-snapshot/files/tests/runner/planning.test.ts +160 -0
- package/workspace-snapshot/files/tests/runner/resolve-route.test.ts +249 -0
- package/workspace-snapshot/files/tests/runner/revision.test.ts +326 -0
- package/workspace-snapshot/files/tests/setup/config-builder.test.ts +136 -0
- package/workspace-snapshot/files/tests/setup/config-local-editor.test.ts +164 -0
- package/workspace-snapshot/files/tests/setup/connect-services-credential-availability.test.ts +151 -0
- package/workspace-snapshot/files/tests/setup/connect-services-env.test.ts +84 -0
- package/workspace-snapshot/files/tests/setup/control-plane-readiness.test.ts +59 -0
- package/workspace-snapshot/files/tests/setup/doctor-summary.test.ts +48 -0
- package/workspace-snapshot/files/tests/setup/env-merge.test.ts +177 -0
- package/workspace-snapshot/files/tests/setup/env-writer.test.ts +97 -0
- package/workspace-snapshot/files/tests/setup/first-run-readiness.test.ts +1099 -0
- package/workspace-snapshot/files/tests/setup/generated-instructions.test.ts +48 -0
- package/workspace-snapshot/files/tests/setup/github-dispatch-token.test.ts +111 -0
- package/workspace-snapshot/files/tests/setup/github-remote-provider.test.ts +66 -0
- package/workspace-snapshot/files/tests/setup/github-remote-setup-live.test.ts +59 -0
- package/workspace-snapshot/files/tests/setup/github-workflow-permissions.test.ts +71 -0
- package/workspace-snapshot/files/tests/setup/gui-remote-storage.test.ts +43 -0
- package/workspace-snapshot/files/tests/setup/gui-view-model.test.ts +251 -0
- package/workspace-snapshot/files/tests/setup/guided-config-form.test.ts +54 -0
- package/workspace-snapshot/files/tests/setup/harness-dispatch-repo.test.ts +105 -0
- package/workspace-snapshot/files/tests/setup/harness-managed-repo-marker.test.ts +141 -0
- package/workspace-snapshot/files/tests/setup/harness-provisioning-context.test.ts +89 -0
- package/workspace-snapshot/files/tests/setup/harness-provisioning-pending-state.test.ts +88 -0
- package/workspace-snapshot/files/tests/setup/harness-repo-provisioning.test.ts +897 -0
- package/workspace-snapshot/files/tests/setup/harness-secret-setup.test.ts +255 -0
- package/workspace-snapshot/files/tests/setup/harness-snapshot-default-branch.test.ts +73 -0
- package/workspace-snapshot/files/tests/setup/harness-snapshot-description-finalization.test.ts +136 -0
- package/workspace-snapshot/files/tests/setup/harness-snapshot-marker-tree.test.ts +61 -0
- package/workspace-snapshot/files/tests/setup/harness-snapshot-reconciliation.test.ts +132 -0
- package/workspace-snapshot/files/tests/setup/harness-snapshot-structured-errors.test.ts +137 -0
- package/workspace-snapshot/files/tests/setup/harness-snapshot-upload-rate-limit.test.ts +105 -0
- package/workspace-snapshot/files/tests/setup/linear-setup-apply.test.ts +131 -0
- package/workspace-snapshot/files/tests/setup/linear-setup-plan.test.ts +106 -0
- package/workspace-snapshot/files/tests/setup/linear-webhook-env-local.test.ts +95 -0
- package/workspace-snapshot/files/tests/setup/linear-webhook-secret.test.ts +256 -0
- package/workspace-snapshot/files/tests/setup/live-provisioning-error-preservation.test.ts +98 -0
- package/workspace-snapshot/files/tests/setup/local-apply-actions.test.ts +352 -0
- package/workspace-snapshot/files/tests/setup/local-readiness-checks.test.ts +175 -0
- package/workspace-snapshot/files/tests/setup/model-settings.test.ts +52 -0
- package/workspace-snapshot/files/tests/setup/packaged-provisioning-permissions.test.ts +41 -0
- package/workspace-snapshot/files/tests/setup/permission-model.test.ts +38 -0
- package/workspace-snapshot/files/tests/setup/redact-secrets.test.ts +78 -0
- package/workspace-snapshot/files/tests/setup/remote-actions.test.ts +45 -0
- package/workspace-snapshot/files/tests/setup/remote-apply-actions.test.ts +302 -0
- package/workspace-snapshot/files/tests/setup/remote-preview-fingerprint.test.ts +121 -0
- package/workspace-snapshot/files/tests/setup/service-verification.test.ts +312 -0
- package/workspace-snapshot/files/tests/setup/setup-actions.test.ts +96 -0
- package/workspace-snapshot/files/tests/setup/setup-form-defaults.test.ts +35 -0
- package/workspace-snapshot/files/tests/setup/setup-server-remote.test.ts +90 -0
- package/workspace-snapshot/files/tests/setup/stale-smoke-repo.test.ts +84 -0
- package/workspace-snapshot/files/tests/setup/step6-automatic-apply-outcome.test.ts +303 -0
- package/workspace-snapshot/files/tests/setup/target-workflow-finalization-lock.test.ts +51 -0
- package/workspace-snapshot/files/tests/setup/target-workflow-finalization-step-github.test.ts +435 -0
- package/workspace-snapshot/files/tests/setup/target-workflow-finalization.test.ts +222 -0
- package/workspace-snapshot/files/tests/setup/target-workflow-setup.test.ts +62 -0
- package/workspace-snapshot/files/tests/setup/test-workspace-snapshot-fixture.ts +100 -0
- package/workspace-snapshot/files/tests/setup/vercel-bridge-diagnostics.test.ts +429 -0
- package/workspace-snapshot/files/tests/setup/vercel-bridge-options.test.ts +135 -0
- package/workspace-snapshot/files/tests/setup/vercel-bridge-preview-fingerprint.test.ts +52 -0
- package/workspace-snapshot/files/tests/setup/vercel-bridge-redeploy-poll.test.ts +582 -0
- package/workspace-snapshot/files/tests/setup/vercel-bridge-structured-log.test.ts +45 -0
- package/workspace-snapshot/files/tests/setup/vercel-bridge-verification.test.ts +39 -0
- package/workspace-snapshot/files/tests/setup/vercel-endpoint-reachability.test.ts +60 -0
- package/workspace-snapshot/files/tests/setup/vercel-production-redeploy.test.ts +184 -0
- package/workspace-snapshot/files/tests/setup/vercel-setup-apply.test.ts +1282 -0
- package/workspace-snapshot/files/tests/setup/vercel-setup-client.test.ts +395 -0
- package/workspace-snapshot/files/tests/setup/vercel-setup-plan.test.ts +261 -0
- package/workspace-snapshot/files/tests/setup/vercel-webhook-probe.test.ts +78 -0
- package/workspace-snapshot/files/tests/setup/workflow-install-merge-errors.test.ts +38 -0
- package/workspace-snapshot/files/tests/validate-issue/report.test.ts +56 -0
- package/workspace-snapshot/files/tests/validate-issue/validate-issue.test.ts +202 -0
- package/workspace-snapshot/files/tests/webhook/dispatch-github.test.ts +193 -0
- package/workspace-snapshot/files/tests/webhook/extract-issue-key.test.ts +65 -0
- package/workspace-snapshot/files/tests/webhook/filter.test.ts +132 -0
- package/workspace-snapshot/files/tests/webhook/harness-auto-runner-workflow.test.ts +169 -0
- package/workspace-snapshot/files/tests/webhook/parse-linear-issue-event.test.ts +89 -0
- package/workspace-snapshot/files/tests/webhook/verify.test.ts +125 -0
- package/workspace-snapshot/files/tests/workflow/dispatch-metadata.test.ts +38 -0
- package/workspace-snapshot/files/tests/workflow/manifest-summary.test.ts +58 -0
- package/workspace-snapshot/files/tests/workflow/production-sync-dispatch.test.ts +101 -0
- package/workspace-snapshot/files/tests/workflow/validate.test.ts +70 -0
- package/workspace-snapshot/files/tests/workflow/workflow-shell-safety.test.ts +92 -0
- package/workspace-snapshot/files/tsconfig.json +22 -0
- package/workspace-snapshot/files/vercel.json +10 -0
- package/workspace-snapshot/files/vitest.config.ts +15 -0
- package/workspace-snapshot/manifest.json +4911 -0
- package/gui/.next/server/chunks/120.js +0 -81
- package/gui/.next/static/css/cc2acc71c03f3b4b.css +0 -3
- /package/gui/.next/static/{7x8X_k4tESvkyqRnNCC9E → ZGJuemeaiW4yT7CTlmjdG}/_buildManifest.js +0 -0
- /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.
|