docs(agent-specs): 同步 2.0.0 S4/S5 计划口径

This commit is contained in:
zizi 2026-07-08 12:33:51 +08:00
parent 6dcabf69fb
commit 9ebf76cb0c
3 changed files with 15 additions and 6 deletions

View File

@ -269,3 +269,5 @@ P1R Account Stage A 解锁执行版 final review 进展fresh scope final re-c
P1R Account Stage A 解锁执行版 narrow final re-checkSaganFAIL1 个 P1 已按收敛要求修订quota worker retry / lease 恢复状态路径不再二选一,已冻结为初次 claim 从 `queued` 进入 `processing`retryable 失败保持 quota request 为 `processing` 并只推进 integration call 的 `retry_count/next_retry_at/errorCode/errorMessage`,下一轮 claim 只允许 `processing + next_retry_at <= now` 的恢复路径HTTP+DB / focused tests 也改为按该唯一路径断言 double-claim、runtime unavailable allowed-delta、finalize conflict、lease 恢复和 maxAttempts terminal failed。Sagan 已确认 Maven `-am` 与 final review 起点基线两个反馈关闭。当前仍只改文档,未修改 OpenAPI、scanner、coverage report、业务实现、SQL migration 或测试代码;下一步必须基于最新版重新做 feasibility/testing final re-checkPASS 前不得 implementation 或 completed promotion。
P1R Account Stage A 解锁执行版 final review 已收口fresh feasibility/testing final re-checkVoltaPASS无 P0/P1/P2 findingsVolta 确认 Sagan 唯一 P1 已关闭,执行版已冻结唯一状态路径:初次 claim 从 `queued` 到 `processing`retryable / runtime unavailable / timeout / 外部 5xx 的 `finalizeRetryable` 必须保持 quota request 为 `processing`,只推进 integration call 的 `retry_count/next_retry_at/errorCode/errorMessage`,下一轮 claim 只允许 `processing + next_retry_at <= now`;测试要求覆盖同一路径的 double-claim、runtime unavailable allowed-delta 且 request 保持 `processing`、finalize conflict、lease 恢复、maxAttempts terminal failed。本轮 final gate 结果为 scope final PASSMaxwell+ feasibility/testing final PASSVolta。当前 Stage A 执行版可进入用户批准后的 implementation 准备,但仍不是 implementation approved也不是 completed approval未获用户明确批准前不得修改业务实现、SQL、测试、OpenAPI、scanner、coverage report 或 completed allowlist。
2.0.0 单人版计划文档同步补记(2026-07-08):前一提交 `6dcabf69 feat(solo): 收口治理入口并裁剪 studio 表面` 已包含 S4/S5 相关代码、总账与模块 `.agent` 回写,但未把 `docs/agent-specs/2026-07-07-2.0.0单人版改造-execution.md`、`docs/agent-specs/2026-07-07-2.0.0单人版改造-review.md` 和本目录 `.agent` 一起提交。已补齐两项计划口径:其一,S4 除 yudao 九项 `enable=false` 与 yaml 明文 key 清理外,还必须显式关闭 Spring AI Alibaba/DashScope 自装配(`spring.ai.dashscope.agent.enabled=false` 与 `spring.ai.model.*=none`),并由 `SoloExternalAiProviderGateTest` 覆盖;其二,S5 studio 路由/侧栏/account/knowledge 裁剪与 route-only Playwright 已落地,但 MSW-off 创作主线 e2e 仍因标准后端启动的 Flyway V1 function owner mismatch 未完成,不得把 S5 标记为完成。Dify Dataset 拓扑裁决已在 review §5.2 与 execution S6 保持一致:工作区级 Datasets API key 是管理钥匙,生产至少区分全局公共 dataset 与作品独立 dataset,禁止把公共资料和作品私有资料混进单一 dataset 后仅靠 metadata 当安全边界。下一会话优先修 live 后端/测试库 owner 口径并补跑创作主线 e2e。

View File

