Expand workspace plan for migration and cloud execution
This commit is contained in:
@@ -38,6 +38,8 @@ The main product risk is overloading one concept to do too much:
|
|||||||
- commits
|
- commits
|
||||||
- documents and artifacts
|
- documents and artifacts
|
||||||
5. Keep the main navigation and task board simple.
|
5. Keep the main navigation and task board simple.
|
||||||
|
6. Seamlessly upgrade existing Paperclip users to the new model without forcing disruptive reconfiguration.
|
||||||
|
7. Support cloud-hosted Paperclip deployments where execution happens in remote or adapter-managed environments rather than local workers.
|
||||||
|
|
||||||
## Non-Goals
|
## Non-Goals
|
||||||
|
|
||||||
@@ -45,6 +47,7 @@ The main product risk is overloading one concept to do too much:
|
|||||||
- Requiring every issue to have its own branch or PR
|
- Requiring every issue to have its own branch or PR
|
||||||
- Requiring every project to configure code/workspace automation
|
- Requiring every project to configure code/workspace automation
|
||||||
- Making workspaces a top-level global navigation primitive in V1
|
- Making workspaces a top-level global navigation primitive in V1
|
||||||
|
- Requiring a local filesystem path or local git checkout to use workspace-aware execution
|
||||||
|
|
||||||
## Core Product Decisions
|
## Core Product Decisions
|
||||||
|
|
||||||
@@ -86,6 +89,7 @@ Examples:
|
|||||||
- an isolated git worktree
|
- an isolated git worktree
|
||||||
- a long-lived operator branch checkout
|
- a long-lived operator branch checkout
|
||||||
- an adapter-managed remote sandbox
|
- an adapter-managed remote sandbox
|
||||||
|
- a cloud agent provider's isolated branch/session environment
|
||||||
|
|
||||||
This object must be recorded explicitly so that Paperclip can:
|
This object must be recorded explicitly so that Paperclip can:
|
||||||
|
|
||||||
@@ -107,7 +111,38 @@ Paperclip should treat PRs as a type of work product linked back to:
|
|||||||
|
|
||||||
Git-specific automation should live under workspace policy, not under the core issue abstraction.
|
Git-specific automation should live under workspace policy, not under the core issue abstraction.
|
||||||
|
|
||||||
### 5. Subissues remain planning and ownership structure
|
### 5. Existing users must upgrade automatically
|
||||||
|
|
||||||
|
Paperclip already has users and existing project/task data. Any new model must preserve continuity.
|
||||||
|
|
||||||
|
The product should default existing installs into a sensible compatibility mode:
|
||||||
|
|
||||||
|
- existing projects without workspace configuration continue to work unchanged
|
||||||
|
- existing `project_workspaces` become the durable `project workspace` objects
|
||||||
|
- existing project execution workspace policy is mapped forward rather than discarded
|
||||||
|
- issues without explicit workspace fields continue to inherit current behavior
|
||||||
|
|
||||||
|
This migration should feel additive, not like a mandatory re-onboarding flow.
|
||||||
|
|
||||||
|
### 6. Cloud-hosted Paperclip must be a first-class deployment mode
|
||||||
|
|
||||||
|
Paperclip cannot assume that it is running on the same machine as the code.
|
||||||
|
|
||||||
|
In cloud deployments, Paperclip may:
|
||||||
|
|
||||||
|
- run on Vercel or another serverless host
|
||||||
|
- have no long-lived local worker process
|
||||||
|
- delegate execution to a remote coding agent or provider-managed sandbox
|
||||||
|
- receive back a branch, PR, preview URL, or artifact from that remote environment
|
||||||
|
|
||||||
|
The model therefore must be portable:
|
||||||
|
|
||||||
|
- `project workspace` may be remote-managed, not local
|
||||||
|
- `execution workspace` may have no local `cwd`
|
||||||
|
- `runtime services` may be tracked by provider reference and URL rather than a host process
|
||||||
|
- work product harvesting must handle externally owned previews and PRs
|
||||||
|
|
||||||
|
### 7. Subissues remain planning and ownership structure
|
||||||
|
|
||||||
Subissues are for decomposition and parallel ownership.
|
Subissues are for decomposition and parallel ownership.
|
||||||
|
|
||||||
@@ -131,6 +166,11 @@ Use these terms consistently in product copy:
|
|||||||
- `Work product`: previews, PRs, branches, commits, artifacts, docs
|
- `Work product`: previews, PRs, branches, commits, artifacts, docs
|
||||||
- `Runtime service`: a process or service Paperclip owns or tracks for a workspace
|
- `Runtime service`: a process or service Paperclip owns or tracks for a workspace
|
||||||
|
|
||||||
|
Use these terms consistently in migration and deployment messaging:
|
||||||
|
|
||||||
|
- `Compatible mode`: existing behavior preserved without new workspace automation
|
||||||
|
- `Adapter-managed workspace`: workspace realized by a remote or cloud execution provider
|
||||||
|
|
||||||
Avoid teaching users that "workspace" always means "git worktree on my machine".
|
Avoid teaching users that "workspace" always means "git worktree on my machine".
|
||||||
|
|
||||||
## Product Object Model
|
## Product Object Model
|
||||||
@@ -176,6 +216,7 @@ from:
|
|||||||
- "what temporary execution environment did this issue run in?"
|
- "what temporary execution environment did this issue run in?"
|
||||||
|
|
||||||
That keeps the model simple for solo users while still supporting advanced automation.
|
That keeps the model simple for solo users while still supporting advanced automation.
|
||||||
|
It also lets cloud-hosted Paperclip deployments point at codebases and remotes without pretending the Paperclip host has direct filesystem access.
|
||||||
|
|
||||||
### Proposed fields
|
### Proposed fields
|
||||||
|
|
||||||
@@ -206,6 +247,7 @@ That keeps the model simple for solo users while still supporting advanced autom
|
|||||||
- `sourceType=non_git_path` is important so non-git projects are first-class.
|
- `sourceType=non_git_path` is important so non-git projects are first-class.
|
||||||
- `setupCommand` and `cleanupCommand` should be allowed here for workspace-root bootstrap, even when isolated execution is not used.
|
- `setupCommand` and `cleanupCommand` should be allowed here for workspace-root bootstrap, even when isolated execution is not used.
|
||||||
- For a monorepo, multiple project workspaces may point at different roots or packages under one repo.
|
- For a monorepo, multiple project workspaces may point at different roots or packages under one repo.
|
||||||
|
- `sourceType=remote_managed` is important for cloud deployments where the durable codebase is defined by provider/repo metadata rather than a local checkout path.
|
||||||
|
|
||||||
## 3. Project Execution Workspace Policy
|
## 3. Project Execution Workspace Policy
|
||||||
|
|
||||||
@@ -220,6 +262,7 @@ This lets Paperclip support:
|
|||||||
- direct editing in a shared workspace
|
- direct editing in a shared workspace
|
||||||
- isolated workspaces for issue parallelism
|
- isolated workspaces for issue parallelism
|
||||||
- long-lived integration branch workflows
|
- long-lived integration branch workflows
|
||||||
|
- remote cloud-agent execution that returns a branch or PR
|
||||||
|
|
||||||
without forcing every issue or agent to expose low-level runtime configuration.
|
without forcing every issue or agent to expose low-level runtime configuration.
|
||||||
|
|
||||||
@@ -305,6 +348,7 @@ Examples:
|
|||||||
- if the project has no workspace automation, these fields may all be null
|
- if the project has no workspace automation, these fields may all be null
|
||||||
- if the project has one primary workspace, issue creation should default to it silently
|
- if the project has one primary workspace, issue creation should default to it silently
|
||||||
- `reuse_existing` is advanced-only and should target active execution workspaces, not the whole workspace universe
|
- `reuse_existing` is advanced-only and should target active execution workspaces, not the whole workspace universe
|
||||||
|
- existing issues without these fields should behave as `inherit` during migration
|
||||||
|
|
||||||
## 5. Execution Workspace
|
## 5. Execution Workspace
|
||||||
|
|
||||||
@@ -321,6 +365,7 @@ Without an explicit `execution workspace` record, Paperclip has nowhere stable t
|
|||||||
- PR linkage
|
- PR linkage
|
||||||
- cleanup state
|
- cleanup state
|
||||||
- "reuse this existing integration branch" behavior
|
- "reuse this existing integration branch" behavior
|
||||||
|
- remote provider session identity
|
||||||
|
|
||||||
### Proposed new object
|
### Proposed new object
|
||||||
|
|
||||||
@@ -354,6 +399,11 @@ Without an explicit `execution workspace` record, Paperclip has nowhere stable t
|
|||||||
- `baseRef`
|
- `baseRef`
|
||||||
- `branchName`
|
- `branchName`
|
||||||
- `providerRef`
|
- `providerRef`
|
||||||
|
- `providerType`
|
||||||
|
- `local_fs`
|
||||||
|
- `git_worktree`
|
||||||
|
- `adapter_managed`
|
||||||
|
- `cloud_sandbox`
|
||||||
- `derivedFromExecutionWorkspaceId`
|
- `derivedFromExecutionWorkspaceId`
|
||||||
- `lastUsedAt`
|
- `lastUsedAt`
|
||||||
- `openedAt`
|
- `openedAt`
|
||||||
@@ -368,6 +418,7 @@ Without an explicit `execution workspace` record, Paperclip has nowhere stable t
|
|||||||
|
|
||||||
- `sourceIssueId` is the issue that originally caused the workspace to be created, not necessarily the only issue linked to it later.
|
- `sourceIssueId` is the issue that originally caused the workspace to be created, not necessarily the only issue linked to it later.
|
||||||
- multiple issues may link to the same execution workspace in a long-lived branch workflow.
|
- multiple issues may link to the same execution workspace in a long-lived branch workflow.
|
||||||
|
- `cwd` may be null for remote execution workspaces; provider identity and work product links still make the object useful.
|
||||||
|
|
||||||
## 6. Issue-to-Execution Workspace Link
|
## 6. Issue-to-Execution Workspace Link
|
||||||
|
|
||||||
@@ -473,6 +524,7 @@ without turning issues into a raw dump of adapter details.
|
|||||||
- previews are stored here as `type=preview_url` or `runtime_service`
|
- previews are stored here as `type=preview_url` or `runtime_service`
|
||||||
- Paperclip-owned processes should update health/status automatically
|
- Paperclip-owned processes should update health/status automatically
|
||||||
- external providers should at least store link, provider, external id, and latest known state
|
- external providers should at least store link, provider, external id, and latest known state
|
||||||
|
- cloud agents should be able to create work product records without Paperclip owning the execution host
|
||||||
|
|
||||||
## Page and UI Model
|
## Page and UI Model
|
||||||
|
|
||||||
@@ -550,6 +602,7 @@ Card/list columns:
|
|||||||
- active execution workspaces count
|
- active execution workspaces count
|
||||||
- active issue count
|
- active issue count
|
||||||
- active preview count
|
- active preview count
|
||||||
|
- hosting type / provider when remote-managed
|
||||||
|
|
||||||
Actions:
|
Actions:
|
||||||
|
|
||||||
@@ -586,6 +639,7 @@ Fields:
|
|||||||
- `Derived workspace parent directory`
|
- `Derived workspace parent directory`
|
||||||
|
|
||||||
Hide git-specific fields when the selected workspace is not git-backed.
|
Hide git-specific fields when the selected workspace is not git-backed.
|
||||||
|
Hide local-path-specific fields when the selected workspace is remote-managed.
|
||||||
|
|
||||||
#### Section: `Pull Requests`
|
#### Section: `Pull Requests`
|
||||||
|
|
||||||
@@ -637,6 +691,8 @@ Entry point: `Project > Code > Add workspace`
|
|||||||
- `Remote managed`
|
- `Remote managed`
|
||||||
- `Local path`
|
- `Local path`
|
||||||
- `Repository URL`
|
- `Repository URL`
|
||||||
|
- `Remote provider`
|
||||||
|
- `Remote workspace reference`
|
||||||
- `Default ref`
|
- `Default ref`
|
||||||
- `Set as default workspace`
|
- `Set as default workspace`
|
||||||
- `Setup command`
|
- `Setup command`
|
||||||
@@ -646,6 +702,7 @@ Entry point: `Project > Code > Add workspace`
|
|||||||
|
|
||||||
- if source type is non-git, hide branch/PR-specific setup
|
- if source type is non-git, hide branch/PR-specific setup
|
||||||
- if source type is git, show ref and optional advanced branch fields
|
- if source type is git, show ref and optional advanced branch fields
|
||||||
|
- if source type is remote-managed, show provider/reference fields and hide local-path-only configuration
|
||||||
- for simple solo users, this can be one path field and one save button
|
- for simple solo users, this can be one path field and one save button
|
||||||
|
|
||||||
## 4. Issue Create Flow
|
## 4. Issue Create Flow
|
||||||
@@ -695,6 +752,10 @@ not:
|
|||||||
|
|
||||||
- choose from a long mixed list of roots, derived worktrees, previews, and branch names
|
- choose from a long mixed list of roots, derived worktrees, previews, and branch names
|
||||||
|
|
||||||
|
### Migration rule
|
||||||
|
|
||||||
|
For existing users, issue creation should continue to look the same until a project explicitly enables richer workspace behavior.
|
||||||
|
|
||||||
## 5. Issue Detail
|
## 5. Issue Detail
|
||||||
|
|
||||||
Issue detail should expose workspace and work product clearly, but without becoming a code host UI.
|
Issue detail should expose workspace and work product clearly, but without becoming a code host UI.
|
||||||
@@ -790,6 +851,7 @@ It does not need to be in the main sidebar.
|
|||||||
- source issue
|
- source issue
|
||||||
- linked issues
|
- linked issues
|
||||||
- branch/ref
|
- branch/ref
|
||||||
|
- provider/session identity
|
||||||
- active runtime services
|
- active runtime services
|
||||||
- previews
|
- previews
|
||||||
- PRs
|
- PRs
|
||||||
@@ -812,6 +874,7 @@ Inbox should surface actionable work product events, not every implementation de
|
|||||||
- preview unhealthy
|
- preview unhealthy
|
||||||
- workspace cleanup failed
|
- workspace cleanup failed
|
||||||
- runtime service failed
|
- runtime service failed
|
||||||
|
- remote cloud-agent run returned PR or preview that needs review
|
||||||
|
|
||||||
### Do not show by default
|
### Do not show by default
|
||||||
|
|
||||||
@@ -853,6 +916,101 @@ For issues with linked work product, show compact badges:
|
|||||||
- `Workspace mode`
|
- `Workspace mode`
|
||||||
- `Codebase`
|
- `Codebase`
|
||||||
|
|
||||||
|
## Upgrade and Migration Plan
|
||||||
|
|
||||||
|
## 1. Product-level migration stance
|
||||||
|
|
||||||
|
Migration must be silent-by-default and compatibility-preserving.
|
||||||
|
|
||||||
|
Existing users should not be forced to:
|
||||||
|
|
||||||
|
- create new workspace objects by hand before they can keep working
|
||||||
|
- re-tag old issues
|
||||||
|
- learn new workspace concepts before basic issue flows continue to function
|
||||||
|
|
||||||
|
## 2. Existing project migration
|
||||||
|
|
||||||
|
On upgrade:
|
||||||
|
|
||||||
|
- existing `project_workspaces` records are retained and shown as `Project Workspaces`
|
||||||
|
- the current primary workspace remains the default codebase
|
||||||
|
- existing project execution workspace policy is mapped into the new `Project Execution Workspace Policy` surface
|
||||||
|
- projects with no execution workspace policy stay in compatible/shared mode
|
||||||
|
|
||||||
|
## 3. Existing issue migration
|
||||||
|
|
||||||
|
On upgrade:
|
||||||
|
|
||||||
|
- existing issues default to `executionWorkspacePreference=inherit`
|
||||||
|
- if an issue already has execution workspace settings, map them forward directly
|
||||||
|
- if an issue has no explicit workspace data, preserve existing behavior and do not force a user-visible choice
|
||||||
|
|
||||||
|
## 4. Existing run/runtime migration
|
||||||
|
|
||||||
|
On upgrade:
|
||||||
|
|
||||||
|
- active or recent runtime services can be backfilled into execution workspace history where feasible
|
||||||
|
- missing history should not block rollout; forward correctness matters more than perfect historical reconstruction
|
||||||
|
|
||||||
|
## 5. Rollout UX
|
||||||
|
|
||||||
|
Use additive language in the UI:
|
||||||
|
|
||||||
|
- `Code`
|
||||||
|
- `Workspace automation`
|
||||||
|
- `Optional`
|
||||||
|
- `Advanced`
|
||||||
|
|
||||||
|
Avoid migration copy that implies users were previously using the product "wrong".
|
||||||
|
|
||||||
|
## Cloud Deployment Requirements
|
||||||
|
|
||||||
|
## 1. Paperclip host and execution host must be decoupled
|
||||||
|
|
||||||
|
Paperclip may run:
|
||||||
|
|
||||||
|
- locally with direct filesystem access
|
||||||
|
- in a cloud app host such as Vercel
|
||||||
|
- in a hybrid setup with external job runners
|
||||||
|
|
||||||
|
The workspace model must work in all three.
|
||||||
|
|
||||||
|
## 2. Remote execution must support first-class work product reporting
|
||||||
|
|
||||||
|
A cloud agent should be able to:
|
||||||
|
|
||||||
|
- resolve a project workspace
|
||||||
|
- realize an adapter-managed execution workspace remotely
|
||||||
|
- produce a branch
|
||||||
|
- open or update a PR
|
||||||
|
- emit preview URLs
|
||||||
|
- register artifacts
|
||||||
|
|
||||||
|
without the Paperclip host itself running local git or local preview processes.
|
||||||
|
|
||||||
|
## 3. Local-only assumptions must be optional
|
||||||
|
|
||||||
|
The following must be optional, not required:
|
||||||
|
|
||||||
|
- local `cwd`
|
||||||
|
- local git CLI
|
||||||
|
- host-managed worktree directories
|
||||||
|
- host-owned long-lived preview processes
|
||||||
|
|
||||||
|
## 4. Same product surface, different provider behavior
|
||||||
|
|
||||||
|
The UI should not split into "local mode" and "cloud mode" products.
|
||||||
|
|
||||||
|
Instead:
|
||||||
|
|
||||||
|
- local projects show path/git implementation details
|
||||||
|
- cloud projects show provider/reference details
|
||||||
|
- both surface the same high-level objects:
|
||||||
|
- project workspace
|
||||||
|
- execution workspace
|
||||||
|
- work product
|
||||||
|
- runtime service or preview
|
||||||
|
|
||||||
## Behavior Rules
|
## Behavior Rules
|
||||||
|
|
||||||
## 1. Cleanup must not depend on agents remembering `in_review`
|
## 1. Cleanup must not depend on agents remembering `in_review`
|
||||||
@@ -921,6 +1079,7 @@ That keeps Paperclip focused on coordination and visibility instead of splitting
|
|||||||
1. Add `execution_workspaces`
|
1. Add `execution_workspaces`
|
||||||
2. Link runs, issues, previews, and PRs to it
|
2. Link runs, issues, previews, and PRs to it
|
||||||
3. Add simple execution workspace detail page
|
3. Add simple execution workspace detail page
|
||||||
|
4. Make `cwd` optional and ensure provider-managed remote workspaces are supported from day one
|
||||||
|
|
||||||
## Phase 3: Add work product model
|
## Phase 3: Add work product model
|
||||||
|
|
||||||
@@ -928,6 +1087,7 @@ That keeps Paperclip focused on coordination and visibility instead of splitting
|
|||||||
2. Ingest PRs, previews, branches, commits
|
2. Ingest PRs, previews, branches, commits
|
||||||
3. Add issue `Work Product` tab
|
3. Add issue `Work Product` tab
|
||||||
4. Add inbox items for actionable work product state changes
|
4. Add inbox items for actionable work product state changes
|
||||||
|
5. Support remote agent-created PR/preview reporting without local ownership
|
||||||
|
|
||||||
## Phase 4: Add advanced reuse and cleanup workflows
|
## Phase 4: Add advanced reuse and cleanup workflows
|
||||||
|
|
||||||
@@ -935,6 +1095,7 @@ That keeps Paperclip focused on coordination and visibility instead of splitting
|
|||||||
2. Add cleanup lifecycle UI
|
2. Add cleanup lifecycle UI
|
||||||
3. Add operator branch workflow shortcuts
|
3. Add operator branch workflow shortcuts
|
||||||
4. Add richer external preview harvesting
|
4. Add richer external preview harvesting
|
||||||
|
5. Add migration tooling/backfill where it improves continuity for existing users
|
||||||
|
|
||||||
## Why This Model Is Right
|
## Why This Model Is Right
|
||||||
|
|
||||||
@@ -953,6 +1114,12 @@ Most importantly, it keeps the abstractions clean:
|
|||||||
- work product defines what came out of the work
|
- work product defines what came out of the work
|
||||||
- PRs remain outputs, not the core task model
|
- PRs remain outputs, not the core task model
|
||||||
|
|
||||||
|
It also keeps the rollout practical:
|
||||||
|
|
||||||
|
- existing users can upgrade without workflow breakage
|
||||||
|
- local-first installs stay simple
|
||||||
|
- cloud-hosted Paperclip deployments remain first-class
|
||||||
|
|
||||||
That is a better fit for Paperclip than either extreme:
|
That is a better fit for Paperclip than either extreme:
|
||||||
|
|
||||||
- hiding workspace behavior until nobody understands it
|
- hiding workspace behavior until nobody understands it
|
||||||
|
|||||||
Reference in New Issue
Block a user