diff --git a/.doc/adr/2026-09-16-software-project-bootstrap-keys.md b/.doc/adr/2026-09-16-software-project-bootstrap-keys.md new file mode 100644 index 00000000..c33e71ed --- /dev/null +++ b/.doc/adr/2026-09-16-software-project-bootstrap-keys.md @@ -0,0 +1,85 @@ +# ADR:纯软件工作流 key 与领域边界(SWBOOT-00) + +## 状态 + +已接受(2026-09-16) + +## 背景 + +工作流引擎已声明 `non_medical_software` 产品域,但正式目录、创建入口与模板仍以医疗器械三工作流(`main` / `product_manager` / `test_manager`)为硬编码白名单。继续复用医疗 manifest 会造成临床/注册/CDO 语义污染;直接改写既有三 key 会破坏已激活医疗实例。 + +详细设计见 [software-project-bootstrap-workflow](../system-design/2026-09-14-software-project-bootstrap-workflow.md)。 + +## 决策 + +### 1. 新增正式可选工作流 key + +| key | 定位 | 默认产品域 | 可重复实例 | +|-----|------|------------|------------| +| `software_bootstrap` | 一次性建立项目事实、需求、架构、风险、路线与验证基线 | `non_medical_software` | 否(默认一次;终止后可重建并保留旧证据) | +| `software_delivery` | 按里程碑/发布重复交付,承接 change brief → 证据 → 验证 → 发布 → 复盘 | `non_medical_software` | 是 | + +医疗三 key **保持不变**,仍为正式可选;不得在其 published hash 上替换为软件语义。 + +### 2. 目录策略:published + selectable,而非“仅三 key” + +项目可选工作流 = 已发布 (`latest_published_version > 0`) ∩ `project_selectable=true` ∩ 策略白名单。 + +白名单扩展为: + +```text +main | product_manager | test_manager | software_bootstrap | software_delivery +``` + +固定文档数量校验 **仅** 继续约束医疗三 key;软件工作流按 manifest 自身完整性校验,不强制医疗文档数。 + +### 3. 领域与合规分离 + +- `product_domain=non_medical_software` 只说明非医疗器械,不关闭鉴权/审计/安全基线。 +- `compliance_profile` / `governance_profile` / `execution_mode` / `team_mode` 为项目级独立字段。 +- 首期默认:`governance=standard`,`compliance=internal_control+security_baseline`,`execution_mode=docs_only`。 +- `controlled_patch` 在 SWBOOT-10 受控执行器就绪前 **不可真正启用**;仅保留 allowlist stub。 + +### 4. 串联而非回环 + +```text +software_bootstrap(完成 + 创建者确认) + → 仅建议 software_delivery + → 创建者确认后新建 planning/激活实例 +``` + +bootstrap 完成不得自动创建或激活 delivery。 + +### 5. Solo 审批策略(契约) + +- `collaborative`:独立三权(author/reviewer/approver 不同人)。 +- `solo`:`creator_acknowledgement`;页面与审计持续标注“未独立评审”。 +- `controlled` 或要求独立审查的 compliance profile:**禁止 solo**。 + +### 6. 错误码(首期) + +| code | 含义 | +|------|------| +| `ERR_WORKFLOW_NOT_SELECTABLE` | key 不在正式可选白名单或未 published | +| `ERR_DOMAIN_INCOMPATIBLE` | 工作流与项目 `product_domain` / `project_type` 不兼容 | +| `ERR_COMPLIANCE_PROFILE` | 合规配置非法或与治理冲突(如 controlled+solo) | +| `ERR_EXECUTION_MODE_DISABLED` | 请求 `controlled_patch` 但受控执行器未启用 | +| `ERR_REPO_PATH_NOT_ALLOWLISTED` | 仓库路径不在管理员 allowlist(SWBOOT-10 stub) | +| `ERR_CREATION_PREVIEW_STALE` | creation token / plan_hash 过期或不匹配(409) | + +### 7. 运行时权威不变 + +继续遵守 [workflow-runtime-authority](./2026-09-12-workflow-runtime-authority.md):任务只能从冻结 `doc_task_instance` 启动;禁止客户端 `task_key`/duty/stage 旁路。 + +## 后果 + +- Bootstrap seed 与 catalog API 必须同时暴露软件两 key,且按 `product_domain` 过滤时不把医疗默认话术塞进软件项目。 +- 项目表 additive 增加 `project_type_key` / `compliance_profile_key` 等字段;旧项目不自动分类为医疗或软件。 +- SWBOOT-10 仅落地 allowlist stub:任何真实 patch/merge/push 必须 fail closed,直到独立 Epic 验收。 +- 医疗三工作流黄金用例与固定文档数门禁保持回归基线。 + +## 关联 + +- 实施任务:`.doc/ops/short-term/2026-09-16-software-project-bootstrap.md` +- Backlog:`.doc/ops/long-term/2026-09-14-software-project-bootstrap-implementation.md` +- 验收清单:`.doc/ops/checklists/2026-09-14-software-project-bootstrap-acceptance.md` diff --git a/.doc/ops/CURRENT.md b/.doc/ops/CURRENT.md index 99ea1d3d..6e4aa175 100644 --- a/.doc/ops/CURRENT.md +++ b/.doc/ops/CURRENT.md @@ -13,6 +13,7 @@ | owner | task | branch | worktree | mutex | status | |-------|------|--------|----------|-------|--------| +| Cursor-Auto | 2026-09-16-software-project-bootstrap | feature/software-project-bootstrap | - | workflow-design | in_progress | | Cursor | 2026-09-16-full-backlog-override | docs/override-nogo-full-backlog | - | architecture-docs | in_progress | | Cursor | 2026-09-16-gitea-nightly-docker-datadir | fix/gitea-nightly-docker-datadir | - | ci | done | | Cursor | 2026-09-16-gitea-nightly-host-tools | fix/gitea-nightly-host-tools | - | ci | done | diff --git a/.doc/ops/short-term/2026-09-16-software-project-bootstrap.md b/.doc/ops/short-term/2026-09-16-software-project-bootstrap.md new file mode 100644 index 00000000..2f2785b7 --- /dev/null +++ b/.doc/ops/short-term/2026-09-16-software-project-bootstrap.md @@ -0,0 +1,55 @@ +--- +title: "纯软件项目自举 SWBOOT-00..09 实施" +status: in_progress +created: 2026-09-16 +updated: 2026-09-16 +owner: Cursor-Auto +branch: feature/software-project-bootstrap +worktree: "-" +mutex: workflow-design +--- + +# 纯软件项目自举 SWBOOT-00..09 实施 + +## 目标 + +落地 `software_bootstrap` / `software_delivery` 契约、迁移、manifest、目录白名单、创建向导后端钩子与 SWBOOT-10 allowlist stub;不合并 `dev`,不做真实受控改码。 + +## 范围 + +- SWBOOT-00 ADR +- SWBOOT-01 项目域字段迁移 +- SWBOOT-02..04 catalog + manifests(无医疗污染) +- SWBOOT-05..08 后端钩子(profile/创建预览/域过滤;UI 可部分) +- SWBOOT-09 单元测试与报告 +- SWBOOT-10 allowlist stub only + +## 非目标 + +- 合入 `dev` +- 真实 PI / Ubuntu UI 全量黄金验收 +- 真实 repo patch/merge/push + +## 步骤 + +1. [x] 认领 CURRENT + short-term +2. [ ] ADR +3. [ ] goose 00048 +4. [ ] manifests + catalog allowlist +5. [ ] create-project wizard hooks + SWBOOT-10 stub +6. [ ] unit tests + test-report +7. [ ] push feature 分支 + +## 验收标准 + +- [ ] 医疗三工作流目录与校验无回归 +- [ ] 软件两 key 可选且无医疗默认语义 +- [ ] 迁移 additive,旧项目不误分类 +- [ ] SWBOOT-10 仅 stub,拒绝真实执行 +- [ ] 测试报告落盘 + +## 相关链接 + +- 设计: `.doc/system-design/2026-09-14-software-project-bootstrap-workflow.md` +- Backlog: `.doc/ops/long-term/2026-09-14-software-project-bootstrap-implementation.md` +- Checklist: `.doc/ops/checklists/2026-09-14-software-project-bootstrap-acceptance.md`