Project 与 Workspace 开发资源库
产品目标与边界
开发资源是可由用户在 Plane 内创建和管理的开发工作定义。每个资源只有一个身份和一个当前归属:Project 或 Workspace。资源可用于功能、技能、模板等类型,领域(游戏开发、平台开发等)与归属、类型是独立维度。 是否值得跨项目复用由用户决定,系统不依据领域、Project Profile 或使用次数自动提升资源。
Project 资源库展示本项目创建的资源以及从 Workspace 采用的版本;Workspace 资源库展示发布后对整个 Workspace 可见的资源。现有实例级静态目录不是第三种可编辑归属。迁移后 Plane 数据库是运行时资源 元数据、版本、分类、采用关系、开发配方和物化收据的唯一读取来源;正式文档和技能仓库继续拥有其各自 详细产品合同或代码内容,资源只保存精确来源引用和摘要,不复制另一份正文。
身份、分类与版本
| 维度 | 合同 |
|---|---|
| 范围 | project 或 workspace,Project 资源只在所属 Project 可见。提升时资源所有权转移到 Workspace,原项目改为采用该版本。 |
| 领域 | Workspace 内稳定的 slug 与显示名。初始可提供“游戏开发”“平台开发”,Workspace 管理员可在 Plane 中增补;领域不是权限边界,也不强制匹配 Project Profile。 |
| 类型 | feature、skill、template。类型决定展示语义,不决定是否可复用。 |
| 状态 | 草稿、已发布、已归档。草稿可编辑;每次发布形成不可变版本。归档不删除历史或已采用版本。 |
| 来源 | 可选的外部仓库、40 位 commit、locator 与摘要;系统导入资源还记录其原始 catalog release。来源引用不得含凭据。 |
| 开发配方 | 可选。没有配方的资源仍可浏览、分类、采用,但“开始开发”不可用并解释原因。 |
资源 ID 创建后不变。已发布版本不得原地修改;编辑从现有版本派生草稿,发布时生成新版本。Project 采用关系固定到一个具体版本,不自动跟随更新;用户可显式选择升级,已生成的 Module/Work Item 不随之 重写。Project 特化须显式派生新的 Project 资源,记录来源版本,不对 Workspace 版本作隐式本地覆盖。
用户操作
- 用户在 Project 资源库中创建草稿,填写名称、摘要、领域、类型、可选外部来源和可选开发配方;保存后 只对该 Project 可见。
- Project 管理员发布项目版本。项目可直接从自己的已发布版本发起“开始开发”。
- Project 管理员申请“提升到 Workspace”;Workspace 管理员确认时,原资源身份与已发布版本历史保留, 当前版本成为 Workspace 可采用版本,原 Project 转成该版本的采用方。失败不得产生半提升或孤立采用关系。
- 其它 Project 可从 Workspace 资源库使用“用于项目”,或在 Project 资源库使用“从 Workspace 添加”。 两个入口创建相同的带版本采用关系;采用本身不创建 Issue。
- Project 可以移除采用关系,但不能删除 Workspace 资源、其版本或已物化的工作项。重新采用必须由 用户明确选择版本。
- “开始开发”单独执行预览和确认。UI 必须清楚区分“采用资源”和“创建开发工作”。
列表同时支持范围、领域、类型、状态和搜索;卡片展示归属、版本、来源、开发可用状态与阻断原因。 操作必须有明确的加载、成功、冲突、权限不足、空列表和来源失效状态。分类和过滤不能靠颜色单独表达。
权限与隔离
Workspace 成员可浏览 Workspace 已发布资源;Project 资源及采用关系仅对该 Project 的可访问成员 可见。Project 成员可拟稿、Project 管理员可发布项目版本和申请提升、Workspace 管理员可维护领域 和确认提升。创建预览与确认必须由目标 Project 的管理员或 Workspace 管理员执行。服务端逐操作核对 Workspace、Project 归属和成员资格,不能凭资源 ID 跨 Project 读取草稿或创建采用关系。
上述新增写权限已由 Producer 在本任务中明确批准;权限检查必须在服务端执行,不能只靠前端禁用按钮。
“开始开发”不变量
配方使用目标无关的稳定选择器:一个 Module,非空普通 Issue/Task/Bug、唯一工作项 key、可选 parent、
精确 state group/name、type key、负责人 principal、brief、contract refs 和 blocked_by 关系。
配方不得包含 Project/User/State/IssueType UUID、凭据、Automation Run 或部署命令。
预览核对资源版本及配方摘要、目标 Project、类型和状态选择器、负责人绑定、名称与 external identity 冲突;有效期 15 分钟。确认重新核对上述状态,在单一事务中创建 Module、Work Item、负责人和依赖关系。 幂等确认只返回原收据,不重复创建。源版本、人员或目标配置变化时拒绝整个操作,不得留下部分对象。 “开始开发”只创建规划对象,不启动 Automation、不提交 Git、不创建 MR、不发布或合并。
从静态目录一次性切换
切换前的目录从 docs origin 按实例级权限读取;所有有效 Workspace 均可见。一次性迁移应将同一已发布目录
导入每个有效 Workspace,不应默认仅导入 wenjing。迁移还必须保留历史物化收据,并使尚未确认的旧预览过期。
迁移在受审的数据库迁移中导入被确认的正式目录项和不可变来源版本。历史已应用收据保留生成对象 ID、 来源修订与摘要;未确认的旧预览必须过期,不得跨新旧版本确认。切换后 API、前端和部署配置一次性改为 Plane 数据库读取,删除旧 HTTP 目录读取、旧环境变量和双读/回退分支。文档站可以继续作为正式合同与 技能来源,但不能是 Plane 运行时的隐藏目录副本。未来正式来源更新须作为显式、受审的资源版本导入。
源码发布仍须经过受审 MR、外部 CI 与精确提交头的受审合并;生产迁移与启用只作用于经审查的版本。