merge: candidate integrate-member-visibility-dialogue-ctx-2026-09-28 into dev

This commit is contained in:
weichen
2026-09-28 18:57:35 +00:00
@@ -0,0 +1,95 @@
# 成员文档可见性与对话上下文注入 测试报告
## 一、 测试背景 (Background)
测试项目中,测试员工能作为项目成员打开项目,但流程受控文档被前端全局角色过滤成 0 份。对话触发的调研任务工作区只留下「开关关闭或无可共享对话」占位,是因为会话只写入数字项目 ID,协调器读取的字符串项目 ID 仍为空,对话包直接不采集。可行性评估在调研仍是模板时,回复只列信息缺口,不提示可先调研。
## 二、 测试目标 (Test Objectives)
- 会话绑定后,协调器上下文的项目 ID 与数字用户 ID 与会话一致。
- 未注入对话时,说明能区分开关关闭、项目未绑定、本轮没有对话包;有统计时 README 写明保留与滤除数量。
- 已打开项目中,项目成员能看见本项目流程受控文档;指定人、角色白名单和私密文档规则不变。
- 用户要写可行性评估且调研未完成时,回复建议先调研;阶段拒绝时附上推进说明。
## 三、 测试方案与环境 (Test Plan & Environment)
- 任务分支 `feature/member-visibility-dialogue-ctx-2026-09-28`,合入候选 `7eb9477d9edffd3f39aa7026a874169c6efb190b`,第一父 `8889011e5b6bd35a1d992ae5aec3f1c1c8bdae31`。
- 合入后本地 `dev` 指向同一候选。
- 工程验收在合入候选 worktree 上由 `agentctl validate` 重跑。
- 产品 PI 与测试员工浏览器全链路:未运行。原因见第七节。
## 四、 预期结果 (Expected Results)
- `arch-check`、`go vet ./...`、`go test -count=1 -short ./...` 通过。
- `web` 下 `npm test` 与 `npm run build` 通过。
- 成员可见性用例:非成员访客看不到流程受控文档;`projectMember: true` 时可见;`designated_only` 仍然拒绝。
## 五、 实际测试结果与判定 (Actual Results & Evaluation)
### 1. 架构门禁
- 输入:`./scripts/arch-check.sh --mode block`
- 首次输出:`NEW import chat internal/chat/workflow_guidance.go workflowdef`
- 处理:调研键只在 chat 内识别 `research` 与 `bd_research`,不再引用 `workflowdef`。
- 复跑:`arch-check block: production gate passed`
- 判定:PASS
### 2. Go short
- 输入:`go vet ./... && go test -count=1 -short ./...`
- 实际:候选上 validate 退出码 0;`internal/archtest`、`internal/chat`、`internal/squad`、`internal/server` 等均为 ok。
- 判定:PASS
- 耗时:候选上整段 validate(含前端)约 48 秒。
### 3. 前端
- 输入:`npm test`、`npm run build`
- 实际:node:test 543 通过、0 失败;vitest 3 文件 34 通过;`tsc && vite build` 成功。
- 判定:PASS
### 4. 身份回填与阶段建议
- 输入:`go test -count=1 -short ./internal/chat/`
- 覆盖:`TestSetProjectIDSyncsCoordinatorProject`、`TestBindCoordinatorIdentityUsesNumericUser`、`TestWorkflowPrerequisiteHintSuggestsResearch`、`TestAugmentWorkflowGuidanceSetsExpectationAndStageNote`
- 判定:PASS
### 5. 对话占位说明
- 输入:`go test -count=1 -short ./internal/squad/`
- 覆盖:未绑定项目的说明含「任务未绑定项目」且不写 `turns.md`;已绑定但无对话包的说明含「没有对话包」;开关关闭含「开关已关闭」;有统计时 README 含「采集统计:保留 2 轮」。
- 判定:PASS
### 6. 运行中的 dev 制品
- 输入:`GET /api/v1/health`;`ss` 查看 `:8080`。
- 实际:health 为 `status=ok`、`env=dev`。监听进程 `agent-server` pid 2657636,启动时间早于本次合入(二进制时间 2026-09-28 10:14 UTC)。`guard env --target dev` 返回 `LEASE_REQUIRED`。
- 判定:未运行。合入后的后端尚未加载。
### 7. 浏览器中的测试员工流程受控
- 输入:本机 `curl http://127.0.0.1:3100/src/engine/rbac.ts`;IDE 浏览器打开 `http://127.0.0.1:3100/`。
- 实际:Vite 提供的源码含 `projectMember`。IDE 浏览器停在 `chrome-error://chromewebdata/`,没有进入登录后的项目页。
- 判定:未运行。不能把源码含该字段记成测试员工看到 7 份文档。
## 六、 自动化测试套件汇总 (Test Suite Execution)
本次实际运行并在合入候选上复跑通过:
- `./scripts/arch-check.sh --mode block`
- `go vet ./...`
- `go test -count=1 -short ./...`
- `web`:`npm test`、`npm run build`
未运行:产品 PI Agent Runner、测试员工登录后的流程受控点击、合入后的新后端进程。
## 七、 测试结论与后续优化建议 (Conclusion & Next Steps)
工程门禁达到合入条件,候选已由队列合入本地 `dev`(`7eb9477d9edffd3f39aa7026a874169c6efb190b`)。这不是产品链路验收通过。
未完成项:
- `.doc` 由进行中的 `quality-gate-heading-deploy-2026-09-28` 与 `nightly-advance-land-2026-09-28` 占用,本报告未能随 `docs(test)` 提交。
- `internal/coordinator` 与 `internal/bizdev` 由进行中的 `controlled-projection-project-binding-2026-09-28` 占用。本任务没有改 `engine_task.go`。会话已把 `ChatSessionID` 和数字用户 ID 放进上下文;该任务的分支会把 `ChatSessionID` 抄进 `SessionID`。`StageKey` 保持空:非空会改写文档阶段解析,并把其他阶段的可共享对话滤成不可见。`ClientTurnID` 仍未进入任务请求。`dialogue_inject.go` 尚未把 `TurnCount` 等统计抄进小队对话包,因此成功注入时 README 先不写「滤除 0」。
- 重载 `agent-server` 需要 `env:dev` 租约,本任务没有该能力。当前 `:8080` 仍是合入前的进程。
下次在占用解除并拿到 dev 环境租约后:重编译并重载 dev 后端,用测试员工打开测试项目确认流程受控为 7 份,再发起一次调研,核对工作区 `context/dialogue` 不再是项目未绑定占位。