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,1024 @@
|
|
|
1
|
+
# Product Development Harness GUI Design
|
|
2
|
+
|
|
3
|
+
## 1. Problem statement
|
|
4
|
+
|
|
5
|
+
The Product Development Harness currently works, but it is still primarily an **operator/developer system**, not a product a normal PM can set up confidently.
|
|
6
|
+
|
|
7
|
+
Today the harness is a CLI and GitHub Actions automation system. Its main commands are `harness:doctor`, `harness:run`, `harness:inspect`, `harness:validate-issue`, `harness:sync-production`, and `harness:operator:init`; there is no local web server or GUI entrypoint today.
|
|
8
|
+
|
|
9
|
+
The current setup path asks the user to understand several systems at once:
|
|
10
|
+
|
|
11
|
+
- Linear teams, projects, statuses, and API keys
|
|
12
|
+
- GitHub repos, tokens, branch protection, Actions secrets, workflow files
|
|
13
|
+
- Cursor API keys and model/provider behavior
|
|
14
|
+
- Harness config files
|
|
15
|
+
- Local `.env.local`
|
|
16
|
+
- Private `.harness/config.local.json`
|
|
17
|
+
- `HARNESS_CONFIG_JSON_B64`
|
|
18
|
+
- Target repo dispatch workflows
|
|
19
|
+
- Doctor checks and cloud validation
|
|
20
|
+
|
|
21
|
+
The docs are honest that v0.2 is not yet plug-and-play and expects manual setup across Linear, GitHub Actions, Vercel, and target repos.
|
|
22
|
+
|
|
23
|
+
That is acceptable for a source-release harness. It is not acceptable for a product intended to help PMs get value quickly.
|
|
24
|
+
|
|
25
|
+
### Core product constraint
|
|
26
|
+
|
|
27
|
+
A PM should not need to hand-edit JSON, manage base64 secrets, or understand GitHub Actions internals to get to a first successful harness run.
|
|
28
|
+
|
|
29
|
+
### Why better config files are not enough
|
|
30
|
+
|
|
31
|
+
Better comments in `.env.local` and `.harness/config.local.json` would reduce confusion, but they do not solve the real issue:
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
The user still has to know what to edit, where to get values, how to validate them, what is safe to automate, and what to do when something fails.
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
The setup experience needs to become an interactive product surface.
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## 2. Product goals
|
|
46
|
+
|
|
47
|
+
### Primary goal
|
|
48
|
+
|
|
49
|
+
Create a **Product Development Harness GUI** that helps a PM/operator configure and validate the harness without hand-editing config files.
|
|
50
|
+
|
|
51
|
+
The first area of the GUI is likely:
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
```
|
|
58
|
+
Settings → Configure
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
This is not a separate “Setup Studio” product. It is the first surface of the broader Product Development Harness GUI.
|
|
62
|
+
|
|
63
|
+
### Goals
|
|
64
|
+
|
|
65
|
+
1. **Time to first successful run**
|
|
66
|
+
- A user can clone the repo, launch the GUI, connect services, configure one target repo, validate setup, and run a safe first workflow.
|
|
67
|
+
2. **PM-friendly setup**
|
|
68
|
+
- Replace raw JSON/env editing with forms, explanations, validation, and guided actions.
|
|
69
|
+
3. **Explicit permission model**
|
|
70
|
+
- Every write action must be confirmed.
|
|
71
|
+
- Users can choose between “apply automatically” and “generate instructions/files for manual copy-paste.”
|
|
72
|
+
4. **Reuse existing harness logic**
|
|
73
|
+
- The GUI should not bypass the CLI/harness core.
|
|
74
|
+
- GUI actions should call shared setup services used by both CLI and UI.
|
|
75
|
+
5. **Local-first security**
|
|
76
|
+
- First version runs locally.
|
|
77
|
+
- Secrets are entered locally.
|
|
78
|
+
- Secrets are written only to local gitignored files or directly to provider secret stores after confirmation.
|
|
79
|
+
- No hosted secret storage in v0.
|
|
80
|
+
6. **Build toward future generative UI**
|
|
81
|
+
- The GUI should become the foundation for a future AI-native product workspace that can pull together Linear, GitHub, GitHub Actions, Cursor, Vercel, comments, previews, and validation results.
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## 3. Non-goals for the first version
|
|
86
|
+
|
|
87
|
+
The first GUI version should **not** attempt to be the whole future product.
|
|
88
|
+
|
|
89
|
+
Non-goals:
|
|
90
|
+
|
|
91
|
+
- No hosted multi-user app yet.
|
|
92
|
+
- No OAuth yet.
|
|
93
|
+
- No replacement for Linear yet.
|
|
94
|
+
- No provider-agnostic claims.
|
|
95
|
+
- No generic SaaS/control-plane claims.
|
|
96
|
+
- No storing user secrets in a hosted service.
|
|
97
|
+
- No natural-language generative UI canvas yet.
|
|
98
|
+
- No deep run cockpit unless needed for setup validation.
|
|
99
|
+
- No model/provider marketplace.
|
|
100
|
+
|
|
101
|
+
The current harness is explicitly Cursor-first and not provider-agnostic. Cursor Cloud Agents are the only implemented agent provider today.
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## 4. User model
|
|
106
|
+
|
|
107
|
+
### 4.1 Solo PM/operator
|
|
108
|
+
|
|
109
|
+
A PM or founder setting up the harness for their own target repo.
|
|
110
|
+
|
|
111
|
+
Needs:
|
|
112
|
+
|
|
113
|
+
- Understand what services are required.
|
|
114
|
+
- Paste API keys.
|
|
115
|
+
- Choose Linear project.
|
|
116
|
+
- Choose GitHub repos.
|
|
117
|
+
- Configure branches.
|
|
118
|
+
- Run doctor.
|
|
119
|
+
- Trigger safe validation.
|
|
120
|
+
- Know what to do next.
|
|
121
|
+
|
|
122
|
+
This is the primary v0 GUI user.
|
|
123
|
+
|
|
124
|
+
### 4.2 Technical PM / founder
|
|
125
|
+
|
|
126
|
+
Comfortable with GitHub, but not interested in manually editing config/secrets.
|
|
127
|
+
|
|
128
|
+
Needs:
|
|
129
|
+
|
|
130
|
+
- Faster setup.
|
|
131
|
+
- Clear error states.
|
|
132
|
+
- Ability to inspect generated config.
|
|
133
|
+
- Ability to choose automation or manual copy-paste.
|
|
134
|
+
|
|
135
|
+
### 4.3 Engineer helping with setup
|
|
136
|
+
|
|
137
|
+
May prefer manual control.
|
|
138
|
+
|
|
139
|
+
Needs:
|
|
140
|
+
|
|
141
|
+
- Preview generated files.
|
|
142
|
+
- Export config.
|
|
143
|
+
- Avoid automatic writes.
|
|
144
|
+
- Verify permissions and security boundaries.
|
|
145
|
+
|
|
146
|
+
### 4.4 Future team user
|
|
147
|
+
|
|
148
|
+
Works with other PMs/engineers in a shared workspace.
|
|
149
|
+
|
|
150
|
+
Needs later:
|
|
151
|
+
|
|
152
|
+
- Shared issues/runs/previews.
|
|
153
|
+
- Role-based access.
|
|
154
|
+
- Hosted deployment.
|
|
155
|
+
- Collaboration.
|
|
156
|
+
- Possibly OAuth/provider-managed auth.
|
|
157
|
+
|
|
158
|
+
This user is not the first implementation target.
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
## 5. UX scope for first GUI version
|
|
163
|
+
|
|
164
|
+
The first GUI surface should focus on:
|
|
165
|
+
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
```
|
|
171
|
+
Settings → Configure
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
### 5.1 Service connections
|
|
175
|
+
|
|
176
|
+
The GUI should guide the user through connecting:
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
| Service | First-version method | Notes |
|
|
180
|
+
| ------- | -------------------- | ----------------------------------------------------------------------- |
|
|
181
|
+
| Linear | API key | Validate team/project/statuses |
|
|
182
|
+
| GitHub | `gh auth` or PAT | Validate harness repo, target repo, branch access, secret write ability |
|
|
183
|
+
| Cursor | API key | Validate provider access |
|
|
184
|
+
| Vercel | Later / optional | Only needed if preview provider validation becomes necessary |
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
The GUI should show plain-English validation:
|
|
188
|
+
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
```
|
|
194
|
+
✅ Linear key works
|
|
195
|
+
✅ Found team WES
|
|
196
|
+
✅ Found project Example Target App
|
|
197
|
+
✅ GitHub can access target repo
|
|
198
|
+
✅ baseBranch exists
|
|
199
|
+
⚠️ GitHub Actions secret HARNESS_CONFIG_JSON_B64 not set
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### 5.2 Target repo configuration
|
|
203
|
+
|
|
204
|
+
The user should not edit JSON directly.
|
|
205
|
+
|
|
206
|
+
Fields:
|
|
207
|
+
|
|
208
|
+
- Repo config ID
|
|
209
|
+
- Target GitHub repo
|
|
210
|
+
- Linear project
|
|
211
|
+
- Base branch
|
|
212
|
+
- Production branch
|
|
213
|
+
- Preview provider
|
|
214
|
+
- Integration preview URL
|
|
215
|
+
- Production URL
|
|
216
|
+
- Validation commands
|
|
217
|
+
- Success statuses
|
|
218
|
+
|
|
219
|
+
The GUI should generate the private config:
|
|
220
|
+
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
```
|
|
226
|
+
.harness/config.local.json
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
The current private config system already treats private config as a full replacement, not an overlay; every managed repo must appear in the private config and `allowedTargetRepos[]`.
|
|
230
|
+
|
|
231
|
+
The GUI must make that obvious.
|
|
232
|
+
|
|
233
|
+
### 5.3 Environment file generation
|
|
234
|
+
|
|
235
|
+
The GUI should create or update:
|
|
236
|
+
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
```
|
|
242
|
+
.env.local
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
It should include:
|
|
246
|
+
|
|
247
|
+
- `HARNESS_CONFIG_PATH=.harness/config.local.json`
|
|
248
|
+
- `LINEAR_API_KEY`
|
|
249
|
+
- `CURSOR_API_KEY`
|
|
250
|
+
- `GITHUB_TOKEN` or equivalent local token name
|
|
251
|
+
|
|
252
|
+
It should never commit this file.
|
|
253
|
+
|
|
254
|
+
### 5.4 GitHub Actions secret setup
|
|
255
|
+
|
|
256
|
+
The GUI should support two modes:
|
|
257
|
+
|
|
258
|
+
|
|
259
|
+
| Mode | Behavior |
|
|
260
|
+
| ------------------- | --------------------------------------------------------------------------------------------------- |
|
|
261
|
+
| Apply automatically | Set `HARNESS_CONFIG_JSON_B64` and other selected GitHub Actions secrets after explicit confirmation |
|
|
262
|
+
| Manual output | Generate exact copy-paste commands/instructions |
|
|
263
|
+
|
|
264
|
+
|
|
265
|
+
Example confirmation:
|
|
266
|
+
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
```
|
|
272
|
+
This will write the following GitHub Actions secret names to:
|
|
273
|
+
owner/agentic-product-development-harness
|
|
274
|
+
|
|
275
|
+
- HARNESS_CONFIG_JSON_B64
|
|
276
|
+
- LINEAR_API_KEY
|
|
277
|
+
- CURSOR_API_KEY
|
|
278
|
+
- HARNESS_GITHUB_TOKEN
|
|
279
|
+
|
|
280
|
+
Secret values will not be printed or stored in the browser.
|
|
281
|
+
Continue?
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
### 5.5 Target repo workflow setup
|
|
285
|
+
|
|
286
|
+
The GUI should support both:
|
|
287
|
+
|
|
288
|
+
|
|
289
|
+
| Mode | Behavior |
|
|
290
|
+
| ------------------- | ------------------------------------------------------------------------------------------- |
|
|
291
|
+
| Apply automatically | Create or update target repo workflow file via PR or direct write, depending on permissions |
|
|
292
|
+
| Manual output | Generate `.github/workflows/trigger-harness-production-sync.yml` for copy-paste |
|
|
293
|
+
|
|
294
|
+
|
|
295
|
+
Default should be conservative:
|
|
296
|
+
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
```
|
|
302
|
+
Open PR to target repo
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
not direct push.
|
|
306
|
+
|
|
307
|
+
### 5.6 Doctor checklist
|
|
308
|
+
|
|
309
|
+
The GUI should wrap `harness:doctor` into a readable checklist.
|
|
310
|
+
|
|
311
|
+
Instead of terminal-first output, show grouped checks:
|
|
312
|
+
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
```
|
|
318
|
+
Configuration
|
|
319
|
+
✅ Config file exists
|
|
320
|
+
✅ Config parses
|
|
321
|
+
✅ allowedTargetRepos closure valid
|
|
322
|
+
|
|
323
|
+
Linear
|
|
324
|
+
✅ API key works
|
|
325
|
+
✅ Team found
|
|
326
|
+
✅ Project found
|
|
327
|
+
✅ Required statuses found
|
|
328
|
+
|
|
329
|
+
GitHub
|
|
330
|
+
✅ Harness repo reachable
|
|
331
|
+
✅ Target repo reachable
|
|
332
|
+
✅ baseBranch exists
|
|
333
|
+
✅ productionBranch exists
|
|
334
|
+
✅ PR branch write permission works
|
|
335
|
+
|
|
336
|
+
Cursor
|
|
337
|
+
✅ API key works
|
|
338
|
+
✅ Provider reachable
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
### 5.7 Safe cloud validation
|
|
342
|
+
|
|
343
|
+
After local doctor passes, the GUI should guide:
|
|
344
|
+
|
|
345
|
+
1. Validate cloud config using a no-op repo.
|
|
346
|
+
2. Validate target repo using dry-run.
|
|
347
|
+
3. Only then enable live production sync.
|
|
348
|
+
|
|
349
|
+
This mirrors the current docs, which recommend `sync_repo=harness`, then `sync_repo=<target>` with `sync_dry_run=true`, then live sync only when ready.
|
|
350
|
+
|
|
351
|
+
---
|
|
352
|
+
|
|
353
|
+
## 6. Permission model
|
|
354
|
+
|
|
355
|
+
Every GUI action should be classified by write scope.
|
|
356
|
+
|
|
357
|
+
|
|
358
|
+
| Action | Scope | Requires confirmation? | Manual alternative? |
|
|
359
|
+
| ---------------------------------- | --------------------------- | ------------------------ | --------------------------------- |
|
|
360
|
+
| Validate local config | Read-only | No | N/A |
|
|
361
|
+
| Validate Linear API key | External read | Yes, when key entered | Yes |
|
|
362
|
+
| Validate GitHub repo access | External read | Yes | Yes |
|
|
363
|
+
| Validate Cursor API key | External read | Yes | Yes |
|
|
364
|
+
| Write `.env.local` | Local file write | Yes | Generate file contents |
|
|
365
|
+
| Write `.harness/config.local.json` | Local file write | Yes | Generate file contents |
|
|
366
|
+
| Set GitHub Actions secrets | Remote secret write | Yes, strong confirmation | Generate `gh secret set` commands |
|
|
367
|
+
| Install target repo workflow | Remote repo write | Yes, strong confirmation | Generate YAML |
|
|
368
|
+
| Open target repo PR | Remote repo write | Yes | Generate branch/file instructions |
|
|
369
|
+
| Trigger cloud doctor/smoke test | Remote workflow run | Yes | Show CLI command |
|
|
370
|
+
| Trigger live harness phase | Linear/GitHub/Cursor writes | Yes, high-risk | Show CLI command |
|
|
371
|
+
| Write Linear status | Linear write | Yes, high-risk | Manual status move |
|
|
372
|
+
|
|
373
|
+
|
|
374
|
+
Default first-version posture:
|
|
375
|
+
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
```
|
|
381
|
+
Read/validate freely after user provides key.
|
|
382
|
+
Write only after explicit confirmation.
|
|
383
|
+
Always offer manual copy-paste alternative.
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
---
|
|
387
|
+
|
|
388
|
+
## 7. Architecture proposal
|
|
389
|
+
|
|
390
|
+
The GUI should not directly mutate config files, GitHub secrets, or workflows.
|
|
391
|
+
|
|
392
|
+
Instead:
|
|
393
|
+
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
```
|
|
399
|
+
GUI → setup API → setup core services → file system / GitHub / Linear / Cursor
|
|
400
|
+
CLI → setup core services → file system / GitHub / Linear / Cursor
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
### 7.1 Setup core services
|
|
404
|
+
|
|
405
|
+
Create shared setup services under something like:
|
|
406
|
+
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
```
|
|
412
|
+
src/setup/
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
These services should be UI-independent and testable.
|
|
416
|
+
|
|
417
|
+
Proposed modules:
|
|
418
|
+
|
|
419
|
+
```
|
|
420
|
+
|
|
421
|
+
```
|
|
422
|
+
|
|
423
|
+
```
|
|
424
|
+
src/setup/
|
|
425
|
+
setup-state.ts
|
|
426
|
+
setup-actions.ts
|
|
427
|
+
config-builder.ts
|
|
428
|
+
config-writer.ts
|
|
429
|
+
env-writer.ts
|
|
430
|
+
secret-writer.ts
|
|
431
|
+
github-setup.ts
|
|
432
|
+
linear-setup.ts
|
|
433
|
+
cursor-setup.ts
|
|
434
|
+
doctor-summary.ts
|
|
435
|
+
permission-model.ts
|
|
436
|
+
generated-instructions.ts
|
|
437
|
+
```
|
|
438
|
+
|
|
439
|
+
### 7.2 Local GUI server
|
|
440
|
+
|
|
441
|
+
Create a local server layer:
|
|
442
|
+
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
```
|
|
446
|
+
|
|
447
|
+
```
|
|
448
|
+
src/setup-server/
|
|
449
|
+
```
|
|
450
|
+
|
|
451
|
+
Responsibilities:
|
|
452
|
+
|
|
453
|
+
- Serve GUI.
|
|
454
|
+
- Expose local-only API routes.
|
|
455
|
+
- Call setup core services.
|
|
456
|
+
- Enforce confirmation requirements.
|
|
457
|
+
- Avoid logging secrets.
|
|
458
|
+
- Bind to [localhost](http://localhost) only by default.
|
|
459
|
+
|
|
460
|
+
### 7.3 Frontend
|
|
461
|
+
|
|
462
|
+
The frontend should be a normal software UI, not a docs page.
|
|
463
|
+
|
|
464
|
+
Likely sections:
|
|
465
|
+
|
|
466
|
+
```
|
|
467
|
+
|
|
468
|
+
```
|
|
469
|
+
|
|
470
|
+
```
|
|
471
|
+
Settings
|
|
472
|
+
Configure
|
|
473
|
+
Services
|
|
474
|
+
Target repos
|
|
475
|
+
Automation
|
|
476
|
+
Doctor
|
|
477
|
+
Cloud validation
|
|
478
|
+
```
|
|
479
|
+
|
|
480
|
+
Long term, this frontend can become the broader Product Development Harness GUI.
|
|
481
|
+
|
|
482
|
+
### 7.4 Provider adapters
|
|
483
|
+
|
|
484
|
+
The setup core should wrap external providers:
|
|
485
|
+
|
|
486
|
+
```
|
|
487
|
+
|
|
488
|
+
```
|
|
489
|
+
|
|
490
|
+
```
|
|
491
|
+
Linear adapter
|
|
492
|
+
GitHub adapter
|
|
493
|
+
Cursor adapter
|
|
494
|
+
Vercel adapter later
|
|
495
|
+
```
|
|
496
|
+
|
|
497
|
+
This is not the same as claiming provider agnosticism for agents. It is simply a setup abstraction.
|
|
498
|
+
|
|
499
|
+
### 7.5 Secret handling boundary
|
|
500
|
+
|
|
501
|
+
Rules:
|
|
502
|
+
|
|
503
|
+
- Secrets may be held in server memory during the local session.
|
|
504
|
+
- Secrets must not be written to browser localStorage.
|
|
505
|
+
- Secrets must not be printed in logs.
|
|
506
|
+
- Secrets must not be returned to frontend after submission, except masked.
|
|
507
|
+
- Secrets may be written to `.env.local` after confirmation.
|
|
508
|
+
- Secrets may be sent to GitHub Actions secrets after confirmation.
|
|
509
|
+
- First version must not send secrets to any hosted Product Development Harness backend.
|
|
510
|
+
|
|
511
|
+
---
|
|
512
|
+
|
|
513
|
+
## 8. Framework options
|
|
514
|
+
|
|
515
|
+
### Option A — Lightweight local Node server + simple frontend
|
|
516
|
+
|
|
517
|
+
Use Node’s HTTP server or a minimal framework. Serve static HTML/JS.
|
|
518
|
+
|
|
519
|
+
Pros:
|
|
520
|
+
|
|
521
|
+
- Small dependency footprint.
|
|
522
|
+
- Fits current CLI repo.
|
|
523
|
+
- Easy to keep local-only.
|
|
524
|
+
- Less framework commitment.
|
|
525
|
+
|
|
526
|
+
Cons:
|
|
527
|
+
|
|
528
|
+
- More custom UI plumbing.
|
|
529
|
+
- Slower to build polished SaaS-like UI.
|
|
530
|
+
- Harder to evolve into hosted product.
|
|
531
|
+
|
|
532
|
+
### Option B — Vite + React local app
|
|
533
|
+
|
|
534
|
+
Add Vite/React for the frontend and a small local API server.
|
|
535
|
+
|
|
536
|
+
Pros:
|
|
537
|
+
|
|
538
|
+
- Good UI developer experience.
|
|
539
|
+
- Easy to build a SaaS-like interface.
|
|
540
|
+
- Can still be local-first.
|
|
541
|
+
- Easier future generative UI components.
|
|
542
|
+
- Less heavy than Next.js.
|
|
543
|
+
|
|
544
|
+
Cons:
|
|
545
|
+
|
|
546
|
+
- Adds frontend build stack.
|
|
547
|
+
- Need to decide how local API and frontend dev server coordinate.
|
|
548
|
+
|
|
549
|
+
### Option C — Next.js app
|
|
550
|
+
|
|
551
|
+
Add Next.js and run locally, likely on port 3000.
|
|
552
|
+
|
|
553
|
+
Pros:
|
|
554
|
+
|
|
555
|
+
- Strong path to hosted Vercel app later.
|
|
556
|
+
- Full-stack routes.
|
|
557
|
+
- Familiar SaaS architecture.
|
|
558
|
+
- Good future path for hosted/team mode.
|
|
559
|
+
|
|
560
|
+
Cons:
|
|
561
|
+
|
|
562
|
+
- Heavier architectural commitment.
|
|
563
|
+
- App Router/server/client boundaries may slow first setup implementation.
|
|
564
|
+
- More risk of mixing local secret handling with future hosted assumptions.
|
|
565
|
+
- Current repo is not a web app today.
|
|
566
|
+
|
|
567
|
+
### Recommendation
|
|
568
|
+
|
|
569
|
+
Use **Next.js** for the long-term Product Development Harness GUI.
|
|
570
|
+
|
|
571
|
+
Reason:
|
|
572
|
+
|
|
573
|
+
- We expect a hosted/team-capable app later and do not want to build a Vite/local-only UI that we knowingly throw away.
|
|
574
|
+
- Next.js provides a strong path to a hosted Vercel app with full-stack routes.
|
|
575
|
+
- Setup core services in `src/setup/` keep provider/file writes UI-independent so the GUI shell can evolve without rewriting setup logic.
|
|
576
|
+
|
|
577
|
+
Mitigation:
|
|
578
|
+
|
|
579
|
+
- Milestone 2 does **not** build the GUI, local web server, or port behavior.
|
|
580
|
+
- Keep all provider/file writes behind setup core services.
|
|
581
|
+
- Defer local port auto-pick and browser/server secret boundaries to the GUI shell milestone.
|
|
582
|
+
|
|
583
|
+
---
|
|
584
|
+
|
|
585
|
+
## 9. Local port behavior
|
|
586
|
+
|
|
587
|
+
The first GUI should run locally on a configurable port.
|
|
588
|
+
|
|
589
|
+
Default:
|
|
590
|
+
|
|
591
|
+
```
|
|
592
|
+
|
|
593
|
+
```
|
|
594
|
+
|
|
595
|
+
```
|
|
596
|
+
localhost:3000
|
|
597
|
+
```
|
|
598
|
+
|
|
599
|
+
Fallback if occupied:
|
|
600
|
+
|
|
601
|
+
```
|
|
602
|
+
|
|
603
|
+
```
|
|
604
|
+
|
|
605
|
+
```
|
|
606
|
+
localhost:3001
|
|
607
|
+
localhost:3333
|
|
608
|
+
```
|
|
609
|
+
|
|
610
|
+
Open question: whether to use 3000 or 3333 as the default. Since many PM/dev environments already use 3000 for app development, `3333` may avoid conflicts.
|
|
611
|
+
|
|
612
|
+
Proposed command:
|
|
613
|
+
|
|
614
|
+
```
|
|
615
|
+
|
|
616
|
+
```
|
|
617
|
+
|
|
618
|
+
```
|
|
619
|
+
npm run harness:gui
|
|
620
|
+
```
|
|
621
|
+
|
|
622
|
+
or:
|
|
623
|
+
|
|
624
|
+
```
|
|
625
|
+
|
|
626
|
+
```
|
|
627
|
+
|
|
628
|
+
```
|
|
629
|
+
npm run harness:configure
|
|
630
|
+
```
|
|
631
|
+
|
|
632
|
+
Long-term npm package command:
|
|
633
|
+
|
|
634
|
+
```
|
|
635
|
+
|
|
636
|
+
```
|
|
637
|
+
|
|
638
|
+
```
|
|
639
|
+
npx agentic-product-development-harness configure
|
|
640
|
+
```
|
|
641
|
+
|
|
642
|
+
---
|
|
643
|
+
|
|
644
|
+
## 10. Relationship to Linear
|
|
645
|
+
|
|
646
|
+
Linear remains the current day-to-day control plane.
|
|
647
|
+
|
|
648
|
+
The GUI should not replace Linear in v0.3.
|
|
649
|
+
|
|
650
|
+
Near-term:
|
|
651
|
+
|
|
652
|
+
```
|
|
653
|
+
|
|
654
|
+
```
|
|
655
|
+
|
|
656
|
+
```
|
|
657
|
+
Linear issue statuses control automation.
|
|
658
|
+
GUI configures and validates the harness.
|
|
659
|
+
```
|
|
660
|
+
|
|
661
|
+
Medium-term:
|
|
662
|
+
|
|
663
|
+
```
|
|
664
|
+
|
|
665
|
+
```
|
|
666
|
+
|
|
667
|
+
```
|
|
668
|
+
GUI can read and summarize issue/run/PR state.
|
|
669
|
+
```
|
|
670
|
+
|
|
671
|
+
Long-term:
|
|
672
|
+
|
|
673
|
+
```
|
|
674
|
+
|
|
675
|
+
```
|
|
676
|
+
|
|
677
|
+
```
|
|
678
|
+
GUI may become an AI-native product workspace that can render task-specific views from Linear, GitHub, GitHub Actions, Cursor, Vercel, and validation artifacts.
|
|
679
|
+
```
|
|
680
|
+
|
|
681
|
+
This keeps the immediate scope focused while preserving the bigger vision.
|
|
682
|
+
|
|
683
|
+
---
|
|
684
|
+
|
|
685
|
+
## 11. Generative UI direction
|
|
686
|
+
|
|
687
|
+
The long-term product direction is not a static dashboard.
|
|
688
|
+
|
|
689
|
+
The future GUI should support natural-language interaction like:
|
|
690
|
+
|
|
691
|
+
```
|
|
692
|
+
|
|
693
|
+
```
|
|
694
|
+
|
|
695
|
+
```
|
|
696
|
+
What is happening with the dashboard issue?
|
|
697
|
+
Show me the latest GitHub Action for the issue fixing carousel behavior.
|
|
698
|
+
Which issues are blocked and why?
|
|
699
|
+
Compare the implementation against the acceptance criteria.
|
|
700
|
+
What needs my review right now?
|
|
701
|
+
```
|
|
702
|
+
|
|
703
|
+
The system would gather state from:
|
|
704
|
+
|
|
705
|
+
- Linear issue
|
|
706
|
+
- Linear comments
|
|
707
|
+
- GitHub PR
|
|
708
|
+
- GitHub Actions run
|
|
709
|
+
- Cursor agent status/artifacts
|
|
710
|
+
- Vercel preview
|
|
711
|
+
- Harness run artifacts
|
|
712
|
+
- Validation output
|
|
713
|
+
|
|
714
|
+
Then render the appropriate component:
|
|
715
|
+
|
|
716
|
+
- issue card
|
|
717
|
+
- run timeline
|
|
718
|
+
- PR diff summary
|
|
719
|
+
- preview panel
|
|
720
|
+
- acceptance criteria checklist
|
|
721
|
+
- action buttons
|
|
722
|
+
- failure diagnosis
|
|
723
|
+
|
|
724
|
+
This is the larger vision, but not the first build.
|
|
725
|
+
|
|
726
|
+
The first setup GUI still contributes to this direction because it creates:
|
|
727
|
+
|
|
728
|
+
- provider connection model
|
|
729
|
+
- permission model
|
|
730
|
+
- local UI shell
|
|
731
|
+
- setup state model
|
|
732
|
+
- action confirmation layer
|
|
733
|
+
- service adapters
|
|
734
|
+
|
|
735
|
+
Those are reusable later.
|
|
736
|
+
|
|
737
|
+
---
|
|
738
|
+
|
|
739
|
+
## 12. Security model
|
|
740
|
+
|
|
741
|
+
### Local-first
|
|
742
|
+
|
|
743
|
+
First version runs locally.
|
|
744
|
+
|
|
745
|
+
No Product Development Harness hosted backend should receive user secrets.
|
|
746
|
+
|
|
747
|
+
### Secret storage
|
|
748
|
+
|
|
749
|
+
Allowed:
|
|
750
|
+
|
|
751
|
+
```
|
|
752
|
+
|
|
753
|
+
```
|
|
754
|
+
|
|
755
|
+
```
|
|
756
|
+
.env.local
|
|
757
|
+
GitHub Actions secrets
|
|
758
|
+
Provider APIs during validation
|
|
759
|
+
```
|
|
760
|
+
|
|
761
|
+
Not allowed:
|
|
762
|
+
|
|
763
|
+
```
|
|
764
|
+
|
|
765
|
+
```
|
|
766
|
+
|
|
767
|
+
```
|
|
768
|
+
committed files
|
|
769
|
+
browser localStorage
|
|
770
|
+
frontend logs
|
|
771
|
+
GitHub PR comments
|
|
772
|
+
Linear comments
|
|
773
|
+
hosted backend database
|
|
774
|
+
```
|
|
775
|
+
|
|
776
|
+
### GitHub Actions secrets
|
|
777
|
+
|
|
778
|
+
The GUI may set GitHub Actions secrets only after explicit confirmation.
|
|
779
|
+
|
|
780
|
+
It should show:
|
|
781
|
+
|
|
782
|
+
- repo where secret will be written
|
|
783
|
+
- secret names
|
|
784
|
+
- whether secret already exists
|
|
785
|
+
- never show existing secret value
|
|
786
|
+
|
|
787
|
+
### Target repo writes
|
|
788
|
+
|
|
789
|
+
The GUI may install workflow files only after confirmation.
|
|
790
|
+
|
|
791
|
+
Preferred first behavior:
|
|
792
|
+
|
|
793
|
+
```
|
|
794
|
+
|
|
795
|
+
```
|
|
796
|
+
|
|
797
|
+
```
|
|
798
|
+
Open PR with workflow file
|
|
799
|
+
```
|
|
800
|
+
|
|
801
|
+
Manual alternative:
|
|
802
|
+
|
|
803
|
+
```
|
|
804
|
+
|
|
805
|
+
```
|
|
806
|
+
|
|
807
|
+
```
|
|
808
|
+
Download/copy workflow YAML
|
|
809
|
+
```
|
|
810
|
+
|
|
811
|
+
### Linear writes
|
|
812
|
+
|
|
813
|
+
First setup version should avoid writing Linear status by default.
|
|
814
|
+
|
|
815
|
+
It may validate statuses/projects.
|
|
816
|
+
|
|
817
|
+
Any Linear write should require strong confirmation.
|
|
818
|
+
|
|
819
|
+
---
|
|
820
|
+
|
|
821
|
+
## 13. Implementation history and scope boundaries
|
|
822
|
+
|
|
823
|
+
Earlier GUI milestones established the setup core and Settings / Configure capabilities that M6 productizes.
|
|
824
|
+
|
|
825
|
+
| Milestone | Status | Scope |
|
|
826
|
+
| --------- | ------ | ----- |
|
|
827
|
+
| Milestone 1 — Design doc | Implemented | This document and agreed direction |
|
|
828
|
+
| Milestone 2 — Setup core | Implemented | Shared setup services used by CLI and GUI |
|
|
829
|
+
| Milestone 3 — Local GUI shell | Implemented | `npm run harness:gui` and read-only Settings / Configure |
|
|
830
|
+
| Milestone 4 — Guided configuration | Implemented | Local `.env.local` and `.harness/config.local.json` forms, redacted preview, confirmation-gated local writes |
|
|
831
|
+
| Milestone 5 — Permissioned automation | Implemented | GitHub Actions secrets and target workflow install PRs after confirmation |
|
|
832
|
+
| Milestone 5.5 — Live sandbox smoke | Implemented | Manual validation against real GitHub sandbox resources |
|
|
833
|
+
| Milestone 6 — First-run readiness flow | Planned | In-product guided setup/readiness UX over existing setup capabilities |
|
|
834
|
+
| Milestone 7 — Workspace component foundation | Planned | Reusable workspace components for issue/run/PR surfaces |
|
|
835
|
+
|
|
836
|
+
M6 is **not** a text guide, markdown walkthrough, or live harness phase trigger. It is a UX/productization layer that helps a first-time PM move from fresh clone to **ready for first harness run** inside Settings / Configure.
|
|
837
|
+
|
|
838
|
+
M6 does **not**:
|
|
839
|
+
|
|
840
|
+
- trigger live harness phases
|
|
841
|
+
- run real Linear issue automation
|
|
842
|
+
- create implementation branches or issue-work PRs
|
|
843
|
+
- dispatch cloud workflows or repository dispatch
|
|
844
|
+
- replace CLI doctor/provider validation
|
|
845
|
+
|
|
846
|
+
A future **M6.5 or later** milestone may add a safe first-issue dry run or no-op harness validation once readiness is clear.
|
|
847
|
+
|
|
848
|
+
M7 should focus on **reusable workspace components** for issue, run, PR, preview, and validation surfaces. It should not start generative UI infrastructure or provider marketplace work.
|
|
849
|
+
|
|
850
|
+
---
|
|
851
|
+
|
|
852
|
+
## 14. Milestones
|
|
853
|
+
|
|
854
|
+
### Milestone 1 — Design doc
|
|
855
|
+
|
|
856
|
+
Produce this doc and agree on direction.
|
|
857
|
+
|
|
858
|
+
### Milestone 2 — Setup core
|
|
859
|
+
|
|
860
|
+
Shared setup services used by CLI and future GUI.
|
|
861
|
+
|
|
862
|
+
### Milestone 3 — Local GUI shell
|
|
863
|
+
|
|
864
|
+
Local SaaS-style interface with Settings → Configure.
|
|
865
|
+
|
|
866
|
+
### Milestone 4 — Guided configuration
|
|
867
|
+
|
|
868
|
+
**Status:** **Implemented** — Settings / Configure forms for `.env.local` and `.harness/config.local.json`, redacted preview, confirmation-gated local writes via setup core.
|
|
869
|
+
|
|
870
|
+
Forms for services, target repo config, env/config generation, doctor checklist (local checks only; remote provider validation remains CLI-only).
|
|
871
|
+
|
|
872
|
+
### Milestone 5 — Permissioned automation
|
|
873
|
+
|
|
874
|
+
**Status:** **Implemented** — Set GitHub Actions secrets and install target repo workflow after confirmation, with manual alternative.
|
|
875
|
+
|
|
876
|
+
### Milestone 5.5 — Live sandbox smoke
|
|
877
|
+
|
|
878
|
+
**Status:** **Implemented** — Manual validation of local and remote setup against real GitHub sandbox resources.
|
|
879
|
+
|
|
880
|
+
### Milestone 6 — First-run readiness flow
|
|
881
|
+
|
|
882
|
+
**Status:** **Planned** — Redesign Settings / Configure into an in-product first-run readiness flow.
|
|
883
|
+
|
|
884
|
+
Deliverables:
|
|
885
|
+
|
|
886
|
+
- ordered guided stepper as the default first-run experience
|
|
887
|
+
- shared readiness / blocker / next-action model over existing setup summaries
|
|
888
|
+
- advanced checklist dashboard escape hatch with the same readiness model
|
|
889
|
+
- final ready/blocked state without live harness run trigger
|
|
890
|
+
|
|
891
|
+
Non-goals for M6:
|
|
892
|
+
|
|
893
|
+
- text-only setup guide
|
|
894
|
+
- live Linear writes
|
|
895
|
+
- live harness phase execution
|
|
896
|
+
- cloud workflow dispatch
|
|
897
|
+
- Playwright/e2e automation
|
|
898
|
+
|
|
899
|
+
### Milestone 7 — Workspace component foundation
|
|
900
|
+
|
|
901
|
+
**Status:** **Planned** — Begin reusable workspace components for issue, PR, run, preview, and validation surfaces.
|
|
902
|
+
|
|
903
|
+
This milestone should establish component boundaries and shared state patterns for a future Product Development Harness workspace. It should **not** start generative UI infrastructure, natural-language canvas work, or provider marketplace features.
|
|
904
|
+
|
|
905
|
+
---
|
|
906
|
+
|
|
907
|
+
## 15. Open questions and assumptions
|
|
908
|
+
|
|
909
|
+
### Open question 1 — Default local port
|
|
910
|
+
|
|
911
|
+
Assumption:
|
|
912
|
+
|
|
913
|
+
```
|
|
914
|
+
|
|
915
|
+
```
|
|
916
|
+
|
|
917
|
+
```
|
|
918
|
+
Use localhost:3333 or auto-pick if 3000 is busy.
|
|
919
|
+
```
|
|
920
|
+
|
|
921
|
+
Mitigation:
|
|
922
|
+
|
|
923
|
+
Make port configurable.
|
|
924
|
+
|
|
925
|
+
### Open question 2 — GitHub auth method
|
|
926
|
+
|
|
927
|
+
Assumption:
|
|
928
|
+
|
|
929
|
+
```
|
|
930
|
+
|
|
931
|
+
```
|
|
932
|
+
|
|
933
|
+
```
|
|
934
|
+
Support existing gh auth first, then PAT paste.
|
|
935
|
+
```
|
|
936
|
+
|
|
937
|
+
Mitigation:
|
|
938
|
+
|
|
939
|
+
GUI can detect `gh auth status`; if unavailable, ask for token.
|
|
940
|
+
|
|
941
|
+
### Open question 3 — Should target repo workflow install by direct commit or PR?
|
|
942
|
+
|
|
943
|
+
Assumption:
|
|
944
|
+
|
|
945
|
+
```
|
|
946
|
+
|
|
947
|
+
```
|
|
948
|
+
|
|
949
|
+
```
|
|
950
|
+
Default to PR, allow direct write only if user explicitly chooses it.
|
|
951
|
+
```
|
|
952
|
+
|
|
953
|
+
Mitigation:
|
|
954
|
+
|
|
955
|
+
Permission screen shows exact write action.
|
|
956
|
+
|
|
957
|
+
### Open question 4 — Framework choice
|
|
958
|
+
|
|
959
|
+
Assumption:
|
|
960
|
+
|
|
961
|
+
```
|
|
962
|
+
|
|
963
|
+
```
|
|
964
|
+
|
|
965
|
+
```
|
|
966
|
+
Next.js is the long-term GUI direction for hosted/team capability.
|
|
967
|
+
```
|
|
968
|
+
|
|
969
|
+
Mitigation:
|
|
970
|
+
|
|
971
|
+
Milestone 2 builds setup core only. The GUI shell, local server, and port behavior are deferred to Milestone 3.
|
|
972
|
+
|
|
973
|
+
### Open question 5 — Model/provider editing
|
|
974
|
+
|
|
975
|
+
Assumption:
|
|
976
|
+
|
|
977
|
+
```
|
|
978
|
+
|
|
979
|
+
```
|
|
980
|
+
|
|
981
|
+
```
|
|
982
|
+
First GUI should show current provider/model and explain limitations, not offer unsupported model switching.
|
|
983
|
+
```
|
|
984
|
+
|
|
985
|
+
Reason:
|
|
986
|
+
|
|
987
|
+
The current repo pins Cursor Composer behavior and does not implement OpenAI/GPT planning providers yet.
|
|
988
|
+
|
|
989
|
+
Mitigation:
|
|
990
|
+
|
|
991
|
+
Expose model/provider state as read-only first. Add editable provider/model management only after provider contracts are clear.
|
|
992
|
+
|
|
993
|
+
### Open question 6 — Hosted future
|
|
994
|
+
|
|
995
|
+
Assumption:
|
|
996
|
+
|
|
997
|
+
```
|
|
998
|
+
|
|
999
|
+
```
|
|
1000
|
+
|
|
1001
|
+
```
|
|
1002
|
+
Do not host user secrets in v0 GUI.
|
|
1003
|
+
```
|
|
1004
|
+
|
|
1005
|
+
Mitigation:
|
|
1006
|
+
|
|
1007
|
+
When hosted/team mode is explored, revisit OAuth, encrypted secret storage, tenant boundaries, and audit logs.
|
|
1008
|
+
|
|
1009
|
+
---
|
|
1010
|
+
|
|
1011
|
+
## 16. Acceptance criteria for this design
|
|
1012
|
+
|
|
1013
|
+
The design is successful if it:
|
|
1014
|
+
|
|
1015
|
+
- Clearly distinguishes the first GUI scope from the long-term generative UI vision.
|
|
1016
|
+
- Treats the GUI as part of the Product Development Harness, not a separate setup tool.
|
|
1017
|
+
- Preserves Linear as the current operational control plane.
|
|
1018
|
+
- Defines local-first security.
|
|
1019
|
+
- Defines permission boundaries for local writes, GitHub secret writes, repo workflow writes, cloud validation, and Linear writes.
|
|
1020
|
+
- Proposes an architecture that reuses setup logic across CLI and GUI.
|
|
1021
|
+
- Gives a small first implementation slice that does not prematurely build a brittle UI.
|
|
1022
|
+
- Gives a path toward a hosted/team product later.
|
|
1023
|
+
- Distinguishes setup readiness (M6) from live harness execution (later milestones).
|
|
1024
|
+
|