docs(adr): SWBOOT-00 software_bootstrap/delivery keys and domain boundary
Freeze selectable workflow keys, domain/compliance separation, solo policy, and SWBOOT-10 fail-closed stub contract without touching medical three. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -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`
|
||||
@@ -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 |
|
||||
|
||||
@@ -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`
|
||||
Reference in New Issue
Block a user