From 9ebf76cb0c56e8283673c1b48e4fa8115cf219ef Mon Sep 17 00:00:00 2001 From: zizi Date: Wed, 8 Jul 2026 12:33:51 +0800 Subject: [PATCH] =?UTF-8?q?docs(agent-specs):=20=E5=90=8C=E6=AD=A5=202.0.0?= =?UTF-8?q?=20S4/S5=20=E8=AE=A1=E5=88=92=E5=8F=A3=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/agent-specs/.agent | 2 ++ .../2026-07-07-2.0.0单人版改造-execution.md | 15 +++++++++------ .../2026-07-07-2.0.0单人版改造-review.md | 4 ++++ 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/docs/agent-specs/.agent b/docs/agent-specs/.agent index 023f9170..fbf447a1 100644 --- a/docs/agent-specs/.agent +++ b/docs/agent-specs/.agent @@ -269,3 +269,5 @@ P1R Account Stage A 解锁执行版 final review 进展:fresh scope final re-c P1R Account Stage A 解锁执行版 narrow final re-check(Sagan)FAIL,1 个 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-check,PASS 前不得 implementation 或 completed promotion。 P1R Account Stage A 解锁执行版 final review 已收口:fresh feasibility/testing final re-check(Volta)PASS,无 P0/P1/P2 findings;Volta 确认 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 PASS(Maxwell)+ feasibility/testing final PASS(Volta)。当前 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。 diff --git a/docs/agent-specs/2026-07-07-2.0.0单人版改造-execution.md b/docs/agent-specs/2026-07-07-2.0.0单人版改造-execution.md index 0eca062a..058956d3 100644 --- a/docs/agent-specs/2026-07-07-2.0.0单人版改造-execution.md +++ b/docs/agent-specs/2026-07-07-2.0.0单人版改造-execution.md @@ -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 历史)。 diff --git a/docs/agent-specs/2026-07-07-2.0.0单人版改造-review.md b/docs/agent-specs/2026-07-07-2.0.0单人版改造-review.md index cc67360a..0d554b83 100644 --- a/docs/agent-specs/2026-07-07-2.0.0单人版改造-review.md +++ b/docs/agent-specs/2026-07-07-2.0.0单人版改造-review.md @@ -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` 路由注册断言不受影响)。