@ -122,13 +122,14 @@ flowchart LR
**动作**
1. **yudao 厂商脚手架关停(review §5.1.5)**:`muse-module-ai-server/src/main/resources/application.yaml` 中 gemini/doubao/hunyuan/siliconflow/xinghuo/baichuan/midjourney/suno/web-search 九项 `enable: true` 全部改 `false`,**明文 API key 全部移除**改 `${ENV:}` 占位(注意脚手架是 `.enable`,newApi/dify 是 `.enabled`,勿混);向用户提示自查轮换已入 git 历史的 key。
2. **启动断言**:新增 `SoloExternalAiProviderGateTest`(muse-server 测试,进 local 层):断言 ApplicationContext 中不存在 gemini/doubao 等厂商 ChatModel/客户端 Bean(白名单仅 Dify 与保留未配置的 New-API adapter 壳),防配置回漂。
3. **member 固化**:核对并把「`muse.account.new-api.enabled=false`、全部多用户 worker enabled=false(默认值)」写入单人部署配置样例(S9 的 compose env)与部署手册;代码不动;entitlement/投影/导出的 `@ConditionalOnMissingBean` 兜底行为各补一条现状断言(有则免)。
4. **租户与登录**:确认 `muse.tenant.enable: true` 不动、部署固定 `tenant-id=1`;核查 studio `LoginPage` 无注册/找回等多用户入口(有则随 S5 移除)。
5. **admin 前端**:`muse-admin/apps/web-antd/src/router/routes/modules/muse.ts` 给「市场治理」「用户与权限」两条加 `hideInMenu: true`;`views/muse/newapi/index.vue` 移除网关绑定与额度配置两个写命令表单(保留本地用量只读观测),补「无写入口」测试断言;核查 yudao demo 静态路由模块(`leave.ts/pay.ts/ai.ts/bpm.ts/member.ts`)是否有顶级菜单漏出,漏则一并 hideInMenu。
6. **system_menu 数据脚本**:产出幂等 SQL(停用 用户/角色/租户/部门/岗位(保留菜单管理与 admin 自身账号改密)、会员中心、支付、公众号、BPM、yudao-AI 娱乐面菜单;含反向恢复脚本),存 `muse-cloud/sql/solo/`,随部署手册引用,**不直接执行到共享 dev 库**(部署期动作)。
2. **Spring AI Alibaba/DashScope 自装配关停(2026-07-08 执行补充)**:仅清掉 yudao 九项 `enable` 不够,`DashScopeAgentAutoConfiguration` 在默认配置下仍可能创建外部 provider Bean。单人配置必须显式写入 `spring.ai.dashscope.agent.enabled=false`,并把 `spring.ai.model.chat``spring.ai.model.embedding``spring.ai.model.image``spring.ai.model.rerank``spring.ai.model.video``spring.ai.model.audio.speech``spring.ai.model.audio.transcription` 设为 `none``SoloExternalAiProviderGateTest` 必须覆盖 DashScope agent/模型自装配 Bean,防止后续升级回漂。
3. **启动断言**:新增 `SoloExternalAiProviderGateTest`(muse-server 测试,进 local 层):断言 ApplicationContext 中不存在 gemini/doubao 等厂商 ChatModel/客户端 Bean(白名单仅 Dify 与保留未配置的 New-API adapter 壳),防配置回漂。
4. **member 固化**:核对并把「`muse.account.new-api.enabled=false`、全部多用户 worker enabled=false(默认值)」写入单人部署配置样例(S9 的 compose env)与部署手册;代码不动;entitlement/投影/导出的 `@ConditionalOnMissingBean` 兜底行为各补一条现状断言(有则免)。
5. **租户与登录**:确认 `muse.tenant.enable: true` 不动、部署固定 `tenant-id=1`;核查 studio `LoginPage` 无注册/找回等多用户入口(有则随 S5 移除)。
6. **admin 前端**:`muse-admin/apps/web-antd/src/router/routes/modules/muse.ts` 给「市场治理」「用户与权限」两条加 `hideInMenu: true`;`views/muse/newapi/index.vue` 移除网关绑定与额度配置两个写命令表单(保留本地用量只读观测),补「无写入口」测试断言;核查 yudao demo 静态路由模块(`leave.ts/pay.ts/ai.ts/bpm.ts/member.ts`)是否有顶级菜单漏出,漏则一并 hideInMenu。
7. **system_menu 数据脚本**:产出幂等 SQL(停用 用户/角色/租户/部门/岗位(保留菜单管理与 admin 自身账号改密)、会员中心、支付、公众号、BPM、yudao-AI 娱乐面菜单;含反向恢复脚本),存 `muse-cloud/sql/solo/`,随部署手册引用,**不直接执行到共享 dev 库**(部署期动作)。
**验收**:local 全绿(含新增门禁);`grep -rn "api-key: sk-\|api-key: AIza" muse-cloud/**/application*.yaml` 零命中;admin `vitest/typecheck` 绿 + newapi 页无写入口断言绿 + 菜单隐藏断言绿。
**验收**:local 全绿(含新增门禁);`grep -rn "api-key: sk-\|api-key: AIza" muse-cloud/**/application*.yaml` 零命中;DashScope/Spring AI 外部模型自装配无 Bean 证据;admin `vitest/typecheck` 绿 + newapi 页无写入口断言绿 + 菜单隐藏断言绿。
**回滚**:逐项 revert;menu SQL 有反向脚本。
---
@ -148,6 +149,8 @@ flowchart LR
5. 规划候选/文风检查:**无前端动作**(现状无 UI 入口,review §2.9);1b 再建。
6. e2e:market 相关 spec(含 `market-install-kb-retrieval.spec.ts` 的 fixme)加 skip tag 隔离;MSW handlers 保留(DEV only);创作主线 spec 全量复跑。
**本轮交接(2026-07-08)**:S5 已完成 studio 路由/侧栏/account/knowledge 的前端裁剪与 route-only Playwright 证据,并隔离 17 个 market 相关 e2e spec;但标准后端启动仍被 `muse_local/muse_dev` Flyway V1 function owner mismatch 卡住,所以 MSW-off 创作主线 e2e 尚未完成。route-only 证据只能证明 `/market``/handoff/land/x` 等入口不可达,不能替代创作主线验收。下一会话先修 live 后端/测试库 owner 口径或改用明确的 live `_test` 启动配方,再跑候选采纳/导入/导出/知识/图谱/绑定/agent 生命周期 e2e,通过后才可把 S5 标为完成。
**验收**:`tsc -b``vitest run``vite build` 绿;MSW-off Playwright 创作主线 spec(候选采纳/导入向导/导出下载/知识草稿/图谱/绑定/agent 生命周期)全绿;手输 `/market``/handoff/land/x` 落 404/重定向;隔离 spec 计数留档。
**回滚**:revert 提交(文件在 git 历史)。

