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,101 @@
|
|
|
1
|
+
# Milestone 5 — Revision phase
|
|
2
|
+
|
|
3
|
+
**Status:** Implemented (Needs Revision → Revising → PM Review; no merge loop)
|
|
4
|
+
|
|
5
|
+
## What exists
|
|
6
|
+
|
|
7
|
+
- Live revision orchestration triggered from Linear **Needs Revision**
|
|
8
|
+
- Reads latest durable **handoff** marker for `pr_url`, `branch`, `target_repo`, `preview_url`
|
|
9
|
+
- Reads latest **PM feedback** comment after the handoff marker
|
|
10
|
+
- Verifies linked GitHub PR is still open (`GITHUB_TOKEN` required)
|
|
11
|
+
- Cursor SDK **cloud** revision agent on existing branch/PR (`autoCreatePR: false`)
|
|
12
|
+
- Linear status transitions: **Needs Revision** → **Revising** → **PM Review** (or **Blocked** after entering Revising)
|
|
13
|
+
- Revision summary comment with durable marker footer keyed to `pm_feedback_comment_id`
|
|
14
|
+
- Post-success duplicate skip from **PM Review** when latest PM feedback already revised
|
|
15
|
+
- Auto phase routing: **Needs Revision** → `revision`
|
|
16
|
+
|
|
17
|
+
## What is deferred
|
|
18
|
+
|
|
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
|
+
- `CURSOR_API_KEY`
|
|
29
|
+
- `GITHUB_TOKEN`
|
|
30
|
+
2. Issue must have a prior handoff marker and PM feedback comment after handoff.
|
|
31
|
+
3. Issue must be in **Needs Revision** (or **Revising** with `--force` retry).
|
|
32
|
+
|
|
33
|
+
## Commands
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
npm install
|
|
37
|
+
npm test
|
|
38
|
+
npm run build
|
|
39
|
+
npm run harness:doctor
|
|
40
|
+
|
|
41
|
+
# Live revision
|
|
42
|
+
npm run harness:run -- --issue WES-13 --phase revision
|
|
43
|
+
|
|
44
|
+
# Auto phase infers revision from Needs Revision
|
|
45
|
+
npm run harness:run -- --issue WES-13
|
|
46
|
+
|
|
47
|
+
# Inspect artifacts
|
|
48
|
+
npm run harness:inspect -- --run runs/WES-13/<run-id>
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Manual integration gate
|
|
52
|
+
|
|
53
|
+
**Issue:** WES-13
|
|
54
|
+
|
|
55
|
+
**PR:** [target repo PR #4](https://github.com/owner/example-target-app/pull/4) (open, unmerged)
|
|
56
|
+
|
|
57
|
+
**Human setup:**
|
|
58
|
+
|
|
59
|
+
1. Add PM feedback comment: “Please change the Hello World page copy to say: Hello from the agentic harness.”
|
|
60
|
+
2. Move WES-13: **PM Review → Needs Revision**
|
|
61
|
+
|
|
62
|
+
**Live command:**
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
npm run harness:run -- --issue WES-13 --phase revision
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**Pass criteria:**
|
|
69
|
+
|
|
70
|
+
- WES-13: Needs Revision → Revising → PM Review
|
|
71
|
+
- PR #4 updated on **same branch**; **no new PR**
|
|
72
|
+
- Revision comment with marker footer (`phase: revision`, `pm_feedback_comment_id`, `previous_handoff_run_id`)
|
|
73
|
+
- Post-success re-run from **PM Review** → duplicate skip (exit 0)
|
|
74
|
+
|
|
75
|
+
## Artifacts
|
|
76
|
+
|
|
77
|
+
```text
|
|
78
|
+
runs/<issue>/<run-id>/
|
|
79
|
+
manifest.json
|
|
80
|
+
run-summary.md
|
|
81
|
+
events.jsonl
|
|
82
|
+
linear/
|
|
83
|
+
handoff-comment-loaded.md
|
|
84
|
+
pm-feedback-comment-loaded.md
|
|
85
|
+
revision-comment.md
|
|
86
|
+
prompts/revision-agent.md
|
|
87
|
+
outputs/revision-result.md
|
|
88
|
+
github/pr-before.json
|
|
89
|
+
github/pr-after.json
|
|
90
|
+
vercel/deployment.json
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## Idempotency
|
|
94
|
+
|
|
95
|
+
| Status | Matching revision marker for latest PM feedback | Result |
|
|
96
|
+
|--------|-----------------------------------------------|--------|
|
|
97
|
+
| Needs Revision | No | Proceed |
|
|
98
|
+
| Needs Revision | Yes | Duplicate skip |
|
|
99
|
+
| PM Review | Yes | Duplicate skip (post-success re-run) |
|
|
100
|
+
| PM Review | No | `wrong_status` |
|
|
101
|
+
| Other | — | `wrong_status` |
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
# Milestone 6 — Merge phase
|
|
2
|
+
|
|
3
|
+
**Status:** Implemented (Ready to Merge → Merging → Merged / Deployed)
|
|
4
|
+
|
|
5
|
+
## What exists
|
|
6
|
+
|
|
7
|
+
- Live merge orchestration triggered from Linear **Ready to Merge**
|
|
8
|
+
- Reads latest **revision** marker if present; otherwise latest **handoff** marker
|
|
9
|
+
- Verifies GitHub PR is open, correct repo, and checks policy before merge
|
|
10
|
+
- Squash merges PR via GitHub REST API (`GITHUB_TOKEN` with merge permission required)
|
|
11
|
+
- Best-effort production deployment URL capture after merge
|
|
12
|
+
- Posts merge completion comment with durable marker footer
|
|
13
|
+
- Linear transitions: **Ready to Merge** → **Merging** → **Merged / Deployed**
|
|
14
|
+
- Recovery path when PR already merged without merge marker
|
|
15
|
+
- Integration repair after merge-queue drift: deterministic GitHub update-branch first, then a narrow Composer 2.5 Cursor repair agent if conflicts require local resolution
|
|
16
|
+
- Post-success duplicate skip from **Merged / Deployed**
|
|
17
|
+
- Auto phase routing: **Ready to Merge** → `merge`
|
|
18
|
+
|
|
19
|
+
## What is deferred
|
|
20
|
+
|
|
21
|
+
- Engineering Review
|
|
22
|
+
- Release tags / GitHub Releases
|
|
23
|
+
- Branch deletion (config flag `deleteBranchAfterMerge` defaults **false**)
|
|
24
|
+
- Watcher/poller
|
|
25
|
+
- Skills
|
|
26
|
+
- Vercel API token integration
|
|
27
|
+
|
|
28
|
+
## Prerequisites
|
|
29
|
+
|
|
30
|
+
1. Copy `.env.example` to `.env` and set:
|
|
31
|
+
- `LINEAR_API_KEY`
|
|
32
|
+
- **`GITHUB_TOKEN`** with `repo` merge permissions and PR head-branch write (classic `repo`, or fine-grained Contents: Read and write plus Pull requests: Read and write)
|
|
33
|
+
- `CURSOR_API_KEY` when integration repair may need an agent
|
|
34
|
+
2. Issue must have a prior handoff or revision marker with `pr_url`.
|
|
35
|
+
3. PM must manually move issue **PM Review → Ready to Merge** before running merge.
|
|
36
|
+
4. Run `npm run harness:doctor -- --profile merge`; doctor verifies base branches and target-repo write permission needed for PR branch repair.
|
|
37
|
+
|
|
38
|
+
## Commands
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
npm install
|
|
42
|
+
npm test
|
|
43
|
+
npm run build
|
|
44
|
+
npm run harness:doctor
|
|
45
|
+
|
|
46
|
+
# Live merge
|
|
47
|
+
npm run harness:run -- --issue WES-13 --phase merge
|
|
48
|
+
|
|
49
|
+
# Auto phase infers merge from Ready to Merge
|
|
50
|
+
npm run harness:run -- --issue WES-13
|
|
51
|
+
|
|
52
|
+
# Inspect artifacts
|
|
53
|
+
npm run harness:inspect -- --run runs/WES-13/<run-id>
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Manual integration gate
|
|
57
|
+
|
|
58
|
+
**Issue:** WES-13
|
|
59
|
+
|
|
60
|
+
**PR:** [target repo PR #4](https://github.com/owner/example-target-app/pull/4)
|
|
61
|
+
|
|
62
|
+
**Human setup:**
|
|
63
|
+
|
|
64
|
+
1. Review PR #4 / preview manually.
|
|
65
|
+
2. Move WES-13: **PM Review → Ready to Merge**
|
|
66
|
+
|
|
67
|
+
**Live command:**
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
npm run harness:run -- --issue WES-13 --phase merge
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**Pass criteria:**
|
|
74
|
+
|
|
75
|
+
- WES-13: Ready to Merge → Merging → **Merged / Deployed**
|
|
76
|
+
- PR #4 **squash merged** on GitHub
|
|
77
|
+
- Completion comment with `phase: merge` marker footer
|
|
78
|
+
- Deployment URL captured if available; warning only if not (default config)
|
|
79
|
+
- Re-run from **Merged / Deployed** → duplicate skip (exit 0)
|
|
80
|
+
|
|
81
|
+
## Checks policy (default)
|
|
82
|
+
|
|
83
|
+
| Check state | Behavior |
|
|
84
|
+
|-------------|----------|
|
|
85
|
+
| success | Allow merge |
|
|
86
|
+
| neutral / skipped | Allow merge |
|
|
87
|
+
| failure / cancelled / action_required | Block (`checks_failing`) |
|
|
88
|
+
| pending | Block (`checks_pending`) |
|
|
89
|
+
| none / unreadable | Block (`checks_unknown`) |
|
|
90
|
+
|
|
91
|
+
Override via `merge.allowPendingChecks` / `merge.allowUnknownChecks` in config.
|
|
92
|
+
|
|
93
|
+
**Vercel preview note:** When GitHub check runs and commit statuses are inconclusive but the Vercel bot comment reports **Ready**, merge proceeds with a warning (see `validationSummary` in manifest).
|
|
94
|
+
|
|
95
|
+
## Integration repair
|
|
96
|
+
|
|
97
|
+
When a PR becomes `behind` or `dirty` after waiting in the serialized merge queue:
|
|
98
|
+
|
|
99
|
+
1. The issue stays **Merging**.
|
|
100
|
+
2. The runner verifies `GITHUB_TOKEN` can write PR head branches.
|
|
101
|
+
3. The runner calls GitHub update-branch, which merges the latest base branch into the PR branch.
|
|
102
|
+
4. If update-branch succeeds cleanly, the runner waits for checks and returns directly to merge.
|
|
103
|
+
5. If update-branch cannot resolve conflicts, the runner launches a Composer 2.5 Cursor cloud repair agent on the PR branch.
|
|
104
|
+
6. The repair agent fetches the base branch, locally merges base into head, resolves conflicts, commits, runs validation, and pushes the PR branch.
|
|
105
|
+
7. The runner re-inspects the PR, waits for checks, and returns directly to merge if validation passes.
|
|
106
|
+
8. If repair fails, is ambiguous, violates scope, or needs broader product judgment, the issue moves to **Blocked** with an actionable reason.
|
|
107
|
+
|
|
108
|
+
Repair may edit conflict files and direct dependency-closure files required to compile and pass validation. It may not make unrelated product changes, broad refactors, broad formatting sweeps, or direct edits to `dev` / `main`.
|
|
109
|
+
|
|
110
|
+
Canceled repair runs recover through **Harness Auto Runner** `workflow_dispatch` with the issue key, `phase=merge`, and force enabled. There is no Merging webhook re-dispatch in v1.
|
|
111
|
+
|
|
112
|
+
## Artifacts
|
|
113
|
+
|
|
114
|
+
```text
|
|
115
|
+
runs/<issue>/<run-id>/
|
|
116
|
+
manifest.json
|
|
117
|
+
run-summary.md
|
|
118
|
+
events.jsonl
|
|
119
|
+
linear/
|
|
120
|
+
merge-source-comment-loaded.md
|
|
121
|
+
merge-completion-comment.md
|
|
122
|
+
github/
|
|
123
|
+
pr-before-merge.json
|
|
124
|
+
checks-before-merge.json
|
|
125
|
+
merge-result.json
|
|
126
|
+
pr-after-merge.json
|
|
127
|
+
prompts/
|
|
128
|
+
integration-repair-agent.md # only when agent repair runs
|
|
129
|
+
vercel/
|
|
130
|
+
production-deployment.json
|
|
131
|
+
outputs/
|
|
132
|
+
merge-recovery.json # only on post-merge Linear failure
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## Idempotency
|
|
136
|
+
|
|
137
|
+
| Scenario | Result |
|
|
138
|
+
|----------|--------|
|
|
139
|
+
| Ready to Merge, PR open, no merge marker | Proceed |
|
|
140
|
+
| Merge marker exists for PR URL | Duplicate skip |
|
|
141
|
+
| Merged / Deployed | Duplicate skip |
|
|
142
|
+
| PR merged, no merge marker | Recovery: post comment + move to Merged / Deployed |
|
|
143
|
+
| PM Review (no Ready to Merge) | `wrong_status` |
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Milestone 7 — Issue intake
|
|
2
|
+
|
|
3
|
+
**Status:** Implemented (issue-intake skill, template alignment, validate-issue CLI)
|
|
4
|
+
|
|
5
|
+
## What exists
|
|
6
|
+
|
|
7
|
+
- **Issue intake skill** — [`.agents/skills/issue-intake/SKILL.md`](../.agents/skills/issue-intake/SKILL.md) interviews Weston and produces a Linear-ready issue package
|
|
8
|
+
- **Parser-aligned template** — [`templates/linear-issue.md`](../templates/linear-issue.md)
|
|
9
|
+
- **Operator guide** — [`docs/issue-intake.md`](../issue-intake.md)
|
|
10
|
+
- **Read-only validator CLI** — `harness validate-issue` with route-specific `--intended-phase planning|implementation`
|
|
11
|
+
- Reuses parser, resolver, allowlist, narrow heuristic, and planning-marker detection
|
|
12
|
+
- Tests and fixtures for validation paths
|
|
13
|
+
|
|
14
|
+
## What is deferred
|
|
15
|
+
|
|
16
|
+
- Lead agent skill, `performance-cost-audit`, skill registry/package manager, manifests, provider/client adapters, and runner-skill integration (see [`docs/skills/skill-architecture.md`](../skills/skill-architecture.md))
|
|
17
|
+
- ChatGPT/Linear automation for intake
|
|
18
|
+
- Label enforcement in runner code
|
|
19
|
+
- Writing to Linear from the validator
|
|
20
|
+
|
|
21
|
+
## Prerequisites
|
|
22
|
+
|
|
23
|
+
1. `harness.config.json` with repo mappings and `allowedTargetRepos`
|
|
24
|
+
2. For `--issue` mode: `LINEAR_API_KEY` in `.env` (read-only fetch)
|
|
25
|
+
|
|
26
|
+
## Commands
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
npm install
|
|
30
|
+
npm test
|
|
31
|
+
npm run build
|
|
32
|
+
|
|
33
|
+
# Validate a draft file (planning route)
|
|
34
|
+
npm run harness:validate-issue -- --file draft.md --intended-phase planning
|
|
35
|
+
|
|
36
|
+
# Validate a draft file (build-direct route)
|
|
37
|
+
npm run harness:validate-issue -- --file draft.md --intended-phase implementation
|
|
38
|
+
|
|
39
|
+
# Validate a live Linear issue (read-only)
|
|
40
|
+
npm run harness:validate-issue -- --issue WES-XX --intended-phase implementation
|
|
41
|
+
|
|
42
|
+
# JSON output
|
|
43
|
+
npm run harness:validate-issue -- --file draft.md --json
|
|
44
|
+
|
|
45
|
+
# Regression: preflight dry-run still works
|
|
46
|
+
npm run harness:run -- --issue WES-FIXTURE --dry-run \
|
|
47
|
+
--fixture tests/fixtures/issues/valid-target-app.md
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Exit codes
|
|
51
|
+
|
|
52
|
+
| Code | Meaning |
|
|
53
|
+
|------|---------|
|
|
54
|
+
| 0 | Passes route check (planning by default; implementation when `--intended-phase implementation`) |
|
|
55
|
+
| 1 | CLI/config error (bad args, missing API key, invalid phase) |
|
|
56
|
+
| 2 | Validation failure for the requested route |
|
|
57
|
+
|
|
58
|
+
## Pass criteria
|
|
59
|
+
|
|
60
|
+
- Skill output passes route-specific validator for recommended status
|
|
61
|
+
- `--intended-phase implementation` fails broad issues at file-validation time
|
|
62
|
+
- Validator catches `ambiguous_issue`, `missing_target_repo`, `unknown_repo_denied`
|
|
63
|
+
- No Linear writes from validator
|
|
64
|
+
- Full test suite green
|
|
65
|
+
|
|
66
|
+
## Artifacts
|
|
67
|
+
|
|
68
|
+
The validator prints a report to stdout only. It does not write under `runs/`.
|
|
69
|
+
|
|
70
|
+
## Authoritative workspace
|
|
71
|
+
|
|
72
|
+
Use `/Users/weston/Code/agentic-product-development-harness` (not the stale `.cursor` workspace clone).
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# Milestone 8 — Linear watcher / auto-runner
|
|
2
|
+
|
|
3
|
+
**Status:** Implemented (Vercel webhook bridge + GitHub Actions auto-runner)
|
|
4
|
+
|
|
5
|
+
## What exists
|
|
6
|
+
|
|
7
|
+
- **Vercel webhook endpoint** — [`api/linear-webhook.ts`](../../api/linear-webhook.ts) verifies Linear signatures and dispatches GitHub `repository_dispatch`
|
|
8
|
+
- **Webhook modules** — [`src/webhook/`](../../src/webhook/) (verify, parse, filter, dispatch)
|
|
9
|
+
- **Dispatch allowlist** — only trigger statuses dispatch GHA: Ready for Planning, Ready for Build, PR Open, Needs Revision, Ready to Merge
|
|
10
|
+
- **GitHub Actions runner** — [`.github/workflows/harness-auto-runner.yml`](../../.github/workflows/harness-auto-runner.yml)
|
|
11
|
+
- **Manual fallback** — `workflow_dispatch` runs harness in cloud without local CLI
|
|
12
|
+
- **Operator guide** — [`docs/linear-watcher-setup.md`](../linear-watcher-setup.md)
|
|
13
|
+
- Tests under [`tests/webhook/`](../../tests/webhook/)
|
|
14
|
+
|
|
15
|
+
## What is deferred
|
|
16
|
+
|
|
17
|
+
- Polling Linear
|
|
18
|
+
- Database-backed queue
|
|
19
|
+
- Lead agent / autonomous repair agent
|
|
20
|
+
- Production release tags
|
|
21
|
+
- GitHub App (PAT-based dispatch is sufficient)
|
|
22
|
+
|
|
23
|
+
## Prerequisites
|
|
24
|
+
|
|
25
|
+
1. Vercel project with webhook env vars (see setup guide)
|
|
26
|
+
2. GitHub Actions secrets: `LINEAR_API_KEY`, `CURSOR_API_KEY`, `HARNESS_GITHUB_TOKEN` (mapped to runtime `GITHUB_TOKEN`)
|
|
27
|
+
3. Linear Issue webhook pointed at Vercel endpoint
|
|
28
|
+
4. Harness repo default branch `main`
|
|
29
|
+
|
|
30
|
+
## Architecture
|
|
31
|
+
|
|
32
|
+
```text
|
|
33
|
+
Linear status change
|
|
34
|
+
→ Vercel /api/linear-webhook (verify + filter)
|
|
35
|
+
→ GitHub repository_dispatch
|
|
36
|
+
→ GitHub Actions harness-auto-runner
|
|
37
|
+
→ npm run harness:run -- --issue WES-XX --phase auto
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Dispatch allowlist
|
|
41
|
+
|
|
42
|
+
| Status | Dispatches GHA? | Harness phase |
|
|
43
|
+
|--------|-----------------|---------------|
|
|
44
|
+
| Ready for Planning | yes | planning |
|
|
45
|
+
| Ready for Build | yes | implementation |
|
|
46
|
+
| PR Open | yes | handoff |
|
|
47
|
+
| Needs Revision | yes | revision |
|
|
48
|
+
| Ready to Merge | yes | merge |
|
|
49
|
+
| Planning, Building, PM Review, Merging, Merged / Deployed, etc. | no (`ignored_status`) | — |
|
|
50
|
+
|
|
51
|
+
Harness remains authoritative for phase execution and idempotency once GHA runs.
|
|
52
|
+
|
|
53
|
+
## Commands
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
npm install
|
|
57
|
+
npm test
|
|
58
|
+
npm run build
|
|
59
|
+
npm run generate:config-schema
|
|
60
|
+
npm run harness:doctor
|
|
61
|
+
|
|
62
|
+
# Webhook unit tests only
|
|
63
|
+
npm run test:webhook
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Manual validation gates
|
|
67
|
+
|
|
68
|
+
See [`docs/linear-watcher-setup.md`](../linear-watcher-setup.md) for Gates 1–4.
|
|
69
|
+
|
|
70
|
+
## Pass criteria
|
|
71
|
+
|
|
72
|
+
- Unit tests green including webhook filter (`ignored_status`) cases
|
|
73
|
+
- `workflow_dispatch` runs harness in GitHub Actions without local CLI
|
|
74
|
+
- `repository_dispatch` triggers workflow with test payload
|
|
75
|
+
- Live Linear status change to allowlisted status starts GHA run
|
|
76
|
+
- Transitional statuses (Planning, PM Review, etc.) return `ignored_status` with no GHA run
|
|
77
|
+
|
|
78
|
+
## Authoritative workspace
|
|
79
|
+
|
|
80
|
+
Use `/Users/weston/Code/agentic-product-development-harness` or sync to `origin/main` before implementing follow-ups.
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# npm packaging spike (historical)
|
|
2
|
+
|
|
3
|
+
**Status:** Historical — superseded by the public `p-dev` package in v0.3.0.
|
|
4
|
+
|
|
5
|
+
The canonical end-user guide is [`docs/p-dev.md`](p-dev.md).
|
|
6
|
+
|
|
7
|
+
## What this spike proved (now shipped)
|
|
8
|
+
|
|
9
|
+
- A dedicated npm package boundary at [`packages/p-dev/`](../packages/p-dev/)
|
|
10
|
+
- `npx --yes p-dev-harness@0.3.0` launch without cloning the source repository
|
|
11
|
+
- Durable operator workspace under `P_DEV_HOME`, `--workspace`, or `~/.p-dev`
|
|
12
|
+
- macOS browser auto-launch for the Configure GUI
|
|
13
|
+
- Packaged guided setup through private harness workspace provisioning
|
|
14
|
+
|
|
15
|
+
## Maintainer tarball validation
|
|
16
|
+
|
|
17
|
+
From a clean repository checkout:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npm ci
|
|
21
|
+
npm run build
|
|
22
|
+
npm test
|
|
23
|
+
npm run test:webhook
|
|
24
|
+
npm run package:p-dev:pack
|
|
25
|
+
npm run package:p-dev:inspect
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Packed tarball smoke from a clean temporary directory:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
TARBALL="/absolute/path/to/repo/packages/p-dev/p-dev-harness-0.3.0.tgz"
|
|
32
|
+
WORKDIR=$(mktemp -d)
|
|
33
|
+
export P_DEV_HOME="$WORKDIR/workspace"
|
|
34
|
+
cd "$WORKDIR"
|
|
35
|
+
npx --yes "file:$TARBALL" --no-open
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Verify the printed Configure URL responds:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
curl -fsS "http://localhost:3000/settings/configure" | head
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Source-development path
|
|
45
|
+
|
|
46
|
+
Repo-local commands remain the contributor path:
|
|
47
|
+
|
|
48
|
+
- `npm run harness:gui`
|
|
49
|
+
- `npm run harness:configure`
|
|
50
|
+
- `npm run harness:configure:stable`
|
|
51
|
+
|
|
52
|
+
See [`docs/getting-started.md`](getting-started.md).
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
# Operator configuration
|
|
2
|
+
|
|
3
|
+
Guide for private target-repo configuration so production sync and harness automation work for operator-specific repos without committing personal wiring to the public harness repo.
|
|
4
|
+
|
|
5
|
+
**Related:** [`docs/getting-started.md`](getting-started.md), [`docs/production-sync-automation.md`](production-sync-automation.md), [`docs/security.md`](security.md)
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Overview
|
|
10
|
+
|
|
11
|
+
The committed [`harness.config.json`](../harness.config.json) is a **generic example** (`target-app`, `owner/example-target-app`). Real operator target repos belong in **private configuration** loaded at runtime.
|
|
12
|
+
|
|
13
|
+
Config resolution order (fail closed):
|
|
14
|
+
|
|
15
|
+
1. **Explicit CLI `--config`** — only when `argv` contains `--config` (overrides ambient env)
|
|
16
|
+
2. **`HARNESS_CONFIG_JSON_B64`** — base64-encoded JSON (GitHub Actions secret)
|
|
17
|
+
3. **`HARNESS_CONFIG_JSON`** — raw JSON string (local/debug)
|
|
18
|
+
4. **`HARNESS_CONFIG_PATH`** — path to a local config file
|
|
19
|
+
5. **`harness.config.json`** — committed default example
|
|
20
|
+
|
|
21
|
+
If the resolved source is missing, unreadable, or invalid, harness commands exit non-zero.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## Recommended local setup
|
|
26
|
+
|
|
27
|
+
**GUI path (recommended):**
|
|
28
|
+
|
|
29
|
+
1. `npm run harness:gui` — guided Settings / Configure forms with preview and confirmation-gated local writes
|
|
30
|
+
2. Apply `.env.local` and `.harness/config.local.json` from the GUI, or use CLI scaffold below as fallback
|
|
31
|
+
3. `npm run harness:doctor`
|
|
32
|
+
|
|
33
|
+
**CLI scaffold path:**
|
|
34
|
+
|
|
35
|
+
1. `npm run harness:operator:init` — scaffolds `.env.local` and `.harness/config.local.json` from committed examples via setup core services (does not overwrite unless `--force`)
|
|
36
|
+
2. Edit `.harness/config.local.json` with your real target repo mapping
|
|
37
|
+
3. Keep `HARNESS_CONFIG_PATH=.harness/config.local.json` in `.env.local`
|
|
38
|
+
4. `npm run harness:doctor`
|
|
39
|
+
|
|
40
|
+
| File | Role |
|
|
41
|
+
|------|------|
|
|
42
|
+
| `.env.local` | Local secrets and `HARNESS_CONFIG_PATH` pointer (gitignored) |
|
|
43
|
+
| `.harness/config.local.json` | Structured private target-repo config (gitignored) |
|
|
44
|
+
| [`.harness/config.example.json`](../.harness/config.example.json) | Committed starter template (single target repo) |
|
|
45
|
+
| [`harness.config.json`](../harness.config.json) | Committed public example/fallback when no private source is set |
|
|
46
|
+
|
|
47
|
+
The starter config in `.harness/config.example.json` is for first-time users with **one** target repo. Add more entries to `repos[]` and `allowedTargetRepos[]` for every repo you want the harness to manage.
|
|
48
|
+
|
|
49
|
+
Setup core services in [`src/setup/`](../src/setup/) power `harness:operator:init`, the local Product Development Harness GUI Settings / Configure screen (`npm run harness:gui`), confirmation-gated local file writes (`src/setup/local-apply-actions.ts`), and confirmation-gated remote harness secret / target workflow PR writes (`src/setup/remote-apply-actions.ts`). They support dry-run previews, local and remote writes after confirmation, permission classification, and manual instruction generation without changing runtime harness automation behavior.
|
|
50
|
+
|
|
51
|
+
**Remote setup (GUI):** after local config is in place, use Settings / Configure → **Remote setup** to preview and apply harness repo Actions secrets and target workflow install PRs. See [`docs/gui-remote-setup.md`](../gui-remote-setup.md).
|
|
52
|
+
|
|
53
|
+
GUI-assisted fields:
|
|
54
|
+
|
|
55
|
+
| Surface | Fields |
|
|
56
|
+
|---------|--------|
|
|
57
|
+
| `.env.local` | `HARNESS_CONFIG_PATH`, `LINEAR_API_KEY`, `CURSOR_API_KEY`, `GITHUB_TOKEN` |
|
|
58
|
+
| `.harness/config.local.json` | `linear.teamKey`, model id, per-repo `id`, `targetRepo`, branches, preview provider/URLs, Linear status names, validation commands |
|
|
59
|
+
|
|
60
|
+
Local GUI docs: [`docs/gui-local.md`](../gui-local.md)
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Private config is a full replacement (not an overlay)
|
|
65
|
+
|
|
66
|
+
**`HARNESS_CONFIG_JSON_B64` and other private config sources replace the whole harness config for that run.** They do **not** merge with or overlay committed [`harness.config.json`](../harness.config.json).
|
|
67
|
+
|
|
68
|
+
When a private source wins the resolution chain, only that JSON is used. Any repo id the harness must resolve in cloud automation must appear in the private config itself, with matching entries in both `repos[]` and `allowedTargetRepos[]`.
|
|
69
|
+
|
|
70
|
+
**Example:** If an operator sets `HARNESS_CONFIG_JSON_B64` with only one private target repo, harness self-automation may stop resolving the `harness` repo id from the committed fallback. For an operator managing multiple repos (e.g. `my-app` and the harness repo itself), the private config must include **every** repo the harness should manage — not just the newest target.
|
|
71
|
+
|
|
72
|
+
Do not solve this by committing operator-specific values to the public repo. Document and maintain the full private JSON locally and in `HARNESS_CONFIG_JSON_B64`.
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## Local development
|
|
77
|
+
|
|
78
|
+
Point at a private config file:
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
export HARNESS_CONFIG_PATH=/path/to/private/harness.config.json
|
|
82
|
+
npm run harness:doctor
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Or pass an explicit file (overrides env):
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
npm run harness:doctor -- --config /path/to/private/harness.config.json
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Inline JSON for quick tests:
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
export HARNESS_CONFIG_JSON='{"version":1,...}'
|
|
95
|
+
npm run harness:doctor
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## GitHub Actions (private operator config)
|
|
101
|
+
|
|
102
|
+
1. Maintain a **private** config locally at `.harness/config.local.json` (via `npm run harness:operator:init`) — do not commit operator target repos to the public harness repo.
|
|
103
|
+
2. Ensure the private JSON includes **every** repo the harness should manage in `repos[]` and `allowedTargetRepos[]` (full replacement — see above).
|
|
104
|
+
3. Base64-encode the full config (no newlines):
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
base64 < .harness/config.local.json | tr -d '\n'
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
4. Store the result as GitHub Actions secret **`HARNESS_CONFIG_JSON_B64`** on the harness repo.
|
|
111
|
+
5. The secret must include all operator `repos[]` entries, Linear mappings, and `allowedTargetRepos` — it replaces committed `harness.config.json` for cloud runs.
|
|
112
|
+
|
|
113
|
+
The harness workflow sets `HARNESS_CONFIG_JSON_B64` on all jobs (`gate`, `run-harness`, `run-merge`, `sync-production`). Because GHA does not pass `--config`, the secret is used automatically.
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## Migrating from public target-app config
|
|
118
|
+
|
|
119
|
+
The committed [`harness.config.json`](../harness.config.json) demonstrates shape only — it is **not** an operator’s live target-repo wiring.
|
|
120
|
+
|
|
121
|
+
To run production sync for a real target repo:
|
|
122
|
+
|
|
123
|
+
1. Copy the example config to a **private file** and add your target repo under `repos[]` with a stable `id` (e.g. `real-target`).
|
|
124
|
+
2. Add the target URL to `allowedTargetRepos`.
|
|
125
|
+
3. Set **`HARNESS_CONFIG_JSON_B64`** in harness repo Actions secrets with the full private JSON.
|
|
126
|
+
4. Update the **target repo dispatch workflow** ([`tests/fixtures/workflows/trigger-harness-production-sync.yml`](../tests/fixtures/workflows/trigger-harness-production-sync.yml)) so the `production_promoted` payload `repo` field matches your private config `repos[].id` (not necessarily `target-app`).
|
|
127
|
+
5. Until private config is present, production sync **fails closed** with `unknown_repo_id` when dispatch references a repo id not in the resolved config.
|
|
128
|
+
|
|
129
|
+
See [`docs/production-sync-automation.md`](production-sync-automation.md) for dispatch payload shape and trigger workflow setup.
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## Target repo dispatch workflow
|
|
134
|
+
|
|
135
|
+
Install in each target repo (not in the harness repo):
|
|
136
|
+
|
|
137
|
+
- Path: `.github/workflows/trigger-harness-production-sync.yml`
|
|
138
|
+
- Canonical fixture: [`tests/fixtures/workflows/trigger-harness-production-sync.yml`](../tests/fixtures/workflows/trigger-harness-production-sync.yml)
|
|
139
|
+
|
|
140
|
+
Operator replaces:
|
|
141
|
+
|
|
142
|
+
- Harness dispatch URL (owner/repo of harness installation)
|
|
143
|
+
- Payload `repo` → private config `repos[].id`
|
|
144
|
+
- Payload `sourceRepo` → `owner/target-repo` slug matching configured `targetRepo`
|
|
145
|
+
|
|
146
|
+
**Guards:** runs only on production branch pushes (e.g. `main`), not integration branch pushes.
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## Branch protection
|
|
151
|
+
|
|
152
|
+
Target repos should use integration branch + production branch strategy. See [`docs/target-repo-branch-setup.md`](target-repo-branch-setup.md).
|
|
153
|
+
|
|
154
|
+
Production sync assumes merge commits are promoted to the configured `productionBranch` before dispatch fires.
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## Token boundary
|
|
159
|
+
|
|
160
|
+
| Credential | Where | Purpose |
|
|
161
|
+
|------------|-------|---------|
|
|
162
|
+
| `HARNESS_CONFIG_JSON_B64` | Harness GHA secrets | Private config (sensitive metadata, not a write token) |
|
|
163
|
+
| `LINEAR_API_KEY`, `CURSOR_API_KEY`, `HARNESS_GITHUB_TOKEN` | Harness GHA secrets | Live harness phases |
|
|
164
|
+
| `HARNESS_DISPATCH_TOKEN` | Target repo GHA secrets | Dispatch-only PAT scoped to harness repo |
|
|
165
|
+
|
|
166
|
+
Full matrix: [`docs/security.md`](security.md)
|
|
167
|
+
|
|
168
|
+
Do **not** put merge-capable tokens or Linear/Cursor keys in target repos or Vercel.
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## Validation
|
|
173
|
+
|
|
174
|
+
```bash
|
|
175
|
+
npm run harness:doctor
|
|
176
|
+
HARNESS_CONFIG_PATH=/path/to/private.json npm run harness:doctor
|
|
177
|
+
npm test
|
|
178
|
+
npm run test:webhook
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
After setting `HARNESS_CONFIG_JSON_B64`, validate cloud config loading safely:
|
|
182
|
+
|
|
183
|
+
1. **Config smoke test:** `workflow_dispatch` with `sync_repo=harness` (or a repo where integration and production branches match) — expect no-op success when branches match.
|
|
184
|
+
2. **Target repo dry-run:** `workflow_dispatch` with `sync_repo=<your-repo-id>` and `sync_dry_run=true` (default) — inspects sync without Linear writes.
|
|
185
|
+
3. **Live sync:** set `sync_dry_run=false` only when ready for real Linear status updates.
|
|
186
|
+
|
|
187
|
+
See [`docs/production-sync-automation.md`](production-sync-automation.md) for dispatch examples. For `production_promoted` **repository_dispatch**, sync always runs live (no dry-run).
|