test(swboot): SWBOOT-09 L1 suite and acceptance report
Update catalog size expectations to five workflows and archive the unit-test report; sync FEATURE-MATRIX and task docs without merging to dev. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+1
-1
@@ -13,7 +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-Auto | 2026-09-16-software-project-bootstrap | feature/software-project-bootstrap | .worktrees/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 |
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: "纯软件项目自举工作流实施"
|
||||
status: planned
|
||||
status: in_progress
|
||||
created: 2026-09-14
|
||||
updated: 2026-09-16
|
||||
---
|
||||
@@ -22,6 +22,19 @@ updated: 2026-09-16
|
||||
- 真实 PI 和 Ubuntu 无头浏览器黄金项目验收通过;
|
||||
- 未实现受控代码执行前,系统不会直接修改项目仓库。
|
||||
|
||||
## 实施进度(2026-09-16)
|
||||
|
||||
| Epic | 状态 | 说明 |
|
||||
|------|------|------|
|
||||
| SWBOOT-00 | done(契约) | ADR `.doc/adr/2026-09-16-software-project-bootstrap-keys.md` |
|
||||
| SWBOOT-01 | done(迁移) | goose `00048` additive;活验待集成槽 |
|
||||
| SWBOOT-02..04 | done(L1) | manifests + catalog 五 key;医疗三门禁保留 |
|
||||
| SWBOOT-05..08 | partial | 后端 catalog/creation-preview/create 字段;七步 UI / 对话路由未做 |
|
||||
| SWBOOT-09 | partial | L1 单测报告已出;真实 PI/UI NOT RUN |
|
||||
| SWBOOT-10 | stub only | allowlist + fail-closed;无真实 patch/merge |
|
||||
|
||||
分支:`feature/software-project-bootstrap`(**未合 dev**)。
|
||||
|
||||
## 实施拆分
|
||||
|
||||
| Epic | 范围 | 依赖 | 验收 |
|
||||
|
||||
@@ -5,7 +5,7 @@ created: 2026-09-16
|
||||
updated: 2026-09-16
|
||||
owner: Cursor-Auto
|
||||
branch: feature/software-project-bootstrap
|
||||
worktree: "-"
|
||||
worktree: ".worktrees/feature-software-project-bootstrap"
|
||||
mutex: workflow-design
|
||||
---
|
||||
|
||||
@@ -33,23 +33,25 @@ mutex: workflow-design
|
||||
## 步骤
|
||||
|
||||
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
|
||||
2. [x] ADR
|
||||
3. [x] goose 00048
|
||||
4. [x] manifests + catalog allowlist
|
||||
5. [x] create-project wizard hooks + SWBOOT-10 stub
|
||||
6. [x] unit tests + test-report
|
||||
7. [ ] push feature 分支
|
||||
|
||||
## 验收标准
|
||||
|
||||
- [ ] 医疗三工作流目录与校验无回归
|
||||
- [ ] 软件两 key 可选且无医疗默认语义
|
||||
- [ ] 迁移 additive,旧项目不误分类
|
||||
- [ ] SWBOOT-10 仅 stub,拒绝真实执行
|
||||
- [ ] 测试报告落盘
|
||||
- [x] 医疗三工作流目录与校验无回归(L1)
|
||||
- [x] 软件两 key 可选且无医疗默认语义
|
||||
- [x] 迁移 additive,旧项目不误分类(SQL 已写;活验 NOT RUN)
|
||||
- [x] SWBOOT-10 仅 stub,拒绝真实执行
|
||||
- [x] 测试报告落盘
|
||||
|
||||
## 相关链接
|
||||
|
||||
- ADR: `.doc/adr/2026-09-16-software-project-bootstrap-keys.md`
|
||||
- 设计: `.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`
|
||||
- Test report: `.doc/test-reports/2026-09-16-software-project-bootstrap-test-report.md`
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
| 对话数据治理(D7) | 留存/删除口径、库·备份·日志控制、敏感字段加密边界 | deferred | deferred_enhancement(违规则升 blocker) | [计划](../remediation/2026-09-16-feature-matrix-production-readiness-plan.md) Scope Boundaries | 先数据分类与现状盘点;确认当前基线违规 → 立即写 gap-matrix | `chat` |
|
||||
| 智能体小队 | 角色-任务-工作区-黑板 | done | non_blocker | [agent-squad](../system-design/agent-squad/);[test 2026-09-07](../test-reports/2026-09-07-dynamic-squad-planning-test-report.md) | 非关键步骤降级(A5/A6)属 backlog | `squad` |
|
||||
| 工作流治理 | 三正式工作流、设置页/DutyMode、动作级鉴权、真实 PI 三工作流 E2E、full/none 混合长链 | done | non_blocker | [三工作流整改](../remediation/2026-09-12-three-workflows-strict-governance-remediation.md);[409/职责](../test-reports/2026-09-14-workflow-plan-409-frozen-and-optional-duties-test-report.md);[鉴权](../test-reports/2026-09-14-governance-action-level-authz-test-report.md);[PI E2E](../test-reports/2026-09-16-pi-three-workflow-e2e-test-report.md);[Wave2 full/none](../test-reports/2026-09-16-wave2-real-pi-evidence-test-report.md) | full 跨用户审批 + none 免审批不阻塞已签。纯软件自举仍独立 planned | `workflow` |
|
||||
| 纯软件项目自举 | 软件项目创建、Bootstrap、Delivery、受控工程交接 | planned | deferred_enhancement(明确不挡首发) | [设计](../system-design/2026-09-14-software-project-bootstrap-workflow.md);[调研](../ops/research/2026-09-14-software-project-bootstrap-current-state.md);[总控](../ops/short-term/2026-09-16-full-backlog-override.md) | **覆盖授权实施中**:SWBOOT-00…09;SWBOOT-10 仅 stub | `workflow-design` |
|
||||
| 纯软件项目自举 | 软件项目创建、Bootstrap、Delivery、受控工程交接 | partial | deferred_enhancement(明确不挡首发) | [设计](../system-design/2026-09-14-software-project-bootstrap-workflow.md);[ADR](../adr/2026-09-16-software-project-bootstrap-keys.md);[L1 报告](../test-reports/2026-09-16-software-project-bootstrap-test-report.md);[总控](../ops/short-term/2026-09-16-full-backlog-override.md) | SWBOOT-00…09 L1 已落 `feature/software-project-bootstrap`(未合 dev);SWBOOT-10 stub only;真实 PI/UI NOT RUN | `workflow-design` |
|
||||
| IAM / 鉴权 | 项目级 API 鉴权 + RBAC;会话/阶段授权 | done | 加固 | [v3 full inventory](../audit/authorization-matrix-v3-full.md);[session 中断](../test-reports/2026-09-16-iam-route-inventory-test-report.md);[fail-closed](../test-reports/2026-09-16-wave1-iam-fail-closed-test-report.md);[410 策略](../audit/2026-09-16-bug11-410-retire-decision.md);[R13](../audit/2026-09-16-r13-data-safety-checklist.md) | 全路由 inventory + session 中断负例 + 410 冻结 + R13 基线已签 | `authz` |
|
||||
| 文档治理 | 法定文档生命周期 + 租约 + 受控正文读取 | done | non_blocker | [docgov](../test-reports/2026-09-08-docgov-lifecycle-and-claiming-framework-test-report.md);[正文 UI](../test-reports/2026-09-14-controlled-content-ui-acceptance.md);[canonical hash](../remediation/2026-09-14-controlled-content-canonical-hash-remediation.md) | 项目 143 只读;不终止 | `docgov` |
|
||||
| 文档版本 baseline | 账本、人工修订、确定性 diff+lineage、运行时 UI、负责人通知 | done | non_blocker | [管理](../test-reports/2026-09-13-document-revision-management-test-report.md);[Round20 UI](../test-reports/2026-09-14-document-revision-runtime-ui-test-report.md);[ADR](../adr/2026-09-13-document-version-boundary.md) | **before**:完整 PI narrative 混入 → **after**:迁「PI change-report 叙事」。fallback 报告是本行内显式行为,不是缺口 | `docgov` |
|
||||
|
||||
@@ -0,0 +1,135 @@
|
||||
# 纯软件项目自举(SWBOOT-00..09)测试报告
|
||||
|
||||
## 一、 测试背景 (Background)
|
||||
|
||||
工作流引擎已声明 `non_medical_software`,但正式目录与创建入口仍硬编码医疗三工作流。本轮在 `feature/software-project-bootstrap` 落地 SWBOOT-00..09 契约、迁移、manifest、目录白名单、创建向导后端钩子,以及 SWBOOT-10 allowlist stub(无真实 patch/merge)。医疗既有三工作流保持不变。
|
||||
|
||||
## 二、 测试目标 (Test Objectives)
|
||||
|
||||
- `software_bootstrap` / `software_delivery` manifest 可校验且无医疗默认语义污染
|
||||
- 正式可选 key 扩展为 5,医疗固定文档数门禁仍仅约束医疗三
|
||||
- 创建预览拒绝 `controlled_patch` 与 controlled/privacy+solo 冲突
|
||||
- SWBOOT-10 stub 对非 allowlist 路径与 patch/merge fail closed
|
||||
- `go vet` + 相关包 `-short` 单测通过;不冒充真实 PI / UI 验收
|
||||
|
||||
## 三、 测试方案与环境 (Test Plan & Environment)
|
||||
|
||||
| 项 | 值 |
|
||||
|----|-----|
|
||||
| OS | Linux 7.0.0-31-generic |
|
||||
| Go | go1.27.1 linux/amd64 |
|
||||
| Branch | `feature/software-project-bootstrap` |
|
||||
| Commit | `f6034fa`(报告提交前基线;含后续 test/docs 提交) |
|
||||
| 实测时间 | 2026-09-16T15:44:30Z |
|
||||
| 层级 | L1 单元 / 包级回归;L2+ PG 空库迁移、真实 PI、Ubuntu UI 本轮 **NOT RUN** |
|
||||
| 后端 | stub 允许用于本轮工程门禁;禁止作为最终产品验收 |
|
||||
|
||||
## 四、 预期结果 (Expected Results)
|
||||
|
||||
| 用例 | 预期 |
|
||||
|------|------|
|
||||
| UC-01 Official keys | 5 keys;医疗 3 + 软件 2 |
|
||||
| UC-02 Domain filter | `software_*` 拒 `medical_device`;空 domain 不过滤 |
|
||||
| UC-03 Manifest validate | bootstrap/delivery `ValidateDefinitionV2` PASS;标题无临床/NMPA/CDMO |
|
||||
| UC-04 Creation preview | solo+standard 出 `creator_acknowledgement`;privacy+solo 与 controlled_patch 失败 |
|
||||
| UC-05 Repo allowlist stub | 非白名单拒;白名单路径仍拒 ExecuteControlledPatch/ApproveMerge |
|
||||
| UC-06 Software create | `non_medical_software` 落库字段;阶段 `S0_boundary`;不发明医疗 device 字段 |
|
||||
| UC-07 Medical regression | main v2 固定 7 文档校验仍 PASS;server API lifecycle 期望挂载 5 |
|
||||
|
||||
## 五、 实际测试结果与判定 (Actual Results & Evaluation)
|
||||
|
||||
### UC-01 Official keys
|
||||
|
||||
- **测试输入 (Input)**:`go test -short ./internal/workflowdef/ -run TestOfficialWorkflowKeys`
|
||||
- **实际输出 (Actual Output)**:`ok chat-agent-system/internal/workflowdef`
|
||||
- **评价判定 (Evaluation / Verdict)**:PASS
|
||||
- **性能与耗时 (Duration & Latency)**:~0.003s
|
||||
|
||||
### UC-02 Domain filter
|
||||
|
||||
- **测试输入 (Input)**:`TestCompatibleWithProductDomain`
|
||||
- **实际输出 (Actual Output)**:包含于 workflowdef 包 PASS
|
||||
- **评价判定 (Evaluation / Verdict)**:PASS
|
||||
- **性能与耗时 (Duration & Latency)**:含于包耗时
|
||||
|
||||
### UC-03 Manifest validate + 去污染
|
||||
|
||||
- **测试输入 (Input)**:`TestValidateDefinitionV2_SoftwareManifests`
|
||||
- **实际输出 (Actual Output)**:bootstrap/delivery 校验通过;医疗词扫描无命中
|
||||
- **评价判定 (Evaluation / Verdict)**:PASS
|
||||
- **性能与耗时 (Duration & Latency)**:含于包耗时
|
||||
|
||||
### UC-04 Creation preview
|
||||
|
||||
- **测试输入 (Input)**:`go test -short ./internal/swboot/ -run 'TestBuildCreationPreview|TestProjectTypesCatalog'`
|
||||
- **实际输出 (Actual Output)**:`ok chat-agent-system/internal/swboot`
|
||||
- **评价判定 (Evaluation / Verdict)**:PASS
|
||||
- **性能与耗时 (Duration & Latency)**:~0.002s
|
||||
|
||||
### UC-05 Repo allowlist stub
|
||||
|
||||
- **测试输入 (Input)**:`TestRepoAllowlistStub`
|
||||
- **实际输出 (Actual Output)**:非 allowlist → `ERR_REPO_PATH_NOT_ALLOWLISTED`;patch/merge → `ERR_SWBOOT10_STUB_ONLY`
|
||||
- **评价判定 (Evaluation / Verdict)**:PASS
|
||||
- **性能与耗时 (Duration & Latency)**:含于 swboot 包
|
||||
|
||||
### UC-06 Software create
|
||||
|
||||
- **测试输入 (Input)**:`TestCreateSoftwareProject_NoMedicalDefaults`
|
||||
- **实际输出 (Actual Output)**:`ok chat-agent-system/internal/projectworkflow`
|
||||
- **评价判定 (Evaluation / Verdict)**:PASS
|
||||
- **性能与耗时 (Duration & Latency)**:~0.003s
|
||||
|
||||
### UC-07 Medical regression + server API
|
||||
|
||||
- **测试输入 (Input)**:`go test -short ./internal/server/ -run TestProjectWorkflowAPI_Lifecycle` 及全包 short
|
||||
- **实际输出 (Actual Output)**:挂载/目录数量期望已更新为 5;`ok chat-agent-system/internal/server`
|
||||
- **评价判定 (Evaluation / Verdict)**:PASS(医疗语义与旧 API 行为保留;仅目录容量扩展)
|
||||
- **性能与耗时 (Duration & Latency)**:server 包 ~10.9s
|
||||
|
||||
### 未执行(明示)
|
||||
|
||||
| 项 | Status |
|
||||
|----|--------|
|
||||
| PostgreSQL 空库/旧库升级到 schema 48 活验 | NOT RUN |
|
||||
| 真实 PI Agent Runner 文档生成 | NOT RUN |
|
||||
| Ubuntu Playwright UI-SW-00..14 | NOT RUN |
|
||||
| 受控 patch worktree 真实执行 | NOT RUN(仅 stub) |
|
||||
|
||||
## 六、 自动化测试套件汇总 (Test Suite Execution)
|
||||
|
||||
命令:
|
||||
|
||||
```bash
|
||||
go vet ./internal/swboot/ ./internal/workflowdef/ ./internal/projectworkflow/ ./internal/workflow/ ./internal/server/
|
||||
go test -short -count=1 \
|
||||
./internal/swboot/ \
|
||||
./internal/workflowdef/ \
|
||||
./internal/workflow/ \
|
||||
./internal/projectworkflow/ \
|
||||
./internal/projectinstance/ \
|
||||
./internal/archtest/ \
|
||||
./internal/server/
|
||||
```
|
||||
|
||||
结果摘要(真实控制台):
|
||||
|
||||
```text
|
||||
ok chat-agent-system/internal/swboot 0.002s
|
||||
ok chat-agent-system/internal/workflowdef 0.003s
|
||||
? chat-agent-system/internal/workflow [no test files]
|
||||
ok chat-agent-system/internal/projectworkflow 0.003s
|
||||
ok chat-agent-system/internal/projectinstance 0.004s
|
||||
ok chat-agent-system/internal/archtest 0.143s
|
||||
ok chat-agent-system/internal/server 10.881s
|
||||
```
|
||||
|
||||
`go vet`:无输出(PASS)。
|
||||
|
||||
通过率:上述包 100%(workflow 无测试文件不计失败)。
|
||||
|
||||
## 七、 测试结论与后续优化建议 (Conclusion & Next Steps)
|
||||
|
||||
- **结论**:SWBOOT-00..09 工程门禁(L1)达到合入候选标准;**未**达到完整验收清单完成定义(真实 PI / UI / PG 迁移活验仍为 NOT RUN)。
|
||||
- **未合 `dev`**:按要求仅推送 feature 分支。
|
||||
- **后续**:schema 48 在集成槽位对空库/旧库升级;七步 UI;对话路由与软件 profile;SWBOOT-10 真受控执行独立 Epic。
|
||||
@@ -74,7 +74,7 @@ func TestProjectWorkflowAPI_Lifecycle(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
assert.NotEmpty(t, projList)
|
||||
|
||||
// 4. 查询项目挂载的工作流清单 -> 包含 3 个默认工作流
|
||||
// 4. 查询项目挂载的工作流清单 -> 包含医疗三 + 软件两默认工作流
|
||||
reqWFs := httptest.NewRequest(http.MethodGet, "/api/v1/projects/1001/workflows", nil)
|
||||
recWFs := httptest.NewRecorder()
|
||||
handler.ServeHTTP(recWFs, reqWFs)
|
||||
@@ -83,7 +83,7 @@ func TestProjectWorkflowAPI_Lifecycle(t *testing.T) {
|
||||
var wfList []*projectworkflow.ProjectWorkflow
|
||||
err = json.Unmarshal(recWFs.Body.Bytes(), &wfList)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 3, len(wfList))
|
||||
assert.Equal(t, 5, len(wfList))
|
||||
|
||||
// 5. planning 项目禁止旧式切换 -> 409 Conflict
|
||||
bodySwitchBlocked, _ := json.Marshal(projectworkflow.ActivateWorkflowInput{
|
||||
@@ -119,7 +119,7 @@ func TestProjectWorkflowAPI_Lifecycle(t *testing.T) {
|
||||
require.Equal(t, http.StatusOK, recKeyedWFs.Code)
|
||||
var keyedWFs []*projectworkflow.ProjectWorkflow
|
||||
require.NoError(t, json.Unmarshal(recKeyedWFs.Body.Bytes(), &keyedWFs))
|
||||
assert.Equal(t, 3, len(keyedWFs))
|
||||
assert.Equal(t, 5, len(keyedWFs))
|
||||
|
||||
bodySwitchCreator, _ := json.Marshal(projectworkflow.ActivateWorkflowInput{
|
||||
WorkflowKey: "product_manager",
|
||||
@@ -141,7 +141,7 @@ func TestProjectWorkflowAPI_Lifecycle(t *testing.T) {
|
||||
var defs []*projectworkflow.Definition
|
||||
err = json.Unmarshal(recDefs.Body.Bytes(), &defs)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 3, len(defs))
|
||||
assert.Equal(t, 5, len(defs))
|
||||
|
||||
// 9. 触发工作流运行 -> 200 OK
|
||||
bodyRun, _ := json.Marshal(map[string]any{
|
||||
|
||||
Reference in New Issue
Block a user