View File

@ -140,6 +140,8 @@ flowchart TB
4. **生成链完整性护栏**。Dify chat 成功响应的 finishReason 恒为常量,不能作为完整性信号;生成链按 S7.0 裁决的通路补完整性校验(结构化 envelope/长度合理性),截断不得静默进入候选。
5. **New-API 与 yudao 脚手架退出**`muse.ai.new-api.*` 不再配置(adapter 代码保留,未配置即 Unavailable fail-closed);member 管理口/配额 worker 维持默认关闭;usage 归因语义按 §3 降级。**yudao 厂商脚手架 9 项 `enable: true` 全部改 false、明文 API key 从 yaml 移除(换 env 占位),并加启动断言「除 Dify 外无外部 AI provider Bean」**;泄露过的 key 提示用户自查轮换(疑似上游 demo key,不由 agent 代决)。注意两套开关命名不同:厂商脚手架是 `.enable`(String),newApi/dify 是 `.enabled`(boolean),配置时勿混。
**执行补充(2026-07-08)**:Spring AI Alibaba/DashScope 不是 yudao 九项脚手架的一部分,只清 `.enable` 与明文 key 不足以证明「除 Dify 外无外部 AI provider Bean」。S4 必须显式关闭 `spring.ai.dashscope.agent.enabled`,并把 `spring.ai.model.chat/embedding/image/rerank/video/audio.*` 设为 `none`;启动断言必须覆盖 DashScope 自装配,否则 live 后端可能在无 New-API/yudao key 的情况下仍触发 DashScope agent Bean。
超时口径:Dify blocking 读超时(现 90s)对长章节生成偏紧,1a 上调至与 New-API 同档(180s 总预算内),provider 级 streaming 留到后续(协议已预留,不进 1a)。
### 5.2 知识运行时切换 Dify Datasets
@ -192,6 +194,8 @@ flowchart TB
- 规划候选/文风检查:**studio 现状无 UI 入口(§2.9),1a 无前端动作**;1b 实现后端时一并新建 UI。1.0.0 缺口清单 P0-11 的「studio 有死入口」表述在 S10 订正。
- market 相关 e2e spec 与 MSW handlers:标记隔离(skip/tag),不删。
**执行交接(2026-07-08)**:本轮 studio 路由/侧栏/account/knowledge 裁剪已经落地,route-only Playwright 可证明市场与 handoff 入口不可达;但这不是 S5 完成证据。S5 的完成门仍是 MSW-off 创作主线 e2e 全绿,当前受标准后端启动的 Flyway V1 function owner mismatch 阻塞,需在下一轮修复 live 后端启动口径后补跑。
**muse-admin**:
- `muse.ts` 静态菜单:「市场治理」「用户与权限」加 hideInMenu(**不删路由**,故 `muse.test.ts` 路由注册断言不受影响)。